<?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>238740</bug_id>
          
          <creation_ts>2022-04-04 08:50:43 -0700</creation_ts>
          <short_desc>[WK2] Enable more efficient encoding of synchronous-message reply arguments</short_desc>
          <delta_ts>2022-04-18 23:21:58 -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=239482</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>
          
          <blocked>239038</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek (Reviews)">zdobersek</reporter>
          <assigned_to name="Zan Dobersek (Reviews)">zdobersek</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>dpino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1857870</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek (Reviews)">zdobersek</who>
    <bug_when>2022-04-04 08:50:43 -0700</bug_when>
    <thetext>[WK2] Enable more efficient encoding of synchronous-message reply arguments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1857871</commentid>
    <comment_count>1</comment_count>
      <attachid>456575</attachid>
    <who name="Zan Dobersek (Reviews)">zdobersek</who>
    <bug_when>2022-04-04 08:51:44 -0700</bug_when>
    <thetext>Created attachment 456575
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860099</commentid>
    <comment_count>2</comment_count>
      <attachid>457196</attachid>
    <who name="Zan Dobersek (Reviews)">zdobersek</who>
    <bug_when>2022-04-10 05:13:43 -0700</bug_when>
    <thetext>Created attachment 457196
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860107</commentid>
    <comment_count>3</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-10 06:51:21 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek (Reviews) from comment #2)
&gt; Created attachment 457196 [details]
&gt; Patch

This works as intended when going through StreamServerConnection::sendSyncReply(), but not for sync messages on a basic Connection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860129</commentid>
    <comment_count>4</comment_count>
      <attachid>457204</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-10 11:01:10 -0700</bug_when>
    <thetext>Created attachment 457204
Patch

Now includes the same magic for Connection-based reply sending.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860262</commentid>
    <comment_count>5</comment_count>
      <attachid>457204</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-04-11 05:52:35 -0700</bug_when>
    <thetext>Comment on attachment 457204
Patch

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

good stuff.

I&apos;m not 100% sure if my suggestions all make sense, but maybe some simplification of the templates could be possible still.

Incidentally I&apos;m working on slowly, or dreaming about, supporting rvalue types in the send side, see the other bugs

&gt; Source/WebKit/Platform/IPC/HandleMessage.h:177
&gt; +struct CompletionHandlerTypeDeduction;

If I understand correctly:
This function is used for two purposes
1) extract the message handler function type
2) extract the completion handler type.

Would it make sense to have separate names for these? These seem two different tasks..
See also below..

&gt; Source/WebKit/Platform/IPC/HandleMessage.h:183
&gt; +template&lt;typename Result, typename ClassType, typename... ParameterTypes&gt;

these templates are textually rather dense.
You could check if you can rename the template parameter types according to the existing naming style of the file.
E.g. some ideas:
 Return could be R or Out
 ParameterTypes could be named Args or In
 ClassType could be C

&gt; Source/WebKit/Platform/IPC/HandleMessage.h:200
&gt; +struct CompletionHandlerTypeDeduction&lt;CompletionHandler&lt;Result(ParameterTypes...)&gt;&gt; {

This appears to be an implementation of a CompletionHandler feature:
- What is the return value of the completion handler?
- What is the parameters tuple of the completion handler?

It doesn&apos;t really make sense to write this template from scratch every time this is needed..
Would this make sense to be added to CompletionHandler itself?
Eg.
CompletionHandler::In = ..
CompleitonHandler::Out = ..

&gt; Source/WebKit/Platform/IPC/HandleMessage.h:231
&gt; +        return std::is_void_v&lt;HandlerReturnType&gt; &amp;&amp; std::is_void_v&lt;ReplyReturnType&gt;

If it simplifies things, I don&apos;t think it&apos;s especially crucial to assert that the completionhandler has void return value

it is not useful to assert that the ReplyReturnType has void value, as that&apos;s part of what is being autogenerated and as such &quot;always correct&quot;.

&gt; Source/WebKit/Platform/IPC/HandleMessage.h:280
&gt; +

You might be able to simplify some of the dense templates or remove them by thinking about the problem this way:

static_assert(std::is_same_v&lt;RemoveCVRefsFromTuple&lt;CompletionHandlerFromMF::InTypes&gt;, T::ReplyArguments)

e.g. you figure out a way to go from MF to reply arguments list, and then you check &quot;is the reply arguments list user has compatible with the reply arguments list the message reply has&quot;.

&gt; Source/WebKit/Platform/IPC/StreamServerConnection.h:138
&gt; +                if ((messageEncoder &lt;&lt; ... &lt;&lt; std::forward&lt;Arguments&gt;(arguments)))

this one cannot pass as rvalue...

&gt; Source/WebKit/Platform/IPC/StreamServerConnection.h:146
&gt; +    (encoder.get() &lt;&lt; ... &lt;&lt; std::forward&lt;Arguments&gt;(arguments));

.. as the same object may be accessed here.

There&apos;s no optimization opportunities above, as the objects are by nature of &quot;data&quot; kind, as the stream is just a blob of memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860298</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-04-11 08:51:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/91567779&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860572</commentid>
    <comment_count>7</comment_count>
      <attachid>457204</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-04-11 23:12:17 -0700</bug_when>
    <thetext>Comment on attachment 457204
Patch

This is looks very good but marking as r- just for Zan to see if it&apos;s possible to simplify the templates.

Another suggestion:
In case it&apos;s not useful to add the CompletionHandler::InTuple and a new template is used:
When doing the template for getting the CompletionHandler arguments as tuple, you could see if you can make the template match &quot;something that is invokable&quot; instead of &quot;something that is a CompletionHandler&quot;. This way it would be more re-usable.

std::invoke_result can extract the result type out of the &quot;something that&apos;s invokable&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860596</commentid>
    <comment_count>8</comment_count>
      <attachid>457204</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-11 23:58:50 -0700</bug_when>
    <thetext>Comment on attachment 457204
Patch

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

&gt;&gt; Source/WebKit/Platform/IPC/HandleMessage.h:177
&gt;&gt; +struct CompletionHandlerTypeDeduction;
&gt; 
&gt; If I understand correctly:
&gt; This function is used for two purposes
&gt; 1) extract the message handler function type
&gt; 2) extract the completion handler type.
&gt; 
&gt; Would it make sense to have separate names for these? These seem two different tasks..
&gt; See also below..

OK.

&gt;&gt; Source/WebKit/Platform/IPC/HandleMessage.h:183
&gt;&gt; +template&lt;typename Result, typename ClassType, typename... ParameterTypes&gt;
&gt; 
&gt; these templates are textually rather dense.
&gt; You could check if you can rename the template parameter types according to the existing naming style of the file.
&gt; E.g. some ideas:
&gt;  Return could be R or Out
&gt;  ParameterTypes could be named Args or In
&gt;  ClassType could be C

OK.

&gt;&gt; Source/WebKit/Platform/IPC/HandleMessage.h:200
&gt;&gt; +struct CompletionHandlerTypeDeduction&lt;CompletionHandler&lt;Result(ParameterTypes...)&gt;&gt; {
&gt; 
&gt; This appears to be an implementation of a CompletionHandler feature:
&gt; - What is the return value of the completion handler?
&gt; - What is the parameters tuple of the completion handler?
&gt; 
&gt; It doesn&apos;t really make sense to write this template from scratch every time this is needed..
&gt; Would this make sense to be added to CompletionHandler itself?
&gt; Eg.
&gt; CompletionHandler::In = ..
&gt; CompleitonHandler::Out = ..

OK.

&gt;&gt; Source/WebKit/Platform/IPC/HandleMessage.h:231
&gt;&gt; +        return std::is_void_v&lt;HandlerReturnType&gt; &amp;&amp; std::is_void_v&lt;ReplyReturnType&gt;
&gt; 
&gt; If it simplifies things, I don&apos;t think it&apos;s especially crucial to assert that the completionhandler has void return value
&gt; 
&gt; it is not useful to assert that the ReplyReturnType has void value, as that&apos;s part of what is being autogenerated and as such &quot;always correct&quot;.

I think I can check/enforce the void return type in the template specialization, i.e. not bother with the Result type either in the specialization or here.

&gt;&gt; Source/WebKit/Platform/IPC/StreamServerConnection.h:146
&gt;&gt; +    (encoder.get() &lt;&lt; ... &lt;&lt; std::forward&lt;Arguments&gt;(arguments));
&gt; 
&gt; .. as the same object may be accessed here.
&gt; 
&gt; There&apos;s no optimization opportunities above, as the objects are by nature of &quot;data&quot; kind, as the stream is just a blob of memory.

Ugh, my bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860597</commentid>
    <comment_count>9</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-12 00:02:44 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #7)
&gt; Another suggestion:
&gt; In case it&apos;s not useful to add the CompletionHandler::InTuple and a new
&gt; template is used:
&gt; When doing the template for getting the CompletionHandler arguments as
&gt; tuple, you could see if you can make the template match &quot;something that is
&gt; invokable&quot; instead of &quot;something that is a CompletionHandler&quot;. This way it
&gt; would be more re-usable.
&gt; 
&gt; std::invoke_result can extract the result type out of the &quot;something that&apos;s
&gt; invokable&quot;.

I would enforce detecting a CompletionHandler object since the implementation of it tests that the invocation was done exactly once, as would be required for an IPC reply. CompletionHandler itself is a wrapper around any callable object, so I would just leave to it to handle everything, and place type aliases on the class to more easily access the return and parameter types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860668</commentid>
    <comment_count>10</comment_count>
      <attachid>457331</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-12 07:46:09 -0700</bug_when>
    <thetext>Created attachment 457331
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861476</commentid>
    <comment_count>11</comment_count>
      <attachid>457331</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-14 07:12:16 -0700</bug_when>
    <thetext>Comment on attachment 457331
Patch

Clearing flags on attachment: 457331

Committed r292863 (249634@trunk): &lt;https://commits.webkit.org/249634@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861477</commentid>
    <comment_count>12</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-14 07:12:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861546</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-04-14 10:00:14 -0700</bug_when>
    <thetext>Hmmm, GCC 12 doesn&apos;t like it:

In file included from /home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp:33,
                 from /home/mcatanzaro/Projects/WebKit/WebKitBuild/GNOME-gtk3/DerivedSources/WebKit/unified-sources/UnifiedSource-88d1702b-2.cpp:7:
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h: In instantiation of ‘static constexpr bool IPC::CompletionHandlerValidation::matchingTypes() [with CHType = WTF::CompletionHandler&lt;void(const WebKit::WebBackForwardListCounts&amp;)&gt;; ReplyType = WTF::CompletionHandler&lt;void(const WebKit::WebBackForwardListCounts&amp;)&gt;]’:
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:275:121:   required from ‘bool IPC::handleMessageSynchronous(Connection&amp;, Decoder&amp;, WTF::UniqueRef&lt;Encoder&gt;&amp;, C*, MF) [with T = Messages::WebPageProxy::BackForwardGoToItem; C = WebKit::ProvisionalPageProxy; MF = void (WebKit::ProvisionalPageProxy::*)(const WebCore::BackForwardItemIdentifier&amp;, WTF::CompletionHandler&lt;void(const WebKit::WebBackForwardListCounts&amp;)&gt;&amp;&amp;)]’
/home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp:609:90:   required from here
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:218:15: error: no type named ‘InTypes’ in ‘class WTF::CompletionHandler&lt;void(const WebKit::WebBackForwardListCounts&amp;)&gt;’
  218 |         using CHInTypes = typename CHType::InTypes;
      |               ^~~~~~~~~
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:219:15: error: no type named ‘InTypes’ in ‘class WTF::CompletionHandler&lt;void(const WebKit::WebBackForwardListCounts&amp;)&gt;’
  219 |         using ReplyInTypes = typename ReplyType::InTypes;
      |               ^~~~~~~~~~~~
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:223:90: error: no type named ‘InTypes’ in ‘class WTF::CompletionHandler&lt;void(const WebKit::WebBackForwardListCounts&amp;)&gt;’
  223 |             &amp;&amp; matchingParameters&lt;CHInTypes, ReplyInTypes&gt;(std::make_index_sequence&lt;std::tuple_size_v&lt;CHInTypes&gt;&gt;());
      |                                                                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h: In instantiation of ‘bool IPC::handleMessageSynchronous(Connection&amp;, Decoder&amp;, WTF::UniqueRef&lt;Encoder&gt;&amp;, C*, MF) [with T = Messages::WebPageProxy::BackForwardGoToItem; C = WebKit::ProvisionalPageProxy; MF = void (WebKit::ProvisionalPageProxy::*)(const WebCore::BackForwardItemIdentifier&amp;, WTF::CompletionHandler&lt;void(const WebKit::WebBackForwardListCounts&amp;)&gt;&amp;&amp;)]’:
/home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp:609:90:   required from here
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:275:121: error: non-constant condition for static assertion
  275 |     static_assert(CompletionHandlerValidation::template matchingTypes&lt;CompletionHandlerFromMF, typename T::DelayedReply&gt;());
      |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:275:121:   in ‘constexpr’ expansion of ‘IPC::CompletionHandlerValidation::matchingTypes&lt;WTF::CompletionHandler&lt;void(const WebKit::WebBackForwardListCounts&amp;)&gt;, WTF::CompletionHandler&lt;void(const WebKit::WebBackForwardListCounts&amp;)&gt; &gt;()’
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:275:121: error: ‘constexpr’ call flows off the end of the function
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h: In instantiation of ‘static constexpr bool IPC::CompletionHandlerValidation::matchingTypes() [with CHType = WTF::CompletionHandler&lt;void(const WebKit::PolicyDecision&amp;)&gt;; ReplyType = WTF::CompletionHandler&lt;void(const WebKit::PolicyDecision&amp;)&gt;]’:
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:275:121:   required from ‘bool IPC::handleMessageSynchronous(Connection&amp;, Decoder&amp;, WTF::UniqueRef&lt;Encoder&gt;&amp;, C*, MF) [with T = Messages::WebPageProxy::DecidePolicyForNavigationActionSync; C = WebKit::ProvisionalPageProxy; MF = void (WebKit::ProvisionalPageProxy::*)(WTF::ObjectIdentifier&lt;WebCore::FrameIdentifierType&gt;, bool, WebKit::FrameInfoData&amp;&amp;, WebCore::PolicyCheckIdentifier, long unsigned int, WebKit::NavigationActionData&amp;&amp;, WebKit::FrameInfoData&amp;&amp;, std::optional&lt;WTF::ObjectIdentifier&lt;WebKit::WebPageProxyIdentifierType&gt; &gt;, const WebCore::ResourceRequest&amp;, WebCore::ResourceRequest&amp;&amp;, FormDataReference&amp;&amp;, WebCore::ResourceResponse&amp;&amp;, const WebKit::UserData&amp;, WTF::CompletionHandler&lt;void(const WebKit::PolicyDecision&amp;)&gt;&amp;&amp;)]’
/home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp:612:106:   required from here
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:218:15: error: no type named ‘InTypes’ in ‘class WTF::CompletionHandler&lt;void(const WebKit::PolicyDecision&amp;)&gt;’
  218 |         using CHInTypes = typename CHType::InTypes;
      |               ^~~~~~~~~
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:219:15: error: no type named ‘InTypes’ in ‘class WTF::CompletionHandler&lt;void(const WebKit::PolicyDecision&amp;)&gt;’
  219 |         using ReplyInTypes = typename ReplyType::InTypes;
      |               ^~~~~~~~~~~~
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:223:90: error: no type named ‘InTypes’ in ‘class WTF::CompletionHandler&lt;void(const WebKit::PolicyDecision&amp;)&gt;’
  223 |             &amp;&amp; matchingParameters&lt;CHInTypes, ReplyInTypes&gt;(std::make_index_sequence&lt;std::tuple_size_v&lt;CHInTypes&gt;&gt;());
      |                                                                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h: In instantiation of ‘bool IPC::handleMessageSynchronous(Connection&amp;, Decoder&amp;, WTF::UniqueRef&lt;Encoder&gt;&amp;, C*, MF) [with T = Messages::WebPageProxy::DecidePolicyForNavigationActionSync; C = WebKit::ProvisionalPageProxy; MF = void (WebKit::ProvisionalPageProxy::*)(WTF::ObjectIdentifier&lt;WebCore::FrameIdentifierType&gt;, bool, WebKit::FrameInfoData&amp;&amp;, WebCore::PolicyCheckIdentifier, long unsigned int, WebKit::NavigationActionData&amp;&amp;, WebKit::FrameInfoData&amp;&amp;, std::optional&lt;WTF::ObjectIdentifier&lt;WebKit::WebPageProxyIdentifierType&gt; &gt;, const WebCore::ResourceRequest&amp;, WebCore::ResourceRequest&amp;&amp;, FormDataReference&amp;&amp;, WebCore::ResourceResponse&amp;&amp;, const WebKit::UserData&amp;, WTF::CompletionHandler&lt;void(const WebKit::PolicyDecision&amp;)&gt;&amp;&amp;)]’:
/home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp:612:106:   required from here
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:275:121: error: non-constant condition for static assertion
  275 |     static_assert(CompletionHandlerValidation::template matchingTypes&lt;CompletionHandlerFromMF, typename T::DelayedReply&gt;());
      |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:275:121:   in ‘constexpr’ expansion of ‘IPC::CompletionHandlerValidation::matchingTypes&lt;WTF::CompletionHandler&lt;void(const WebKit::PolicyDecision&amp;)&gt;, WTF::CompletionHandler&lt;void(const WebKit::PolicyDecision&amp;)&gt; &gt;()’
/home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:275:121: error: ‘constexpr’ call flows off the end of the function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861592</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-04-14 12:27:17 -0700</bug_when>
    <thetext>Mmmmm, maybe this was already fixed? It&apos;s working fine for me now, but I didn&apos;t do a clean build, so it&apos;s not an incremental build issue. Odd. Whatever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862186</commentid>
    <comment_count>15</comment_count>
    <who name="Diego Pino">dpino</who>
    <bug_when>2022-04-17 17:53:21 -0700</bug_when>
    <thetext>This patch broke compilation in GCC8.3:

FAILED: Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/WebFullScreenManagerProxyMessageReceiver.cpp.o
/bin/ccache /usr/lib/ccache/g++-8  -DBUILDING_GTK__=1 -DBUILDING_WEBKIT -DBUILDING_WITH_CMAKE=1 -DBUILDING_WebKit -DBWRAP_EXECUTABLE=\&quot;/bin/bwrap\&quot; -DDATADIR=\&quot;/usr/local/share\&quot; -DDBUS_PROXY_EXECUTABLE=\&quot;/bin/xdg-dbus-proxy\&quot; -DGETTEXT_PACKAGE=\&quot;WebKit2GTK-4.0\&quot; -DHAVE_CONFIG_H=1 -DJSC_GLIB_API_ENABLED -DLIBDIR=\&quot;/usr/local/lib\
In file included from DerivedSources/WebKit/WebFullScreenManagerProxyMessageReceiver.cpp:30:
../../Source/WebKit/Platform/IPC/HandleMessage.h:186:23: error: ‘remove_cvref_t’ in namespace ‘std’ does not name a template type
     using Type = std::remove_cvref_t&lt;typename std::tuple_element_t&lt;N, std::tuple&lt;Args...&gt;&gt;&gt;;
                       ^~~~~~~~~~~~~~
../../Source/WebKit/Platform/IPC/HandleMessage.h:186:18: note: suggested alternative: ‘remove_cv_t’
     using Type = std::remove_cvref_t&lt;typename std::tuple_element_t&lt;N, std::tuple&lt;Args...&gt;&gt;&gt;;
                  ^~~

std::remove_cvref_t is only supported since &gt;=GCC9. See:

  https://en.cppreference.com/w/cpp/compiler_support/20

GCC8.3 is used by Debian Stable which we still need to support until September 2022.

Please find an alternative implementation to std::remove_cvref_t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862223</commentid>
    <comment_count>16</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-18 05:10:32 -0700</bug_when>
    <thetext>(In reply to Diego Pino from comment #15)
&gt; Please find an alternative implementation to std::remove_cvref_t.

Does std::remove_

Try std::remove_cvref&lt;typename std::tuple_element_t&lt;N, std::tuple&lt;Args...&gt;&gt;&gt;::type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862266</commentid>
    <comment_count>17</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2022-04-18 11:08:02 -0700</bug_when>
    <thetext>(In reply to Diego Pino from comment #15)
&gt; This patch broke compilation in GCC8.3:
&gt; 
&gt; FAILED:
&gt; Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/
&gt; WebFullScreenManagerProxyMessageReceiver.cpp.o
&gt; /bin/ccache /usr/lib/ccache/g++-8  -DBUILDING_GTK__=1 -DBUILDING_WEBKIT
&gt; -DBUILDING_WITH_CMAKE=1 -DBUILDING_WebKit -DBWRAP_EXECUTABLE=\&quot;/bin/bwrap\&quot;
&gt; -DDATADIR=\&quot;/usr/local/share\&quot;
&gt; -DDBUS_PROXY_EXECUTABLE=\&quot;/bin/xdg-dbus-proxy\&quot;
&gt; -DGETTEXT_PACKAGE=\&quot;WebKit2GTK-4.0\&quot; -DHAVE_CONFIG_H=1
&gt; -DJSC_GLIB_API_ENABLED -DLIBDIR=\&quot;/usr/local/lib\
&gt; In file included from
&gt; DerivedSources/WebKit/WebFullScreenManagerProxyMessageReceiver.cpp:30:
&gt; ../../Source/WebKit/Platform/IPC/HandleMessage.h:186:23: error:
&gt; ‘remove_cvref_t’ in namespace ‘std’ does not name a template type
&gt;      using Type = std::remove_cvref_t&lt;typename std::tuple_element_t&lt;N,
&gt; std::tuple&lt;Args...&gt;&gt;&gt;;
&gt;                        ^~~~~~~~~~~~~~
&gt; ../../Source/WebKit/Platform/IPC/HandleMessage.h:186:18: note: suggested
&gt; alternative: ‘remove_cv_t’
&gt;      using Type = std::remove_cvref_t&lt;typename std::tuple_element_t&lt;N,
&gt; std::tuple&lt;Args...&gt;&gt;&gt;;
&gt;                   ^~~
&gt; 
&gt; std::remove_cvref_t is only supported since &gt;=GCC9. See:
&gt; 
&gt;   https://en.cppreference.com/w/cpp/compiler_support/20
&gt; 
&gt; GCC8.3 is used by Debian Stable which we still need to support until
&gt; September 2022.
&gt; 
&gt; Please find an alternative implementation to std::remove_cvref_t.

We could do a check for it and then if not present we use the suggested implementation from https://en.cppreference.com/w/cpp/types/remove_cvref and add that to wtf/StdLibExtras.h

This is what we did on PlayStation since we did not have that file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862433</commentid>
    <comment_count>18</comment_count>
    <who name="Diego Pino">dpino</who>
    <bug_when>2022-04-18 23:21:58 -0700</bug_when>
    <thetext>(In reply to Don Olmstead from comment #17)

&gt; We could do a check for it and then if not present we use the suggested
&gt; implementation from https://en.cppreference.com/w/cpp/types/remove_cvref and
&gt; add that to wtf/StdLibExtras.h
&gt; 
&gt; This is what we did on PlayStation since we did not have that file.

Addressed issue on follow-up bug https://bugs.webkit.org/show_bug.cgi?id=239482</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456575</attachid>
            <date>2022-04-04 08:51:44 -0700</date>
            <delta_ts>2022-04-10 05:13:37 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-238740-20220404175142.patch</filename>
            <type>text/plain</type>
            <size>17079</size>
            <attacher name="Zan Dobersek (Reviews)">zdobersek</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyMjg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ0MTdiMWUyMjk1NTcxYzU0
N2VmNWNhYTU5ZjUwMDYwNjVlYjgwYzQuLjdjOTg5NTg1NzZhMDUwYTc2MDdiOGRiZTk0NTczMzFm
OGU1YmEwOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjItMDQtMDQgIFphbiBEb2Jl
cnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXSzJdIEVuYWJsZSBtb3Jl
IGVmZmljaWVudCBlbmNvZGluZyBvZiBzeW5jaHJvbm91cy1tZXNzYWdlIHJlcGx5IGFyZ3VtZW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM4NzQw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZUNETVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlQ0RNUHJveHk6OmdldFN1cHBvcnRlZENv
bmZpZ3VyYXRpb24pOgorICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNUHJveHku
aDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHk6OmNyZWF0
ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZUlt
YWdlRGVjb2RlckFWRlByb3h5Lmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29k
ZXIuaDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rlcjo6ZW5jb2RlKToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9JUEMvSGFuZGxlTWVzc2FnZS5oOgorICAgICAgICAoSVBDOjpPYmplY3RUeXBlOjop
OgorICAgICAgICAoSVBDOjpDb21wbGV0aW9uSGFuZGxlclZhbGlkYXRpb246Om1hdGNoaW5nUGFy
YW1ldGVycyk6CisgICAgICAgIChJUEM6OkNvbXBsZXRpb25IYW5kbGVyVmFsaWRhdGlvbjo6bWF0
Y2hlc1JlcGx5VHlwZSk6CisgICAgICAgIChJUEM6OmhhbmRsZU1lc3NhZ2VTeW5jaHJvbm91cyk6
CisgICAgICAgIChJUEM6OmhhbmRsZU1lc3NhZ2VTeW5jaHJvbm91c1dhbnRzQ29ubmVjdGlvbik6
CisgICAgICAgIChJUEM6OmhhbmRsZU1lc3NhZ2VBc3luYyk6CisgICAgICAgIChJUEM6OmhhbmRs
ZU1lc3NhZ2VBc3luY1dhbnRzQ29ubmVjdGlvbik6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0
cmVhbVNlcnZlckNvbm5lY3Rpb24uaDoKKyAgICAgICAgKElQQzo6U3RyZWFtU2VydmVyQ29ubmVj
dGlvbjo6c2VuZFN5bmNSZXBseSk6CisKIDIwMjItMDQtMDQgIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBTdHJlYW1DbGllbnRDb25uZWN0aW9uIHNob3Vs
ZCBoYXZlIHdhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZUNETVByb3h5LmNwcAppbmRleCA0NGZjNjg4Yzg0YWZj
MDI0Y2QzNjgyZTBhN2Q3OGEzNjdiODQyNWFjLi4xMjllMDMxY2QzMmI5YTI1ODIxNTcwNDUzOGRi
YzRmYTMyOTU3ZWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEv
UmVtb3RlQ0RNUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9S
ZW1vdGVDRE1Qcm94eS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgc3RkOjpvcHRpb25hbDxTdHJpbmc+
IFJlbW90ZUNETVByb3h5OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25J
ZCkKICAgICByZXR1cm4gbV9wcml2YXRlLT5zYW5pdGl6ZVNlc3Npb25JZChzZXNzaW9uSWQpOwog
fQogCi12b2lkIFJlbW90ZUNETVByb3h5OjpnZXRTdXBwb3J0ZWRDb25maWd1cmF0aW9uKFdlYkNv
cmU6OkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mJiBjb25maWd1cmF0aW9uLCBXZWJDb3JlOjpD
RE1Qcml2YXRlOjpMb2NhbFN0b3JhZ2VBY2Nlc3MgYWNjZXNzLCBXZWJDb3JlOjpDRE1Qcml2YXRl
OjpTdXBwb3J0ZWRDb25maWd1cmF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgUmVtb3Rl
Q0RNUHJveHk6OmdldFN1cHBvcnRlZENvbmZpZ3VyYXRpb24oV2ViQ29yZTo6Q0RNS2V5U3lzdGVt
Q29uZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24sIFdlYkNvcmU6OkNETVByaXZhdGU6OkxvY2Fs
U3RvcmFnZUFjY2VzcyBhY2Nlc3MsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25h
bDxXZWJDb3JlOjpDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uPik+JiYgY2FsbGJhY2spCiB7CiAg
ICAgbV9wcml2YXRlLT5nZXRTdXBwb3J0ZWRDb25maWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJh
dGlvbiksIGFjY2VzcywgV1RGTW92ZShjYWxsYmFjaykpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZUNETVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNUHJveHkuaAppbmRleCBhOGJmMTdiYjJhY2VkYjM4
MWQ3ODNkODkzMzA3YTBjNjkzNjYzOWZhLi4yNDYxNzVlZWU2YjI0MjgyOGU2YTI3OGFhYmUzZTcy
ZDIyYmY4NmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVt
b3RlQ0RNUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3Rl
Q0RNUHJveHkuaApAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgZGlkUmVjZWl2
ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIFVuaXF1ZVJlZjxJ
UEM6OkVuY29kZXI+JikgZmluYWw7CiAKICAgICAvLyBNZXNzYWdlcwotICAgIHZvaWQgZ2V0U3Vw
cG9ydGVkQ29uZmlndXJhdGlvbihXZWJDb3JlOjpDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiYs
IFdlYkNvcmU6OkNETVByaXZhdGU6OkxvY2FsU3RvcmFnZUFjY2VzcywgV2ViQ29yZTo6Q0RNUHJp
dmF0ZTo6U3VwcG9ydGVkQ29uZmlndXJhdGlvbkNhbGxiYWNrJiYpOworICAgIHZvaWQgZ2V0U3Vw
cG9ydGVkQ29uZmlndXJhdGlvbihXZWJDb3JlOjpDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiYs
IFdlYkNvcmU6OkNETVByaXZhdGU6OkxvY2FsU3RvcmFnZUFjY2VzcywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24+
KT4mJik7CiAgICAgdm9pZCBjcmVhdGVJbnN0YW5jZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJl
bW90ZUNETUluc3RhbmNlSWRlbnRpZmllciwgUmVtb3RlQ0RNSW5zdGFuY2VDb25maWd1cmF0aW9u
JiYpPiYmKTsKICAgICB2b2lkIGxvYWRBbmRJbml0aWFsaXplKCk7CiAgICAgdm9pZCBzZXRMb2dJ
ZGVudGlmaWVyKHVpbnQ2NF90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9tZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuY3BwCmluZGV4IDAyZjg1
MDgyZWRhZGNhODA5NDg1NGFjODNhZWQ3MGNiZTJlMGQ0NDAuLmVhYmJjMTQ4ZGRjMmMzODYzY2Fl
N2EzN2M4NGI0NTNlYTM4ZTRlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9tZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5LmNwcApAQCAtMTE0
LDcgKzExNCw3IEBAIHZvaWQgUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHk6OnNldERhdGEoSW1h
Z2VEZWNvZGVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zCiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZnJhbWVDb3VudCwgaW1hZ2VEZWNvZGVyLT5zaXplKCksIGltYWdlRGVjb2Rlci0+aGFzVHJh
Y2soKSwgV1RGTW92ZShmcmFtZUluZm9zKSk7CiB9CiAKLXZvaWQgUmVtb3RlSW1hZ2VEZWNvZGVy
QVZGUHJveHk6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KEltYWdlRGVjb2RlcklkZW50aWZpZXIg
aWRlbnRpZmllciwgc2l6ZV90IGluZGV4LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0
aW9uYWw8V1RGOjpNYWNoU2VuZFJpZ2h0PiYmLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZW1vdGVJbWFnZURlY29kZXJBVkZQcm94
eTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoSW1hZ2VEZWNvZGVySWRlbnRpZmllciBpZGVudGlm
aWVyLCBzaXplX3QgaW5kZXgsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxX
VEY6Ok1hY2hTZW5kUmlnaHQ+JiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RGVzdGluYXRpb25D
b2xvclNwYWNlPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQobV9pbWFn
ZURlY29kZXJzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICBpZiAoIW1faW1hZ2VEZWNvZGVy
cy5jb250YWlucyhpZGVudGlmaWVyKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuaAppbmRleCBmOGVj
ZGU3MjRhMWQ4MjVjZGQ3ZTZjNDFjODQwOTYyNThiZThjY2FhLi40OTJkZTcyYjMxZWNjYjAxZjk0
ZmFiOGI2OWI4NDE1MTMyMTRlNTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuaApAQCAtNjAsNyAr
NjAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlRGVjb2RlcihXZWJDb3JlOjpJbWFnZURl
Y29kZXJJZGVudGlmaWVyKTsKICAgICB2b2lkIHNldEV4cGVjdGVkQ29udGVudFNpemUoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVySWRlbnRpZmllciwgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudFNpemUp
OwogICAgIHZvaWQgc2V0RGF0YShXZWJDb3JlOjpJbWFnZURlY29kZXJJZGVudGlmaWVyLCBjb25z
dCBJUEM6OlNoYXJlZEJ1ZmZlckNvcHkmLCBib29sIGFsbERhdGFSZWNlaXZlZCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChzaXplX3QgZnJhbWVDb3VudCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
c2l6ZSwgYm9vbCBoYXNUcmFjaywgc3RkOjpvcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpGcmFtZUluZm8+PiYmKT4mJik7Ci0gICAgdm9pZCBjcmVhdGVGcmFtZUltYWdlQXRJ
bmRleChXZWJDb3JlOjpJbWFnZURlY29kZXJJZGVudGlmaWVyLCBzaXplX3QgaW5kZXgsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXVEY6Ok1hY2hTZW5kUmlnaHQ+JiYsIFdl
YkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSk+JiYpOworICAgIHZvaWQgY3JlYXRlRnJhbWVJ
bWFnZUF0SW5kZXgoV2ViQ29yZTo6SW1hZ2VEZWNvZGVySWRlbnRpZmllciwgc2l6ZV90IGluZGV4
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8V1RGOjpNYWNoU2VuZFJpZ2h0
PiYmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZT4mJik+JiYp
OwogICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKFdlYkNvcmU6OkltYWdlRGVjb2Rlcklk
ZW50aWZpZXIsIHNpemVfdCBpbmRleCk7CiAKICAgICB2b2lkIGVuY29kZWREYXRhU3RhdHVzQ2hh
bmdlZChXZWJDb3JlOjpJbWFnZURlY29kZXJJZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAppbmRleCA4NjUxNzAxNjk5YjgwNWIzYjU3ZDRjYzY1
ZDU2OTA4Mzg1ZTA3ZDc0Li5hMWM5ZDBlOWU2ZDlhYjY0YzQ4MGYwMmI0YTE3NmY5M2Y0ZGYwODM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgK
KysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCkBAIC01MCw2
ICs1MCwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+IHN0cnVjdCBB
cmd1bWVudENvZGVyIHsKICAgICAgICAgdC5lbmNvZGUoZW5jb2Rlcik7CiAgICAgfQogCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgVCYmIHQpCisgICAgeworICAgICAgICBXVEZNb3ZlKHQpLmVuY29kZShlbmNv
ZGVyKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2UuaCBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2UuaAppbmRleCA2M2I4ZmE4NjdlZjE1
YTlmMzBhMDJmYWVjZjA5Zjg4ZTdiNWFlNzE4Li40ODg0OWZjMGMxNTA3MjQ5ZTg1YWE2Y2FlMjZm
Mjk3ZjY0NTEyYWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9IYW5k
bGVNZXNzYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSGFuZGxlTWVzc2Fn
ZS5oCkBAIC0xNzMsNiArMTczLDUwIEBAIHZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKENvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIEFyZ3NUdXBsZSYmIGFyZ3MsIEMqIG9iamVjdCwgTUYKICAgICBjYWxs
TWVtYmVyRnVuY3Rpb25JbXBsKG9iamVjdCwgZnVuY3Rpb24sIGNvbm5lY3Rpb24sIHN0ZDo6Zm9y
d2FyZDxBcmdzVHVwbGU+KGFyZ3MpLCBBcmdzSW5kaWNlcygpKTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3N0cnVjdCBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rpb247CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFJlc3VsdCwgdHlwZW5hbWUgT2JqZWN0VHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorc3RydWN0IENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVjdGlvbjxSZXN1bHQoT2Jq
ZWN0VHlwZTo6KikoQXJndW1lbnRzLi4uKT4geworICAgIHRlbXBsYXRlPHNpemVfdCBOLCB0eXBl
bmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8KE4gPCBzaXplb2YuLi4oQXJndW1lbnRzKSk+PgorICAg
IHVzaW5nIFR5cGUgPSBzdGQ6OnJlbW92ZV9jdnJlZl90PHR5cGVuYW1lIHN0ZDo6dHVwbGVfZWxl
bWVudF90PE4sIHN0ZDo6dHVwbGU8QXJndW1lbnRzLi4uPj4+OworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgUmVzdWx0LCB0eXBlbmFtZSBPYmplY3RUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CitzdHJ1Y3QgQ29tcGxldGlvbkhhbmRsZXJUeXBlRGVkdWN0aW9uPFJlc3VsdChPYmplY3RUeXBl
OjoqKShBcmd1bWVudHMuLi4pIGNvbnN0PiB7CisgICAgdGVtcGxhdGU8c2l6ZV90IE4sIHR5cGVu
YW1lID0gc3RkOjplbmFibGVfaWZfdDwoTiA8IHNpemVvZi4uLihBcmd1bWVudHMpKT4+CisgICAg
dXNpbmcgVHlwZSA9IHN0ZDo6cmVtb3ZlX2N2cmVmX3Q8dHlwZW5hbWUgc3RkOjp0dXBsZV9lbGVt
ZW50X3Q8Tiwgc3RkOjp0dXBsZTxBcmd1bWVudHMuLi4+Pj47Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBSZXN1bHQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK3N0cnVjdCBDb21wbGV0aW9uSGFu
ZGxlclR5cGVEZWR1Y3Rpb248Q29tcGxldGlvbkhhbmRsZXI8UmVzdWx0KEFyZ3VtZW50cy4uLik+
PiB7CisgICAgdXNpbmcgUmVzdWx0VHlwZSA9IFJlc3VsdDsKKyAgICB1c2luZyBQYXJhbWV0ZXJz
VHVwbGVUeXBlID0gc3RkOjp0dXBsZTxBcmd1bWVudHMuLi4+OworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgSGFuZGxlclR5cGU+CitzdHJ1Y3QgQ29tcGxldGlvbkhhbmRsZXJWYWxpZGF0aW9uIHsK
KyAgICB0ZW1wbGF0ZTxzaXplX3QgTiwgdHlwZW5hbWUgVHVwbGVUeXBlPiB1c2luZyBQYXJhbWV0
ZXJUdXBsZUVsZW1lbnQgPSBzdGQ6OnJlbW92ZV9jdnJlZl90PHN0ZDo6dHVwbGVfZWxlbWVudF90
PE4sIFR1cGxlVHlwZT4+OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFuZGxlclBhcmFtZXRl
clR1cGxlLCB0eXBlbmFtZSBSZXBseVBhcmFtZXRlclR1cGxlLCBzaXplX3QuLi4gSW5kaWNlcz4K
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbWF0Y2hpbmdQYXJhbWV0ZXJzKHN0ZDo6aW5kZXhf
c2VxdWVuY2U8SW5kaWNlcy4uLj4pCisgICAgeworICAgICAgICByZXR1cm4gKHN0ZDo6aXNfc2Ft
ZV92PFBhcmFtZXRlclR1cGxlRWxlbWVudDxJbmRpY2VzLCBIYW5kbGVyUGFyYW1ldGVyVHVwbGU+
LCBQYXJhbWV0ZXJUdXBsZUVsZW1lbnQ8SW5kaWNlcywgUmVwbHlQYXJhbWV0ZXJUdXBsZT4+ICYm
IC4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmVwbHlUeXBlPgorICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBtYXRjaGVzUmVwbHlUeXBlKCkKKyAgICB7CisgICAgICAgIHVz
aW5nIEhhbmRsZXJSZXR1cm5UeXBlID0gdHlwZW5hbWUgQ29tcGxldGlvbkhhbmRsZXJUeXBlRGVk
dWN0aW9uPEhhbmRsZXJUeXBlPjo6UmVzdWx0VHlwZTsKKyAgICAgICAgdXNpbmcgSGFuZGxlclBh
cmFtZXRlcnNUdXBsZVR5cGUgPSB0eXBlbmFtZSBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rp
b248SGFuZGxlclR5cGU+OjpQYXJhbWV0ZXJzVHVwbGVUeXBlOworICAgICAgICB1c2luZyBSZXBs
eVJldHVyblR5cGUgPSB0eXBlbmFtZSBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rpb248UmVw
bHlUeXBlPjo6UmVzdWx0VHlwZTsKKyAgICAgICAgdXNpbmcgUmVwbHlQYXJhbWV0ZXJzVHVwbGVU
eXBlID0gdHlwZW5hbWUgQ29tcGxldGlvbkhhbmRsZXJUeXBlRGVkdWN0aW9uPFJlcGx5VHlwZT46
OlBhcmFtZXRlcnNUdXBsZVR5cGU7CisgICAgICAgIHJldHVybiBzdGQ6OmlzX3ZvaWRfdjxIYW5k
bGVyUmV0dXJuVHlwZT4gJiYgc3RkOjppc192b2lkX3Y8UmVwbHlSZXR1cm5UeXBlPgorICAgICAg
ICAgICAgJiYgKHN0ZDo6dHVwbGVfc2l6ZV92PEhhbmRsZXJQYXJhbWV0ZXJzVHVwbGVUeXBlPiA9
PSBzdGQ6OnR1cGxlX3NpemVfdjxSZXBseVBhcmFtZXRlcnNUdXBsZVR5cGU+KQorICAgICAgICAg
ICAgJiYgbWF0Y2hpbmdQYXJhbWV0ZXJzPEhhbmRsZXJQYXJhbWV0ZXJzVHVwbGVUeXBlLCBSZXBs
eVBhcmFtZXRlcnNUdXBsZVR5cGU+KHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxzdGQ6OnR1cGxl
X3NpemVfdjxIYW5kbGVyUGFyYW1ldGVyc1R1cGxlVHlwZT4+KCkpOworICAgIH0KK307CisKIC8v
IE1haW4gZGlzcGF0Y2ggZnVuY3Rpb25zCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0yMTQs
MTIgKzI1OCwxNiBAQCBib29sIGhhbmRsZU1lc3NhZ2VTeW5jaHJvbm91cyhDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBEZWNvZGVyJiBkZWNvZGVyLCBVbmlxdWVSZQogICAgIGlmIChVTkxJS0VMWSgh
YXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdHlwZW5hbWUgVDo6RGVs
YXllZFJlcGx5IGNvbXBsZXRpb25IYW5kbGVyID0gW3JlcGx5RW5jb2RlciA9IFdURk1vdmUocmVw
bHlFbmNvZGVyKSwgY29ubmVjdGlvbiA9IFJlZiB7IGNvbm5lY3Rpb24gfV0gKGF1dG8mJi4uLiBh
cmdzKSBtdXRhYmxlIHsKLSAgICAgICAgbG9nUmVwbHkoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCBh
cmdzLi4uKTsKLSAgICAgICAgVDo6c2VuZChXVEZNb3ZlKHJlcGx5RW5jb2RlciksIFdURk1vdmUo
Y29ubmVjdGlvbiksIGFyZ3MuLi4pOwotICAgIH07CisgICAgdXNpbmcgQ29tcGxldGlvbkhhbmRs
ZXJUeXBlID0gdHlwZW5hbWUgQ29tcGxldGlvbkhhbmRsZXJUeXBlRGVkdWN0aW9uPE1GPjo6dGVt
cGxhdGUgVHlwZTxzdGQ6OnR1cGxlX3NpemVfdjx0eXBlbmFtZSBUOjpBcmd1bWVudHM+PjsKKyAg
ICBzdGF0aWNfYXNzZXJ0KENvbXBsZXRpb25IYW5kbGVyVmFsaWRhdGlvbjxDb21wbGV0aW9uSGFu
ZGxlclR5cGU+Ojp0ZW1wbGF0ZSBtYXRjaGVzUmVwbHlUeXBlPHR5cGVuYW1lIFQ6OkRlbGF5ZWRS
ZXBseT4oKSk7CisKICAgICBsb2dNZXNzYWdlKGNvbm5lY3Rpb24sIFQ6Om5hbWUoKSwgKmFyZ3Vt
ZW50cyk7Ci0gICAgY2FsbE1lbWJlckZ1bmN0aW9uKFdURk1vdmUoKmFyZ3VtZW50cyksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBvYmplY3QsIGZ1bmN0aW9uKTsKKyAgICBjYWxsTWVtYmVy
RnVuY3Rpb24oV1RGTW92ZSgqYXJndW1lbnRzKSwKKyAgICAgICAgQ29tcGxldGlvbkhhbmRsZXJU
eXBlKFtyZXBseUVuY29kZXIgPSBXVEZNb3ZlKHJlcGx5RW5jb2RlciksIGNvbm5lY3Rpb24gPSBS
ZWYgeyBjb25uZWN0aW9uIH1dIChhdXRvJiYuLi4gYXJncykgbXV0YWJsZSB7CisgICAgICAgICAg
ICBsb2dSZXBseShjb25uZWN0aW9uLCBUOjpuYW1lKCksIGFyZ3MuLi4pOworICAgICAgICAgICAg
VDo6c2VuZChXVEZNb3ZlKHJlcGx5RW5jb2RlciksIFdURk1vdmUoY29ubmVjdGlvbiksIHN0ZDo6
Zm9yd2FyZDxkZWNsdHlwZShhcmdzKT4oYXJncykuLi4pOworICAgICAgICB9KSwKKyAgICAgICAg
b2JqZWN0LCBmdW5jdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIzMCwxMiArMjc4
LDE2IEBAIGJvb2wgaGFuZGxlTWVzc2FnZVN5bmNocm9ub3VzV2FudHNDb25uZWN0aW9uKENvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIERlY29kZXImIGRlCiAgICAgaWYgKFVOTElLRUxZKCFhcmd1bWVu
dHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgdHlwZW5hbWUgVDo6RGVsYXll
ZFJlcGx5IGNvbXBsZXRpb25IYW5kbGVyID0gW3JlcGx5RW5jb2RlciA9IFdURk1vdmUocmVwbHlF
bmNvZGVyKSwgY29ubmVjdGlvbiA9IFJlZiB7IGNvbm5lY3Rpb24gfV0gKGF1dG8mJi4uLiBhcmdz
KSBtdXRhYmxlIHsKLSAgICAgICAgbG9nUmVwbHkoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCBhcmdz
Li4uKTsKLSAgICAgICAgVDo6c2VuZChXVEZNb3ZlKHJlcGx5RW5jb2RlciksIFdURk1vdmUoY29u
bmVjdGlvbiksIGFyZ3MuLi4pOwotICAgIH07CisgICAgdXNpbmcgQ29tcGxldGlvbkhhbmRsZXJU
eXBlID0gdHlwZW5hbWUgQ29tcGxldGlvbkhhbmRsZXJUeXBlRGVkdWN0aW9uPE1GPjo6dGVtcGxh
dGUgVHlwZTwxICsgc3RkOjp0dXBsZV9zaXplX3Y8dHlwZW5hbWUgVDo6QXJndW1lbnRzPj47Cisg
ICAgc3RhdGljX2Fzc2VydChDb21wbGV0aW9uSGFuZGxlclZhbGlkYXRpb248Q29tcGxldGlvbkhh
bmRsZXJUeXBlPjo6dGVtcGxhdGUgbWF0Y2hlc1JlcGx5VHlwZTx0eXBlbmFtZSBUOjpEZWxheWVk
UmVwbHk+KCkpOworCiAgICAgbG9nTWVzc2FnZShjb25uZWN0aW9uLCBUOjpuYW1lKCksICphcmd1
bWVudHMpOwotICAgIGNhbGxNZW1iZXJGdW5jdGlvbihjb25uZWN0aW9uLCBXVEZNb3ZlKCphcmd1
bWVudHMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb2JqZWN0LCBmdW5jdGlvbik7Cisg
ICAgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbm5lY3Rpb24sIFdURk1vdmUoKmFyZ3VtZW50cyksCisg
ICAgICAgIENvbXBsZXRpb25IYW5kbGVyVHlwZShbcmVwbHlFbmNvZGVyID0gV1RGTW92ZShyZXBs
eUVuY29kZXIpLCBjb25uZWN0aW9uID0gUmVmIHsgY29ubmVjdGlvbiB9XSAoYXV0byYmLi4uIGFy
Z3MpIG11dGFibGUgeworICAgICAgICAgICAgbG9nUmVwbHkoY29ubmVjdGlvbiwgVDo6bmFtZSgp
LCBhcmdzLi4uKTsKKyAgICAgICAgICAgIFQ6OnNlbmQoV1RGTW92ZShyZXBseUVuY29kZXIpLCBX
VEZNb3ZlKGNvbm5lY3Rpb24pLCBzdGQ6OmZvcndhcmQ8ZGVjbHR5cGUoYXJncyk+KGFyZ3MpLi4u
KTsKKyAgICAgICAgfSksCisgICAgICAgIG9iamVjdCwgZnVuY3Rpb24pOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0yNTAsMTIgKzMwMiwxNiBAQCB2b2lkIGhhbmRsZU1lc3NhZ2VTeW5jaHJv
bm91cyhTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBEZWNvZGVyJiBkZWNvZAog
ICAgIGlmIChVTkxJS0VMWSghYXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHlw
ZW5hbWUgVDo6RGVsYXllZFJlcGx5IGNvbXBsZXRpb25IYW5kbGVyID0gW3N5bmNSZXF1ZXN0SUQs
IGNvbm5lY3Rpb24gPSBSZWYgeyBjb25uZWN0aW9uIH1dIChhdXRvJiYuLi4gYXJncykgbXV0YWJs
ZSB7Ci0gICAgICAgIGxvZ1JlcGx5KGNvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKSwgVDo6bmFtZSgp
LCBhcmdzLi4uKTsKLSAgICAgICAgY29ubmVjdGlvbi0+c2VuZFN5bmNSZXBseTxUPihzeW5jUmVx
dWVzdElELCBhcmdzLi4uKTsKLSAgICB9OworICAgIHVzaW5nIENvbXBsZXRpb25IYW5kbGVyVHlw
ZSA9IHR5cGVuYW1lIENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVjdGlvbjxNRj46OnRlbXBsYXRl
IFR5cGU8c3RkOjp0dXBsZV9zaXplX3Y8dHlwZW5hbWUgVDo6QXJndW1lbnRzPj47CisgICAgc3Rh
dGljX2Fzc2VydChDb21wbGV0aW9uSGFuZGxlclZhbGlkYXRpb248Q29tcGxldGlvbkhhbmRsZXJU
eXBlPjo6dGVtcGxhdGUgbWF0Y2hlc1JlcGx5VHlwZTx0eXBlbmFtZSBUOjpEZWxheWVkUmVwbHk+
KCkpOworCiAgICAgbG9nTWVzc2FnZShjb25uZWN0aW9uLmNvbm5lY3Rpb24oKSwgVDo6bmFtZSgp
LCAqYXJndW1lbnRzKTsKLSAgICBjYWxsTWVtYmVyRnVuY3Rpb24oV1RGTW92ZSgqYXJndW1lbnRz
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9iamVjdCwgZnVuY3Rpb24pOworICAgIGNh
bGxNZW1iZXJGdW5jdGlvbihXVEZNb3ZlKCphcmd1bWVudHMpLAorICAgICAgICBDb21wbGV0aW9u
SGFuZGxlclR5cGUoW3N5bmNSZXF1ZXN0SUQsIGNvbm5lY3Rpb24gPSBSZWYgeyBjb25uZWN0aW9u
IH1dIChhdXRvJiYuLi4gYXJncykgbXV0YWJsZSB7CisgICAgICAgICAgICBsb2dSZXBseShjb25u
ZWN0aW9uLT5jb25uZWN0aW9uKCksIFQ6Om5hbWUoKSwgYXJncy4uLik7CisgICAgICAgICAgICBj
b25uZWN0aW9uLT5zZW5kU3luY1JlcGx5PFQ+KHN5bmNSZXF1ZXN0SUQsIHN0ZDo6Zm9yd2FyZDxk
ZWNsdHlwZShhcmdzKT4oYXJncykuLi4pOworICAgICAgICB9KSwKKyAgICAgICAgb2JqZWN0LCBm
dW5jdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEMsIHR5cGVuYW1l
IE1GPgpAQCAtMjY5LDEzICszMjUsMTcgQEAgdm9pZCBoYW5kbGVNZXNzYWdlQXN5bmMoQ29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgRGVjb2RlciYgZGVjb2RlciwgQyogb2JqZWN0LCBNRgogICAgIGlm
IChVTkxJS0VMWSghYXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHlwZW5hbWUg
VDo6QXN5bmNSZXBseSBjb21wbGV0aW9uSGFuZGxlciA9IHsgW2xpc3RlbmVySUQgPSAqbGlzdGVu
ZXJJRCwgY29ubmVjdGlvbiA9IFJlZiB7IGNvbm5lY3Rpb24gfV0gKGF1dG8mJi4uLiBhcmdzKSBt
dXRhYmxlIHsKLSAgICAgICAgYXV0byBlbmNvZGVyID0gbWFrZVVuaXF1ZVJlZjxFbmNvZGVyPihU
Ojphc3luY01lc3NhZ2VSZXBseU5hbWUoKSwgbGlzdGVuZXJJRCk7Ci0gICAgICAgIGxvZ1JlcGx5
KGNvbm5lY3Rpb24sIFQ6Om5hbWUoKSwgYXJncy4uLik7Ci0gICAgICAgIFQ6OnNlbmQoV1RGTW92
ZShlbmNvZGVyKSwgV1RGTW92ZShjb25uZWN0aW9uKSwgYXJncy4uLik7Ci0gICAgfSwgVDo6Y2Fs
bGJhY2tUaHJlYWQgfTsKKyAgICB1c2luZyBDb21wbGV0aW9uSGFuZGxlclR5cGUgPSB0eXBlbmFt
ZSBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rpb248TUY+Ojp0ZW1wbGF0ZSBUeXBlPHN0ZDo6
dHVwbGVfc2l6ZV92PHR5cGVuYW1lIFQ6OkFyZ3VtZW50cz4+OworICAgIHN0YXRpY19hc3NlcnQo
Q29tcGxldGlvbkhhbmRsZXJWYWxpZGF0aW9uPENvbXBsZXRpb25IYW5kbGVyVHlwZT46OnRlbXBs
YXRlIG1hdGNoZXNSZXBseVR5cGU8dHlwZW5hbWUgVDo6QXN5bmNSZXBseT4oKSk7CisKICAgICBs
b2dNZXNzYWdlKGNvbm5lY3Rpb24sIFQ6Om5hbWUoKSwgKmFyZ3VtZW50cyk7Ci0gICAgY2FsbE1l
bWJlckZ1bmN0aW9uKFdURk1vdmUoKmFyZ3VtZW50cyksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBvYmplY3QsIGZ1bmN0aW9uKTsKKyAgICBjYWxsTWVtYmVyRnVuY3Rpb24oV1RGTW92ZSgq
YXJndW1lbnRzKSwKKyAgICAgICAgQ29tcGxldGlvbkhhbmRsZXJUeXBlIHsgW2xpc3RlbmVySUQg
PSAqbGlzdGVuZXJJRCwgY29ubmVjdGlvbiA9IFJlZiB7IGNvbm5lY3Rpb24gfV0gKGF1dG8mJi4u
LiBhcmdzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlciA9IG1ha2VVbmlxdWVS
ZWY8RW5jb2Rlcj4oVDo6YXN5bmNNZXNzYWdlUmVwbHlOYW1lKCksIGxpc3RlbmVySUQpOworICAg
ICAgICAgICAgbG9nUmVwbHkoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCBhcmdzLi4uKTsKKyAgICAg
ICAgICAgIFQ6OnNlbmQoV1RGTW92ZShlbmNvZGVyKSwgV1RGTW92ZShjb25uZWN0aW9uKSwgc3Rk
Ojpmb3J3YXJkPGRlY2x0eXBlKGFyZ3MpPihhcmdzKS4uLik7CisgICAgICAgIH0sIFQ6OmNhbGxi
YWNrVGhyZWFkIH0sCisgICAgICAgIG9iamVjdCwgZnVuY3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRj4KQEAgLTI4OSwxMyArMzQ5LDE3IEBA
IHZvaWQgaGFuZGxlTWVzc2FnZUFzeW5jV2FudHNDb25uZWN0aW9uKENvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIERlY29kZXImIGRlY29kZXIsCiAgICAgaWYgKFVOTElLRUxZKCFhcmd1bWVudHMpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICB0eXBlbmFtZSBUOjpBc3luY1JlcGx5IGNvbXBsZXRpb25I
YW5kbGVyID0geyBbbGlzdGVuZXJJRCA9ICpsaXN0ZW5lcklELCBjb25uZWN0aW9uID0gUmVmIHsg
Y29ubmVjdGlvbiB9XSAoYXV0byYmLi4uIGFyZ3MpIG11dGFibGUgewotICAgICAgICBhdXRvIGVu
Y29kZXIgPSBtYWtlVW5pcXVlUmVmPEVuY29kZXI+KFQ6OmFzeW5jTWVzc2FnZVJlcGx5TmFtZSgp
LCBsaXN0ZW5lcklEKTsKLSAgICAgICAgbG9nUmVwbHkoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCBh
cmdzLi4uKTsKLSAgICAgICAgVDo6c2VuZChXVEZNb3ZlKGVuY29kZXIpLCBXVEZNb3ZlKGNvbm5l
Y3Rpb24pLCBhcmdzLi4uKTsKLSAgICB9LCBUOjpjYWxsYmFja1RocmVhZCB9OworICAgIHVzaW5n
IENvbXBsZXRpb25IYW5kbGVyVHlwZSA9IHR5cGVuYW1lIENvbXBsZXRpb25IYW5kbGVyVHlwZURl
ZHVjdGlvbjxNRj46OnRlbXBsYXRlIFR5cGU8MSArIHN0ZDo6dHVwbGVfc2l6ZV92PHR5cGVuYW1l
IFQ6OkFyZ3VtZW50cz4+OworICAgIHN0YXRpY19hc3NlcnQoQ29tcGxldGlvbkhhbmRsZXJWYWxp
ZGF0aW9uPENvbXBsZXRpb25IYW5kbGVyVHlwZT46OnRlbXBsYXRlIG1hdGNoZXNSZXBseVR5cGU8
dHlwZW5hbWUgVDo6QXN5bmNSZXBseT4oKSk7CisKICAgICBsb2dNZXNzYWdlKGNvbm5lY3Rpb24s
IFQ6Om5hbWUoKSwgKmFyZ3VtZW50cyk7Ci0gICAgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbm5lY3Rp
b24sIFdURk1vdmUoKmFyZ3VtZW50cyksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBvYmpl
Y3QsIGZ1bmN0aW9uKTsKKyAgICBjYWxsTWVtYmVyRnVuY3Rpb24oY29ubmVjdGlvbiwgV1RGTW92
ZSgqYXJndW1lbnRzKSwKKyAgICAgICAgQ29tcGxldGlvbkhhbmRsZXJUeXBlIHsgW2xpc3RlbmVy
SUQgPSAqbGlzdGVuZXJJRCwgY29ubmVjdGlvbiA9IFJlZiB7IGNvbm5lY3Rpb24gfV0gKGF1dG8m
Ji4uLiBhcmdzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlciA9IG1ha2VVbmlx
dWVSZWY8RW5jb2Rlcj4oVDo6YXN5bmNNZXNzYWdlUmVwbHlOYW1lKCksIGxpc3RlbmVySUQpOwor
ICAgICAgICAgICAgbG9nUmVwbHkoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCBhcmdzLi4uKTsKKyAg
ICAgICAgICAgIFQ6OnNlbmQoV1RGTW92ZShlbmNvZGVyKSwgV1RGTW92ZShjb25uZWN0aW9uKSwg
c3RkOjpmb3J3YXJkPGRlY2x0eXBlKGFyZ3MpPihhcmdzKS4uLik7CisgICAgICAgIH0sIFQ6OmNh
bGxiYWNrVGhyZWFkIH0sCisgICAgICAgIG9iamVjdCwgZnVuY3Rpb24pOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVh
bVNlcnZlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNl
cnZlckNvbm5lY3Rpb24uaAppbmRleCBhYmVmNGVjZmUzZTkzNzhjMTdmYWJlMzRkM2MyNDgzZDE0
MDc0N2JkLi5hYjM5N2ZiZGFiYjMwZTZjNWJjMjhmYWQ4MDEzZjZlMDNkODlkNmFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgK
KysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5o
CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uOjpzZW5kU3lu
Y1JlcGx5KENvbm5lY3Rpb246OlN5bmNSZXF1ZXN0SUQgc3luY1JlcXVlc3QKICAgICB9CiAgICAg
YXV0byBlbmNvZGVyID0gbWFrZVVuaXF1ZVJlZjxFbmNvZGVyPihNZXNzYWdlTmFtZTo6U3luY01l
c3NhZ2VSZXBseSwgc3luY1JlcXVlc3RJRC50b1VJbnQ2NCgpKTsKIAotICAgIChlbmNvZGVyLmdl
dCgpIDw8IC4uLiA8PCBhcmd1bWVudHMpOworICAgIChlbmNvZGVyLmdldCgpIDw8IC4uLiA8PCBz
dGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpKTsKICAgICBtX2Nvbm5lY3Rpb24tPnNl
bmRTeW5jUmVwbHkoV1RGTW92ZShlbmNvZGVyKSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457196</attachid>
            <date>2022-04-10 05:13:43 -0700</date>
            <delta_ts>2022-04-10 11:01:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238740-20220410141341.patch</filename>
            <type>text/plain</type>
            <size>21383</size>
            <attacher name="Zan Dobersek (Reviews)">zdobersek</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNjg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM5ODlhNDkwYzFjZjQ4ZGE1
MmFhOGIwODU2ZDcyMTg3MDg2ZmY0NWQuLjFkM2JlNGM4NTJkNDkxZjE3OWY5YTJhOGUxZmJjOTUx
M2FkMzg3MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzggQEAKKzIwMjItMDQtMTAgIFphbiBEb2Jl
cnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXSzJdIEVuYWJsZSBtb3Jl
IGVmZmljaWVudCBlbmNvZGluZyBvZiBzeW5jaHJvbm91cy1tZXNzYWdlIHJlcGx5IGFyZ3VtZW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM4NzQw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGFuZGxp
bmcgb2Ygc3luY2hyb25vdXMgbWVzc2FnZXMgcmVxdWlyZXMgY29uc3RydWN0aW9uIG9mIGEKKyAg
ICAgICAgQ29tcGxldGlvbkhhbmRsZXIgb2JqZWN0IHRoYXQgd3JhcHMgYSBsYW1iZGEgZnVuY3Rp
b24gd2hpY2ggaGFuZGxlcworICAgICAgICBsb2dnaW5nIG9mIHRoZSBwYXNzZWQtaW4gcmVwbHkg
YXJndW1lbnRzIGFzIHdlbGwgYXMgc3Vic2VxdWVudCBlbmNvZGluZworICAgICAgICBhbmQgZGlz
cGF0Y2hpbmcgb2YgdGhlIHJlcGx5IGludG8gdGhlIElQQyBjaGFubmVsLgorCisgICAgICAgIFJp
Z2h0IG5vdywgZm9yIGFueSBnaXZlbiBtZXNzYWdlIHRoZSBDb21wbGV0aW9uSGFuZGxlciB0eXBl
IGlzIGdlbmVyYXRlZAorICAgICAgICBmcm9tIHRoZSBJUEMgbWVzc2FnZSBzcGVjaWZpY2F0aW9u
LCBhbmQgaXQncyBlc3NlbnRpYWxseSBhIGZ1bmN0aW9uIHR5cGUKKyAgICAgICAgd2l0aCBhIHZv
aWQgcmV0dXJuIHZhbHVlIGFuZCBjb25zdCBsdmFsdWUgcmVmZXJlbmNlcyBmb3IgZXZlcnkgcGFy
YW1ldGVyCisgICAgICAgIHR5cGUuIFRoaXMgdHlwZSBpcyBpbXBvc2VkIG9udG8gdGhlIGxhbWJk
YSBoYW5kbGVyLCBhbmQgd2hlbiBpbnZva2VkLAorICAgICAgICBhbGwgdGhlIHJlcGx5IGFyZ3Vt
ZW50cyBhcmUgcGFzc2VkIG9uIHRvIHRoZSBJUEMgZW5jb2RpbmcgYXMgbHZhbHVlCisgICAgICAg
IHJlZmVyZW5jZXMuCisKKyAgICAgICAgVGhpcyBpbmhpYml0cyBvcHBvcnR1bml0aWVzIHdoZXJl
IHRoZSByZXBseSBhcmd1bWVudCBjb3VsZCBpbnN0ZWFkIGJlCisgICAgICAgIG1vdmVkIGludG8g
dGhlIGNvbXBsZXRpb24gaGFuZGxlciBpbnZvY2F0aW9uLCBlbmFibGluZyBhIG1vcmUgZWZmaWNp
ZW50CisgICAgICAgIGVuY29kaW5nIG9mIHRoZSBwYXNzZWQtaW4gdmFsdWUuIEZvciBpbnN0YW5j
ZSwgaWYgYSBVbml4IGZpbGUgZGVzY3JpcHRvcgorICAgICAgICB3YXMgbW92ZWQgaW50byB0aGUg
Y29tcGxldGlvbiBoYW5kbGVyIGludm9jYXRpb24sIGl0IGNvdWxkIGJlIHRyaWNrbGVkCisgICAg
ICAgIGRvd24gaW50byBhbiBJUEM6OkF0dGFjaG1lbnQgb2JqZWN0IGFuZCBkaXNwYXRjaGVkIG92
ZXIgSVBDIHdpdGhvdXQgYW55CisgICAgICAgIHByb2JsZW1zLiBJbnN0ZWFkLCBiZWNhdXNlIHRo
ZSBsdmFsdWUgcmVmZXJlbmNlIGlzIGltcG9zZWQgYXMgdGhlIHR5cGUsCisgICAgICAgIGl0IHdp
bGwgaGF2ZSB0byBiZSBkdXBsaWNhdGVkIGV2ZW4gaWYgdGhlIG9iamVjdCBpdHNlbGYgaXMgZXhw
aXJpbmcgb3IKKyAgICAgICAgd291bGQgYmUgbW92YWJsZSBkb3duIHRoZSBpbnZvY2F0aW9uLgor
CisgICAgICAgIFRvIGNvdmVyIHRoZXNlIGNhc2VzLCB0aGUgYWN0dWFsIGNvbXBsZXRpb24gaGFu
ZGxlciB0eXBlIGlzIG5vdyBkZWR1Y2VkCisgICAgICAgIGZyb20gdGhlIHN5bmNocm9ub3VzLW1l
c3NhZ2UtaGFuZGxpbmcgbWV0aG9kIGl0c2VsZi4gVGhpcyBtZWFucyB0aGF0CisgICAgICAgIHRo
ZSBjb21wbGV0aW9uIGhhbmRsZXIgcGFyYW1ldGVyIGZvciB0aGUgZ2l2ZW4gaGFuZGxlciBtZXRo
b2QgY2FuIG5vdworICAgICAgICBzcGVjaWZ5IHdoZXRoZXIgaXQgd2FudHMgdG8gcmVjZWl2ZSBy
ZXBseSBhcmd1bWVudHMgYnkgdmFsdWUgb3IgYnkKKyAgICAgICAgZWl0aGVyIGx2YWx1ZSBvciBy
dmFsdWUgcmVmZXJlbmNlLiBUaGUgY29tcGxldGlvbiBoYW5kbGVyIGxhbWJkYSBjYW4KKyAgICAg
ICAgY29tYmluZSB0aGVzZSBwYXJhbWV0ZXIgdHlwZXMgd2l0aCBzdGQ6OmZvcndhcmQoKSB0byBw
YXNzIGRvd24gdGhlCisgICAgICAgIGFjdHVhbCBhcmd1bWVudHMgaW4gdGhlIG1vc3Qgb3B0aW1h
bCBmYXNoaW9uLgorCisgICAgICAgIFRvIGF2b2lkIHByb2JsZW1zLCBlYWNoIENvbXBsZXRpb25I
YW5kbGVyIHNwZWNpYWxpemF0aW9uIHJldHJpZXZlZCBmcm9tCisgICAgICAgIHRoZSBtZXRob2Qg
c2lnYW50dXJlIGlzIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBDb21wbGV0aW9uSGFuZGxlciB0eXBl
CisgICAgICAgIGdlbmVyYXRlZCBmcm9tIHRoZSBJUEMgc3BlY2lmaWNhdGlvbiwgcmVxdWlyaW5n
IHRoYXQgdGhlIGRlY2F5ZWQKKyAgICAgICAgcGFyYW1ldGVyIHR5cGVzIG1hdGNoIGJldHdlZW4g
dGhlIHR3by4gSXQncyBzdGlsbCBwb3NzaWJsZSB0byBkaXJlY3RseQorICAgICAgICB1c2UgdGhl
IENvbXBsZXRpb25IYW5kbGVyIHR5cGUgZnJvbSB0aGUgSVBDIHNwZWNpZmljYXRpb24gYXMgdGhl
CisgICAgICAgIGNvbXBsZXRpb24gaGFuZGxlciB0eXBlIGluIHRoZSBtZXNzYWdlLWhhbmRsaW5n
IG1ldGhvZC4KKworICAgICAgICBBbiBydmFsdWUgcmVmZXJlbmNlIHZhcmlhbnQgb2YgQXJndW1l
bnRDb2RlcjxUPjo6ZW5jb2RlKCkgaXMgYWRkZWQuCisgICAgICAgIEdlbmVyaWMgaW1wbGVtZW50
YXRpb24gYWdhaW4gY2FzdHMgdGhlIHBhc3NlZC1pbiByZWZlcmVuY2UgaW50byBhbgorICAgICAg
ICBydmFsdWUgYW5kIGNhbGxzIHRoZSBlbmNvZGUoKSBvbiB0aGF0IG9iamVjdC4gSWYgdGhhdCB0
eXBlIHByb3ZpZGVzCisgICAgICAgIHJlZi1xdWFsaWZpZWQgZW5jb2RlKCkgbWV0aG9kcywgaW1w
bGVtZW50YXRpb25zIG9mIHRob3NlIG1ldGhvZHMgY2FuCisgICAgICAgIGFkanVzdCBhbmQgbW9y
ZSBhZ2dyZXNzaXZlbHkgbW92ZSB0aGluZ3MgaW50byB0aGUgZW5jb2RlciB3aGVuIHRoZQorICAg
ICAgICBtZXRob2QgaXMgY2FsbGVkIG9uIGFuIHJ2YWx1ZS4gSXQgd291bGQgYWxzbyBiZSBwb3Nz
aWJsZSB0byBkZWxldGUgdGhlCisgICAgICAgIHJlZi1xdWFsaWZpZWQgbWV0aG9kIGNvdmVyaW5n
IGx2YWx1ZXMsIG1lYW5pbmcgZW5jb2Rpbmcgd291bGQgYmUgYWxsb3dlZAorICAgICAgICBvbmx5
IGZvciBvYmplY3RzIHRoYXQgYXJlIG1vdmVkIGludG8gdGhlIGNvbXBsZXRpb24gaGFuZGxlci4K
KworICAgICAgICBGb3IgdHlwZXMgd2l0aCBjdXN0b20gc3BlY2lhbGl6YXRpb25zIG9mIEFyZ3Vt
ZW50Q29kZXI8VD4sIHRob3NlCisgICAgICAgIHNwZWNpYWxpemF0aW9ucyB3b3VsZCBhZ2FpbiBo
YXZlIHRvIHByb3ZpZGUgcnZhbHVlIHZhcmlhbnRzIG9mIHRoZQorICAgICAgICBlbmNvZGUoKSBt
ZXRob2QgYW5kIGhhbmRsZSB0aGUgcGFzc2VkLWluIHZhbHVlcyBhcHByb3ByaWF0ZWx5LgorCisg
ICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVDRE1Qcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUNETVByb3h5OjpnZXRTdXBwb3J0ZWRDb25maWd1cmF0aW9uKToKKyAgICAg
ICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZUNETVByb3h5Lmg6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9tZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5OjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6
CisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eS5o
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmg6CisgICAgICAgIChJUEM6
OkFyZ3VtZW50Q29kZXI6OmVuY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0hhbmRsZU1l
c3NhZ2UuaDoKKyAgICAgICAgKElQQzo6Q2xhc3NUeXBlOjopOgorICAgICAgICAoSVBDOjpDb21w
bGV0aW9uSGFuZGxlclZhbGlkYXRpb246Om1hdGNoaW5nUGFyYW1ldGVycyk6CisgICAgICAgIChJ
UEM6OkNvbXBsZXRpb25IYW5kbGVyVmFsaWRhdGlvbjo6bWF0Y2hlc1JlcGx5VHlwZSk6CisgICAg
ICAgIChJUEM6OmhhbmRsZU1lc3NhZ2VTeW5jaHJvbm91cyk6CisgICAgICAgIChJUEM6OmhhbmRs
ZU1lc3NhZ2VTeW5jaHJvbm91c1dhbnRzQ29ubmVjdGlvbik6CisgICAgICAgIChJUEM6OmhhbmRs
ZU1lc3NhZ2VBc3luYyk6CisgICAgICAgIChJUEM6OmhhbmRsZU1lc3NhZ2VBc3luY1dhbnRzQ29u
bmVjdGlvbik6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24u
aDoKKyAgICAgICAgKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6c2VuZFN5bmNSZXBseSk6
CisKIDIwMjItMDQtMDkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgUHV0IGxheWVyIGJhY2tpbmcgc3RvcmUgYnVmZmVycyBpbnRvIHRoZSBwZXItUmVt
b3RlUmVuZGVyaW5nQmFja2VuZCBJT1N1cmZhY2VQb29sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL21lZGlhL1JlbW90ZUNETVByb3h5LmNwcAppbmRleCA0NGZjNjg4Yzg0YWZjMDI0
Y2QzNjgyZTBhN2Q3OGEzNjdiODQyNWFjLi4xMjllMDMxY2QzMmI5YTI1ODIxNTcwNDUzOGRiYzRm
YTMyOTU3ZWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVt
b3RlQ0RNUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1v
dGVDRE1Qcm94eS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IFJl
bW90ZUNETVByb3h5OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkK
ICAgICByZXR1cm4gbV9wcml2YXRlLT5zYW5pdGl6ZVNlc3Npb25JZChzZXNzaW9uSWQpOwogfQog
Ci12b2lkIFJlbW90ZUNETVByb3h5OjpnZXRTdXBwb3J0ZWRDb25maWd1cmF0aW9uKFdlYkNvcmU6
OkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mJiBjb25maWd1cmF0aW9uLCBXZWJDb3JlOjpDRE1Q
cml2YXRlOjpMb2NhbFN0b3JhZ2VBY2Nlc3MgYWNjZXNzLCBXZWJDb3JlOjpDRE1Qcml2YXRlOjpT
dXBwb3J0ZWRDb25maWd1cmF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgUmVtb3RlQ0RN
UHJveHk6OmdldFN1cHBvcnRlZENvbmZpZ3VyYXRpb24oV2ViQ29yZTo6Q0RNS2V5U3lzdGVtQ29u
ZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24sIFdlYkNvcmU6OkNETVByaXZhdGU6OkxvY2FsU3Rv
cmFnZUFjY2VzcyBhY2Nlc3MsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxX
ZWJDb3JlOjpDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uPik+JiYgY2FsbGJhY2spCiB7CiAgICAg
bV9wcml2YXRlLT5nZXRTdXBwb3J0ZWRDb25maWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJhdGlv
biksIGFjY2VzcywgV1RGTW92ZShjYWxsYmFjaykpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZUNETVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNUHJveHkuaAppbmRleCBhOGJmMTdiYjJhY2VkYjM4MWQ3
ODNkODkzMzA3YTBjNjkzNjYzOWZhLi4yNDYxNzVlZWU2YjI0MjgyOGU2YTI3OGFhYmUzZTcyZDIy
YmY4NmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3Rl
Q0RNUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RN
UHJveHkuaApAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIFVuaXF1ZVJlZjxJUEM6
OkVuY29kZXI+JikgZmluYWw7CiAKICAgICAvLyBNZXNzYWdlcwotICAgIHZvaWQgZ2V0U3VwcG9y
dGVkQ29uZmlndXJhdGlvbihXZWJDb3JlOjpDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiYsIFdl
YkNvcmU6OkNETVByaXZhdGU6OkxvY2FsU3RvcmFnZUFjY2VzcywgV2ViQ29yZTo6Q0RNUHJpdmF0
ZTo6U3VwcG9ydGVkQ29uZmlndXJhdGlvbkNhbGxiYWNrJiYpOworICAgIHZvaWQgZ2V0U3VwcG9y
dGVkQ29uZmlndXJhdGlvbihXZWJDb3JlOjpDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiYsIFdl
YkNvcmU6OkNETVByaXZhdGU6OkxvY2FsU3RvcmFnZUFjY2VzcywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24+KT4m
Jik7CiAgICAgdm9pZCBjcmVhdGVJbnN0YW5jZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlbW90
ZUNETUluc3RhbmNlSWRlbnRpZmllciwgUmVtb3RlQ0RNSW5zdGFuY2VDb25maWd1cmF0aW9uJiYp
PiYmKTsKICAgICB2b2lkIGxvYWRBbmRJbml0aWFsaXplKCk7CiAgICAgdm9pZCBzZXRMb2dJZGVu
dGlmaWVyKHVpbnQ2NF90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9t
ZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuY3BwCmluZGV4IDAyZjg1MDgy
ZWRhZGNhODA5NDg1NGFjODNhZWQ3MGNiZTJlMGQ0NDAuLmVhYmJjMTQ4ZGRjMmMzODYzY2FlN2Ez
N2M4NGI0NTNlYTM4ZTRlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9t
ZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL21lZGlhL1JlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5LmNwcApAQCAtMTE0LDcg
KzExNCw3IEBAIHZvaWQgUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHk6OnNldERhdGEoSW1hZ2VE
ZWNvZGVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zCiAgICAgY29tcGxldGlvbkhhbmRsZXIo
ZnJhbWVDb3VudCwgaW1hZ2VEZWNvZGVyLT5zaXplKCksIGltYWdlRGVjb2Rlci0+aGFzVHJhY2so
KSwgV1RGTW92ZShmcmFtZUluZm9zKSk7CiB9CiAKLXZvaWQgUmVtb3RlSW1hZ2VEZWNvZGVyQVZG
UHJveHk6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KEltYWdlRGVjb2RlcklkZW50aWZpZXIgaWRl
bnRpZmllciwgc2l6ZV90IGluZGV4LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9u
YWw8V1RGOjpNYWNoU2VuZFJpZ2h0PiYmLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2Up
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eTo6
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoSW1hZ2VEZWNvZGVySWRlbnRpZmllciBpZGVudGlmaWVy
LCBzaXplX3QgaW5kZXgsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXVEY6
Ok1hY2hTZW5kUmlnaHQ+JiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RGVzdGluYXRpb25Db2xv
clNwYWNlPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQobV9pbWFnZURl
Y29kZXJzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICBpZiAoIW1faW1hZ2VEZWNvZGVycy5j
b250YWlucyhpZGVudGlmaWVyKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL21lZGlhL1JlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuaAppbmRleCBmOGVjZGU3
MjRhMWQ4MjVjZGQ3ZTZjNDFjODQwOTYyNThiZThjY2FhLi40OTJkZTcyYjMxZWNjYjAxZjk0ZmFi
OGI2OWI4NDE1MTMyMTRlNTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
bWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuaApAQCAtNjAsNyArNjAs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlRGVjb2RlcihXZWJDb3JlOjpJbWFnZURlY29k
ZXJJZGVudGlmaWVyKTsKICAgICB2b2lkIHNldEV4cGVjdGVkQ29udGVudFNpemUoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVySWRlbnRpZmllciwgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudFNpemUpOwog
ICAgIHZvaWQgc2V0RGF0YShXZWJDb3JlOjpJbWFnZURlY29kZXJJZGVudGlmaWVyLCBjb25zdCBJ
UEM6OlNoYXJlZEJ1ZmZlckNvcHkmLCBib29sIGFsbERhdGFSZWNlaXZlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChzaXplX3QgZnJhbWVDb3VudCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6
ZSwgYm9vbCBoYXNUcmFjaywgc3RkOjpvcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpGcmFtZUluZm8+PiYmKT4mJik7Ci0gICAgdm9pZCBjcmVhdGVGcmFtZUltYWdlQXRJbmRl
eChXZWJDb3JlOjpJbWFnZURlY29kZXJJZGVudGlmaWVyLCBzaXplX3QgaW5kZXgsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXVEY6Ok1hY2hTZW5kUmlnaHQ+JiYsIFdlYkNv
cmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSk+JiYpOworICAgIHZvaWQgY3JlYXRlRnJhbWVJbWFn
ZUF0SW5kZXgoV2ViQ29yZTo6SW1hZ2VEZWNvZGVySWRlbnRpZmllciwgc2l6ZV90IGluZGV4LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8V1RGOjpNYWNoU2VuZFJpZ2h0PiYm
LCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZT4mJik+JiYpOwog
ICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKFdlYkNvcmU6OkltYWdlRGVjb2RlcklkZW50
aWZpZXIsIHNpemVfdCBpbmRleCk7CiAKICAgICB2b2lkIGVuY29kZWREYXRhU3RhdHVzQ2hhbmdl
ZChXZWJDb3JlOjpJbWFnZURlY29kZXJJZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0FyZ3VtZW50Q29kZXIuaAppbmRleCA4NjUxNzAxNjk5YjgwNWIzYjU3ZDRjYzY1ZDU2
OTA4Mzg1ZTA3ZDc0Li5hMWM5ZDBlOWU2ZDlhYjY0YzQ4MGYwMmI0YTE3NmY5M2Y0ZGYwODM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgKKysr
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCkBAIC01MCw2ICs1
MCwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+IHN0cnVjdCBBcmd1
bWVudENvZGVyIHsKICAgICAgICAgdC5lbmNvZGUoZW5jb2Rlcik7CiAgICAgfQogCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgVCYmIHQpCisgICAgeworICAgICAgICBXVEZNb3ZlKHQpLmVuY29kZShlbmNvZGVy
KTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2UuaCBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2UuaAppbmRleCA2M2I4ZmE4NjdlZjE1YTlm
MzBhMDJmYWVjZjA5Zjg4ZTdiNWFlNzE4Li40ZGU3NDhkNTgzMmI2MGRhMDYyMGNkZThhZjJlZjZk
NDcyNjA2MzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9IYW5kbGVN
ZXNzYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSGFuZGxlTWVzc2FnZS5o
CkBAIC0xNzMsNiArMTczLDY3IEBAIHZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKENvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIEFyZ3NUdXBsZSYmIGFyZ3MsIEMqIG9iamVjdCwgTUYKICAgICBjYWxsTWVt
YmVyRnVuY3Rpb25JbXBsKG9iamVjdCwgZnVuY3Rpb24sIGNvbm5lY3Rpb24sIHN0ZDo6Zm9yd2Fy
ZDxBcmdzVHVwbGU+KGFyZ3MpLCBBcmdzSW5kaWNlcygpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3N0cnVjdCBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rpb247CisKKy8vIFRoZSBm
b2xsb3dpbmcgdHdvIHBhcnRpYWwgc3BlY2lhbGl6YXRpb25zIGVuYWJsZSByZXRyaWV2YWwgb2Yg
dGhlIHBhcmFtZXRlciB0eXBlIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uCisvLyBU
aGlzIGFsbG93cyByZXRyaWV2aW5nIHRoZSBleGFjdCB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIgd2hl
cmUgdGhlIENvbXBsZXRpb25IYW5kbGVyIGlzIGV4cGVjdGVkIGluIGEgZ2l2ZW4KKy8vIHN5bmNo
cm9ub3VzLXJlcGx5IG1ldGhvZC4KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0LCB0eXBlbmFt
ZSBDbGFzc1R5cGUsIHR5cGVuYW1lLi4uIFBhcmFtZXRlclR5cGVzPgorc3RydWN0IENvbXBsZXRp
b25IYW5kbGVyVHlwZURlZHVjdGlvbjxSZXN1bHQoQ2xhc3NUeXBlOjoqKShQYXJhbWV0ZXJUeXBl
cy4uLik+IHsKKyAgICB0ZW1wbGF0ZTxzaXplX3QgTiwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9p
Zl90PChOIDwgc2l6ZW9mLi4uKFBhcmFtZXRlclR5cGVzKSk+PgorICAgIHVzaW5nIFR5cGUgPSBz
dGQ6OnJlbW92ZV9jdnJlZl90PHR5cGVuYW1lIHN0ZDo6dHVwbGVfZWxlbWVudF90PE4sIHN0ZDo6
dHVwbGU8UGFyYW1ldGVyVHlwZXMuLi4+Pj47Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1
bHQsIHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUuLi4gUGFyYW1ldGVyVHlwZXM+CitzdHJ1
Y3QgQ29tcGxldGlvbkhhbmRsZXJUeXBlRGVkdWN0aW9uPFJlc3VsdChDbGFzc1R5cGU6OiopKFBh
cmFtZXRlclR5cGVzLi4uKSBjb25zdD4geworICAgIHRlbXBsYXRlPHNpemVfdCBOLCB0eXBlbmFt
ZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8KE4gPCBzaXplb2YuLi4oUGFyYW1ldGVyVHlwZXMpKT4+Cisg
ICAgdXNpbmcgVHlwZSA9IHN0ZDo6cmVtb3ZlX2N2cmVmX3Q8dHlwZW5hbWUgc3RkOjp0dXBsZV9l
bGVtZW50X3Q8Tiwgc3RkOjp0dXBsZTxQYXJhbWV0ZXJUeXBlcy4uLj4+PjsKK307CisKKy8vIFRo
ZSBmb2xsb3dpbmcgcGFydGlhbCBzcGVjaWFsaXphdGlvbiBicmVha3MgZG93biB0aGUgQ29tcGxl
dGlvbkhhbmRsZXIncyByZXN1bHQgYW5kIHBhcmFtZXRlciB0eXBlcy4KKy8vIEl0J3MgdXNlZCBk
dXJpbmcgdGhlIHZhbGlkYXRpb24gZm9yIG1hdGNoaW5nIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIn
cyBwYXJhbWV0ZXIgdHlwZXMgYWdhaW5zdCB0aGUKKy8vIHBhcmFtZXRlciB0eXBlcyBvZiB0aGUg
c3BlY2lmaWVkIHJlcGx5LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHQsIHR5cGVuYW1lLi4u
IFBhcmFtZXRlclR5cGVzPgorc3RydWN0IENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVjdGlvbjxD
b21wbGV0aW9uSGFuZGxlcjxSZXN1bHQoUGFyYW1ldGVyVHlwZXMuLi4pPj4geworICAgIHVzaW5n
IFJlc3VsdFR5cGUgPSBSZXN1bHQ7CisgICAgdXNpbmcgUGFyYW1ldGVyc1R1cGxlVHlwZSA9IHN0
ZDo6dHVwbGU8UGFyYW1ldGVyVHlwZXMuLi4+OworfTsKKworLy8gQ29tcGxldGlvbkhhbmRsZXJW
YWxpZGF0aW9uPEhhbmRsZXJUeXBlPjo6bWF0Y2hlc1JlcGx5VHlwZTxSZXBseVR5cGU+KCkgZXhw
ZWN0cyBib3RoIEhhbmRsZXJUeXBlCisvLyBhbmQgUmVwbHlUeXBlIHRvIGJlIHNwZWNpYWxpemF0
aW9ucyBvZiB0aGUgQ29tcGxldGlvbkhhbmRsZXIgdGVtcGxhdGUuIEhhbmRsZXJUeXBlIGlzIHRo
ZSB0eXBlCisvLyBzcGVjaWZpZWQgaW4gdGhlIElQQyBoYW5kbGluZyBtZXRob2Qgb24gdGhlIEMr
KyBjbGFzcy4gUmVwbHlUeXBlIGlzIHRoZSB0eXBlIGdlbmVyYXRlZCBmcm9tIHRoZQorLy8gSVBD
IG1lc3NhZ2Ugc3BlY2lmaWNhdGlvbiAoYW5kIGNhbiBzdGlsbCBiZSB1c2VkIGluIHRoZSBDKysg
bWV0aG9kKS4KKy8vIFZhbGlkYXRpb24gcGFzc2VzIGlmIGJvdGggdHlwZXMgYXJlIGluZGVlZCBz
cGVjaWFsaXphdGlvbnMgb2YgdGhlIENvbXBsZXRpb25IYW5kbGVyIHRlbXBsYXRlLAorLy8gYm90
aCByZXR1cm4gdmFsdWVzIGFyZSB2b2lkLCBhbmQgYWxsIHRoZSBkZWNheWVkIHBhcmFtZXRlciB0
eXBlcyBtYXRjaCBiZXR3ZWVuIHRoZSB0d28KKy8vIENvbXBsZXRpb25IYW5kbGVyIHNwZWNpYWxp
emF0aW9ucy4KKwordGVtcGxhdGU8dHlwZW5hbWUgSGFuZGxlclR5cGU+CitzdHJ1Y3QgQ29tcGxl
dGlvbkhhbmRsZXJWYWxpZGF0aW9uIHsKKyAgICB0ZW1wbGF0ZTxzaXplX3QgTiwgdHlwZW5hbWUg
VHVwbGVUeXBlPgorICAgIHVzaW5nIFBhcmFtZXRlclR1cGxlRWxlbWVudCA9IHN0ZDo6cmVtb3Zl
X2N2cmVmX3Q8c3RkOjp0dXBsZV9lbGVtZW50X3Q8TiwgVHVwbGVUeXBlPj47CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYW5kbGVyUGFyYW1ldGVyVHVwbGUsIHR5cGVuYW1lIFJlcGx5UGFyYW1l
dGVyVHVwbGUsIHNpemVfdC4uLiBJbmRpY2VzPgorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBt
YXRjaGluZ1BhcmFtZXRlcnMoc3RkOjppbmRleF9zZXF1ZW5jZTxJbmRpY2VzLi4uPikKKyAgICB7
CisgICAgICAgIHJldHVybiAoc3RkOjppc19zYW1lX3Y8UGFyYW1ldGVyVHVwbGVFbGVtZW50PElu
ZGljZXMsIEhhbmRsZXJQYXJhbWV0ZXJUdXBsZT4sIFBhcmFtZXRlclR1cGxlRWxlbWVudDxJbmRp
Y2VzLCBSZXBseVBhcmFtZXRlclR1cGxlPj4gJiYgLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBSZXBseVR5cGU+CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG1hdGNoZXNS
ZXBseVR5cGUoKQorICAgIHsKKyAgICAgICAgdXNpbmcgSGFuZGxlclJldHVyblR5cGUgPSB0eXBl
bmFtZSBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rpb248SGFuZGxlclR5cGU+OjpSZXN1bHRU
eXBlOworICAgICAgICB1c2luZyBIYW5kbGVyUGFyYW1ldGVyc1R1cGxlVHlwZSA9IHR5cGVuYW1l
IENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVjdGlvbjxIYW5kbGVyVHlwZT46OlBhcmFtZXRlcnNU
dXBsZVR5cGU7CisgICAgICAgIHVzaW5nIFJlcGx5UmV0dXJuVHlwZSA9IHR5cGVuYW1lIENvbXBs
ZXRpb25IYW5kbGVyVHlwZURlZHVjdGlvbjxSZXBseVR5cGU+OjpSZXN1bHRUeXBlOworICAgICAg
ICB1c2luZyBSZXBseVBhcmFtZXRlcnNUdXBsZVR5cGUgPSB0eXBlbmFtZSBDb21wbGV0aW9uSGFu
ZGxlclR5cGVEZWR1Y3Rpb248UmVwbHlUeXBlPjo6UGFyYW1ldGVyc1R1cGxlVHlwZTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6aXNfdm9pZF92PEhhbmRsZXJSZXR1cm5UeXBlPiAmJiBzdGQ6OmlzX3Zv
aWRfdjxSZXBseVJldHVyblR5cGU+CisgICAgICAgICAgICAmJiAoc3RkOjp0dXBsZV9zaXplX3Y8
SGFuZGxlclBhcmFtZXRlcnNUdXBsZVR5cGU+ID09IHN0ZDo6dHVwbGVfc2l6ZV92PFJlcGx5UGFy
YW1ldGVyc1R1cGxlVHlwZT4pCisgICAgICAgICAgICAmJiBtYXRjaGluZ1BhcmFtZXRlcnM8SGFu
ZGxlclBhcmFtZXRlcnNUdXBsZVR5cGUsIFJlcGx5UGFyYW1ldGVyc1R1cGxlVHlwZT4oc3RkOjpt
YWtlX2luZGV4X3NlcXVlbmNlPHN0ZDo6dHVwbGVfc2l6ZV92PEhhbmRsZXJQYXJhbWV0ZXJzVHVw
bGVUeXBlPj4oKSk7CisgICAgfQorfTsKKwogLy8gTWFpbiBkaXNwYXRjaCBmdW5jdGlvbnMKIAog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTIxNCwxMiArMjc1LDE2IEBAIGJvb2wgaGFuZGxlTWVz
c2FnZVN5bmNocm9ub3VzKENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIERlY29kZXImIGRlY29kZXIs
IFVuaXF1ZVJlCiAgICAgaWYgKFVOTElLRUxZKCFhcmd1bWVudHMpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICB0eXBlbmFtZSBUOjpEZWxheWVkUmVwbHkgY29tcGxldGlvbkhhbmRsZXIg
PSBbcmVwbHlFbmNvZGVyID0gV1RGTW92ZShyZXBseUVuY29kZXIpLCBjb25uZWN0aW9uID0gUmVm
IHsgY29ubmVjdGlvbiB9XSAoYXV0byYmLi4uIGFyZ3MpIG11dGFibGUgewotICAgICAgICBsb2dS
ZXBseShjb25uZWN0aW9uLCBUOjpuYW1lKCksIGFyZ3MuLi4pOwotICAgICAgICBUOjpzZW5kKFdU
Rk1vdmUocmVwbHlFbmNvZGVyKSwgV1RGTW92ZShjb25uZWN0aW9uKSwgYXJncy4uLik7Ci0gICAg
fTsKKyAgICB1c2luZyBDb21wbGV0aW9uSGFuZGxlclR5cGUgPSB0eXBlbmFtZSBDb21wbGV0aW9u
SGFuZGxlclR5cGVEZWR1Y3Rpb248TUY+Ojp0ZW1wbGF0ZSBUeXBlPHN0ZDo6dHVwbGVfc2l6ZV92
PHR5cGVuYW1lIFQ6OkFyZ3VtZW50cz4+OworICAgIHN0YXRpY19hc3NlcnQoQ29tcGxldGlvbkhh
bmRsZXJWYWxpZGF0aW9uPENvbXBsZXRpb25IYW5kbGVyVHlwZT46OnRlbXBsYXRlIG1hdGNoZXNS
ZXBseVR5cGU8dHlwZW5hbWUgVDo6RGVsYXllZFJlcGx5PigpKTsKKwogICAgIGxvZ01lc3NhZ2Uo
Y29ubmVjdGlvbiwgVDo6bmFtZSgpLCAqYXJndW1lbnRzKTsKLSAgICBjYWxsTWVtYmVyRnVuY3Rp
b24oV1RGTW92ZSgqYXJndW1lbnRzKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9iamVj
dCwgZnVuY3Rpb24pOworICAgIGNhbGxNZW1iZXJGdW5jdGlvbihXVEZNb3ZlKCphcmd1bWVudHMp
LAorICAgICAgICBDb21wbGV0aW9uSGFuZGxlclR5cGUoW3JlcGx5RW5jb2RlciA9IFdURk1vdmUo
cmVwbHlFbmNvZGVyKSwgY29ubmVjdGlvbiA9IFJlZiB7IGNvbm5lY3Rpb24gfV0gKGF1dG8mJi4u
LiBhcmdzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGxvZ1JlcGx5KGNvbm5lY3Rpb24sIFQ6Om5h
bWUoKSwgYXJncy4uLik7CisgICAgICAgICAgICBUOjpzZW5kKFdURk1vdmUocmVwbHlFbmNvZGVy
KSwgV1RGTW92ZShjb25uZWN0aW9uKSwgc3RkOjpmb3J3YXJkPGRlY2x0eXBlKGFyZ3MpPihhcmdz
KS4uLik7CisgICAgICAgIH0pLAorICAgICAgICBvYmplY3QsIGZ1bmN0aW9uKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMjMwLDEyICsyOTUsMTYgQEAgYm9vbCBoYW5kbGVNZXNzYWdlU3lu
Y2hyb25vdXNXYW50c0Nvbm5lY3Rpb24oQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgRGVjb2RlciYg
ZGUKICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICB0eXBlbmFtZSBUOjpEZWxheWVkUmVwbHkgY29tcGxldGlvbkhhbmRsZXIgPSBb
cmVwbHlFbmNvZGVyID0gV1RGTW92ZShyZXBseUVuY29kZXIpLCBjb25uZWN0aW9uID0gUmVmIHsg
Y29ubmVjdGlvbiB9XSAoYXV0byYmLi4uIGFyZ3MpIG11dGFibGUgewotICAgICAgICBsb2dSZXBs
eShjb25uZWN0aW9uLCBUOjpuYW1lKCksIGFyZ3MuLi4pOwotICAgICAgICBUOjpzZW5kKFdURk1v
dmUocmVwbHlFbmNvZGVyKSwgV1RGTW92ZShjb25uZWN0aW9uKSwgYXJncy4uLik7Ci0gICAgfTsK
KyAgICB1c2luZyBDb21wbGV0aW9uSGFuZGxlclR5cGUgPSB0eXBlbmFtZSBDb21wbGV0aW9uSGFu
ZGxlclR5cGVEZWR1Y3Rpb248TUY+Ojp0ZW1wbGF0ZSBUeXBlPDEgKyBzdGQ6OnR1cGxlX3NpemVf
djx0eXBlbmFtZSBUOjpBcmd1bWVudHM+PjsKKyAgICBzdGF0aWNfYXNzZXJ0KENvbXBsZXRpb25I
YW5kbGVyVmFsaWRhdGlvbjxDb21wbGV0aW9uSGFuZGxlclR5cGU+Ojp0ZW1wbGF0ZSBtYXRjaGVz
UmVwbHlUeXBlPHR5cGVuYW1lIFQ6OkRlbGF5ZWRSZXBseT4oKSk7CisKICAgICBsb2dNZXNzYWdl
KGNvbm5lY3Rpb24sIFQ6Om5hbWUoKSwgKmFyZ3VtZW50cyk7Ci0gICAgY2FsbE1lbWJlckZ1bmN0
aW9uKGNvbm5lY3Rpb24sIFdURk1vdmUoKmFyZ3VtZW50cyksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCBvYmplY3QsIGZ1bmN0aW9uKTsKKyAgICBjYWxsTWVtYmVyRnVuY3Rpb24oY29ubmVj
dGlvbiwgV1RGTW92ZSgqYXJndW1lbnRzKSwKKyAgICAgICAgQ29tcGxldGlvbkhhbmRsZXJUeXBl
KFtyZXBseUVuY29kZXIgPSBXVEZNb3ZlKHJlcGx5RW5jb2RlciksIGNvbm5lY3Rpb24gPSBSZWYg
eyBjb25uZWN0aW9uIH1dIChhdXRvJiYuLi4gYXJncykgbXV0YWJsZSB7CisgICAgICAgICAgICBs
b2dSZXBseShjb25uZWN0aW9uLCBUOjpuYW1lKCksIGFyZ3MuLi4pOworICAgICAgICAgICAgVDo6
c2VuZChXVEZNb3ZlKHJlcGx5RW5jb2RlciksIFdURk1vdmUoY29ubmVjdGlvbiksIHN0ZDo6Zm9y
d2FyZDxkZWNsdHlwZShhcmdzKT4oYXJncykuLi4pOworICAgICAgICB9KSwKKyAgICAgICAgb2Jq
ZWN0LCBmdW5jdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI1MCwxMiArMzE5LDE2
IEBAIHZvaWQgaGFuZGxlTWVzc2FnZVN5bmNocm9ub3VzKFN0cmVhbVNlcnZlckNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIERlY29kZXImIGRlY29kCiAgICAgaWYgKFVOTElLRUxZKCFhcmd1bWVudHMp
KQogICAgICAgICByZXR1cm47CiAKLSAgICB0eXBlbmFtZSBUOjpEZWxheWVkUmVwbHkgY29tcGxl
dGlvbkhhbmRsZXIgPSBbc3luY1JlcXVlc3RJRCwgY29ubmVjdGlvbiA9IFJlZiB7IGNvbm5lY3Rp
b24gfV0gKGF1dG8mJi4uLiBhcmdzKSBtdXRhYmxlIHsKLSAgICAgICAgbG9nUmVwbHkoY29ubmVj
dGlvbi0+Y29ubmVjdGlvbigpLCBUOjpuYW1lKCksIGFyZ3MuLi4pOwotICAgICAgICBjb25uZWN0
aW9uLT5zZW5kU3luY1JlcGx5PFQ+KHN5bmNSZXF1ZXN0SUQsIGFyZ3MuLi4pOwotICAgIH07Cisg
ICAgdXNpbmcgQ29tcGxldGlvbkhhbmRsZXJUeXBlID0gdHlwZW5hbWUgQ29tcGxldGlvbkhhbmRs
ZXJUeXBlRGVkdWN0aW9uPE1GPjo6dGVtcGxhdGUgVHlwZTxzdGQ6OnR1cGxlX3NpemVfdjx0eXBl
bmFtZSBUOjpBcmd1bWVudHM+PjsKKyAgICBzdGF0aWNfYXNzZXJ0KENvbXBsZXRpb25IYW5kbGVy
VmFsaWRhdGlvbjxDb21wbGV0aW9uSGFuZGxlclR5cGU+Ojp0ZW1wbGF0ZSBtYXRjaGVzUmVwbHlU
eXBlPHR5cGVuYW1lIFQ6OkRlbGF5ZWRSZXBseT4oKSk7CisKICAgICBsb2dNZXNzYWdlKGNvbm5l
Y3Rpb24uY29ubmVjdGlvbigpLCBUOjpuYW1lKCksICphcmd1bWVudHMpOwotICAgIGNhbGxNZW1i
ZXJGdW5jdGlvbihXVEZNb3ZlKCphcmd1bWVudHMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgb2JqZWN0LCBmdW5jdGlvbik7CisgICAgY2FsbE1lbWJlckZ1bmN0aW9uKFdURk1vdmUoKmFy
Z3VtZW50cyksCisgICAgICAgIENvbXBsZXRpb25IYW5kbGVyVHlwZShbc3luY1JlcXVlc3RJRCwg
Y29ubmVjdGlvbiA9IFJlZiB7IGNvbm5lY3Rpb24gfV0gKGF1dG8mJi4uLiBhcmdzKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIGxvZ1JlcGx5KGNvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKSwgVDo6bmFt
ZSgpLCBhcmdzLi4uKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmRTeW5jUmVwbHk8VD4o
c3luY1JlcXVlc3RJRCwgc3RkOjpmb3J3YXJkPGRlY2x0eXBlKGFyZ3MpPihhcmdzKS4uLik7Cisg
ICAgICAgIH0pLAorICAgICAgICBvYmplY3QsIGZ1bmN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgQywgdHlwZW5hbWUgTUY+CkBAIC0yNjksMTMgKzM0MiwxNyBAQCB2
b2lkIGhhbmRsZU1lc3NhZ2VBc3luYyhDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBEZWNvZGVyJiBk
ZWNvZGVyLCBDKiBvYmplY3QsIE1GCiAgICAgaWYgKFVOTElLRUxZKCFhcmd1bWVudHMpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICB0eXBlbmFtZSBUOjpBc3luY1JlcGx5IGNvbXBsZXRpb25IYW5k
bGVyID0geyBbbGlzdGVuZXJJRCA9ICpsaXN0ZW5lcklELCBjb25uZWN0aW9uID0gUmVmIHsgY29u
bmVjdGlvbiB9XSAoYXV0byYmLi4uIGFyZ3MpIG11dGFibGUgewotICAgICAgICBhdXRvIGVuY29k
ZXIgPSBtYWtlVW5pcXVlUmVmPEVuY29kZXI+KFQ6OmFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpLCBs
aXN0ZW5lcklEKTsKLSAgICAgICAgbG9nUmVwbHkoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCBhcmdz
Li4uKTsKLSAgICAgICAgVDo6c2VuZChXVEZNb3ZlKGVuY29kZXIpLCBXVEZNb3ZlKGNvbm5lY3Rp
b24pLCBhcmdzLi4uKTsKLSAgICB9LCBUOjpjYWxsYmFja1RocmVhZCB9OworICAgIHVzaW5nIENv
bXBsZXRpb25IYW5kbGVyVHlwZSA9IHR5cGVuYW1lIENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVj
dGlvbjxNRj46OnRlbXBsYXRlIFR5cGU8c3RkOjp0dXBsZV9zaXplX3Y8dHlwZW5hbWUgVDo6QXJn
dW1lbnRzPj47CisgICAgc3RhdGljX2Fzc2VydChDb21wbGV0aW9uSGFuZGxlclZhbGlkYXRpb248
Q29tcGxldGlvbkhhbmRsZXJUeXBlPjo6dGVtcGxhdGUgbWF0Y2hlc1JlcGx5VHlwZTx0eXBlbmFt
ZSBUOjpBc3luY1JlcGx5PigpKTsKKwogICAgIGxvZ01lc3NhZ2UoY29ubmVjdGlvbiwgVDo6bmFt
ZSgpLCAqYXJndW1lbnRzKTsKLSAgICBjYWxsTWVtYmVyRnVuY3Rpb24oV1RGTW92ZSgqYXJndW1l
bnRzKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9iamVjdCwgZnVuY3Rpb24pOworICAg
IGNhbGxNZW1iZXJGdW5jdGlvbihXVEZNb3ZlKCphcmd1bWVudHMpLAorICAgICAgICBDb21wbGV0
aW9uSGFuZGxlclR5cGUgeyBbbGlzdGVuZXJJRCA9ICpsaXN0ZW5lcklELCBjb25uZWN0aW9uID0g
UmVmIHsgY29ubmVjdGlvbiB9XSAoYXV0byYmLi4uIGFyZ3MpIG11dGFibGUgeworICAgICAgICAg
ICAgYXV0byBlbmNvZGVyID0gbWFrZVVuaXF1ZVJlZjxFbmNvZGVyPihUOjphc3luY01lc3NhZ2VS
ZXBseU5hbWUoKSwgbGlzdGVuZXJJRCk7CisgICAgICAgICAgICBsb2dSZXBseShjb25uZWN0aW9u
LCBUOjpuYW1lKCksIGFyZ3MuLi4pOworICAgICAgICAgICAgVDo6c2VuZChXVEZNb3ZlKGVuY29k
ZXIpLCBXVEZNb3ZlKGNvbm5lY3Rpb24pLCBzdGQ6OmZvcndhcmQ8ZGVjbHR5cGUoYXJncyk+KGFy
Z3MpLi4uKTsKKyAgICAgICAgfSwgVDo6Y2FsbGJhY2tUaHJlYWQgfSwKKyAgICAgICAgb2JqZWN0
LCBmdW5jdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEMsIHR5cGVu
YW1lIE1GPgpAQCAtMjg5LDEzICszNjYsMTcgQEAgdm9pZCBoYW5kbGVNZXNzYWdlQXN5bmNXYW50
c0Nvbm5lY3Rpb24oQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgRGVjb2RlciYgZGVjb2RlciwKICAg
ICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybjsKIAotICAgIHR5cGVu
YW1lIFQ6OkFzeW5jUmVwbHkgY29tcGxldGlvbkhhbmRsZXIgPSB7IFtsaXN0ZW5lcklEID0gKmxp
c3RlbmVySUQsIGNvbm5lY3Rpb24gPSBSZWYgeyBjb25uZWN0aW9uIH1dIChhdXRvJiYuLi4gYXJn
cykgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gZW5jb2RlciA9IG1ha2VVbmlxdWVSZWY8RW5jb2Rl
cj4oVDo6YXN5bmNNZXNzYWdlUmVwbHlOYW1lKCksIGxpc3RlbmVySUQpOwotICAgICAgICBsb2dS
ZXBseShjb25uZWN0aW9uLCBUOjpuYW1lKCksIGFyZ3MuLi4pOwotICAgICAgICBUOjpzZW5kKFdU
Rk1vdmUoZW5jb2RlciksIFdURk1vdmUoY29ubmVjdGlvbiksIGFyZ3MuLi4pOwotICAgIH0sIFQ6
OmNhbGxiYWNrVGhyZWFkIH07CisgICAgdXNpbmcgQ29tcGxldGlvbkhhbmRsZXJUeXBlID0gdHlw
ZW5hbWUgQ29tcGxldGlvbkhhbmRsZXJUeXBlRGVkdWN0aW9uPE1GPjo6dGVtcGxhdGUgVHlwZTwx
ICsgc3RkOjp0dXBsZV9zaXplX3Y8dHlwZW5hbWUgVDo6QXJndW1lbnRzPj47CisgICAgc3RhdGlj
X2Fzc2VydChDb21wbGV0aW9uSGFuZGxlclZhbGlkYXRpb248Q29tcGxldGlvbkhhbmRsZXJUeXBl
Pjo6dGVtcGxhdGUgbWF0Y2hlc1JlcGx5VHlwZTx0eXBlbmFtZSBUOjpBc3luY1JlcGx5PigpKTsK
KwogICAgIGxvZ01lc3NhZ2UoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCAqYXJndW1lbnRzKTsKLSAg
ICBjYWxsTWVtYmVyRnVuY3Rpb24oY29ubmVjdGlvbiwgV1RGTW92ZSgqYXJndW1lbnRzKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9iamVjdCwgZnVuY3Rpb24pOworICAgIGNhbGxNZW1i
ZXJGdW5jdGlvbihjb25uZWN0aW9uLCBXVEZNb3ZlKCphcmd1bWVudHMpLAorICAgICAgICBDb21w
bGV0aW9uSGFuZGxlclR5cGUgeyBbbGlzdGVuZXJJRCA9ICpsaXN0ZW5lcklELCBjb25uZWN0aW9u
ID0gUmVmIHsgY29ubmVjdGlvbiB9XSAoYXV0byYmLi4uIGFyZ3MpIG11dGFibGUgeworICAgICAg
ICAgICAgYXV0byBlbmNvZGVyID0gbWFrZVVuaXF1ZVJlZjxFbmNvZGVyPihUOjphc3luY01lc3Nh
Z2VSZXBseU5hbWUoKSwgbGlzdGVuZXJJRCk7CisgICAgICAgICAgICBsb2dSZXBseShjb25uZWN0
aW9uLCBUOjpuYW1lKCksIGFyZ3MuLi4pOworICAgICAgICAgICAgVDo6c2VuZChXVEZNb3ZlKGVu
Y29kZXIpLCBXVEZNb3ZlKGNvbm5lY3Rpb24pLCBzdGQ6OmZvcndhcmQ8ZGVjbHR5cGUoYXJncyk+
KGFyZ3MpLi4uKTsKKyAgICAgICAgfSwgVDo6Y2FsbGJhY2tUaHJlYWQgfSwKKyAgICAgICAgb2Jq
ZWN0LCBmdW5jdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oCmluZGV4IGFiZWY0
ZWNmZTNlOTM3OGMxN2ZhYmUzNGQzYzI0ODNkMTQwNzQ3YmQuLmFiMzk3ZmJkYWJiMzBlNmM1YmMy
OGZhZDgwMTNmNmUwM2Q4OWQ2YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIFN0
cmVhbVNlcnZlckNvbm5lY3Rpb246OnNlbmRTeW5jUmVwbHkoQ29ubmVjdGlvbjo6U3luY1JlcXVl
c3RJRCBzeW5jUmVxdWVzdAogICAgIH0KICAgICBhdXRvIGVuY29kZXIgPSBtYWtlVW5pcXVlUmVm
PEVuY29kZXI+KE1lc3NhZ2VOYW1lOjpTeW5jTWVzc2FnZVJlcGx5LCBzeW5jUmVxdWVzdElELnRv
VUludDY0KCkpOwogCi0gICAgKGVuY29kZXIuZ2V0KCkgPDwgLi4uIDw8IGFyZ3VtZW50cyk7Cisg
ICAgKGVuY29kZXIuZ2V0KCkgPDwgLi4uIDw8IHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3Vt
ZW50cykpOwogICAgIG1fY29ubmVjdGlvbi0+c2VuZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIp
KTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457204</attachid>
            <date>2022-04-10 11:01:10 -0700</date>
            <delta_ts>2022-04-12 07:46:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238740-20220410200108.patch</filename>
            <type>text/plain</type>
            <size>51970</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM5ODlhNDkwYzFjZjQ4ZGE1
MmFhOGIwODU2ZDcyMTg3MDg2ZmY0NWQuLmU5NjcxNzYwODE3ZDZhMWRiYTdiZGNkZWYzYjUxYjJl
ZGY0ZTQ1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIyIEBACisyMDIyLTA0LTEwICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbV0syXSBFbmFibGUgbW9y
ZSBlZmZpY2llbnQgZW5jb2Rpbmcgb2Ygc3luY2hyb25vdXMtbWVzc2FnZSByZXBseSBhcmd1bWVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODc0
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhbmRs
aW5nIG9mIHN5bmNocm9ub3VzIG1lc3NhZ2VzIHJlcXVpcmVzIGNvbnN0cnVjdGlvbiBvZiBhCisg
ICAgICAgIENvbXBsZXRpb25IYW5kbGVyIG9iamVjdCB0aGF0IHdyYXBzIGEgbGFtYmRhIGZ1bmN0
aW9uIHdoaWNoIGhhbmRsZXMKKyAgICAgICAgbG9nZ2luZyBvZiB0aGUgcGFzc2VkLWluIHJlcGx5
IGFyZ3VtZW50cyBhcyB3ZWxsIGFzIHN1YnNlcXVlbnQgZW5jb2RpbmcKKyAgICAgICAgYW5kIGRp
c3BhdGNoaW5nIG9mIHRoZSByZXBseSBpbnRvIHRoZSBJUEMgY2hhbm5lbC4KKworICAgICAgICBS
aWdodCBub3csIGZvciBhbnkgZ2l2ZW4gbWVzc2FnZSB0aGUgQ29tcGxldGlvbkhhbmRsZXIgdHlw
ZSBpcyBnZW5lcmF0ZWQKKyAgICAgICAgZnJvbSB0aGUgSVBDIG1lc3NhZ2Ugc3BlY2lmaWNhdGlv
biwgYW5kIGl0J3MgZXNzZW50aWFsbHkgYSBmdW5jdGlvbiB0eXBlCisgICAgICAgIHdpdGggYSB2
b2lkIHJldHVybiB2YWx1ZSBhbmQgY29uc3QgbHZhbHVlIHJlZmVyZW5jZXMgZm9yIGV2ZXJ5Cisg
ICAgICAgIG5vbi1idWlsdGluIHBhcmFtZXRlciB0eXBlLiBUaGlzIHR5cGUgaXMgaW1wb3NlZCBv
bnRvIHRoZSBsYW1iZGEgaGFuZGxlcgorICAgICAgICBhbmQgd2hlbiBpbnZva2VkLCBhbGwgdGhl
IHJlcGx5IGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHRvIHRoZSBJUEMKKyAgICAgICAgZW5jb2Rp
bmcgYXMgbHZhbHVlIHJlZmVyZW5jZXMuCisKKyAgICAgICAgVGhpcyBpbmhpYml0cyBvcHBvcnR1
bml0aWVzIHdoZXJlIHRoZSByZXBseSBhcmd1bWVudCBjb3VsZCBpbnN0ZWFkIGJlCisgICAgICAg
IG1vdmVkIGludG8gdGhlIGNvbXBsZXRpb24gaGFuZGxlciBpbnZvY2F0aW9uLCBlbmFibGluZyBh
IG1vcmUgZWZmaWNpZW50CisgICAgICAgIGVuY29kaW5nIG9mIHRoZSBwYXNzZWQtaW4gdmFsdWUu
IEZvciBpbnN0YW5jZSwgaWYgYSBVbml4IGZpbGUgZGVzY3JpcHRvcgorICAgICAgICB3YXMgbW92
ZWQgaW50byB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGludm9jYXRpb24sIGl0IGNvdWxkIGJlIHRy
aWNrbGVkCisgICAgICAgIGRvd24gaW50byBhbiBJUEM6OkF0dGFjaG1lbnQgb2JqZWN0IGFuZCBk
aXNwYXRjaGVkIG92ZXIgSVBDIHdpdGhvdXQgYW55CisgICAgICAgIHByb2JsZW1zLiBJbnN0ZWFk
LCBiZWNhdXNlIHRoZSBsdmFsdWUgcmVmZXJlbmNlIGlzIGltcG9zZWQgYXMgdGhlIHR5cGUsCisg
ICAgICAgIGl0IHdpbGwgaGF2ZSB0byBiZSBkdXBsaWNhdGVkIGV2ZW4gaWYgdGhlIG9iamVjdCBp
dHNlbGYgaXMgZXhwaXJpbmcgb3IKKyAgICAgICAgd291bGQgYmUgbW92YWJsZSBkb3duIHRoZSBp
bnZvY2F0aW9uLgorCisgICAgICAgIFRvIGNvdmVyIHRoZXNlIGNhc2VzLCB0aGUgYWN0dWFsIGNv
bXBsZXRpb24gaGFuZGxlciB0eXBlIGlzIG5vdyBkZWR1Y2VkCisgICAgICAgIGZyb20gdGhlIHN5
bmNocm9ub3VzLW1lc3NhZ2UtaGFuZGxpbmcgbWV0aG9kIGl0c2VsZi4gVGhpcyBtZWFucyB0aGF0
CisgICAgICAgIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgcGFyYW1ldGVyIGZvciB0aGUgZ2l2ZW4g
aGFuZGxlciBtZXRob2QgY2FuIG5vdworICAgICAgICBzcGVjaWZ5IHdoZXRoZXIgaXQgd2FudHMg
dG8gcmVjZWl2ZSByZXBseSBhcmd1bWVudHMgYnkgdmFsdWUgb3IgYnkKKyAgICAgICAgZWl0aGVy
IGx2YWx1ZSBvciBydmFsdWUgcmVmZXJlbmNlLiBUaGUgY29tcGxldGlvbiBoYW5kbGVyIGxhbWJk
YSBjYW4KKyAgICAgICAgY29tYmluZSB0aGVzZSBwYXJhbWV0ZXIgdHlwZXMgd2l0aCBzdGQ6OmZv
cndhcmQoKSB0byBwYXNzIGRvd24gdGhlCisgICAgICAgIGFjdHVhbCBhcmd1bWVudHMgaW4gdGhl
IG1vc3Qgb3B0aW1hbCBmYXNoaW9uLgorCisgICAgICAgIFRvIGF2b2lkIHByb2JsZW1zLCBlYWNo
IENvbXBsZXRpb25IYW5kbGVyIHNwZWNpYWxpemF0aW9uIHJldHJpZXZlZCBmcm9tCisgICAgICAg
IHRoZSBtZXRob2Qgc2lnYW50dXJlIGlzIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBDb21wbGV0aW9u
SGFuZGxlciB0eXBlCisgICAgICAgIGdlbmVyYXRlZCBmcm9tIHRoZSBJUEMgc3BlY2lmaWNhdGlv
biwgcmVxdWlyaW5nIHRoYXQgdGhlIGRlY2F5ZWQKKyAgICAgICAgcGFyYW1ldGVyIHR5cGVzIG1h
dGNoIGJldHdlZW4gdGhlIHR3by4gSXQncyBzdGlsbCBwb3NzaWJsZSB0byBkaXJlY3RseQorICAg
ICAgICB1c2UgdGhlIENvbXBsZXRpb25IYW5kbGVyIHR5cGUgZnJvbSB0aGUgSVBDIHNwZWNpZmlj
YXRpb24gYXMgdGhlCisgICAgICAgIGNvbXBsZXRpb24gaGFuZGxlciB0eXBlIGluIHRoZSBtZXNz
YWdlLWhhbmRsaW5nIG1ldGhvZC4KKworICAgICAgICBBbiBydmFsdWUgcmVmZXJlbmNlIHZhcmlh
bnQgb2YgQXJndW1lbnRDb2RlcjxUPjo6ZW5jb2RlKCkgaXMgYWRkZWQuCisgICAgICAgIEdlbmVy
aWMgaW1wbGVtZW50YXRpb24gYWdhaW4gY2FzdHMgdGhlIHBhc3NlZC1pbiByZWZlcmVuY2UgaW50
byBhbgorICAgICAgICBydmFsdWUgYW5kIGNhbGxzIHRoZSBlbmNvZGUoKSBvbiB0aGF0IG9iamVj
dC4gSWYgdGhhdCB0eXBlIHByb3ZpZGVzCisgICAgICAgIHJlZi1xdWFsaWZpZWQgZW5jb2RlKCkg
bWV0aG9kcywgaW1wbGVtZW50YXRpb25zIG9mIHRob3NlIG1ldGhvZHMgY2FuCisgICAgICAgIGFk
anVzdCBhbmQgbW9yZSBhZ2dyZXNzaXZlbHkgbW92ZSB0aGluZ3MgaW50byB0aGUgZW5jb2RlciB3
aGVuIHRoZQorICAgICAgICBtZXRob2QgaXMgY2FsbGVkIG9uIGFuIHJ2YWx1ZS4gSXQgd291bGQg
YWxzbyBiZSBwb3NzaWJsZSB0byBkZWxldGUgdGhlCisgICAgICAgIHJlZi1xdWFsaWZpZWQgbWV0
aG9kIGNvdmVyaW5nIGx2YWx1ZXMsIG1lYW5pbmcgZW5jb2Rpbmcgd291bGQgYmUgYWxsb3dlZAor
ICAgICAgICBvbmx5IGZvciBvYmplY3RzIHRoYXQgYXJlIG1vdmVkIGludG8gdGhlIGNvbXBsZXRp
b24gaGFuZGxlci4KKworICAgICAgICBGb3IgdHlwZXMgd2l0aCBjdXN0b20gc3BlY2lhbGl6YXRp
b25zIG9mIEFyZ3VtZW50Q29kZXI8VD4sIHRob3NlCisgICAgICAgIHNwZWNpYWxpemF0aW9ucyB3
b3VsZCBhZ2FpbiBoYXZlIHRvIHByb3ZpZGUgcnZhbHVlIHZhcmlhbnRzIG9mIHRoZQorICAgICAg
ICBlbmNvZGUoKSBtZXRob2QgYW5kIGhhbmRsZSB0aGUgcGFzc2VkLWluIHZhbHVlcyBhcHByb3By
aWF0ZWx5LgorCisgICAgICAgIFRoZSBzZW5kKCkgbWV0aG9kcyB0aGF0IHdlcmUgcHJldmlvdXNs
eSBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IElQQyBtZXNzYWdlCisgICAgICAgIGFyZSByZW1vdmVkIGlu
IGZhdm9yIG9mIGVuY29kaW5nIGFuZCBjYWxsaW5nIENvbm5lY3Rpb246OnNlbmRTeW5jUmVwbHko
KQorICAgICAgICBpbiB0aGUgY29tcGxldGlvbi1oYW5kbGVyIGxhbWJkYS4gTWlzc2luZyBzdGQ6
OmZvcndhcmQoKSBjYWxscyBhcmUgYWRkZWQKKyAgICAgICAgaW4gcGFyYW1ldGVyIHBhY2sgZXhw
YW5zaW9ucyBhcyByZXF1aXJlZC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3Rl
Q0RNUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVDRE1Qcm94eTo6Z2V0U3VwcG9y
dGVkQ29uZmlndXJhdGlvbik6CisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVDRE1Q
cm94eS5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZG
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eTo6
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVt
b3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1l
bnRDb2Rlci5oOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyOjplbmNvZGUpOgorICAgICAg
ICAqIFBsYXRmb3JtL0lQQy9IYW5kbGVNZXNzYWdlLmg6CisgICAgICAgIChJUEM6OkNsYXNzVHlw
ZTo6KToKKyAgICAgICAgKElQQzo6Q29tcGxldGlvbkhhbmRsZXJWYWxpZGF0aW9uOjptYXRjaGlu
Z1BhcmFtZXRlcnMpOgorICAgICAgICAoSVBDOjpDb21wbGV0aW9uSGFuZGxlclZhbGlkYXRpb246
Om1hdGNoZXNSZXBseVR5cGUpOgorICAgICAgICAoSVBDOjpoYW5kbGVNZXNzYWdlU3luY2hyb25v
dXMpOgorICAgICAgICAoSVBDOjpoYW5kbGVNZXNzYWdlU3luY2hyb25vdXNXYW50c0Nvbm5lY3Rp
b24pOgorICAgICAgICAoSVBDOjpoYW5kbGVNZXNzYWdlQXN5bmMpOgorICAgICAgICAoSVBDOjpo
YW5kbGVNZXNzYWdlQXN5bmNXYW50c0Nvbm5lY3Rpb24pOgorICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmg6CisgICAgICAgIChJUEM6OlN0cmVhbVNlcnZlckNv
bm5lY3Rpb246OnNlbmRTeW5jUmVwbHkpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5OgorICAgICAgICAobWVzc2FnZV90b19zdHJ1Y3RfZGVjbGFyYXRpb24pOgorICAgICAg
ICAoZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC90
ZXN0cy9UZXN0V2l0aENWUGl4ZWxCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOgorICAgICAgICAo
TWVzc2FnZXM6OlRlc3RXaXRoQ1ZQaXhlbEJ1ZmZlcjo6UmVjZWl2ZUNWUGl4ZWxCdWZmZXI6OnNl
bmQpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoQ1ZQ
aXhlbEJ1ZmZlck1lc3NhZ2VzLmg6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVz
dFdpdGhJbWFnZURhdGFNZXNzYWdlUmVjZWl2ZXIuY3BwOgorICAgICAgICAoTWVzc2FnZXM6OlRl
c3RXaXRoSW1hZ2VEYXRhOjpSZWNlaXZlSW1hZ2VEYXRhOjpzZW5kKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aEltYWdlRGF0YU1lc3NhZ2VzLmg6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhMZWdhY3lSZWNlaXZlck1lc3Nh
Z2VSZWNlaXZlci5jcHA6CisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZl
cjo6Q3JlYXRlUGx1Z2luOjpzZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0
V2l0aExlZ2FjeVJlY2VpdmVyOjpSdW5KYXZhU2NyaXB0QWxlcnQ6OnNlbmQpOiBEZWxldGVkLgor
ICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkdldFBsdWdpbnM6OnNl
bmQpOiBEZWxldGVkLgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6
OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpzZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKE1l
c3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzOjpz
ZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVy
OjpJbnRlcnByZXRLZXlFdmVudDo6c2VuZCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXQvdGVzdHMvVGVzdFdpdGhMZWdhY3lSZWNlaXZlck1lc3NhZ2VzLmg6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTZW1hcGhvcmVNZXNzYWdlUmVjZWl2ZXIuY3Bw
OgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoU2VtYXBob3JlOjpSZWNlaXZlU2VtYXBob3Jl
OjpzZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0
aFNlbWFwaG9yZU1lc3NhZ2VzLmg6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVz
dFdpdGhTdXBlcmNsYXNzTWVzc2FnZVJlY2VpdmVyLmNwcDoKKyAgICAgICAgKE1lc3NhZ2VzOjpU
ZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RBc3luY01lc3NhZ2U6OnNlbmQpOiBEZWxldGVkLgorICAg
ICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoU3VwZXJjbGFzczo6VGVzdEFzeW5jTWVzc2FnZVdpdGhO
b0FyZ3VtZW50czo6c2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhT
dXBlcmNsYXNzOjpUZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1lbnRzOjpzZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RBc3lu
Y01lc3NhZ2VXaXRoQ29ubmVjdGlvbjo6c2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChNZXNzYWdl
czo6VGVzdFdpdGhTdXBlcmNsYXNzOjpUZXN0U3luY01lc3NhZ2U6OnNlbmQpOiBEZWxldGVkLgor
ICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoU3VwZXJjbGFzczo6VGVzdFN5bmNocm9ub3VzTWVz
c2FnZTo6c2VuZCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVz
dFdpdGhTdXBlcmNsYXNzTWVzc2FnZXMuaDoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC90ZXN0
cy9UZXN0V2l0aG91dEF0dHJpYnV0ZXNNZXNzYWdlUmVjZWl2ZXIuY3BwOgorICAgICAgICAoTWVz
c2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6Q3JlYXRlUGx1Z2luOjpzZW5kKTogRGVsZXRl
ZC4KKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OlJ1bkphdmFTY3Jp
cHRBbGVydDo6c2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhvdXRB
dHRyaWJ1dGVzOjpHZXRQbHVnaW5zOjpzZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKE1lc3NhZ2Vz
OjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpzZW5k
KTogRGVsZXRlZC4KKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OlRl
c3RNdWx0aXBsZUF0dHJpYnV0ZXM6OnNlbmQpOiBEZWxldGVkLgorICAgICAgICAoTWVzc2FnZXM6
OlRlc3RXaXRob3V0QXR0cmlidXRlczo6SW50ZXJwcmV0S2V5RXZlbnQ6OnNlbmQpOiBEZWxldGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRob3V0QXR0cmlidXRlc01l
c3NhZ2VzLmg6CisgICAgICAgICogVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNwcDoK
KyAgICAgICAgQWRkIGEgbWlzc2luZyBpbmNsdWRlIHRoYXQgYnJpbmdzIGluIHRoZSBkZWZpbml0
aW9uIG9mIHRoZQorICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RDb3VudHMgdHlwZSBhbG9uZyB3
aXRoIGl0cyBlbmNvZGUoKSBtZXRob2QuCisKIDIwMjItMDQtMDkgIFNpbW9uIEZyYXNlciAgPHNp
bW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUHV0IGxheWVyIGJhY2tpbmcgc3RvcmUg
YnVmZmVycyBpbnRvIHRoZSBwZXItUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBJT1N1cmZhY2VQb29s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZUNETVByb3h5LmNw
cAppbmRleCA0NGZjNjg4Yzg0YWZjMDI0Y2QzNjgyZTBhN2Q3OGEzNjdiODQyNWFjLi4xMjllMDMx
Y2QzMmI5YTI1ODIxNTcwNDUzOGRiYzRmYTMyOTU3ZWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVDRE1Qcm94eS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAg
c3RkOjpvcHRpb25hbDxTdHJpbmc+IFJlbW90ZUNETVByb3h5OjpzYW5pdGl6ZVNlc3Npb25JZChj
b25zdCBTdHJpbmcmIHNlc3Npb25JZCkKICAgICByZXR1cm4gbV9wcml2YXRlLT5zYW5pdGl6ZVNl
c3Npb25JZChzZXNzaW9uSWQpOwogfQogCi12b2lkIFJlbW90ZUNETVByb3h5OjpnZXRTdXBwb3J0
ZWRDb25maWd1cmF0aW9uKFdlYkNvcmU6OkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mJiBjb25m
aWd1cmF0aW9uLCBXZWJDb3JlOjpDRE1Qcml2YXRlOjpMb2NhbFN0b3JhZ2VBY2Nlc3MgYWNjZXNz
LCBXZWJDb3JlOjpDRE1Qcml2YXRlOjpTdXBwb3J0ZWRDb25maWd1cmF0aW9uQ2FsbGJhY2smJiBj
YWxsYmFjaykKK3ZvaWQgUmVtb3RlQ0RNUHJveHk6OmdldFN1cHBvcnRlZENvbmZpZ3VyYXRpb24o
V2ViQ29yZTo6Q0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24sIFdlYkNv
cmU6OkNETVByaXZhdGU6OkxvY2FsU3RvcmFnZUFjY2VzcyBhY2Nlc3MsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9u
Pik+JiYgY2FsbGJhY2spCiB7CiAgICAgbV9wcml2YXRlLT5nZXRTdXBwb3J0ZWRDb25maWd1cmF0
aW9uKFdURk1vdmUoY29uZmlndXJhdGlvbiksIGFjY2VzcywgV1RGTW92ZShjYWxsYmFjaykpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZUNETVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNUHJveHkuaApp
bmRleCBhOGJmMTdiYjJhY2VkYjM4MWQ3ODNkODkzMzA3YTBjNjkzNjYzOWZhLi4yNDYxNzVlZWU2
YjI0MjgyOGU2YTI3OGFhYmUzZTcyZDIyYmY4NmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNUHJveHkuaApAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JikgZmluYWw7CiAKICAgICAvLyBNZXNz
YWdlcwotICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ29uZmlndXJhdGlvbihXZWJDb3JlOjpDRE1LZXlT
eXN0ZW1Db25maWd1cmF0aW9uJiYsIFdlYkNvcmU6OkNETVByaXZhdGU6OkxvY2FsU3RvcmFnZUFj
Y2VzcywgV2ViQ29yZTo6Q0RNUHJpdmF0ZTo6U3VwcG9ydGVkQ29uZmlndXJhdGlvbkNhbGxiYWNr
JiYpOworICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ29uZmlndXJhdGlvbihXZWJDb3JlOjpDRE1LZXlT
eXN0ZW1Db25maWd1cmF0aW9uJiYsIFdlYkNvcmU6OkNETVByaXZhdGU6OkxvY2FsU3RvcmFnZUFj
Y2VzcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNETUtl
eVN5c3RlbUNvbmZpZ3VyYXRpb24+KT4mJik7CiAgICAgdm9pZCBjcmVhdGVJbnN0YW5jZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFJlbW90ZUNETUluc3RhbmNlSWRlbnRpZmllciwgUmVtb3RlQ0RN
SW5zdGFuY2VDb25maWd1cmF0aW9uJiYpPiYmKTsKICAgICB2b2lkIGxvYWRBbmRJbml0aWFsaXpl
KCk7CiAgICAgdm9pZCBzZXRMb2dJZGVudGlmaWVyKHVpbnQ2NF90KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZG
UHJveHkuY3BwCmluZGV4IDAyZjg1MDgyZWRhZGNhODA5NDg1NGFjODNhZWQ3MGNiZTJlMGQ0NDAu
LmVhYmJjMTQ4ZGRjMmMzODYzY2FlN2EzN2M4NGI0NTNlYTM4ZTRlMWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZUltYWdlRGVjb2Rl
ckFWRlByb3h5LmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgUmVtb3RlSW1hZ2VEZWNvZGVy
QVZGUHJveHk6OnNldERhdGEoSW1hZ2VEZWNvZGVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25z
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoZnJhbWVDb3VudCwgaW1hZ2VEZWNvZGVyLT5zaXplKCks
IGltYWdlRGVjb2Rlci0+aGFzVHJhY2soKSwgV1RGTW92ZShmcmFtZUluZm9zKSk7CiB9CiAKLXZv
aWQgUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHk6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KElt
YWdlRGVjb2RlcklkZW50aWZpZXIgaWRlbnRpZmllciwgc2l6ZV90IGluZGV4LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8V1RGOjpNYWNoU2VuZFJpZ2h0PiYmLCBXZWJDb3Jl
OjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZW1v
dGVJbWFnZURlY29kZXJBVkZQcm94eTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoSW1hZ2VEZWNv
ZGVySWRlbnRpZmllciBpZGVudGlmaWVyLCBzaXplX3QgaW5kZXgsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoc3RkOjpvcHRpb25hbDxXVEY6Ok1hY2hTZW5kUmlnaHQ+JiYsIHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQobV9pbWFnZURlY29kZXJzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAg
ICBpZiAoIW1faW1hZ2VEZWNvZGVycy5jb250YWlucyhpZGVudGlmaWVyKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZUltYWdlRGVjb2RlckFWRlBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVy
QVZGUHJveHkuaAppbmRleCBmOGVjZGU3MjRhMWQ4MjVjZGQ3ZTZjNDFjODQwOTYyNThiZThjY2Fh
Li40OTJkZTcyYjMxZWNjYjAxZjk0ZmFiOGI2OWI4NDE1MTMyMTRlNTVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVy
QVZGUHJveHkuaApAQCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlRGVj
b2RlcihXZWJDb3JlOjpJbWFnZURlY29kZXJJZGVudGlmaWVyKTsKICAgICB2b2lkIHNldEV4cGVj
dGVkQ29udGVudFNpemUoV2ViQ29yZTo6SW1hZ2VEZWNvZGVySWRlbnRpZmllciwgbG9uZyBsb25n
IGV4cGVjdGVkQ29udGVudFNpemUpOwogICAgIHZvaWQgc2V0RGF0YShXZWJDb3JlOjpJbWFnZURl
Y29kZXJJZGVudGlmaWVyLCBjb25zdCBJUEM6OlNoYXJlZEJ1ZmZlckNvcHkmLCBib29sIGFsbERh
dGFSZWNlaXZlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzaXplX3QgZnJhbWVDb3VudCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgYm9vbCBoYXNUcmFjaywgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpGcmFtZUluZm8+PiYmKT4mJik7Ci0gICAgdm9p
ZCBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChXZWJDb3JlOjpJbWFnZURlY29kZXJJZGVudGlmaWVy
LCBzaXplX3QgaW5kZXgsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXVEY6
Ok1hY2hTZW5kUmlnaHQ+JiYsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSk+JiYpOwor
ICAgIHZvaWQgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoV2ViQ29yZTo6SW1hZ2VEZWNvZGVySWRl
bnRpZmllciwgc2l6ZV90IGluZGV4LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9u
YWw8V1RGOjpNYWNoU2VuZFJpZ2h0PiYmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRlc3RpbmF0
aW9uQ29sb3JTcGFjZT4mJik+JiYpOwogICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKFdl
YkNvcmU6OkltYWdlRGVjb2RlcklkZW50aWZpZXIsIHNpemVfdCBpbmRleCk7CiAKICAgICB2b2lk
IGVuY29kZWREYXRhU3RhdHVzQ2hhbmdlZChXZWJDb3JlOjpJbWFnZURlY29kZXJJZGVudGlmaWVy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIu
aCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAppbmRleCA4NjUx
NzAxNjk5YjgwNWIzYjU3ZDRjYzY1ZDU2OTA4Mzg1ZTA3ZDc0Li5hMWM5ZDBlOWU2ZDlhYjY0YzQ4
MGYwMmI0YTE3NmY5M2Y0ZGYwODM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9Bcmd1bWVudENvZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJn
dW1lbnRDb2Rlci5oCkBAIC01MCw2ICs1MCwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSA9IHZvaWQ+IHN0cnVjdCBBcmd1bWVudENvZGVyIHsKICAgICAgICAgdC5lbmNvZGUoZW5j
b2Rlcik7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KKyAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgVCYmIHQpCisgICAgeworICAgICAgICBX
VEZNb3ZlKHQpLmVuY29kZShlbmNvZGVyKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBEZWNvZGVyPgogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFQ+IGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0hh
bmRsZU1lc3NhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2Uu
aAppbmRleCA2M2I4ZmE4NjdlZjE1YTlmMzBhMDJmYWVjZjA5Zjg4ZTdiNWFlNzE4Li5hZGM5ODA2
ZDYzYzNhOGUzNTRmZTVlYmY5ZDdiOTk3MTk2MTM3MTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9IYW5kbGVNZXNzYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvSGFuZGxlTWVzc2FnZS5oCkBAIC0xNzMsNiArMTczLDY3IEBAIHZvaWQgY2FsbE1l
bWJlckZ1bmN0aW9uKENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIEFyZ3NUdXBsZSYmIGFyZ3MsIEMq
IG9iamVjdCwgTUYKICAgICBjYWxsTWVtYmVyRnVuY3Rpb25JbXBsKG9iamVjdCwgZnVuY3Rpb24s
IGNvbm5lY3Rpb24sIHN0ZDo6Zm9yd2FyZDxBcmdzVHVwbGU+KGFyZ3MpLCBBcmdzSW5kaWNlcygp
KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBDb21wbGV0aW9uSGFuZGxlclR5
cGVEZWR1Y3Rpb247CisKKy8vIFRoZSBmb2xsb3dpbmcgdHdvIHBhcnRpYWwgc3BlY2lhbGl6YXRp
b25zIGVuYWJsZSByZXRyaWV2YWwgb2YgdGhlIHBhcmFtZXRlciB0eXBlIGF0IHRoZSBzcGVjaWZp
ZWQgaW5kZXggcG9zaXRpb24uCisvLyBUaGlzIGFsbG93cyByZXRyaWV2aW5nIHRoZSBleGFjdCB0
eXBlIG9mIHRoZSBwYXJhbWV0ZXIgd2hlcmUgdGhlIENvbXBsZXRpb25IYW5kbGVyIGlzIGV4cGVj
dGVkIGluIGEgZ2l2ZW4KKy8vIHN5bmNocm9ub3VzLXJlcGx5IG1ldGhvZC4KKwordGVtcGxhdGU8
dHlwZW5hbWUgUmVzdWx0LCB0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lLi4uIFBhcmFtZXRl
clR5cGVzPgorc3RydWN0IENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVjdGlvbjxSZXN1bHQoQ2xh
c3NUeXBlOjoqKShQYXJhbWV0ZXJUeXBlcy4uLik+IHsKKyAgICB0ZW1wbGF0ZTxzaXplX3QgTiwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PChOIDwgc2l6ZW9mLi4uKFBhcmFtZXRlclR5cGVz
KSk+PgorICAgIHVzaW5nIFR5cGUgPSBzdGQ6OnJlbW92ZV9jdnJlZl90PHR5cGVuYW1lIHN0ZDo6
dHVwbGVfZWxlbWVudF90PE4sIHN0ZDo6dHVwbGU8UGFyYW1ldGVyVHlwZXMuLi4+Pj47Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHQsIHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUu
Li4gUGFyYW1ldGVyVHlwZXM+CitzdHJ1Y3QgQ29tcGxldGlvbkhhbmRsZXJUeXBlRGVkdWN0aW9u
PFJlc3VsdChDbGFzc1R5cGU6OiopKFBhcmFtZXRlclR5cGVzLi4uKSBjb25zdD4geworICAgIHRl
bXBsYXRlPHNpemVfdCBOLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8KE4gPCBzaXplb2Yu
Li4oUGFyYW1ldGVyVHlwZXMpKT4+CisgICAgdXNpbmcgVHlwZSA9IHN0ZDo6cmVtb3ZlX2N2cmVm
X3Q8dHlwZW5hbWUgc3RkOjp0dXBsZV9lbGVtZW50X3Q8Tiwgc3RkOjp0dXBsZTxQYXJhbWV0ZXJU
eXBlcy4uLj4+PjsKK307CisKKy8vIFRoZSBmb2xsb3dpbmcgcGFydGlhbCBzcGVjaWFsaXphdGlv
biBicmVha3MgZG93biB0aGUgQ29tcGxldGlvbkhhbmRsZXIncyByZXN1bHQgYW5kIHBhcmFtZXRl
ciB0eXBlcy4KKy8vIEl0J3MgdXNlZCBkdXJpbmcgdGhlIHZhbGlkYXRpb24gZm9yIG1hdGNoaW5n
IHRoZSBjb21wbGV0aW9uIGhhbmRsZXIncyBwYXJhbWV0ZXIgdHlwZXMgYWdhaW5zdCB0aGUKKy8v
IHBhcmFtZXRlciB0eXBlcyBvZiB0aGUgc3BlY2lmaWVkIHJlcGx5LgorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBSZXN1bHQsIHR5cGVuYW1lLi4uIFBhcmFtZXRlclR5cGVzPgorc3RydWN0IENvbXBsZXRp
b25IYW5kbGVyVHlwZURlZHVjdGlvbjxDb21wbGV0aW9uSGFuZGxlcjxSZXN1bHQoUGFyYW1ldGVy
VHlwZXMuLi4pPj4geworICAgIHVzaW5nIFJlc3VsdFR5cGUgPSBSZXN1bHQ7CisgICAgdXNpbmcg
UGFyYW1ldGVyc1R1cGxlVHlwZSA9IHN0ZDo6dHVwbGU8UGFyYW1ldGVyVHlwZXMuLi4+OworfTsK
KworLy8gQ29tcGxldGlvbkhhbmRsZXJWYWxpZGF0aW9uPEhhbmRsZXJUeXBlPjo6bWF0Y2hlc1Jl
cGx5VHlwZTxSZXBseVR5cGU+KCkgZXhwZWN0cyBib3RoIEhhbmRsZXJUeXBlCisvLyBhbmQgUmVw
bHlUeXBlIHRvIGJlIHNwZWNpYWxpemF0aW9ucyBvZiB0aGUgQ29tcGxldGlvbkhhbmRsZXIgdGVt
cGxhdGUuIEhhbmRsZXJUeXBlIGlzIHRoZSB0eXBlCisvLyBzcGVjaWZpZWQgaW4gdGhlIElQQyBo
YW5kbGluZyBtZXRob2Qgb24gdGhlIEMrKyBjbGFzcy4gUmVwbHlUeXBlIGlzIHRoZSB0eXBlIGdl
bmVyYXRlZCBmcm9tIHRoZQorLy8gSVBDIG1lc3NhZ2Ugc3BlY2lmaWNhdGlvbiAoYW5kIGNhbiBz
dGlsbCBiZSB1c2VkIGluIHRoZSBDKysgbWV0aG9kKS4KKy8vIFZhbGlkYXRpb24gcGFzc2VzIGlm
IGJvdGggdHlwZXMgYXJlIGluZGVlZCBzcGVjaWFsaXphdGlvbnMgb2YgdGhlIENvbXBsZXRpb25I
YW5kbGVyIHRlbXBsYXRlLAorLy8gYm90aCByZXR1cm4gdmFsdWVzIGFyZSB2b2lkLCBhbmQgYWxs
IHRoZSBkZWNheWVkIHBhcmFtZXRlciB0eXBlcyBtYXRjaCBiZXR3ZWVuIHRoZSB0d28KKy8vIENv
bXBsZXRpb25IYW5kbGVyIHNwZWNpYWxpemF0aW9ucy4KKwordGVtcGxhdGU8dHlwZW5hbWUgSGFu
ZGxlclR5cGU+CitzdHJ1Y3QgQ29tcGxldGlvbkhhbmRsZXJWYWxpZGF0aW9uIHsKKyAgICB0ZW1w
bGF0ZTxzaXplX3QgTiwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgIHVzaW5nIFBhcmFtZXRlclR1
cGxlRWxlbWVudCA9IHN0ZDo6cmVtb3ZlX2N2cmVmX3Q8c3RkOjp0dXBsZV9lbGVtZW50X3Q8Tiwg
VHVwbGVUeXBlPj47CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYW5kbGVyUGFyYW1ldGVyVHVw
bGUsIHR5cGVuYW1lIFJlcGx5UGFyYW1ldGVyVHVwbGUsIHNpemVfdC4uLiBJbmRpY2VzPgorICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBtYXRjaGluZ1BhcmFtZXRlcnMoc3RkOjppbmRleF9zZXF1
ZW5jZTxJbmRpY2VzLi4uPikKKyAgICB7CisgICAgICAgIHJldHVybiAoc3RkOjppc19zYW1lX3Y8
UGFyYW1ldGVyVHVwbGVFbGVtZW50PEluZGljZXMsIEhhbmRsZXJQYXJhbWV0ZXJUdXBsZT4sIFBh
cmFtZXRlclR1cGxlRWxlbWVudDxJbmRpY2VzLCBSZXBseVBhcmFtZXRlclR1cGxlPj4gJiYgLi4u
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXBseVR5cGU+CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG1hdGNoZXNSZXBseVR5cGUoKQorICAgIHsKKyAgICAgICAgdXNpbmcg
SGFuZGxlclJldHVyblR5cGUgPSB0eXBlbmFtZSBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rp
b248SGFuZGxlclR5cGU+OjpSZXN1bHRUeXBlOworICAgICAgICB1c2luZyBIYW5kbGVyUGFyYW1l
dGVyc1R1cGxlVHlwZSA9IHR5cGVuYW1lIENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVjdGlvbjxI
YW5kbGVyVHlwZT46OlBhcmFtZXRlcnNUdXBsZVR5cGU7CisgICAgICAgIHVzaW5nIFJlcGx5UmV0
dXJuVHlwZSA9IHR5cGVuYW1lIENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVjdGlvbjxSZXBseVR5
cGU+OjpSZXN1bHRUeXBlOworICAgICAgICB1c2luZyBSZXBseVBhcmFtZXRlcnNUdXBsZVR5cGUg
PSB0eXBlbmFtZSBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rpb248UmVwbHlUeXBlPjo6UGFy
YW1ldGVyc1R1cGxlVHlwZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNfdm9pZF92PEhhbmRsZXJS
ZXR1cm5UeXBlPiAmJiBzdGQ6OmlzX3ZvaWRfdjxSZXBseVJldHVyblR5cGU+CisgICAgICAgICAg
ICAmJiAoc3RkOjp0dXBsZV9zaXplX3Y8SGFuZGxlclBhcmFtZXRlcnNUdXBsZVR5cGU+ID09IHN0
ZDo6dHVwbGVfc2l6ZV92PFJlcGx5UGFyYW1ldGVyc1R1cGxlVHlwZT4pCisgICAgICAgICAgICAm
JiBtYXRjaGluZ1BhcmFtZXRlcnM8SGFuZGxlclBhcmFtZXRlcnNUdXBsZVR5cGUsIFJlcGx5UGFy
YW1ldGVyc1R1cGxlVHlwZT4oc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlPHN0ZDo6dHVwbGVfc2l6
ZV92PEhhbmRsZXJQYXJhbWV0ZXJzVHVwbGVUeXBlPj4oKSk7CisgICAgfQorfTsKKwogLy8gTWFp
biBkaXNwYXRjaCBmdW5jdGlvbnMKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTIxNCwxMiAr
Mjc1LDE3IEBAIGJvb2wgaGFuZGxlTWVzc2FnZVN5bmNocm9ub3VzKENvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIERlY29kZXImIGRlY29kZXIsIFVuaXF1ZVJlCiAgICAgaWYgKFVOTElLRUxZKCFhcmd1
bWVudHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB0eXBlbmFtZSBUOjpEZWxheWVk
UmVwbHkgY29tcGxldGlvbkhhbmRsZXIgPSBbcmVwbHlFbmNvZGVyID0gV1RGTW92ZShyZXBseUVu
Y29kZXIpLCBjb25uZWN0aW9uID0gUmVmIHsgY29ubmVjdGlvbiB9XSAoYXV0byYmLi4uIGFyZ3Mp
IG11dGFibGUgewotICAgICAgICBsb2dSZXBseShjb25uZWN0aW9uLCBUOjpuYW1lKCksIGFyZ3Mu
Li4pOwotICAgICAgICBUOjpzZW5kKFdURk1vdmUocmVwbHlFbmNvZGVyKSwgV1RGTW92ZShjb25u
ZWN0aW9uKSwgYXJncy4uLik7Ci0gICAgfTsKKyAgICB1c2luZyBDb21wbGV0aW9uSGFuZGxlclR5
cGUgPSB0eXBlbmFtZSBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rpb248TUY+Ojp0ZW1wbGF0
ZSBUeXBlPHN0ZDo6dHVwbGVfc2l6ZV92PHR5cGVuYW1lIFQ6OkFyZ3VtZW50cz4+OworICAgIHN0
YXRpY19hc3NlcnQoQ29tcGxldGlvbkhhbmRsZXJWYWxpZGF0aW9uPENvbXBsZXRpb25IYW5kbGVy
VHlwZT46OnRlbXBsYXRlIG1hdGNoZXNSZXBseVR5cGU8dHlwZW5hbWUgVDo6RGVsYXllZFJlcGx5
PigpKTsKKwogICAgIGxvZ01lc3NhZ2UoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCAqYXJndW1lbnRz
KTsKLSAgICBjYWxsTWVtYmVyRnVuY3Rpb24oV1RGTW92ZSgqYXJndW1lbnRzKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIG9iamVjdCwgZnVuY3Rpb24pOworICAgIGNhbGxNZW1iZXJGdW5j
dGlvbihXVEZNb3ZlKCphcmd1bWVudHMpLAorICAgICAgICBDb21wbGV0aW9uSGFuZGxlclR5cGUo
W3JlcGx5RW5jb2RlciA9IFdURk1vdmUocmVwbHlFbmNvZGVyKSwgY29ubmVjdGlvbiA9IFJlZiB7
IGNvbm5lY3Rpb24gfV0gKGF1dG8mJi4uLiBhcmdzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGxv
Z1JlcGx5KGNvbm5lY3Rpb24sIFQ6Om5hbWUoKSwgYXJncy4uLik7CisgICAgICAgICAgICAocmVw
bHlFbmNvZGVyLmdldCgpIDw8IC4uLiA8PCBzdGQ6OmZvcndhcmQ8ZGVjbHR5cGUoYXJncyk+KGFy
Z3MpKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmRTeW5jUmVwbHkoV1RGTW92ZShyZXBs
eUVuY29kZXIpKTsKKyAgICAgICAgfSksCisgICAgICAgIG9iamVjdCwgZnVuY3Rpb24pOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0yMzAsMTIgKzI5NiwxNyBAQCBib29sIGhhbmRsZU1lc3Nh
Z2VTeW5jaHJvbm91c1dhbnRzQ29ubmVjdGlvbihDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBEZWNv
ZGVyJiBkZQogICAgIGlmIChVTkxJS0VMWSghYXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIHR5cGVuYW1lIFQ6OkRlbGF5ZWRSZXBseSBjb21wbGV0aW9uSGFuZGxl
ciA9IFtyZXBseUVuY29kZXIgPSBXVEZNb3ZlKHJlcGx5RW5jb2RlciksIGNvbm5lY3Rpb24gPSBS
ZWYgeyBjb25uZWN0aW9uIH1dIChhdXRvJiYuLi4gYXJncykgbXV0YWJsZSB7Ci0gICAgICAgIGxv
Z1JlcGx5KGNvbm5lY3Rpb24sIFQ6Om5hbWUoKSwgYXJncy4uLik7Ci0gICAgICAgIFQ6OnNlbmQo
V1RGTW92ZShyZXBseUVuY29kZXIpLCBXVEZNb3ZlKGNvbm5lY3Rpb24pLCBhcmdzLi4uKTsKLSAg
ICB9OworICAgIHVzaW5nIENvbXBsZXRpb25IYW5kbGVyVHlwZSA9IHR5cGVuYW1lIENvbXBsZXRp
b25IYW5kbGVyVHlwZURlZHVjdGlvbjxNRj46OnRlbXBsYXRlIFR5cGU8MSArIHN0ZDo6dHVwbGVf
c2l6ZV92PHR5cGVuYW1lIFQ6OkFyZ3VtZW50cz4+OworICAgIHN0YXRpY19hc3NlcnQoQ29tcGxl
dGlvbkhhbmRsZXJWYWxpZGF0aW9uPENvbXBsZXRpb25IYW5kbGVyVHlwZT46OnRlbXBsYXRlIG1h
dGNoZXNSZXBseVR5cGU8dHlwZW5hbWUgVDo6RGVsYXllZFJlcGx5PigpKTsKKwogICAgIGxvZ01l
c3NhZ2UoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCAqYXJndW1lbnRzKTsKLSAgICBjYWxsTWVtYmVy
RnVuY3Rpb24oY29ubmVjdGlvbiwgV1RGTW92ZSgqYXJndW1lbnRzKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIG9iamVjdCwgZnVuY3Rpb24pOworICAgIGNhbGxNZW1iZXJGdW5jdGlvbihj
b25uZWN0aW9uLCBXVEZNb3ZlKCphcmd1bWVudHMpLAorICAgICAgICBDb21wbGV0aW9uSGFuZGxl
clR5cGUoW3JlcGx5RW5jb2RlciA9IFdURk1vdmUocmVwbHlFbmNvZGVyKSwgY29ubmVjdGlvbiA9
IFJlZiB7IGNvbm5lY3Rpb24gfV0gKGF1dG8mJi4uLiBhcmdzKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgIGxvZ1JlcGx5KGNvbm5lY3Rpb24sIFQ6Om5hbWUoKSwgYXJncy4uLik7CisgICAgICAgICAg
ICAocmVwbHlFbmNvZGVyLmdldCgpIDw8IC4uLiA8PCBzdGQ6OmZvcndhcmQ8ZGVjbHR5cGUoYXJn
cyk+KGFyZ3MpKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmRTeW5jUmVwbHkoV1RGTW92
ZShyZXBseUVuY29kZXIpKTsKKyAgICAgICAgfSksCisgICAgICAgIG9iamVjdCwgZnVuY3Rpb24p
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNTAsMTIgKzMyMSwxNiBAQCB2b2lkIGhhbmRs
ZU1lc3NhZ2VTeW5jaHJvbm91cyhTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBE
ZWNvZGVyJiBkZWNvZAogICAgIGlmIChVTkxJS0VMWSghYXJndW1lbnRzKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgdHlwZW5hbWUgVDo6RGVsYXllZFJlcGx5IGNvbXBsZXRpb25IYW5kbGVyID0g
W3N5bmNSZXF1ZXN0SUQsIGNvbm5lY3Rpb24gPSBSZWYgeyBjb25uZWN0aW9uIH1dIChhdXRvJiYu
Li4gYXJncykgbXV0YWJsZSB7Ci0gICAgICAgIGxvZ1JlcGx5KGNvbm5lY3Rpb24tPmNvbm5lY3Rp
b24oKSwgVDo6bmFtZSgpLCBhcmdzLi4uKTsKLSAgICAgICAgY29ubmVjdGlvbi0+c2VuZFN5bmNS
ZXBseTxUPihzeW5jUmVxdWVzdElELCBhcmdzLi4uKTsKLSAgICB9OworICAgIHVzaW5nIENvbXBs
ZXRpb25IYW5kbGVyVHlwZSA9IHR5cGVuYW1lIENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVjdGlv
bjxNRj46OnRlbXBsYXRlIFR5cGU8c3RkOjp0dXBsZV9zaXplX3Y8dHlwZW5hbWUgVDo6QXJndW1l
bnRzPj47CisgICAgc3RhdGljX2Fzc2VydChDb21wbGV0aW9uSGFuZGxlclZhbGlkYXRpb248Q29t
cGxldGlvbkhhbmRsZXJUeXBlPjo6dGVtcGxhdGUgbWF0Y2hlc1JlcGx5VHlwZTx0eXBlbmFtZSBU
OjpEZWxheWVkUmVwbHk+KCkpOworCiAgICAgbG9nTWVzc2FnZShjb25uZWN0aW9uLmNvbm5lY3Rp
b24oKSwgVDo6bmFtZSgpLCAqYXJndW1lbnRzKTsKLSAgICBjYWxsTWVtYmVyRnVuY3Rpb24oV1RG
TW92ZSgqYXJndW1lbnRzKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9iamVjdCwgZnVu
Y3Rpb24pOworICAgIGNhbGxNZW1iZXJGdW5jdGlvbihXVEZNb3ZlKCphcmd1bWVudHMpLAorICAg
ICAgICBDb21wbGV0aW9uSGFuZGxlclR5cGUoW3N5bmNSZXF1ZXN0SUQsIGNvbm5lY3Rpb24gPSBS
ZWYgeyBjb25uZWN0aW9uIH1dIChhdXRvJiYuLi4gYXJncykgbXV0YWJsZSB7CisgICAgICAgICAg
ICBsb2dSZXBseShjb25uZWN0aW9uLT5jb25uZWN0aW9uKCksIFQ6Om5hbWUoKSwgYXJncy4uLik7
CisgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kU3luY1JlcGx5PFQ+KHN5bmNSZXF1ZXN0SUQs
IHN0ZDo6Zm9yd2FyZDxkZWNsdHlwZShhcmdzKT4oYXJncykuLi4pOworICAgICAgICB9KSwKKyAg
ICAgICAgb2JqZWN0LCBmdW5jdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEMsIHR5cGVuYW1lIE1GPgpAQCAtMjY5LDEzICszNDQsMTggQEAgdm9pZCBoYW5kbGVNZXNz
YWdlQXN5bmMoQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgRGVjb2RlciYgZGVjb2RlciwgQyogb2Jq
ZWN0LCBNRgogICAgIGlmIChVTkxJS0VMWSghYXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgdHlwZW5hbWUgVDo6QXN5bmNSZXBseSBjb21wbGV0aW9uSGFuZGxlciA9IHsgW2xpc3Rl
bmVySUQgPSAqbGlzdGVuZXJJRCwgY29ubmVjdGlvbiA9IFJlZiB7IGNvbm5lY3Rpb24gfV0gKGF1
dG8mJi4uLiBhcmdzKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBlbmNvZGVyID0gbWFrZVVuaXF1
ZVJlZjxFbmNvZGVyPihUOjphc3luY01lc3NhZ2VSZXBseU5hbWUoKSwgbGlzdGVuZXJJRCk7Ci0g
ICAgICAgIGxvZ1JlcGx5KGNvbm5lY3Rpb24sIFQ6Om5hbWUoKSwgYXJncy4uLik7Ci0gICAgICAg
IFQ6OnNlbmQoV1RGTW92ZShlbmNvZGVyKSwgV1RGTW92ZShjb25uZWN0aW9uKSwgYXJncy4uLik7
Ci0gICAgfSwgVDo6Y2FsbGJhY2tUaHJlYWQgfTsKKyAgICB1c2luZyBDb21wbGV0aW9uSGFuZGxl
clR5cGUgPSB0eXBlbmFtZSBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rpb248TUY+Ojp0ZW1w
bGF0ZSBUeXBlPHN0ZDo6dHVwbGVfc2l6ZV92PHR5cGVuYW1lIFQ6OkFyZ3VtZW50cz4+OworICAg
IHN0YXRpY19hc3NlcnQoQ29tcGxldGlvbkhhbmRsZXJWYWxpZGF0aW9uPENvbXBsZXRpb25IYW5k
bGVyVHlwZT46OnRlbXBsYXRlIG1hdGNoZXNSZXBseVR5cGU8dHlwZW5hbWUgVDo6QXN5bmNSZXBs
eT4oKSk7CisKICAgICBsb2dNZXNzYWdlKGNvbm5lY3Rpb24sIFQ6Om5hbWUoKSwgKmFyZ3VtZW50
cyk7Ci0gICAgY2FsbE1lbWJlckZ1bmN0aW9uKFdURk1vdmUoKmFyZ3VtZW50cyksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBvYmplY3QsIGZ1bmN0aW9uKTsKKyAgICBjYWxsTWVtYmVyRnVu
Y3Rpb24oV1RGTW92ZSgqYXJndW1lbnRzKSwKKyAgICAgICAgQ29tcGxldGlvbkhhbmRsZXJUeXBl
IHsgW2xpc3RlbmVySUQgPSAqbGlzdGVuZXJJRCwgY29ubmVjdGlvbiA9IFJlZiB7IGNvbm5lY3Rp
b24gfV0gKGF1dG8mJi4uLiBhcmdzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8gZW5jb2Rl
ciA9IG1ha2VVbmlxdWVSZWY8RW5jb2Rlcj4oVDo6YXN5bmNNZXNzYWdlUmVwbHlOYW1lKCksIGxp
c3RlbmVySUQpOworICAgICAgICAgICAgbG9nUmVwbHkoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCBh
cmdzLi4uKTsKKyAgICAgICAgICAgIChlbmNvZGVyLmdldCgpIDw8IC4uLiA8PCBzdGQ6OmZvcndh
cmQ8ZGVjbHR5cGUoYXJncyk+KGFyZ3MpKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmRT
eW5jUmVwbHkoV1RGTW92ZShlbmNvZGVyKSk7CisgICAgICAgIH0sIFQ6OmNhbGxiYWNrVGhyZWFk
IH0sCisgICAgICAgIG9iamVjdCwgZnVuY3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRj4KQEAgLTI4OSwxMyArMzY5LDE4IEBAIHZvaWQgaGFu
ZGxlTWVzc2FnZUFzeW5jV2FudHNDb25uZWN0aW9uKENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIERl
Y29kZXImIGRlY29kZXIsCiAgICAgaWYgKFVOTElLRUxZKCFhcmd1bWVudHMpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICB0eXBlbmFtZSBUOjpBc3luY1JlcGx5IGNvbXBsZXRpb25IYW5kbGVyID0g
eyBbbGlzdGVuZXJJRCA9ICpsaXN0ZW5lcklELCBjb25uZWN0aW9uID0gUmVmIHsgY29ubmVjdGlv
biB9XSAoYXV0byYmLi4uIGFyZ3MpIG11dGFibGUgewotICAgICAgICBhdXRvIGVuY29kZXIgPSBt
YWtlVW5pcXVlUmVmPEVuY29kZXI+KFQ6OmFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpLCBsaXN0ZW5l
cklEKTsKLSAgICAgICAgbG9nUmVwbHkoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCBhcmdzLi4uKTsK
LSAgICAgICAgVDo6c2VuZChXVEZNb3ZlKGVuY29kZXIpLCBXVEZNb3ZlKGNvbm5lY3Rpb24pLCBh
cmdzLi4uKTsKLSAgICB9LCBUOjpjYWxsYmFja1RocmVhZCB9OworICAgIHVzaW5nIENvbXBsZXRp
b25IYW5kbGVyVHlwZSA9IHR5cGVuYW1lIENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVjdGlvbjxN
Rj46OnRlbXBsYXRlIFR5cGU8MSArIHN0ZDo6dHVwbGVfc2l6ZV92PHR5cGVuYW1lIFQ6OkFyZ3Vt
ZW50cz4+OworICAgIHN0YXRpY19hc3NlcnQoQ29tcGxldGlvbkhhbmRsZXJWYWxpZGF0aW9uPENv
bXBsZXRpb25IYW5kbGVyVHlwZT46OnRlbXBsYXRlIG1hdGNoZXNSZXBseVR5cGU8dHlwZW5hbWUg
VDo6QXN5bmNSZXBseT4oKSk7CisKICAgICBsb2dNZXNzYWdlKGNvbm5lY3Rpb24sIFQ6Om5hbWUo
KSwgKmFyZ3VtZW50cyk7Ci0gICAgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbm5lY3Rpb24sIFdURk1v
dmUoKmFyZ3VtZW50cyksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBvYmplY3QsIGZ1bmN0
aW9uKTsKKyAgICBjYWxsTWVtYmVyRnVuY3Rpb24oY29ubmVjdGlvbiwgV1RGTW92ZSgqYXJndW1l
bnRzKSwKKyAgICAgICAgQ29tcGxldGlvbkhhbmRsZXJUeXBlIHsgW2xpc3RlbmVySUQgPSAqbGlz
dGVuZXJJRCwgY29ubmVjdGlvbiA9IFJlZiB7IGNvbm5lY3Rpb24gfV0gKGF1dG8mJi4uLiBhcmdz
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlciA9IG1ha2VVbmlxdWVSZWY8RW5j
b2Rlcj4oVDo6YXN5bmNNZXNzYWdlUmVwbHlOYW1lKCksIGxpc3RlbmVySUQpOworICAgICAgICAg
ICAgbG9nUmVwbHkoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCBhcmdzLi4uKTsKKyAgICAgICAgICAg
IChlbmNvZGVyLmdldCgpIDw8IC4uLiA8PCBzdGQ6OmZvcndhcmQ8ZGVjbHR5cGUoYXJncyk+KGFy
Z3MpKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmRTeW5jUmVwbHkoV1RGTW92ZShlbmNv
ZGVyKSk7CisgICAgICAgIH0sIFQ6OmNhbGxiYWNrVGhyZWFkIH0sCisgICAgICAgIG9iamVjdCwg
ZnVuY3Rpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uaAppbmRleCBhYmVmNGVjZmUz
ZTkzNzhjMTdmYWJlMzRkM2MyNDgzZDE0MDc0N2JkLi5hN2M2ZWM0OGE5NTljZTQ5MzBhMzFjNjE4
Yzk1NzUzMDMzMzUyZjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9T
dHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
U3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBTdHJlYW1T
ZXJ2ZXJDb25uZWN0aW9uOjpzZW5kU3luY1JlcGx5KENvbm5lY3Rpb246OlN5bmNSZXF1ZXN0SUQg
c3luY1JlcXVlc3QKICAgICAgICAgICAgIGF1dG8gc3BhbiA9IGFjcXVpcmVBbGwoKTsKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBTdHJlYW1Db25uZWN0aW9uRW5jb2RlciBtZXNzYWdl
RW5jb2RlciB7IE1lc3NhZ2VOYW1lOjpTeW5jTWVzc2FnZVJlcGx5LCBzcGFuLmRhdGEsIHNwYW4u
c2l6ZSB9OwotICAgICAgICAgICAgICAgIGlmICgobWVzc2FnZUVuY29kZXIgPDwgLi4uIDw8IGFy
Z3VtZW50cykpCisgICAgICAgICAgICAgICAgaWYgKChtZXNzYWdlRW5jb2RlciA8PCAuLi4gPDwg
c3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKSkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN0cmVhbUNvbm5lY3Rpb25FbmNv
ZGVyIG91dE9mU3RyZWFtRW5jb2RlciB7IE1lc3NhZ2VOYW1lOjpQcm9jZXNzT3V0T2ZTdHJlYW1N
ZXNzYWdlLCBzcGFuLmRhdGEsIHNwYW4uc2l6ZSB9OwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQg
U3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6c2VuZFN5bmNSZXBseShDb25uZWN0aW9uOjpTeW5jUmVx
dWVzdElEIHN5bmNSZXF1ZXN0CiAgICAgfQogICAgIGF1dG8gZW5jb2RlciA9IG1ha2VVbmlxdWVS
ZWY8RW5jb2Rlcj4oTWVzc2FnZU5hbWU6OlN5bmNNZXNzYWdlUmVwbHksIHN5bmNSZXF1ZXN0SUQu
dG9VSW50NjQoKSk7CiAKLSAgICAoZW5jb2Rlci5nZXQoKSA8PCAuLi4gPDwgYXJndW1lbnRzKTsK
KyAgICAoZW5jb2Rlci5nZXQoKSA8PCAuLi4gPDwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJn
dW1lbnRzKSk7CiAgICAgbV9jb25uZWN0aW9uLT5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2Rl
cikpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA0
YTg4MDk4MDlhNTZmM2NlZjJhZGNlMDIwYTMwZjUwZTc3OTVkNzg1Li42NGYxMzYwMWMyMDlkOGE3
OWE2NjczZGJiMDc4ODk4ZmQ5MzQ4NWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQv
bWVzc2FnZXMucHkKQEAgLTIxMCwxMSArMjEwLDYgQEAgZGVmIG1lc3NhZ2VfdG9fc3RydWN0X2Rl
Y2xhcmF0aW9uKHJlY2VpdmVyLCBtZXNzYWdlKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2FsbGJhY2tUaHJlYWQgPSBXVEY6OkNvbXBsZXRp
b25IYW5kbGVyQ2FsbFRocmVhZDo6TWFpblRocmVhZDtcbicpCiAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNr
VGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRo
cmVhZDtcbicpCi0gICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKFNUUkVBTV9B
VFRSSUJVVEUpOgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIHN0YXRpYyB2b2lkIHNl
bmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJicpCi0gICAgICAg
ICAgICBpZiBsZW4oc2VuZF9wYXJhbWV0ZXJzKToKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcsICVzJyAlIGNvbXBsZXRpb25faGFuZGxlcl9wYXJhbWV0ZXJzKQotICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICB1c2luZyBS
ZXBseSA9ICVzO1xuJyAlIHJlcGx5X3R1cGxlKG1lc3NhZ2UpKQogICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSAlcztcbicgJSByZXBseV9hcmd1bWVudHNf
dHlwZShtZXNzYWdlKSkKIApAQCAtMTExMiwxNSArMTEwNyw2IEBAIGRlZiBnZW5lcmF0ZV9tZXNz
YWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJywg
Jy5qb2luKFsnSVBDOjpBc3luY1JlcGx5RXJyb3I8JyArIHgudHlwZSArICc+OjpjcmVhdGUoKScg
Zm9yIHggaW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzXSkpCiAgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnKTtcbn1cblxuJykKIAotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9p
ZCAlczo6c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbicgJSAobWVzc2FnZS5uYW1lKSkKLSAgICAgICAgICAgIGlmIGxlbihz
ZW5kX3BhcmFtZXRlcnMpOgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJywgJXMnICUg
JywgJy5qb2luKFsnICcuam9pbih4KSBmb3IgeCBpbiBzZW5kX3BhcmFtZXRlcnNdKSkKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJylcbntcbicpCi0gICAgICAgICAgICByZXN1bHQgKz0gWycg
ICAgZW5jb2Rlci5nZXQoKSA8PCAlcztcbicgJSB4Lm5hbWUgZm9yIHggaW4gbWVzc2FnZS5yZXBs
eV9wYXJhbWV0ZXJzXQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGNvbm5lY3Rpb24u
c2VuZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTtcbicpCi0gICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCd9XG4nKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQotCiAgICAgICAg
ICAgICBpZiBtZXNzYWdlLmNvbmRpdGlvbjoKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCcjZW5kaWZcblxuJykKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtp
dC90ZXN0cy9UZXN0V2l0aENWUGl4ZWxCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGIvU291cmNl
L1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aENWUGl4ZWxCdWZmZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwCmluZGV4IGI1NWFjNDk2YmIxNDJhMzI5OWY5ZWRlM2FhZTRlMjE1NDQ2MTUw
NzYuLjE3ZTIxYTg3ZjE5ZTNlOTcxY2E2MmYyNWEzMGYwMjVhYTc3MDc2ZGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhDVlBpeGVsQnVmZmVy
TWVzc2FnZVJlY2VpdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rl
c3RzL1Rlc3RXaXRoQ1ZQaXhlbEJ1ZmZlck1lc3NhZ2VSZWNlaXZlci5jcHAKQEAgLTY1LDEyICs2
NSw2IEBAIHZvaWQgUmVjZWl2ZUNWUGl4ZWxCdWZmZXI6OmNhbmNlbFJlcGx5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoUmV0YWluUHRyPENWUGl4ZWxCCiAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBD
OjpBc3luY1JlcGx5RXJyb3I8UmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+Pjo6Y3JlYXRlKCkp
OwogfQogCi12b2lkIFJlY2VpdmVDVlBpeGVsQnVmZmVyOjpzZW5kKFVuaXF1ZVJlZjxJUEM6OkVu
Y29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBSZXRh
aW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4mIHIwKQotewotICAgIGVuY29kZXIuZ2V0KCkgPDwgcjA7
Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwotfQotCiAj
ZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdpdGhDVlBpeGVsQnVmZmVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoQ1ZQaXhlbEJ1ZmZl
ck1lc3NhZ2VzLmggYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRo
Q1ZQaXhlbEJ1ZmZlck1lc3NhZ2VzLmgKaW5kZXggMTAxMWJlMWMzZTQ5ZWQ0N2UwMTY1MWQ3OTE0
YjE2ZmJlYzNiYTQ4Ni4uNTJkN2E1ZmZiOGM1ZDIxMmFiN2Q4NThmNjE2ZDI5NGU5OGIwMTgzMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aENW
UGl4ZWxCdWZmZXJNZXNzYWdlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQv
dGVzdHMvVGVzdFdpdGhDVlBpeGVsQnVmZmVyTWVzc2FnZXMuaApAQCAtODAsNyArODAsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgYXN5bmNNZXNzYWdlUmVwbHlOYW1l
KCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhDVlBpeGVsQnVmZmVyX1JlY2Vp
dmVDVlBpeGVsQnVmZmVyUmVwbHk7IH0KICAgICB1c2luZyBBc3luY1JlcGx5ID0gUmVjZWl2ZUNW
UGl4ZWxCdWZmZXJBc3luY1JlcGx5OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjYWxsYmFj
a1RocmVhZCA9IFdURjo6Q29tcGxldGlvbkhhbmRsZXJDYWxsVGhyZWFkOjpDb25zdHJ1Y3Rpb25U
aHJlYWQ7Ci0gICAgc3RhdGljIHZvaWQgc2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmLCBJ
UEM6OkNvbm5lY3Rpb24mLCBjb25zdCBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4mIHIwKTsK
ICAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8UmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+
Jj47CiAgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPFJldGFpblB0cjxDVlBp
eGVsQnVmZmVyUmVmPj47CiAgICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aElt
YWdlRGF0YU1lc3NhZ2VSZWNlaXZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0
L3Rlc3RzL1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZVJlY2VpdmVyLmNwcAppbmRleCBlYzU2ZjYw
ZWJhMjg4NmQ2MTE1ZjFhMDUwMGQxNDM2OTFhN2RkNmI0Li43OTlhNmNhYjQzYzAwOGE4ZDI5NmM0
NmU3OTljNWNkNmNiNDU2M2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L3Rlc3RzL1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZVJlY2VpdmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZVJl
Y2VpdmVyLmNwcApAQCAtNTgsMTIgKzU4LDYgQEAgdm9pZCBSZWNlaXZlSW1hZ2VEYXRhOjpjYW5j
ZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFnZUQKICAg
ICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlFcnJvcjxSZWZQdHI8V2ViQ29yZTo6
SW1hZ2VEYXRhPj46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBSZWNlaXZlSW1hZ2VEYXRhOjpzZW5k
KFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYgcjApCi17Ci0gICAgZW5j
b2Rlci5nZXQoKSA8PCByMDsKLSAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVwbHkoV1RGTW92ZShl
bmNvZGVyKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFRlc3RXaXRoSW1hZ2VEYXRhCiAKIH0gLy8g
bmFtZXNwYWNlIE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L3Rlc3RzL1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZXMuaCBiL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhJbWFnZURhdGFNZXNzYWdlcy5oCmluZGV4IDZhY2Yw
MzE4ZDBhZGIxMTEzMTA3NzgwOWNlYmQ3NmQ0ZDgwYTA2YzIuLmVmYzFjYzY4M2MyZGQ5ZDAzZDY0
NTc5MDM5YjEyMzc3OTFiYTJhYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvdGVzdHMvVGVzdFdpdGhJbWFnZURhdGFNZXNzYWdlcy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhJbWFnZURhdGFNZXNzYWdlcy5oCkBAIC03
NSw3ICs3NSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBhc3luY01l
c3NhZ2VSZXBseU5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aEltYWdl
RGF0YV9SZWNlaXZlSW1hZ2VEYXRhUmVwbHk7IH0KICAgICB1c2luZyBBc3luY1JlcGx5ID0gUmVj
ZWl2ZUltYWdlRGF0YUFzeW5jUmVwbHk7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhbGxi
YWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlv
blRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYs
IElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiByMCk7
CiAgICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+
Jj47CiAgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3Jl
OjpJbWFnZURhdGE+PjsKICAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoTGVn
YWN5UmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dl
YmtpdC90ZXN0cy9UZXN0V2l0aExlZ2FjeVJlY2VpdmVyTWVzc2FnZVJlY2VpdmVyLmNwcAppbmRl
eCBiNGQzMmFhNWVkZjI0NGNkZWY0Mjc1ZmZhNjY4ZjU4MDBjYjZjZjQxLi5jNTViMGY2YmU4Yjc2
ZGEzMmQ2M2IwZDY0MDk4Y2RlN2IxZTQ1NzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoTGVnYWN5UmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhMZWdh
Y3lSZWNlaXZlck1lc3NhZ2VSZWNlaXZlci5jcHAKQEAgLTg0LDEyICs4NCw2IEBAIHZvaWQgQ3Jl
YXRlUGx1Z2luOjpjYW5jZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wmJik+JiYg
Y29tcGxldGlvbkhhbmRsCiAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBc3luY1JlcGx5RXJy
b3I8Ym9vbD46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBDcmVhdGVQbHVnaW46OnNlbmQoVW5pcXVl
UmVmPElQQzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IGJvb2wgcmVzdWx0KQotewotICAgIGVuY29kZXIuZ2V0KCkgPDwgcmVzdWx0OwotICAgIGNvbm5l
Y3Rpb24uc2VuZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTsKLX0KLQogdm9pZCBSdW5KYXZh
U2NyaXB0QWxlcnQ6OmNhbGxSZXBseShJUEM6OkRlY29kZXImIGRlY29kZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwpAQCAtMTAwLDExICs5NCw2IEBAIHZvaWQgUnVuSmF2YVNjcmlwdEFsZXJ0OjpjYW5j
ZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsCiAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9pZCBSdW5KYXZhU2NyaXB0QWxlcnQ6OnNlbmQo
VW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24pCi17Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2Rlcikp
OwotfQotCiB2b2lkIEdldFBsdWdpbnM6OmNhbGxSZXBseShJUEM6OkRlY29kZXImIGRlY29kZXIs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6
OlBsdWdpbkluZm8+PiBwbHVnaW5zOwpAQCAtMTIyLDIzICsxMTEsNiBAQCB2b2lkIEdldFBsdWdp
bnM6OmNhbmNlbFJlcGx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlBs
dWdpbkluZm8+JgogICAgIGNvbXBsZXRpb25IYW5kbGVyKElQQzo6QXN5bmNSZXBseUVycm9yPFZl
Y3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPj46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBHZXRQbHVn
aW5zOjpzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4mIHBsdWdp
bnMpCi17Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCBwbHVnaW5zOwotICAgIGNvbm5lY3Rpb24uc2Vu
ZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTsKLX0KLQotdm9pZCBHZXRQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbjo6c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgSVBDOjpDb25uZWN0aW9uOjpIYW5kbGUmIGNv
bm5lY3Rpb25IYW5kbGUpCi17Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCBjb25uZWN0aW9uSGFuZGxl
OwotICAgIGNvbm5lY3Rpb24uc2VuZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTsKLX0KLQot
dm9pZCBUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzOjpzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+
JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQotewotICAgIGNvbm5lY3Rp
b24uc2VuZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTsKLX0KLQogI2lmIFBMQVRGT1JNKE1B
QykKIAogdm9pZCBJbnRlcnByZXRLZXlFdmVudDo6Y2FsbFJlcGx5KElQQzo6RGVjb2RlciYgZGVj
b2RlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21t
YW5kPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1OCwxMiArMTMwLDYgQEAgdm9pZCBJ
bnRlcnByZXRLZXlFdmVudDo6Y2FuY2VsUmVwbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViQ29yZTo6S2V5cHIKICAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlF
cnJvcjxWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPj46OmNyZWF0ZSgpKTsKIH0KIAot
dm9pZCBJbnRlcnByZXRLZXlFdmVudDo6c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmIGVu
Y29kZXIsIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6
OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmROYW1lKQotewotICAgIGVuY29kZXIuZ2V0KCkgPDwg
Y29tbWFuZE5hbWU7Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2Rl
cikpOwotfQotCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdpdGhMZWdhY3lSZWNlaXZl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0
aExlZ2FjeVJlY2VpdmVyTWVzc2FnZXMuaCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQv
dGVzdHMvVGVzdFdpdGhMZWdhY3lSZWNlaXZlck1lc3NhZ2VzLmgKaW5kZXggZDliYjk5NjgzYWM3
NGJmNGNlNTZlM2RlY2YzZjBiOWU2NjdmYWY5My4uNGQ4YmMxMjE2OWM2ZTcyMWJkN2JhNzM4YTg2
MjdmMDNlMzk5NjQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90
ZXN0cy9UZXN0V2l0aExlZ2FjeVJlY2VpdmVyTWVzc2FnZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoTGVnYWN5UmVjZWl2ZXJNZXNzYWdlcy5oCkBA
IC0yODgsNyArMjg4LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIGFz
eW5jTWVzc2FnZVJlcGx5TmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRo
TGVnYWN5UmVjZWl2ZXJfQ3JlYXRlUGx1Z2luUmVwbHk7IH0KICAgICB1c2luZyBBc3luY1JlcGx5
ID0gQ3JlYXRlUGx1Z2luQXN5bmNSZXBseTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2Fs
bGJhY2tUaHJlYWQgPSBXVEY6OkNvbXBsZXRpb25IYW5kbGVyQ2FsbFRocmVhZDo6Q29uc3RydWN0
aW9uVGhyZWFkOwotICAgIHN0YXRpYyB2b2lkIHNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4m
JiwgSVBDOjpDb25uZWN0aW9uJiwgYm9vbCByZXN1bHQpOwogICAgIHVzaW5nIFJlcGx5ID0gc3Rk
Ojp0dXBsZTxib29sJj47CiAgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGJv
b2w+OwogICAgIENyZWF0ZVBsdWdpbih1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlELCBjb25zdCBX
ZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTMxNyw3ICszMTYsNiBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgYXN5bmNNZXNzYWdlUmVwbHlO
YW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9S
dW5KYXZhU2NyaXB0QWxlcnRSZXBseTsgfQogICAgIHVzaW5nIEFzeW5jUmVwbHkgPSBSdW5KYXZh
U2NyaXB0QWxlcnRBc3luY1JlcGx5OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjYWxsYmFj
a1RocmVhZCA9IFdURjo6Q29tcGxldGlvbkhhbmRsZXJDYWxsVGhyZWFkOjpDb25zdHJ1Y3Rpb25U
aHJlYWQ7Ci0gICAgc3RhdGljIHZvaWQgc2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmLCBJ
UEM6OkNvbm5lY3Rpb24mKTsKICAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8PjsKICAgICB1
c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8PjsKICAgICBSdW5KYXZhU2NyaXB0QWxl
cnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtMzQ2LDcgKzM0
NCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBhc3luY01lc3NhZ2VS
ZXBseU5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2Vp
dmVyX0dldFBsdWdpbnNSZXBseTsgfQogICAgIHVzaW5nIEFzeW5jUmVwbHkgPSBHZXRQbHVnaW5z
QXN5bmNSZXBseTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2FsbGJhY2tUaHJlYWQgPSBX
VEY6OkNvbXBsZXRpb25IYW5kbGVyQ2FsbFRocmVhZDo6Q29uc3RydWN0aW9uVGhyZWFkOwotICAg
IHN0YXRpYyB2b2lkIHNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0
aW9uJiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+JiBwbHVnaW5zKTsKICAgICB1
c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8VmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+Jj47CiAg
ICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPFZlY3RvcjxXZWJDb3JlOjpQbHVn
aW5JbmZvPj47CiAgICAgZXhwbGljaXQgR2V0UGx1Z2lucyhib29sIHJlZnJlc2gpCkBAIC0zNzIs
NyArMzY5LDYgQEAgcHVibGljOgogCiAgICAgdXNpbmcgRGVsYXllZFJlcGx5ID0gR2V0UGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHk7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRv
IGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxUaHJlYWQ6OkNvbnN0
cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29k
ZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlJiBj
b25uZWN0aW9uSGFuZGxlKTsKICAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8SVBDOjpDb25u
ZWN0aW9uOjpIYW5kbGUmPjsKICAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8
SVBDOjpDb25uZWN0aW9uOjpIYW5kbGU+OwogICAgIGV4cGxpY2l0IEdldFBsdWdpblByb2Nlc3ND
b25uZWN0aW9uKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCkKQEAgLTM5OCw3ICszOTQsNiBAQCBw
dWJsaWM6CiAKICAgICB1c2luZyBEZWxheWVkUmVwbHkgPSBUZXN0TXVsdGlwbGVBdHRyaWJ1dGVz
RGVsYXllZFJlcGx5OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjYWxsYmFja1RocmVhZCA9
IFdURjo6Q29tcGxldGlvbkhhbmRsZXJDYWxsVGhyZWFkOjpDb25zdHJ1Y3Rpb25UaHJlYWQ7Ci0g
ICAgc3RhdGljIHZvaWQgc2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmLCBJUEM6OkNvbm5l
Y3Rpb24mKTsKICAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8PjsKICAgICB1c2luZyBSZXBs
eUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8PjsKICAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50
cygpIGNvbnN0CkBAIC01MDksNyArNTA0LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBJUEM6Ok1l
c3NhZ2VOYW1lIGFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5h
bWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfSW50ZXJwcmV0S2V5RXZlbnRSZXBseTsgfQogICAg
IHVzaW5nIEFzeW5jUmVwbHkgPSBJbnRlcnByZXRLZXlFdmVudEFzeW5jUmVwbHk7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxl
ckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKFVu
aXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kTmFtZSk7CiAgICAgdXNpbmcgUmVwbHkg
PSBzdGQ6OnR1cGxlPFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jj47CiAgICAgdXNp
bmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0Nv
bW1hbmQ+PjsKICAgICBleHBsaWNpdCBJbnRlcnByZXRLZXlFdmVudCh1aW50MzJfdCB0eXBlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aFNl
bWFwaG9yZU1lc3NhZ2VSZWNlaXZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0
L3Rlc3RzL1Rlc3RXaXRoU2VtYXBob3JlTWVzc2FnZVJlY2VpdmVyLmNwcAppbmRleCA5NjAwNmVm
MjczMDI0ZGU1YzAzYWIyZmNhMzY5MmYyM2I2MjY4MDg2Li42ODJhN2Q4YzIwYTM4NDdkZThiM2U1
NWNlY2UzMjlmODE1Y2U0ODYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L3Rlc3RzL1Rlc3RXaXRoU2VtYXBob3JlTWVzc2FnZVJlY2VpdmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU2VtYXBob3JlTWVzc2FnZVJl
Y2VpdmVyLmNwcApAQCAtNTUsMTIgKzU1LDYgQEAgdm9pZCBSZWNlaXZlU2VtYXBob3JlOjpjYW5j
ZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6U2VtYXBob3JlJiYpPiYmIGMKICAg
ICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlFcnJvcjxJUEM6OlNlbWFwaG9yZT46
OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBSZWNlaXZlU2VtYXBob3JlOjpzZW5kKFVuaXF1ZVJlZjxJ
UEM6OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25z
dCBJUEM6OlNlbWFwaG9yZSYgcjApCi17Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCByMDsKLSAgICBj
b25uZWN0aW9uLnNlbmRTeW5jUmVwbHkoV1RGTW92ZShlbmNvZGVyKSk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXaXRoU2VtYXBob3JlCiAKIH0gLy8gbmFtZXNwYWNlIE1lc3NhZ2VzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU2VtYXBo
b3JlTWVzc2FnZXMuaCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdp
dGhTZW1hcGhvcmVNZXNzYWdlcy5oCmluZGV4IGFmNmIwNmExNzAzM2YxMmVmNWM0M2E3ZTA4N2Zh
NDI2NWZjMjU3OTIuLjdmNmU5YTg2MjFkNTk1NjdjNzlhZDFhYjNjZTAzNmUxOTA3OWE2YzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTZW1h
cGhvcmVNZXNzYWdlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMv
VGVzdFdpdGhTZW1hcGhvcmVNZXNzYWdlcy5oCkBAIC03NCw3ICs3NCw2IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBhc3luY01lc3NhZ2VSZXBseU5hbWUoKSB7IHJldHVy
biBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aFNlbWFwaG9yZV9SZWNlaXZlU2VtYXBob3JlUmVw
bHk7IH0KICAgICB1c2luZyBBc3luY1JlcGx5ID0gUmVjZWl2ZVNlbWFwaG9yZUFzeW5jUmVwbHk7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0
aW9uSGFuZGxlckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9p
ZCBzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0
IElQQzo6U2VtYXBob3JlJiByMCk7CiAgICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPElQQzo6
U2VtYXBob3JlJj47CiAgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPElQQzo6
U2VtYXBob3JlPjsKICAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU3VwZXJj
bGFzc01lc3NhZ2VSZWNlaXZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rl
c3RzL1Rlc3RXaXRoU3VwZXJjbGFzc01lc3NhZ2VSZWNlaXZlci5jcHAKaW5kZXggM2E5NDExYzlm
OGVmYzI5MTc5NTYzYTJjMDUzNTVmMWRkYzZhY2NjMS4uOWE4YTNkMjc0YmMwNTViYWExNGIyYzE4
NWMxODgyZWJlOGEyODQyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtp
dC90ZXN0cy9UZXN0V2l0aFN1cGVyY2xhc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTdXBlcmNsYXNzTWVzc2FnZVJl
Y2VpdmVyLmNwcApAQCAtNjMsMTIgKzYzLDYgQEAgdm9pZCBUZXN0QXN5bmNNZXNzYWdlOjpjYW5j
ZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90JiYpPiYmIGNvbXBsZXQKICAg
ICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlFcnJvcjx1aW50NjRfdD46OmNyZWF0
ZSgpKTsKIH0KIAotdm9pZCBUZXN0QXN5bmNNZXNzYWdlOjpzZW5kKFVuaXF1ZVJlZjxJUEM6OkVu
Y29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBy
ZXN1bHQpCi17Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCByZXN1bHQ7Ci0gICAgY29ubmVjdGlvbi5z
ZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwotfQotCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShURVNUX0ZFQVRVUkUpCkBAIC04MywxMSArNzcsNiBAQCB2b2lkIFRlc3RBc3luY01lc3NhZ2VX
aXRoTm9Bcmd1bWVudHM6OmNhbmNlbFJlcGx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
bwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKLXZvaWQgVGVzdEFzeW5jTWVzc2FnZVdp
dGhOb0FyZ3VtZW50czo6c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKLXsKLSAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVw
bHkoV1RGTW92ZShlbmNvZGVyKSk7Ci19Ci0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVB
VFVSRSkKQEAgLTExNiwxMyArMTA1LDYgQEAgdm9pZCBUZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRp
cGxlQXJndW1lbnRzOjpjYW5jZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGIKICAgICBj
b21wbGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlFcnJvcjxib29sPjo6Y3JlYXRlKCksIElQ
Qzo6QXN5bmNSZXBseUVycm9yPHVpbnQ2NF90Pjo6Y3JlYXRlKCkpOwogfQogCi12b2lkIFRlc3RB
c3luY01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVudHM6OnNlbmQoVW5pcXVlUmVmPElQQzo6RW5j
b2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGJvb2wgZmxhZywg
dWludDY0X3QgdmFsdWUpCi17Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCBmbGFnOwotICAgIGVuY29k
ZXIuZ2V0KCkgPDwgdmFsdWU7Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUo
ZW5jb2RlcikpOwotfQotCiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCkBAIC0x
NDQsMjYgKzEyNiw4IEBAIHZvaWQgVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uOjpjYW5j
ZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wmJik+CiAgICAgY29tcGxldGlvbkhh
bmRsZXIoSVBDOjpBc3luY1JlcGx5RXJyb3I8Ym9vbD46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBU
ZXN0QXN5bmNNZXNzYWdlV2l0aENvbm5lY3Rpb246OnNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rl
cj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGJvb2wgZmxhZykKLXsK
LSAgICBlbmNvZGVyLmdldCgpIDw8IGZsYWc7Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5
KFdURk1vdmUoZW5jb2RlcikpOwotfQotCiAjZW5kaWYKIAotdm9pZCBUZXN0U3luY01lc3NhZ2U6
OnNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIHVpbnQ4X3QgcmVwbHkpCi17Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCByZXBs
eTsKLSAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVwbHkoV1RGTW92ZShlbmNvZGVyKSk7Ci19Ci0K
LXZvaWQgVGVzdFN5bmNocm9ub3VzTWVzc2FnZTo6c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVy
PiYmIGVuY29kZXIsIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3Qgc3RkOjpvcHRp
b25hbDxXZWJLaXQ6OlRlc3RDbGFzc05hbWU+JiBvcHRpb25hbFJlcGx5KQotewotICAgIGVuY29k
ZXIuZ2V0KCkgPDwgb3B0aW9uYWxSZXBseTsKLSAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVwbHko
V1RGTW92ZShlbmNvZGVyKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFRlc3RXaXRoU3VwZXJjbGFz
cwogCiB9IC8vIG5hbWVzcGFjZSBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
Y3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aFN1cGVyY2xhc3NNZXNzYWdlcy5oIGIvU291cmNl
L1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aFN1cGVyY2xhc3NNZXNzYWdlcy5o
CmluZGV4IDcxNmFkYzQ3MTVjNDFjZWQxNmQzOWU0NDgzZjE1NzZhOTI2NGY5MzQuLmFhNmE2ZGFm
MjVmOTUwNDRhNzAyMTg1YTdmOTA2ZjUyNWIwYzgwNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTdXBlcmNsYXNzTWVzc2FnZXMuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU3VwZXJjbGFzc01l
c3NhZ2VzLmgKQEAgLTgwLDcgKzgwLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBJUEM6Ok1lc3Nh
Z2VOYW1lIGFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6
OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5bmNNZXNzYWdlUmVwbHk7IH0KICAgICB1c2luZyBB
c3luY1JlcGx5ID0gVGVzdEFzeW5jTWVzc2FnZUFzeW5jUmVwbHk7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxUaHJl
YWQ6Ok1haW5UaHJlYWQ7Ci0gICAgc3RhdGljIHZvaWQgc2VuZChVbmlxdWVSZWY8SVBDOjpFbmNv
ZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24mLCB1aW50NjRfdCByZXN1bHQpOwogICAgIHVzaW5nIFJl
cGx5ID0gc3RkOjp0dXBsZTx1aW50NjRfdCY+OwogICAgIHVzaW5nIFJlcGx5QXJndW1lbnRzID0g
c3RkOjp0dXBsZTx1aW50NjRfdD47CiAgICAgZXhwbGljaXQgVGVzdEFzeW5jTWVzc2FnZShXZWJL
aXQ6OlRlc3RUd29TdGF0ZUVudW0gdHdvU3RhdGVFbnVtKQpAQCAtMTExLDcgKzExMCw2IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBhc3luY01lc3NhZ2VSZXBseU5hbWUo
KSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5j
TWVzc2FnZVdpdGhOb0FyZ3VtZW50c1JlcGx5OyB9CiAgICAgdXNpbmcgQXN5bmNSZXBseSA9IFRl
c3RBc3luY01lc3NhZ2VXaXRoTm9Bcmd1bWVudHNBc3luY1JlcGx5OwogICAgIHN0YXRpYyBjb25z
dGV4cHIgYXV0byBjYWxsYmFja1RocmVhZCA9IFdURjo6Q29tcGxldGlvbkhhbmRsZXJDYWxsVGhy
ZWFkOjpDb25zdHJ1Y3Rpb25UaHJlYWQ7Ci0gICAgc3RhdGljIHZvaWQgc2VuZChVbmlxdWVSZWY8
SVBDOjpFbmNvZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24mKTsKICAgICB1c2luZyBSZXBseSA9IHN0
ZDo6dHVwbGU8PjsKICAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8PjsKICAg
ICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CkBAIC0xMzcsNyArMTM1LDYgQEAg
cHVibGljOgogICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIGFzeW5jTWVzc2FnZVJlcGx5TmFt
ZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5
bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1lbnRzUmVwbHk7IH0KICAgICB1c2luZyBBc3luY1Jl
cGx5ID0gVGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBsZUFyZ3VtZW50c0FzeW5jUmVwbHk7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9u
SGFuZGxlckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBz
ZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGJvb2wgZmxh
ZywgdWludDY0X3QgdmFsdWUpOwogICAgIHVzaW5nIFJlcGx5ID0gc3RkOjp0dXBsZTxib29sJiwg
dWludDY0X3QmPjsKICAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8Ym9vbCwg
dWludDY0X3Q+OwogICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKQEAgLTE2
Myw3ICsxNjAsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgYXN5bmNN
ZXNzYWdlUmVwbHlOYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBl
cmNsYXNzX1Rlc3RBc3luY01lc3NhZ2VXaXRoQ29ubmVjdGlvblJlcGx5OyB9CiAgICAgdXNpbmcg
QXN5bmNSZXBseSA9IFRlc3RBc3luY01lc3NhZ2VXaXRoQ29ubmVjdGlvbkFzeW5jUmVwbHk7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9u
SGFuZGxlckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBz
ZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGJvb2wgZmxh
Zyk7CiAgICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPGJvb2wmPjsKICAgICB1c2luZyBSZXBs
eUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8Ym9vbD47CiAgICAgZXhwbGljaXQgVGVzdEFzeW5jTWVz
c2FnZVdpdGhDb25uZWN0aW9uKGNvbnN0IGludCYgdmFsdWUpCkBAIC0xOTAsNyArMTg2LDYgQEAg
cHVibGljOgogCiAgICAgdXNpbmcgRGVsYXllZFJlcGx5ID0gVGVzdFN5bmNNZXNzYWdlRGVsYXll
ZFJlcGx5OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjYWxsYmFja1RocmVhZCA9IFdURjo6
Q29tcGxldGlvbkhhbmRsZXJDYWxsVGhyZWFkOjpDb25zdHJ1Y3Rpb25UaHJlYWQ7Ci0gICAgc3Rh
dGljIHZvaWQgc2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24m
LCB1aW50OF90IHJlcGx5KTsKICAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8dWludDhfdCY+
OwogICAgIHVzaW5nIFJlcGx5QXJndW1lbnRzID0gc3RkOjp0dXBsZTx1aW50OF90PjsKICAgICBl
eHBsaWNpdCBUZXN0U3luY01lc3NhZ2UodWludDMyX3QgcGFyYW0pCkBAIC0yMTYsNyArMjExLDYg
QEAgcHVibGljOgogCiAgICAgdXNpbmcgRGVsYXllZFJlcGx5ID0gVGVzdFN5bmNocm9ub3VzTWVz
c2FnZURlbGF5ZWRSZXBseTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2FsbGJhY2tUaHJl
YWQgPSBXVEY6OkNvbXBsZXRpb25IYW5kbGVyQ2FsbFRocmVhZDo6Q29uc3RydWN0aW9uVGhyZWFk
OwotICAgIHN0YXRpYyB2b2lkIHNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpD
b25uZWN0aW9uJiwgY29uc3Qgc3RkOjpvcHRpb25hbDxXZWJLaXQ6OlRlc3RDbGFzc05hbWU+JiBv
cHRpb25hbFJlcGx5KTsKICAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8c3RkOjpvcHRpb25h
bDxXZWJLaXQ6OlRlc3RDbGFzc05hbWU+Jj47CiAgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBz
dGQ6OnR1cGxlPHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpUZXN0Q2xhc3NOYW1lPj47CiAgICAgZXhw
bGljaXQgVGVzdFN5bmNocm9ub3VzTWVzc2FnZShib29sIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aG91dEF0dHJpYnV0ZXNNZXNz
YWdlUmVjZWl2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0
V2l0aG91dEF0dHJpYnV0ZXNNZXNzYWdlUmVjZWl2ZXIuY3BwCmluZGV4IDE4NWEwZjU3ZmYxMzI2
NDdiZDliNDI3MWUwZmEwMjI1YTA1ZmM4MTUuLjEzOTUwMjUzODljYTE1ZDI1NWZlOWMxYzQ0NWFi
MzRiNDQ1M2I1NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVz
dHMvVGVzdFdpdGhvdXRBdHRyaWJ1dGVzTWVzc2FnZVJlY2VpdmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRob3V0QXR0cmlidXRlc01lc3NhZ2VS
ZWNlaXZlci5jcHAKQEAgLTg0LDEyICs4NCw2IEBAIHZvaWQgQ3JlYXRlUGx1Z2luOjpjYW5jZWxS
ZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wmJik+JiYgY29tcGxldGlvbkhhbmRsCiAg
ICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBc3luY1JlcGx5RXJyb3I8Ym9vbD46OmNyZWF0ZSgp
KTsKIH0KIAotdm9pZCBDcmVhdGVQbHVnaW46OnNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4m
JiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGJvb2wgcmVzdWx0KQotewot
ICAgIGVuY29kZXIuZ2V0KCkgPDwgcmVzdWx0OwotICAgIGNvbm5lY3Rpb24uc2VuZFN5bmNSZXBs
eShXVEZNb3ZlKGVuY29kZXIpKTsKLX0KLQogdm9pZCBSdW5KYXZhU2NyaXB0QWxlcnQ6OmNhbGxS
ZXBseShJUEM6OkRlY29kZXImIGRlY29kZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMTAwLDEx
ICs5NCw2IEBAIHZvaWQgUnVuSmF2YVNjcmlwdEFsZXJ0OjpjYW5jZWxSZXBseShDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsCiAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKIH0KIAotdm9pZCBSdW5KYXZhU2NyaXB0QWxlcnQ6OnNlbmQoVW5pcXVlUmVmPElQQzo6RW5j
b2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCi17Ci0gICAgY29u
bmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwotfQotCiB2b2lkIEdldFBs
dWdpbnM6OmNhbGxSZXBseShJUEM6OkRlY29kZXImIGRlY29kZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+PiBwbHVn
aW5zOwpAQCAtMTIyLDIzICsxMTEsNiBAQCB2b2lkIEdldFBsdWdpbnM6OmNhbmNlbFJlcGx5KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+JgogICAgIGNv
bXBsZXRpb25IYW5kbGVyKElQQzo6QXN5bmNSZXBseUVycm9yPFZlY3RvcjxXZWJDb3JlOjpQbHVn
aW5JbmZvPj46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBHZXRQbHVnaW5zOjpzZW5kKFVuaXF1ZVJl
ZjxJUEM6OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBj
b25zdCBWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4mIHBsdWdpbnMpCi17Ci0gICAgZW5jb2Rl
ci5nZXQoKSA8PCBwbHVnaW5zOwotICAgIGNvbm5lY3Rpb24uc2VuZFN5bmNSZXBseShXVEZNb3Zl
KGVuY29kZXIpKTsKLX0KLQotdm9pZCBHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6c2VuZChV
bmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgY29uc3QgSVBDOjpDb25uZWN0aW9uOjpIYW5kbGUmIGNvbm5lY3Rpb25IYW5kbGUpCi17
Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCBjb25uZWN0aW9uSGFuZGxlOwotICAgIGNvbm5lY3Rpb24u
c2VuZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTsKLX0KLQotdm9pZCBUZXN0TXVsdGlwbGVB
dHRyaWJ1dGVzOjpzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uKQotewotICAgIGNvbm5lY3Rpb24uc2VuZFN5bmNSZXBseShX
VEZNb3ZlKGVuY29kZXIpKTsKLX0KLQogI2lmIFBMQVRGT1JNKE1BQykKIAogdm9pZCBJbnRlcnBy
ZXRLZXlFdmVudDo6Y2FsbFJlcGx5KElQQzo6RGVjb2RlciYgZGVjb2RlciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE1OCwxMiArMTMwLDYgQEAgdm9pZCBJbnRlcnByZXRLZXlFdmVudDo6
Y2FuY2VsUmVwbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6S2V5cHIK
ICAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlFcnJvcjxWZWN0b3I8V2ViQ29y
ZTo6S2V5cHJlc3NDb21tYW5kPj46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBJbnRlcnByZXRLZXlF
dmVudDo6c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4m
IGNvbW1hbmROYW1lKQotewotICAgIGVuY29kZXIuZ2V0KCkgPDwgY29tbWFuZE5hbWU7Ci0gICAg
Y29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwotfQotCiAjZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UgVGVzdFdpdGhvdXRBdHRyaWJ1dGVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRob3V0QXR0cmlidXRlc01lc3Nh
Z2VzLmggYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRob3V0QXR0
cmlidXRlc01lc3NhZ2VzLmgKaW5kZXggMTVjMjdlMDQyY2Y5NjkyZmU1ZDJjMDMwNjgyMjczNzZk
MDhjNzM5MC4uZjVmYmZhNjhlYWFjZmNkMjI4NTRkNjY2NTc0MmUzMmJjYThhMWE0NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aG91dEF0dHJp
YnV0ZXNNZXNzYWdlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMv
VGVzdFdpdGhvdXRBdHRyaWJ1dGVzTWVzc2FnZXMuaApAQCAtMjg4LDcgKzI4OCw2IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBhc3luY01lc3NhZ2VSZXBseU5hbWUoKSB7
IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfQ3JlYXRlUGx1
Z2luUmVwbHk7IH0KICAgICB1c2luZyBBc3luY1JlcGx5ID0gQ3JlYXRlUGx1Z2luQXN5bmNSZXBs
eTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2FsbGJhY2tUaHJlYWQgPSBXVEY6OkNvbXBs
ZXRpb25IYW5kbGVyQ2FsbFRocmVhZDo6Q29uc3RydWN0aW9uVGhyZWFkOwotICAgIHN0YXRpYyB2
b2lkIHNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJiwgYm9v
bCByZXN1bHQpOwogICAgIHVzaW5nIFJlcGx5ID0gc3RkOjp0dXBsZTxib29sJj47CiAgICAgdXNp
bmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGJvb2w+OwogICAgIENyZWF0ZVBsdWdpbih1
aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlELCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKQEAgLTMxNyw3ICszMTYsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIElQ
Qzo6TWVzc2FnZU5hbWUgYXN5bmNNZXNzYWdlUmVwbHlOYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNz
YWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1J1bkphdmFTY3JpcHRBbGVydFJlcGx5OyB9
CiAgICAgdXNpbmcgQXN5bmNSZXBseSA9IFJ1bkphdmFTY3JpcHRBbGVydEFzeW5jUmVwbHk7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9u
SGFuZGxlckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBz
ZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYpOwogICAgIHVz
aW5nIFJlcGx5ID0gc3RkOjp0dXBsZTw+OwogICAgIHVzaW5nIFJlcGx5QXJndW1lbnRzID0gc3Rk
Ojp0dXBsZTw+OwogICAgIFJ1bkphdmFTY3JpcHRBbGVydCh1aW50NjRfdCBmcmFtZUlELCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC0zNDYsNyArMzQ0LDYgQEAgcHVibGljOgogICAgIHN0YXRp
YyBJUEM6Ok1lc3NhZ2VOYW1lIGFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpIHsgcmV0dXJuIElQQzo6
TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19HZXRQbHVnaW5zUmVwbHk7IH0KICAg
ICB1c2luZyBBc3luY1JlcGx5ID0gR2V0UGx1Z2luc0FzeW5jUmVwbHk7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxU
aHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKFVuaXF1ZVJl
ZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpQbHVnaW5JbmZvPiYgcGx1Z2lucyk7CiAgICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPFZl
Y3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiY+OwogICAgIHVzaW5nIFJlcGx5QXJndW1lbnRzID0g
c3RkOjp0dXBsZTxWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4+OwogICAgIGV4cGxpY2l0IEdl
dFBsdWdpbnMoYm9vbCByZWZyZXNoKQpAQCAtMzcyLDcgKzM2OSw2IEBAIHB1YmxpYzoKIAogICAg
IHVzaW5nIERlbGF5ZWRSZXBseSA9IEdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJl
cGx5OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjYWxsYmFja1RocmVhZCA9IFdURjo6Q29t
cGxldGlvbkhhbmRsZXJDYWxsVGhyZWFkOjpDb25zdHJ1Y3Rpb25UaHJlYWQ7Ci0gICAgc3RhdGlj
IHZvaWQgc2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24mLCBj
b25zdCBJUEM6OkNvbm5lY3Rpb246OkhhbmRsZSYgY29ubmVjdGlvbkhhbmRsZSk7CiAgICAgdXNp
bmcgUmVwbHkgPSBzdGQ6OnR1cGxlPElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlJj47CiAgICAgdXNp
bmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlPjsK
ICAgICBleHBsaWNpdCBHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIHBs
dWdpblBhdGgpCkBAIC0zOTgsNyArMzk0LDYgQEAgcHVibGljOgogCiAgICAgdXNpbmcgRGVsYXll
ZFJlcGx5ID0gVGVzdE11bHRpcGxlQXR0cmlidXRlc0RlbGF5ZWRSZXBseTsKICAgICBzdGF0aWMg
Y29uc3RleHByIGF1dG8gY2FsbGJhY2tUaHJlYWQgPSBXVEY6OkNvbXBsZXRpb25IYW5kbGVyQ2Fs
bFRocmVhZDo6Q29uc3RydWN0aW9uVGhyZWFkOwotICAgIHN0YXRpYyB2b2lkIHNlbmQoVW5pcXVl
UmVmPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJik7CiAgICAgdXNpbmcgUmVwbHkg
PSBzdGQ6OnR1cGxlPD47CiAgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPD47
CiAgICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdApAQCAtNTA5LDcgKzUwNCw2
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBhc3luY01lc3NhZ2VSZXBs
eU5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNf
SW50ZXJwcmV0S2V5RXZlbnRSZXBseTsgfQogICAgIHVzaW5nIEFzeW5jUmVwbHkgPSBJbnRlcnBy
ZXRLZXlFdmVudEFzeW5jUmVwbHk7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNr
VGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRo
cmVhZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYsIElQ
Qzo6Q29ubmVjdGlvbiYsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBj
b21tYW5kTmFtZSk7CiAgICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPFZlY3RvcjxXZWJDb3Jl
OjpLZXlwcmVzc0NvbW1hbmQ+Jj47CiAgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1
cGxlPFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+PjsKICAgICBleHBsaWNpdCBJbnRl
cnByZXRLZXlFdmVudCh1aW50MzJfdCB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwCmluZGV4IDg4YjJlYTgzODY3MmFjNzE4NjVlYjY5
YmNhZjVmYjIyY2EwMGE4N2YuLmVkNWRmZGRhNDc4ZGU0MTE2YjBmZTk1MzA2ZjE5NWJhODQ1MWQ0
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94
eS5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJVUkxTY2hlbWVUYXNrUGFyYW1ldGVy
cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGVFbnRyeS5oIgogI2luY2x1ZGUgIldl
YkJhY2tGb3J3YXJkTGlzdC5oIgorI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdENvdW50cy5o
IgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJXZWJFcnJv
cnMuaCIKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457331</attachid>
            <date>2022-04-12 07:46:09 -0700</date>
            <delta_ts>2022-04-14 07:12:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238740-20220412164607.patch</filename>
            <type>text/plain</type>
            <size>53047</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDkwNTkyMDJkMmJmZGMwZTJmZDVkMTFj
NDJhY2M1MWQ0NGRhMmVlNDguLmQ2ZDQxYzYwMWExZTdiNWI2NmIyYzA3Y2Y2NmQzOTdjZGUwNDM1
Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjItMDQtMTIgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXSzJdIEVuYWJsZSBtb3JlIGVmZmljaWVudCBl
bmNvZGluZyBvZiBzeW5jaHJvbm91cy1tZXNzYWdlIHJlcGx5IGFyZ3VtZW50cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM4NzQwCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS85MTU2Nzc3OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgdHdvIGhlbHBlciB0eXBlcywgT3V0VHlwZSBhbmQgSW5UeXBl
cywgb24gYm90aCBDb21wbGV0aW9uSGFuZGxlcgorICAgICAgICBjbGFzc2VzLiBPdXRUeXBlIGlz
IGFuIGFsaWFzIGFnYWluc3QgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBpbnZva2FibGUKKyAgICAg
ICAgaGFuZGxlciwgSW5UeXBlcyBpcyBhIHR1cGxlIHdpdGggdHlwZXMgY29ycmVzcG9uZGluZyB0
byB0aGUgcGFyYW1ldGVyCisgICAgICAgIHR5cGVzIG9mIHRoZSBpbnZva2FibGUgaGFuZGxlci4K
KworICAgICAgICBUaGVzZSBhcmUgZXNwZWNpYWxseSBoZWxwZnVsIGluIHZhcmlvdXMgdGVtcGxh
dGVzIGRlYWxpbmcgd2l0aCB0aGUKKyAgICAgICAgQ29tcGxldGlvbkhhbmRsZXIgdHlwZXMuCisK
KyAgICAgICAgKiB3dGYvQ29tcGxldGlvbkhhbmRsZXIuaDoKKyAgICAgICAgKFdURjo6Q29tcGxl
dGlvbkhhbmRsZXIpOgorICAgICAgICAoV1RGOjpDb21wbGV0aW9uSGFuZGxlcldpdGhGaW5hbGl6
ZXIpOgorCiAyMDIyLTA0LTEyICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+
CiAKICAgICAgICAgRnVuY3Rpb25EaXNwYXRjaGVyIHNob3VsZCBub3QgYmUgUmVmQ291bnRlZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCA4NjNiYmM4MTIwMTQ3YThkYjI3MzYzZTU3N2IwN2RlN2IyMDQ5NjQ4Li5lNGE2
NDNhMGMyMmNmZTE3YzU4Y2JmYjQ4N2VmYzQ4YzcxOTVhMzc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEyMyBAQAorMjAyMi0wNC0xMiAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW1dLMl0gRW5hYmxlIG1vcmUgZWZmaWNpZW50IGVuY29kaW5nIG9mIHN5bmNo
cm9ub3VzLW1lc3NhZ2UgcmVwbHkgYXJndW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzg3NDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzkx
NTY3Nzc5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEhhbmRsaW5nIG9mIHN5bmNocm9ub3VzIG1lc3NhZ2VzIHJlcXVpcmVzIGNvbnN0cnVjdGlvbiBv
ZiBhCisgICAgICAgIENvbXBsZXRpb25IYW5kbGVyIG9iamVjdCB0aGF0IHdyYXBzIGEgbGFtYmRh
IGZ1bmN0aW9uIHdoaWNoIGhhbmRsZXMKKyAgICAgICAgbG9nZ2luZyBvZiB0aGUgcGFzc2VkLWlu
IHJlcGx5IGFyZ3VtZW50cyBhcyB3ZWxsIGFzIHN1YnNlcXVlbnQgZW5jb2RpbmcKKyAgICAgICAg
YW5kIGRpc3BhdGNoaW5nIG9mIHRoZSByZXBseSBpbnRvIHRoZSBJUEMgY2hhbm5lbC4KKworICAg
ICAgICBSaWdodCBub3csIGZvciBhbnkgZ2l2ZW4gbWVzc2FnZSB0aGUgQ29tcGxldGlvbkhhbmRs
ZXIgdHlwZSBpcyBnZW5lcmF0ZWQKKyAgICAgICAgZnJvbSB0aGUgSVBDIG1lc3NhZ2Ugc3BlY2lm
aWNhdGlvbiwgYW5kIGl0J3MgZXNzZW50aWFsbHkgYSBmdW5jdGlvbiB0eXBlCisgICAgICAgIHdp
dGggYSB2b2lkIHJldHVybiB2YWx1ZSBhbmQgY29uc3QgbHZhbHVlIHJlZmVyZW5jZXMgZm9yIGV2
ZXJ5CisgICAgICAgIG5vbi1idWlsdGluIHBhcmFtZXRlciB0eXBlLiBUaGlzIHR5cGUgaXMgaW1w
b3NlZCBvbnRvIHRoZSBsYW1iZGEgaGFuZGxlcgorICAgICAgICBhbmQgd2hlbiBpbnZva2VkLCBh
bGwgdGhlIHJlcGx5IGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHRvIHRoZSBJUEMKKyAgICAgICAg
ZW5jb2RpbmcgYXMgbHZhbHVlIHJlZmVyZW5jZXMuCisKKyAgICAgICAgVGhpcyBpbmhpYml0cyBv
cHBvcnR1bml0aWVzIHdoZXJlIHRoZSByZXBseSBhcmd1bWVudCBjb3VsZCBpbnN0ZWFkIGJlCisg
ICAgICAgIG1vdmVkIGludG8gdGhlIGNvbXBsZXRpb24gaGFuZGxlciBpbnZvY2F0aW9uLCBlbmFi
bGluZyBhIG1vcmUgZWZmaWNpZW50CisgICAgICAgIGVuY29kaW5nIG9mIHRoZSBwYXNzZWQtaW4g
dmFsdWUuIEZvciBpbnN0YW5jZSwgaWYgYSBVbml4IGZpbGUgZGVzY3JpcHRvcgorICAgICAgICB3
YXMgbW92ZWQgaW50byB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGludm9jYXRpb24sIGl0IGNvdWxk
IGJlIHRyaWNrbGVkCisgICAgICAgIGRvd24gaW50byBhbiBJUEM6OkF0dGFjaG1lbnQgb2JqZWN0
IGFuZCBkaXNwYXRjaGVkIG92ZXIgSVBDIHdpdGhvdXQgYW55CisgICAgICAgIHByb2JsZW1zLiBJ
bnN0ZWFkLCBiZWNhdXNlIHRoZSBsdmFsdWUgcmVmZXJlbmNlIGlzIGltcG9zZWQgYXMgdGhlIHR5
cGUsCisgICAgICAgIGl0IHdpbGwgaGF2ZSB0byBiZSBkdXBsaWNhdGVkIGV2ZW4gaWYgdGhlIG9i
amVjdCBpdHNlbGYgaXMgZXhwaXJpbmcgb3IKKyAgICAgICAgd291bGQgYmUgbW92YWJsZSBkb3du
IHRoZSBpbnZvY2F0aW9uLgorCisgICAgICAgIFRvIGNvdmVyIHRoZXNlIGNhc2VzLCB0aGUgYWN0
dWFsIGNvbXBsZXRpb24gaGFuZGxlciB0eXBlIGlzIG5vdyBkZWR1Y2VkCisgICAgICAgIGZyb20g
dGhlIHN5bmNocm9ub3VzLW1lc3NhZ2UtaGFuZGxpbmcgbWV0aG9kIGl0c2VsZi4gVGhpcyBtZWFu
cyB0aGF0CisgICAgICAgIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgcGFyYW1ldGVyIGZvciB0aGUg
Z2l2ZW4gaGFuZGxlciBtZXRob2QgY2FuIG5vdworICAgICAgICBzcGVjaWZ5IHdoZXRoZXIgaXQg
d2FudHMgdG8gcmVjZWl2ZSByZXBseSBhcmd1bWVudHMgYnkgdmFsdWUgb3IgYnkKKyAgICAgICAg
ZWl0aGVyIGx2YWx1ZSBvciBydmFsdWUgcmVmZXJlbmNlLiBUaGUgY29tcGxldGlvbiBoYW5kbGVy
IGxhbWJkYSBjYW4KKyAgICAgICAgY29tYmluZSB0aGVzZSBwYXJhbWV0ZXIgdHlwZXMgd2l0aCBz
dGQ6OmZvcndhcmQoKSB0byBwYXNzIGRvd24gdGhlCisgICAgICAgIGFjdHVhbCBhcmd1bWVudHMg
aW4gdGhlIG1vc3Qgb3B0aW1hbCBmYXNoaW9uLgorCisgICAgICAgIFRvIGF2b2lkIHByb2JsZW1z
LCBlYWNoIENvbXBsZXRpb25IYW5kbGVyIHNwZWNpYWxpemF0aW9uIHJldHJpZXZlZCBmcm9tCisg
ICAgICAgIHRoZSBtZXRob2Qgc2lnYW50dXJlIGlzIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBDb21w
bGV0aW9uSGFuZGxlciB0eXBlCisgICAgICAgIGdlbmVyYXRlZCBmcm9tIHRoZSBJUEMgc3BlY2lm
aWNhdGlvbiwgcmVxdWlyaW5nIHRoYXQgdGhlIGRlY2F5ZWQKKyAgICAgICAgcGFyYW1ldGVyIHR5
cGVzIG1hdGNoIGJldHdlZW4gdGhlIHR3by4gSXQncyBzdGlsbCBwb3NzaWJsZSB0byBkaXJlY3Rs
eQorICAgICAgICB1c2UgdGhlIENvbXBsZXRpb25IYW5kbGVyIHR5cGUgZnJvbSB0aGUgSVBDIHNw
ZWNpZmljYXRpb24gYXMgdGhlCisgICAgICAgIGNvbXBsZXRpb24gaGFuZGxlciB0eXBlIGluIHRo
ZSBtZXNzYWdlLWhhbmRsaW5nIG1ldGhvZC4KKworICAgICAgICBBbiBydmFsdWUgcmVmZXJlbmNl
IHZhcmlhbnQgb2YgQXJndW1lbnRDb2RlcjxUPjo6ZW5jb2RlKCkgaXMgYWRkZWQuCisgICAgICAg
IEdlbmVyaWMgaW1wbGVtZW50YXRpb24gYWdhaW4gY2FzdHMgdGhlIHBhc3NlZC1pbiByZWZlcmVu
Y2UgaW50byBhbgorICAgICAgICBydmFsdWUgYW5kIGNhbGxzIHRoZSBlbmNvZGUoKSBvbiB0aGF0
IG9iamVjdC4gSWYgdGhhdCB0eXBlIHByb3ZpZGVzCisgICAgICAgIHJlZi1xdWFsaWZpZWQgZW5j
b2RlKCkgbWV0aG9kcywgaW1wbGVtZW50YXRpb25zIG9mIHRob3NlIG1ldGhvZHMgY2FuCisgICAg
ICAgIGFkanVzdCBhbmQgbW9yZSBhZ2dyZXNzaXZlbHkgbW92ZSB0aGluZ3MgaW50byB0aGUgZW5j
b2RlciB3aGVuIHRoZQorICAgICAgICBtZXRob2QgaXMgY2FsbGVkIG9uIGFuIHJ2YWx1ZS4gSXQg
d291bGQgYWxzbyBiZSBwb3NzaWJsZSB0byBkZWxldGUgdGhlCisgICAgICAgIHJlZi1xdWFsaWZp
ZWQgbWV0aG9kIGNvdmVyaW5nIGx2YWx1ZXMsIG1lYW5pbmcgZW5jb2Rpbmcgd291bGQgYmUgYWxs
b3dlZAorICAgICAgICBvbmx5IGZvciBvYmplY3RzIHRoYXQgYXJlIG1vdmVkIGludG8gdGhlIGNv
bXBsZXRpb24gaGFuZGxlci4KKworICAgICAgICBGb3IgdHlwZXMgd2l0aCBjdXN0b20gc3BlY2lh
bGl6YXRpb25zIG9mIEFyZ3VtZW50Q29kZXI8VD4sIHRob3NlCisgICAgICAgIHNwZWNpYWxpemF0
aW9ucyB3b3VsZCBhZ2FpbiBoYXZlIHRvIHByb3ZpZGUgcnZhbHVlIHZhcmlhbnRzIG9mIHRoZQor
ICAgICAgICBlbmNvZGUoKSBtZXRob2QgYW5kIGhhbmRsZSB0aGUgcGFzc2VkLWluIHZhbHVlcyBh
cHByb3ByaWF0ZWx5LgorCisgICAgICAgIFRoZSBzZW5kKCkgbWV0aG9kcyB0aGF0IHdlcmUgcHJl
dmlvdXNseSBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IElQQyBtZXNzYWdlCisgICAgICAgIGFyZSByZW1v
dmVkIGluIGZhdm9yIG9mIGVuY29kaW5nIGFuZCBjYWxsaW5nIENvbm5lY3Rpb246OnNlbmRTeW5j
UmVwbHkoKQorICAgICAgICBpbiB0aGUgY29tcGxldGlvbi1oYW5kbGVyIGxhbWJkYS4gTWlzc2lu
ZyBzdGQ6OmZvcndhcmQoKSBjYWxscyBhcmUgYWRkZWQKKyAgICAgICAgaW4gcGFyYW1ldGVyIHBh
Y2sgZXhwYW5zaW9ucyBhcyByZXF1aXJlZC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEv
UmVtb3RlQ0RNUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVDRE1Qcm94eTo6Z2V0
U3VwcG9ydGVkQ29uZmlndXJhdGlvbik6CisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1v
dGVDRE1Qcm94eS5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNv
ZGVyQVZGUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZURlY29kZXJBVkZQ
cm94eTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAqIEdQVVByb2Nlc3MvbWVk
aWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMv
QXJndW1lbnRDb2Rlci5oOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyOjplbmNvZGUpOgor
ICAgICAgICAqIFBsYXRmb3JtL0lQQy9IYW5kbGVNZXNzYWdlLmg6CisgICAgICAgIChJUEM6OkM6
Oik6CisgICAgICAgIChJUEM6OkNvbXBsZXRpb25IYW5kbGVyVmFsaWRhdGlvbjo6bWF0Y2hpbmdQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKElQQzo6Q29tcGxldGlvbkhhbmRsZXJWYWxpZGF0aW9uOjpt
YXRjaGluZ1R5cGVzKToKKyAgICAgICAgKElQQzo6aGFuZGxlTWVzc2FnZVN5bmNocm9ub3VzKToK
KyAgICAgICAgKElQQzo6aGFuZGxlTWVzc2FnZVN5bmNocm9ub3VzV2FudHNDb25uZWN0aW9uKToK
KyAgICAgICAgKElQQzo6aGFuZGxlTWVzc2FnZUFzeW5jKToKKyAgICAgICAgKElQQzo6aGFuZGxl
TWVzc2FnZUFzeW5jV2FudHNDb25uZWN0aW9uKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU3Ry
ZWFtU2VydmVyQ29ubmVjdGlvbi5oOgorICAgICAgICAoSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0
aW9uOjpzZW5kU3luY1JlcGx5KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eToKKyAgICAgICAgKG1lc3NhZ2VfdG9fc3RydWN0X2RlY2xhcmF0aW9uKToKKyAgICAgICAgKGdl
bmVyYXRlX21lc3NhZ2VfaGFuZGxlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvdGVzdHMv
VGVzdFdpdGhDVlBpeGVsQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcDoKKyAgICAgICAgKE1lc3Nh
Z2VzOjpUZXN0V2l0aENWUGl4ZWxCdWZmZXI6OlJlY2VpdmVDVlBpeGVsQnVmZmVyOjpzZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aENWUGl4ZWxC
dWZmZXJNZXNzYWdlcy5oOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRo
SW1hZ2VEYXRhTWVzc2FnZVJlY2VpdmVyLmNwcDoKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0
aEltYWdlRGF0YTo6UmVjZWl2ZUltYWdlRGF0YTo6c2VuZCk6IERlbGV0ZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhJbWFnZURhdGFNZXNzYWdlcy5oOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoTGVnYWN5UmVjZWl2ZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkNy
ZWF0ZVBsdWdpbjo6c2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhM
ZWdhY3lSZWNlaXZlcjo6UnVuSmF2YVNjcmlwdEFsZXJ0OjpzZW5kKTogRGVsZXRlZC4KKyAgICAg
ICAgKE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpHZXRQbHVnaW5zOjpzZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpHZXRQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6c2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChNZXNzYWdl
czo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6VGVzdE11bHRpcGxlQXR0cmlidXRlczo6c2VuZCk6
IERlbGV0ZWQuCisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6SW50
ZXJwcmV0S2V5RXZlbnQ6OnNlbmQpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
L3Rlc3RzL1Rlc3RXaXRoTGVnYWN5UmVjZWl2ZXJNZXNzYWdlcy5oOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU2VtYXBob3JlTWVzc2FnZVJlY2VpdmVyLmNwcDoKKyAg
ICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aFNlbWFwaG9yZTo6UmVjZWl2ZVNlbWFwaG9yZTo6c2Vu
ZCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTZW1h
cGhvcmVNZXNzYWdlcy5oOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRo
U3VwZXJjbGFzc01lc3NhZ2VSZWNlaXZlci5jcHA6CisgICAgICAgIChNZXNzYWdlczo6VGVzdFdp
dGhTdXBlcmNsYXNzOjpUZXN0QXN5bmNNZXNzYWdlOjpzZW5kKTogRGVsZXRlZC4KKyAgICAgICAg
KE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RBc3luY01lc3NhZ2VXaXRoTm9Bcmd1
bWVudHM6OnNlbmQpOiBEZWxldGVkLgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoU3VwZXJj
bGFzczo6VGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBsZUFyZ3VtZW50czo6c2VuZCk6IERlbGV0
ZWQuCisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhTdXBlcmNsYXNzOjpUZXN0QXN5bmNNZXNz
YWdlV2l0aENvbm5lY3Rpb246OnNlbmQpOiBEZWxldGVkLgorICAgICAgICAoTWVzc2FnZXM6OlRl
c3RXaXRoU3VwZXJjbGFzczo6VGVzdFN5bmNNZXNzYWdlOjpzZW5kKTogRGVsZXRlZC4KKyAgICAg
ICAgKE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RTeW5jaHJvbm91c01lc3NhZ2U6
OnNlbmQpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRo
U3VwZXJjbGFzc01lc3NhZ2VzLmg6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVz
dFdpdGhvdXRBdHRyaWJ1dGVzTWVzc2FnZVJlY2VpdmVyLmNwcDoKKyAgICAgICAgKE1lc3NhZ2Vz
OjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OkNyZWF0ZVBsdWdpbjo6c2VuZCk6IERlbGV0ZWQuCisg
ICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpSdW5KYXZhU2NyaXB0QWxl
cnQ6OnNlbmQpOiBEZWxldGVkLgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmli
dXRlczo6R2V0UGx1Z2luczo6c2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChNZXNzYWdlczo6VGVz
dFdpdGhvdXRBdHRyaWJ1dGVzOjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6c2VuZCk6IERl
bGV0ZWQuCisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpUZXN0TXVs
dGlwbGVBdHRyaWJ1dGVzOjpzZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0
V2l0aG91dEF0dHJpYnV0ZXM6OkludGVycHJldEtleUV2ZW50OjpzZW5kKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aG91dEF0dHJpYnV0ZXNNZXNzYWdl
cy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHA6CisgICAg
ICAgIEFkZCBhIG1pc3NpbmcgaW5jbHVkZSB0aGF0IGJyaW5ncyBpbiB0aGUgZGVmaW5pdGlvbiBv
ZiB0aGUKKyAgICAgICAgV2ViQmFja0ZvcndhcmRMaXN0Q291bnRzIHR5cGUgYWxvbmcgd2l0aCBp
dHMgZW5jb2RlKCkgbWV0aG9kLgorCiAyMDIyLTA0LTEyICBLaW1tbyBLaW5udW5lbiAgPGtraW5u
dW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgRnVuY3Rpb25EaXNwYXRjaGVyIHNob3VsZCBub3Qg
YmUgUmVmQ291bnRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ29tcGxldGlvbkhhbmRs
ZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0NvbXBsZXRpb25IYW5kbGVyLmgKaW5kZXggNjljYjQ0YTdm
ZGFkMDE3YTI1NDAyODA1OWE3MjNmYmVlMDE5NmRkNi4uMDU2ZTk3OWE3MjFmZGRjNDc1Y2UxODY2
YTg1OThlOGI4MDdlODVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ29tcGxldGlvbkhh
bmRsZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Db21wbGV0aW9uSGFuZGxlci5oCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8dHVwbGU+CiAjaW5jbHVkZSA8
dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgpAQCAtMzksNiArNDAsOSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0LCB0eXBlbmFt
ZS4uLiBJbj4KIGNsYXNzIENvbXBsZXRpb25IYW5kbGVyPE91dChJbi4uLik+IHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICB1c2luZyBPdXRUeXBlID0gT3V0Owor
ICAgIHVzaW5nIEluVHlwZXMgPSBzdGQ6OnR1cGxlPEluLi4uPjsKKwogICAgIENvbXBsZXRpb25I
YW5kbGVyKCkgPSBkZWZhdWx0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGFibGVUeXBl
LCBjbGFzcyA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfcnZhbHVlX3JlZmVyZW5j
ZTxDYWxsYWJsZVR5cGUmJj46OnZhbHVlPjo6dHlwZT4KQEAgLTgzLDYgKzg3LDkgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIE91dCwgdHlwZW5hbWUuLi4gSW4+CiBjbGFzcyBDb21wbGV0aW9uSGFuZGxl
cldpdGhGaW5hbGl6ZXI8T3V0KEluLi4uKT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgorICAgIHVzaW5nIE91dFR5cGUgPSBPdXQ7CisgICAgdXNpbmcgSW5UeXBlcyA9
IHN0ZDo6dHVwbGU8SW4uLi4+OworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGFibGVUeXBl
LCBjbGFzcyA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfcnZhbHVlX3JlZmVyZW5j
ZTxDYWxsYWJsZVR5cGUmJj46OnZhbHVlPjo6dHlwZT4KICAgICBDb21wbGV0aW9uSGFuZGxlcldp
dGhGaW5hbGl6ZXIoQ2FsbGFibGVUeXBlJiYgY2FsbGFibGUsIEZ1bmN0aW9uPHZvaWQoRnVuY3Rp
b248T3V0KEluLi4uKT4mKT4mJiBmaW5hbGl6ZXIpCiAgICAgICAgIDogbV9mdW5jdGlvbihzdGQ6
OmZvcndhcmQ8Q2FsbGFibGVUeXBlPihjYWxsYWJsZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL21lZGlhL1JlbW90ZUNETVByb3h5LmNwcAppbmRleCA0NGZjNjg4Yzg0YWZjMDI0
Y2QzNjgyZTBhN2Q3OGEzNjdiODQyNWFjLi4xMjllMDMxY2QzMmI5YTI1ODIxNTcwNDUzOGRiYzRm
YTMyOTU3ZWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVt
b3RlQ0RNUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1v
dGVDRE1Qcm94eS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IFJl
bW90ZUNETVByb3h5OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkK
ICAgICByZXR1cm4gbV9wcml2YXRlLT5zYW5pdGl6ZVNlc3Npb25JZChzZXNzaW9uSWQpOwogfQog
Ci12b2lkIFJlbW90ZUNETVByb3h5OjpnZXRTdXBwb3J0ZWRDb25maWd1cmF0aW9uKFdlYkNvcmU6
OkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mJiBjb25maWd1cmF0aW9uLCBXZWJDb3JlOjpDRE1Q
cml2YXRlOjpMb2NhbFN0b3JhZ2VBY2Nlc3MgYWNjZXNzLCBXZWJDb3JlOjpDRE1Qcml2YXRlOjpT
dXBwb3J0ZWRDb25maWd1cmF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgUmVtb3RlQ0RN
UHJveHk6OmdldFN1cHBvcnRlZENvbmZpZ3VyYXRpb24oV2ViQ29yZTo6Q0RNS2V5U3lzdGVtQ29u
ZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24sIFdlYkNvcmU6OkNETVByaXZhdGU6OkxvY2FsU3Rv
cmFnZUFjY2VzcyBhY2Nlc3MsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxX
ZWJDb3JlOjpDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uPik+JiYgY2FsbGJhY2spCiB7CiAgICAg
bV9wcml2YXRlLT5nZXRTdXBwb3J0ZWRDb25maWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJhdGlv
biksIGFjY2VzcywgV1RGTW92ZShjYWxsYmFjaykpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZUNETVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNUHJveHkuaAppbmRleCBhOGJmMTdiYjJhY2VkYjM4MWQ3
ODNkODkzMzA3YTBjNjkzNjYzOWZhLi4yNDYxNzVlZWU2YjI0MjgyOGU2YTI3OGFhYmUzZTcyZDIy
YmY4NmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3Rl
Q0RNUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RN
UHJveHkuaApAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIFVuaXF1ZVJlZjxJUEM6
OkVuY29kZXI+JikgZmluYWw7CiAKICAgICAvLyBNZXNzYWdlcwotICAgIHZvaWQgZ2V0U3VwcG9y
dGVkQ29uZmlndXJhdGlvbihXZWJDb3JlOjpDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiYsIFdl
YkNvcmU6OkNETVByaXZhdGU6OkxvY2FsU3RvcmFnZUFjY2VzcywgV2ViQ29yZTo6Q0RNUHJpdmF0
ZTo6U3VwcG9ydGVkQ29uZmlndXJhdGlvbkNhbGxiYWNrJiYpOworICAgIHZvaWQgZ2V0U3VwcG9y
dGVkQ29uZmlndXJhdGlvbihXZWJDb3JlOjpDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiYsIFdl
YkNvcmU6OkNETVByaXZhdGU6OkxvY2FsU3RvcmFnZUFjY2VzcywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24+KT4m
Jik7CiAgICAgdm9pZCBjcmVhdGVJbnN0YW5jZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlbW90
ZUNETUluc3RhbmNlSWRlbnRpZmllciwgUmVtb3RlQ0RNSW5zdGFuY2VDb25maWd1cmF0aW9uJiYp
PiYmKTsKICAgICB2b2lkIGxvYWRBbmRJbml0aWFsaXplKCk7CiAgICAgdm9pZCBzZXRMb2dJZGVu
dGlmaWVyKHVpbnQ2NF90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9t
ZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuY3BwCmluZGV4IDAyZjg1MDgy
ZWRhZGNhODA5NDg1NGFjODNhZWQ3MGNiZTJlMGQ0NDAuLmVhYmJjMTQ4ZGRjMmMzODYzY2FlN2Ez
N2M4NGI0NTNlYTM4ZTRlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9t
ZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL21lZGlhL1JlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5LmNwcApAQCAtMTE0LDcg
KzExNCw3IEBAIHZvaWQgUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHk6OnNldERhdGEoSW1hZ2VE
ZWNvZGVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zCiAgICAgY29tcGxldGlvbkhhbmRsZXIo
ZnJhbWVDb3VudCwgaW1hZ2VEZWNvZGVyLT5zaXplKCksIGltYWdlRGVjb2Rlci0+aGFzVHJhY2so
KSwgV1RGTW92ZShmcmFtZUluZm9zKSk7CiB9CiAKLXZvaWQgUmVtb3RlSW1hZ2VEZWNvZGVyQVZG
UHJveHk6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KEltYWdlRGVjb2RlcklkZW50aWZpZXIgaWRl
bnRpZmllciwgc2l6ZV90IGluZGV4LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9u
YWw8V1RGOjpNYWNoU2VuZFJpZ2h0PiYmLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2Up
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eTo6
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoSW1hZ2VEZWNvZGVySWRlbnRpZmllciBpZGVudGlmaWVy
LCBzaXplX3QgaW5kZXgsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXVEY6
Ok1hY2hTZW5kUmlnaHQ+JiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RGVzdGluYXRpb25Db2xv
clNwYWNlPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQobV9pbWFnZURl
Y29kZXJzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICBpZiAoIW1faW1hZ2VEZWNvZGVycy5j
b250YWlucyhpZGVudGlmaWVyKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL21lZGlhL1JlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuaAppbmRleCBmOGVjZGU3
MjRhMWQ4MjVjZGQ3ZTZjNDFjODQwOTYyNThiZThjY2FhLi40OTJkZTcyYjMxZWNjYjAxZjk0ZmFi
OGI2OWI4NDE1MTMyMTRlNTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
bWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuaApAQCAtNjAsNyArNjAs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlRGVjb2RlcihXZWJDb3JlOjpJbWFnZURlY29k
ZXJJZGVudGlmaWVyKTsKICAgICB2b2lkIHNldEV4cGVjdGVkQ29udGVudFNpemUoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVySWRlbnRpZmllciwgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudFNpemUpOwog
ICAgIHZvaWQgc2V0RGF0YShXZWJDb3JlOjpJbWFnZURlY29kZXJJZGVudGlmaWVyLCBjb25zdCBJ
UEM6OlNoYXJlZEJ1ZmZlckNvcHkmLCBib29sIGFsbERhdGFSZWNlaXZlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChzaXplX3QgZnJhbWVDb3VudCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6
ZSwgYm9vbCBoYXNUcmFjaywgc3RkOjpvcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpGcmFtZUluZm8+PiYmKT4mJik7Ci0gICAgdm9pZCBjcmVhdGVGcmFtZUltYWdlQXRJbmRl
eChXZWJDb3JlOjpJbWFnZURlY29kZXJJZGVudGlmaWVyLCBzaXplX3QgaW5kZXgsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXVEY6Ok1hY2hTZW5kUmlnaHQ+JiYsIFdlYkNv
cmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSk+JiYpOworICAgIHZvaWQgY3JlYXRlRnJhbWVJbWFn
ZUF0SW5kZXgoV2ViQ29yZTo6SW1hZ2VEZWNvZGVySWRlbnRpZmllciwgc2l6ZV90IGluZGV4LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8V1RGOjpNYWNoU2VuZFJpZ2h0PiYm
LCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZT4mJik+JiYpOwog
ICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKFdlYkNvcmU6OkltYWdlRGVjb2RlcklkZW50
aWZpZXIsIHNpemVfdCBpbmRleCk7CiAKICAgICB2b2lkIGVuY29kZWREYXRhU3RhdHVzQ2hhbmdl
ZChXZWJDb3JlOjpJbWFnZURlY29kZXJJZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0FyZ3VtZW50Q29kZXIuaAppbmRleCA4NjUxNzAxNjk5YjgwNWIzYjU3ZDRjYzY1ZDU2
OTA4Mzg1ZTA3ZDc0Li5hMWM5ZDBlOWU2ZDlhYjY0YzQ4MGYwMmI0YTE3NmY5M2Y0ZGYwODM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgKKysr
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCkBAIC01MCw2ICs1
MCwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+IHN0cnVjdCBBcmd1
bWVudENvZGVyIHsKICAgICAgICAgdC5lbmNvZGUoZW5jb2Rlcik7CiAgICAgfQogCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgVCYmIHQpCisgICAgeworICAgICAgICBXVEZNb3ZlKHQpLmVuY29kZShlbmNvZGVy
KTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2UuaCBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2UuaAppbmRleCA2M2I4ZmE4NjdlZjE1YTlm
MzBhMDJmYWVjZjA5Zjg4ZTdiNWFlNzE4Li4wOGQ4OTVmMmY3NTU2ZDY2NzhkMzY3ZTc1NjRjZjBi
NmZjNTMwMDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9IYW5kbGVN
ZXNzYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSGFuZGxlTWVzc2FnZS5o
CkBAIC0xNzMsNiArMTczLDYzIEBAIHZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKENvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIEFyZ3NUdXBsZSYmIGFyZ3MsIEMqIG9iamVjdCwgTUYKICAgICBjYWxsTWVt
YmVyRnVuY3Rpb25JbXBsKG9iamVjdCwgZnVuY3Rpb24sIGNvbm5lY3Rpb24sIHN0ZDo6Zm9yd2Fy
ZDxBcmdzVHVwbGU+KGFyZ3MpLCBBcmdzSW5kaWNlcygpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3N0cnVjdCBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rpb247CisKKy8vIFRoZSBm
b2xsb3dpbmcgdHdvIHBhcnRpYWwgc3BlY2lhbGl6YXRpb25zIGVuYWJsZSByZXRyaWV2YWwgb2Yg
dGhlIHBhcmFtZXRlciB0eXBlIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uCisvLyBU
aGlzIGFsbG93cyByZXRyaWV2aW5nIHRoZSBleGFjdCB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIgd2hl
cmUgdGhlIENvbXBsZXRpb25IYW5kbGVyIGlzIGV4cGVjdGVkIGluIGEgZ2l2ZW4KKy8vIHN5bmNo
cm9ub3VzLXJlcGx5IG1ldGhvZC4KKwordGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgQywg
dHlwZW5hbWUuLi4gQXJncz4KK3N0cnVjdCBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rpb248
UihDOjoqKShBcmdzLi4uKT4geworICAgIHRlbXBsYXRlPHNpemVfdCBOLCB0eXBlbmFtZSA9IHN0
ZDo6ZW5hYmxlX2lmX3Q8KE4gPCBzaXplb2YuLi4oQXJncykpPj4KKyAgICB1c2luZyBUeXBlID0g
c3RkOjpyZW1vdmVfY3ZyZWZfdDx0eXBlbmFtZSBzdGQ6OnR1cGxlX2VsZW1lbnRfdDxOLCBzdGQ6
OnR1cGxlPEFyZ3MuLi4+Pj47Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBD
LCB0eXBlbmFtZS4uLiBBcmdzPgorc3RydWN0IENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVjdGlv
bjxSKEM6OiopKEFyZ3MuLi4pIGNvbnN0PiB7CisgICAgdGVtcGxhdGU8c2l6ZV90IE4sIHR5cGVu
YW1lID0gc3RkOjplbmFibGVfaWZfdDwoTiA8IHNpemVvZi4uLihBcmdzKSk+PgorICAgIHVzaW5n
IFR5cGUgPSBzdGQ6OnJlbW92ZV9jdnJlZl90PHR5cGVuYW1lIHN0ZDo6dHVwbGVfZWxlbWVudF90
PE4sIHN0ZDo6dHVwbGU8QXJncy4uLj4+PjsKK307CisKKy8vIENvbXBsZXRpb25IYW5kbGVyVmFs
aWRhdGlvbjo6bWF0Y2hpbmdUeXBlczxSZXBseVR5cGU+KCkgZXhwZWN0cyBib3RoIENIVHlwZSBh
bmQgUmVwbHlUeXBlCisvLyB0byBiZSBzcGVjaWFsaXphdGlvbnMgb2YgdGhlIENvbXBsZXRpb25I
YW5kbGVyIHRlbXBsYXRlLiBDSFR5cGUgaXMgdGhlIHR5cGUgc3BlY2lmaWVkIGluCisvLyB0aGUg
SVBDIGhhbmRsaW5nIG1ldGhvZCBvbiB0aGUgQysrIGNsYXNzLiBSZXBseVR5cGUgaXMgdGhlIHR5
cGUgZ2VuZXJhdGVkIGZyb20gdGhlIElQQworLy8gbWVzc2FnZSBzcGVjaWZpY2F0aW9uIChhbmQg
Y2FuIHN0aWxsIGJlIHVzZWQgaW4gdGhlIEMrKyBtZXRob2QpLiBWYWxpZGF0aW9uIHBhc3NlcyBp
ZiBib3RoCisvLyB0eXBlcyBhcmUgaW5kZWVkIHNwZWNpYWxpemF0aW9ucyBvZiB0aGUgQ29tcGxl
dGlvbkhhbmRsZXIgdGVtcGxhdGUgYW5kIGFsbCB0aGUgZGVjYXllZAorLy8gcGFyYW1ldGVyIHR5
cGVzIG1hdGNoIGJldHdlZW4gdGhlIHR3byBDb21wbGV0aW9uSGFuZGxlciBzcGVjaWFsaXphdGlv
bnMuCisKK3N0cnVjdCBDb21wbGV0aW9uSGFuZGxlclZhbGlkYXRpb24geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENIVHlwZT4KKyAgICBzdHJ1Y3QgVmFsaWRDb21wbGV0aW9uSGFuZGxlclR5cGUg
OiBzdGQ6OmZhbHNlX3R5cGUgeyB9OworCisgICAgdGVtcGxhdGU8c2l6ZV90IE4sIHR5cGVuYW1l
IFR1cGxlVHlwZT4KKyAgICB1c2luZyBQYXJhbWV0ZXJUeXBlID0gc3RkOjpyZW1vdmVfY3ZyZWZf
dDxzdGQ6OnR1cGxlX2VsZW1lbnRfdDxOLCBUdXBsZVR5cGU+PjsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENIQXJnc1R1cGxlLCB0eXBlbmFtZSBSZXBseUFyZ3NUdXBsZSwgc2l6ZV90Li4uIElu
ZGljZXM+CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG1hdGNoaW5nUGFyYW1ldGVycyhzdGQ6
OmluZGV4X3NlcXVlbmNlPEluZGljZXMuLi4+KQorICAgIHsKKyAgICAgICAgcmV0dXJuIChzdGQ6
OmlzX3NhbWVfdjxQYXJhbWV0ZXJUeXBlPEluZGljZXMsIENIQXJnc1R1cGxlPiwgUGFyYW1ldGVy
VHlwZTxJbmRpY2VzLCBSZXBseUFyZ3NUdXBsZT4+ICYmIC4uLik7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ0hUeXBlLCB0eXBlbmFtZSBSZXBseVR5cGU+CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG1hdGNoaW5nVHlwZXMoKQorICAgIHsKKyAgICAgICAgdXNpbmcgQ0hJblR5
cGVzID0gdHlwZW5hbWUgQ0hUeXBlOjpJblR5cGVzOworICAgICAgICB1c2luZyBSZXBseUluVHlw
ZXMgPSB0eXBlbmFtZSBSZXBseVR5cGU6OkluVHlwZXM7CisKKyAgICAgICAgcmV0dXJuIFZhbGlk
Q29tcGxldGlvbkhhbmRsZXJUeXBlPENIVHlwZT46OnZhbHVlICYmIFZhbGlkQ29tcGxldGlvbkhh
bmRsZXJUeXBlPFJlcGx5VHlwZT46OnZhbHVlCisgICAgICAgICAgICAmJiAoc3RkOjp0dXBsZV9z
aXplX3Y8Q0hJblR5cGVzPiA9PSBzdGQ6OnR1cGxlX3NpemVfdjxSZXBseUluVHlwZXM+KQorICAg
ICAgICAgICAgJiYgbWF0Y2hpbmdQYXJhbWV0ZXJzPENISW5UeXBlcywgUmVwbHlJblR5cGVzPihz
dGQ6Om1ha2VfaW5kZXhfc2VxdWVuY2U8c3RkOjp0dXBsZV9zaXplX3Y8Q0hJblR5cGVzPj4oKSk7
CisgICAgfQorfTsKKworLy8gVGhpcyBzcGVjaWFsaXphdGlvbiBpcyB1c2VkIGluIG1hdGNoaW5n
VHlwZXMoKSBhbmQgYWZmaXJtcyB0aGF0IHRoZSBwYXNzZWQtaW4gQ0hUeXBlIG9yCisvLyBSZXBs
eVR5cGUgaXMgaW5kZWVkIGEgcHJvcGVyIENvbXBsZXRpb25IYW5kbGVyIHR5cGUuCisKK3RlbXBs
YXRlPHR5cGVuYW1lLi4uIEluVHlwZXM+CitzdHJ1Y3QgQ29tcGxldGlvbkhhbmRsZXJWYWxpZGF0
aW9uOjpWYWxpZENvbXBsZXRpb25IYW5kbGVyVHlwZTxDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElu
VHlwZXMuLi4pPj4gOiBzdGQ6OnRydWVfdHlwZSB7IH07CisKIC8vIE1haW4gZGlzcGF0Y2ggZnVu
Y3Rpb25zCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0yMTQsMTIgKzI3MSwxNyBAQCBib29s
IGhhbmRsZU1lc3NhZ2VTeW5jaHJvbm91cyhDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBEZWNvZGVy
JiBkZWNvZGVyLCBVbmlxdWVSZQogICAgIGlmIChVTkxJS0VMWSghYXJndW1lbnRzKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdHlwZW5hbWUgVDo6RGVsYXllZFJlcGx5IGNvbXBsZXRp
b25IYW5kbGVyID0gW3JlcGx5RW5jb2RlciA9IFdURk1vdmUocmVwbHlFbmNvZGVyKSwgY29ubmVj
dGlvbiA9IFJlZiB7IGNvbm5lY3Rpb24gfV0gKGF1dG8mJi4uLiBhcmdzKSBtdXRhYmxlIHsKLSAg
ICAgICAgbG9nUmVwbHkoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCBhcmdzLi4uKTsKLSAgICAgICAg
VDo6c2VuZChXVEZNb3ZlKHJlcGx5RW5jb2RlciksIFdURk1vdmUoY29ubmVjdGlvbiksIGFyZ3Mu
Li4pOwotICAgIH07CisgICAgdXNpbmcgQ29tcGxldGlvbkhhbmRsZXJGcm9tTUYgPSB0eXBlbmFt
ZSBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rpb248TUY+Ojp0ZW1wbGF0ZSBUeXBlPHN0ZDo6
dHVwbGVfc2l6ZV92PHR5cGVuYW1lIFQ6OkFyZ3VtZW50cz4+OworICAgIHN0YXRpY19hc3NlcnQo
Q29tcGxldGlvbkhhbmRsZXJWYWxpZGF0aW9uOjp0ZW1wbGF0ZSBtYXRjaGluZ1R5cGVzPENvbXBs
ZXRpb25IYW5kbGVyRnJvbU1GLCB0eXBlbmFtZSBUOjpEZWxheWVkUmVwbHk+KCkpOworCiAgICAg
bG9nTWVzc2FnZShjb25uZWN0aW9uLCBUOjpuYW1lKCksICphcmd1bWVudHMpOwotICAgIGNhbGxN
ZW1iZXJGdW5jdGlvbihXVEZNb3ZlKCphcmd1bWVudHMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgb2JqZWN0LCBmdW5jdGlvbik7CisgICAgY2FsbE1lbWJlckZ1bmN0aW9uKFdURk1vdmUo
KmFyZ3VtZW50cyksCisgICAgICAgIENvbXBsZXRpb25IYW5kbGVyRnJvbU1GKFtyZXBseUVuY29k
ZXIgPSBXVEZNb3ZlKHJlcGx5RW5jb2RlciksIGNvbm5lY3Rpb24gPSBSZWYgeyBjb25uZWN0aW9u
IH1dIChhdXRvJiYuLi4gYXJncykgbXV0YWJsZSB7CisgICAgICAgICAgICBsb2dSZXBseShjb25u
ZWN0aW9uLCBUOjpuYW1lKCksIGFyZ3MuLi4pOworICAgICAgICAgICAgKHJlcGx5RW5jb2Rlci5n
ZXQoKSA8PCAuLi4gPDwgc3RkOjpmb3J3YXJkPGRlY2x0eXBlKGFyZ3MpPihhcmdzKSk7CisgICAg
ICAgICAgICBjb25uZWN0aW9uLT5zZW5kU3luY1JlcGx5KFdURk1vdmUocmVwbHlFbmNvZGVyKSk7
CisgICAgICAgIH0pLAorICAgICAgICBvYmplY3QsIGZ1bmN0aW9uKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMjMwLDEyICsyOTIsMTcgQEAgYm9vbCBoYW5kbGVNZXNzYWdlU3luY2hyb25v
dXNXYW50c0Nvbm5lY3Rpb24oQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgRGVjb2RlciYgZGUKICAg
ICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
LSAgICB0eXBlbmFtZSBUOjpEZWxheWVkUmVwbHkgY29tcGxldGlvbkhhbmRsZXIgPSBbcmVwbHlF
bmNvZGVyID0gV1RGTW92ZShyZXBseUVuY29kZXIpLCBjb25uZWN0aW9uID0gUmVmIHsgY29ubmVj
dGlvbiB9XSAoYXV0byYmLi4uIGFyZ3MpIG11dGFibGUgewotICAgICAgICBsb2dSZXBseShjb25u
ZWN0aW9uLCBUOjpuYW1lKCksIGFyZ3MuLi4pOwotICAgICAgICBUOjpzZW5kKFdURk1vdmUocmVw
bHlFbmNvZGVyKSwgV1RGTW92ZShjb25uZWN0aW9uKSwgYXJncy4uLik7Ci0gICAgfTsKKyAgICB1
c2luZyBDb21wbGV0aW9uSGFuZGxlckZyb21NRiA9IHR5cGVuYW1lIENvbXBsZXRpb25IYW5kbGVy
VHlwZURlZHVjdGlvbjxNRj46OnRlbXBsYXRlIFR5cGU8MSArIHN0ZDo6dHVwbGVfc2l6ZV92PHR5
cGVuYW1lIFQ6OkFyZ3VtZW50cz4+OworICAgIHN0YXRpY19hc3NlcnQoQ29tcGxldGlvbkhhbmRs
ZXJWYWxpZGF0aW9uOjp0ZW1wbGF0ZSBtYXRjaGluZ1R5cGVzPENvbXBsZXRpb25IYW5kbGVyRnJv
bU1GLCB0eXBlbmFtZSBUOjpEZWxheWVkUmVwbHk+KCkpOworCiAgICAgbG9nTWVzc2FnZShjb25u
ZWN0aW9uLCBUOjpuYW1lKCksICphcmd1bWVudHMpOwotICAgIGNhbGxNZW1iZXJGdW5jdGlvbihj
b25uZWN0aW9uLCBXVEZNb3ZlKCphcmd1bWVudHMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgb2JqZWN0LCBmdW5jdGlvbik7CisgICAgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbm5lY3Rpb24s
IFdURk1vdmUoKmFyZ3VtZW50cyksCisgICAgICAgIENvbXBsZXRpb25IYW5kbGVyRnJvbU1GKFty
ZXBseUVuY29kZXIgPSBXVEZNb3ZlKHJlcGx5RW5jb2RlciksIGNvbm5lY3Rpb24gPSBSZWYgeyBj
b25uZWN0aW9uIH1dIChhdXRvJiYuLi4gYXJncykgbXV0YWJsZSB7CisgICAgICAgICAgICBsb2dS
ZXBseShjb25uZWN0aW9uLCBUOjpuYW1lKCksIGFyZ3MuLi4pOworICAgICAgICAgICAgKHJlcGx5
RW5jb2Rlci5nZXQoKSA8PCAuLi4gPDwgc3RkOjpmb3J3YXJkPGRlY2x0eXBlKGFyZ3MpPihhcmdz
KSk7CisgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kU3luY1JlcGx5KFdURk1vdmUocmVwbHlF
bmNvZGVyKSk7CisgICAgICAgIH0pLAorICAgICAgICBvYmplY3QsIGZ1bmN0aW9uKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjUwLDEyICszMTcsMTYgQEAgdm9pZCBoYW5kbGVNZXNzYWdl
U3luY2hyb25vdXMoU3RyZWFtU2VydmVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgRGVjb2RlciYg
ZGVjb2QKICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHR5cGVuYW1lIFQ6OkRlbGF5ZWRSZXBseSBjb21wbGV0aW9uSGFuZGxlciA9IFtzeW5jUmVx
dWVzdElELCBjb25uZWN0aW9uID0gUmVmIHsgY29ubmVjdGlvbiB9XSAoYXV0byYmLi4uIGFyZ3Mp
IG11dGFibGUgewotICAgICAgICBsb2dSZXBseShjb25uZWN0aW9uLT5jb25uZWN0aW9uKCksIFQ6
Om5hbWUoKSwgYXJncy4uLik7Ci0gICAgICAgIGNvbm5lY3Rpb24tPnNlbmRTeW5jUmVwbHk8VD4o
c3luY1JlcXVlc3RJRCwgYXJncy4uLik7Ci0gICAgfTsKKyAgICB1c2luZyBDb21wbGV0aW9uSGFu
ZGxlckZyb21NRiA9IHR5cGVuYW1lIENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVjdGlvbjxNRj46
OnRlbXBsYXRlIFR5cGU8c3RkOjp0dXBsZV9zaXplX3Y8dHlwZW5hbWUgVDo6QXJndW1lbnRzPj47
CisgICAgc3RhdGljX2Fzc2VydChDb21wbGV0aW9uSGFuZGxlclZhbGlkYXRpb246OnRlbXBsYXRl
IG1hdGNoaW5nVHlwZXM8Q29tcGxldGlvbkhhbmRsZXJGcm9tTUYsIHR5cGVuYW1lIFQ6OkRlbGF5
ZWRSZXBseT4oKSk7CisKICAgICBsb2dNZXNzYWdlKGNvbm5lY3Rpb24uY29ubmVjdGlvbigpLCBU
OjpuYW1lKCksICphcmd1bWVudHMpOwotICAgIGNhbGxNZW1iZXJGdW5jdGlvbihXVEZNb3ZlKCph
cmd1bWVudHMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb2JqZWN0LCBmdW5jdGlvbik7
CisgICAgY2FsbE1lbWJlckZ1bmN0aW9uKFdURk1vdmUoKmFyZ3VtZW50cyksCisgICAgICAgIENv
bXBsZXRpb25IYW5kbGVyRnJvbU1GKFtzeW5jUmVxdWVzdElELCBjb25uZWN0aW9uID0gUmVmIHsg
Y29ubmVjdGlvbiB9XSAoYXV0byYmLi4uIGFyZ3MpIG11dGFibGUgeworICAgICAgICAgICAgbG9n
UmVwbHkoY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLCBUOjpuYW1lKCksIGFyZ3MuLi4pOworICAg
ICAgICAgICAgY29ubmVjdGlvbi0+c2VuZFN5bmNSZXBseTxUPihzeW5jUmVxdWVzdElELCBzdGQ6
OmZvcndhcmQ8ZGVjbHR5cGUoYXJncyk+KGFyZ3MpLi4uKTsKKyAgICAgICAgfSksCisgICAgICAg
IG9iamVjdCwgZnVuY3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBD
LCB0eXBlbmFtZSBNRj4KQEAgLTI2OSwxMyArMzQwLDE4IEBAIHZvaWQgaGFuZGxlTWVzc2FnZUFz
eW5jKENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIERlY29kZXImIGRlY29kZXIsIEMqIG9iamVjdCwg
TUYKICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHR5cGVuYW1lIFQ6OkFzeW5jUmVwbHkgY29tcGxldGlvbkhhbmRsZXIgPSB7IFtsaXN0ZW5lcklE
ID0gKmxpc3RlbmVySUQsIGNvbm5lY3Rpb24gPSBSZWYgeyBjb25uZWN0aW9uIH1dIChhdXRvJiYu
Li4gYXJncykgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gZW5jb2RlciA9IG1ha2VVbmlxdWVSZWY8
RW5jb2Rlcj4oVDo6YXN5bmNNZXNzYWdlUmVwbHlOYW1lKCksIGxpc3RlbmVySUQpOwotICAgICAg
ICBsb2dSZXBseShjb25uZWN0aW9uLCBUOjpuYW1lKCksIGFyZ3MuLi4pOwotICAgICAgICBUOjpz
ZW5kKFdURk1vdmUoZW5jb2RlciksIFdURk1vdmUoY29ubmVjdGlvbiksIGFyZ3MuLi4pOwotICAg
IH0sIFQ6OmNhbGxiYWNrVGhyZWFkIH07CisgICAgdXNpbmcgQ29tcGxldGlvbkhhbmRsZXJGcm9t
TUYgPSB0eXBlbmFtZSBDb21wbGV0aW9uSGFuZGxlclR5cGVEZWR1Y3Rpb248TUY+Ojp0ZW1wbGF0
ZSBUeXBlPHN0ZDo6dHVwbGVfc2l6ZV92PHR5cGVuYW1lIFQ6OkFyZ3VtZW50cz4+OworICAgIHN0
YXRpY19hc3NlcnQoQ29tcGxldGlvbkhhbmRsZXJWYWxpZGF0aW9uOjp0ZW1wbGF0ZSBtYXRjaGlu
Z1R5cGVzPENvbXBsZXRpb25IYW5kbGVyRnJvbU1GLCB0eXBlbmFtZSBUOjpBc3luY1JlcGx5Pigp
KTsKKwogICAgIGxvZ01lc3NhZ2UoY29ubmVjdGlvbiwgVDo6bmFtZSgpLCAqYXJndW1lbnRzKTsK
LSAgICBjYWxsTWVtYmVyRnVuY3Rpb24oV1RGTW92ZSgqYXJndW1lbnRzKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIG9iamVjdCwgZnVuY3Rpb24pOworICAgIGNhbGxNZW1iZXJGdW5jdGlv
bihXVEZNb3ZlKCphcmd1bWVudHMpLAorICAgICAgICBDb21wbGV0aW9uSGFuZGxlckZyb21NRiB7
IFtsaXN0ZW5lcklEID0gKmxpc3RlbmVySUQsIGNvbm5lY3Rpb24gPSBSZWYgeyBjb25uZWN0aW9u
IH1dIChhdXRvJiYuLi4gYXJncykgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvIGVuY29kZXIg
PSBtYWtlVW5pcXVlUmVmPEVuY29kZXI+KFQ6OmFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpLCBsaXN0
ZW5lcklEKTsKKyAgICAgICAgICAgIGxvZ1JlcGx5KGNvbm5lY3Rpb24sIFQ6Om5hbWUoKSwgYXJn
cy4uLik7CisgICAgICAgICAgICAoZW5jb2Rlci5nZXQoKSA8PCAuLi4gPDwgc3RkOjpmb3J3YXJk
PGRlY2x0eXBlKGFyZ3MpPihhcmdzKSk7CisgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kU3lu
Y1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOworICAgICAgICB9LCBUOjpjYWxsYmFja1RocmVhZCB9
LAorICAgICAgICBvYmplY3QsIGZ1bmN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgQywgdHlwZW5hbWUgTUY+CkBAIC0yODksMTMgKzM2NSwxOCBAQCB2b2lkIGhhbmRs
ZU1lc3NhZ2VBc3luY1dhbnRzQ29ubmVjdGlvbihDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBEZWNv
ZGVyJiBkZWNvZGVyLAogICAgIGlmIChVTkxJS0VMWSghYXJndW1lbnRzKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgdHlwZW5hbWUgVDo6QXN5bmNSZXBseSBjb21wbGV0aW9uSGFuZGxlciA9IHsg
W2xpc3RlbmVySUQgPSAqbGlzdGVuZXJJRCwgY29ubmVjdGlvbiA9IFJlZiB7IGNvbm5lY3Rpb24g
fV0gKGF1dG8mJi4uLiBhcmdzKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBlbmNvZGVyID0gbWFr
ZVVuaXF1ZVJlZjxFbmNvZGVyPihUOjphc3luY01lc3NhZ2VSZXBseU5hbWUoKSwgbGlzdGVuZXJJ
RCk7Ci0gICAgICAgIGxvZ1JlcGx5KGNvbm5lY3Rpb24sIFQ6Om5hbWUoKSwgYXJncy4uLik7Ci0g
ICAgICAgIFQ6OnNlbmQoV1RGTW92ZShlbmNvZGVyKSwgV1RGTW92ZShjb25uZWN0aW9uKSwgYXJn
cy4uLik7Ci0gICAgfSwgVDo6Y2FsbGJhY2tUaHJlYWQgfTsKKyAgICB1c2luZyBDb21wbGV0aW9u
SGFuZGxlckZyb21NRiA9IHR5cGVuYW1lIENvbXBsZXRpb25IYW5kbGVyVHlwZURlZHVjdGlvbjxN
Rj46OnRlbXBsYXRlIFR5cGU8MSArIHN0ZDo6dHVwbGVfc2l6ZV92PHR5cGVuYW1lIFQ6OkFyZ3Vt
ZW50cz4+OworICAgIHN0YXRpY19hc3NlcnQoQ29tcGxldGlvbkhhbmRsZXJWYWxpZGF0aW9uOjp0
ZW1wbGF0ZSBtYXRjaGluZ1R5cGVzPENvbXBsZXRpb25IYW5kbGVyRnJvbU1GLCB0eXBlbmFtZSBU
OjpBc3luY1JlcGx5PigpKTsKKwogICAgIGxvZ01lc3NhZ2UoY29ubmVjdGlvbiwgVDo6bmFtZSgp
LCAqYXJndW1lbnRzKTsKLSAgICBjYWxsTWVtYmVyRnVuY3Rpb24oY29ubmVjdGlvbiwgV1RGTW92
ZSgqYXJndW1lbnRzKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9iamVjdCwgZnVuY3Rp
b24pOworICAgIGNhbGxNZW1iZXJGdW5jdGlvbihjb25uZWN0aW9uLCBXVEZNb3ZlKCphcmd1bWVu
dHMpLAorICAgICAgICBDb21wbGV0aW9uSGFuZGxlckZyb21NRiB7IFtsaXN0ZW5lcklEID0gKmxp
c3RlbmVySUQsIGNvbm5lY3Rpb24gPSBSZWYgeyBjb25uZWN0aW9uIH1dIChhdXRvJiYuLi4gYXJn
cykgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvIGVuY29kZXIgPSBtYWtlVW5pcXVlUmVmPEVu
Y29kZXI+KFQ6OmFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpLCBsaXN0ZW5lcklEKTsKKyAgICAgICAg
ICAgIGxvZ1JlcGx5KGNvbm5lY3Rpb24sIFQ6Om5hbWUoKSwgYXJncy4uLik7CisgICAgICAgICAg
ICAoZW5jb2Rlci5nZXQoKSA8PCAuLi4gPDwgc3RkOjpmb3J3YXJkPGRlY2x0eXBlKGFyZ3MpPihh
cmdzKSk7CisgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5j
b2RlcikpOworICAgICAgICB9LCBUOjpjYWxsYmFja1RocmVhZCB9LAorICAgICAgICBvYmplY3Qs
IGZ1bmN0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgKaW5kZXggYWJlZjRlY2Zl
M2U5Mzc4YzE3ZmFiZTM0ZDNjMjQ4M2QxNDA3NDdiZC4uYWIzOTdmYmRhYmIzMGU2YzViYzI4ZmFk
ODAxM2Y2ZTAzZDg5ZDZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
U3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uaApAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgU3RyZWFt
U2VydmVyQ29ubmVjdGlvbjo6c2VuZFN5bmNSZXBseShDb25uZWN0aW9uOjpTeW5jUmVxdWVzdElE
IHN5bmNSZXF1ZXN0CiAgICAgfQogICAgIGF1dG8gZW5jb2RlciA9IG1ha2VVbmlxdWVSZWY8RW5j
b2Rlcj4oTWVzc2FnZU5hbWU6OlN5bmNNZXNzYWdlUmVwbHksIHN5bmNSZXF1ZXN0SUQudG9VSW50
NjQoKSk7CiAKLSAgICAoZW5jb2Rlci5nZXQoKSA8PCAuLi4gPDwgYXJndW1lbnRzKTsKKyAgICAo
ZW5jb2Rlci5nZXQoKSA8PCAuLi4gPDwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRz
KSk7CiAgICAgbV9jb25uZWN0aW9uLT5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA0YTg4MDk4
MDlhNTZmM2NlZjJhZGNlMDIwYTMwZjUwZTc3OTVkNzg1Li42NGYxMzYwMWMyMDlkOGE3OWE2Njcz
ZGJiMDc4ODk4ZmQ5MzQ4NWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkKQEAgLTIxMCwxMSArMjEwLDYgQEAgZGVmIG1lc3NhZ2VfdG9fc3RydWN0X2RlY2xhcmF0
aW9uKHJlY2VpdmVyLCBtZXNzYWdlKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBz
dGF0aWMgY29uc3RleHByIGF1dG8gY2FsbGJhY2tUaHJlYWQgPSBXVEY6OkNvbXBsZXRpb25IYW5k
bGVyQ2FsbFRocmVhZDo6TWFpblRocmVhZDtcbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFk
ID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDtc
bicpCi0gICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKFNUUkVBTV9BVFRSSUJV
VEUpOgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIHN0YXRpYyB2b2lkIHNlbmQoVW5p
cXVlUmVmPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJicpCi0gICAgICAgICAgICBp
ZiBsZW4oc2VuZF9wYXJhbWV0ZXJzKToKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcs
ICVzJyAlIGNvbXBsZXRpb25faGFuZGxlcl9wYXJhbWV0ZXJzKQotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICB1c2luZyBSZXBseSA9
ICVzO1xuJyAlIHJlcGx5X3R1cGxlKG1lc3NhZ2UpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSAlcztcbicgJSByZXBseV9hcmd1bWVudHNfdHlwZSht
ZXNzYWdlKSkKIApAQCAtMTExMiwxNSArMTEwNyw2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hh
bmRsZXIocmVjZWl2ZXIpOgogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJywgJy5qb2lu
KFsnSVBDOjpBc3luY1JlcGx5RXJyb3I8JyArIHgudHlwZSArICc+OjpjcmVhdGUoKScgZm9yIHgg
aW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzXSkpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnKTtcbn1cblxuJykKIAotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6
c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbicgJSAobWVzc2FnZS5uYW1lKSkKLSAgICAgICAgICAgIGlmIGxlbihzZW5kX3Bh
cmFtZXRlcnMpOgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJywgJXMnICUgJywgJy5q
b2luKFsnICcuam9pbih4KSBmb3IgeCBpbiBzZW5kX3BhcmFtZXRlcnNdKSkKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoJylcbntcbicpCi0gICAgICAgICAgICByZXN1bHQgKz0gWycgICAgZW5j
b2Rlci5nZXQoKSA8PCAlcztcbicgJSB4Lm5hbWUgZm9yIHggaW4gbWVzc2FnZS5yZXBseV9wYXJh
bWV0ZXJzXQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGNvbm5lY3Rpb24uc2VuZFN5
bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTtcbicpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCd9XG4nKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQotCiAgICAgICAgICAgICBp
ZiBtZXNzYWdlLmNvbmRpdGlvbjoKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjZW5k
aWZcblxuJykKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0
cy9UZXN0V2l0aENWUGl4ZWxCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGIvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aENWUGl4ZWxCdWZmZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwCmluZGV4IGI1NWFjNDk2YmIxNDJhMzI5OWY5ZWRlM2FhZTRlMjE1NDQ2MTUwNzYuLjE3
ZTIxYTg3ZjE5ZTNlOTcxY2E2MmYyNWEzMGYwMjVhYTc3MDc2ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhDVlBpeGVsQnVmZmVyTWVzc2Fn
ZVJlY2VpdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rl
c3RXaXRoQ1ZQaXhlbEJ1ZmZlck1lc3NhZ2VSZWNlaXZlci5jcHAKQEAgLTY1LDEyICs2NSw2IEBA
IHZvaWQgUmVjZWl2ZUNWUGl4ZWxCdWZmZXI6OmNhbmNlbFJlcGx5KENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoUmV0YWluUHRyPENWUGl4ZWxCCiAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBc3lu
Y1JlcGx5RXJyb3I8UmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+Pjo6Y3JlYXRlKCkpOwogfQog
Ci12b2lkIFJlY2VpdmVDVlBpeGVsQnVmZmVyOjpzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+
JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBSZXRhaW5QdHI8
Q1ZQaXhlbEJ1ZmZlclJlZj4mIHIwKQotewotICAgIGVuY29kZXIuZ2V0KCkgPDwgcjA7Ci0gICAg
Y29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwotfQotCiAjZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UgVGVzdFdpdGhDVlBpeGVsQnVmZmVyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoQ1ZQaXhlbEJ1ZmZlck1lc3Nh
Z2VzLmggYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoQ1ZQaXhl
bEJ1ZmZlck1lc3NhZ2VzLmgKaW5kZXggMTAxMWJlMWMzZTQ5ZWQ0N2UwMTY1MWQ3OTE0YjE2ZmJl
YzNiYTQ4Ni4uNTJkN2E1ZmZiOGM1ZDIxMmFiN2Q4NThmNjE2ZDI5NGU5OGIwMTgzMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aENWUGl4ZWxC
dWZmZXJNZXNzYWdlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMv
VGVzdFdpdGhDVlBpeGVsQnVmZmVyTWVzc2FnZXMuaApAQCAtODAsNyArODAsNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgYXN5bmNNZXNzYWdlUmVwbHlOYW1lKCkgeyBy
ZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhDVlBpeGVsQnVmZmVyX1JlY2VpdmVDVlBp
eGVsQnVmZmVyUmVwbHk7IH0KICAgICB1c2luZyBBc3luY1JlcGx5ID0gUmVjZWl2ZUNWUGl4ZWxC
dWZmZXJBc3luY1JlcGx5OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjYWxsYmFja1RocmVh
ZCA9IFdURjo6Q29tcGxldGlvbkhhbmRsZXJDYWxsVGhyZWFkOjpDb25zdHJ1Y3Rpb25UaHJlYWQ7
Ci0gICAgc3RhdGljIHZvaWQgc2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmLCBJUEM6OkNv
bm5lY3Rpb24mLCBjb25zdCBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4mIHIwKTsKICAgICB1
c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8UmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+Jj47CiAg
ICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPFJldGFpblB0cjxDVlBpeGVsQnVm
ZmVyUmVmPj47CiAgICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aEltYWdlRGF0
YU1lc3NhZ2VSZWNlaXZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3Rz
L1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZVJlY2VpdmVyLmNwcAppbmRleCBlYzU2ZjYwZWJhMjg4
NmQ2MTE1ZjFhMDUwMGQxNDM2OTFhN2RkNmI0Li43OTlhNmNhYjQzYzAwOGE4ZDI5NmM0NmU3OTlj
NWNkNmNiNDU2M2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rl
c3RzL1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZVJlY2VpdmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZVJlY2VpdmVy
LmNwcApAQCAtNTgsMTIgKzU4LDYgQEAgdm9pZCBSZWNlaXZlSW1hZ2VEYXRhOjpjYW5jZWxSZXBs
eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFnZUQKICAgICBjb21w
bGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlFcnJvcjxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VE
YXRhPj46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBSZWNlaXZlSW1hZ2VEYXRhOjpzZW5kKFVuaXF1
ZVJlZjxJUEM6OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYgcjApCi17Ci0gICAgZW5jb2Rlci5n
ZXQoKSA8PCByMDsKLSAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVwbHkoV1RGTW92ZShlbmNvZGVy
KSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFRlc3RXaXRoSW1hZ2VEYXRhCiAKIH0gLy8gbmFtZXNw
YWNlIE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rl
c3RzL1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZXMuaCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvdGVzdHMvVGVzdFdpdGhJbWFnZURhdGFNZXNzYWdlcy5oCmluZGV4IDZhY2YwMzE4ZDBh
ZGIxMTEzMTA3NzgwOWNlYmQ3NmQ0ZDgwYTA2YzIuLmVmYzFjYzY4M2MyZGQ5ZDAzZDY0NTc5MDM5
YjEyMzc3OTFiYTJhYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQv
dGVzdHMvVGVzdFdpdGhJbWFnZURhdGFNZXNzYWdlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhJbWFnZURhdGFNZXNzYWdlcy5oCkBAIC03NSw3ICs3
NSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBhc3luY01lc3NhZ2VS
ZXBseU5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aEltYWdlRGF0YV9S
ZWNlaXZlSW1hZ2VEYXRhUmVwbHk7IH0KICAgICB1c2luZyBBc3luY1JlcGx5ID0gUmVjZWl2ZUlt
YWdlRGF0YUFzeW5jUmVwbHk7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhy
ZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRocmVh
ZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6
Q29ubmVjdGlvbiYsIGNvbnN0IFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiByMCk7CiAgICAg
dXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Jj47CiAg
ICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpJbWFn
ZURhdGE+PjsKICAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoTGVnYWN5UmVj
ZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90
ZXN0cy9UZXN0V2l0aExlZ2FjeVJlY2VpdmVyTWVzc2FnZVJlY2VpdmVyLmNwcAppbmRleCBiNGQz
MmFhNWVkZjI0NGNkZWY0Mjc1ZmZhNjY4ZjU4MDBjYjZjZjQxLi5jNTViMGY2YmU4Yjc2ZGEzMmQ2
M2IwZDY0MDk4Y2RlN2IxZTQ1NzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L3Rlc3RzL1Rlc3RXaXRoTGVnYWN5UmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhMZWdhY3lSZWNl
aXZlck1lc3NhZ2VSZWNlaXZlci5jcHAKQEAgLTg0LDEyICs4NCw2IEBAIHZvaWQgQ3JlYXRlUGx1
Z2luOjpjYW5jZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wmJik+JiYgY29tcGxl
dGlvbkhhbmRsCiAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBc3luY1JlcGx5RXJyb3I8Ym9v
bD46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBDcmVhdGVQbHVnaW46OnNlbmQoVW5pcXVlUmVmPElQ
Qzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGJvb2wg
cmVzdWx0KQotewotICAgIGVuY29kZXIuZ2V0KCkgPDwgcmVzdWx0OwotICAgIGNvbm5lY3Rpb24u
c2VuZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTsKLX0KLQogdm9pZCBSdW5KYXZhU2NyaXB0
QWxlcnQ6OmNhbGxSZXBseShJUEM6OkRlY29kZXImIGRlY29kZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwpAQCAtMTAwLDExICs5NCw2IEBAIHZvaWQgUnVuSmF2YVNjcmlwdEFsZXJ0OjpjYW5jZWxSZXBs
eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsCiAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKIH0KIAotdm9pZCBSdW5KYXZhU2NyaXB0QWxlcnQ6OnNlbmQoVW5pcXVl
UmVmPElQQzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24p
Ci17Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwotfQot
CiB2b2lkIEdldFBsdWdpbnM6OmNhbGxSZXBseShJUEM6OkRlY29kZXImIGRlY29kZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OlBsdWdp
bkluZm8+PiBwbHVnaW5zOwpAQCAtMTIyLDIzICsxMTEsNiBAQCB2b2lkIEdldFBsdWdpbnM6OmNh
bmNlbFJlcGx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlBsdWdpbklu
Zm8+JgogICAgIGNvbXBsZXRpb25IYW5kbGVyKElQQzo6QXN5bmNSZXBseUVycm9yPFZlY3RvcjxX
ZWJDb3JlOjpQbHVnaW5JbmZvPj46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBHZXRQbHVnaW5zOjpz
ZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4mIHBsdWdpbnMpCi17
Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCBwbHVnaW5zOwotICAgIGNvbm5lY3Rpb24uc2VuZFN5bmNS
ZXBseShXVEZNb3ZlKGVuY29kZXIpKTsKLX0KLQotdm9pZCBHZXRQbHVnaW5Qcm9jZXNzQ29ubmVj
dGlvbjo6c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgY29uc3QgSVBDOjpDb25uZWN0aW9uOjpIYW5kbGUmIGNvbm5lY3Rp
b25IYW5kbGUpCi17Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCBjb25uZWN0aW9uSGFuZGxlOwotICAg
IGNvbm5lY3Rpb24uc2VuZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTsKLX0KLQotdm9pZCBU
ZXN0TXVsdGlwbGVBdHRyaWJ1dGVzOjpzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYgZW5j
b2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQotewotICAgIGNvbm5lY3Rpb24uc2Vu
ZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTsKLX0KLQogI2lmIFBMQVRGT1JNKE1BQykKIAog
dm9pZCBJbnRlcnByZXRLZXlFdmVudDo6Y2FsbFJlcGx5KElQQzo6RGVjb2RlciYgZGVjb2Rlciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1OCwxMiArMTMwLDYgQEAgdm9pZCBJbnRlcnBy
ZXRLZXlFdmVudDo6Y2FuY2VsUmVwbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vi
Q29yZTo6S2V5cHIKICAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlFcnJvcjxW
ZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPj46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBJ
bnRlcnByZXRLZXlFdmVudDo6c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIs
IElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXBy
ZXNzQ29tbWFuZD4mIGNvbW1hbmROYW1lKQotewotICAgIGVuY29kZXIuZ2V0KCkgPDwgY29tbWFu
ZE5hbWU7Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwot
fQotCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdpdGhMZWdhY3lSZWNlaXZlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aExlZ2Fj
eVJlY2VpdmVyTWVzc2FnZXMuaCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMv
VGVzdFdpdGhMZWdhY3lSZWNlaXZlck1lc3NhZ2VzLmgKaW5kZXggZDliYjk5NjgzYWM3NGJmNGNl
NTZlM2RlY2YzZjBiOWU2NjdmYWY5My4uNGQ4YmMxMjE2OWM2ZTcyMWJkN2JhNzM4YTg2MjdmMDNl
Mzk5NjQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9U
ZXN0V2l0aExlZ2FjeVJlY2VpdmVyTWVzc2FnZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoTGVnYWN5UmVjZWl2ZXJNZXNzYWdlcy5oCkBAIC0yODgs
NyArMjg4LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIGFzeW5jTWVz
c2FnZVJlcGx5TmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5
UmVjZWl2ZXJfQ3JlYXRlUGx1Z2luUmVwbHk7IH0KICAgICB1c2luZyBBc3luY1JlcGx5ID0gQ3Jl
YXRlUGx1Z2luQXN5bmNSZXBseTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2FsbGJhY2tU
aHJlYWQgPSBXVEY6OkNvbXBsZXRpb25IYW5kbGVyQ2FsbFRocmVhZDo6Q29uc3RydWN0aW9uVGhy
ZWFkOwotICAgIHN0YXRpYyB2b2lkIHNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiwgSVBD
OjpDb25uZWN0aW9uJiwgYm9vbCByZXN1bHQpOwogICAgIHVzaW5nIFJlcGx5ID0gc3RkOjp0dXBs
ZTxib29sJj47CiAgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGJvb2w+Owog
ICAgIENyZWF0ZVBsdWdpbih1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlELCBjb25zdCBXZWJLaXQ6
OlBsdWdpbjo6UGFyYW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTMxNyw3ICszMTYsNiBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgYXN5bmNNZXNzYWdlUmVwbHlOYW1lKCkg
eyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9SdW5KYXZh
U2NyaXB0QWxlcnRSZXBseTsgfQogICAgIHVzaW5nIEFzeW5jUmVwbHkgPSBSdW5KYXZhU2NyaXB0
QWxlcnRBc3luY1JlcGx5OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjYWxsYmFja1RocmVh
ZCA9IFdURjo6Q29tcGxldGlvbkhhbmRsZXJDYWxsVGhyZWFkOjpDb25zdHJ1Y3Rpb25UaHJlYWQ7
Ci0gICAgc3RhdGljIHZvaWQgc2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmLCBJUEM6OkNv
bm5lY3Rpb24mKTsKICAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8PjsKICAgICB1c2luZyBS
ZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8PjsKICAgICBSdW5KYXZhU2NyaXB0QWxlcnQodWlu
dDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtMzQ2LDcgKzM0NCw2IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBhc3luY01lc3NhZ2VSZXBseU5h
bWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0dl
dFBsdWdpbnNSZXBseTsgfQogICAgIHVzaW5nIEFzeW5jUmVwbHkgPSBHZXRQbHVnaW5zQXN5bmNS
ZXBseTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2FsbGJhY2tUaHJlYWQgPSBXVEY6OkNv
bXBsZXRpb25IYW5kbGVyQ2FsbFRocmVhZDo6Q29uc3RydWN0aW9uVGhyZWFkOwotICAgIHN0YXRp
YyB2b2lkIHNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJiwg
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+JiBwbHVnaW5zKTsKICAgICB1c2luZyBS
ZXBseSA9IHN0ZDo6dHVwbGU8VmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+Jj47CiAgICAgdXNp
bmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZv
Pj47CiAgICAgZXhwbGljaXQgR2V0UGx1Z2lucyhib29sIHJlZnJlc2gpCkBAIC0zNzIsNyArMzY5
LDYgQEAgcHVibGljOgogCiAgICAgdXNpbmcgRGVsYXllZFJlcGx5ID0gR2V0UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25EZWxheWVkUmVwbHk7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhbGxi
YWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlv
blRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYs
IElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlJiBjb25uZWN0
aW9uSGFuZGxlKTsKICAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8SVBDOjpDb25uZWN0aW9u
OjpIYW5kbGUmPjsKICAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8SVBDOjpD
b25uZWN0aW9uOjpIYW5kbGU+OwogICAgIGV4cGxpY2l0IEdldFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCkKQEAgLTM5OCw3ICszOTQsNiBAQCBwdWJsaWM6
CiAKICAgICB1c2luZyBEZWxheWVkUmVwbHkgPSBUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzRGVsYXll
ZFJlcGx5OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjYWxsYmFja1RocmVhZCA9IFdURjo6
Q29tcGxldGlvbkhhbmRsZXJDYWxsVGhyZWFkOjpDb25zdHJ1Y3Rpb25UaHJlYWQ7Ci0gICAgc3Rh
dGljIHZvaWQgc2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24m
KTsKICAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8PjsKICAgICB1c2luZyBSZXBseUFyZ3Vt
ZW50cyA9IHN0ZDo6dHVwbGU8PjsKICAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNv
bnN0CkBAIC01MDksNyArNTA0LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VO
YW1lIGFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRl
c3RXaXRoTGVnYWN5UmVjZWl2ZXJfSW50ZXJwcmV0S2V5RXZlbnRSZXBseTsgfQogICAgIHVzaW5n
IEFzeW5jUmVwbHkgPSBJbnRlcnByZXRLZXlFdmVudEFzeW5jUmVwbHk7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxU
aHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKFVuaXF1ZVJl
ZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kTmFtZSk7CiAgICAgdXNpbmcgUmVwbHkgPSBzdGQ6
OnR1cGxlPFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jj47CiAgICAgdXNpbmcgUmVw
bHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+
PjsKICAgICBleHBsaWNpdCBJbnRlcnByZXRLZXlFdmVudCh1aW50MzJfdCB0eXBlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aFNlbWFwaG9y
ZU1lc3NhZ2VSZWNlaXZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3Rz
L1Rlc3RXaXRoU2VtYXBob3JlTWVzc2FnZVJlY2VpdmVyLmNwcAppbmRleCA5NjAwNmVmMjczMDI0
ZGU1YzAzYWIyZmNhMzY5MmYyM2I2MjY4MDg2Li42ODJhN2Q4YzIwYTM4NDdkZThiM2U1NWNlY2Uz
MjlmODE1Y2U0ODYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rl
c3RzL1Rlc3RXaXRoU2VtYXBob3JlTWVzc2FnZVJlY2VpdmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU2VtYXBob3JlTWVzc2FnZVJlY2VpdmVy
LmNwcApAQCAtNTUsMTIgKzU1LDYgQEAgdm9pZCBSZWNlaXZlU2VtYXBob3JlOjpjYW5jZWxSZXBs
eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6U2VtYXBob3JlJiYpPiYmIGMKICAgICBjb21w
bGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlFcnJvcjxJUEM6OlNlbWFwaG9yZT46OmNyZWF0
ZSgpKTsKIH0KIAotdm9pZCBSZWNlaXZlU2VtYXBob3JlOjpzZW5kKFVuaXF1ZVJlZjxJUEM6OkVu
Y29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBJUEM6
OlNlbWFwaG9yZSYgcjApCi17Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCByMDsKLSAgICBjb25uZWN0
aW9uLnNlbmRTeW5jUmVwbHkoV1RGTW92ZShlbmNvZGVyKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFRlc3RXaXRoU2VtYXBob3JlCiAKIH0gLy8gbmFtZXNwYWNlIE1lc3NhZ2VzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU2VtYXBob3JlTWVz
c2FnZXMuaCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTZW1h
cGhvcmVNZXNzYWdlcy5oCmluZGV4IGFmNmIwNmExNzAzM2YxMmVmNWM0M2E3ZTA4N2ZhNDI2NWZj
MjU3OTIuLjdmNmU5YTg2MjFkNTk1NjdjNzlhZDFhYjNjZTAzNmUxOTA3OWE2YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTZW1hcGhvcmVN
ZXNzYWdlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdp
dGhTZW1hcGhvcmVNZXNzYWdlcy5oCkBAIC03NCw3ICs3NCw2IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgSVBDOjpNZXNzYWdlTmFtZSBhc3luY01lc3NhZ2VSZXBseU5hbWUoKSB7IHJldHVybiBJUEM6
Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aFNlbWFwaG9yZV9SZWNlaXZlU2VtYXBob3JlUmVwbHk7IH0K
ICAgICB1c2luZyBBc3luY1JlcGx5ID0gUmVjZWl2ZVNlbWFwaG9yZUFzeW5jUmVwbHk7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFu
ZGxlckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5k
KFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IElQQzo6
U2VtYXBob3JlJiByMCk7CiAgICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPElQQzo6U2VtYXBo
b3JlJj47CiAgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPElQQzo6U2VtYXBo
b3JlPjsKICAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU3VwZXJjbGFzc01l
c3NhZ2VSZWNlaXZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rl
c3RXaXRoU3VwZXJjbGFzc01lc3NhZ2VSZWNlaXZlci5jcHAKaW5kZXggM2E5NDExYzlmOGVmYzI5
MTc5NTYzYTJjMDUzNTVmMWRkYzZhY2NjMS4uOWE4YTNkMjc0YmMwNTViYWExNGIyYzE4NWMxODgy
ZWJlOGEyODQyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0
cy9UZXN0V2l0aFN1cGVyY2xhc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTdXBlcmNsYXNzTWVzc2FnZVJlY2VpdmVy
LmNwcApAQCAtNjMsMTIgKzYzLDYgQEAgdm9pZCBUZXN0QXN5bmNNZXNzYWdlOjpjYW5jZWxSZXBs
eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90JiYpPiYmIGNvbXBsZXQKICAgICBjb21w
bGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlFcnJvcjx1aW50NjRfdD46OmNyZWF0ZSgpKTsK
IH0KIAotdm9pZCBUZXN0QXN5bmNNZXNzYWdlOjpzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+
JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCByZXN1bHQp
Ci17Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCByZXN1bHQ7Ci0gICAgY29ubmVjdGlvbi5zZW5kU3lu
Y1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwotfQotCiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNU
X0ZFQVRVUkUpCkBAIC04MywxMSArNzcsNiBAQCB2b2lkIFRlc3RBc3luY01lc3NhZ2VXaXRoTm9B
cmd1bWVudHM6OmNhbmNlbFJlcGx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjbwogICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKLXZvaWQgVGVzdEFzeW5jTWVzc2FnZVdpdGhOb0Fy
Z3VtZW50czo6c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbikKLXsKLSAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVwbHkoV1RG
TW92ZShlbmNvZGVyKSk7Ci19Ci0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkK
QEAgLTExNiwxMyArMTA1LDYgQEAgdm9pZCBUZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJn
dW1lbnRzOjpjYW5jZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGIKICAgICBjb21wbGV0
aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlFcnJvcjxib29sPjo6Y3JlYXRlKCksIElQQzo6QXN5
bmNSZXBseUVycm9yPHVpbnQ2NF90Pjo6Y3JlYXRlKCkpOwogfQogCi12b2lkIFRlc3RBc3luY01l
c3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVudHM6OnNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4m
JiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGJvb2wgZmxhZywgdWludDY0
X3QgdmFsdWUpCi17Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCBmbGFnOwotICAgIGVuY29kZXIuZ2V0
KCkgPDwgdmFsdWU7Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2Rl
cikpOwotfQotCiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCkBAIC0xNDQsMjYg
KzEyNiw4IEBAIHZvaWQgVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uOjpjYW5jZWxSZXBs
eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wmJik+CiAgICAgY29tcGxldGlvbkhhbmRsZXIo
SVBDOjpBc3luY1JlcGx5RXJyb3I8Ym9vbD46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBUZXN0QXN5
bmNNZXNzYWdlV2l0aENvbm5lY3Rpb246OnNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiBl
bmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGJvb2wgZmxhZykKLXsKLSAgICBl
bmNvZGVyLmdldCgpIDw8IGZsYWc7Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1v
dmUoZW5jb2RlcikpOwotfQotCiAjZW5kaWYKIAotdm9pZCBUZXN0U3luY01lc3NhZ2U6OnNlbmQo
VW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIHVpbnQ4X3QgcmVwbHkpCi17Ci0gICAgZW5jb2Rlci5nZXQoKSA8PCByZXBseTsKLSAg
ICBjb25uZWN0aW9uLnNlbmRTeW5jUmVwbHkoV1RGTW92ZShlbmNvZGVyKSk7Ci19Ci0KLXZvaWQg
VGVzdFN5bmNocm9ub3VzTWVzc2FnZTo6c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmIGVu
Y29kZXIsIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3Qgc3RkOjpvcHRpb25hbDxX
ZWJLaXQ6OlRlc3RDbGFzc05hbWU+JiBvcHRpb25hbFJlcGx5KQotewotICAgIGVuY29kZXIuZ2V0
KCkgPDwgb3B0aW9uYWxSZXBseTsKLSAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVwbHkoV1RGTW92
ZShlbmNvZGVyKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFRlc3RXaXRoU3VwZXJjbGFzcwogCiB9
IC8vIG5hbWVzcGFjZSBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC90ZXN0cy9UZXN0V2l0aFN1cGVyY2xhc3NNZXNzYWdlcy5oIGIvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aFN1cGVyY2xhc3NNZXNzYWdlcy5oCmluZGV4
IDcxNmFkYzQ3MTVjNDFjZWQxNmQzOWU0NDgzZjE1NzZhOTI2NGY5MzQuLmFhNmE2ZGFmMjVmOTUw
NDRhNzAyMTg1YTdmOTA2ZjUyNWIwYzgwNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTdXBlcmNsYXNzTWVzc2FnZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU3VwZXJjbGFzc01lc3NhZ2Vz
LmgKQEAgLTgwLDcgKzgwLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1l
IGFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RX
aXRoU3VwZXJjbGFzc19UZXN0QXN5bmNNZXNzYWdlUmVwbHk7IH0KICAgICB1c2luZyBBc3luY1Jl
cGx5ID0gVGVzdEFzeW5jTWVzc2FnZUFzeW5jUmVwbHk7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBh
dXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxUaHJlYWQ6Ok1h
aW5UaHJlYWQ7Ci0gICAgc3RhdGljIHZvaWQgc2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYm
LCBJUEM6OkNvbm5lY3Rpb24mLCB1aW50NjRfdCByZXN1bHQpOwogICAgIHVzaW5nIFJlcGx5ID0g
c3RkOjp0dXBsZTx1aW50NjRfdCY+OwogICAgIHVzaW5nIFJlcGx5QXJndW1lbnRzID0gc3RkOjp0
dXBsZTx1aW50NjRfdD47CiAgICAgZXhwbGljaXQgVGVzdEFzeW5jTWVzc2FnZShXZWJLaXQ6OlRl
c3RUd29TdGF0ZUVudW0gdHdvU3RhdGVFbnVtKQpAQCAtMTExLDcgKzExMCw2IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBhc3luY01lc3NhZ2VSZXBseU5hbWUoKSB7IHJl
dHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2Fn
ZVdpdGhOb0FyZ3VtZW50c1JlcGx5OyB9CiAgICAgdXNpbmcgQXN5bmNSZXBseSA9IFRlc3RBc3lu
Y01lc3NhZ2VXaXRoTm9Bcmd1bWVudHNBc3luY1JlcGx5OwogICAgIHN0YXRpYyBjb25zdGV4cHIg
YXV0byBjYWxsYmFja1RocmVhZCA9IFdURjo6Q29tcGxldGlvbkhhbmRsZXJDYWxsVGhyZWFkOjpD
b25zdHJ1Y3Rpb25UaHJlYWQ7Ci0gICAgc3RhdGljIHZvaWQgc2VuZChVbmlxdWVSZWY8SVBDOjpF
bmNvZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24mKTsKICAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVw
bGU8PjsKICAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8PjsKICAgICBjb25z
dCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CkBAIC0xMzcsNyArMTM1LDYgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIGFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpIHsg
cmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5bmNNZXNz
YWdlV2l0aE11bHRpcGxlQXJndW1lbnRzUmVwbHk7IH0KICAgICB1c2luZyBBc3luY1JlcGx5ID0g
VGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBsZUFyZ3VtZW50c0FzeW5jUmVwbHk7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxl
ckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKFVu
aXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGJvb2wgZmxhZywgdWlu
dDY0X3QgdmFsdWUpOwogICAgIHVzaW5nIFJlcGx5ID0gc3RkOjp0dXBsZTxib29sJiwgdWludDY0
X3QmPjsKICAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8Ym9vbCwgdWludDY0
X3Q+OwogICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKQEAgLTE2Myw3ICsx
NjAsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgYXN5bmNNZXNzYWdl
UmVwbHlOYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNz
X1Rlc3RBc3luY01lc3NhZ2VXaXRoQ29ubmVjdGlvblJlcGx5OyB9CiAgICAgdXNpbmcgQXN5bmNS
ZXBseSA9IFRlc3RBc3luY01lc3NhZ2VXaXRoQ29ubmVjdGlvbkFzeW5jUmVwbHk7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxl
ckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKFVu
aXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGJvb2wgZmxhZyk7CiAg
ICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPGJvb2wmPjsKICAgICB1c2luZyBSZXBseUFyZ3Vt
ZW50cyA9IHN0ZDo6dHVwbGU8Ym9vbD47CiAgICAgZXhwbGljaXQgVGVzdEFzeW5jTWVzc2FnZVdp
dGhDb25uZWN0aW9uKGNvbnN0IGludCYgdmFsdWUpCkBAIC0xOTAsNyArMTg2LDYgQEAgcHVibGlj
OgogCiAgICAgdXNpbmcgRGVsYXllZFJlcGx5ID0gVGVzdFN5bmNNZXNzYWdlRGVsYXllZFJlcGx5
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjYWxsYmFja1RocmVhZCA9IFdURjo6Q29tcGxl
dGlvbkhhbmRsZXJDYWxsVGhyZWFkOjpDb25zdHJ1Y3Rpb25UaHJlYWQ7Ci0gICAgc3RhdGljIHZv
aWQgc2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24mLCB1aW50
OF90IHJlcGx5KTsKICAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8dWludDhfdCY+OwogICAg
IHVzaW5nIFJlcGx5QXJndW1lbnRzID0gc3RkOjp0dXBsZTx1aW50OF90PjsKICAgICBleHBsaWNp
dCBUZXN0U3luY01lc3NhZ2UodWludDMyX3QgcGFyYW0pCkBAIC0yMTYsNyArMjExLDYgQEAgcHVi
bGljOgogCiAgICAgdXNpbmcgRGVsYXllZFJlcGx5ID0gVGVzdFN5bmNocm9ub3VzTWVzc2FnZURl
bGF5ZWRSZXBseTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2FsbGJhY2tUaHJlYWQgPSBX
VEY6OkNvbXBsZXRpb25IYW5kbGVyQ2FsbFRocmVhZDo6Q29uc3RydWN0aW9uVGhyZWFkOwotICAg
IHN0YXRpYyB2b2lkIHNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0
aW9uJiwgY29uc3Qgc3RkOjpvcHRpb25hbDxXZWJLaXQ6OlRlc3RDbGFzc05hbWU+JiBvcHRpb25h
bFJlcGx5KTsKICAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8c3RkOjpvcHRpb25hbDxXZWJL
aXQ6OlRlc3RDbGFzc05hbWU+Jj47CiAgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1
cGxlPHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpUZXN0Q2xhc3NOYW1lPj47CiAgICAgZXhwbGljaXQg
VGVzdFN5bmNocm9ub3VzTWVzc2FnZShib29sIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aG91dEF0dHJpYnV0ZXNNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aG91
dEF0dHJpYnV0ZXNNZXNzYWdlUmVjZWl2ZXIuY3BwCmluZGV4IDE4NWEwZjU3ZmYxMzI2NDdiZDli
NDI3MWUwZmEwMjI1YTA1ZmM4MTUuLjEzOTUwMjUzODljYTE1ZDI1NWZlOWMxYzQ0NWFiMzRiNDQ1
M2I1NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVz
dFdpdGhvdXRBdHRyaWJ1dGVzTWVzc2FnZVJlY2VpdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRob3V0QXR0cmlidXRlc01lc3NhZ2VSZWNlaXZl
ci5jcHAKQEAgLTg0LDEyICs4NCw2IEBAIHZvaWQgQ3JlYXRlUGx1Z2luOjpjYW5jZWxSZXBseShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wmJik+JiYgY29tcGxldGlvbkhhbmRsCiAgICAgY29t
cGxldGlvbkhhbmRsZXIoSVBDOjpBc3luY1JlcGx5RXJyb3I8Ym9vbD46OmNyZWF0ZSgpKTsKIH0K
IAotdm9pZCBDcmVhdGVQbHVnaW46OnNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiBlbmNv
ZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGJvb2wgcmVzdWx0KQotewotICAgIGVu
Y29kZXIuZ2V0KCkgPDwgcmVzdWx0OwotICAgIGNvbm5lY3Rpb24uc2VuZFN5bmNSZXBseShXVEZN
b3ZlKGVuY29kZXIpKTsKLX0KLQogdm9pZCBSdW5KYXZhU2NyaXB0QWxlcnQ6OmNhbGxSZXBseShJ
UEM6OkRlY29kZXImIGRlY29kZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMTAwLDExICs5NCw2
IEBAIHZvaWQgUnVuSmF2YVNjcmlwdEFsZXJ0OjpjYW5jZWxSZXBseShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0K
IAotdm9pZCBSdW5KYXZhU2NyaXB0QWxlcnQ6OnNlbmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4m
JiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCi17Ci0gICAgY29ubmVjdGlv
bi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwotfQotCiB2b2lkIEdldFBsdWdpbnM6
OmNhbGxSZXBseShJUEM6OkRlY29kZXImIGRlY29kZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+PiBwbHVnaW5zOwpA
QCAtMTIyLDIzICsxMTEsNiBAQCB2b2lkIEdldFBsdWdpbnM6OmNhbmNlbFJlcGx5KENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+JgogICAgIGNvbXBsZXRp
b25IYW5kbGVyKElQQzo6QXN5bmNSZXBseUVycm9yPFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZv
Pj46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBHZXRQbHVnaW5zOjpzZW5kKFVuaXF1ZVJlZjxJUEM6
OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4mIHBsdWdpbnMpCi17Ci0gICAgZW5jb2Rlci5nZXQo
KSA8PCBwbHVnaW5zOwotICAgIGNvbm5lY3Rpb24uc2VuZFN5bmNSZXBseShXVEZNb3ZlKGVuY29k
ZXIpKTsKLX0KLQotdm9pZCBHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6c2VuZChVbmlxdWVS
ZWY8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
Y29uc3QgSVBDOjpDb25uZWN0aW9uOjpIYW5kbGUmIGNvbm5lY3Rpb25IYW5kbGUpCi17Ci0gICAg
ZW5jb2Rlci5nZXQoKSA8PCBjb25uZWN0aW9uSGFuZGxlOwotICAgIGNvbm5lY3Rpb24uc2VuZFN5
bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTsKLX0KLQotdm9pZCBUZXN0TXVsdGlwbGVBdHRyaWJ1
dGVzOjpzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uKQotewotICAgIGNvbm5lY3Rpb24uc2VuZFN5bmNSZXBseShXVEZNb3Zl
KGVuY29kZXIpKTsKLX0KLQogI2lmIFBMQVRGT1JNKE1BQykKIAogdm9pZCBJbnRlcnByZXRLZXlF
dmVudDo6Y2FsbFJlcGx5KElQQzo6RGVjb2RlciYgZGVjb2RlciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE1OCwxMiArMTMwLDYgQEAgdm9pZCBJbnRlcnByZXRLZXlFdmVudDo6Y2FuY2Vs
UmVwbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6S2V5cHIKICAgICBj
b21wbGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlFcnJvcjxWZWN0b3I8V2ViQ29yZTo6S2V5
cHJlc3NDb21tYW5kPj46OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBJbnRlcnByZXRLZXlFdmVudDo6
c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1h
bmROYW1lKQotewotICAgIGVuY29kZXIuZ2V0KCkgPDwgY29tbWFuZE5hbWU7Ci0gICAgY29ubmVj
dGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwotfQotCiAjZW5kaWYKIAogfSAv
LyBuYW1lc3BhY2UgVGVzdFdpdGhvdXRBdHRyaWJ1dGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRob3V0QXR0cmlidXRlc01lc3NhZ2VzLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRob3V0QXR0cmlidXRl
c01lc3NhZ2VzLmgKaW5kZXggMTVjMjdlMDQyY2Y5NjkyZmU1ZDJjMDMwNjgyMjczNzZkMDhjNzM5
MC4uZjVmYmZhNjhlYWFjZmNkMjI4NTRkNjY2NTc0MmUzMmJjYThhMWE0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aG91dEF0dHJpYnV0ZXNN
ZXNzYWdlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdp
dGhvdXRBdHRyaWJ1dGVzTWVzc2FnZXMuaApAQCAtMjg4LDcgKzI4OCw2IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBhc3luY01lc3NhZ2VSZXBseU5hbWUoKSB7IHJldHVy
biBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfQ3JlYXRlUGx1Z2luUmVw
bHk7IH0KICAgICB1c2luZyBBc3luY1JlcGx5ID0gQ3JlYXRlUGx1Z2luQXN5bmNSZXBseTsKICAg
ICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2FsbGJhY2tUaHJlYWQgPSBXVEY6OkNvbXBsZXRpb25I
YW5kbGVyQ2FsbFRocmVhZDo6Q29uc3RydWN0aW9uVGhyZWFkOwotICAgIHN0YXRpYyB2b2lkIHNl
bmQoVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJiwgYm9vbCByZXN1
bHQpOwogICAgIHVzaW5nIFJlcGx5ID0gc3RkOjp0dXBsZTxib29sJj47CiAgICAgdXNpbmcgUmVw
bHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGJvb2w+OwogICAgIENyZWF0ZVBsdWdpbih1aW50NjRf
dCBwbHVnaW5JbnN0YW5jZUlELCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVycyYgcGFy
YW1ldGVycykKQEAgLTMxNyw3ICszMTYsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIElQQzo6TWVz
c2FnZU5hbWUgYXN5bmNNZXNzYWdlUmVwbHlOYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFt
ZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1J1bkphdmFTY3JpcHRBbGVydFJlcGx5OyB9CiAgICAg
dXNpbmcgQXN5bmNSZXBseSA9IFJ1bkphdmFTY3JpcHRBbGVydEFzeW5jUmVwbHk7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxl
ckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKFVu
aXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYpOwogICAgIHVzaW5nIFJl
cGx5ID0gc3RkOjp0dXBsZTw+OwogICAgIHVzaW5nIFJlcGx5QXJndW1lbnRzID0gc3RkOjp0dXBs
ZTw+OwogICAgIFJ1bkphdmFTY3JpcHRBbGVydCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCkBAIC0zNDYsNyArMzQ0LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBJUEM6
Ok1lc3NhZ2VOYW1lIGFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2Fn
ZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19HZXRQbHVnaW5zUmVwbHk7IH0KICAgICB1c2lu
ZyBBc3luY1JlcGx5ID0gR2V0UGx1Z2luc0FzeW5jUmVwbHk7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBhdXRvIGNhbGxiYWNrVGhyZWFkID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxUaHJlYWQ6
OkNvbnN0cnVjdGlvblRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKFVuaXF1ZVJlZjxJUEM6
OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpQbHVn
aW5JbmZvPiYgcGx1Z2lucyk7CiAgICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPFZlY3RvcjxX
ZWJDb3JlOjpQbHVnaW5JbmZvPiY+OwogICAgIHVzaW5nIFJlcGx5QXJndW1lbnRzID0gc3RkOjp0
dXBsZTxWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4+OwogICAgIGV4cGxpY2l0IEdldFBsdWdp
bnMoYm9vbCByZWZyZXNoKQpAQCAtMzcyLDcgKzM2OSw2IEBAIHB1YmxpYzoKIAogICAgIHVzaW5n
IERlbGF5ZWRSZXBseSA9IEdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5Owog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjYWxsYmFja1RocmVhZCA9IFdURjo6Q29tcGxldGlv
bkhhbmRsZXJDYWxsVGhyZWFkOjpDb25zdHJ1Y3Rpb25UaHJlYWQ7Ci0gICAgc3RhdGljIHZvaWQg
c2VuZChVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBJ
UEM6OkNvbm5lY3Rpb246OkhhbmRsZSYgY29ubmVjdGlvbkhhbmRsZSk7CiAgICAgdXNpbmcgUmVw
bHkgPSBzdGQ6OnR1cGxlPElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlJj47CiAgICAgdXNpbmcgUmVw
bHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlPjsKICAgICBl
eHBsaWNpdCBHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIHBsdWdpblBh
dGgpCkBAIC0zOTgsNyArMzk0LDYgQEAgcHVibGljOgogCiAgICAgdXNpbmcgRGVsYXllZFJlcGx5
ID0gVGVzdE11bHRpcGxlQXR0cmlidXRlc0RlbGF5ZWRSZXBseTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGF1dG8gY2FsbGJhY2tUaHJlYWQgPSBXVEY6OkNvbXBsZXRpb25IYW5kbGVyQ2FsbFRocmVh
ZDo6Q29uc3RydWN0aW9uVGhyZWFkOwotICAgIHN0YXRpYyB2b2lkIHNlbmQoVW5pcXVlUmVmPElQ
Qzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJik7CiAgICAgdXNpbmcgUmVwbHkgPSBzdGQ6
OnR1cGxlPD47CiAgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPD47CiAgICAg
Y29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdApAQCAtNTA5LDcgKzUwNCw2IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBhc3luY01lc3NhZ2VSZXBseU5hbWUo
KSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfSW50ZXJw
cmV0S2V5RXZlbnRSZXBseTsgfQogICAgIHVzaW5nIEFzeW5jUmVwbHkgPSBJbnRlcnByZXRLZXlF
dmVudEFzeW5jUmVwbHk7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhbGxiYWNrVGhyZWFk
ID0gV1RGOjpDb21wbGV0aW9uSGFuZGxlckNhbGxUaHJlYWQ6OkNvbnN0cnVjdGlvblRocmVhZDsK
LSAgICBzdGF0aWMgdm9pZCBzZW5kKFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29u
bmVjdGlvbiYsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5k
TmFtZSk7CiAgICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPFZlY3RvcjxXZWJDb3JlOjpLZXlw
cmVzc0NvbW1hbmQ+Jj47CiAgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPFZl
Y3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+PjsKICAgICBleHBsaWNpdCBJbnRlcnByZXRL
ZXlFdmVudCh1aW50MzJfdCB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJv
dmlzaW9uYWxQYWdlUHJveHkuY3BwCmluZGV4IDg4YjJlYTgzODY3MmFjNzE4NjVlYjY5YmNhZjVm
YjIyY2EwMGE4N2YuLmVkNWRmZGRhNDc4ZGU0MTE2YjBmZTk1MzA2ZjE5NWJhODQ1MWQ0ZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJVUkxTY2hlbWVUYXNrUGFyYW1ldGVycy5oIgog
I2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGVFbnRyeS5oIgogI2luY2x1ZGUgIldlYkJhY2tG
b3J3YXJkTGlzdC5oIgorI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdENvdW50cy5oIgogI2lu
Y2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIK
ICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>