<?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>213702</bug_id>
          
          <creation_ts>2020-06-28 13:12:27 -0700</creation_ts>
          <short_desc>Add handling for a case of OOME in CSSTokenizer and CSSParser.</short_desc>
          <delta_ts>2020-06-30 14:17:42 -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>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1666901</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-28 13:12:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/64808889&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666906</commentid>
    <comment_count>1</comment_count>
      <attachid>403007</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-28 13:22:02 -0700</bug_when>
    <thetext>Created attachment 403007
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666918</commentid>
    <comment_count>2</comment_count>
      <attachid>403010</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-28 14:11:34 -0700</bug_when>
    <thetext>Created attachment 403010
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666920</commentid>
    <comment_count>3</comment_count>
      <attachid>403010</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-28 14:29:28 -0700</bug_when>
    <thetext>Comment on attachment 403010
proposed patch.

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

&gt; Source/WTF/wtf/AllocationTraits.h:30
&gt; +enum class AllocationTraits {

This name seems too broad. This is only about what to do when allocation fails due to exhaustion, not other traits (categories of examples: whether to prioritize memory use cost over performance, whether memory should be initialized, what kind of alignment is needed, whether the memory is to be freed a block at a time or by zone, for that matter what zone should be used, etc.). I would call this something more like AllocationFailureAction::Crash and AllocationFailureAction::Report. Or maybe Policy instead of Action? Or maybe MemoryExhaustionAction? It’s worth thinking through what’s the clearest term for this. Might even end up being a shorter phrase, and easier to read at call sites.

&gt; Source/WebCore/css/parser/CSSParserImpl.h:70
&gt; +    bool failed() const;

I’m not thrilled with this. When are we suppose to check &quot;failed&quot;? If only at construction time, then I suggest we change things so there is a create function and we return nullptr if the creation failed. Otherwise we have this &quot;failed CSSParserImpl&quot; where it’s ambiguous what functions are OK to call on it. And what guarantees people remember to check failed()? I think it’s much better to build this into the process of creating a CSSParserImpl in a way that’s harder to ignore.

&gt; Source/WebCore/css/parser/CSSTokenizer.h:49
&gt;      CSSTokenizer(const String&amp;, CSSParserObserverWrapper&amp;); // For the inspector

I don’t see failure handling in the user of this constructor? Do we not need it?

&gt; Source/WebCore/css/parser/CSSTokenizer.h:51
&gt; +    bool failed() const { return m_failed; }

Same comment as CSSParserImpl. We should build this into the process of construction rather than having this thing called a &quot;failed CSSTokenizer&quot; where it’s illegal to use it for anything. Instead we should have a create function that returns nullptr.

Note also that this failed state is not valuable during the lifetime of the tokenizer, only during its construction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666954</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-06-28 17:53:02 -0700</bug_when>
    <thetext>What is the CSS parsing size limit in other browsers? Seems like we should try to match them. 

(You can find out by expanding the test case to include a supported syntax, and then repeating that syntax exponentially more times until failure.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667248</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-29 13:30:14 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #4)
&gt; What is the CSS parsing size limit in other browsers? Seems like we should
&gt; try to match them. 
&gt; 
&gt; (You can find out by expanding the test case to include a supported syntax,
&gt; and then repeating that syntax exponentially more times until failure.)

For Firefox Nightly, the string length reached ~0x3FFFFFF9, and CSS.supports() still returns true.  Thereafter, we get an `InternalError: allocation size overflow` from failing to make a longer string.

For Chrome Canary, the string length reached ~0x77FFFFD (125829117), and CSS.supports() still returns true.  Trying to double the string length thereafter causes the Chrome page to crash &quot;Aw, Snap! Something went wrong while displaying this webpage.&quot;

Base on these results, I don&apos;t think we should worry about match Chrome or FF&apos;s behavior.  We should just make our own work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667261</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-29 13:52:49 -0700</bug_when>
    <thetext>Also, I think throwing an OOME would have been the most elegant solution i.e. we would never have to worry about having a CSS tokenizer in an inconsistent state.  

But if we don&apos;t want to OOMEs here, well, then I&apos;ll need two figure out what all the failure modes would be for all the various clients of the CSSTokenizer, which I think is the crux of the issue that Darin brought up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667351</commentid>
    <comment_count>7</comment_count>
      <attachid>403136</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-29 16:42:03 -0700</bug_when>
    <thetext>Created attachment 403136
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667360</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-29 16:51:25 -0700</bug_when>
    <thetext>I didn&apos;t want to have to figure out the failure modes for all the other clients right now.  So, I opted to let them continue crashing on error detection as they do right now.  This patch only fixes the case for CSS.support() as originally intended.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667367</commentid>
    <comment_count>9</comment_count>
      <attachid>403136</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-29 17:25:00 -0700</bug_when>
    <thetext>Comment on attachment 403136
proposed patch.

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

I like this, better approach.

&gt; Source/WebCore/css/parser/CSSParser.cpp:93
&gt;      CSSParserImpl parser(m_context, condition);
&gt; +    if (!parser.tokenizer())
&gt; +        return false;

Is this the only place we construct a CSSParserImpl?

&gt; Source/WebCore/css/parser/CSSTokenizer.cpp:54
&gt; +    auto tokenizer = makeUnique&lt;CSSTokenizer&gt;(string, &amp;success);

I think this should use (preprocessString(string), &amp;wrapper, nullptr) so it uses the inner constructor.

&gt; Source/WebCore/css/parser/CSSTokenizer.cpp:63
&gt; +    auto tokenizer = makeUnique&lt;CSSTokenizer&gt;(string, wrapper, &amp;success);

I think this should use (preprocessString(string), &amp;wrapper, &amp;success) so it uses the inner constructor.

&gt; Source/WebCore/css/parser/CSSTokenizer.cpp:79
&gt; +inline CSSTokenizer::CSSTokenizer(String&amp;&amp; string, CSSParserObserverWrapper* wrapper, bool* constructionSuccessPtr)

Should get rid of this &quot;inline&quot;; does no good. Doesn’t even affect inlining.

&gt; Source/WebCore/css/parser/CSSTokenizer.cpp:84
&gt; +    bool localConstructionSuccess;
&gt; +    bool&amp; constructionSuccess = constructionSuccessPtr ? *constructionSuccessPtr : localConstructionSuccess;
&gt; +    constructionSuccess = true;

This is unnecessarily complicated; the local variable doesn’t make the code any clearer. Just write:

    if (constructionSuccessPtr)
        *constructionSuccessPtr = true;

And use constructionSuccessPtr below, in the two places it&apos;s used, right after the assertions.

&gt; Source/WebCore/css/parser/CSSTokenizer.cpp:93
&gt; +        constexpr bool reserveInitialCapacitySucceeded = false;
&gt; +        RELEASE_ASSERT(constructionSuccessPtr || reserveInitialCapacitySucceeded);

Here’s how I would write this:

    // When constructionSuccessPtr is null, our policy is to crash on failure.
    RELEASE_ASSERT(constructionSuccessPtr);

The strange constexpr boolean does not work for me as a comment.

&gt; Source/WebCore/css/parser/CSSTokenizer.cpp:109
&gt; +                constexpr bool appendSucceeded = false;
&gt; +                RELEASE_ASSERT(constructionSuccessPtr || appendSucceeded);

Ditto.

&gt; Source/WebCore/css/parser/CSSTokenizer.h:49
&gt; +    static std::unique_ptr&lt;CSSTokenizer&gt; create(const String&amp;);
&gt; +    static std::unique_ptr&lt;CSSTokenizer&gt; create(const String&amp;, CSSParserObserverWrapper&amp;); // For the inspector

I guess since the default is you can just construct these, then these should be called tryCreate.

&gt; Source/WebCore/css/parser/CSSTokenizer.h:52
&gt; +    explicit CSSTokenizer(const String&amp;, bool* constructionSuccess = nullptr);
&gt; +    CSSTokenizer(const String&amp;, CSSParserObserverWrapper&amp;, bool* constructionSuccess = nullptr); // For the inspector

I suggest not adding bool* constructionSuccess to these. We don’t want that to be public. The tryCreate functions take care of that. And it’s simple to modify the implementation of the tryCreate functions so they use the private constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667368</commentid>
    <comment_count>10</comment_count>
      <attachid>403136</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-29 17:26:16 -0700</bug_when>
    <thetext>Comment on attachment 403136
proposed patch.

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

I’m not entirely sure this is the correct strategy; typically we try to avoid spreading out of memory checks across so much code. But I don’t see an alternative at the moment.

&gt; Source/WTF/ChangeLog:51
&gt; +        (WTF::Malloc&gt;::expandCapacity):
&gt; +        (WTF::Malloc&gt;::resize):
&gt; +        (WTF::Malloc&gt;::grow):
&gt; +        (WTF::Malloc&gt;::reserveCapacity):
&gt; +        (WTF::Malloc&gt;::reserveInitialCapacity):
&gt; +        (WTF::Malloc&gt;::append):
&gt; +        (WTF::Malloc&gt;::constructAndAppend):
&gt; +        (WTF::Malloc&gt;::appendSlowCase):
&gt; +        (WTF::Malloc&gt;::constructAndAppendSlowCase):
&gt; +        (WTF::Malloc&gt;::appendVector):
&gt; +        (WTF::Malloc&gt;::insert):
&gt; +        (WTF::Malloc&gt;::tryExpandCapacity): Deleted.
&gt; +        (WTF::Malloc&gt;::tryReserveCapacity): Deleted.
&gt; +        (WTF::Malloc&gt;::tryAppend): Deleted.
&gt; +        (WTF::Malloc&gt;::tryConstructAndAppend): Deleted.
&gt; +        (WTF::Malloc&gt;::tryConstructAndAppendSlowCase): Deleted.

These function names all seem to be garbled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667369</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-29 17:31:30 -0700</bug_when>
    <thetext>Here’s what I mean when I say I am not sure this is the correct strategy. If we are processing a large CSS then we might get really close to memory exhaustion with all the various data structures including the vector. If we do get close, one of the smaller allocations might be the one that fails, rather than the allocations done by Vector. So all this work to make Vector itself smart might be insufficient; we might end up crashing instead of failing gracefully. I don’t know what guarantees that Vector is the only large data structure. And if it currently is, what guarantees it will remain that way. All we’d have to do is add a hash table or any other data structure and this work might be insufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667445</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-29 20:29:37 -0700</bug_when>
    <thetext>Thanks for the review.  I&apos;ll address the rest of your feedback shortly, but thought I&apos;d address the following one first.

(In reply to Darin Adler from comment #11)
&gt; Here’s what I mean when I say I am not sure this is the correct strategy. If
&gt; we are processing a large CSS then we might get really close to memory
&gt; exhaustion with all the various data structures including the vector. If we
&gt; do get close, one of the smaller allocations might be the one that fails,
&gt; rather than the allocations done by Vector. So all this work to make Vector
&gt; itself smart might be insufficient; we might end up crashing instead of
&gt; failing gracefully. I don’t know what guarantees that Vector is the only
&gt; large data structure. And if it currently is, what guarantees it will remain
&gt; that way. All we’d have to do is add a hash table or any other data
&gt; structure and this work might be insufficient.

The prevailing practice is that we do our best to handle OOMEs where (1) it&apos;s possible to do so without incurring too much code complexity.  For example, a patch that requires changing a wide-spread graph of code to return error codes would be deemed too much complexity.  Or (2) where the benefit of doing so would be very high.  In other words, we take an only best effort approach, and we do these gradually as the opportunity to fix them arises.  For the rest, we just let them crash on allocation failures.

This specific patch falls into case (1).  The changes to Vector may be slightly complex, but I think it&apos;s well contained and easy to understand. Therefore, the complexity is acceptable.  These changes may also make it more convenient to fix other OOME issues later without less effort too.  It also has the benefit of making the code more robust against the class of bugs that can arise from code duplication leading to opportunities for divergence between duplicated code paths.  So, that makes the change worthwhile IMHO.


It&apos;s understood that there will be other OOME cases which can still lead to crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667456</commentid>
    <comment_count>13</comment_count>
      <attachid>403136</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-29 21:17:47 -0700</bug_when>
    <thetext>Comment on attachment 403136
proposed patch.

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

Thanks again for the review.

&gt;&gt; Source/WTF/ChangeLog:51
&gt;&gt; +        (WTF::Malloc&gt;::tryConstructAndAppendSlowCase): Deleted.
&gt; 
&gt; These function names all seem to be garbled.

This mangling came from template arguments e.g. Vector&lt;T, inlineCapacity, OverflowHandler, minCapacity, Malloc&gt;::expandCapacity.  I&apos;ll fix up the ChangeLog manually.

&gt;&gt; Source/WebCore/css/parser/CSSParser.cpp:93
&gt;&gt; +        return false;
&gt; 
&gt; Is this the only place we construct a CSSParserImpl?

It is not.  However, the existing places that construct CSSParserImpl will in some cases use the underlying tokenizer, and some will not.  The cases that do not use the tokenizer will continue to work just as they do today.  The case that do use the tokenizer always start by dereferencing the tokenizer before they do anything else with the CSSParserImpl.  Hence, that case will crash as it does today if the tokenizer cannot be fulling initialized.  So, there&apos;s no change from the status quo.

&gt;&gt; Source/WebCore/css/parser/CSSTokenizer.cpp:54
&gt;&gt; +    auto tokenizer = makeUnique&lt;CSSTokenizer&gt;(string, &amp;success);
&gt; 
&gt; I think this should use (preprocessString(string), &amp;wrapper, nullptr) so it uses the inner constructor.

Fixed.

&gt;&gt; Source/WebCore/css/parser/CSSTokenizer.cpp:63
&gt;&gt; +    auto tokenizer = makeUnique&lt;CSSTokenizer&gt;(string, wrapper, &amp;success);
&gt; 
&gt; I think this should use (preprocessString(string), &amp;wrapper, &amp;success) so it uses the inner constructor.

Fixed.

&gt;&gt; Source/WebCore/css/parser/CSSTokenizer.cpp:79
&gt;&gt; +inline CSSTokenizer::CSSTokenizer(String&amp;&amp; string, CSSParserObserverWrapper* wrapper, bool* constructionSuccessPtr)
&gt; 
&gt; Should get rid of this &quot;inline&quot;; does no good. Doesn’t even affect inlining.

Fixed.

&gt;&gt; Source/WebCore/css/parser/CSSTokenizer.cpp:84
&gt;&gt; +    constructionSuccess = true;
&gt; 
&gt; This is unnecessarily complicated; the local variable doesn’t make the code any clearer. Just write:
&gt; 
&gt;     if (constructionSuccessPtr)
&gt;         *constructionSuccessPtr = true;
&gt; 
&gt; And use constructionSuccessPtr below, in the two places it&apos;s used, right after the assertions.

Fixed.

&gt;&gt; Source/WebCore/css/parser/CSSTokenizer.cpp:93
&gt;&gt; +        RELEASE_ASSERT(constructionSuccessPtr || reserveInitialCapacitySucceeded);
&gt; 
&gt; Here’s how I would write this:
&gt; 
&gt;     // When constructionSuccessPtr is null, our policy is to crash on failure.
&gt;     RELEASE_ASSERT(constructionSuccessPtr);
&gt; 
&gt; The strange constexpr boolean does not work for me as a comment.

In addition to being used as a comment, I had intended to use the bool as a way to make the assertion failure message a little more descriptive:
    ASSERTION FAILED:  constructionSuccessPtr || reserveInitialCapacitySucceeded

Just &quot;ASSERTION FAILED:  constructionSuccessPtr&quot; is not very informative.  That said, I just realize that on Release builds, we don&apos;t produce this failure message: we just crash.  Hence, there&apos;s no added value for Release builds.  For Debug builds, we will print the file and line number anyway.  Without any Release build benefits, I don&apos;t feel a strong need for this anymore.

Anyway, fixed.

&gt;&gt; Source/WebCore/css/parser/CSSTokenizer.cpp:109
&gt;&gt; +                RELEASE_ASSERT(constructionSuccessPtr || appendSucceeded);
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Source/WebCore/css/parser/CSSTokenizer.h:49
&gt;&gt; +    static std::unique_ptr&lt;CSSTokenizer&gt; create(const String&amp;, CSSParserObserverWrapper&amp;); // For the inspector
&gt; 
&gt; I guess since the default is you can just construct these, then these should be called tryCreate.

Fixed.

&gt;&gt; Source/WebCore/css/parser/CSSTokenizer.h:52
&gt;&gt; +    CSSTokenizer(const String&amp;, CSSParserObserverWrapper&amp;, bool* constructionSuccess = nullptr); // For the inspector
&gt; 
&gt; I suggest not adding bool* constructionSuccess to these. We don’t want that to be public. The tryCreate functions take care of that. And it’s simple to modify the implementation of the tryCreate functions so they use the private constructor.

I had thought that this might leave the door open for other clients to choose to handle the construction failure error too later instead of crashing.  But it&apos;s not too hard to re-add this when they choose to do so.  Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667473</commentid>
    <comment_count>14</comment_count>
      <attachid>403175</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-29 22:22:45 -0700</bug_when>
    <thetext>Created attachment 403175
patch for landing.

Let&apos;s try this on the EWS while I also try to test for the reported EWS failure locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667488</commentid>
    <comment_count>15</comment_count>
      <attachid>403175</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-30 00:00:30 -0700</bug_when>
    <thetext>Comment on attachment 403175
patch for landing.

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

&gt; Source/WebCore/css/parser/CSSParserImpl.cpp:82
&gt; +    if (m_tokenizer)
&gt; +        return;

It turns out that this m_tokenizer null check is incorrect.  Apparently, there are normal circumstances where CSSParserImpl is constructed with a null m_tokenizer, but we expect to still create the m_deferredParser below.  Note: there are some clients that don&apos;t use the m_tokenizer, and there are some clients that don&apos;t.  For the clients that don&apos;t, m_tokenizer can be null but these clients may rely on the m_deferredParser below.  This is the source of the EWS failures.  Hence, I&apos;ll remove this null check with the early return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667493</commentid>
    <comment_count>16</comment_count>
      <attachid>403179</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-30 00:07:58 -0700</bug_when>
    <thetext>Created attachment 403179
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667669</commentid>
    <comment_count>17</comment_count>
      <attachid>403175</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-30 12:27:44 -0700</bug_when>
    <thetext>Comment on attachment 403175
patch for landing.

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

&gt;&gt; Source/WebCore/css/parser/CSSParserImpl.cpp:82
&gt;&gt; +        return;
&gt; 
&gt; It turns out that this m_tokenizer null check is incorrect.  Apparently, there are normal circumstances where CSSParserImpl is constructed with a null m_tokenizer, but we expect to still create the m_deferredParser below.  Note: there are some clients that don&apos;t use the m_tokenizer, and there are some clients that don&apos;t.  For the clients that don&apos;t, m_tokenizer can be null but these clients may rely on the m_deferredParser below.  This is the source of the EWS failures.  Hence, I&apos;ll remove this null check with the early return.

This was written backwards. It says &quot;if (m_tokenizer) return&quot;, not &quot;if (!m_tokenizer) return&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667687</commentid>
    <comment_count>18</comment_count>
      <attachid>403175</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-30 12:46:44 -0700</bug_when>
    <thetext>Comment on attachment 403175
patch for landing.

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

&gt;&gt;&gt; Source/WebCore/css/parser/CSSParserImpl.cpp:82
&gt;&gt;&gt; +        return;
&gt;&gt; 
&gt;&gt; It turns out that this m_tokenizer null check is incorrect.  Apparently, there are normal circumstances where CSSParserImpl is constructed with a null m_tokenizer, but we expect to still create the m_deferredParser below.  Note: there are some clients that don&apos;t use the m_tokenizer, and there are some clients that don&apos;t.  For the clients that don&apos;t, m_tokenizer can be null but these clients may rely on the m_deferredParser below.  This is the source of the EWS failures.  Hence, I&apos;ll remove this null check with the early return.
&gt; 
&gt; This was written backwards. It says &quot;if (m_tokenizer) return&quot;, not &quot;if (!m_tokenizer) return&quot;.

Face palm!  Thanks for pointing that out.  I&apos;ll investigate further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667706</commentid>
    <comment_count>19</comment_count>
      <attachid>403236</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-30 13:25:41 -0700</bug_when>
    <thetext>Created attachment 403236
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667732</commentid>
    <comment_count>20</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-30 14:12:36 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #17)
&gt; Comment on attachment 403175 [details]
&gt; patch for landing.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403175&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/css/parser/CSSParserImpl.cpp:82
&gt; &gt;&gt; +        return;
&gt; &gt; 
&gt; &gt; It turns out that this m_tokenizer null check is incorrect.  Apparently, there are normal circumstances where CSSParserImpl is constructed with a null m_tokenizer, but we expect to still create the m_deferredParser below.  Note: there are some clients that don&apos;t use the m_tokenizer, and there are some clients that don&apos;t.  For the clients that don&apos;t, m_tokenizer can be null but these clients may rely on the m_deferredParser below.  This is the source of the EWS failures.  Hence, I&apos;ll remove this null check with the early return.
&gt; 
&gt; This was written backwards. It says &quot;if (m_tokenizer) return&quot;, not &quot;if
&gt; (!m_tokenizer) return&quot;.

I re-instated the null check.  Tests are passing.  I&apos;ll land this patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667737</commentid>
    <comment_count>21</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-30 14:17:42 -0700</bug_when>
    <thetext>Landed in r263771: &lt;http://trac.webkit.org/r263771&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403007</attachid>
            <date>2020-06-28 13:22:02 -0700</date>
            <delta_ts>2020-06-28 14:11:34 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-213702.patch</filename>
            <type>text/plain</type>
            <size>38035</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM2MzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDIwLTA2LTI4ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaGFuZGxpbmcgZm9yIGEgY2FzZSBvZiBPT01FIGlu
IENTU1Rva2VuaXplciBhbmQgQ1NTUGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NDgw
ODg4OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAx
LiBBZGRlZCBBbGxvY2F0aW9uVHJhaXRzIHNvIHRoYXQgd2UgY2FuIHBhcmFtZXRlcml6ZSBob3cg
d2Ugd2FudCB0byBoYW5kbGUKKyAgICAgICAgICAgYWxsb2NhdGlvbiBmYWlsdXJlcy4KKworICAg
ICAgICAyLiBBcHBseSBBbGxvY2F0aW9uVHJhaXRzIHRvIG1hbnkgbWV0aG9kcyBpbiBWZWN0b3Ig
KGFuZCBpdHMgc3VwZXIgY2xhc3NlcykKKyAgICAgICAgICAgc28gd2UgY2FuIHN0YXJ0IGRlLWR1
cGxpY2F0aW5nIGNvZGUganVzdCB0byBoYXZlIGEgInRyeSIgdmVyc2lvbiBvZiB0aGUgc2FtZQor
ICAgICAgICAgICBtZXRob2QgdGhhdCByZXBvcnRzIHRoZSBmYWlsdXJlIHRvIGFsbG9jYXRlIGlu
c3RlYWQgb2YgY3Jhc2hpbmcuICBXZSBjYW4KKyAgICAgICAgICAgbm93IHBhcmFtZXRlcml6ZSBh
bGwgdGhlc2UgbWV0aG9kcyBvbiBhbiBBbGxvY2F0aW9uVHJhaXRzIHRlbXBsYXRlIHBhcmFtZXRl
ci4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHd0Zi9BbGxvY2F0aW9uVHJhaXRzLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6OlZlY3RvckJ1ZmZl
ckJhc2U6OmFsbG9jYXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVmZmVyQmFzZTo6
dHJ5QWxsb2NhdGVCdWZmZXIpOgorICAgICAgICAoV1RGOjpWZWN0b3JCdWZmZXI6OmFsbG9jYXRl
QnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVmZmVyOjp0cnlBbGxvY2F0ZUJ1ZmZlcik6
CisgICAgICAgIChXVEY6OlZlY3Rvcjo6cmVzZXJ2ZUNhcGFjaXR5KToKKyAgICAgICAgKFdURjo6
VmVjdG9yOjp0cnlSZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OnRyeVJlc2VydmVJbml0
aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OmFwcGVuZCk6CisgICAgICAgIChX
VEY6OlZlY3Rvcjo6dHJ5QXBwZW5kKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjpjb25zdHJ1Y3RB
bmRBcHBlbmQpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OnRyeUNvbnN0cnVjdEFuZEFwcGVuZCk6
CisgICAgICAgIChXVEY6Ok1hbGxvYz46OmV4cGFuZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6
TWFsbG9jPjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6TWFsbG9jPjo6Z3Jvdyk6CisgICAgICAg
IChXVEY6Ok1hbGxvYz46OnJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok1hbGxvYz46
OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpNYWxsb2M+OjphcHBlbmQp
OgorICAgICAgICAoV1RGOjpNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmQpOgorICAgICAgICAo
V1RGOjpNYWxsb2M+OjphcHBlbmRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6Ok1hbGxvYz46OmNv
bnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6TWFsbG9jPjo6YXBwZW5k
VmVjdG9yKToKKyAgICAgICAgKFdURjo6TWFsbG9jPjo6aW5zZXJ0KToKKyAgICAgICAgKFdURjo6
TWFsbG9jPjo6dHJ5RXhwYW5kQ2FwYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxs
b2M+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+
Ojp0cnlBcHBlbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+Ojp0cnlDb25zdHJ1
Y3RBbmRBcHBlbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+Ojp0cnlDb25zdHJ1
Y3RBbmRBcHBlbmRTbG93Q2FzZSk6IERlbGV0ZWQuCisKIDIwMjAtMDYtMjcgIFNhbSBXZWluaWcg
IDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUgYXNzZXJ0aW9ucyBpbiBTdHJp
bmdQYXJzaW5nQnVmZmVyIApJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyNjM2MzQpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NTgsNiArNzU4LDcgQEAKIAkJRkU4NkE4
NzQxRTU5NDQwMjAwMTExQkJGIC8qIEZvcmJpZEhlYXBBbGxvY2F0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcmJpZEhlYXBBbGxvY2F0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFODkyNUFGMUQwMERBRUMwMDQ2OTA3RSAvKiBJbmRlbnRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRlbnRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTk3RjZBODI0NUNFNUREMDBDNjNGQzYgLyogU3RkSW50RXh0
cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZEludEV4dHJhcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTk5NkI1MjI0QTg0NUFGMDAxRDJFNjMgLyog
QWxsb2NhdGlvblRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbGxv
Y2F0aW9uVHJhaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFQjZCMDM1MjAx
QkUwQjYwMEI5NThDMSAvKiBQb2ludGVyUHJlcGFyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJQcmVwYXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkVEQUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tTdGF0cy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREFDRDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFj
a1N0YXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrU3RhdHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkzNSw2ICs5MzYsNyBAQAogCQkJCUE4QTQ3
MzQ4MTUxQTgyNUIwMDQxMjNGRiAvKiB1bmljb2RlICovLAogCQkJCUNEQ0M5QkM0MjIzODJGQ0Uw
MEZGQjUxQyAvKiBBZ2dyZWdhdGVMb2dnZXIuaCAqLywKIAkJCQlDRDZEOUZDRDFFRUYzQUQ0MDA4
QjA2NzEgLyogQWxnb3JpdGhtcy5oICovLAorCQkJCUZFOTk2QjUyMjRBODQ1QUYwMDFEMkU2MyAv
KiBBbGxvY2F0aW9uVHJhaXRzLmggKi8sCiAJCQkJQ0UxMTMyODMyMzcwNjM0OTAwQThDODNCIC8q
IEFuc2lDb2xvcnMuaCAqLywKIAkJCQk0NDI3QzVBOTIxRjZENkMzMDBBNjEyQTQgLyogQVNDSUlD
VHlwZS5jcHAgKi8sCiAJCQkJQThBNDcyNUExNTFBODI1QTAwNDEyM0ZGIC8qIEFTQ0lJQ1R5cGUu
aCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FsbG9jYXRpb25UcmFpdHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BbGxvY2F0aW9uVHJhaXRzLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dURi93dGYvQWxsb2NhdGlvblRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdURiB7CisK
K2VudW0gY2xhc3MgQWxsb2NhdGlvblRyYWl0cyB7CisgICAgQ3Jhc2hPbkZhaWx1cmUsCisgICAg
UmVwb3J0RmFpbHVyZQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMjYzNjM0KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMK
ICAgICBBU0NJSUNUeXBlLmgKICAgICBBZ2dyZWdhdGVMb2dnZXIuaAogICAgIEFsZ29yaXRobXMu
aAorICAgIEFsbG9jYXRpb25UcmFpdHMuaAogICAgIEFuc2lDb2xvcnMuaAogICAgIEFzc2VydGlv
bnMuaAogICAgIEF0b21pY3MuaApJbmRleDogU291cmNlL1dURi93dGYvVmVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDI2MzYzNCkKKysrIFNv
dXJjZS9XVEYvd3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRl
IDxzdHJpbmcuaD4KICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx1dGlsaXR5Pgor
I2luY2x1ZGUgPHd0Zi9BbGxvY2F0aW9uVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRB
cml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgpAQCAtMjgyLDMxICsyODMsMzUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgTWFsbG9jPgogY2xhc3MgVmVjdG9yQnVmZmVyQmFzZSB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoVmVjdG9yQnVmZmVyQmFzZSk7CiBwdWJsaWM6Ci0gICAgdm9pZCBhbGxvY2F0ZUJ1
ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCisgICAgdGVtcGxhdGU8QWxsb2NhdGlvblRyYWl0cyB0
cmFpdHM+CisgICAgYm9vbCBhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCiAgICAg
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHRyYWl0cyA9PSBBbGxvY2F0aW9uVHJhaXRzOjpDcmFz
aE9uRmFpbHVyZSB8fCB0cmFpdHMgPT0gQWxsb2NhdGlvblRyYWl0czo6UmVwb3J0RmFpbHVyZSk7
CiAgICAgICAgIEFTU0VSVChuZXdDYXBhY2l0eSk7Ci0gICAgICAgIGlmIChuZXdDYXBhY2l0eSA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHNpemVvZihUKSkKLSAgICAg
ICAgICAgIENSQVNIKCk7Ci0gICAgICAgIHNpemVfdCBzaXplVG9BbGxvY2F0ZSA9IG5ld0NhcGFj
aXR5ICogc2l6ZW9mKFQpOwotICAgICAgICBtX2NhcGFjaXR5ID0gc2l6ZVRvQWxsb2NhdGUgLyBz
aXplb2YoVCk7Ci0gICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8VCo+KE1hbGxvYzo6bWFs
bG9jKHNpemVUb0FsbG9jYXRlKSk7Ci0gICAgfQotCi0gICAgYm9vbCB0cnlBbGxvY2F0ZUJ1ZmZl
cihzaXplX3QgbmV3Q2FwYWNpdHkpCi0gICAgewotICAgICAgICBBU1NFUlQobmV3Q2FwYWNpdHkp
OwotICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkgLyBzaXplb2YoVCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmIChuZXdDYXBhY2l0eSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAv
IHNpemVvZihUKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFpdHMgPT0gQWxsb2Nh
dGlvblRyYWl0czo6Q3Jhc2hPbkZhaWx1cmUpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
IAogICAgICAgICBzaXplX3Qgc2l6ZVRvQWxsb2NhdGUgPSBuZXdDYXBhY2l0eSAqIHNpemVvZihU
KTsKLSAgICAgICAgVCogbmV3QnVmZmVyID0gc3RhdGljX2Nhc3Q8VCo+KE1hbGxvYzo6dHJ5TWFs
bG9jKHNpemVUb0FsbG9jYXRlKSk7Ci0gICAgICAgIGlmICghbmV3QnVmZmVyKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBUKiBuZXdCdWZmZXIgPSBudWxscHRyOworICAgICAg
ICBpZiBjb25zdGV4cHIgKHRyYWl0cyA9PSBBbGxvY2F0aW9uVHJhaXRzOjpDcmFzaE9uRmFpbHVy
ZSkKKyAgICAgICAgICAgIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihNYWxsb2M6Om1hbGxv
YyhzaXplVG9BbGxvY2F0ZSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5ld0J1ZmZl
ciA9IHN0YXRpY19jYXN0PFQqPihNYWxsb2M6OnRyeU1hbGxvYyhzaXplVG9BbGxvY2F0ZSkpOwor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFuZXdCdWZmZXIpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgICAgICBtX2NhcGFjaXR5ID0gc2l6ZVRvQWxsb2Nh
dGUgLyBzaXplb2YoVCk7CiAgICAgICAgIG1fYnVmZmVyID0gbmV3QnVmZmVyOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWxsb2NhdGVCdWZm
ZXIoc2l6ZV90IG5ld0NhcGFjaXR5KSB7IGFsbG9jYXRlQnVmZmVyPEFsbG9jYXRpb25UcmFpdHM6
OkNyYXNoT25GYWlsdXJlPihuZXdDYXBhY2l0eSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
dHJ5QWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KSB7IHJldHVybiBhbGxvY2F0ZUJ1
ZmZlcjxBbGxvY2F0aW9uVHJhaXRzOjpSZXBvcnRGYWlsdXJlPihuZXdDYXBhY2l0eSk7IH0KKwog
ICAgIGJvb2wgc2hvdWxkUmVhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gVmVjdG9yVHJhaXRzPFQ+OjpjYW5Nb3ZlV2l0aE1lbWNw
eSAmJiBtX2NhcGFjaXR5ICYmIG5ld0NhcGFjaXR5OwpAQCAtNDU3LDI2ICs0NjIsMjAgQEAgcHVi
bGljOgogICAgICAgICBkZWFsbG9jYXRlQnVmZmVyKGJ1ZmZlcigpKTsKICAgICB9CiAKLSAgICB2
b2lkIGFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkKKyAgICB0ZW1wbGF0ZTxBbGxv
Y2F0aW9uVHJhaXRzIHRyYWl0cz4KKyAgICBib29sIGFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdD
YXBhY2l0eSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBBU1NFUlQoIW1f
YnVmZmVyKSB0byBjYXRjaCBtaXN1c2UvbGVha3MuCiAgICAgICAgIGlmIChuZXdDYXBhY2l0eSA+
IGlubGluZUNhcGFjaXR5KQotICAgICAgICAgICAgQmFzZTo6YWxsb2NhdGVCdWZmZXIobmV3Q2Fw
YWNpdHkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fYnVmZmVyID0gaW5saW5lQnVm
ZmVyKCk7Ci0gICAgICAgICAgICBtX2NhcGFjaXR5ID0gaW5saW5lQ2FwYWNpdHk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBib29sIHRyeUFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0
eSkKLSAgICB7Ci0gICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IGlubGluZUNhcGFjaXR5KQotICAg
ICAgICAgICAgcmV0dXJuIEJhc2U6OnRyeUFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKKyAg
ICAgICAgICAgIHJldHVybiBCYXNlOjp0ZW1wbGF0ZSBhbGxvY2F0ZUJ1ZmZlcjx0cmFpdHM+KG5l
d0NhcGFjaXR5KTsKICAgICAgICAgbV9idWZmZXIgPSBpbmxpbmVCdWZmZXIoKTsKICAgICAgICAg
bV9jYXBhY2l0eSA9IGlubGluZUNhcGFjaXR5OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFj
aXR5KSB7IGFsbG9jYXRlQnVmZmVyPEFsbG9jYXRpb25UcmFpdHM6OkNyYXNoT25GYWlsdXJlPihu
ZXdDYXBhY2l0eSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5QWxsb2NhdGVCdWZmZXIo
c2l6ZV90IG5ld0NhcGFjaXR5KSB7IHJldHVybiBhbGxvY2F0ZUJ1ZmZlcjxBbGxvY2F0aW9uVHJh
aXRzOjpSZXBvcnRGYWlsdXJlPihuZXdDYXBhY2l0eSk7IH0KKwogICAgIHZvaWQgZGVhbGxvY2F0
ZUJ1ZmZlcihUKiBidWZmZXJUb0RlYWxsb2NhdGUpCiAgICAgewogICAgICAgICBpZiAoYnVmZmVy
VG9EZWFsbG9jYXRlID09IGlubGluZUJ1ZmZlcigpKQpAQCAtNzYxLDkgKzc2MCwxMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBncm93KHNpemVfdCBzaXplKTsKICAgICB2b2lkIHJlc2l6ZShzaXplX3Qg
c2l6ZSk7CiAgICAgdm9pZCByZXNpemVUb0ZpdChzaXplX3Qgc2l6ZSk7Ci0gICAgdm9pZCByZXNl
cnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsKLSAgICBib29sIHRyeVJlc2VydmVDYXBh
Y2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpOwotICAgIHZvaWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVzZXJ2
ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkgeyByZXNlcnZlQ2FwYWNpdHk8QWxsb2NhdGlv
blRyYWl0czo6Q3Jhc2hPbkZhaWx1cmU+KG5ld0NhcGFjaXR5KTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCB0cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KSB7IHJldHVybiBy
ZXNlcnZlQ2FwYWNpdHk8QWxsb2NhdGlvblRyYWl0czo6UmVwb3J0RmFpbHVyZT4obmV3Q2FwYWNp
dHkpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6
ZV90IGluaXRpYWxDYXBhY2l0eSkgeyByZXNlcnZlSW5pdGlhbENhcGFjaXR5PEFsbG9jYXRpb25U
cmFpdHM6OkNyYXNoT25GYWlsdXJlPihpbml0aWFsQ2FwYWNpdHkpOyB9CisgICAgQUxXQVlTX0lO
TElORSBib29sIHRyeVJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRpYWxDYXBhY2l0
eSkgeyByZXR1cm4gcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eTxBbGxvY2F0aW9uVHJhaXRzOjpSZXBv
cnRGYWlsdXJlPihpbml0aWFsQ2FwYWNpdHkpOyB9CiAgICAgdm9pZCBzaHJpbmtDYXBhY2l0eShz
aXplX3QgbmV3Q2FwYWNpdHkpOwogICAgIHZvaWQgc2hyaW5rVG9GaXQoKSB7IHNocmlua0NhcGFj
aXR5KHNpemUoKSk7IH0KIApAQCAtNzcyLDE4ICs3NzIsMTkgQEAgcHVibGljOgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFUgPSBUPiBWZWN0b3I8VT4gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kKFZhbHVlVHlwZSYmIHZhbHVlKSB7IGFwcGVuZDxW
YWx1ZVR5cGU+KHN0ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+KHZhbHVlKSk7IH0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZChVJiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3M+IHZvaWQgY29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLik7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJncz4gYm9vbCB0cnlDb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYmLi4uKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kKFUmJiB1
KSB7IGFwcGVuZDxBbGxvY2F0aW9uVHJhaXRzOjpDcmFzaE9uRmFpbHVyZSwgVT4oc3RkOjpmb3J3
YXJkPFU+KHUpKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IEFMV0FZU19JTkxJTkUgYm9v
bCB0cnlBcHBlbmQoVSYmIHUpIHsgcmV0dXJuIGFwcGVuZDxBbGxvY2F0aW9uVHJhaXRzOjpSZXBv
cnRGYWlsdXJlLCBVPihzdGQ6OmZvcndhcmQ8VT4odSkpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJncz4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYu
Li4gYXJncykgeyBjb25zdHJ1Y3RBbmRBcHBlbmQ8QWxsb2NhdGlvblRyYWl0czo6Q3Jhc2hPbkZh
aWx1cmU+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7IH0KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmdzPiBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5Q29uc3RydWN0QW5kQXBwZW5kKEFy
Z3MmJi4uLiBhcmdzKSB7IHJldHVybiBjb25zdHJ1Y3RBbmRBcHBlbmQ8QWxsb2NhdGlvblRyYWl0
czo6UmVwb3J0RmFpbHVyZT4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsgfQogCiAgICAg
dm9pZCB1bmNoZWNrZWRBcHBlbmQoVmFsdWVUeXBlJiYgdmFsdWUpIHsgdW5jaGVja2VkQXBwZW5k
PFZhbHVlVHlwZT4oc3RkOjpmb3J3YXJkPFZhbHVlVHlwZT4odmFsdWUpKTsgfQogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IHZvaWQgdW5jaGVja2VkQXBwZW5kKFUmJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJncz4gdm9pZCB1bmNoZWNrZWRDb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYm
Li4uKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKGNvbnN0IFUqLCBz
aXplX3QpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IEFMV0FZU19JTkxJTkUgdm9pZCBhcHBl
bmQoY29uc3QgVSogdSwgc2l6ZV90IHNpemUpIHsgYXBwZW5kPEFsbG9jYXRpb25UcmFpdHM6OkNy
YXNoT25GYWlsdXJlPih1LCBzaXplKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IEFMV0FZ
U19JTkxJTkUgYm9vbCB0cnlBcHBlbmQoY29uc3QgVSogdSwgc2l6ZV90IHNpemUpIHsgcmV0dXJu
IGFwcGVuZDxBbGxvY2F0aW9uVHJhaXRzOjpSZXBvcnRGYWlsdXJlPih1LCBzaXplKTsgfQogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBvdGhlckNhcGFjaXR5PiB2b2lkIGFwcGVuZFZl
Y3Rvcihjb25zdCBWZWN0b3I8VSwgb3RoZXJDYXBhY2l0eT4mKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVLCBzaXplX3Qgb3RoZXJDYXBhY2l0eT4gdm9pZCBhcHBlbmRWZWN0b3IoVmVjdG9yPFUs
IG90aGVyQ2FwYWNpdHk+JiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgdHJ5QXBw
ZW5kKGNvbnN0IFUqLCBzaXplX3QpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBp
bnNlcnQoc2l6ZV90IHBvc2l0aW9uLCBjb25zdCBVKiwgc2l6ZV90KTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPiB2b2lkIGluc2VydChzaXplX3QgcG9zaXRpb24sIFUmJik7CkBAIC04MzcsMTQg
KzgzOCwxOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRlY2x0eXBlKG1fc2l6
ZSk+OjptYXgoKTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoc2l6ZV90
IG5ld01pbkNhcGFjaXR5KTsKLSAgICBUKiBleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2Fw
YWNpdHksIFQqKTsKLSAgICBib29sIHRyeUV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBh
Y2l0eSk7Ci0gICAgY29uc3QgVCogdHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFj
aXR5LCBjb25zdCBUKik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gVSogZXhwYW5kQ2FwYWNp
dHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBVKik7IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
IHZvaWQgYXBwZW5kU2xvd0Nhc2UoVSYmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdz
PiB2b2lkIGNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKEFyZ3MmJi4uLik7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJncz4gYm9vbCB0cnlDb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShB
cmdzJiYuLi4pOworICAgIHRlbXBsYXRlPEFsbG9jYXRpb25UcmFpdHM+IGJvb2wgcmVzZXJ2ZUNh
cGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSk7CisgICAgdGVtcGxhdGU8QWxsb2NhdGlvblRyYWl0
cz4gYm9vbCByZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpOwor
CisgICAgdGVtcGxhdGU8QWxsb2NhdGlvblRyYWl0cz4gYm9vbCBleHBhbmRDYXBhY2l0eShzaXpl
X3QgbmV3TWluQ2FwYWNpdHkpOworICAgIHRlbXBsYXRlPEFsbG9jYXRpb25UcmFpdHM+IFQqIGV4
cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVCopOworICAgIHRlbXBsYXRlPEFs
bG9jYXRpb25UcmFpdHMsIHR5cGVuYW1lIFU+IFUqIGV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdN
aW5DYXBhY2l0eSwgVSopOworICAgIHRlbXBsYXRlPEFsbG9jYXRpb25UcmFpdHMsIHR5cGVuYW1l
IFU+IGJvb2wgYXBwZW5kU2xvd0Nhc2UoVSYmKTsKKyAgICB0ZW1wbGF0ZTxBbGxvY2F0aW9uVHJh
aXRzLCB0eXBlbmFtZS4uLiBBcmdzPiBib29sIGNvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYuLi4p
OworICAgIHRlbXBsYXRlPEFsbG9jYXRpb25UcmFpdHMsIHR5cGVuYW1lLi4uIEFyZ3M+IGJvb2wg
Y29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4uKTsKKworICAgIHRlbXBsYXRlPEFs
bG9jYXRpb25UcmFpdHMsIHR5cGVuYW1lIFU+IGJvb2wgYXBwZW5kKFUmJik7CisgICAgdGVtcGxh
dGU8QWxsb2NhdGlvblRyYWl0cywgdHlwZW5hbWUgVT4gYm9vbCBhcHBlbmQoY29uc3QgVSosIHNp
emVfdCk7CiAKICAgICB0ZW1wbGF0ZTxzaXplX3QgcG9zaXRpb24sIHR5cGVuYW1lIFUsIHR5cGVu
YW1lLi4uIEl0ZW1zPgogICAgIHZvaWQgdW5jaGVja2VkSW5pdGlhbGl6ZShVJiYgaXRlbSwgSXRl
bXMmJi4uLiBpdGVtcykKQEAgLTEwNDMsNDggKzEwNDgsNDQgQEAgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90
IG5ld01pbkNhcGFjaXR5KQordGVtcGxhdGU8QWxsb2NhdGlvblRyYWl0cyB0cmFpdHM+Citib29s
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQogewotICAgIHJl
c2VydmVDYXBhY2l0eShzdGQ6Om1heChuZXdNaW5DYXBhY2l0eSwgc3RkOjptYXgoc3RhdGljX2Nh
c3Q8c2l6ZV90PihtaW5DYXBhY2l0eSksIGNhcGFjaXR5KCkgKyBjYXBhY2l0eSgpIC8gNCArIDEp
KSk7CisgICAgcmV0dXJuIHJlc2VydmVDYXBhY2l0eTx0cmFpdHM+KHN0ZDo6bWF4KG5ld01pbkNh
cGFjaXR5LCBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KG1pbkNhcGFjaXR5KSwgY2FwYWNp
dHkoKSArIGNhcGFjaXR5KCkgLyA0ICsgMSkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8QWxsb2NhdGlvblRyYWl0cyB0
cmFpdHM+CiBORVZFUl9JTkxJTkUgVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3
TWluQ2FwYWNpdHksIFQqIHB0cikKIHsKKyAgICBzdGF0aWNfYXNzZXJ0KHRyYWl0cyA9PSBBbGxv
Y2F0aW9uVHJhaXRzOjpDcmFzaE9uRmFpbHVyZSB8fCB0cmFpdHMgPT0gQWxsb2NhdGlvblRyYWl0
czo6UmVwb3J0RmFpbHVyZSk7CiAgICAgaWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRyID49IGVuZCgp
KSB7Ci0gICAgICAgIGV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KTsKKyAgICAgICAgYm9v
bCBzdWNjZXNzID0gZXhwYW5kQ2FwYWNpdHk8dHJhaXRzPihuZXdNaW5DYXBhY2l0eSk7CisgICAg
ICAgIGlmIGNvbnN0ZXhwciAodHJhaXRzID09IEFsbG9jYXRpb25UcmFpdHM6OlJlcG9ydEZhaWx1
cmUpIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9
CiAgICAgc2l6ZV90IGluZGV4ID0gcHRyIC0gYmVnaW4oKTsKLSAgICBleHBhbmRDYXBhY2l0eShu
ZXdNaW5DYXBhY2l0eSk7Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyBpbmRleDsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotYm9vbCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46
OnRyeUV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSkKLXsKLSAgICByZXR1cm4g
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6bWF4KG5ld01pbkNhcGFjaXR5LCBzdGQ6Om1heChzdGF0
aWNfY2FzdDxzaXplX3Q+KG1pbkNhcGFjaXR5KSwgY2FwYWNpdHkoKSArIGNhcGFjaXR5KCkgLyA0
ICsgMSkpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUg
TWFsbG9jPgotY29uc3QgVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlFeHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWlu
Q2FwYWNpdHksIGNvbnN0IFQqIHB0cikKLXsKLSAgICBpZiAocHRyIDwgYmVnaW4oKSB8fCBwdHIg
Pj0gZW5kKCkpIHsKLSAgICAgICAgaWYgKCF0cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0
eSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIHB0cjsKKyAgICBib29s
IHN1Y2Nlc3MgPSBleHBhbmRDYXBhY2l0eTx0cmFpdHM+KG5ld01pbkNhcGFjaXR5KTsKKyAgICBp
ZiBjb25zdGV4cHIgKHRyYWl0cyA9PSBBbGxvY2F0aW9uVHJhaXRzOjpSZXBvcnRGYWlsdXJlKSB7
CisgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9Ci0gICAgc2l6ZV90IGluZGV4ID0gcHRyIC0gYmVnaW4oKTsKLSAgICBpZiAo
IXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KSkKLSAgICAgICAgcmV0dXJuIDA7CiAg
ICAgcmV0dXJuIGJlZ2luKCkgKyBpbmRleDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVtcGxhdGU8dHlwZW5hbWUgVT4KK3RlbXBsYXRl
PEFsbG9jYXRpb25UcmFpdHMgdHJhaXRzLCB0eXBlbmFtZSBVPgogaW5saW5lIFUqIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6
ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBVKiBwdHIpCiB7Ci0gICAgZXhw
YW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOworICAgIHN0YXRpY19hc3NlcnQodHJhaXRzID09
IEFsbG9jYXRpb25UcmFpdHM6OkNyYXNoT25GYWlsdXJlIHx8IHRyYWl0cyA9PSBBbGxvY2F0aW9u
VHJhaXRzOjpSZXBvcnRGYWlsdXJlKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBleHBhbmRDYXBhY2l0
eTx0cmFpdHM+KG5ld01pbkNhcGFjaXR5KTsKKyAgICBpZiBjb25zdGV4cHIgKHRyYWl0cyA9PSBB
bGxvY2F0aW9uVHJhaXRzOjpSZXBvcnRGYWlsdXJlKSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgh
c3VjY2VzcykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAgICAgcmV0dXJu
IHB0cjsKIH0KIApAQCAtMTA5Niw3ICsxMDk3LDcgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdgogICAgICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXpl
KTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCi0gICAgICAg
ICAgICBleHBhbmRDYXBhY2l0eShzaXplKTsKKyAgICAgICAgICAgIGV4cGFuZENhcGFjaXR5PEFs
bG9jYXRpb25UcmFpdHM6OkNyYXNoT25GYWlsdXJlPihzaXplKTsKICAgICAgICAgYXNhbkJ1ZmZl
clNpemVXaWxsQ2hhbmdlVG8oc2l6ZSk7CiAgICAgICAgIGlmIChiZWdpbigpKQogICAgICAgICAg
ICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemVJZk5vblBPRChlbmQoKSwgYmVnaW4oKSArIHNp
emUpOwpAQCAtMTEyNiw3ICsxMTI3LDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SAogewogICAgIEFTU0VSVChzaXplID49IG1fc2l6ZSk7CiAgICAgaWYgKHNpemUg
PiBjYXBhY2l0eSgpKQotICAgICAgICBleHBhbmRDYXBhY2l0eShzaXplKTsKKyAgICAgICAgZXhw
YW5kQ2FwYWNpdHk8QWxsb2NhdGlvblRyYWl0czo6Q3Jhc2hPbkZhaWx1cmU+KHNpemUpOwogICAg
IGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKHNpemUpOwogICAgIGlmIChiZWdpbigpKQogICAg
ICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZUlmTm9uUE9EKGVuZCgpLCBiZWdpbigpICsg
c2l6ZSk7CkBAIC0xMTc4LDI3ICsxMTc5LDEwIEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3YKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlw
ZW5hbWUgTWFsbG9jPgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2Fw
YWNpdHkpCi17Ci0gICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBUKiBvbGRCdWZmZXIgPSBiZWdpbigpOwotICAgIFQqIG9sZEVuZCA9IGVuZCgp
OwotCi0gICAgYXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eSgpOwotCi0gICAgQmFzZTo6
YWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwotICAgIEFTU0VSVChiZWdpbigpKTsKLQotICAg
IGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKHNpemUoKSk7Ci0KLSAgICBUeXBlT3BlcmF0aW9u
czo6bW92ZShvbGRCdWZmZXIsIG9sZEVuZCwgYmVnaW4oKSk7Ci0gICAgQmFzZTo6ZGVhbGxvY2F0
ZUJ1ZmZlcihvbGRCdWZmZXIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
LCB0eXBlbmFtZSBNYWxsb2M+Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemVf
dCBuZXdDYXBhY2l0eSkKK3RlbXBsYXRlPEFsbG9jYXRpb25UcmFpdHMgdHJhaXRzPgorYm9vbCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1h
bGxvYz46OnJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCiB7CisgICAgc3RhdGlj
X2Fzc2VydCh0cmFpdHMgPT0gQWxsb2NhdGlvblRyYWl0czo6Q3Jhc2hPbkZhaWx1cmUgfHwgdHJh
aXRzID09IEFsbG9jYXRpb25UcmFpdHM6OlJlcG9ydEZhaWx1cmUpOwogICAgIGlmIChuZXdDYXBh
Y2l0eSA8PSBjYXBhY2l0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBUKiBvbGRCdWZm
ZXIgPSBiZWdpbigpOwpAQCAtMTIwNiw5ICsxMTkwLDEyIEBAIGJvb2wgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0gKIAogICAgIGFzYW5TZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNp
dHkoKTsKIAotICAgIGlmICghQmFzZTo6dHJ5QWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpKSB7
Ci0gICAgICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKHNpemUoKSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBib29sIHN1Y2Nlc3MgPSBCYXNlOjp0ZW1wbGF0ZSBhbGxvY2F0ZUJ1
ZmZlcjx0cmFpdHM+KG5ld0NhcGFjaXR5KTsKKyAgICBpZiBjb25zdGV4cHIgKHRyYWl0cyA9PSBB
bGxvY2F0aW9uVHJhaXRzOjpSZXBvcnRGYWlsdXJlKSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgh
c3VjY2VzcykpIHsKKyAgICAgICAgICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKHNpemUo
KSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAgICAgQVNT
RVJUKGJlZ2luKCkpOwogCkBAIC0xMjIwLDEyICsxMjA3LDE1IEBAIGJvb2wgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBh
Y2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpCit0ZW1wbGF0ZTxBbGxvY2F0aW9uVHJh
aXRzIHRyYWl0cz4KK2lubGluZSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShz
aXplX3QgaW5pdGlhbENhcGFjaXR5KQogeworICAgIHN0YXRpY19hc3NlcnQodHJhaXRzID09IEFs
bG9jYXRpb25UcmFpdHM6OkNyYXNoT25GYWlsdXJlIHx8IHRyYWl0cyA9PSBBbGxvY2F0aW9uVHJh
aXRzOjpSZXBvcnRGYWlsdXJlKTsKICAgICBBU1NFUlQoIW1fc2l6ZSk7CiAgICAgQVNTRVJUKGNh
cGFjaXR5KCkgPT0gaW5saW5lQ2FwYWNpdHkpOwotICAgIGlmIChpbml0aWFsQ2FwYWNpdHkgPiBp
bmxpbmVDYXBhY2l0eSkKLSAgICAgICAgQmFzZTo6YWxsb2NhdGVCdWZmZXIoaW5pdGlhbENhcGFj
aXR5KTsKKyAgICBpZiAoaW5pdGlhbENhcGFjaXR5IDw9IGlubGluZUNhcGFjaXR5KQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gQmFzZTo6dGVtcGxhdGUgYWxsb2NhdGVCdWZmZXI8
dHJhaXRzPihpbml0aWFsQ2FwYWNpdHkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+CkBAIC0xMjYwLDM1ICsxMjUwLDI1IEBAIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVtcGxhdGU8dHlwZW5hbWUgVT4KLUFM
V0FZU19JTkxJTkUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZChjb25zdCBVKiBkYXRhLCBzaXplX3QgZGF0
YVNpemUpCit0ZW1wbGF0ZTxBbGxvY2F0aW9uVHJhaXRzIHRyYWl0cywgdHlwZW5hbWUgVT4KK0FM
V0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZChjb25zdCBVKiBkYXRhLCBzaXplX3QgZGF0
YVNpemUpCiB7CisgICAgc3RhdGljX2Fzc2VydCh0cmFpdHMgPT0gQWxsb2NhdGlvblRyYWl0czo6
Q3Jhc2hPbkZhaWx1cmUgfHwgdHJhaXRzID09IEFsbG9jYXRpb25UcmFpdHM6OlJlcG9ydEZhaWx1
cmUpOwogICAgIHNpemVfdCBuZXdTaXplID0gbV9zaXplICsgZGF0YVNpemU7CiAgICAgaWYgKG5l
d1NpemUgPiBjYXBhY2l0eSgpKSB7Ci0gICAgICAgIGRhdGEgPSBleHBhbmRDYXBhY2l0eShuZXdT
aXplLCBkYXRhKTsKKyAgICAgICAgZGF0YSA9IGV4cGFuZENhcGFjaXR5PHRyYWl0cz4obmV3U2l6
ZSwgZGF0YSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhaXRzID09IEFsbG9jYXRpb25UcmFp
dHM6OlJlcG9ydEZhaWx1cmUpIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghZGF0YSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIEFTU0VSVChi
ZWdpbigpKTsKICAgICB9Ci0gICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCi0gICAgICAgIENSQVNI
KCk7Ci0gICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obmV3U2l6ZSk7Ci0gICAgVCogZGVz
dCA9IGVuZCgpOwotICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBV
Pjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgc3RkOjphZGRyZXNzb2YoZGF0YVtkYXRhU2l6ZV0p
LCBkZXN0KTsKLSAgICBtX3NpemUgPSBuZXdTaXplOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVPgotQUxX
QVlTX0lOTElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBk
YXRhU2l6ZSkKLXsKLSAgICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSArIGRhdGFTaXplOwotICAg
IGlmIChuZXdTaXplID4gY2FwYWNpdHkoKSkgewotICAgICAgICBkYXRhID0gdHJ5RXhwYW5kQ2Fw
YWNpdHkobmV3U2l6ZSwgZGF0YSk7Ci0gICAgICAgIGlmICghZGF0YSkKKyAgICBpZiAobmV3U2l6
ZSA8IG1fc2l6ZSkgeworICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWl0cyA9PSBBbGxvY2F0aW9u
VHJhaXRzOjpDcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwog
ICAgIH0KLSAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG5ld1NpemUpOwogICAgIFQqIGRlc3QgPSBl
bmQoKTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVu
aW5pdGlhbGl6ZWRDb3B5KGRhdGEsIHN0ZDo6YWRkcmVzc29mKGRhdGFbZGF0YVNpemVdKSwgZGVz
dCk7CkBAIC0xMjk3LDM2ICsxMjc3LDIyIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5h
bWUgTWFsbG9jPgotdGVtcGxhdGU8dHlwZW5hbWUgVT4KLUFMV0FZU19JTkxJTkUgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxv
Yz46OmFwcGVuZChVJiYgdmFsdWUpCit0ZW1wbGF0ZTxBbGxvY2F0aW9uVHJhaXRzIHRyYWl0cywg
dHlwZW5hbWUgVT4KK0FMV0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZChVJiYgdmFsdWUp
CiB7CiAgICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7CiAgICAgICAgIGFzYW5CdWZmZXJT
aXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwogICAgICAgICBuZXcgKE5vdE51bGwsIGVuZCgp
KSBUKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogICAgICAgICArK21fc2l6ZTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGFwcGVuZFNsb3dDYXNlKHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxs
b2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotQUxXQVlTX0lOTElORSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9j
Pjo6Y29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQotewotICAgIGlmIChzaXplKCkg
IT0gY2FwYWNpdHkoKSkgewotICAgICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3Np
emUgKyAxKTsKLSAgICAgICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8QXJn
cz4oYXJncykuLi4pOwotICAgICAgICArK21fc2l6ZTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIHJldHVybiBhcHBlbmRTbG93Q2FzZTx0
cmFpdHMsIFU+KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmdzPgotQUxXQVlTX0lOTElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kKEFy
Z3MmJi4uLiBhcmdzKQordGVtcGxhdGU8QWxsb2NhdGlvblRyYWl0cyB0cmFpdHMsIHR5cGVuYW1l
Li4uIEFyZ3M+CitBTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmQo
QXJncyYmLi4uIGFyZ3MpCiB7CiAgICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7CiAgICAg
ICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwpAQCAtMTMzNCw1MiAr
MTMwMCw0OCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjCiAgICAg
ICAgICsrbV9zaXplOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHRyeUNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLik7CisKKyAgICByZXR1cm4gY29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2U8dHJhaXRzPihz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVPgotdm9pZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1h
bGxvYz46OmFwcGVuZFNsb3dDYXNlKFUmJiB2YWx1ZSkKK3RlbXBsYXRlPEFsbG9jYXRpb25UcmFp
dHMgdHJhaXRzLCB0eXBlbmFtZSBVPgorYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZFNsb3dDYXNlKFUmJiB2
YWx1ZSkKIHsKKyAgICBzdGF0aWNfYXNzZXJ0KHRyYWl0cyA9PSBBbGxvY2F0aW9uVHJhaXRzOjpD
cmFzaE9uRmFpbHVyZSB8fCB0cmFpdHMgPT0gQWxsb2NhdGlvblRyYWl0czo6UmVwb3J0RmFpbHVy
ZSk7CiAgICAgQVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgpKTsKIAogICAgIGF1dG8gcHRyID0g
Y29uc3RfY2FzdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDx0eXBlbmFtZSBzdGQ6OnJlbW92
ZV9yZWZlcmVuY2U8VT46OnR5cGU+Ojp0eXBlKj4oc3RkOjphZGRyZXNzb2YodmFsdWUpKTsKLSAg
ICBwdHIgPSBleHBhbmRDYXBhY2l0eShzaXplKCkgKyAxLCBwdHIpOworICAgIHB0ciA9IGV4cGFu
ZENhcGFjaXR5PHRyYWl0cz4oc2l6ZSgpICsgMSwgcHRyKTsKKyAgICBpZiBjb25zdGV4cHIgKHRy
YWl0cyA9PSBBbGxvY2F0aW9uVHJhaXRzOjpSZXBvcnRGYWlsdXJlKSB7CisgICAgICAgIGlmIChV
TkxJS0VMWSghcHRyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgQVNT
RVJUKGJlZ2luKCkpOwogCiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsg
MSk7CiAgICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOwog
ICAgICsrbV9zaXplOworICAgIHJldHVybiB0cnVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdz
Pgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2Fw
YWNpdHksIE1hbGxvYz46OmNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKEFyZ3MmJi4uLiBhcmdz
KQordGVtcGxhdGU8QWxsb2NhdGlvblRyYWl0cyB0cmFpdHMsIHR5cGVuYW1lLi4uIEFyZ3M+Citi
b29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPjo6Y29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4uIGFyZ3MpCiB7
CisgICAgc3RhdGljX2Fzc2VydCh0cmFpdHMgPT0gQWxsb2NhdGlvblRyYWl0czo6Q3Jhc2hPbkZh
aWx1cmUgfHwgdHJhaXRzID09IEFsbG9jYXRpb25UcmFpdHM6OlJlcG9ydEZhaWx1cmUpOwogICAg
IEFTU0VSVChzaXplKCkgPT0gY2FwYWNpdHkoKSk7CiAKLSAgICBleHBhbmRDYXBhY2l0eShzaXpl
KCkgKyAxKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBleHBhbmRDYXBhY2l0eTx0cmFpdHM+KHNpemUo
KSArIDEpOworICAgIGlmIGNvbnN0ZXhwciAodHJhaXRzID09IEFsbG9jYXRpb25UcmFpdHM6OlJl
cG9ydEZhaWx1cmUpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgQVNTRVJUKGJlZ2luKCkpOwogCiAgICAgYXNh
bkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7CiAgICAgbmV3IChOb3ROdWxsLCBl
bmQoKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwogICAgICsrbV9zaXplOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnRyeUNvbnN0cnVjdEFuZEFwcGVu
ZFNsb3dDYXNlKEFyZ3MmJi4uLiBhcmdzKQotewotICAgIEFTU0VSVChzaXplKCkgPT0gY2FwYWNp
dHkoKSk7Ci0gICAgCi0gICAgaWYgKFVOTElLRUxZKCF0cnlFeHBhbmRDYXBhY2l0eShzaXplKCkg
KyAxKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQoYmVnaW4oKSk7Ci0gICAg
Ci0gICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7Ci0gICAgbmV3IChO
b3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAgICsrbV9z
aXplOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDIzLDcgKzEzODUsNyBAQCBpbmxpbmUg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiB7CiAgICAgc2l6ZV90IG5ld1NpemUg
PSBtX3NpemUgKyB2YWwuc2l6ZSgpOwogICAgIGlmIChuZXdTaXplID4gY2FwYWNpdHkoKSkKLSAg
ICAgICAgZXhwYW5kQ2FwYWNpdHkobmV3U2l6ZSk7CisgICAgICAgIGV4cGFuZENhcGFjaXR5PEFs
bG9jYXRpb25UcmFpdHM6OkNyYXNoT25GYWlsdXJlPihuZXdTaXplKTsKICAgICBmb3IgKGF1dG8m
IGl0ZW0gOiB2YWwpCiAgICAgICAgIHVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKIH0K
QEAgLTE0MzUsNyArMTM5Nyw3IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0gKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3NpdGlvbiA8PSBz
aXplKCkpOwogICAgIHNpemVfdCBuZXdTaXplID0gbV9zaXplICsgZGF0YVNpemU7CiAgICAgaWYg
KG5ld1NpemUgPiBjYXBhY2l0eSgpKSB7Ci0gICAgICAgIGRhdGEgPSBleHBhbmRDYXBhY2l0eShu
ZXdTaXplLCBkYXRhKTsKKyAgICAgICAgZGF0YSA9IGV4cGFuZENhcGFjaXR5PEFsbG9jYXRpb25U
cmFpdHM6OkNyYXNoT25GYWlsdXJlPihuZXdTaXplLCBkYXRhKTsKICAgICAgICAgQVNTRVJUKGJl
Z2luKCkpOwogICAgIH0KICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKQEAgLTE0NTUsNyArMTQx
Nyw3IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKIAogICAgIGF1
dG8gcHRyID0gY29uc3RfY2FzdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDx0eXBlbmFtZSBz
dGQ6OnJlbW92ZV9yZWZlcmVuY2U8VT46OnR5cGU+Ojp0eXBlKj4oc3RkOjphZGRyZXNzb2YodmFs
dWUpKTsKICAgICBpZiAoc2l6ZSgpID09IGNhcGFjaXR5KCkpIHsKLSAgICAgICAgcHRyID0gZXhw
YW5kQ2FwYWNpdHkoc2l6ZSgpICsgMSwgcHRyKTsKKyAgICAgICAgcHRyID0gZXhwYW5kQ2FwYWNp
dHk8QWxsb2NhdGlvblRyYWl0czo6Q3Jhc2hPbkZhaWx1cmU+KHNpemUoKSArIDEsIHB0cik7CiAg
ICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI2MzYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI0IEBACisyMDIwLTA2LTI4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgaGFuZGxpbmcgZm9yIGEgY2FzZSBvZiBPT01FIGluIENTU1Rva2VuaXpl
ciBhbmQgQ1NTUGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjEzNzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NDgwODg4OT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBjc3MzL291
dC1vZi1tZW1vcnktaW4tY3NzLXRva2VuaXplci5odG1sCisKKyAgICAgICAgKiBjc3MvcGFyc2Vy
L0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU3VwcG9y
dHNDb25kaXRpb24pOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJJbXBsOjpDU1NQYXJzZXJJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlckltcGw6OmZhaWxlZCBjb25zdCk6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQYXJzZXJJbXBsLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NUb2tlbml6ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9rZW5pemVyOjpDU1NUb2tlbml6ZXIpOgorICAg
ICAgICAqIGNzcy9wYXJzZXIvQ1NTVG9rZW5pemVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b2tlbml6ZXI6OmZhaWxlZCBjb25zdCk6CisKIDIwMjAtMDYtMjggIFlvdWVubiBGYWJsZXQgIDx5
b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIE1lZGlhUmVjb3JkZXIgc3RvcFJlY29yZGVyKCkg
cmV0dXJucyBlbXB0eSBCbG9iIGFmdGVyIGZpcnN0IHVzZQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMjYzNjM0KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xm
LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtp
dEBuaWNrc2hhbmtzLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCkBAIC04OSw2
ICs4OSw4IEBAIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZT4gQ1NTUGFyc2VyOjpwYXIKIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVN1cHBvcnRzQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYgY29uZGl0aW9u
KQogewogICAgIENTU1BhcnNlckltcGwgcGFyc2VyKG1fY29udGV4dCwgY29uZGl0aW9uKTsKKyAg
ICBpZiAocGFyc2VyLmZhaWxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJu
IENTU1N1cHBvcnRzUGFyc2VyOjpzdXBwb3J0c0NvbmRpdGlvbihwYXJzZXIudG9rZW5pemVyKCkt
PnRva2VuUmFuZ2UoKSwgcGFyc2VyLCBDU1NTdXBwb3J0c1BhcnNlcjo6Rm9yV2luZG93Q1NTKSA9
PSBDU1NTdXBwb3J0c1BhcnNlcjo6U3VwcG9ydGVkOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHAJKHJldmlzaW9uIDI2MzYzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwogLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAvLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CkBAIC03OCwxMCArNzgsMTcgQEAgQ1NTUGFyc2VySW1wbDo6Q1NTUGFyc2VySW1wbChjb25zdCBD
U1NQYQogICAgICwgbV9vYnNlcnZlcldyYXBwZXIod3JhcHBlcikKIHsKICAgICBtX3Rva2VuaXpl
ciA9IHdyYXBwZXIgPyBtYWtlVW5pcXVlPENTU1Rva2VuaXplcj4oc3RyaW5nLCAqd3JhcHBlcikg
OiBtYWtlVW5pcXVlPENTU1Rva2VuaXplcj4oc3RyaW5nKTsKKyAgICBpZiAobV90b2tlbml6ZXIt
PmZhaWxlZCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGNvbnRleHQuZGVmZXJyZWRDU1NQ
YXJzZXJFbmFibGVkICYmICF3cmFwcGVyICYmIHN0eWxlU2hlZXQgJiYgcnVsZVBhcnNpbmcgPT0g
Q1NTUGFyc2VyOjpSdWxlUGFyc2luZzo6RGVmZXJyZWQpCiAgICAgICAgIG1fZGVmZXJyZWRQYXJz
ZXIgPSBDU1NEZWZlcnJlZFBhcnNlcjo6Y3JlYXRlKGNvbnRleHQsIHN0cmluZywgKnN0eWxlU2hl
ZXQpOwogfQogCitib29sIENTU1BhcnNlckltcGw6OmZhaWxlZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdG9rZW5pemVyLT5mYWlsZWQoKTsKK30KKwogQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBD
U1NQYXJzZXJJbXBsOjpwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMqIGRlY2xhcmF0
aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29s
IGltcG9ydGFudCwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBDU1NQ
YXJzZXJJbXBsIHBhcnNlcihjb250ZXh0LCBzdHJpbmcpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmgJKHJldmlzaW9uIDI2MzYzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNjcs
NiArNjcsOCBAQCBjbGFzcyBDU1NQYXJzZXJJbXBsIHsKIHB1YmxpYzoKICAgICBDU1NQYXJzZXJJ
bXBsKGNvbnN0IENTU1BhcnNlckNvbnRleHQmLCBjb25zdCBTdHJpbmcmLCBTdHlsZVNoZWV0Q29u
dGVudHMqID0gbnVsbHB0ciwgQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyKiA9IG51bGxwdHIsIENT
U1BhcnNlcjo6UnVsZVBhcnNpbmcgPSBDU1NQYXJzZXI6OlJ1bGVQYXJzaW5nOjpOb3JtYWwpOwog
CisgICAgYm9vbCBmYWlsZWQoKSBjb25zdDsKKwogICAgIGVudW0gQWxsb3dlZFJ1bGVzVHlwZSB7
CiAgICAgICAgIC8vIEFzIHBlciBjc3Mtc3ludGF4LCBjc3MtY2FzY2FkZSBhbmQgY3NzLW5hbWVz
cGFjZXMsIEBjaGFyc2V0IHJ1bGVzCiAgICAgICAgIC8vIG11c3QgY29tZSBmaXJzdCwgZm9sbG93
ZWQgYnkgQGltcG9ydCB0aGVuIEBuYW1lc3BhY2UuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Rva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAyNjM2MzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Rva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLwogLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC02Niw3
ICs2NiwxMCBAQCBpbmxpbmUgQ1NTVG9rZW5pemVyOjpDU1NUb2tlbml6ZXIoU3RyaW5nCiAKICAg
ICAvLyBUbyBhdm9pZCByZXNpemluZyB3ZSBlcnIgb24gdGhlIHNpZGUgb2YgcmVzZXJ2aW5nIHRv
byBtdWNoIHNwYWNlLgogICAgIC8vIE1vc3Qgc3RyaW5ncyB3ZSB0b2tlbml6ZSBoYXZlIGFib3V0
IDMuNSB0byA1IGNoYXJhY3RlcnMgcGVyIHRva2VuLgotICAgIG1fdG9rZW5zLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc3RyaW5nLmxlbmd0aCgpIC8gMyk7CisgICAgaWYgKFVOTElLRUxZKCFtX3Rv
a2Vucy50cnlSZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSAvIDMpKSkgewor
ICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICB1
bnNpZ25lZCBvZmZzZXQgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC03Nyw3ICs4MCwxMCBA
QCBpbmxpbmUgQ1NTVG9rZW5pemVyOjpDU1NUb2tlbml6ZXIoU3RyaW5nCiAgICAgICAgICAgICBp
ZiAod3JhcHBlcikKICAgICAgICAgICAgICAgICB3cmFwcGVyLT5hZGRDb21tZW50KG9mZnNldCwg
bV9pbnB1dC5vZmZzZXQoKSwgbV90b2tlbnMuc2l6ZSgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tlbik7CisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIW1fdG9rZW5zLnRyeUFwcGVuZCh0b2tlbikpKSB7CisgICAgICAgICAgICAgICAgbV9mYWls
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmICh3cmFwcGVyKQogICAgICAgICAgICAgICAgIHdyYXBwZXItPmFkZFRva2VuKG9m
ZnNldCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVG9r
ZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NUb2tl
bml6ZXIuaAkocmV2aXNpb24gMjYzNjM0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NUb2tlbml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vIENvcHlyaWdo
dCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAv
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgog
ICAgIGV4cGxpY2l0IENTU1Rva2VuaXplcihjb25zdCBTdHJpbmcmKTsKICAgICBDU1NUb2tlbml6
ZXIoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyJik7IC8vIEZvciB0aGUg
aW5zcGVjdG9yCiAKKyAgICBib29sIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9
CisKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHRva2VuUmFuZ2UoKSBjb25zdDsKICAgICB1bnNp
Z25lZCB0b2tlbkNvdW50KCk7CiAKQEAgLTEyNSw2ICsxMjcsNyBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxDU1NQYXJzZXJUb2tlbiwgMzI+IG1fdG9rZW5zOwogICAgIC8vIFdlIG9ubHkgYWxsb2Nh
dGUgc3RyaW5ncyB3aGVuIGVzY2FwZXMgYXJlIHVzZWQuCiAgICAgVmVjdG9yPFN0cmluZz4gbV9z
dHJpbmdQb29sOworICAgIGJvb2wgbV9mYWlsZWQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzNjM0KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDYtMjggIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBoYW5kbGluZyBmb3Ig
YSBjYXNlIG9mIE9PTUUgaW4gQ1NTVG9rZW5pemVyIGFuZCBDU1NQYXJzZXIuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM3MDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY0ODA4ODg5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10b2tlbml6ZXItZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL291dC1vZi1tZW1vcnktaW4tY3NzLXRv
a2VuaXplci5odG1sOiBBZGRlZC4KKwogMjAyMC0wNi0yOCAgWW91ZW5uIEZhYmxldCAgPHlvdWVu
bkBhcHBsZS5jb20+CiAKICAgICAgICAgTWVkaWFSZWNvcmRlciBzdG9wUmVjb3JkZXIoKSByZXR1
cm5zIGVtcHR5IEJsb2IgYWZ0ZXIgZmlyc3QgdXNlCkluZGV4OiBMYXlvdXRUZXN0cy9jc3MzL291
dC1vZi1tZW1vcnktaW4tY3NzLXRva2VuaXplci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10b2tlbml6ZXItZXhwZWN0ZWQu
dHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2NzczMvb3V0LW9mLW1lbW9yeS1pbi1j
c3MtdG9rZW5pemVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUgQEAK
K2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUg
ODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1M
fSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBz
aXplIDc4NHg1ODQKSW5kZXg6IExheW91dFRlc3RzL2NzczMvb3V0LW9mLW1lbW9yeS1pbi1jc3Mt
dG9rZW5pemVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3NzMy9vdXQtb2YtbWVt
b3J5LWluLWNzcy10b2tlbml6ZXIuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9j
c3MzL291dC1vZi1tZW1vcnktaW4tY3NzLXRva2VuaXplci5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMyBAQAorPHNjcmlwdD4KK0NTUy5zdXBwb3J0cygnYScucmVwZWF0KDIqKjI5ICsg
MSkpOworPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403010</attachid>
            <date>2020-06-28 14:11:34 -0700</date>
            <delta_ts>2020-06-29 16:42:03 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-213702.patch</filename>
            <type>text/plain</type>
            <size>38189</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM2MzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDIwLTA2LTI4ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaGFuZGxpbmcgZm9yIGEgY2FzZSBvZiBPT01FIGlu
IENTU1Rva2VuaXplciBhbmQgQ1NTUGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NDgw
ODg4OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAx
LiBBZGRlZCBBbGxvY2F0aW9uVHJhaXRzIHNvIHRoYXQgd2UgY2FuIHBhcmFtZXRlcml6ZSBob3cg
d2Ugd2FudCB0byBoYW5kbGUKKyAgICAgICAgICAgYWxsb2NhdGlvbiBmYWlsdXJlcy4KKworICAg
ICAgICAyLiBBcHBseSBBbGxvY2F0aW9uVHJhaXRzIHRvIG1hbnkgbWV0aG9kcyBpbiBWZWN0b3Ig
KGFuZCBpdHMgc3VwZXIgY2xhc3NlcykKKyAgICAgICAgICAgc28gd2UgY2FuIHN0YXJ0IGRlLWR1
cGxpY2F0aW5nIGNvZGUuICBQcmV2aW91c2x5LCB3ZSB3ZXJlIGFsd2F5cyBkdXBsaWNhdGluZwor
ICAgICAgICAgICBjb2RlIGp1c3QgdG8gaGF2ZSBhICJ0cnkiIHZlcnNpb24gb2YgdGhlIHNhbWUg
bWV0aG9kIHRoYXQgcmVwb3J0cyB0aGUgZmFpbHVyZQorICAgICAgICAgICB0byBhbGxvY2F0ZSBp
bnN0ZWFkIG9mIGNyYXNoaW5nLiAgV2UgY2FuIG5vdyBwYXJhbWV0ZXJpemUgYWxsIHRoZXNlIG1l
dGhvZHMgb24KKyAgICAgICAgICAgYW4gQWxsb2NhdGlvblRyYWl0cyB0ZW1wbGF0ZSBwYXJhbWV0
ZXIgaW5zdGVhZCwgYW5kIGF2b2lkIHRoZSBjb2RlIGR1cGxpY2F0aW9uLgorICAgICAgICAgICBU
aGlzIHBhdGNoIGFsc28gcmV2ZXJzZXMgc29tZSBvZiB0aGUgZXhpc3RpbmcgY29kZSBkdXBsaWNh
dGlvbi4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHd0Zi9BbGxvY2F0aW9uVHJhaXRzLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6OlZlY3RvckJ1
ZmZlckJhc2U6OmFsbG9jYXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVmZmVyQmFz
ZTo6dHJ5QWxsb2NhdGVCdWZmZXIpOgorICAgICAgICAoV1RGOjpWZWN0b3JCdWZmZXI6OmFsbG9j
YXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVmZmVyOjp0cnlBbGxvY2F0ZUJ1ZmZl
cik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6cmVzZXJ2ZUNhcGFjaXR5KToKKyAgICAgICAgKFdU
Rjo6VmVjdG9yOjp0cnlSZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OnRyeVJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OmFwcGVuZCk6CisgICAgICAg
IChXVEY6OlZlY3Rvcjo6dHJ5QXBwZW5kKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjpjb25zdHJ1
Y3RBbmRBcHBlbmQpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OnRyeUNvbnN0cnVjdEFuZEFwcGVu
ZCk6CisgICAgICAgIChXVEY6Ok1hbGxvYz46OmV4cGFuZENhcGFjaXR5KToKKyAgICAgICAgKFdU
Rjo6TWFsbG9jPjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6TWFsbG9jPjo6Z3Jvdyk6CisgICAg
ICAgIChXVEY6Ok1hbGxvYz46OnJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ok1hbGxv
Yz46OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpNYWxsb2M+OjphcHBl
bmQpOgorICAgICAgICAoV1RGOjpNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmQpOgorICAgICAg
ICAoV1RGOjpNYWxsb2M+OjphcHBlbmRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6Ok1hbGxvYz46
OmNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6TWFsbG9jPjo6YXBw
ZW5kVmVjdG9yKToKKyAgICAgICAgKFdURjo6TWFsbG9jPjo6aW5zZXJ0KToKKyAgICAgICAgKFdU
Rjo6TWFsbG9jPjo6dHJ5RXhwYW5kQ2FwYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpN
YWxsb2M+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxs
b2M+Ojp0cnlBcHBlbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+Ojp0cnlDb25z
dHJ1Y3RBbmRBcHBlbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+Ojp0cnlDb25z
dHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZSk6IERlbGV0ZWQuCisKIDIwMjAtMDYtMjggIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgaW5pdGlhbGl6ZVRo
cmVhZGluZyB0byBpbml0aWFsaXplCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzYzNSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc1OCw2ICs3NTgsNyBAQAogCQlG
RTg2QTg3NDFFNTk0NDAyMDAxMTFCQkYgLyogRm9yYmlkSGVhcEFsbG9jYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9yYmlkSGVhcEFsbG9jYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU4OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8qIEluZGVu
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGVudGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTdGNkE4MjQ1Q0U1REQwMEM2M0ZDNiAvKiBTdGRJ
bnRFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RkSW50RXh0cmFz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTk2QjUyMjRBODQ1QUYwMDFEMkU2
MyAvKiBBbGxvY2F0aW9uVHJhaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFsbG9jYXRpb25UcmFpdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVCNkIw
MzUyMDFCRTBCNjAwQjk1OEMxIC8qIFBvaW50ZXJQcmVwYXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlclByZXBhcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGFja1N0YXRzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0IC8q
IFN0YWNrU3RhdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tTdGF0
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTM1LDYgKzkzNiw3IEBACiAJCQkJ
QThBNDczNDgxNTFBODI1QjAwNDEyM0ZGIC8qIHVuaWNvZGUgKi8sCiAJCQkJQ0RDQzlCQzQyMjM4
MkZDRTAwRkZCNTFDIC8qIEFnZ3JlZ2F0ZUxvZ2dlci5oICovLAogCQkJCUNENkQ5RkNEMUVFRjNB
RDQwMDhCMDY3MSAvKiBBbGdvcml0aG1zLmggKi8sCisJCQkJRkU5OTZCNTIyNEE4NDVBRjAwMUQy
RTYzIC8qIEFsbG9jYXRpb25UcmFpdHMuaCAqLywKIAkJCQlDRTExMzI4MzIzNzA2MzQ5MDBBOEM4
M0IgLyogQW5zaUNvbG9ycy5oICovLAogCQkJCTQ0MjdDNUE5MjFGNkQ2QzMwMEE2MTJBNCAvKiBB
U0NJSUNUeXBlLmNwcCAqLywKIAkJCQlBOEE0NzI1QTE1MUE4MjVBMDA0MTIzRkYgLyogQVNDSUlD
VHlwZS5oICovLApJbmRleDogU291cmNlL1dURi93dGYvQWxsb2NhdGlvblRyYWl0cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FsbG9jYXRpb25UcmFpdHMuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV1RGL3d0Zi9BbGxvY2F0aW9uVHJhaXRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RG
IHsKKworZW51bSBjbGFzcyBBbGxvY2F0aW9uVHJhaXRzIHsKKyAgICBDcmFzaE9uRmFpbHVyZSwK
KyAgICBSZXBvcnRGYWlsdXJlCit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNjM2MzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAgc2V0KFdURl9QVUJMSUNfSEVB
REVSUwogICAgIEFTQ0lJQ1R5cGUuaAogICAgIEFnZ3JlZ2F0ZUxvZ2dlci5oCiAgICAgQWxnb3Jp
dGhtcy5oCisgICAgQWxsb2NhdGlvblRyYWl0cy5oCiAgICAgQW5zaUNvbG9ycy5oCiAgICAgQXNz
ZXJ0aW9ucy5oCiAgICAgQXRvbWljcy5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjYzNjM1KQor
KysgU291cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsNiArMjUsNyBAQAogI2lu
Y2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHV0aWxp
dHk+CisjaW5jbHVkZSA8d3RmL0FsbG9jYXRpb25UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvQ2hl
Y2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CkBAIC0yODIsMzEgKzI4MywzNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBNYWxsb2M+CiBjbGFzcyBWZWN0b3JCdWZmZXJCYXNlIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShWZWN0b3JCdWZmZXJCYXNlKTsKIHB1YmxpYzoKLSAgICB2b2lkIGFsbG9j
YXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkKKyAgICB0ZW1wbGF0ZTxBbGxvY2F0aW9uVHJh
aXRzIHRyYWl0cz4KKyAgICBib29sIGFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkK
ICAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQodHJhaXRzID09IEFsbG9jYXRpb25UcmFpdHM6
OkNyYXNoT25GYWlsdXJlIHx8IHRyYWl0cyA9PSBBbGxvY2F0aW9uVHJhaXRzOjpSZXBvcnRGYWls
dXJlKTsKICAgICAgICAgQVNTRVJUKG5ld0NhcGFjaXR5KTsKLSAgICAgICAgaWYgKG5ld0NhcGFj
aXR5ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gc2l6ZW9mKFQpKQot
ICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgc2l6ZV90IHNpemVUb0FsbG9jYXRlID0gbmV3
Q2FwYWNpdHkgKiBzaXplb2YoVCk7Ci0gICAgICAgIG1fY2FwYWNpdHkgPSBzaXplVG9BbGxvY2F0
ZSAvIHNpemVvZihUKTsKLSAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oTWFsbG9j
OjptYWxsb2Moc2l6ZVRvQWxsb2NhdGUpKTsKLSAgICB9Ci0KLSAgICBib29sIHRyeUFsbG9jYXRl
QnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChuZXdDYXBh
Y2l0eSk7Ci0gICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSAvIHNpemVvZihUKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpIC8gc2l6ZW9mKFQpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWl0cyA9PSBB
bGxvY2F0aW9uVHJhaXRzOjpDcmFzaE9uRmFpbHVyZSkKKyAgICAgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQogCiAgICAgICAgIHNpemVfdCBzaXplVG9BbGxvY2F0ZSA9IG5ld0NhcGFjaXR5ICogc2l6
ZW9mKFQpOwotICAgICAgICBUKiBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oTWFsbG9jOjp0
cnlNYWxsb2Moc2l6ZVRvQWxsb2NhdGUpKTsKLSAgICAgICAgaWYgKCFuZXdCdWZmZXIpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFQqIG5ld0J1ZmZlciA9IG51bGxwdHI7Cisg
ICAgICAgIGlmIGNvbnN0ZXhwciAodHJhaXRzID09IEFsbG9jYXRpb25UcmFpdHM6OkNyYXNoT25G
YWlsdXJlKQorICAgICAgICAgICAgbmV3QnVmZmVyID0gc3RhdGljX2Nhc3Q8VCo+KE1hbGxvYzo6
bWFsbG9jKHNpemVUb0FsbG9jYXRlKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbmV3
QnVmZmVyID0gc3RhdGljX2Nhc3Q8VCo+KE1hbGxvYzo6dHJ5TWFsbG9jKHNpemVUb0FsbG9jYXRl
KSk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIW5ld0J1ZmZlcikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIG1fY2FwYWNpdHkgPSBzaXplVG9B
bGxvY2F0ZSAvIHNpemVvZihUKTsKICAgICAgICAgbV9idWZmZXIgPSBuZXdCdWZmZXI7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhbGxvY2F0
ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpIHsgYWxsb2NhdGVCdWZmZXI8QWxsb2NhdGlvblRy
YWl0czo6Q3Jhc2hPbkZhaWx1cmU+KG5ld0NhcGFjaXR5KTsgfQorICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCB0cnlBbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpIHsgcmV0dXJuIGFsbG9j
YXRlQnVmZmVyPEFsbG9jYXRpb25UcmFpdHM6OlJlcG9ydEZhaWx1cmU+KG5ld0NhcGFjaXR5KTsg
fQorCiAgICAgYm9vbCBzaG91bGRSZWFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBWZWN0b3JUcmFpdHM8VD46OmNhbk1vdmVXaXRo
TWVtY3B5ICYmIG1fY2FwYWNpdHkgJiYgbmV3Q2FwYWNpdHk7CkBAIC00NTcsMjYgKzQ2MiwyMCBA
QCBwdWJsaWM6CiAgICAgICAgIGRlYWxsb2NhdGVCdWZmZXIoYnVmZmVyKCkpOwogICAgIH0KIAot
ICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KQorICAgIHRlbXBsYXRl
PEFsbG9jYXRpb25UcmFpdHMgdHJhaXRzPgorICAgIGJvb2wgYWxsb2NhdGVCdWZmZXIoc2l6ZV90
IG5ld0NhcGFjaXR5KQogICAgIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIEFTU0VS
VCghbV9idWZmZXIpIHRvIGNhdGNoIG1pc3VzZS9sZWFrcy4KICAgICAgICAgaWYgKG5ld0NhcGFj
aXR5ID4gaW5saW5lQ2FwYWNpdHkpCi0gICAgICAgICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihu
ZXdDYXBhY2l0eSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9idWZmZXIgPSBpbmxp
bmVCdWZmZXIoKTsKLSAgICAgICAgICAgIG1fY2FwYWNpdHkgPSBpbmxpbmVDYXBhY2l0eTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgdHJ5QWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0Nh
cGFjaXR5KQotICAgIHsKLSAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gaW5saW5lQ2FwYWNpdHkp
Ci0gICAgICAgICAgICByZXR1cm4gQmFzZTo6dHJ5QWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkp
OworICAgICAgICAgICAgcmV0dXJuIEJhc2U6OnRlbXBsYXRlIGFsbG9jYXRlQnVmZmVyPHRyYWl0
cz4obmV3Q2FwYWNpdHkpOwogICAgICAgICBtX2J1ZmZlciA9IGlubGluZUJ1ZmZlcigpOwogICAg
ICAgICBtX2NhcGFjaXR5ID0gaW5saW5lQ2FwYWNpdHk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3
Q2FwYWNpdHkpIHsgYWxsb2NhdGVCdWZmZXI8QWxsb2NhdGlvblRyYWl0czo6Q3Jhc2hPbkZhaWx1
cmU+KG5ld0NhcGFjaXR5KTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB0cnlBbGxvY2F0ZUJ1
ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpIHsgcmV0dXJuIGFsbG9jYXRlQnVmZmVyPEFsbG9jYXRp
b25UcmFpdHM6OlJlcG9ydEZhaWx1cmU+KG5ld0NhcGFjaXR5KTsgfQorCiAgICAgdm9pZCBkZWFs
bG9jYXRlQnVmZmVyKFQqIGJ1ZmZlclRvRGVhbGxvY2F0ZSkKICAgICB7CiAgICAgICAgIGlmIChi
dWZmZXJUb0RlYWxsb2NhdGUgPT0gaW5saW5lQnVmZmVyKCkpCkBAIC03NjEsOSArNzYwLDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIGdyb3coc2l6ZV90IHNpemUpOwogICAgIHZvaWQgcmVzaXplKHNp
emVfdCBzaXplKTsKICAgICB2b2lkIHJlc2l6ZVRvRml0KHNpemVfdCBzaXplKTsKLSAgICB2b2lk
IHJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpOwotICAgIGJvb2wgdHJ5UmVzZXJ2
ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSk7Ci0gICAgdm9pZCByZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBy
ZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KSB7IHJlc2VydmVDYXBhY2l0eTxBbGxv
Y2F0aW9uVHJhaXRzOjpDcmFzaE9uRmFpbHVyZT4obmV3Q2FwYWNpdHkpOyB9CisgICAgQUxXQVlT
X0lOTElORSBib29sIHRyeVJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpIHsgcmV0
dXJuIHJlc2VydmVDYXBhY2l0eTxBbGxvY2F0aW9uVHJhaXRzOjpSZXBvcnRGYWlsdXJlPihuZXdD
YXBhY2l0eSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KSB7IHJlc2VydmVJbml0aWFsQ2FwYWNpdHk8QWxsb2Nh
dGlvblRyYWl0czo6Q3Jhc2hPbkZhaWx1cmU+KGluaXRpYWxDYXBhY2l0eSk7IH0KKyAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgdHJ5UmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENh
cGFjaXR5KSB7IHJldHVybiByZXNlcnZlSW5pdGlhbENhcGFjaXR5PEFsbG9jYXRpb25UcmFpdHM6
OlJlcG9ydEZhaWx1cmU+KGluaXRpYWxDYXBhY2l0eSk7IH0KICAgICB2b2lkIHNocmlua0NhcGFj
aXR5KHNpemVfdCBuZXdDYXBhY2l0eSk7CiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpIHsgc2hyaW5r
Q2FwYWNpdHkoc2l6ZSgpKTsgfQogCkBAIC03NzIsMTggKzc3MiwxOSBAQCBwdWJsaWM6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IFZlY3RvcjxVPiBpc29sYXRlZENvcHkoKSBjb25zdDsK
IAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoVmFsdWVUeXBlJiYgdmFsdWUpIHsgYXBw
ZW5kPFZhbHVlVHlwZT4oc3RkOjpmb3J3YXJkPFZhbHVlVHlwZT4odmFsdWUpKTsgfQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJncz4gdm9pZCBjb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYmLi4uKTsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiBib29sIHRyeUNvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYu
Li4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQo
VSYmIHUpIHsgYXBwZW5kPEFsbG9jYXRpb25UcmFpdHM6OkNyYXNoT25GYWlsdXJlLCBVPihzdGQ6
OmZvcndhcmQ8VT4odSkpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQUxXQVlTX0lOTElO
RSBib29sIHRyeUFwcGVuZChVJiYgdSkgeyByZXR1cm4gYXBwZW5kPEFsbG9jYXRpb25UcmFpdHM6
OlJlcG9ydEZhaWx1cmUsIFU+KHN0ZDo6Zm9yd2FyZDxVPih1KSk7IH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmdzPiBBTFdBWVNfSU5MSU5FIHZvaWQgY29uc3RydWN0QW5kQXBwZW5kKEFy
Z3MmJi4uLiBhcmdzKSB7IGNvbnN0cnVjdEFuZEFwcGVuZDxBbGxvY2F0aW9uVHJhaXRzOjpDcmFz
aE9uRmFpbHVyZT4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+IEFMV0FZU19JTkxJTkUgYm9vbCB0cnlDb25zdHJ1Y3RBbmRBcHBl
bmQoQXJncyYmLi4uIGFyZ3MpIHsgcmV0dXJuIGNvbnN0cnVjdEFuZEFwcGVuZDxBbGxvY2F0aW9u
VHJhaXRzOjpSZXBvcnRGYWlsdXJlPihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOyB9CiAK
ICAgICB2b2lkIHVuY2hlY2tlZEFwcGVuZChWYWx1ZVR5cGUmJiB2YWx1ZSkgeyB1bmNoZWNrZWRB
cHBlbmQ8VmFsdWVUeXBlPihzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2YWx1ZSkpOyB9CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmKTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiB2b2lkIHVuY2hlY2tlZENvbnN0cnVjdEFuZEFwcGVuZChB
cmdzJiYuLi4pOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQoY29uc3Qg
VSosIHNpemVfdCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQUxXQVlTX0lOTElORSB2b2lk
IGFwcGVuZChjb25zdCBVKiB1LCBzaXplX3Qgc2l6ZSkgeyBhcHBlbmQ8QWxsb2NhdGlvblRyYWl0
czo6Q3Jhc2hPbkZhaWx1cmU+KHUsIHNpemUpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4g
QUxXQVlTX0lOTElORSBib29sIHRyeUFwcGVuZChjb25zdCBVKiB1LCBzaXplX3Qgc2l6ZSkgeyBy
ZXR1cm4gYXBwZW5kPEFsbG9jYXRpb25UcmFpdHM6OlJlcG9ydEZhaWx1cmU+KHUsIHNpemUpOyB9
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IG90aGVyQ2FwYWNpdHk+IHZvaWQgYXBw
ZW5kVmVjdG9yKGNvbnN0IFZlY3RvcjxVLCBvdGhlckNhcGFjaXR5PiYpOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFUsIHNpemVfdCBvdGhlckNhcGFjaXR5PiB2b2lkIGFwcGVuZFZlY3RvcihWZWN0
b3I8VSwgb3RoZXJDYXBhY2l0eT4mJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCB0
cnlBcHBlbmQoY29uc3QgVSosIHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2
b2lkIGluc2VydChzaXplX3QgcG9zaXRpb24sIGNvbnN0IFUqLCBzaXplX3QpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IHZvaWQgaW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgVSYmKTsKQEAgLTgz
NywxNCArODM4LDE4IEBAIHB1YmxpYzoKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplID09IHN0ZDo6bnVtZXJpY19saW1pdHM8ZGVjbHR5cGUo
bV9zaXplKT46Om1heCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBleHBhbmRDYXBhY2l0eShz
aXplX3QgbmV3TWluQ2FwYWNpdHkpOwotICAgIFQqIGV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdN
aW5DYXBhY2l0eSwgVCopOwotICAgIGJvb2wgdHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01p
bkNhcGFjaXR5KTsKLSAgICBjb25zdCBUKiB0cnlFeHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWlu
Q2FwYWNpdHksIGNvbnN0IFQqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBVKiBleHBhbmRD
YXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFUqKTsgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gdm9pZCBhcHBlbmRTbG93Q2FzZShVJiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3M+IHZvaWQgY29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4uKTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiBib29sIHRyeUNvbnN0cnVjdEFuZEFwcGVuZFNsb3dD
YXNlKEFyZ3MmJi4uLik7CisgICAgdGVtcGxhdGU8QWxsb2NhdGlvblRyYWl0cz4gYm9vbCByZXNl
cnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsKKyAgICB0ZW1wbGF0ZTxBbGxvY2F0aW9u
VHJhaXRzPiBib29sIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRpYWxDYXBhY2l0
eSk7CisKKyAgICB0ZW1wbGF0ZTxBbGxvY2F0aW9uVHJhaXRzPiBib29sIGV4cGFuZENhcGFjaXR5
KHNpemVfdCBuZXdNaW5DYXBhY2l0eSk7CisgICAgdGVtcGxhdGU8QWxsb2NhdGlvblRyYWl0cz4g
VCogZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBUKik7CisgICAgdGVtcGxh
dGU8QWxsb2NhdGlvblRyYWl0cywgdHlwZW5hbWUgVT4gVSogZXhwYW5kQ2FwYWNpdHkoc2l6ZV90
IG5ld01pbkNhcGFjaXR5LCBVKik7CisgICAgdGVtcGxhdGU8QWxsb2NhdGlvblRyYWl0cywgdHlw
ZW5hbWUgVT4gYm9vbCBhcHBlbmRTbG93Q2FzZShVJiYpOworICAgIHRlbXBsYXRlPEFsbG9jYXRp
b25UcmFpdHMsIHR5cGVuYW1lLi4uIEFyZ3M+IGJvb2wgY29uc3RydWN0QW5kQXBwZW5kKEFyZ3Mm
Ji4uLik7CisgICAgdGVtcGxhdGU8QWxsb2NhdGlvblRyYWl0cywgdHlwZW5hbWUuLi4gQXJncz4g
Ym9vbCBjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShBcmdzJiYuLi4pOworCisgICAgdGVtcGxh
dGU8QWxsb2NhdGlvblRyYWl0cywgdHlwZW5hbWUgVT4gYm9vbCBhcHBlbmQoVSYmKTsKKyAgICB0
ZW1wbGF0ZTxBbGxvY2F0aW9uVHJhaXRzLCB0eXBlbmFtZSBVPiBib29sIGFwcGVuZChjb25zdCBV
Kiwgc2l6ZV90KTsKIAogICAgIHRlbXBsYXRlPHNpemVfdCBwb3NpdGlvbiwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUuLi4gSXRlbXM+CiAgICAgdm9pZCB1bmNoZWNrZWRJbml0aWFsaXplKFUmJiBpdGVt
LCBJdGVtcyYmLi4uIGl0ZW1zKQpAQCAtMTA0Myw0OCArMTA0OCw0NCBAQCB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpleHBhbmRDYXBhY2l0eShz
aXplX3QgbmV3TWluQ2FwYWNpdHkpCit0ZW1wbGF0ZTxBbGxvY2F0aW9uVHJhaXRzIHRyYWl0cz4K
K2Jvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5LCBNYWxsb2M+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHkpCiB7Ci0g
ICAgcmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6bWF4KG5ld01pbkNhcGFjaXR5LCBzdGQ6Om1heChzdGF0
aWNfY2FzdDxzaXplX3Q+KG1pbkNhcGFjaXR5KSwgY2FwYWNpdHkoKSArIGNhcGFjaXR5KCkgLyA0
ICsgMSkpKTsKKyAgICByZXR1cm4gcmVzZXJ2ZUNhcGFjaXR5PHRyYWl0cz4oc3RkOjptYXgobmV3
TWluQ2FwYWNpdHksIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4obWluQ2FwYWNpdHkpLCBj
YXBhY2l0eSgpICsgY2FwYWNpdHkoKSAvIDQgKyAxKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTxBbGxvY2F0aW9uVHJh
aXRzIHRyYWl0cz4KIE5FVkVSX0lOTElORSBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmV4cGFuZENhcGFjaXR5KHNpemVf
dCBuZXdNaW5DYXBhY2l0eSwgVCogcHRyKQogeworICAgIHN0YXRpY19hc3NlcnQodHJhaXRzID09
IEFsbG9jYXRpb25UcmFpdHM6OkNyYXNoT25GYWlsdXJlIHx8IHRyYWl0cyA9PSBBbGxvY2F0aW9u
VHJhaXRzOjpSZXBvcnRGYWlsdXJlKTsKICAgICBpZiAocHRyIDwgYmVnaW4oKSB8fCBwdHIgPj0g
ZW5kKCkpIHsKLSAgICAgICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOworICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBleHBhbmRDYXBhY2l0eTx0cmFpdHM+KG5ld01pbkNhcGFjaXR5KTsK
KyAgICAgICAgaWYgY29uc3RleHByICh0cmFpdHMgPT0gQWxsb2NhdGlvblRyYWl0czo6UmVwb3J0
RmFpbHVyZSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gcHRyOwog
ICAgIH0KICAgICBzaXplX3QgaW5kZXggPSBwdHIgLSBiZWdpbigpOwotICAgIGV4cGFuZENhcGFj
aXR5KG5ld01pbkNhcGFjaXR5KTsKLSAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4OwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1ib29sIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFs
bG9jPjo6dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQotewotICAgIHJl
dHVybiB0cnlSZXNlcnZlQ2FwYWNpdHkoc3RkOjptYXgobmV3TWluQ2FwYWNpdHksIHN0ZDo6bWF4
KHN0YXRpY19jYXN0PHNpemVfdD4obWluQ2FwYWNpdHkpLCBjYXBhY2l0eSgpICsgY2FwYWNpdHko
KSAvIDQgKyAxKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBl
bmFtZSBNYWxsb2M+Ci1jb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnRyeUV4cGFuZENhcGFjaXR5KHNpemVfdCBu
ZXdNaW5DYXBhY2l0eSwgY29uc3QgVCogcHRyKQotewotICAgIGlmIChwdHIgPCBiZWdpbigpIHx8
IHB0ciA+PSBlbmQoKSkgewotICAgICAgICBpZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNh
cGFjaXR5KSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gcHRyOworICAg
IGJvb2wgc3VjY2VzcyA9IGV4cGFuZENhcGFjaXR5PHRyYWl0cz4obmV3TWluQ2FwYWNpdHkpOwor
ICAgIGlmIGNvbnN0ZXhwciAodHJhaXRzID09IEFsbG9jYXRpb25UcmFpdHM6OlJlcG9ydEZhaWx1
cmUpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KLSAgICBzaXplX3QgaW5kZXggPSBwdHIgLSBiZWdpbigpOwotICAg
IGlmICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpKQotICAgICAgICByZXR1cm4g
MDsKICAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVPgordGVt
cGxhdGU8QWxsb2NhdGlvblRyYWl0cyB0cmFpdHMsIHR5cGVuYW1lIFU+CiBpbmxpbmUgVSogVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxs
b2M+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFUqIHB0cikKIHsKLSAg
ICBleHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSk7CisgICAgc3RhdGljX2Fzc2VydCh0cmFp
dHMgPT0gQWxsb2NhdGlvblRyYWl0czo6Q3Jhc2hPbkZhaWx1cmUgfHwgdHJhaXRzID09IEFsbG9j
YXRpb25UcmFpdHM6OlJlcG9ydEZhaWx1cmUpOworICAgIGJvb2wgc3VjY2VzcyA9IGV4cGFuZENh
cGFjaXR5PHRyYWl0cz4obmV3TWluQ2FwYWNpdHkpOworICAgIGlmIGNvbnN0ZXhwciAodHJhaXRz
ID09IEFsbG9jYXRpb25UcmFpdHM6OlJlcG9ydEZhaWx1cmUpIHsKKyAgICAgICAgaWYgKFVOTElL
RUxZKCFzdWNjZXNzKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KICAgICBy
ZXR1cm4gcHRyOwogfQogCkBAIC0xMDk2LDcgKzEwOTcsNyBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92CiAgICAgICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRv
KHNpemUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChzaXplID4gY2FwYWNpdHkoKSkKLSAg
ICAgICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOworICAgICAgICAgICAgZXhwYW5kQ2FwYWNp
dHk8QWxsb2NhdGlvblRyYWl0czo6Q3Jhc2hPbkZhaWx1cmU+KHNpemUpOwogICAgICAgICBhc2Fu
QnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXplKTsKICAgICAgICAgaWYgKGJlZ2luKCkpCiAgICAg
ICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZUlmTm9uUE9EKGVuZCgpLCBiZWdpbigp
ICsgc2l6ZSk7CkBAIC0xMTI2LDcgKzExMjcsNyBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dICiB7CiAgICAgQVNTRVJUKHNpemUgPj0gbV9zaXplKTsKICAgICBpZiAo
c2l6ZSA+IGNhcGFjaXR5KCkpCi0gICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOworICAgICAg
ICBleHBhbmRDYXBhY2l0eTxBbGxvY2F0aW9uVHJhaXRzOjpDcmFzaE9uRmFpbHVyZT4oc2l6ZSk7
CiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8oc2l6ZSk7CiAgICAgaWYgKGJlZ2luKCkp
CiAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplSWZOb25QT0QoZW5kKCksIGJlZ2lu
KCkgKyBzaXplKTsKQEAgLTExNzgsMjcgKzExNzksMTAgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
LCB0eXBlbmFtZSBNYWxsb2M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBu
ZXdDYXBhY2l0eSkKLXsKLSAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCogb2xkRW5kID0g
ZW5kKCk7Ci0KLSAgICBhc2FuU2V0QnVmZmVyU2l6ZVRvRnVsbENhcGFjaXR5KCk7Ci0KLSAgICBC
YXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7Ci0gICAgQVNTRVJUKGJlZ2luKCkpOwot
Ci0gICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZSgpKTsKLQotICAgIFR5cGVPcGVy
YXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKLSAgICBCYXNlOjpkZWFs
bG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2Fw
YWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlSZXNlcnZlQ2FwYWNpdHko
c2l6ZV90IG5ld0NhcGFjaXR5KQordGVtcGxhdGU8QWxsb2NhdGlvblRyYWl0cyB0cmFpdHM+Citi
b29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPjo6cmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKIHsKKyAgICBz
dGF0aWNfYXNzZXJ0KHRyYWl0cyA9PSBBbGxvY2F0aW9uVHJhaXRzOjpDcmFzaE9uRmFpbHVyZSB8
fCB0cmFpdHMgPT0gQWxsb2NhdGlvblRyYWl0czo6UmVwb3J0RmFpbHVyZSk7CiAgICAgaWYgKG5l
d0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIFQqIG9s
ZEJ1ZmZlciA9IGJlZ2luKCk7CkBAIC0xMjA2LDkgKzExOTAsMTIgQEAgYm9vbCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogCiAgICAgYXNhblNldEJ1ZmZlclNpemVUb0Z1bGxD
YXBhY2l0eSgpOwogCi0gICAgaWYgKCFCYXNlOjp0cnlBbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0
eSkpIHsKLSAgICAgICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZSgpKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgc3VjY2VzcyA9IEJhc2U6OnRlbXBsYXRlIGFsbG9j
YXRlQnVmZmVyPHRyYWl0cz4obmV3Q2FwYWNpdHkpOworICAgIGlmIGNvbnN0ZXhwciAodHJhaXRz
ID09IEFsbG9jYXRpb25UcmFpdHM6OlJlcG9ydEZhaWx1cmUpIHsKKyAgICAgICAgaWYgKFVOTElL
RUxZKCFzdWNjZXNzKSkgeworICAgICAgICAgICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8o
c2l6ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KICAg
ICBBU1NFUlQoYmVnaW4oKSk7CiAKQEAgLTEyMjAsMTIgKzEyMDcsMTUgQEAgYm9vbCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRpYWxDYXBhY2l0eSkKK3RlbXBsYXRlPEFsbG9jYXRp
b25UcmFpdHMgdHJhaXRzPgoraW5saW5lIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpCiB7CisgICAgc3RhdGljX2Fzc2VydCh0cmFpdHMg
PT0gQWxsb2NhdGlvblRyYWl0czo6Q3Jhc2hPbkZhaWx1cmUgfHwgdHJhaXRzID09IEFsbG9jYXRp
b25UcmFpdHM6OlJlcG9ydEZhaWx1cmUpOwogICAgIEFTU0VSVCghbV9zaXplKTsKICAgICBBU1NF
UlQoY2FwYWNpdHkoKSA9PSBpbmxpbmVDYXBhY2l0eSk7Ci0gICAgaWYgKGluaXRpYWxDYXBhY2l0
eSA+IGlubGluZUNhcGFjaXR5KQotICAgICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihpbml0aWFs
Q2FwYWNpdHkpOworICAgIGlmIChpbml0aWFsQ2FwYWNpdHkgPD0gaW5saW5lQ2FwYWNpdHkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBCYXNlOjp0ZW1wbGF0ZSBhbGxvY2F0ZUJ1
ZmZlcjx0cmFpdHM+KGluaXRpYWxDYXBhY2l0eSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3Qg
bWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KQEAgLTEyNjAsMzUgKzEyNTAsMjUgQEAgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBV
PgotQUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6YXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVf
dCBkYXRhU2l6ZSkKK3RlbXBsYXRlPEFsbG9jYXRpb25UcmFpdHMgdHJhaXRzLCB0eXBlbmFtZSBV
PgorQUxXQVlTX0lOTElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6YXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVf
dCBkYXRhU2l6ZSkKIHsKKyAgICBzdGF0aWNfYXNzZXJ0KHRyYWl0cyA9PSBBbGxvY2F0aW9uVHJh
aXRzOjpDcmFzaE9uRmFpbHVyZSB8fCB0cmFpdHMgPT0gQWxsb2NhdGlvblRyYWl0czo6UmVwb3J0
RmFpbHVyZSk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSBtX3NpemUgKyBkYXRhU2l6ZTsKICAgICBp
ZiAobmV3U2l6ZSA+IGNhcGFjaXR5KCkpIHsKLSAgICAgICAgZGF0YSA9IGV4cGFuZENhcGFjaXR5
KG5ld1NpemUsIGRhdGEpOworICAgICAgICBkYXRhID0gZXhwYW5kQ2FwYWNpdHk8dHJhaXRzPihu
ZXdTaXplLCBkYXRhKTsKKyAgICAgICAgaWYgY29uc3RleHByICh0cmFpdHMgPT0gQWxsb2NhdGlv
blRyYWl0czo6UmVwb3J0RmFpbHVyZSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFkYXRh
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICAgICAgQVNT
RVJUKGJlZ2luKCkpOwogICAgIH0KLSAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKLSAgICAgICAg
Q1JBU0goKTsKLSAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhuZXdTaXplKTsKLSAgICBU
KiBkZXN0ID0gZW5kKCk7Ci0gICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFs
dWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCBzdGQ6OmFkZHJlc3NvZihkYXRhW2RhdGFT
aXplXSksIGRlc3QpOwotICAgIG1fc2l6ZSA9IG5ld1NpemU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVuYW1lIFU+
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlBcHBlbmQoY29uc3QgVSogZGF0YSwgc2l6
ZV90IGRhdGFTaXplKQotewotICAgIHNpemVfdCBuZXdTaXplID0gbV9zaXplICsgZGF0YVNpemU7
Ci0gICAgaWYgKG5ld1NpemUgPiBjYXBhY2l0eSgpKSB7Ci0gICAgICAgIGRhdGEgPSB0cnlFeHBh
bmRDYXBhY2l0eShuZXdTaXplLCBkYXRhKTsKLSAgICAgICAgaWYgKCFkYXRhKQorICAgIGlmIChu
ZXdTaXplIDwgbV9zaXplKSB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhaXRzID09IEFsbG9j
YXRpb25UcmFpdHM6OkNyYXNoT25GYWlsdXJlKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAg
ICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBBU1NFUlQoYmVnaW4o
KSk7CiAgICAgfQotICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQotICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obmV3U2l6ZSk7CiAgICAgVCogZGVz
dCA9IGVuZCgpOwogICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBV
Pjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgc3RkOjphZGRyZXNzb2YoZGF0YVtkYXRhU2l6ZV0p
LCBkZXN0KTsKQEAgLTEyOTcsMzYgKzEyNzcsMjIgQEAgQUxXQVlTX0lOTElORSBib29sIFZlY3Rv
cjxULCBpbmxpbmVDYXBhYwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0
eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVPgotQUxXQVlTX0lOTElORSB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6YXBwZW5kKFUmJiB2YWx1ZSkKK3RlbXBsYXRlPEFsbG9jYXRpb25UcmFpdHMgdHJh
aXRzLCB0eXBlbmFtZSBVPgorQUxXQVlTX0lOTElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6YXBwZW5kKFUmJiB2
YWx1ZSkKIHsKICAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsKICAgICAgICAgYXNhbkJ1
ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7CiAgICAgICAgIG5ldyAoTm90TnVsbCwg
ZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgICAgICsrbV9zaXplOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXBwZW5kU2xvd0Nhc2Uoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1l
IE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci1BTFdBWVNfSU5MSU5FIHZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBN
YWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYmLi4uIGFyZ3MpCi17Ci0gICAgaWYgKHNp
emUoKSAhPSBjYXBhY2l0eSgpKSB7Ci0gICAgICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRv
KG1fc2l6ZSArIDEpOwotICAgICAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2Fy
ZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgICAgICsrbV9zaXplOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0cnVjdEFuZEFwcGVuZFNsb3dD
YXNlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgcmV0dXJuIGFwcGVuZFNsb3dD
YXNlPHRyYWl0cywgVT4oc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3M+Ci1BTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlDb25zdHJ1Y3RBbmRBcHBl
bmQoQXJncyYmLi4uIGFyZ3MpCit0ZW1wbGF0ZTxBbGxvY2F0aW9uVHJhaXRzIHRyYWl0cywgdHlw
ZW5hbWUuLi4gQXJncz4KK0FMV0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmNvbnN0cnVjdEFuZEFw
cGVuZChBcmdzJiYuLi4gYXJncykKIHsKICAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsK
ICAgICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7CkBAIC0xMzM0
LDUyICsxMzAwLDQ4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWMK
ICAgICAgICAgKyttX3NpemU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gdHJ5Q29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2Uoc3RkOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKTsKKworICAgIHJldHVybiBjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZTx0cmFp
dHM+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVuYW1lIFU+Ci12
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPjo6YXBwZW5kU2xvd0Nhc2UoVSYmIHZhbHVlKQordGVtcGxhdGU8QWxsb2NhdGlv
blRyYWl0cyB0cmFpdHMsIHR5cGVuYW1lIFU+Citib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6YXBwZW5kU2xvd0Nhc2Uo
VSYmIHZhbHVlKQogeworICAgIHN0YXRpY19hc3NlcnQodHJhaXRzID09IEFsbG9jYXRpb25UcmFp
dHM6OkNyYXNoT25GYWlsdXJlIHx8IHRyYWl0cyA9PSBBbGxvY2F0aW9uVHJhaXRzOjpSZXBvcnRG
YWlsdXJlKTsKICAgICBBU1NFUlQoc2l6ZSgpID09IGNhcGFjaXR5KCkpOwogCiAgICAgYXV0byBw
dHIgPSBjb25zdF9jYXN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PHR5cGVuYW1lIHN0ZDo6
cmVtb3ZlX3JlZmVyZW5jZTxVPjo6dHlwZT46OnR5cGUqPihzdGQ6OmFkZHJlc3NvZih2YWx1ZSkp
OwotICAgIHB0ciA9IGV4cGFuZENhcGFjaXR5KHNpemUoKSArIDEsIHB0cik7CisgICAgcHRyID0g
ZXhwYW5kQ2FwYWNpdHk8dHJhaXRzPihzaXplKCkgKyAxLCBwdHIpOworICAgIGlmIGNvbnN0ZXhw
ciAodHJhaXRzID09IEFsbG9jYXRpb25UcmFpdHM6OlJlcG9ydEZhaWx1cmUpIHsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFwdHIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAg
ICBBU1NFUlQoYmVnaW4oKSk7CiAKICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3Np
emUgKyAxKTsKICAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRy
KSk7CiAgICAgKyttX3NpemU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eSwgTWFsbG9jPjo6Y29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4u
IGFyZ3MpCit0ZW1wbGF0ZTxBbGxvY2F0aW9uVHJhaXRzIHRyYWl0cywgdHlwZW5hbWUuLi4gQXJn
cz4KK2Jvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5LCBNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShBcmdzJiYuLi4gYXJn
cykKIHsKKyAgICBzdGF0aWNfYXNzZXJ0KHRyYWl0cyA9PSBBbGxvY2F0aW9uVHJhaXRzOjpDcmFz
aE9uRmFpbHVyZSB8fCB0cmFpdHMgPT0gQWxsb2NhdGlvblRyYWl0czo6UmVwb3J0RmFpbHVyZSk7
CiAgICAgQVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgpKTsKIAotICAgIGV4cGFuZENhcGFjaXR5
KHNpemUoKSArIDEpOworICAgIGJvb2wgc3VjY2VzcyA9IGV4cGFuZENhcGFjaXR5PHRyYWl0cz4o
c2l6ZSgpICsgMSk7CisgICAgaWYgY29uc3RleHByICh0cmFpdHMgPT0gQWxsb2NhdGlvblRyYWl0
czo6UmVwb3J0RmFpbHVyZSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICBBU1NFUlQoYmVnaW4oKSk7CiAKICAg
ICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKICAgICBuZXcgKE5vdE51
bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiAgICAgKyttX3NpemU7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4K
LXRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5Q29uc3RydWN0QW5k
QXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4uIGFyZ3MpCi17Ci0gICAgQVNTRVJUKHNpemUoKSA9PSBj
YXBhY2l0eSgpKTsKLSAgICAKLSAgICBpZiAoVU5MSUtFTFkoIXRyeUV4cGFuZENhcGFjaXR5KHNp
emUoKSArIDEpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChiZWdpbigpKTsK
LSAgICAKLSAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKLSAgICBu
ZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAg
KyttX3NpemU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0MjMsNyArMTM4NSw3IEBAIGlu
bGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKIHsKICAgICBzaXplX3QgbmV3
U2l6ZSA9IG1fc2l6ZSArIHZhbC5zaXplKCk7CiAgICAgaWYgKG5ld1NpemUgPiBjYXBhY2l0eSgp
KQotICAgICAgICBleHBhbmRDYXBhY2l0eShuZXdTaXplKTsKKyAgICAgICAgZXhwYW5kQ2FwYWNp
dHk8QWxsb2NhdGlvblRyYWl0czo6Q3Jhc2hPbkZhaWx1cmU+KG5ld1NpemUpOwogICAgIGZvciAo
YXV0byYgaXRlbSA6IHZhbCkKICAgICAgICAgdW5jaGVja2VkQXBwZW5kKFdURk1vdmUoaXRlbSkp
OwogfQpAQCAtMTQzNSw3ICsxMzk3LDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SAogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9u
IDw9IHNpemUoKSk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSBtX3NpemUgKyBkYXRhU2l6ZTsKICAg
ICBpZiAobmV3U2l6ZSA+IGNhcGFjaXR5KCkpIHsKLSAgICAgICAgZGF0YSA9IGV4cGFuZENhcGFj
aXR5KG5ld1NpemUsIGRhdGEpOworICAgICAgICBkYXRhID0gZXhwYW5kQ2FwYWNpdHk8QWxsb2Nh
dGlvblRyYWl0czo6Q3Jhc2hPbkZhaWx1cmU+KG5ld1NpemUsIGRhdGEpOwogICAgICAgICBBU1NF
UlQoYmVnaW4oKSk7CiAgICAgfQogICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQpAQCAtMTQ1NSw3
ICsxNDE3LDcgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogCiAg
ICAgYXV0byBwdHIgPSBjb25zdF9jYXN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PHR5cGVu
YW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxVPjo6dHlwZT46OnR5cGUqPihzdGQ6OmFkZHJlc3Nv
Zih2YWx1ZSkpOwogICAgIGlmIChzaXplKCkgPT0gY2FwYWNpdHkoKSkgewotICAgICAgICBwdHIg
PSBleHBhbmRDYXBhY2l0eShzaXplKCkgKyAxLCBwdHIpOworICAgICAgICBwdHIgPSBleHBhbmRD
YXBhY2l0eTxBbGxvY2F0aW9uVHJhaXRzOjpDcmFzaE9uRmFpbHVyZT4oc2l6ZSgpICsgMSwgcHRy
KTsKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMjYzNjM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMDYtMjggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBoYW5kbGluZyBmb3IgYSBjYXNlIG9mIE9PTUUgaW4gQ1NTVG9r
ZW5pemVyIGFuZCBDU1NQYXJzZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTM3MDIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY0ODA4ODg5Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGNz
czMvb3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVyLmh0bWwKKworICAgICAgICAqIGNzcy9w
YXJzZXIvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VT
dXBwb3J0c0NvbmRpdGlvbik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckltcGw6OkNTU1BhcnNlckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VySW1wbDo6ZmFpbGVkIGNvbnN0KToKKyAgICAgICAgKiBj
c3MvcGFyc2VyL0NTU1BhcnNlckltcGwuaDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Rva2Vu
aXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb2tlbml6ZXI6OkNTU1Rva2VuaXplcik6
CisgICAgICAgICogY3NzL3BhcnNlci9DU1NUb2tlbml6ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Rva2VuaXplcjo6ZmFpbGVkIGNvbnN0KToKKwogMjAyMC0wNi0yOCAgR2VvZmZyZXkgR2Fy
ZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBpbml0aWFsaXplVGhyZWFk
aW5nIHRvIGluaXRpYWxpemUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNl
ci5jcHAJKHJldmlzaW9uIDI2MzYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykg
MjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgTmljaG9sYXMgU2hhbmtzIDx3ZWJraXRAbmlja3NoYW5rcy5jb20+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQpAQCAtODksNiArODksOCBAQCBSZWZQdHI8
U3R5bGVSdWxlS2V5ZnJhbWU+IENTU1BhcnNlcjo6cGFyCiBib29sIENTU1BhcnNlcjo6cGFyc2VT
dXBwb3J0c0NvbmRpdGlvbihjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikKIHsKICAgICBDU1NQYXJz
ZXJJbXBsIHBhcnNlcihtX2NvbnRleHQsIGNvbmRpdGlvbik7CisgICAgaWYgKHBhcnNlci5mYWls
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBDU1NTdXBwb3J0c1BhcnNl
cjo6c3VwcG9ydHNDb25kaXRpb24ocGFyc2VyLnRva2VuaXplcigpLT50b2tlblJhbmdlKCksIHBh
cnNlciwgQ1NTU3VwcG9ydHNQYXJzZXI6OkZvcldpbmRvd0NTUykgPT0gQ1NTU3VwcG9ydHNQYXJz
ZXI6OlN1cHBvcnRlZDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
YXJzZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1BhcnNlckltcGwuY3BwCShyZXZpc2lvbiAyNjM2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
Ly8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNzgsMTAgKzc4LDE3
IEBAIENTU1BhcnNlckltcGw6OkNTU1BhcnNlckltcGwoY29uc3QgQ1NTUGEKICAgICAsIG1fb2Jz
ZXJ2ZXJXcmFwcGVyKHdyYXBwZXIpCiB7CiAgICAgbV90b2tlbml6ZXIgPSB3cmFwcGVyID8gbWFr
ZVVuaXF1ZTxDU1NUb2tlbml6ZXI+KHN0cmluZywgKndyYXBwZXIpIDogbWFrZVVuaXF1ZTxDU1NU
b2tlbml6ZXI+KHN0cmluZyk7CisgICAgaWYgKG1fdG9rZW5pemVyLT5mYWlsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIGlmIChjb250ZXh0LmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCAmJiAh
d3JhcHBlciAmJiBzdHlsZVNoZWV0ICYmIHJ1bGVQYXJzaW5nID09IENTU1BhcnNlcjo6UnVsZVBh
cnNpbmc6OkRlZmVycmVkKQogICAgICAgICBtX2RlZmVycmVkUGFyc2VyID0gQ1NTRGVmZXJyZWRQ
YXJzZXI6OmNyZWF0ZShjb250ZXh0LCBzdHJpbmcsICpzdHlsZVNoZWV0KTsKIH0KIAorYm9vbCBD
U1NQYXJzZXJJbXBsOjpmYWlsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Rva2VuaXplci0+
ZmFpbGVkKCk7Cit9CisKIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQgQ1NTUGFyc2VySW1wbDo6cGFy
c2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQ1NTUGFyc2VySW1wbCBwYXJzZXIo
Y29udGV4dCwgc3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VySW1wbC5oCShyZXZpc2lvbiAyNjM2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1BhcnNlckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vIENvcHly
aWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
CiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTY3LDYgKzY3LDggQEAgY2xhc3Mg
Q1NTUGFyc2VySW1wbCB7CiBwdWJsaWM6CiAgICAgQ1NTUGFyc2VySW1wbChjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiwgY29uc3QgU3RyaW5nJiwgU3R5bGVTaGVldENvbnRlbnRzKiA9IG51bGxwdHIs
IENTU1BhcnNlck9ic2VydmVyV3JhcHBlciogPSBudWxscHRyLCBDU1NQYXJzZXI6OlJ1bGVQYXJz
aW5nID0gQ1NTUGFyc2VyOjpSdWxlUGFyc2luZzo6Tm9ybWFsKTsKIAorICAgIGJvb2wgZmFpbGVk
KCkgY29uc3Q7CisKICAgICBlbnVtIEFsbG93ZWRSdWxlc1R5cGUgewogICAgICAgICAvLyBBcyBw
ZXIgY3NzLXN5bnRheCwgY3NzLWNhc2NhZGUgYW5kIGNzcy1uYW1lc3BhY2VzLCBAY2hhcnNldCBy
dWxlcwogICAgICAgICAvLyBtdXN0IGNvbWUgZmlyc3QsIGZvbGxvd2VkIGJ5IEBpbXBvcnQgdGhl
biBAbmFtZXNwYWNlLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NUb2tlbml6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVG9rZW5p
emVyLmNwcAkocmV2aXNpb24gMjYzNjM1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8gQ29weXJp
Z2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8K
IC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNjYsNyArNjYsMTAgQEAgaW5saW5l
IENTU1Rva2VuaXplcjo6Q1NTVG9rZW5pemVyKFN0cmluZwogCiAgICAgLy8gVG8gYXZvaWQgcmVz
aXppbmcgd2UgZXJyIG9uIHRoZSBzaWRlIG9mIHJlc2VydmluZyB0b28gbXVjaCBzcGFjZS4KICAg
ICAvLyBNb3N0IHN0cmluZ3Mgd2UgdG9rZW5pemUgaGF2ZSBhYm91dCAzLjUgdG8gNSBjaGFyYWN0
ZXJzIHBlciB0b2tlbi4KLSAgICBtX3Rva2Vucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmlu
Zy5sZW5ndGgoKSAvIDMpOworICAgIGlmIChVTkxJS0VMWSghbV90b2tlbnMudHJ5UmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkgLyAzKSkpIHsKKyAgICAgICAgbV9mYWlsZWQg
PSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
MDsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNzcsNyArODAsMTAgQEAgaW5saW5lIENTU1Rva2Vu
aXplcjo6Q1NTVG9rZW5pemVyKFN0cmluZwogICAgICAgICAgICAgaWYgKHdyYXBwZXIpCiAgICAg
ICAgICAgICAgICAgd3JhcHBlci0+YWRkQ29tbWVudChvZmZzZXQsIG1faW5wdXQub2Zmc2V0KCks
IG1fdG9rZW5zLnNpemUoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3Rva2Vu
cy5hcHBlbmQodG9rZW4pOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3Rva2Vucy50cnlB
cHBlbmQodG9rZW4pKSkgeworICAgICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAod3JhcHBl
cikKICAgICAgICAgICAgICAgICB3cmFwcGVyLT5hZGRUb2tlbihvZmZzZXQpOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Rva2VuaXplci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVG9rZW5pemVyLmgJKHJldmlzaW9u
IDI2MzYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVG9rZW5pemVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21p
dW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwogLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCkBAIC00OCw2ICs0OCw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBDU1NU
b2tlbml6ZXIoY29uc3QgU3RyaW5nJik7CiAgICAgQ1NTVG9rZW5pemVyKGNvbnN0IFN0cmluZyYs
IENTU1BhcnNlck9ic2VydmVyV3JhcHBlciYpOyAvLyBGb3IgdGhlIGluc3BlY3RvcgogCisgICAg
Ym9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQorCiAgICAgQ1NTUGFyc2Vy
VG9rZW5SYW5nZSB0b2tlblJhbmdlKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgdG9rZW5Db3VudCgp
OwogCkBAIC0xMjUsNiArMTI3LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q1NTUGFyc2VyVG9r
ZW4sIDMyPiBtX3Rva2VuczsKICAgICAvLyBXZSBvbmx5IGFsbG9jYXRlIHN0cmluZ3Mgd2hlbiBl
c2NhcGVzIGFyZSB1c2VkLgogICAgIFZlY3RvcjxTdHJpbmc+IG1fc3RyaW5nUG9vbDsKKyAgICBi
b29sIG1fZmFpbGVkIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI2MzYzNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIwLTA2LTI4ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaGFuZGxpbmcgZm9yIGEgY2FzZSBvZiBPT01FIGlu
IENTU1Rva2VuaXplciBhbmQgQ1NTUGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NDgw
ODg4OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGNzczMvb3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10b2tlbml6ZXIuaHRtbDogQWRk
ZWQuCisKIDIwMjAtMDYtMjggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAg
ICAgICAgIE1lZGlhUmVjb3JkZXIgc3RvcFJlY29yZGVyKCkgcmV0dXJucyBlbXB0eSBCbG9iIGFm
dGVyIGZpcnN0IHVzZQpJbmRleDogTGF5b3V0VGVzdHMvY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNz
cy10b2tlbml6ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NzczMv
b3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVyLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy9jc3MzL291dC1vZi1tZW1vcnktaW4tY3NzLXRva2VuaXplci1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1IEBACitsYXllciBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0
ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0CkluZGV4
OiBMYXlvdXRUZXN0cy9jc3MzL291dC1vZi1tZW1vcnktaW4tY3NzLXRva2VuaXplci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NzczMvb3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5p
emVyLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvY3NzMy9vdXQtb2YtbWVtb3J5
LWluLWNzcy10b2tlbml6ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKKzxz
Y3JpcHQ+CitDU1Muc3VwcG9ydHMoJ2EnLnJlcGVhdCgyKioyOSArIDEpKTsKKzwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403136</attachid>
            <date>2020-06-29 16:42:03 -0700</date>
            <delta_ts>2020-06-29 22:22:45 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-213702.patch</filename>
            <type>text/plain</type>
            <size>41429</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM2MzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDIwLTA2LTI4ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaGFuZGxpbmcgZm9yIGEgY2FzZSBvZiBPT01FIGlu
IENTU1Rva2VuaXplciBhbmQgQ1NTUGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NDgw
ODg4OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAx
LiBBZGRlZCBGYWlsdXJlQWN0aW9uIHNvIHRoYXQgd2UgY2FuIHBhcmFtZXRlcml6ZSBob3cgd2Ug
d2FudCB0byBoYW5kbGUgZmFpbHVyZXMuCisgICAgICAgICAgIEluIHRoaXMgcGF0Y2gsIHdlJ3Jl
IG9ubHkgdXNpbmcgdGhpcyBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlcywgYnV0IHdlIGNvdWxkCisg
ICAgICAgICAgIHRlY2huaWNhbGx5IGFwcGx5IHRoaXMgdG8gb3RoZXIgdHlwZXMgb2YgZmFpbHVy
ZXMgYXMgd2VsbC4KKworICAgICAgICAyLiBBcHBseSBGYWlsdXJlQWN0aW9uIHRvIG1hbnkgbWV0
aG9kcyBpbiBWZWN0b3IgKGFuZCBpdHMgc3VwZXIgY2xhc3Nlcykgc28gdGhhdAorICAgICAgICAg
ICB3ZSBjYW4gc3RhcnQgZGUtZHVwbGljYXRpbmcgY29kZS4gIFByZXZpb3VzbHksIHdlIHdlcmUg
YWx3YXlzIGR1cGxpY2F0aW5nIGNvZGUKKyAgICAgICAgICAganVzdCB0byBoYXZlIGEgInRyeSIg
dmVyc2lvbiBvZiB0aGUgc2FtZSBtZXRob2QgdGhhdCByZXBvcnRzIHRoZSBmYWlsdXJlIHRvCisg
ICAgICAgICAgIGFsbG9jYXRlIGluc3RlYWQgb2YgY3Jhc2hpbmcuICBXZSBjYW4gbm93IHBhcmFt
ZXRlcml6ZSBhbGwgdGhlc2UgbWV0aG9kcyBvbiBhCisgICAgICAgICAgIEZhaWx1cmVBY3Rpb24g
dGVtcGxhdGUgcGFyYW1ldGVyIGluc3RlYWQsIGFuZCBhdm9pZCB0aGUgY29kZSBkdXBsaWNhdGlv
bi4KKyAgICAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJldmVyc2VzIHNvbWUgb2YgdGhlIGV4aXN0
aW5nIGNvZGUgZHVwbGljYXRpb24uCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0Zh
aWx1cmVBY3Rpb24uaDogQWRkZWQuCisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAo
V1RGOjpWZWN0b3JCdWZmZXJCYXNlOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlZl
Y3RvckJ1ZmZlckJhc2U6OnRyeUFsbG9jYXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9y
QnVmZmVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlZlY3RvckJ1ZmZlcjo6dHJ5
QWxsb2NhdGVCdWZmZXIpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OnJlc2VydmVDYXBhY2l0eSk6
CisgICAgICAgIChXVEY6OlZlY3Rvcjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KToKKyAgICAgICAgKFdU
Rjo6VmVjdG9yOjpyZXNlcnZlSW5pdGlhbENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6VmVjdG9y
Ojp0cnlSZXNlcnZlSW5pdGlhbENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6VmVjdG9yOjphcHBl
bmQpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OnRyeUFwcGVuZCk6CisgICAgICAgIChXVEY6OlZl
Y3Rvcjo6Y29uc3RydWN0QW5kQXBwZW5kKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjp0cnlDb25z
dHJ1Y3RBbmRBcHBlbmQpOgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpleHBhbmRDYXBhY2l0eSk6
CisgICAgICAgIChXVEY6Ok1hbGxvYz46OnJlc2l6ZSk6CisgICAgICAgIChXVEY6Ok1hbGxvYz46
Omdyb3cpOgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpyZXNlcnZlQ2FwYWNpdHkpOgorICAgICAg
ICAoV1RGOjpNYWxsb2M+OjpyZXNlcnZlSW5pdGlhbENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6
TWFsbG9jPjo6YXBwZW5kKToKKyAgICAgICAgKFdURjo6TWFsbG9jPjo6Y29uc3RydWN0QW5kQXBw
ZW5kKToKKyAgICAgICAgKFdURjo6TWFsbG9jPjo6YXBwZW5kU2xvd0Nhc2UpOgorICAgICAgICAo
V1RGOjpNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6
Ok1hbGxvYz46OmFwcGVuZFZlY3Rvcik6CisgICAgICAgIChXVEY6Ok1hbGxvYz46Omluc2VydCk6
CisgICAgICAgIChXVEY6Ok1hbGxvYz46OnRyeUV4cGFuZENhcGFjaXR5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6TWFsbG9jPjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6TWFsbG9jPjo6dHJ5QXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFs
bG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFs
bG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UpOiBEZWxldGVkLgorCiAyMDIwLTA2
LTI4ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1l
IGluaXRpYWxpemVUaHJlYWRpbmcgdG8gaW5pdGlhbGl6ZQpJbmRleDogU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjM2MzUpCisrKyBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NTgsNiAr
NzU4LDcgQEAKIAkJRkU4NkE4NzQxRTU5NDQwMjAwMTExQkJGIC8qIEZvcmJpZEhlYXBBbGxvY2F0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcmJpZEhlYXBBbGxvY2F0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFODkyNUFGMUQwMERBRUMwMDQ2
OTA3RSAvKiBJbmRlbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRl
bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk3RjZBODI0NUNFNUREMDBD
NjNGQzYgLyogU3RkSW50RXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0ZEludEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTk5NkI1MjI0
QTg0NUFGMDAxRDJFNjMgLyogRmFpbHVyZUFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGYWlsdXJlQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFQjZCMDM1MjAxQkUwQjYwMEI5NThDMSAvKiBQb2ludGVyUHJlcGFyYXRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJQcmVwYXJhdGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNr
U3RhdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tTdGF0
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREFDRDNDMTYzMEY4M0YwMEM2
OTYzNCAvKiBTdGFja1N0YXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
YWNrU3RhdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMTcsNiArMTAxOCw3
IEBACiAJCQkJMUFFQTg4RTExRDZCQkNGNDAwRTVBRDY0IC8qIEVudW1UcmFpdHMuaCAqLywKIAkJ
CQlBRDdDNDM0QTFERDJBNEE3MDAyNjg4OEIgLyogRXhwZWN0ZWQuaCAqLywKIAkJCQlBOEE0NzI5
RjE1MUE4MjVBMDA0MTIzRkYgLyogRXhwb3J0TWFjcm9zLmggKi8sCisJCQkJRkU5OTZCNTIyNEE4
NDVBRjAwMUQyRTYzIC8qIEZhaWx1cmVBY3Rpb24uaCAqLywKIAkJCQkwRjdDNUZCNTFEODg1Q0Yy
MDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi8sCiAJCQkJMEZEODFBQzQxNTRGQjIyRTAw
OTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLywKIAkJCQlBOEE0NzJBMTE1MUE4MjVBMDA0MTIz
RkYgLyogRmFzdE1hbGxvYy5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNp
b24gMjYzNjM1KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDYgKzYyLDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIEVudW1UcmFp
dHMuaAogICAgIEV4cGVjdGVkLmgKICAgICBFeHBvcnRNYWNyb3MuaAorICAgIEZhaWx1cmVBY3Rp
b24uaAogICAgIEZhc3RCaXRWZWN0b3IuaAogICAgIEZhc3RNYWxsb2MuaAogICAgIEZhc3RUTFMu
aApJbmRleDogU291cmNlL1dURi93dGYvRmFpbHVyZUFjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0ZhaWx1cmVBY3Rpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9GYWlsdXJlQWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKworZW51bSBjbGFzcyBG
YWlsdXJlQWN0aW9uIHsKKyAgICBDcmFzaCwKKyAgICBSZXBvcnQKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvVmVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDI2MzYzNSkKKysrIFNvdXJjZS9XVEYvd3Rm
L1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDx0eXBlX3RyYWl0
cz4KICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5o
PgorI2luY2x1ZGUgPHd0Zi9GYWlsdXJlQWN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIu
aD4KQEAgLTI4MiwzMSArMjgzLDM1IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE1h
bGxvYz4KIGNsYXNzIFZlY3RvckJ1ZmZlckJhc2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFZlY3RvckJ1ZmZlckJhc2UpOwogcHVibGljOgotICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoc2l6
ZV90IG5ld0NhcGFjaXR5KQorICAgIHRlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uPgorICAg
IGJvb2wgYWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KQogICAgIHsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6Q3Jhc2ggfHwgYWN0aW9uID09
IEZhaWx1cmVBY3Rpb246OlJlcG9ydCk7CiAgICAgICAgIEFTU0VSVChuZXdDYXBhY2l0eSk7Ci0g
ICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSAvIHNpemVvZihUKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIHNpemVfdCBz
aXplVG9BbGxvY2F0ZSA9IG5ld0NhcGFjaXR5ICogc2l6ZW9mKFQpOwotICAgICAgICBtX2NhcGFj
aXR5ID0gc2l6ZVRvQWxsb2NhdGUgLyBzaXplb2YoVCk7Ci0gICAgICAgIG1fYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8VCo+KE1hbGxvYzo6bWFsbG9jKHNpemVUb0FsbG9jYXRlKSk7Ci0gICAgfQotCi0g
ICAgYm9vbCB0cnlBbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCi0gICAgewotICAg
ICAgICBBU1NFUlQobmV3Q2FwYWNpdHkpOwotICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyBzaXplb2YoVCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHNpemVvZihUKSkgeworICAgICAgICAgICAgaWYgY29u
c3RleHByIChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6Q3Jhc2gpCisgICAgICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KIAogICAgICAgICBzaXplX3Qgc2l6ZVRvQWxsb2NhdGUgPSBuZXdDYXBhY2l0
eSAqIHNpemVvZihUKTsKLSAgICAgICAgVCogbmV3QnVmZmVyID0gc3RhdGljX2Nhc3Q8VCo+KE1h
bGxvYzo6dHJ5TWFsbG9jKHNpemVUb0FsbG9jYXRlKSk7Ci0gICAgICAgIGlmICghbmV3QnVmZmVy
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBUKiBuZXdCdWZmZXIgPSBudWxs
cHRyOworICAgICAgICBpZiBjb25zdGV4cHIgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFz
aCkKKyAgICAgICAgICAgIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihNYWxsb2M6Om1hbGxv
YyhzaXplVG9BbGxvY2F0ZSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5ld0J1ZmZl
ciA9IHN0YXRpY19jYXN0PFQqPihNYWxsb2M6OnRyeU1hbGxvYyhzaXplVG9BbGxvY2F0ZSkpOwor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFuZXdCdWZmZXIpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgICAgICBtX2NhcGFjaXR5ID0gc2l6ZVRvQWxsb2Nh
dGUgLyBzaXplb2YoVCk7CiAgICAgICAgIG1fYnVmZmVyID0gbmV3QnVmZmVyOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWxsb2NhdGVCdWZm
ZXIoc2l6ZV90IG5ld0NhcGFjaXR5KSB7IGFsbG9jYXRlQnVmZmVyPEZhaWx1cmVBY3Rpb246OkNy
YXNoPihuZXdDYXBhY2l0eSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5QWxsb2NhdGVC
dWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KSB7IHJldHVybiBhbGxvY2F0ZUJ1ZmZlcjxGYWlsdXJl
QWN0aW9uOjpSZXBvcnQ+KG5ld0NhcGFjaXR5KTsgfQorCiAgICAgYm9vbCBzaG91bGRSZWFsbG9j
YXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBWZWN0b3JUcmFpdHM8VD46OmNhbk1vdmVXaXRoTWVtY3B5ICYmIG1fY2FwYWNpdHkgJiYgbmV3
Q2FwYWNpdHk7CkBAIC00NTcsMjYgKzQ2MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIGRlYWxsb2Nh
dGVCdWZmZXIoYnVmZmVyKCkpOwogICAgIH0KIAotICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoc2l6
ZV90IG5ld0NhcGFjaXR5KQorICAgIHRlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uPgorICAg
IGJvb2wgYWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KQogICAgIHsKICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIEFTU0VSVCghbV9idWZmZXIpIHRvIGNhdGNoIG1pc3VzZS9s
ZWFrcy4KICAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gaW5saW5lQ2FwYWNpdHkpCi0gICAgICAg
ICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgbV9idWZmZXIgPSBpbmxpbmVCdWZmZXIoKTsKLSAgICAgICAgICAgIG1fY2Fw
YWNpdHkgPSBpbmxpbmVDYXBhY2l0eTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgdHJ5
QWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KQotICAgIHsKLSAgICAgICAgaWYgKG5l
d0NhcGFjaXR5ID4gaW5saW5lQ2FwYWNpdHkpCi0gICAgICAgICAgICByZXR1cm4gQmFzZTo6dHJ5
QWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOworICAgICAgICAgICAgcmV0dXJuIEJhc2U6OnRl
bXBsYXRlIGFsbG9jYXRlQnVmZmVyPGFjdGlvbj4obmV3Q2FwYWNpdHkpOwogICAgICAgICBtX2J1
ZmZlciA9IGlubGluZUJ1ZmZlcigpOwogICAgICAgICBtX2NhcGFjaXR5ID0gaW5saW5lQ2FwYWNp
dHk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpIHsgYWxsb2NhdGVCdWZmZXI8RmFp
bHVyZUFjdGlvbjo6Q3Jhc2g+KG5ld0NhcGFjaXR5KTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9v
bCB0cnlBbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpIHsgcmV0dXJuIGFsbG9jYXRl
QnVmZmVyPEZhaWx1cmVBY3Rpb246OlJlcG9ydD4obmV3Q2FwYWNpdHkpOyB9CisKICAgICB2b2lk
IGRlYWxsb2NhdGVCdWZmZXIoVCogYnVmZmVyVG9EZWFsbG9jYXRlKQogICAgIHsKICAgICAgICAg
aWYgKGJ1ZmZlclRvRGVhbGxvY2F0ZSA9PSBpbmxpbmVCdWZmZXIoKSkKQEAgLTc2MSw5ICs3NjAs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgZ3JvdyhzaXplX3Qgc2l6ZSk7CiAgICAgdm9pZCByZXNp
emUoc2l6ZV90IHNpemUpOwogICAgIHZvaWQgcmVzaXplVG9GaXQoc2l6ZV90IHNpemUpOwotICAg
IHZvaWQgcmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSk7Ci0gICAgYm9vbCB0cnlS
ZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsKLSAgICB2b2lkIHJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRpYWxDYXBhY2l0eSk7CisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpIHsgcmVzZXJ2ZUNhcGFjaXR5
PEZhaWx1cmVBY3Rpb246OkNyYXNoPihuZXdDYXBhY2l0eSk7IH0KKyAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgdHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkgeyByZXR1cm4gcmVz
ZXJ2ZUNhcGFjaXR5PEZhaWx1cmVBY3Rpb246OlJlcG9ydD4obmV3Q2FwYWNpdHkpOyB9CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRpYWxD
YXBhY2l0eSkgeyByZXNlcnZlSW5pdGlhbENhcGFjaXR5PEZhaWx1cmVBY3Rpb246OkNyYXNoPihp
bml0aWFsQ2FwYWNpdHkpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHRyeVJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRpYWxDYXBhY2l0eSkgeyByZXR1cm4gcmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eTxGYWlsdXJlQWN0aW9uOjpSZXBvcnQ+KGluaXRpYWxDYXBhY2l0eSk7IH0KICAg
ICB2b2lkIHNocmlua0NhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSk7CiAgICAgdm9pZCBzaHJp
bmtUb0ZpdCgpIHsgc2hyaW5rQ2FwYWNpdHkoc2l6ZSgpKTsgfQogCkBAIC03NzIsMTggKzc3Miwx
OSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IFZlY3RvcjxVPiBpc29s
YXRlZENvcHkoKSBjb25zdDsKIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoVmFsdWVU
eXBlJiYgdmFsdWUpIHsgYXBwZW5kPFZhbHVlVHlwZT4oc3RkOjpmb3J3YXJkPFZhbHVlVHlwZT4o
dmFsdWUpKTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4gdm9pZCBjb25zdHJ1Y3RBbmRBcHBlbmQoQXJn
cyYmLi4uKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiBib29sIHRyeUNvbnN0cnVj
dEFuZEFwcGVuZChBcmdzJiYuLi4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IEFMV0FZU19J
TkxJTkUgdm9pZCBhcHBlbmQoVSYmIHUpIHsgYXBwZW5kPEZhaWx1cmVBY3Rpb246OkNyYXNoLCBV
PihzdGQ6OmZvcndhcmQ8VT4odSkpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQUxXQVlT
X0lOTElORSBib29sIHRyeUFwcGVuZChVJiYgdSkgeyByZXR1cm4gYXBwZW5kPEZhaWx1cmVBY3Rp
b246OlJlcG9ydCwgVT4oc3RkOjpmb3J3YXJkPFU+KHUpKTsgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3M+IEFMV0FZU19JTkxJTkUgdm9pZCBjb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYm
Li4uIGFyZ3MpIHsgY29uc3RydWN0QW5kQXBwZW5kPEZhaWx1cmVBY3Rpb246OkNyYXNoPihzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
cz4gQUxXQVlTX0lOTElORSBib29sIHRyeUNvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYuLi4gYXJn
cykgeyByZXR1cm4gY29uc3RydWN0QW5kQXBwZW5kPEZhaWx1cmVBY3Rpb246OlJlcG9ydD4oc3Rk
Ojpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsgfQogCiAgICAgdm9pZCB1bmNoZWNrZWRBcHBlbmQo
VmFsdWVUeXBlJiYgdmFsdWUpIHsgdW5jaGVja2VkQXBwZW5kPFZhbHVlVHlwZT4oc3RkOjpmb3J3
YXJkPFZhbHVlVHlwZT4odmFsdWUpKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQg
dW5jaGVja2VkQXBwZW5kKFUmJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4gdm9p
ZCB1bmNoZWNrZWRDb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYmLi4uKTsKIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKGNvbnN0IFUqLCBzaXplX3QpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoY29uc3QgVSogdSwgc2l6ZV90
IHNpemUpIHsgYXBwZW5kPEZhaWx1cmVBY3Rpb246OkNyYXNoPih1LCBzaXplKTsgfQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IEFMV0FZU19JTkxJTkUgYm9vbCB0cnlBcHBlbmQoY29uc3QgVSog
dSwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIGFwcGVuZDxGYWlsdXJlQWN0aW9uOjpSZXBvcnQ+KHUs
IHNpemUpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IG90aGVyQ2FwYWNpdHk+
IHZvaWQgYXBwZW5kVmVjdG9yKGNvbnN0IFZlY3RvcjxVLCBvdGhlckNhcGFjaXR5PiYpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBvdGhlckNhcGFjaXR5PiB2b2lkIGFwcGVuZFZl
Y3RvcihWZWN0b3I8VSwgb3RoZXJDYXBhY2l0eT4mJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gYm9vbCB0cnlBcHBlbmQoY29uc3QgVSosIHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiB2b2lkIGluc2VydChzaXplX3QgcG9zaXRpb24sIGNvbnN0IFUqLCBzaXplX3QpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgaW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgVSYm
KTsKQEAgLTgzNywxNCArODM4LDE4IEBAIHB1YmxpYzoKICAgICBib29sIGlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zaXplID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZGVjbHR5cGUobV9zaXplKT46Om1heCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBleHBhbmRD
YXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHkpOwotICAgIFQqIGV4cGFuZENhcGFjaXR5KHNp
emVfdCBuZXdNaW5DYXBhY2l0eSwgVCopOwotICAgIGJvb2wgdHJ5RXhwYW5kQ2FwYWNpdHkoc2l6
ZV90IG5ld01pbkNhcGFjaXR5KTsKLSAgICBjb25zdCBUKiB0cnlFeHBhbmRDYXBhY2l0eShzaXpl
X3QgbmV3TWluQ2FwYWNpdHksIGNvbnN0IFQqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBV
KiBleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFUqKTsgCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmRTbG93Q2FzZShVJiYpOwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3M+IHZvaWQgY29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4u
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiBib29sIHRyeUNvbnN0cnVjdEFuZEFw
cGVuZFNsb3dDYXNlKEFyZ3MmJi4uLik7CisgICAgdGVtcGxhdGU8RmFpbHVyZUFjdGlvbj4gYm9v
bCByZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsKKyAgICB0ZW1wbGF0ZTxGYWls
dXJlQWN0aW9uPiBib29sIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRpYWxDYXBh
Y2l0eSk7CisKKyAgICB0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uPiBib29sIGV4cGFuZENhcGFjaXR5
KHNpemVfdCBuZXdNaW5DYXBhY2l0eSk7CisgICAgdGVtcGxhdGU8RmFpbHVyZUFjdGlvbj4gVCog
ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBUKik7CisgICAgdGVtcGxhdGU8
RmFpbHVyZUFjdGlvbiwgdHlwZW5hbWUgVT4gVSogZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01p
bkNhcGFjaXR5LCBVKik7CisgICAgdGVtcGxhdGU8RmFpbHVyZUFjdGlvbiwgdHlwZW5hbWUgVT4g
Ym9vbCBhcHBlbmRTbG93Q2FzZShVJiYpOworICAgIHRlbXBsYXRlPEZhaWx1cmVBY3Rpb24sIHR5
cGVuYW1lLi4uIEFyZ3M+IGJvb2wgY29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLik7CisgICAg
dGVtcGxhdGU8RmFpbHVyZUFjdGlvbiwgdHlwZW5hbWUuLi4gQXJncz4gYm9vbCBjb25zdHJ1Y3RB
bmRBcHBlbmRTbG93Q2FzZShBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGU8RmFpbHVyZUFjdGlv
biwgdHlwZW5hbWUgVT4gYm9vbCBhcHBlbmQoVSYmKTsKKyAgICB0ZW1wbGF0ZTxGYWlsdXJlQWN0
aW9uLCB0eXBlbmFtZSBVPiBib29sIGFwcGVuZChjb25zdCBVKiwgc2l6ZV90KTsKIAogICAgIHRl
bXBsYXRlPHNpemVfdCBwb3NpdGlvbiwgdHlwZW5hbWUgVSwgdHlwZW5hbWUuLi4gSXRlbXM+CiAg
ICAgdm9pZCB1bmNoZWNrZWRJbml0aWFsaXplKFUmJiBpdGVtLCBJdGVtcyYmLi4uIGl0ZW1zKQpA
QCAtMTA0Myw0OCArMTA0OCw0NCBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dICiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1h
bGxvYz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5LCBNYWxsb2M+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHkp
Cit0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uIGFjdGlvbj4KK2Jvb2wgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpleHBhbmRDYXBh
Y2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHkpCiB7Ci0gICAgcmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6
bWF4KG5ld01pbkNhcGFjaXR5LCBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KG1pbkNhcGFj
aXR5KSwgY2FwYWNpdHkoKSArIGNhcGFjaXR5KCkgLyA0ICsgMSkpKTsKKyAgICByZXR1cm4gcmVz
ZXJ2ZUNhcGFjaXR5PGFjdGlvbj4oc3RkOjptYXgobmV3TWluQ2FwYWNpdHksIHN0ZDo6bWF4KHN0
YXRpY19jYXN0PHNpemVfdD4obWluQ2FwYWNpdHkpLCBjYXBhY2l0eSgpICsgY2FwYWNpdHkoKSAv
IDQgKyAxKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFt
ZSBNYWxsb2M+Cit0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uIGFjdGlvbj4KIE5FVkVSX0lOTElORSBU
KiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHks
IE1hbGxvYz46OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVCogcHRyKQog
eworICAgIHN0YXRpY19hc3NlcnQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OkNyYXNoIHx8IGFj
dGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpOwogICAgIGlmIChwdHIgPCBiZWdpbigpIHx8
IHB0ciA+PSBlbmQoKSkgewotICAgICAgICBleHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSk7
CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGV4cGFuZENhcGFjaXR5PGFjdGlvbj4obmV3TWluQ2Fw
YWNpdHkpOworICAgICAgICBpZiBjb25zdGV4cHIgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpS
ZXBvcnQpIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHB0cjsKICAg
ICB9CiAgICAgc2l6ZV90IGluZGV4ID0gcHRyIC0gYmVnaW4oKTsKLSAgICBleHBhbmRDYXBhY2l0
eShuZXdNaW5DYXBhY2l0eSk7Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyBpbmRleDsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotYm9vbCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxv
Yz46OnRyeUV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSkKLXsKLSAgICByZXR1
cm4gdHJ5UmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6bWF4KG5ld01pbkNhcGFjaXR5LCBzdGQ6Om1heChz
dGF0aWNfY2FzdDxzaXplX3Q+KG1pbkNhcGFjaXR5KSwgY2FwYWNpdHkoKSArIGNhcGFjaXR5KCkg
LyA0ICsgMSkpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5h
bWUgTWFsbG9jPgotY29uc3QgVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlFeHBhbmRDYXBhY2l0eShzaXplX3QgbmV3
TWluQ2FwYWNpdHksIGNvbnN0IFQqIHB0cikKLXsKLSAgICBpZiAocHRyIDwgYmVnaW4oKSB8fCBw
dHIgPj0gZW5kKCkpIHsKLSAgICAgICAgaWYgKCF0cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBh
Y2l0eSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIHB0cjsKKyAgICBi
b29sIHN1Y2Nlc3MgPSBleHBhbmRDYXBhY2l0eTxhY3Rpb24+KG5ld01pbkNhcGFjaXR5KTsKKyAg
ICBpZiBjb25zdGV4cHIgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KLSAgICBzaXplX3QgaW5kZXggPSBwdHIgLSBiZWdpbigpOwotICAgIGlmICghdHJ5RXhw
YW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpKQotICAgICAgICByZXR1cm4gMDsKICAgICByZXR1
cm4gYmVnaW4oKSArIGluZGV4OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVPgordGVtcGxhdGU8RmFpbHVy
ZUFjdGlvbiBhY3Rpb24sIHR5cGVuYW1lIFU+CiBpbmxpbmUgVSogVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpleHBhbmRDYXBh
Y2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFUqIHB0cikKIHsKLSAgICBleHBhbmRDYXBhY2l0
eShuZXdNaW5DYXBhY2l0eSk7CisgICAgc3RhdGljX2Fzc2VydChhY3Rpb24gPT0gRmFpbHVyZUFj
dGlvbjo6Q3Jhc2ggfHwgYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJlcG9ydCk7CisgICAgYm9v
bCBzdWNjZXNzID0gZXhwYW5kQ2FwYWNpdHk8YWN0aW9uPihuZXdNaW5DYXBhY2l0eSk7CisgICAg
aWYgY29uc3RleHByIChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0KSB7CisgICAgICAg
IGlmIChVTkxJS0VMWSghc3VjY2VzcykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CiAgICAgcmV0dXJuIHB0cjsKIH0KIApAQCAtMTA5Niw3ICsxMDk3LDcgQEAgaW5saW5lIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogICAgICAgICBhc2FuQnVmZmVyU2l6ZVdp
bGxDaGFuZ2VUbyhzaXplKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc2l6ZSA+IGNhcGFj
aXR5KCkpCi0gICAgICAgICAgICBleHBhbmRDYXBhY2l0eShzaXplKTsKKyAgICAgICAgICAgIGV4
cGFuZENhcGFjaXR5PEZhaWx1cmVBY3Rpb246OkNyYXNoPihzaXplKTsKICAgICAgICAgYXNhbkJ1
ZmZlclNpemVXaWxsQ2hhbmdlVG8oc2l6ZSk7CiAgICAgICAgIGlmIChiZWdpbigpKQogICAgICAg
ICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemVJZk5vblBPRChlbmQoKSwgYmVnaW4oKSAr
IHNpemUpOwpAQCAtMTEyNiw3ICsxMTI3LDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SAogewogICAgIEFTU0VSVChzaXplID49IG1fc2l6ZSk7CiAgICAgaWYgKHNp
emUgPiBjYXBhY2l0eSgpKQotICAgICAgICBleHBhbmRDYXBhY2l0eShzaXplKTsKKyAgICAgICAg
ZXhwYW5kQ2FwYWNpdHk8RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KHNpemUpOwogICAgIGFzYW5CdWZm
ZXJTaXplV2lsbENoYW5nZVRvKHNpemUpOwogICAgIGlmIChiZWdpbigpKQogICAgICAgICBUeXBl
T3BlcmF0aW9uczo6aW5pdGlhbGl6ZUlmTm9uUE9EKGVuZCgpLCBiZWdpbigpICsgc2l6ZSk7CkBA
IC0xMTc4LDI3ICsxMTc5LDEwIEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3YKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFs
bG9jPgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHksIE1hbGxvYz46OnJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCi17
Ci0gICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBUKiBvbGRCdWZmZXIgPSBiZWdpbigpOwotICAgIFQqIG9sZEVuZCA9IGVuZCgpOwotCi0gICAg
YXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eSgpOwotCi0gICAgQmFzZTo6YWxsb2NhdGVC
dWZmZXIobmV3Q2FwYWNpdHkpOwotICAgIEFTU0VSVChiZWdpbigpKTsKLQotICAgIGFzYW5TZXRJ
bml0aWFsQnVmZmVyU2l6ZVRvKHNpemUoKSk7Ci0KLSAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShv
bGRCdWZmZXIsIG9sZEVuZCwgYmVnaW4oKSk7Ci0gICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihv
bGRCdWZmZXIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFt
ZSBNYWxsb2M+Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBh
Y2l0eSkKK3RlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uPgorYm9vbCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnJlc2Vy
dmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCiB7CisgICAgc3RhdGljX2Fzc2VydChhY3Rp
b24gPT0gRmFpbHVyZUFjdGlvbjo6Q3Jhc2ggfHwgYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJl
cG9ydCk7CiAgICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7CkBAIC0xMjA2LDkgKzExOTAsMTIg
QEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogCiAgICAgYXNhblNl
dEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eSgpOwogCi0gICAgaWYgKCFCYXNlOjp0cnlBbGxvY2F0
ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpIHsKLSAgICAgICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXpl
VG8oc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgc3VjY2VzcyA9IEJh
c2U6OnRlbXBsYXRlIGFsbG9jYXRlQnVmZmVyPGFjdGlvbj4obmV3Q2FwYWNpdHkpOworICAgIGlm
IGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJlcG9ydCkgeworICAgICAgICBp
ZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKSB7CisgICAgICAgICAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZl
clNpemVUbyhzaXplKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAg
ICAgfQogICAgIEFTU0VSVChiZWdpbigpKTsKIApAQCAtMTIyMCwxMiArMTIwNywxNSBAQCBib29s
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KQordGVtcGxhdGU8
RmFpbHVyZUFjdGlvbiBhY3Rpb24+CitpbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoc2l6ZV90IGluaXRpYWxDYXBhY2l0eSkKIHsKKyAgICBzdGF0aWNfYXNzZXJ0KGFj
dGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCB8fCBhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6
UmVwb3J0KTsKICAgICBBU1NFUlQoIW1fc2l6ZSk7CiAgICAgQVNTRVJUKGNhcGFjaXR5KCkgPT0g
aW5saW5lQ2FwYWNpdHkpOwotICAgIGlmIChpbml0aWFsQ2FwYWNpdHkgPiBpbmxpbmVDYXBhY2l0
eSkKLSAgICAgICAgQmFzZTo6YWxsb2NhdGVCdWZmZXIoaW5pdGlhbENhcGFjaXR5KTsKKyAgICBp
ZiAoaW5pdGlhbENhcGFjaXR5IDw9IGlubGluZUNhcGFjaXR5KQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gQmFzZTo6dGVtcGxhdGUgYWxsb2NhdGVCdWZmZXI8YWN0aW9uPihpbml0
aWFsQ2FwYWNpdHkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBl
bmFtZSBNYWxsb2M+CkBAIC0xMjYwLDM1ICsxMjUwLDI1IEBAIHZvaWQgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0gKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVtcGxhdGU8dHlwZW5hbWUgVT4KLUFMV0FZU19JTkxJTkUg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHksIE1hbGxvYz46OmFwcGVuZChjb25zdCBVKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCit0ZW1w
bGF0ZTxGYWlsdXJlQWN0aW9uIGFjdGlvbiwgdHlwZW5hbWUgVT4KK0FMV0FZU19JTkxJTkUgYm9v
bCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHks
IE1hbGxvYz46OmFwcGVuZChjb25zdCBVKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCiB7CisgICAg
c3RhdGljX2Fzc2VydChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6Q3Jhc2ggfHwgYWN0aW9uID09
IEZhaWx1cmVBY3Rpb246OlJlcG9ydCk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSBtX3NpemUgKyBk
YXRhU2l6ZTsKICAgICBpZiAobmV3U2l6ZSA+IGNhcGFjaXR5KCkpIHsKLSAgICAgICAgZGF0YSA9
IGV4cGFuZENhcGFjaXR5KG5ld1NpemUsIGRhdGEpOworICAgICAgICBkYXRhID0gZXhwYW5kQ2Fw
YWNpdHk8YWN0aW9uPihuZXdTaXplLCBkYXRhKTsKKyAgICAgICAgaWYgY29uc3RleHByIChhY3Rp
b24gPT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0KSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
IWRhdGEpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgICAg
ICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQotICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQotICAg
ICAgICBDUkFTSCgpOwotICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG5ld1NpemUpOwot
ICAgIFQqIGRlc3QgPSBlbmQoKTsKLSAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+
Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEsIHN0ZDo6YWRkcmVzc29mKGRhdGFb
ZGF0YVNpemVdKSwgZGVzdCk7Ci0gICAgbV9zaXplID0gbmV3U2l6ZTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLUFMV0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnRyeUFwcGVuZChjb25zdCBVKiBkYXRh
LCBzaXplX3QgZGF0YVNpemUpCi17Ci0gICAgc2l6ZV90IG5ld1NpemUgPSBtX3NpemUgKyBkYXRh
U2l6ZTsKLSAgICBpZiAobmV3U2l6ZSA+IGNhcGFjaXR5KCkpIHsKLSAgICAgICAgZGF0YSA9IHRy
eUV4cGFuZENhcGFjaXR5KG5ld1NpemUsIGRhdGEpOwotICAgICAgICBpZiAoIWRhdGEpCisgICAg
aWYgKG5ld1NpemUgPCBtX3NpemUpIHsKKyAgICAgICAgaWYgY29uc3RleHByIChhY3Rpb24gPT0g
RmFpbHVyZUFjdGlvbjo6Q3Jhc2gpCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICBlbHNl
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAg
ICB9Ci0gICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhuZXdTaXplKTsKICAgICBUKiBkZXN0ID0gZW5k
KCk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmlu
aXRpYWxpemVkQ29weShkYXRhLCBzdGQ6OmFkZHJlc3NvZihkYXRhW2RhdGFTaXplXSksIGRlc3Qp
OwpAQCAtMTI5NywzNiArMTI3NywyMiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlu
bGluZUNhcGFjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1l
IE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+
OjphcHBlbmQoVSYmIHZhbHVlKQordGVtcGxhdGU8RmFpbHVyZUFjdGlvbiBhY3Rpb24sIHR5cGVu
YW1lIFU+CitBTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjphcHBlbmQoVSYmIHZhbHVlKQogewog
ICAgIGlmIChzaXplKCkgIT0gY2FwYWNpdHkoKSkgewogICAgICAgICBhc2FuQnVmZmVyU2l6ZVdp
bGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKICAgICAgICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKICAgICAgICAgKyttX3NpemU7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhcHBlbmRTbG93Q2FzZShzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgot
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLUFMV0FZU19JTkxJTkUgdm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmNv
bnN0cnVjdEFuZEFwcGVuZChBcmdzJiYuLi4gYXJncykKLXsKLSAgICBpZiAoc2l6ZSgpICE9IGNh
cGFjaXR5KCkpIHsKLSAgICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsg
MSk7Ci0gICAgICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKTsKLSAgICAgICAgKyttX3NpemU7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgY29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2Uoc3RkOjpm
b3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICByZXR1cm4gYXBwZW5kU2xvd0Nhc2U8YWN0aW9u
LCBVPihzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
LUFMV0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnRyeUNvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYu
Li4gYXJncykKK3RlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uLCB0eXBlbmFtZS4uLiBBcmdz
PgorQUxXQVlTX0lOTElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6Y29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4u
LiBhcmdzKQogewogICAgIGlmIChzaXplKCkgIT0gY2FwYWNpdHkoKSkgewogICAgICAgICBhc2Fu
QnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKQEAgLTEzMzQsNTIgKzEzMDAsNDgg
QEAgQUxXQVlTX0lOTElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhYwogICAgICAgICArK21f
c2l6ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAotICAgIHJldHVybiB0cnlD
b25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwor
CisgICAgcmV0dXJuIGNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlPGFjdGlvbj4oc3RkOjpmb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVtcGxhdGU8dHlwZW5hbWUgVT4KLXZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojph
cHBlbmRTbG93Q2FzZShVJiYgdmFsdWUpCit0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uIGFjdGlvbiwg
dHlwZW5hbWUgVT4KK2Jvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjphcHBlbmRTbG93Q2FzZShVJiYgdmFsdWUpCiB7Cisg
ICAgc3RhdGljX2Fzc2VydChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6Q3Jhc2ggfHwgYWN0aW9u
ID09IEZhaWx1cmVBY3Rpb246OlJlcG9ydCk7CiAgICAgQVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0
eSgpKTsKIAogICAgIGF1dG8gcHRyID0gY29uc3RfY2FzdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9j
b25zdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VT46OnR5cGU+Ojp0eXBlKj4oc3Rk
OjphZGRyZXNzb2YodmFsdWUpKTsKLSAgICBwdHIgPSBleHBhbmRDYXBhY2l0eShzaXplKCkgKyAx
LCBwdHIpOworICAgIHB0ciA9IGV4cGFuZENhcGFjaXR5PGFjdGlvbj4oc2l6ZSgpICsgMSwgcHRy
KTsKKyAgICBpZiBjb25zdGV4cHIgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpIHsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFwdHIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KICAgICBBU1NFUlQoYmVnaW4oKSk7CiAKICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFu
Z2VUbyhtX3NpemUgKyAxKTsKICAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2Fy
ZDxVPigqcHRyKSk7CiAgICAgKyttX3NpemU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6Y29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2Uo
QXJncyYmLi4uIGFyZ3MpCit0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uIGFjdGlvbiwgdHlwZW5hbWUu
Li4gQXJncz4KK2Jvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShBcmdzJiYu
Li4gYXJncykKIHsKKyAgICBzdGF0aWNfYXNzZXJ0KGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpD
cmFzaCB8fCBhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0KTsKICAgICBBU1NFUlQoc2l6
ZSgpID09IGNhcGFjaXR5KCkpOwogCi0gICAgZXhwYW5kQ2FwYWNpdHkoc2l6ZSgpICsgMSk7Cisg
ICAgYm9vbCBzdWNjZXNzID0gZXhwYW5kQ2FwYWNpdHk8YWN0aW9uPihzaXplKCkgKyAxKTsKKyAg
ICBpZiBjb25zdGV4cHIgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAgICAgQVNTRVJUKGJlZ2luKCkpOwogCiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdl
VG8obV9zaXplICsgMSk7CiAgICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8
QXJncz4oYXJncykuLi4pOwogICAgICsrbV9zaXplOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdz
PgotYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2Fw
YWNpdHksIE1hbGxvYz46OnRyeUNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKEFyZ3MmJi4uLiBh
cmdzKQotewotICAgIEFTU0VSVChzaXplKCkgPT0gY2FwYWNpdHkoKSk7Ci0gICAgCi0gICAgaWYg
KFVOTElLRUxZKCF0cnlFeHBhbmRDYXBhY2l0eShzaXplKCkgKyAxKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBBU1NFUlQoYmVnaW4oKSk7Ci0gICAgCi0gICAgYXNhbkJ1ZmZlclNpemVX
aWxsQ2hhbmdlVG8obV9zaXplICsgMSk7Ci0gICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAgICsrbV9zaXplOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0xNDIzLDcgKzEzODUsNyBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92CiB7CiAgICAgc2l6ZV90IG5ld1NpemUgPSBtX3NpemUgKyB2YWwuc2l6ZSgp
OwogICAgIGlmIChuZXdTaXplID4gY2FwYWNpdHkoKSkKLSAgICAgICAgZXhwYW5kQ2FwYWNpdHko
bmV3U2l6ZSk7CisgICAgICAgIGV4cGFuZENhcGFjaXR5PEZhaWx1cmVBY3Rpb246OkNyYXNoPihu
ZXdTaXplKTsKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiB2YWwpCiAgICAgICAgIHVuY2hlY2tlZEFw
cGVuZChXVEZNb3ZlKGl0ZW0pKTsKIH0KQEAgLTE0MzUsNyArMTM5Nyw3IEBAIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihwb3NpdGlvbiA8PSBzaXplKCkpOwogICAgIHNpemVfdCBuZXdTaXplID0gbV9z
aXplICsgZGF0YVNpemU7CiAgICAgaWYgKG5ld1NpemUgPiBjYXBhY2l0eSgpKSB7Ci0gICAgICAg
IGRhdGEgPSBleHBhbmRDYXBhY2l0eShuZXdTaXplLCBkYXRhKTsKKyAgICAgICAgZGF0YSA9IGV4
cGFuZENhcGFjaXR5PEZhaWx1cmVBY3Rpb246OkNyYXNoPihuZXdTaXplLCBkYXRhKTsKICAgICAg
ICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKQEAg
LTE0NTUsNyArMTQxNyw3IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3YKIAogICAgIGF1dG8gcHRyID0gY29uc3RfY2FzdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25z
dDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VT46OnR5cGU+Ojp0eXBlKj4oc3RkOjph
ZGRyZXNzb2YodmFsdWUpKTsKICAgICBpZiAoc2l6ZSgpID09IGNhcGFjaXR5KCkpIHsKLSAgICAg
ICAgcHRyID0gZXhwYW5kQ2FwYWNpdHkoc2l6ZSgpICsgMSwgcHRyKTsKKyAgICAgICAgcHRyID0g
ZXhwYW5kQ2FwYWNpdHk8RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KHNpemUoKSArIDEsIHB0cik7CiAg
ICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI2MzYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDUwIEBACisyMDIwLTA2LTI4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgaGFuZGxpbmcgZm9yIGEgY2FzZSBvZiBPT01FIGluIENTU1Rva2VuaXpl
ciBhbmQgQ1NTUGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjEzNzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NDgwODg4OT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBhZGQgYSBib29s
KiBjb25zdHJ1Y3Rpb25TdWNjZXNzIGZlZWRiYWNrIGFyZ3VtZW50IHRvIHRoZSBDU1NUb2tlbml6
ZXIKKyAgICAgICAgY29uc3RydWN0b3JzLiAgSWYgY29uc3RydWN0aW9uIGZhaWxzIGFuZCBjb25z
dHJ1Y3Rpb25TdWNjZXNzIGlzIHByb3ZpZGVkLCB0aGUKKyAgICAgICAgY29uc3RydWN0b3Igd2ls
bCBzZXQgKmNvbnN0cnVjdGlvblN1Y2Nlc3MgdG8gZmFsc2UuICBJZiBjb25zdHJ1Y3Rpb24gZmFp
bHMgYW5kCisgICAgICAgIGNvbnN0cnVjdGlvblN1Y2Nlc3MgaXMgbm90IHByb3ZpZGVkLCB0aGUg
Y29uc3RydWN0b3Igd2lsbCBjcmFzaCB3aXRoIGEgZmFpbGVkCisgICAgICAgIFJFTEVBU0VfQVNT
RVJULiAgSW4gb3RoZXIgd29yZHMsIHRoZSBjbGllbnQgbWF5IG9wdCBpbiB0byBoYW5kbGUgdGhl
IGZhaWx1cmUgdG8KKyAgICAgICAgY29uc3RydWN0IGlmIGl0IGRvZXNuJ3Qgd2FudCB0aGUgZGVm
YXVsdCBiZWhhdmlvciBvZiBjcmFzaGluZyBvbiBmYWlsdXJlLgorCisgICAgICAgIFdlIGFsc28g
cHJvdmlkZSAyIGNvbnZlbmllbmNlIGZhY3RvcnkgbWV0aG9kcyBmb3IgQ1NTVG9rZW5pemVyIHdo
aWNoIHdpbGwgcmV0dXJuCisgICAgICAgIGEgbnVsbCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTVG9rZW5p
emVyPiBpZiBjb25zdHJ1Y3Rpb24gZmFpbHMuICBUaGlzIGlzIGN1cnJlbnRseQorICAgICAgICBv
bmx5IHVzZWQgYnkgQ1NTUGFyc2VySW1wbCwgYW5kIGVuc3VyZXMgdGhhdCBpdHMgbV90b2tlbml6
ZXIgaXMgbnVsbCBpZiB3ZSBmYWlsIHRvCisgICAgICAgIGNvbnN0cnVjdC4gIFRoaXMgZW5zdXJl
cyB0aGF0IHRoZXJlIGlzbid0IGEgcG9pbnRlciB0byBhIHBhcnRpYWxseSBjb25zdHJ1Y3RlZAor
ICAgICAgICB0b2tlbml6ZXIgdGhhdCBzb21lIGNvZGUgbWF5IHVua25vd2luZ2x5IHVzZS4KKwor
ICAgICAgICBUaGUgcmVhc29uIHdlIGRvbid0IGZvcmNlIGFsbCBjbGllbnRzIG9mIENTU1Rva2Vu
aXplciB0byB1c2UgdGhlIGZhY3RvcnkgbWV0aG9kcworICAgICAgICBpbnN0ZWFkIGlzIGJlY2F1
c2UgdGhlcmUgYXJlIGNsaWVudHMgdGhhdCBjdXJyZW50bHkgdXNlIG9uLXN0YWNrIGluc3RhbnRp
YXRpb25zCisgICAgICAgIG9mIENTU1Rva2VuaXplciB0byBkbyB0aGVpciB3b3JrLiAgV2UgZG9u
J3Qgd2FudCB0byBmb3JjZSB0aGVtIHRvIHN3aXRjaCB0byB1c2luZworICAgICAgICBhIG1hbGxv
YyBpbnN0YW5jZS4gIEN1cnJlbnRseSwgdGhvc2UgY2xpZW50cyBkbyBub3QgcHJvdmlkZSBhIGNv
bnN0cnVjdGlvblN1Y2Nlc3MKKyAgICAgICAgYXJndW1lbnQuICBIZW5jZSwgZm9yIHRoZW0sIHRo
ZSBDU1NUb2tlbml6ZXIgY29uc3RydWN0b3Igd2lsbCBjcmFzaCBpZiBjb25zdHJ1Y3Rpb24KKyAg
ICAgICAgZmFpbHMsIHdoaWNoIGlzIGhvdyB0aGluZ3Mgd29yayBpbiBwcmUtZXhpc3RpbmcgY29k
ZS4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdAorICAgICAgICB0aGUgY3Jhc2ggaXMgZGVm
ZXJyZWQgdGlsbCB0aGUgY2xpZW50IGF0dGVtcHRzIHRvIHVzZSB0aGUgdG9rZW5pemVyIGluc3Rl
YWQgb2YgYXQKKyAgICAgICAgY29uc3RydWN0aW9uIHRpbWUuCisKKyAgICAgICAgQXMgb2YgdGhp
cyBwYXRjaCwgb25seSBDU1NQYXJzZXI6OnBhcnNlU3VwcG9ydHNDb25kaXRpb24oKSBtYWtlcyB1
c2Ugb2YgdGhlIG5ldworICAgICAgICBmZWVkYmFjayBtZWNoYW5pc20sIGFuZCBoYW5kbGVzIE9P
TUUgZHVyaW5nIENTU1Rva2VuaXplciBjb25zdHJ1Y3Rpb24gYnkKKyAgICAgICAgaW50ZXJwcmV0
aW5nIGl0IGFzIENTUyBub3Qgc3VwcG9ydGluZyB0aGUgcGFzc2VkIGluIGNvbmRpdGlvbiBzdHJp
bmcuCisKKyAgICAgICAgVGVzdDogY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10b2tlbml6ZXIu
aHRtbAorCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpwYXJzZVN1cHBvcnRzQ29uZGl0aW9uKToKKyAgICAgICAgKiBjc3Mv
cGFyc2VyL0NTU1BhcnNlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VySW1w
bDo6Q1NTUGFyc2VySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJJbXBsOjpmYWls
ZWQgY29uc3QpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5oOgorICAgICAg
ICAqIGNzcy9wYXJzZXIvQ1NTVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Rv
a2VuaXplcjo6Q1NTVG9rZW5pemVyKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Rva2VuaXpl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9rZW5pemVyOjpmYWlsZWQgY29uc3QpOgorCiAy
MDIwLTA2LTI4ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVuYW1lIGluaXRpYWxpemVUaHJlYWRpbmcgdG8gaW5pdGlhbGl6ZQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMjYzNjM1KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNh
cmV3b2xmLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3Mg
PHdlYmtpdEBuaWNrc2hhbmtzLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCkBA
IC04OSw2ICs4OSw4IEBAIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZT4gQ1NTUGFyc2VyOjpwYXIK
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVN1cHBvcnRzQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYgY29u
ZGl0aW9uKQogewogICAgIENTU1BhcnNlckltcGwgcGFyc2VyKG1fY29udGV4dCwgY29uZGl0aW9u
KTsKKyAgICBpZiAoIXBhcnNlci50b2tlbml6ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBDU1NTdXBwb3J0c1BhcnNlcjo6c3VwcG9ydHNDb25kaXRpb24ocGFyc2VyLnRv
a2VuaXplcigpLT50b2tlblJhbmdlKCksIHBhcnNlciwgQ1NTU3VwcG9ydHNQYXJzZXI6OkZvcldp
bmRvd0NTUykgPT0gQ1NTU3VwcG9ydHNQYXJzZXI6OlN1cHBvcnRlZDsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuY3BwCShyZXZpc2lvbiAyNjM2
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQpAQCAtNzcsNyArNzcsOSBAQCBDU1NQYXJzZXJJbXBsOjpDU1NQYXJzZXJJbXBs
KGNvbnN0IENTU1BhCiAgICAgLCBtX3N0eWxlU2hlZXQoc3R5bGVTaGVldCkKICAgICAsIG1fb2Jz
ZXJ2ZXJXcmFwcGVyKHdyYXBwZXIpCiB7Ci0gICAgbV90b2tlbml6ZXIgPSB3cmFwcGVyID8gbWFr
ZVVuaXF1ZTxDU1NUb2tlbml6ZXI+KHN0cmluZywgKndyYXBwZXIpIDogbWFrZVVuaXF1ZTxDU1NU
b2tlbml6ZXI+KHN0cmluZyk7CisgICAgbV90b2tlbml6ZXIgPSB3cmFwcGVyID8gQ1NTVG9rZW5p
emVyOjpjcmVhdGUoc3RyaW5nLCAqd3JhcHBlcikgOiBDU1NUb2tlbml6ZXI6OmNyZWF0ZShzdHJp
bmcpOworICAgIGlmIChtX3Rva2VuaXplcikKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChjb250
ZXh0LmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCAmJiAhd3JhcHBlciAmJiBzdHlsZVNoZWV0ICYm
IHJ1bGVQYXJzaW5nID09IENTU1BhcnNlcjo6UnVsZVBhcnNpbmc6OkRlZmVycmVkKQogICAgICAg
ICBtX2RlZmVycmVkUGFyc2VyID0gQ1NTRGVmZXJyZWRQYXJzZXI6OmNyZWF0ZShjb250ZXh0LCBz
dHJpbmcsICpzdHlsZVNoZWV0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VySW1wbC5oCShyZXZpc2lvbiAyNjM2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
IENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Rva2VuaXplci5jcHAJKHJldmlzaW9uIDI2MzYzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
QEAgLTQ4LDI1ICs0OCw1MiBAQCBzdGF0aWMgU3RyaW5nIHByZXByb2Nlc3NTdHJpbmcoU3RyaW5n
IHN0CiAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKCdcMCcsIHJlcGxhY2VtZW50Q2hhcmFjdGVy
KTsKIH0KIAotQ1NTVG9rZW5pemVyOjpDU1NUb2tlbml6ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcp
Ci0gICAgOiBDU1NUb2tlbml6ZXIocHJlcHJvY2Vzc1N0cmluZyhzdHJpbmcpLCBudWxscHRyKQor
c3RkOjp1bmlxdWVfcHRyPENTU1Rva2VuaXplcj4gQ1NTVG9rZW5pemVyOjpjcmVhdGUoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiB7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBhdXRvIHRv
a2VuaXplciA9IG1ha2VVbmlxdWU8Q1NTVG9rZW5pemVyPihzdHJpbmcsICZzdWNjZXNzKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gdG9rZW5pemVyOwogfQogCi1DU1NUb2tlbml6ZXI6OkNTU1Rva2VuaXplcihjb25zdCBT
dHJpbmcmIHN0cmluZywgQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyJiB3cmFwcGVyKQotICAgIDog
Q1NTVG9rZW5pemVyKHByZXByb2Nlc3NTdHJpbmcoc3RyaW5nKSwgJndyYXBwZXIpCitzdGQ6OnVu
aXF1ZV9wdHI8Q1NTVG9rZW5pemVyPiBDU1NUb2tlbml6ZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcm
IHN0cmluZywgQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyJiB3cmFwcGVyKQogeworICAgIGJvb2wg
c3VjY2VzcyA9IHRydWU7CisgICAgYXV0byB0b2tlbml6ZXIgPSBtYWtlVW5pcXVlPENTU1Rva2Vu
aXplcj4oc3RyaW5nLCB3cmFwcGVyLCAmc3VjY2Vzcyk7CisgICAgaWYgKFVOTElLRUxZKCFzdWNj
ZXNzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHRva2VuaXplcjsKIH0K
IAotaW5saW5lIENTU1Rva2VuaXplcjo6Q1NTVG9rZW5pemVyKFN0cmluZyYmIHN0cmluZywgQ1NT
UGFyc2VyT2JzZXJ2ZXJXcmFwcGVyKiB3cmFwcGVyKQorQ1NTVG9rZW5pemVyOjpDU1NUb2tlbml6
ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wqIGNvbnN0cnVjdGlvblN1Y2Nlc3MpCisgICAg
OiBDU1NUb2tlbml6ZXIocHJlcHJvY2Vzc1N0cmluZyhzdHJpbmcpLCBudWxscHRyLCBjb25zdHJ1
Y3Rpb25TdWNjZXNzKQoreworfQorCitDU1NUb2tlbml6ZXI6OkNTU1Rva2VuaXplcihjb25zdCBT
dHJpbmcmIHN0cmluZywgQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyJiB3cmFwcGVyLCBib29sKiBj
b25zdHJ1Y3Rpb25TdWNjZXNzKQorICAgIDogQ1NTVG9rZW5pemVyKHByZXByb2Nlc3NTdHJpbmco
c3RyaW5nKSwgJndyYXBwZXIsIGNvbnN0cnVjdGlvblN1Y2Nlc3MpCit7Cit9CisKK2lubGluZSBD
U1NUb2tlbml6ZXI6OkNTU1Rva2VuaXplcihTdHJpbmcmJiBzdHJpbmcsIENTU1BhcnNlck9ic2Vy
dmVyV3JhcHBlciogd3JhcHBlciwgYm9vbCogY29uc3RydWN0aW9uU3VjY2Vzc1B0cikKICAgICA6
IG1faW5wdXQoc3RyaW5nKQogeworICAgIGJvb2wgbG9jYWxDb25zdHJ1Y3Rpb25TdWNjZXNzOwor
ICAgIGJvb2wmIGNvbnN0cnVjdGlvblN1Y2Nlc3MgPSBjb25zdHJ1Y3Rpb25TdWNjZXNzUHRyID8g
KmNvbnN0cnVjdGlvblN1Y2Nlc3NQdHIgOiBsb2NhbENvbnN0cnVjdGlvblN1Y2Nlc3M7CisgICAg
Y29uc3RydWN0aW9uU3VjY2VzcyA9IHRydWU7CisKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVG8gYXZvaWQgcmVzaXppbmcgd2UgZXJyIG9uIHRo
ZSBzaWRlIG9mIHJlc2VydmluZyB0b28gbXVjaCBzcGFjZS4KICAgICAvLyBNb3N0IHN0cmluZ3Mg
d2UgdG9rZW5pemUgaGF2ZSBhYm91dCAzLjUgdG8gNSBjaGFyYWN0ZXJzIHBlciB0b2tlbi4KLSAg
ICBtX3Rva2Vucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSAvIDMpOwor
ICAgIGlmIChVTkxJS0VMWSghbV90b2tlbnMudHJ5UmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdHJp
bmcubGVuZ3RoKCkgLyAzKSkpIHsKKyAgICAgICAgY29uc3RleHByIGJvb2wgcmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eVN1Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25z
dHJ1Y3Rpb25TdWNjZXNzUHRyIHx8IHJlc2VydmVJbml0aWFsQ2FwYWNpdHlTdWNjZWVkZWQpOwor
ICAgICAgICBjb25zdHJ1Y3Rpb25TdWNjZXNzID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC03
Nyw3ICsxMDQsMTIgQEAgaW5saW5lIENTU1Rva2VuaXplcjo6Q1NTVG9rZW5pemVyKFN0cmluZwog
ICAgICAgICAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgICAgICAgICAgd3JhcHBlci0+YWRkQ29t
bWVudChvZmZzZXQsIG1faW5wdXQub2Zmc2V0KCksIG1fdG9rZW5zLnNpemUoKSk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW4pOworICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKCFtX3Rva2Vucy50cnlBcHBlbmQodG9rZW4pKSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0ZXhwciBib29sIGFwcGVuZFN1Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0cnVjdGlvblN1Y2Nlc3NQdHIgfHwgYXBwZW5kU3Vj
Y2VlZGVkKTsKKyAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rpb25TdWNjZXNzID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHdy
YXBwZXIpCiAgICAgICAgICAgICAgICAgd3JhcHBlci0+YWRkVG9rZW4ob2Zmc2V0KTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NUb2tlbml6ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Rva2VuaXplci5oCShyZXZp
c2lvbiAyNjM2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Rva2VuaXplci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQpAQCAtNDUsOCArNDUsMTEgQEAgY2xhc3MgQ1NTVG9rZW5pemVyIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDU1NUb2tlbml6ZXIpOwogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IENTU1Rva2VuaXplcihjb25zdCBT
dHJpbmcmKTsKLSAgICBDU1NUb2tlbml6ZXIoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyT2JzZXJ2
ZXJXcmFwcGVyJik7IC8vIEZvciB0aGUgaW5zcGVjdG9yCisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxDU1NUb2tlbml6ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPENTU1Rva2VuaXplcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYsIENTU1BhcnNl
ck9ic2VydmVyV3JhcHBlciYpOyAvLyBGb3IgdGhlIGluc3BlY3RvcgorCisgICAgZXhwbGljaXQg
Q1NTVG9rZW5pemVyKGNvbnN0IFN0cmluZyYsIGJvb2wqIGNvbnN0cnVjdGlvblN1Y2Nlc3MgPSBu
dWxscHRyKTsKKyAgICBDU1NUb2tlbml6ZXIoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyT2JzZXJ2
ZXJXcmFwcGVyJiwgYm9vbCogY29uc3RydWN0aW9uU3VjY2VzcyA9IG51bGxwdHIpOyAvLyBGb3Ig
dGhlIGluc3BlY3RvcgogCiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSB0b2tlblJhbmdlKCkgY29u
c3Q7CiAgICAgdW5zaWduZWQgdG9rZW5Db3VudCgpOwpAQCAtNTQsNyArNTcsNyBAQCBwdWJsaWM6
CiAgICAgVmVjdG9yPFN0cmluZz4mJiBlc2NhcGVkU3RyaW5nc0ZvckFkb3B0aW9uKCkgeyByZXR1
cm4gV1RGTW92ZShtX3N0cmluZ1Bvb2wpOyB9CiAKIHByaXZhdGU6Ci0gICAgQ1NTVG9rZW5pemVy
KFN0cmluZyYmLCBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIqKTsKKyAgICBDU1NUb2tlbml6ZXIo
U3RyaW5nJiYsIENTU1BhcnNlck9ic2VydmVyV3JhcHBlciosIGJvb2wqIGNvbnN0cnVjdGlvblN1
Y2Nlc3MpOwogCiAgICAgQ1NTUGFyc2VyVG9rZW4gbmV4dFRva2VuKCk7CiAKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2MzYzNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTA2LTI4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgaGFuZGxpbmcgZm9yIGEgY2FzZSBvZiBPT01FIGluIENTU1Rva2Vu
aXplciBhbmQgQ1NTUGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjEzNzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NDgwODg4OT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNzczMvb3V0
LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10b2tlbml6ZXIuaHRtbDogQWRkZWQuCisKIDIw
MjAtMDYtMjggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIE1l
ZGlhUmVjb3JkZXIgc3RvcFJlY29yZGVyKCkgcmV0dXJucyBlbXB0eSBCbG9iIGFmdGVyIGZpcnN0
IHVzZQpJbmRleDogTGF5b3V0VGVzdHMvY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10b2tlbml6
ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NzczMvb3V0LW9mLW1l
bW9yeS1pbi1jc3MtdG9rZW5pemVyLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9jc3MzL291dC1vZi1tZW1vcnktaW4tY3NzLXRva2VuaXplci1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisg
ICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0CkluZGV4OiBMYXlvdXRU
ZXN0cy9jc3MzL291dC1vZi1tZW1vcnktaW4tY3NzLXRva2VuaXplci5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2NzczMvb3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVyLmh0bWwJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10
b2tlbml6ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKKzxzY3JpcHQ+CitD
U1Muc3VwcG9ydHMoJ2EnLnJlcGVhdCgyKioyOSArIDEpKTsKKzwvc2NyaXB0Pgo=
</data>
<flag name="review"
          id="418513"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403175</attachid>
            <date>2020-06-29 22:22:45 -0700</date>
            <delta_ts>2020-06-30 00:07:58 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-213702.patch</filename>
            <type>text/plain</type>
            <size>41314</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM3MjQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDIwLTA2LTI5ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaGFuZGxpbmcgZm9yIGEgY2FzZSBvZiBPT01FIGlu
IENTU1Rva2VuaXplciBhbmQgQ1NTUGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NDgw
ODg4OT4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAxLiBB
ZGRlZCBGYWlsdXJlQWN0aW9uIHNvIHRoYXQgd2UgY2FuIHBhcmFtZXRlcml6ZSBob3cgd2Ugd2Fu
dCB0byBoYW5kbGUgZmFpbHVyZXMuCisgICAgICAgICAgIEluIHRoaXMgcGF0Y2gsIHdlJ3JlIG9u
bHkgdXNpbmcgdGhpcyBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlcywgYnV0IHdlIGNvdWxkCisgICAg
ICAgICAgIHRlY2huaWNhbGx5IGFwcGx5IHRoaXMgdG8gb3RoZXIgdHlwZXMgb2YgZmFpbHVyZXMg
YXMgd2VsbC4KKworICAgICAgICAyLiBBcHBseSBGYWlsdXJlQWN0aW9uIHRvIG1hbnkgbWV0aG9k
cyBpbiBWZWN0b3IgKGFuZCBpdHMgc3VwZXIgY2xhc3Nlcykgc28gdGhhdAorICAgICAgICAgICB3
ZSBjYW4gc3RhcnQgZGUtZHVwbGljYXRpbmcgY29kZS4gIFByZXZpb3VzbHksIHdlIHdlcmUgYWx3
YXlzIGR1cGxpY2F0aW5nIGNvZGUKKyAgICAgICAgICAganVzdCB0byBoYXZlIGEgInRyeSIgdmVy
c2lvbiBvZiB0aGUgc2FtZSBtZXRob2QgdGhhdCByZXBvcnRzIHRoZSBmYWlsdXJlIHRvCisgICAg
ICAgICAgIGFsbG9jYXRlIGluc3RlYWQgb2YgY3Jhc2hpbmcuICBXZSBjYW4gbm93IHBhcmFtZXRl
cml6ZSBhbGwgdGhlc2UgbWV0aG9kcyBvbiBhCisgICAgICAgICAgIEZhaWx1cmVBY3Rpb24gdGVt
cGxhdGUgcGFyYW1ldGVyIGluc3RlYWQsIGFuZCBhdm9pZCB0aGUgY29kZSBkdXBsaWNhdGlvbi4K
KyAgICAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJldmVyc2VzIHNvbWUgb2YgdGhlIGV4aXN0aW5n
IGNvZGUgZHVwbGljYXRpb24uCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0ZhaWx1
cmVBY3Rpb24uaDogQWRkZWQuCisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RG
OjpWZWN0b3JCdWZmZXJCYXNlOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlZlY3Rv
ckJ1ZmZlckJhc2U6OnRyeUFsbG9jYXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVm
ZmVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlZlY3RvckJ1ZmZlcjo6dHJ5QWxs
b2NhdGVCdWZmZXIpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OnJlc2VydmVDYXBhY2l0eSk6Cisg
ICAgICAgIChXVEY6OlZlY3Rvcjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KToKKyAgICAgICAgKFdURjo6
VmVjdG9yOjpyZXNlcnZlSW5pdGlhbENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6VmVjdG9yOjp0
cnlSZXNlcnZlSW5pdGlhbENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6VmVjdG9yOjphcHBlbmQp
OgorICAgICAgICAoV1RGOjpWZWN0b3I6OnRyeUFwcGVuZCk6CisgICAgICAgIChXVEY6OlZlY3Rv
cjo6Y29uc3RydWN0QW5kQXBwZW5kKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjp0cnlDb25zdHJ1
Y3RBbmRBcHBlbmQpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OmV4cGFuZENhcGFjaXR5KToKKyAg
ICAgICAgKFdURjo6VmVjdG9yOjpyZXNpemUpOgorICAgICAgICAoV1RGOjpWZWN0b3I6Omdyb3cp
OgorICAgICAgICAoV1RGOjpWZWN0b3I6OnJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6
OlZlY3Rvcjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6
YXBwZW5kKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjpjb25zdHJ1Y3RBbmRBcHBlbmQpOgorICAg
ICAgICAoV1RGOjpWZWN0b3I6OmFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6VmVjdG9y
Ojpjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6YXBw
ZW5kVmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjppbnNlcnQpOgorICAgICAgICAoV1RG
OjpWZWN0b3I6OnRyeUV4cGFuZENhcGFjaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VmVj
dG9yOjp0cnlSZXNlcnZlQ2FwYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWZWN0b3I6
OnRyeUFwcGVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlZlY3Rvcjo6dHJ5Q29uc3RydWN0
QW5kQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VmVjdG9yOjp0cnlDb25zdHJ1Y3RB
bmRBcHBlbmRTbG93Q2FzZSk6IERlbGV0ZWQuCisKIDIwMjAtMDYtMjkgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIF9XS1dlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uIFNQSSBmb3IgSFNUUyBzdG9yYWdlIHRvIHJlcGxhY2UgX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmhzdHNTdG9yYWdlRGlyZWN0b3J5CkluZGV4OiBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzcyNCkKKysr
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTc2MCw2ICs3NjAsNyBAQAogCQlGRTg2QTg3NDFFNTk0NDAyMDAxMTFCQkYgLyogRm9yYmlk
SGVhcEFsbG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9yYmlk
SGVhcEFsbG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU4OTI1QUYx
RDAwREFFQzAwNDY5MDdFIC8qIEluZGVudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluZGVudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTdGNkE4
MjQ1Q0U1REQwMEM2M0ZDNiAvKiBTdGRJbnRFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RkSW50RXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZFOTk2QjUyMjRBODQ1QUYwMDFEMkU2MyAvKiBGYWlsdXJlQWN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhaWx1cmVBY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkVCNkIwMzUyMDFCRTBCNjAwQjk1OEMxIC8qIFBvaW50ZXJQcmVwYXJhdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlclByZXBhcmF0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBQ0QzQjE2MzBGODNGMDBDNjk2
MzQgLyogU3RhY2tTdGF0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdGFja1N0YXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQUNEM0Mx
NjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RhY2tTdGF0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAx
OSw2ICsxMDIwLDcgQEAKIAkJCQkxQUVBODhFMTFENkJCQ0Y0MDBFNUFENjQgLyogRW51bVRyYWl0
cy5oICovLAogCQkJCUFEN0M0MzRBMUREMkE0QTcwMDI2ODg4QiAvKiBFeHBlY3RlZC5oICovLAog
CQkJCUE4QTQ3MjlGMTUxQTgyNUEwMDQxMjNGRiAvKiBFeHBvcnRNYWNyb3MuaCAqLywKKwkJCQlG
RTk5NkI1MjI0QTg0NUFGMDAxRDJFNjMgLyogRmFpbHVyZUFjdGlvbi5oICovLAogCQkJCTBGN0M1
RkI1MUQ4ODVDRjIwMDQ0RjVFMiAvKiBGYXN0Qml0VmVjdG9yLmNwcCAqLywKIAkJCQkwRkQ4MUFD
NDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MkExMTUx
QTgyNUEwMDQxMjNGRiAvKiBGYXN0TWFsbG9jLmNwcCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiAyNjM3MjQpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAg
ICAgRW51bVRyYWl0cy5oCiAgICAgRXhwZWN0ZWQuaAogICAgIEV4cG9ydE1hY3Jvcy5oCisgICAg
RmFpbHVyZUFjdGlvbi5oCiAgICAgRmFzdEJpdFZlY3Rvci5oCiAgICAgRmFzdE1hbGxvYy5oCiAg
ICAgRmFzdFRMUy5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYWlsdXJlQWN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvRmFpbHVyZUFjdGlvbi5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XVEYvd3RmL0ZhaWx1cmVBY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitl
bnVtIGNsYXNzIEZhaWx1cmVBY3Rpb24geworICAgIENyYXNoLAorICAgIFJlcG9ydAorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjYzNzI0KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
PHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRB
cml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL0ZhaWx1cmVBY3Rpb24uaD4KICNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L01hbGxvY1B0ci5oPgpAQCAtMjgyLDMxICsyODMsMzUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgTWFsbG9jPgogY2xhc3MgVmVjdG9yQnVmZmVyQmFzZSB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVmVjdG9yQnVmZmVyQmFzZSk7CiBwdWJsaWM6Ci0gICAgdm9pZCBhbGxvY2F0
ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCisgICAgdGVtcGxhdGU8RmFpbHVyZUFjdGlvbiBh
Y3Rpb24+CisgICAgYm9vbCBhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCiAgICAg
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCB8
fCBhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0KTsKICAgICAgICAgQVNTRVJUKG5ld0Nh
cGFjaXR5KTsKLSAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpIC8gc2l6ZW9mKFQpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAg
ICAgc2l6ZV90IHNpemVUb0FsbG9jYXRlID0gbmV3Q2FwYWNpdHkgKiBzaXplb2YoVCk7Ci0gICAg
ICAgIG1fY2FwYWNpdHkgPSBzaXplVG9BbGxvY2F0ZSAvIHNpemVvZihUKTsKLSAgICAgICAgbV9i
dWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oTWFsbG9jOjptYWxsb2Moc2l6ZVRvQWxsb2NhdGUpKTsK
LSAgICB9Ci0KLSAgICBib29sIHRyeUFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChuZXdDYXBhY2l0eSk7Ci0gICAgICAgIGlmIChuZXdDYXBh
Y2l0eSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHNpemVvZihUKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gc2l6ZW9mKFQpKSB7CisgICAgICAg
ICAgICBpZiBjb25zdGV4cHIgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCkKKyAgICAg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogCiAgICAgICAgIHNpemVfdCBzaXplVG9BbGxvY2F0ZSA9
IG5ld0NhcGFjaXR5ICogc2l6ZW9mKFQpOwotICAgICAgICBUKiBuZXdCdWZmZXIgPSBzdGF0aWNf
Y2FzdDxUKj4oTWFsbG9jOjp0cnlNYWxsb2Moc2l6ZVRvQWxsb2NhdGUpKTsKLSAgICAgICAgaWYg
KCFuZXdCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFQqIG5ld0J1
ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVB
Y3Rpb246OkNyYXNoKQorICAgICAgICAgICAgbmV3QnVmZmVyID0gc3RhdGljX2Nhc3Q8VCo+KE1h
bGxvYzo6bWFsbG9jKHNpemVUb0FsbG9jYXRlKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgbmV3QnVmZmVyID0gc3RhdGljX2Nhc3Q8VCo+KE1hbGxvYzo6dHJ5TWFsbG9jKHNpemVUb0Fs
bG9jYXRlKSk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIW5ld0J1ZmZlcikpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIG1fY2FwYWNpdHkgPSBz
aXplVG9BbGxvY2F0ZSAvIHNpemVvZihUKTsKICAgICAgICAgbV9idWZmZXIgPSBuZXdCdWZmZXI7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBh
bGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpIHsgYWxsb2NhdGVCdWZmZXI8RmFpbHVy
ZUFjdGlvbjo6Q3Jhc2g+KG5ld0NhcGFjaXR5KTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB0
cnlBbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpIHsgcmV0dXJuIGFsbG9jYXRlQnVm
ZmVyPEZhaWx1cmVBY3Rpb246OlJlcG9ydD4obmV3Q2FwYWNpdHkpOyB9CisKICAgICBib29sIHNo
b3VsZFJlYWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIFZlY3RvclRyYWl0czxUPjo6Y2FuTW92ZVdpdGhNZW1jcHkgJiYgbV9jYXBh
Y2l0eSAmJiBuZXdDYXBhY2l0eTsKQEAgLTQ1NywyNiArNDYyLDIwIEBAIHB1YmxpYzoKICAgICAg
ICAgZGVhbGxvY2F0ZUJ1ZmZlcihidWZmZXIoKSk7CiAgICAgfQogCi0gICAgdm9pZCBhbGxvY2F0
ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCisgICAgdGVtcGxhdGU8RmFpbHVyZUFjdGlvbiBh
Y3Rpb24+CisgICAgYm9vbCBhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCiAgICAg
ewogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgQVNTRVJUKCFtX2J1ZmZlcikgdG8gY2F0
Y2ggbWlzdXNlL2xlYWtzLgogICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBpbmxpbmVDYXBhY2l0
eSkKLSAgICAgICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2J1ZmZlciA9IGlubGluZUJ1ZmZlcigpOwotICAgICAg
ICAgICAgbV9jYXBhY2l0eSA9IGlubGluZUNhcGFjaXR5OwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgYm9vbCB0cnlBbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCi0gICAgewotICAg
ICAgICBpZiAobmV3Q2FwYWNpdHkgPiBpbmxpbmVDYXBhY2l0eSkKLSAgICAgICAgICAgIHJldHVy
biBCYXNlOjp0cnlBbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7CisgICAgICAgICAgICByZXR1
cm4gQmFzZTo6dGVtcGxhdGUgYWxsb2NhdGVCdWZmZXI8YWN0aW9uPihuZXdDYXBhY2l0eSk7CiAg
ICAgICAgIG1fYnVmZmVyID0gaW5saW5lQnVmZmVyKCk7CiAgICAgICAgIG1fY2FwYWNpdHkgPSBp
bmxpbmVDYXBhY2l0eTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgQUxXQVlT
X0lOTElORSB2b2lkIGFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkgeyBhbGxvY2F0
ZUJ1ZmZlcjxGYWlsdXJlQWN0aW9uOjpDcmFzaD4obmV3Q2FwYWNpdHkpOyB9CisgICAgQUxXQVlT
X0lOTElORSBib29sIHRyeUFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkgeyByZXR1
cm4gYWxsb2NhdGVCdWZmZXI8RmFpbHVyZUFjdGlvbjo6UmVwb3J0PihuZXdDYXBhY2l0eSk7IH0K
KwogICAgIHZvaWQgZGVhbGxvY2F0ZUJ1ZmZlcihUKiBidWZmZXJUb0RlYWxsb2NhdGUpCiAgICAg
ewogICAgICAgICBpZiAoYnVmZmVyVG9EZWFsbG9jYXRlID09IGlubGluZUJ1ZmZlcigpKQpAQCAt
NzYxLDkgKzc2MCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBncm93KHNpemVfdCBzaXplKTsKICAg
ICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSk7CiAgICAgdm9pZCByZXNpemVUb0ZpdChzaXplX3Qg
c2l6ZSk7Ci0gICAgdm9pZCByZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsKLSAg
ICBib29sIHRyeVJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpOwotICAgIHZvaWQg
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KTsKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgcmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkgeyByZXNl
cnZlQ2FwYWNpdHk8RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KG5ld0NhcGFjaXR5KTsgfQorICAgIEFM
V0FZU19JTkxJTkUgYm9vbCB0cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KSB7
IHJldHVybiByZXNlcnZlQ2FwYWNpdHk8RmFpbHVyZUFjdGlvbjo6UmVwb3J0PihuZXdDYXBhY2l0
eSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXpl
X3QgaW5pdGlhbENhcGFjaXR5KSB7IHJlc2VydmVJbml0aWFsQ2FwYWNpdHk8RmFpbHVyZUFjdGlv
bjo6Q3Jhc2g+KGluaXRpYWxDYXBhY2l0eSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5
UmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KSB7IHJldHVybiBy
ZXNlcnZlSW5pdGlhbENhcGFjaXR5PEZhaWx1cmVBY3Rpb246OlJlcG9ydD4oaW5pdGlhbENhcGFj
aXR5KTsgfQogICAgIHZvaWQgc2hyaW5rQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsKICAg
ICB2b2lkIHNocmlua1RvRml0KCkgeyBzaHJpbmtDYXBhY2l0eShzaXplKCkpOyB9CiAKQEAgLTc3
MiwxOCArNzcyLDE5IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gVmVj
dG9yPFU+IGlzb2xhdGVkQ29weSgpIGNvbnN0OwogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFw
cGVuZChWYWx1ZVR5cGUmJiB2YWx1ZSkgeyBhcHBlbmQ8VmFsdWVUeXBlPihzdGQ6OmZvcndhcmQ8
VmFsdWVUeXBlPih2YWx1ZSkpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBl
bmQoVSYmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiB2b2lkIGNvbnN0cnVjdEFu
ZEFwcGVuZChBcmdzJiYuLi4pOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+IGJvb2wg
dHJ5Q29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChVJiYgdSkgeyBhcHBlbmQ8RmFpbHVyZUFjdGlv
bjo6Q3Jhc2gsIFU+KHN0ZDo6Zm9yd2FyZDxVPih1KSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5QXBwZW5kKFUmJiB1KSB7IHJldHVybiBhcHBlbmQ8
RmFpbHVyZUFjdGlvbjo6UmVwb3J0LCBVPihzdGQ6OmZvcndhcmQ8VT4odSkpOyB9CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJncz4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnN0cnVjdEFuZEFw
cGVuZChBcmdzJiYuLi4gYXJncykgeyBjb25zdHJ1Y3RBbmRBcHBlbmQ8RmFpbHVyZUFjdGlvbjo6
Q3Jhc2g+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7IH0KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmdzPiBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5Q29uc3RydWN0QW5kQXBwZW5kKEFy
Z3MmJi4uLiBhcmdzKSB7IHJldHVybiBjb25zdHJ1Y3RBbmRBcHBlbmQ8RmFpbHVyZUFjdGlvbjo6
UmVwb3J0PihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOyB9CiAKICAgICB2b2lkIHVuY2hl
Y2tlZEFwcGVuZChWYWx1ZVR5cGUmJiB2YWx1ZSkgeyB1bmNoZWNrZWRBcHBlbmQ8VmFsdWVUeXBl
PihzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2YWx1ZSkpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmdzPiB2b2lkIHVuY2hlY2tlZENvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYuLi4pOwogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQoY29uc3QgVSosIHNpemVfdCk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChjb25zdCBV
KiB1LCBzaXplX3Qgc2l6ZSkgeyBhcHBlbmQ8RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KHUsIHNpemUp
OyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQUxXQVlTX0lOTElORSBib29sIHRyeUFwcGVu
ZChjb25zdCBVKiB1LCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gYXBwZW5kPEZhaWx1cmVBY3Rpb246
OlJlcG9ydD4odSwgc2l6ZSk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3Qgb3Ro
ZXJDYXBhY2l0eT4gdm9pZCBhcHBlbmRWZWN0b3IoY29uc3QgVmVjdG9yPFUsIG90aGVyQ2FwYWNp
dHk+Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IG90aGVyQ2FwYWNpdHk+IHZv
aWQgYXBwZW5kVmVjdG9yKFZlY3RvcjxVLCBvdGhlckNhcGFjaXR5PiYmKTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBib29sIHRyeUFwcGVuZChjb25zdCBVKiwgc2l6ZV90KTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgaW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgY29uc3QgVSos
IHNpemVfdCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBpbnNlcnQoc2l6ZV90IHBv
c2l0aW9uLCBVJiYpOwpAQCAtODM3LDE0ICs4MzgsMTggQEAgcHVibGljOgogICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NpemUgPT0gc3RkOjpudW1l
cmljX2xpbWl0czxkZWNsdHlwZShtX3NpemUpPjo6bWF4KCk7IH0KIAogcHJpdmF0ZToKLSAgICB2
b2lkIGV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSk7Ci0gICAgVCogZXhwYW5k
Q2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBUKik7Ci0gICAgYm9vbCB0cnlFeHBhbmRD
YXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHkpOwotICAgIGNvbnN0IFQqIHRyeUV4cGFuZENh
cGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgY29uc3QgVCopOwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IFUqIGV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVSopOyAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZFNsb3dDYXNlKFUmJik7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4gdm9pZCBjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2Fz
ZShBcmdzJiYuLi4pOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+IGJvb2wgdHJ5Q29u
c3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4uKTsKKyAgICB0ZW1wbGF0ZTxGYWlsdXJl
QWN0aW9uPiBib29sIHJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpOworICAgIHRl
bXBsYXRlPEZhaWx1cmVBY3Rpb24+IGJvb2wgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplX3Qg
aW5pdGlhbENhcGFjaXR5KTsKKworICAgIHRlbXBsYXRlPEZhaWx1cmVBY3Rpb24+IGJvb2wgZXhw
YW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KTsKKyAgICB0ZW1wbGF0ZTxGYWlsdXJl
QWN0aW9uPiBUKiBleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFQqKTsKKyAg
ICB0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uLCB0eXBlbmFtZSBVPiBVKiBleHBhbmRDYXBhY2l0eShz
aXplX3QgbmV3TWluQ2FwYWNpdHksIFUqKTsKKyAgICB0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uLCB0
eXBlbmFtZSBVPiBib29sIGFwcGVuZFNsb3dDYXNlKFUmJik7CisgICAgdGVtcGxhdGU8RmFpbHVy
ZUFjdGlvbiwgdHlwZW5hbWUuLi4gQXJncz4gYm9vbCBjb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYm
Li4uKTsKKyAgICB0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uLCB0eXBlbmFtZS4uLiBBcmdzPiBib29s
IGNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKEFyZ3MmJi4uLik7CisKKyAgICB0ZW1wbGF0ZTxG
YWlsdXJlQWN0aW9uLCB0eXBlbmFtZSBVPiBib29sIGFwcGVuZChVJiYpOworICAgIHRlbXBsYXRl
PEZhaWx1cmVBY3Rpb24sIHR5cGVuYW1lIFU+IGJvb2wgYXBwZW5kKGNvbnN0IFUqLCBzaXplX3Qp
OwogCiAgICAgdGVtcGxhdGU8c2l6ZV90IHBvc2l0aW9uLCB0eXBlbmFtZSBVLCB0eXBlbmFtZS4u
LiBJdGVtcz4KICAgICB2b2lkIHVuY2hlY2tlZEluaXRpYWxpemUoVSYmIGl0ZW0sIEl0ZW1zJiYu
Li4gaXRlbXMpCkBAIC0xMDQzLDQ4ICsxMDQ4LDQ0IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0gKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwg
dHlwZW5hbWUgTWFsbG9jPgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdN
aW5DYXBhY2l0eSkKK3RlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uPgorYm9vbCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46
OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSkKIHsKLSAgICByZXNlcnZlQ2Fw
YWNpdHkoc3RkOjptYXgobmV3TWluQ2FwYWNpdHksIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVf
dD4obWluQ2FwYWNpdHkpLCBjYXBhY2l0eSgpICsgY2FwYWNpdHkoKSAvIDQgKyAxKSkpOworICAg
IHJldHVybiByZXNlcnZlQ2FwYWNpdHk8YWN0aW9uPihzdGQ6Om1heChuZXdNaW5DYXBhY2l0eSwg
c3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PihtaW5DYXBhY2l0eSksIGNhcGFjaXR5KCkgKyBj
YXBhY2l0eSgpIC8gNCArIDEpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uPgogTkVW
RVJfSU5MSU5FIFQqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eSwgTWFsbG9jPjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5
LCBUKiBwdHIpCiB7CisgICAgc3RhdGljX2Fzc2VydChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6
Q3Jhc2ggfHwgYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJlcG9ydCk7CiAgICAgaWYgKHB0ciA8
IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7Ci0gICAgICAgIGV4cGFuZENhcGFjaXR5KG5ld01p
bkNhcGFjaXR5KTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gZXhwYW5kQ2FwYWNpdHk8YWN0aW9u
PihuZXdNaW5DYXBhY2l0eSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1
cmVBY3Rpb246OlJlcG9ydCkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQogICAgICAgICByZXR1
cm4gcHRyOwogICAgIH0KICAgICBzaXplX3QgaW5kZXggPSBwdHIgLSBiZWdpbigpOwotICAgIGV4
cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KTsKLSAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+
Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eSwgTWFsbG9jPjo6dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQot
ewotICAgIHJldHVybiB0cnlSZXNlcnZlQ2FwYWNpdHkoc3RkOjptYXgobmV3TWluQ2FwYWNpdHks
IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4obWluQ2FwYWNpdHkpLCBjYXBhY2l0eSgpICsg
Y2FwYWNpdHkoKSAvIDQgKyAxKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1jb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnRyeUV4cGFuZENhcGFjaXR5
KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgY29uc3QgVCogcHRyKQotewotICAgIGlmIChwdHIgPCBi
ZWdpbigpIHx8IHB0ciA+PSBlbmQoKSkgewotICAgICAgICBpZiAoIXRyeUV4cGFuZENhcGFjaXR5
KG5ld01pbkNhcGFjaXR5KSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4g
cHRyOworICAgIGJvb2wgc3VjY2VzcyA9IGV4cGFuZENhcGFjaXR5PGFjdGlvbj4obmV3TWluQ2Fw
YWNpdHkpOworICAgIGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJlcG9y
dCkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQotICAgIHNpemVfdCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7Ci0gICAg
aWYgKCF0cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSkpCi0gICAgICAgIHJldHVybiAw
OwogICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3Qg
bWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVuYW1lIFU+Cit0ZW1w
bGF0ZTxGYWlsdXJlQWN0aW9uIGFjdGlvbiwgdHlwZW5hbWUgVT4KIGlubGluZSBVKiBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46
OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVSogcHRyKQogewotICAgIGV4
cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KGFjdGlvbiA9
PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCB8fCBhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0
KTsKKyAgICBib29sIHN1Y2Nlc3MgPSBleHBhbmRDYXBhY2l0eTxhY3Rpb24+KG5ld01pbkNhcGFj
aXR5KTsKKyAgICBpZiBjb25zdGV4cHIgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQp
IHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KICAgICByZXR1cm4gcHRyOwogfQogCkBAIC0xMDk2LDcgKzEwOTcsNyBA
QCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiAgICAgICAgIGFzYW5C
dWZmZXJTaXplV2lsbENoYW5nZVRvKHNpemUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChz
aXplID4gY2FwYWNpdHkoKSkKLSAgICAgICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOworICAg
ICAgICAgICAgZXhwYW5kQ2FwYWNpdHk8RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KHNpemUpOwogICAg
ICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXplKTsKICAgICAgICAgaWYgKGJlZ2lu
KCkpCiAgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZUlmTm9uUE9EKGVuZCgp
LCBiZWdpbigpICsgc2l6ZSk7CkBAIC0xMTI2LDcgKzExMjcsNyBAQCB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiB7CiAgICAgQVNTRVJUKHNpemUgPj0gbV9zaXplKTsK
ICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCi0gICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUp
OworICAgICAgICBleHBhbmRDYXBhY2l0eTxGYWlsdXJlQWN0aW9uOjpDcmFzaD4oc2l6ZSk7CiAg
ICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8oc2l6ZSk7CiAgICAgaWYgKGJlZ2luKCkpCiAg
ICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplSWZOb25QT0QoZW5kKCksIGJlZ2luKCkg
KyBzaXplKTsKQEAgLTExNzgsMjcgKzExNzksMTAgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0
eXBlbmFtZSBNYWxsb2M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdD
YXBhY2l0eSkKLXsKLSAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCogb2xkRW5kID0gZW5k
KCk7Ci0KLSAgICBhc2FuU2V0QnVmZmVyU2l6ZVRvRnVsbENhcGFjaXR5KCk7Ci0KLSAgICBCYXNl
OjphbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7Ci0gICAgQVNTRVJUKGJlZ2luKCkpOwotCi0g
ICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZSgpKTsKLQotICAgIFR5cGVPcGVyYXRp
b25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKLSAgICBCYXNlOjpkZWFsbG9j
YXRlQnVmZmVyKG9sZEJ1ZmZlcik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHksIHR5cGVuYW1lIE1hbGxvYz4KLWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkoc2l6
ZV90IG5ld0NhcGFjaXR5KQordGVtcGxhdGU8RmFpbHVyZUFjdGlvbiBhY3Rpb24+Citib29sIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFs
bG9jPjo6cmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKIHsKKyAgICBzdGF0aWNf
YXNzZXJ0KGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCB8fCBhY3Rpb24gPT0gRmFpbHVy
ZUFjdGlvbjo6UmVwb3J0KTsKICAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKQEAgLTEyMDYs
OSArMTE5MCwxMiBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAK
ICAgICBhc2FuU2V0QnVmZmVyU2l6ZVRvRnVsbENhcGFjaXR5KCk7CiAKLSAgICBpZiAoIUJhc2U6
OnRyeUFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KSkgewotICAgICAgICBhc2FuU2V0SW5pdGlh
bEJ1ZmZlclNpemVUbyhzaXplKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBz
dWNjZXNzID0gQmFzZTo6dGVtcGxhdGUgYWxsb2NhdGVCdWZmZXI8YWN0aW9uPihuZXdDYXBhY2l0
eSk7CisgICAgaWYgY29uc3RleHByIChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0KSB7
CisgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsKKyAgICAgICAgICAgIGFzYW5TZXRJ
bml0aWFsQnVmZmVyU2l6ZVRvKHNpemUoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgQVNTRVJUKGJlZ2luKCkpOwogCkBAIC0xMjIwLDEyICsxMjA3
LDE1IEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5lIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
LCBNYWxsb2M+OjpyZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkp
Cit0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uIGFjdGlvbj4KK2lubGluZSBib29sIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KQogeworICAgIHN0YXRp
Y19hc3NlcnQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OkNyYXNoIHx8IGFjdGlvbiA9PSBGYWls
dXJlQWN0aW9uOjpSZXBvcnQpOwogICAgIEFTU0VSVCghbV9zaXplKTsKICAgICBBU1NFUlQoY2Fw
YWNpdHkoKSA9PSBpbmxpbmVDYXBhY2l0eSk7Ci0gICAgaWYgKGluaXRpYWxDYXBhY2l0eSA+IGlu
bGluZUNhcGFjaXR5KQotICAgICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihpbml0aWFsQ2FwYWNp
dHkpOworICAgIGlmIChpbml0aWFsQ2FwYWNpdHkgPD0gaW5saW5lQ2FwYWNpdHkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBCYXNlOjp0ZW1wbGF0ZSBhbGxvY2F0ZUJ1ZmZlcjxh
Y3Rpb24+KGluaXRpYWxDYXBhY2l0eSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2Fw
YWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KQEAgLTEyNjAsMzUgKzEyNTAsMjUgQEAgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVPgotQUxX
QVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6YXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRh
U2l6ZSkKK3RlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uLCB0eXBlbmFtZSBVPgorQUxXQVlT
X0lOTElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eSwgTWFsbG9jPjo6YXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6
ZSkKIHsKKyAgICBzdGF0aWNfYXNzZXJ0KGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCB8
fCBhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0KTsKICAgICBzaXplX3QgbmV3U2l6ZSA9
IG1fc2l6ZSArIGRhdGFTaXplOwogICAgIGlmIChuZXdTaXplID4gY2FwYWNpdHkoKSkgewotICAg
ICAgICBkYXRhID0gZXhwYW5kQ2FwYWNpdHkobmV3U2l6ZSwgZGF0YSk7CisgICAgICAgIGRhdGEg
PSBleHBhbmRDYXBhY2l0eTxhY3Rpb24+KG5ld1NpemUsIGRhdGEpOworICAgICAgICBpZiBjb25z
dGV4cHIgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpIHsKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWSghZGF0YSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CiAgICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAgICB9Ci0gICAgaWYgKG5ld1NpemUgPCBt
X3NpemUpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8o
bmV3U2l6ZSk7Ci0gICAgVCogZGVzdCA9IGVuZCgpOwotICAgIFZlY3RvckNvcGllcjxzdGQ6Omlz
X3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgc3RkOjphZGRy
ZXNzb2YoZGF0YVtkYXRhU2l6ZV0pLCBkZXN0KTsKLSAgICBtX3NpemUgPSBuZXdTaXplOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBVPgotQUxXQVlTX0lOTElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5QXBwZW5kKGNv
bnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKLXsKLSAgICBzaXplX3QgbmV3U2l6ZSA9IG1f
c2l6ZSArIGRhdGFTaXplOwotICAgIGlmIChuZXdTaXplID4gY2FwYWNpdHkoKSkgewotICAgICAg
ICBkYXRhID0gdHJ5RXhwYW5kQ2FwYWNpdHkobmV3U2l6ZSwgZGF0YSk7Ci0gICAgICAgIGlmICgh
ZGF0YSkKKyAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkgeworICAgICAgICBpZiBjb25zdGV4cHIg
KGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCkKKyAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgQVNTRVJUKGJl
Z2luKCkpOwogICAgIH0KLSAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG5ld1NpemUpOwogICAgIFQq
IGRlc3QgPSBlbmQoKTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1
ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEsIHN0ZDo6YWRkcmVzc29mKGRhdGFbZGF0YVNp
emVdKSwgZGVzdCk7CkBAIC0xMjk3LDM2ICsxMjc3LDIyIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVtcGxhdGU8dHlwZW5hbWUgVT4KLUFMV0FZU19JTkxJTkUg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHksIE1hbGxvYz46OmFwcGVuZChVJiYgdmFsdWUpCit0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uIGFj
dGlvbiwgdHlwZW5hbWUgVT4KK0FMV0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZChVJiYg
dmFsdWUpCiB7CiAgICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7CiAgICAgICAgIGFzYW5C
dWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwogICAgICAgICBuZXcgKE5vdE51bGws
IGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogICAgICAgICArK21fc2l6ZTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGFwcGVuZFNsb3dDYXNlKHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFt
ZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotQUxXQVlTX0lOTElORSB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6Y29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQotewotICAgIGlmIChz
aXplKCkgIT0gY2FwYWNpdHkoKSkgewotICAgICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VU
byhtX3NpemUgKyAxKTsKLSAgICAgICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndh
cmQ8QXJncz4oYXJncykuLi4pOwotICAgICAgICArK21fc2l6ZTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdHJ1Y3RBbmRBcHBlbmRTbG93
Q2FzZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIHJldHVybiBhcHBlbmRTbG93
Q2FzZTxhY3Rpb24sIFU+KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmdzPgotQUxXQVlTX0lOTElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBw
ZW5kKEFyZ3MmJi4uLiBhcmdzKQordGVtcGxhdGU8RmFpbHVyZUFjdGlvbiBhY3Rpb24sIHR5cGVu
YW1lLi4uIEFyZ3M+CitBTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBl
bmQoQXJncyYmLi4uIGFyZ3MpCiB7CiAgICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7CiAg
ICAgICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwpAQCAtMTMzNCw1
MiArMTMwMCw0OCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjCiAg
ICAgICAgICsrbV9zaXplOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIHRyeUNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLik7CisKKyAgICByZXR1cm4gY29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2U8YWN0aW9u
PihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVPgotdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHks
IE1hbGxvYz46OmFwcGVuZFNsb3dDYXNlKFUmJiB2YWx1ZSkKK3RlbXBsYXRlPEZhaWx1cmVBY3Rp
b24gYWN0aW9uLCB0eXBlbmFtZSBVPgorYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZFNsb3dDYXNlKFUmJiB2
YWx1ZSkKIHsKKyAgICBzdGF0aWNfYXNzZXJ0KGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFz
aCB8fCBhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0KTsKICAgICBBU1NFUlQoc2l6ZSgp
ID09IGNhcGFjaXR5KCkpOwogCiAgICAgYXV0byBwdHIgPSBjb25zdF9jYXN0PHR5cGVuYW1lIHN0
ZDo6cmVtb3ZlX2NvbnN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxVPjo6dHlwZT46
OnR5cGUqPihzdGQ6OmFkZHJlc3NvZih2YWx1ZSkpOwotICAgIHB0ciA9IGV4cGFuZENhcGFjaXR5
KHNpemUoKSArIDEsIHB0cik7CisgICAgcHRyID0gZXhwYW5kQ2FwYWNpdHk8YWN0aW9uPihzaXpl
KCkgKyAxLCBwdHIpOworICAgIGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246
OlJlcG9ydCkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXB0cikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQogICAgIEFTU0VSVChiZWdpbigpKTsKIAogICAgIGFzYW5CdWZmZXJT
aXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwogICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQo
c3RkOjpmb3J3YXJkPFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgot
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBl
bmRTbG93Q2FzZShBcmdzJiYuLi4gYXJncykKK3RlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9u
LCB0eXBlbmFtZS4uLiBBcmdzPgorYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmNvbnN0cnVjdEFuZEFwcGVuZFNsb3dD
YXNlKEFyZ3MmJi4uLiBhcmdzKQogeworICAgIHN0YXRpY19hc3NlcnQoYWN0aW9uID09IEZhaWx1
cmVBY3Rpb246OkNyYXNoIHx8IGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpOwogICAg
IEFTU0VSVChzaXplKCkgPT0gY2FwYWNpdHkoKSk7CiAKLSAgICBleHBhbmRDYXBhY2l0eShzaXpl
KCkgKyAxKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBleHBhbmRDYXBhY2l0eTxhY3Rpb24+KHNpemUo
KSArIDEpOworICAgIGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJlcG9y
dCkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KICAgICBBU1NFUlQoYmVnaW4oKSk7CiAKICAgICBhc2FuQnVmZmVyU2l6
ZVdpbGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKICAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0
ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiAgICAgKyttX3NpemU7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3M+Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2Uo
QXJncyYmLi4uIGFyZ3MpCi17Ci0gICAgQVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgpKTsKLSAg
ICAKLSAgICBpZiAoVU5MSUtFTFkoIXRyeUV4cGFuZENhcGFjaXR5KHNpemUoKSArIDEpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChiZWdpbigpKTsKLSAgICAKLSAgICBhc2Fu
QnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKLSAgICBuZXcgKE5vdE51bGwsIGVu
ZCgpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgKyttX3NpemU7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0MjMsNyArMTM4NSw3IEBAIGlubGluZSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKIHsKICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSAr
IHZhbC5zaXplKCk7CiAgICAgaWYgKG5ld1NpemUgPiBjYXBhY2l0eSgpKQotICAgICAgICBleHBh
bmRDYXBhY2l0eShuZXdTaXplKTsKKyAgICAgICAgZXhwYW5kQ2FwYWNpdHk8RmFpbHVyZUFjdGlv
bjo6Q3Jhc2g+KG5ld1NpemUpOwogICAgIGZvciAoYXV0byYgaXRlbSA6IHZhbCkKICAgICAgICAg
dW5jaGVja2VkQXBwZW5kKFdURk1vdmUoaXRlbSkpOwogfQpAQCAtMTQzNSw3ICsxMzk3LDcgQEAg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDw9IHNpemUoKSk7CiAgICAgc2l6ZV90IG5l
d1NpemUgPSBtX3NpemUgKyBkYXRhU2l6ZTsKICAgICBpZiAobmV3U2l6ZSA+IGNhcGFjaXR5KCkp
IHsKLSAgICAgICAgZGF0YSA9IGV4cGFuZENhcGFjaXR5KG5ld1NpemUsIGRhdGEpOworICAgICAg
ICBkYXRhID0gZXhwYW5kQ2FwYWNpdHk8RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KG5ld1NpemUsIGRh
dGEpOwogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogICAgIGlmIChuZXdTaXplIDwg
bV9zaXplKQpAQCAtMTQ1NSw3ICsxNDE3LDcgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdgogCiAgICAgYXV0byBwdHIgPSBjb25zdF9jYXN0PHR5cGVuYW1lIHN0ZDo6
cmVtb3ZlX2NvbnN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxVPjo6dHlwZT46OnR5
cGUqPihzdGQ6OmFkZHJlc3NvZih2YWx1ZSkpOwogICAgIGlmIChzaXplKCkgPT0gY2FwYWNpdHko
KSkgewotICAgICAgICBwdHIgPSBleHBhbmRDYXBhY2l0eShzaXplKCkgKyAxLCBwdHIpOworICAg
ICAgICBwdHIgPSBleHBhbmRDYXBhY2l0eTxGYWlsdXJlQWN0aW9uOjpDcmFzaD4oc2l6ZSgpICsg
MSwgcHRyKTsKICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjYzNzI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMjAtMDYtMjkgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgorCisgICAgICAgIEFkZCBoYW5kbGluZyBmb3IgYSBjYXNlIG9mIE9PTUUgaW4g
Q1NTVG9rZW5pemVyIGFuZCBDU1NQYXJzZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM3MDIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY0ODA4
ODg5PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFdlIGFk
ZCBhIGJvb2wqIGNvbnN0cnVjdGlvblN1Y2Nlc3MgZmVlZGJhY2sgYXJndW1lbnQgdG8gdGhlIHBy
aXZhdGUgQ1NTVG9rZW5pemVyCisgICAgICAgIGNvbnN0cnVjdG9yLiAgSWYgY29uc3RydWN0aW9u
IGZhaWxzIGFuZCBjb25zdHJ1Y3Rpb25TdWNjZXNzIGlzIHByb3ZpZGVkLCB0aGUKKyAgICAgICAg
Y29uc3RydWN0b3Igd2lsbCBzZXQgKmNvbnN0cnVjdGlvblN1Y2Nlc3MgdG8gZmFsc2UuICBJZiBj
b25zdHJ1Y3Rpb24gZmFpbHMgYW5kCisgICAgICAgIGNvbnN0cnVjdGlvblN1Y2Nlc3MgaXMgbm90
IHByb3ZpZGVkLCB0aGUgY29uc3RydWN0b3Igd2lsbCBjcmFzaCB3aXRoIGEgZmFpbGVkCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJULiAgSW4gb3RoZXIgd29yZHMsIHRoZSBjbGllbnQgbWF5IG9wdCBp
biB0byBoYW5kbGUgdGhlIGZhaWx1cmUgdG8KKyAgICAgICAgY29uc3RydWN0IGlmIGl0IGRvZXNu
J3Qgd2FudCB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBjcmFzaGluZyBvbiBmYWlsdXJlLgorCisg
ICAgICAgIFdlIGFsc28gcHJvdmlkZSAyIGNvbnZlbmllbmNlIGZhY3RvcnkgbWV0aG9kcyBmb3Ig
Q1NTVG9rZW5pemVyIHdoaWNoIHdpbGwgcmV0dXJuCisgICAgICAgIGEgbnVsbCBzdGQ6OnVuaXF1
ZV9wdHI8Q1NTVG9rZW5pemVyPiBpZiBjb25zdHJ1Y3Rpb24gZmFpbHMuICBUaGlzIGlzIGN1cnJl
bnRseQorICAgICAgICBvbmx5IHVzZWQgYnkgQ1NTUGFyc2VySW1wbCwgYW5kIGVuc3VyZXMgdGhh
dCBpdHMgbV90b2tlbml6ZXIgaXMgbnVsbCBpZiB3ZSBmYWlsIHRvCisgICAgICAgIGNvbnN0cnVj
dC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZXJlIGlzbid0IGEgcG9pbnRlciB0byBhIHBhcnRpYWxs
eSBjb25zdHJ1Y3RlZAorICAgICAgICB0b2tlbml6ZXIgdGhhdCBzb21lIGNvZGUgbWF5IHVua25v
d2luZ2x5IHVzZS4KKworICAgICAgICBUaGUgcmVhc29uIHdlIGRvbid0IGZvcmNlIGFsbCBjbGll
bnRzIG9mIENTU1Rva2VuaXplciB0byB1c2UgdGhlIGZhY3RvcnkgbWV0aG9kcworICAgICAgICBp
bnN0ZWFkIGlzIGJlY2F1c2UgdGhlcmUgYXJlIGNsaWVudHMgdGhhdCBjdXJyZW50bHkgdXNlIG9u
LXN0YWNrIGluc3RhbnRpYXRpb25zCisgICAgICAgIG9mIENTU1Rva2VuaXplciB0byBkbyB0aGVp
ciB3b3JrLiAgV2UgZG9uJ3Qgd2FudCB0byBmb3JjZSB0aGVtIHRvIHN3aXRjaCB0byB1c2luZwor
ICAgICAgICBhIG1hbGxvYyBpbnN0YW5jZS4gIEN1cnJlbnRseSwgdGhlIGNvbnN0cnVjdG9ycyB1
c2VkIGJ5IHRob3NlIGNsaWVudHMgZG8gbm90CisgICAgICAgIHByb3ZpZGUgYSBjb25zdHJ1Y3Rp
b25TdWNjZXNzIGFyZ3VtZW50IHRvIHRoZSB1bmRlcmx5aW5nIHByaXZhdGUgY29uc3RydWN0b3Iu
CisgICAgICAgIEhlbmNlLCBmb3IgdGhlbSwgdGhlIENTU1Rva2VuaXplciBjb25zdHJ1Y3RvciB3
aWxsIGNyYXNoIGlmIGNvbnN0cnVjdGlvbiBmYWlscywKKyAgICAgICAgd2hpY2ggaXMgaG93IHRo
aW5ncyB3b3JrIGluIHByZS1leGlzdGluZyBjb2RlLiAgVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0
aGF0CisgICAgICAgIHRoZSBjcmFzaCBpcyBkZWZlcnJlZCB0aWxsIHRoZSBjbGllbnQgYXR0ZW1w
dHMgdG8gdXNlIHRoZSB0b2tlbml6ZXIgaW5zdGVhZCBvZiBhdAorICAgICAgICBjb25zdHJ1Y3Rp
b24gdGltZS4KKworICAgICAgICBBcyBvZiB0aGlzIHBhdGNoLCBvbmx5IENTU1BhcnNlcjo6cGFy
c2VTdXBwb3J0c0NvbmRpdGlvbigpIG1ha2VzIHVzZSBvZiB0aGUgbmV3CisgICAgICAgIGZlZWRi
YWNrIG1lY2hhbmlzbSwgYW5kIGhhbmRsZXMgT09NRSBkdXJpbmcgQ1NTVG9rZW5pemVyIGNvbnN0
cnVjdGlvbiBieQorICAgICAgICBpbnRlcnByZXRpbmcgaXQgYXMgQ1NTIG5vdCBzdXBwb3J0aW5n
IHRoZSBwYXNzZWQgaW4gY29uZGl0aW9uIHN0cmluZy4KKworICAgICAgICBUZXN0OiBjc3MzL291
dC1vZi1tZW1vcnktaW4tY3NzLXRva2VuaXplci5odG1sCisKKyAgICAgICAgKiBjc3MvcGFyc2Vy
L0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU3VwcG9y
dHNDb25kaXRpb24pOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJJbXBsOjpDU1NQYXJzZXJJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlckltcGw6OmZhaWxlZCBjb25zdCk6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQYXJzZXJJbXBsLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NUb2tlbml6ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9rZW5pemVyOjpDU1NUb2tlbml6ZXIpOgorICAg
ICAgICAqIGNzcy9wYXJzZXIvQ1NTVG9rZW5pemVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b2tlbml6ZXI6OmZhaWxlZCBjb25zdCk6CisKIDIwMjAtMDYtMjkgIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgQXBwQ2FjaGUgbWFuaWZlc3QgcGFyc2Vy
IG92ZXIgdG8gdXNpbmcgU3RyaW5nUGFyc2luZ0J1ZmZlcgpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMjYzNzI0KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xm
LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtp
dEBuaWNrc2hhbmtzLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCkBAIC04OSw2
ICs4OSw4IEBAIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZT4gQ1NTUGFyc2VyOjpwYXIKIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVN1cHBvcnRzQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYgY29uZGl0aW9u
KQogewogICAgIENTU1BhcnNlckltcGwgcGFyc2VyKG1fY29udGV4dCwgY29uZGl0aW9uKTsKKyAg
ICBpZiAoIXBhcnNlci50b2tlbml6ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
dHVybiBDU1NTdXBwb3J0c1BhcnNlcjo6c3VwcG9ydHNDb25kaXRpb24ocGFyc2VyLnRva2VuaXpl
cigpLT50b2tlblJhbmdlKCksIHBhcnNlciwgQ1NTU3VwcG9ydHNQYXJzZXI6OkZvcldpbmRvd0NT
UykgPT0gQ1NTU3VwcG9ydHNQYXJzZXI6OlN1cHBvcnRlZDsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuY3BwCShyZXZpc2lvbiAyNjM3MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQpAQCAtNzcsNyArNzcsOSBAQCBDU1NQYXJzZXJJbXBsOjpDU1NQYXJzZXJJbXBsKGNvbnN0
IENTU1BhCiAgICAgLCBtX3N0eWxlU2hlZXQoc3R5bGVTaGVldCkKICAgICAsIG1fb2JzZXJ2ZXJX
cmFwcGVyKHdyYXBwZXIpCiB7Ci0gICAgbV90b2tlbml6ZXIgPSB3cmFwcGVyID8gbWFrZVVuaXF1
ZTxDU1NUb2tlbml6ZXI+KHN0cmluZywgKndyYXBwZXIpIDogbWFrZVVuaXF1ZTxDU1NUb2tlbml6
ZXI+KHN0cmluZyk7CisgICAgbV90b2tlbml6ZXIgPSB3cmFwcGVyID8gQ1NTVG9rZW5pemVyOjp0
cnlDcmVhdGUoc3RyaW5nLCAqd3JhcHBlcikgOiBDU1NUb2tlbml6ZXI6OnRyeUNyZWF0ZShzdHJp
bmcpOworICAgIGlmIChtX3Rva2VuaXplcikKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChjb250
ZXh0LmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCAmJiAhd3JhcHBlciAmJiBzdHlsZVNoZWV0ICYm
IHJ1bGVQYXJzaW5nID09IENTU1BhcnNlcjo6UnVsZVBhcnNpbmc6OkRlZmVycmVkKQogICAgICAg
ICBtX2RlZmVycmVkUGFyc2VyID0gQ1NTRGVmZXJyZWRQYXJzZXI6OmNyZWF0ZShjb250ZXh0LCBz
dHJpbmcsICpzdHlsZVNoZWV0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VySW1wbC5oCShyZXZpc2lvbiAyNjM3MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
IENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Rva2VuaXplci5jcHAJKHJldmlzaW9uIDI2MzcyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
QEAgLTQ4LDI1ICs0OCw1MyBAQCBzdGF0aWMgU3RyaW5nIHByZXByb2Nlc3NTdHJpbmcoU3RyaW5n
IHN0CiAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKCdcMCcsIHJlcGxhY2VtZW50Q2hhcmFjdGVy
KTsKIH0KIAorc3RkOjp1bmlxdWVfcHRyPENTU1Rva2VuaXplcj4gQ1NTVG9rZW5pemVyOjp0cnlD
cmVhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsK
KyAgICAvLyBXZSBjYW4ndCB1c2UgbWFrZVVuaXF1ZSBoZXJlIGJlY2F1c2UgaXQgZG9lcyBub3Qg
aGF2ZSBhY2Nlc3MgdG8gdGhpcyBwcml2YXRlIGNvbnN0cnVjdG9yLgorICAgIGF1dG8gdG9rZW5p
emVyID0gc3RkOjp1bmlxdWVfcHRyPENTU1Rva2VuaXplcj4obmV3IENTU1Rva2VuaXplcihwcmVw
cm9jZXNzU3RyaW5nKHN0cmluZyksIG51bGxwdHIsICZzdWNjZXNzKSk7CisgICAgaWYgKFVOTElL
RUxZKCFzdWNjZXNzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHRva2Vu
aXplcjsKK30KKworc3RkOjp1bmlxdWVfcHRyPENTU1Rva2VuaXplcj4gQ1NTVG9rZW5pemVyOjp0
cnlDcmVhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1BhcnNlck9ic2VydmVyV3JhcHBlciYg
d3JhcHBlcikKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIC8vIFdlIGNhbid0IHVz
ZSBtYWtlVW5pcXVlIGhlcmUgYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGlz
IHByaXZhdGUgY29uc3RydWN0b3IuCisgICAgYXV0byB0b2tlbml6ZXIgPSBzdGQ6OnVuaXF1ZV9w
dHI8Q1NTVG9rZW5pemVyPihuZXcgQ1NTVG9rZW5pemVyKHByZXByb2Nlc3NTdHJpbmcoc3RyaW5n
KSwgJndyYXBwZXIsICZzdWNjZXNzKSk7CisgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHRva2VuaXplcjsKK30KKwogQ1NTVG9r
ZW5pemVyOjpDU1NUb2tlbml6ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgOiBDU1NUb2tl
bml6ZXIocHJlcHJvY2Vzc1N0cmluZyhzdHJpbmcpLCBudWxscHRyKQorICAgIDogQ1NTVG9rZW5p
emVyKHByZXByb2Nlc3NTdHJpbmcoc3RyaW5nKSwgbnVsbHB0ciwgbnVsbHB0cikKIHsKIH0KIAog
Q1NTVG9rZW5pemVyOjpDU1NUb2tlbml6ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1BhcnNl
ck9ic2VydmVyV3JhcHBlciYgd3JhcHBlcikKLSAgICA6IENTU1Rva2VuaXplcihwcmVwcm9jZXNz
U3RyaW5nKHN0cmluZyksICZ3cmFwcGVyKQorICAgIDogQ1NTVG9rZW5pemVyKHByZXByb2Nlc3NT
dHJpbmcoc3RyaW5nKSwgJndyYXBwZXIsIG51bGxwdHIpCiB7CiB9CiAKLWlubGluZSBDU1NUb2tl
bml6ZXI6OkNTU1Rva2VuaXplcihTdHJpbmcmJiBzdHJpbmcsIENTU1BhcnNlck9ic2VydmVyV3Jh
cHBlciogd3JhcHBlcikKK0NTU1Rva2VuaXplcjo6Q1NTVG9rZW5pemVyKFN0cmluZyYmIHN0cmlu
ZywgQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyKiB3cmFwcGVyLCBib29sKiBjb25zdHJ1Y3Rpb25T
dWNjZXNzUHRyKQogICAgIDogbV9pbnB1dChzdHJpbmcpCiB7CisgICAgaWYgKGNvbnN0cnVjdGlv
blN1Y2Nlc3NQdHIpCisgICAgICAgICpjb25zdHJ1Y3Rpb25TdWNjZXNzUHRyID0gdHJ1ZTsKKwog
ICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUbyBh
dm9pZCByZXNpemluZyB3ZSBlcnIgb24gdGhlIHNpZGUgb2YgcmVzZXJ2aW5nIHRvbyBtdWNoIHNw
YWNlLgogICAgIC8vIE1vc3Qgc3RyaW5ncyB3ZSB0b2tlbml6ZSBoYXZlIGFib3V0IDMuNSB0byA1
IGNoYXJhY3RlcnMgcGVyIHRva2VuLgotICAgIG1fdG9rZW5zLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoc3RyaW5nLmxlbmd0aCgpIC8gMyk7CisgICAgaWYgKFVOTElLRUxZKCFtX3Rva2Vucy50cnlS
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSAvIDMpKSkgeworICAgICAgICAv
LyBXaGVuIGNvbnN0cnVjdGlvblN1Y2Nlc3NQdHIgaXMgbnVsbCwgb3VyIHBvbGljeSBpcyB0byBj
cmFzaCBvbiBmYWlsdXJlLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdHJ1Y3Rpb25TdWNj
ZXNzUHRyKTsKKyAgICAgICAgKmNvbnN0cnVjdGlvblN1Y2Nlc3NQdHIgPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAogICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7CiAgICAgd2hpbGUg
KHRydWUpIHsKQEAgLTc3LDcgKzEwNSwxMiBAQCBpbmxpbmUgQ1NTVG9rZW5pemVyOjpDU1NUb2tl
bml6ZXIoU3RyaW5nCiAgICAgICAgICAgICBpZiAod3JhcHBlcikKICAgICAgICAgICAgICAgICB3
cmFwcGVyLT5hZGRDb21tZW50KG9mZnNldCwgbV9pbnB1dC5vZmZzZXQoKSwgbV90b2tlbnMuc2l6
ZSgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZCh0b2tl
bik7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIW1fdG9rZW5zLnRyeUFwcGVuZCh0b2tlbikp
KSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiBjb25zdHJ1Y3Rpb25TdWNjZXNzUHRyIGlzIG51
bGwsIG91ciBwb2xpY3kgaXMgdG8gY3Jhc2ggb24gZmFpbHVyZS4KKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjb25zdHJ1Y3Rpb25TdWNjZXNzUHRyKTsKKyAgICAgICAgICAgICAgICAq
Y29uc3RydWN0aW9uU3VjY2Vzc1B0ciA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh3cmFwcGVyKQogICAgICAgICAgICAgICAg
IHdyYXBwZXItPmFkZFRva2VuKG9mZnNldCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTVG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NUb2tlbml6ZXIuaAkocmV2aXNpb24gMjYzNzI0KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NUb2tlbml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQ1
LDYgKzQ1LDkgQEAgY2xhc3MgQ1NTVG9rZW5pemVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDU1NUb2tlbml6ZXIpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q1NTVG9rZW5pemVyPiB0cnlDcmVhdGUoY29uc3Qg
U3RyaW5nJik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDU1NUb2tlbml6ZXI+IHRyeUNy
ZWF0ZShjb25zdCBTdHJpbmcmLCBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXImKTsgLy8gRm9yIHRo
ZSBpbnNwZWN0b3IKKwogICAgIGV4cGxpY2l0IENTU1Rva2VuaXplcihjb25zdCBTdHJpbmcmKTsK
ICAgICBDU1NUb2tlbml6ZXIoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVy
Jik7IC8vIEZvciB0aGUgaW5zcGVjdG9yCiAKQEAgLTU0LDcgKzU3LDcgQEAgcHVibGljOgogICAg
IFZlY3RvcjxTdHJpbmc+JiYgZXNjYXBlZFN0cmluZ3NGb3JBZG9wdGlvbigpIHsgcmV0dXJuIFdU
Rk1vdmUobV9zdHJpbmdQb29sKTsgfQogCiBwcml2YXRlOgotICAgIENTU1Rva2VuaXplcihTdHJp
bmcmJiwgQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyKik7CisgICAgQ1NTVG9rZW5pemVyKFN0cmlu
ZyYmLCBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIqLCBib29sKiBjb25zdHJ1Y3Rpb25TdWNjZXNz
KTsKIAogICAgIENTU1BhcnNlclRva2VuIG5leHRUb2tlbigpOwogCkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNjM3MjQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNCBAQAorMjAyMC0wNi0yOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIGhhbmRsaW5nIGZvciBhIGNhc2Ugb2YgT09NRSBpbiBDU1NUb2tlbml6ZXIg
YW5kIENTU1BhcnNlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMzcwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjQ4MDg4ODk+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBjc3MzL291dC1vZi1tZW1v
cnktaW4tY3NzLXRva2VuaXplci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNzczMv
b3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVyLmh0bWw6IEFkZGVkLgorCiAyMDIwLTA2LTI5
ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bVEZDXSBB
ZGp1c3QgYmFzZWxpbmUgd2hlbiB0aGUgdGFibGUgY2VsbCBpdHNlbGYgZXN0YWJsaXNoZXMgYW4g
SUZDCkluZGV4OiBMYXlvdXRUZXN0cy9jc3MzL291dC1vZi1tZW1vcnktaW4tY3NzLXRva2VuaXpl
ci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3NzMy9vdXQtb2YtbWVt
b3J5LWluLWNzcy10b2tlbml6ZXItZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2NzczMvb3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVyLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYw
MAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
ICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKSW5kZXg6IExheW91dFRl
c3RzL2NzczMvb3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVyLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10b2tlbml6ZXIuaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9jc3MzL291dC1vZi1tZW1vcnktaW4tY3NzLXRv
a2VuaXplci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorPHNjcmlwdD4KK0NT
Uy5zdXBwb3J0cygnYScucmVwZWF0KDIqKjI5ICsgMSkpOworPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403179</attachid>
            <date>2020-06-30 00:07:58 -0700</date>
            <delta_ts>2020-06-30 13:25:41 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-213702.patch</filename>
            <type>text/plain</type>
            <size>41248</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM3MzEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDIwLTA2LTI5ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaGFuZGxpbmcgZm9yIGEgY2FzZSBvZiBPT01FIGlu
IENTU1Rva2VuaXplciBhbmQgQ1NTUGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NDgw
ODg4OT4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAxLiBB
ZGRlZCBGYWlsdXJlQWN0aW9uIHNvIHRoYXQgd2UgY2FuIHBhcmFtZXRlcml6ZSBob3cgd2Ugd2Fu
dCB0byBoYW5kbGUgZmFpbHVyZXMuCisgICAgICAgICAgIEluIHRoaXMgcGF0Y2gsIHdlJ3JlIG9u
bHkgdXNpbmcgdGhpcyBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlcywgYnV0IHdlIGNvdWxkCisgICAg
ICAgICAgIHRlY2huaWNhbGx5IGFwcGx5IHRoaXMgdG8gb3RoZXIgdHlwZXMgb2YgZmFpbHVyZXMg
YXMgd2VsbC4KKworICAgICAgICAyLiBBcHBseSBGYWlsdXJlQWN0aW9uIHRvIG1hbnkgbWV0aG9k
cyBpbiBWZWN0b3IgKGFuZCBpdHMgc3VwZXIgY2xhc3Nlcykgc28gdGhhdAorICAgICAgICAgICB3
ZSBjYW4gc3RhcnQgZGUtZHVwbGljYXRpbmcgY29kZS4gIFByZXZpb3VzbHksIHdlIHdlcmUgYWx3
YXlzIGR1cGxpY2F0aW5nIGNvZGUKKyAgICAgICAgICAganVzdCB0byBoYXZlIGEgInRyeSIgdmVy
c2lvbiBvZiB0aGUgc2FtZSBtZXRob2QgdGhhdCByZXBvcnRzIHRoZSBmYWlsdXJlIHRvCisgICAg
ICAgICAgIGFsbG9jYXRlIGluc3RlYWQgb2YgY3Jhc2hpbmcuICBXZSBjYW4gbm93IHBhcmFtZXRl
cml6ZSBhbGwgdGhlc2UgbWV0aG9kcyBvbiBhCisgICAgICAgICAgIEZhaWx1cmVBY3Rpb24gdGVt
cGxhdGUgcGFyYW1ldGVyIGluc3RlYWQsIGFuZCBhdm9pZCB0aGUgY29kZSBkdXBsaWNhdGlvbi4K
KyAgICAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJldmVyc2VzIHNvbWUgb2YgdGhlIGV4aXN0aW5n
IGNvZGUgZHVwbGljYXRpb24uCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0ZhaWx1
cmVBY3Rpb24uaDogQWRkZWQuCisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RG
OjpWZWN0b3JCdWZmZXJCYXNlOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlZlY3Rv
ckJ1ZmZlckJhc2U6OnRyeUFsbG9jYXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVm
ZmVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlZlY3RvckJ1ZmZlcjo6dHJ5QWxs
b2NhdGVCdWZmZXIpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OnJlc2VydmVDYXBhY2l0eSk6Cisg
ICAgICAgIChXVEY6OlZlY3Rvcjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KToKKyAgICAgICAgKFdURjo6
VmVjdG9yOjpyZXNlcnZlSW5pdGlhbENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6VmVjdG9yOjp0
cnlSZXNlcnZlSW5pdGlhbENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6VmVjdG9yOjphcHBlbmQp
OgorICAgICAgICAoV1RGOjpWZWN0b3I6OnRyeUFwcGVuZCk6CisgICAgICAgIChXVEY6OlZlY3Rv
cjo6Y29uc3RydWN0QW5kQXBwZW5kKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjp0cnlDb25zdHJ1
Y3RBbmRBcHBlbmQpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OmV4cGFuZENhcGFjaXR5KToKKyAg
ICAgICAgKFdURjo6VmVjdG9yOjpyZXNpemUpOgorICAgICAgICAoV1RGOjpWZWN0b3I6Omdyb3cp
OgorICAgICAgICAoV1RGOjpWZWN0b3I6OnJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6
OlZlY3Rvcjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6
YXBwZW5kKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjpjb25zdHJ1Y3RBbmRBcHBlbmQpOgorICAg
ICAgICAoV1RGOjpWZWN0b3I6OmFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6VmVjdG9y
Ojpjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6YXBw
ZW5kVmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjppbnNlcnQpOgorICAgICAgICAoV1RG
OjpWZWN0b3I6OnRyeUV4cGFuZENhcGFjaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VmVj
dG9yOjp0cnlSZXNlcnZlQ2FwYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWZWN0b3I6
OnRyeUFwcGVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlZlY3Rvcjo6dHJ5Q29uc3RydWN0
QW5kQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VmVjdG9yOjp0cnlDb25zdHJ1Y3RB
bmRBcHBlbmRTbG93Q2FzZSk6IERlbGV0ZWQuCisKIDIwMjAtMDYtMjkgIEdlb2ZmcmV5IEdhcmVu
ICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBh
biBhY2NpZGVudGFsIGNoYW5nZSBmcm9tIHIyNjM3MjMuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzczMSkKKysrIFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc2MCw2ICs3
NjAsNyBAQAogCQlGRTg2QTg3NDFFNTk0NDAyMDAxMTFCQkYgLyogRm9yYmlkSGVhcEFsbG9jYXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9yYmlkSGVhcEFsbG9jYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU4OTI1QUYxRDAwREFFQzAwNDY5
MDdFIC8qIEluZGVudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGVu
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTdGNkE4MjQ1Q0U1REQwMEM2
M0ZDNiAvKiBTdGRJbnRFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RkSW50RXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOTk2QjUyMjRB
ODQ1QUYwMDFEMkU2MyAvKiBGYWlsdXJlQWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZhaWx1cmVBY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkVCNkIwMzUyMDFCRTBCNjAwQjk1OEMxIC8qIFBvaW50ZXJQcmVwYXJhdGlvbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlclByZXBhcmF0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tT
dGF0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGFja1N0YXRz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5
NjM0IC8qIFN0YWNrU3RhdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rh
Y2tTdGF0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxOSw2ICsxMDIwLDcg
QEAKIAkJCQkxQUVBODhFMTFENkJCQ0Y0MDBFNUFENjQgLyogRW51bVRyYWl0cy5oICovLAogCQkJ
CUFEN0M0MzRBMUREMkE0QTcwMDI2ODg4QiAvKiBFeHBlY3RlZC5oICovLAogCQkJCUE4QTQ3MjlG
MTUxQTgyNUEwMDQxMjNGRiAvKiBFeHBvcnRNYWNyb3MuaCAqLywKKwkJCQlGRTk5NkI1MjI0QTg0
NUFGMDAxRDJFNjMgLyogRmFpbHVyZUFjdGlvbi5oICovLAogCQkJCTBGN0M1RkI1MUQ4ODVDRjIw
MDQ0RjVFMiAvKiBGYXN0Qml0VmVjdG9yLmNwcCAqLywKIAkJCQkwRkQ4MUFDNDE1NEZCMjJFMDA5
ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MkExMTUxQTgyNUEwMDQxMjNG
RiAvKiBGYXN0TWFsbG9jLmNwcCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAyNjM3MzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNiArNjIsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgRW51bVRyYWl0
cy5oCiAgICAgRXhwZWN0ZWQuaAogICAgIEV4cG9ydE1hY3Jvcy5oCisgICAgRmFpbHVyZUFjdGlv
bi5oCiAgICAgRmFzdEJpdFZlY3Rvci5oCiAgICAgRmFzdE1hbGxvYy5oCiAgICAgRmFzdFRMUy5o
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYWlsdXJlQWN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvRmFpbHVyZUFjdGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYv
d3RmL0ZhaWx1cmVBY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitlbnVtIGNsYXNzIEZh
aWx1cmVBY3Rpb24geworICAgIENyYXNoLAorICAgIFJlcG9ydAorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjYzNzMxKQorKysgU291cmNlL1dURi93dGYv
VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdo
dCAoQykgMjAwNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPHR5cGVfdHJhaXRz
PgogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
CisjaW5jbHVkZSA8d3RmL0ZhaWx1cmVBY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5o
PgpAQCAtMjgyLDMxICsyODMsMzUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgTWFs
bG9jPgogY2xhc3MgVmVjdG9yQnVmZmVyQmFzZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
VmVjdG9yQnVmZmVyQmFzZSk7CiBwdWJsaWM6Ci0gICAgdm9pZCBhbGxvY2F0ZUJ1ZmZlcihzaXpl
X3QgbmV3Q2FwYWNpdHkpCisgICAgdGVtcGxhdGU8RmFpbHVyZUFjdGlvbiBhY3Rpb24+CisgICAg
Ym9vbCBhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCiAgICAgeworICAgICAgICBz
dGF0aWNfYXNzZXJ0KGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCB8fCBhY3Rpb24gPT0g
RmFpbHVyZUFjdGlvbjo6UmVwb3J0KTsKICAgICAgICAgQVNTRVJUKG5ld0NhcGFjaXR5KTsKLSAg
ICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpIC8gc2l6ZW9mKFQpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgc2l6ZV90IHNp
emVUb0FsbG9jYXRlID0gbmV3Q2FwYWNpdHkgKiBzaXplb2YoVCk7Ci0gICAgICAgIG1fY2FwYWNp
dHkgPSBzaXplVG9BbGxvY2F0ZSAvIHNpemVvZihUKTsKLSAgICAgICAgbV9idWZmZXIgPSBzdGF0
aWNfY2FzdDxUKj4oTWFsbG9jOjptYWxsb2Moc2l6ZVRvQWxsb2NhdGUpKTsKLSAgICB9Ci0KLSAg
ICBib29sIHRyeUFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChuZXdDYXBhY2l0eSk7Ci0gICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHNpemVvZihUKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpIC8gc2l6ZW9mKFQpKSB7CisgICAgICAgICAgICBpZiBjb25z
dGV4cHIgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCkKKyAgICAgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQogCiAgICAgICAgIHNpemVfdCBzaXplVG9BbGxvY2F0ZSA9IG5ld0NhcGFjaXR5
ICogc2l6ZW9mKFQpOwotICAgICAgICBUKiBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oTWFs
bG9jOjp0cnlNYWxsb2Moc2l6ZVRvQWxsb2NhdGUpKTsKLSAgICAgICAgaWYgKCFuZXdCdWZmZXIp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFQqIG5ld0J1ZmZlciA9IG51bGxw
dHI7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OkNyYXNo
KQorICAgICAgICAgICAgbmV3QnVmZmVyID0gc3RhdGljX2Nhc3Q8VCo+KE1hbGxvYzo6bWFsbG9j
KHNpemVUb0FsbG9jYXRlKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbmV3QnVmZmVy
ID0gc3RhdGljX2Nhc3Q8VCo+KE1hbGxvYzo6dHJ5TWFsbG9jKHNpemVUb0FsbG9jYXRlKSk7Cisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoIW5ld0J1ZmZlcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIG1fY2FwYWNpdHkgPSBzaXplVG9BbGxvY2F0
ZSAvIHNpemVvZihUKTsKICAgICAgICAgbV9idWZmZXIgPSBuZXdCdWZmZXI7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhbGxvY2F0ZUJ1ZmZl
cihzaXplX3QgbmV3Q2FwYWNpdHkpIHsgYWxsb2NhdGVCdWZmZXI8RmFpbHVyZUFjdGlvbjo6Q3Jh
c2g+KG5ld0NhcGFjaXR5KTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB0cnlBbGxvY2F0ZUJ1
ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpIHsgcmV0dXJuIGFsbG9jYXRlQnVmZmVyPEZhaWx1cmVB
Y3Rpb246OlJlcG9ydD4obmV3Q2FwYWNpdHkpOyB9CisKICAgICBib29sIHNob3VsZFJlYWxsb2Nh
dGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IFZlY3RvclRyYWl0czxUPjo6Y2FuTW92ZVdpdGhNZW1jcHkgJiYgbV9jYXBhY2l0eSAmJiBuZXdD
YXBhY2l0eTsKQEAgLTQ1NywyNiArNDYyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgZGVhbGxvY2F0
ZUJ1ZmZlcihidWZmZXIoKSk7CiAgICAgfQogCi0gICAgdm9pZCBhbGxvY2F0ZUJ1ZmZlcihzaXpl
X3QgbmV3Q2FwYWNpdHkpCisgICAgdGVtcGxhdGU8RmFpbHVyZUFjdGlvbiBhY3Rpb24+CisgICAg
Ym9vbCBhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCiAgICAgewogICAgICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgQVNTRVJUKCFtX2J1ZmZlcikgdG8gY2F0Y2ggbWlzdXNlL2xl
YWtzLgogICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBpbmxpbmVDYXBhY2l0eSkKLSAgICAgICAg
ICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBtX2J1ZmZlciA9IGlubGluZUJ1ZmZlcigpOwotICAgICAgICAgICAgbV9jYXBh
Y2l0eSA9IGlubGluZUNhcGFjaXR5OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCB0cnlB
bGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCi0gICAgewotICAgICAgICBpZiAobmV3
Q2FwYWNpdHkgPiBpbmxpbmVDYXBhY2l0eSkKLSAgICAgICAgICAgIHJldHVybiBCYXNlOjp0cnlB
bGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7CisgICAgICAgICAgICByZXR1cm4gQmFzZTo6dGVt
cGxhdGUgYWxsb2NhdGVCdWZmZXI8YWN0aW9uPihuZXdDYXBhY2l0eSk7CiAgICAgICAgIG1fYnVm
ZmVyID0gaW5saW5lQnVmZmVyKCk7CiAgICAgICAgIG1fY2FwYWNpdHkgPSBpbmxpbmVDYXBhY2l0
eTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IGFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkgeyBhbGxvY2F0ZUJ1ZmZlcjxGYWls
dXJlQWN0aW9uOjpDcmFzaD4obmV3Q2FwYWNpdHkpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29s
IHRyeUFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkgeyByZXR1cm4gYWxsb2NhdGVC
dWZmZXI8RmFpbHVyZUFjdGlvbjo6UmVwb3J0PihuZXdDYXBhY2l0eSk7IH0KKwogICAgIHZvaWQg
ZGVhbGxvY2F0ZUJ1ZmZlcihUKiBidWZmZXJUb0RlYWxsb2NhdGUpCiAgICAgewogICAgICAgICBp
ZiAoYnVmZmVyVG9EZWFsbG9jYXRlID09IGlubGluZUJ1ZmZlcigpKQpAQCAtNzYxLDkgKzc2MCwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBncm93KHNpemVfdCBzaXplKTsKICAgICB2b2lkIHJlc2l6
ZShzaXplX3Qgc2l6ZSk7CiAgICAgdm9pZCByZXNpemVUb0ZpdChzaXplX3Qgc2l6ZSk7Ci0gICAg
dm9pZCByZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsKLSAgICBib29sIHRyeVJl
c2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpOwotICAgIHZvaWQgcmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgcmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkgeyByZXNlcnZlQ2FwYWNpdHk8
RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KG5ld0NhcGFjaXR5KTsgfQorICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCB0cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KSB7IHJldHVybiByZXNl
cnZlQ2FwYWNpdHk8RmFpbHVyZUFjdGlvbjo6UmVwb3J0PihuZXdDYXBhY2l0eSk7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENh
cGFjaXR5KSB7IHJlc2VydmVJbml0aWFsQ2FwYWNpdHk8RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KGlu
aXRpYWxDYXBhY2l0eSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5UmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KSB7IHJldHVybiByZXNlcnZlSW5pdGlh
bENhcGFjaXR5PEZhaWx1cmVBY3Rpb246OlJlcG9ydD4oaW5pdGlhbENhcGFjaXR5KTsgfQogICAg
IHZvaWQgc2hyaW5rQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsKICAgICB2b2lkIHNocmlu
a1RvRml0KCkgeyBzaHJpbmtDYXBhY2l0eShzaXplKCkpOyB9CiAKQEAgLTc3MiwxOCArNzcyLDE5
IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gVmVjdG9yPFU+IGlzb2xh
dGVkQ29weSgpIGNvbnN0OwogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChWYWx1ZVR5
cGUmJiB2YWx1ZSkgeyBhcHBlbmQ8VmFsdWVUeXBlPihzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2
YWx1ZSkpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQoVSYmKTsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiB2b2lkIGNvbnN0cnVjdEFuZEFwcGVuZChBcmdz
JiYuLi4pOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+IGJvb2wgdHJ5Q29uc3RydWN0
QW5kQXBwZW5kKEFyZ3MmJi4uLik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQUxXQVlTX0lO
TElORSB2b2lkIGFwcGVuZChVJiYgdSkgeyBhcHBlbmQ8RmFpbHVyZUFjdGlvbjo6Q3Jhc2gsIFU+
KHN0ZDo6Zm9yd2FyZDxVPih1KSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBBTFdBWVNf
SU5MSU5FIGJvb2wgdHJ5QXBwZW5kKFUmJiB1KSB7IHJldHVybiBhcHBlbmQ8RmFpbHVyZUFjdGlv
bjo6UmVwb3J0LCBVPihzdGQ6OmZvcndhcmQ8VT4odSkpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJncz4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYu
Li4gYXJncykgeyBjb25zdHJ1Y3RBbmRBcHBlbmQ8RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KHN0ZDo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdz
PiBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5Q29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLiBhcmdz
KSB7IHJldHVybiBjb25zdHJ1Y3RBbmRBcHBlbmQ8RmFpbHVyZUFjdGlvbjo6UmVwb3J0PihzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOyB9CiAKICAgICB2b2lkIHVuY2hlY2tlZEFwcGVuZChW
YWx1ZVR5cGUmJiB2YWx1ZSkgeyB1bmNoZWNrZWRBcHBlbmQ8VmFsdWVUeXBlPihzdGQ6OmZvcndh
cmQ8VmFsdWVUeXBlPih2YWx1ZSkpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCB1
bmNoZWNrZWRBcHBlbmQoVSYmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiB2b2lk
IHVuY2hlY2tlZENvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYuLi4pOwogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQoY29uc3QgVSosIHNpemVfdCk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChjb25zdCBVKiB1LCBzaXplX3Qg
c2l6ZSkgeyBhcHBlbmQ8RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KHUsIHNpemUpOyB9CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gQUxXQVlTX0lOTElORSBib29sIHRyeUFwcGVuZChjb25zdCBVKiB1
LCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gYXBwZW5kPEZhaWx1cmVBY3Rpb246OlJlcG9ydD4odSwg
c2l6ZSk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3Qgb3RoZXJDYXBhY2l0eT4g
dm9pZCBhcHBlbmRWZWN0b3IoY29uc3QgVmVjdG9yPFUsIG90aGVyQ2FwYWNpdHk+Jik7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IG90aGVyQ2FwYWNpdHk+IHZvaWQgYXBwZW5kVmVj
dG9yKFZlY3RvcjxVLCBvdGhlckNhcGFjaXR5PiYmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBib29sIHRyeUFwcGVuZChjb25zdCBVKiwgc2l6ZV90KTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHZvaWQgaW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgY29uc3QgVSosIHNpemVfdCk7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBpbnNlcnQoc2l6ZV90IHBvc2l0aW9uLCBVJiYp
OwpAQCAtODM3LDE0ICs4MzgsMTggQEAgcHVibGljOgogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NpemUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxk
ZWNsdHlwZShtX3NpemUpPjo6bWF4KCk7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGV4cGFuZENh
cGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSk7Ci0gICAgVCogZXhwYW5kQ2FwYWNpdHkoc2l6
ZV90IG5ld01pbkNhcGFjaXR5LCBUKik7Ci0gICAgYm9vbCB0cnlFeHBhbmRDYXBhY2l0eShzaXpl
X3QgbmV3TWluQ2FwYWNpdHkpOwotICAgIGNvbnN0IFQqIHRyeUV4cGFuZENhcGFjaXR5KHNpemVf
dCBuZXdNaW5DYXBhY2l0eSwgY29uc3QgVCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFUq
IGV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVSopOyAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZFNsb3dDYXNlKFUmJik7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJncz4gdm9pZCBjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShBcmdzJiYuLi4p
OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+IGJvb2wgdHJ5Q29uc3RydWN0QW5kQXBw
ZW5kU2xvd0Nhc2UoQXJncyYmLi4uKTsKKyAgICB0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uPiBib29s
IHJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpOworICAgIHRlbXBsYXRlPEZhaWx1
cmVBY3Rpb24+IGJvb2wgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENhcGFj
aXR5KTsKKworICAgIHRlbXBsYXRlPEZhaWx1cmVBY3Rpb24+IGJvb2wgZXhwYW5kQ2FwYWNpdHko
c2l6ZV90IG5ld01pbkNhcGFjaXR5KTsKKyAgICB0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uPiBUKiBl
eHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFQqKTsKKyAgICB0ZW1wbGF0ZTxG
YWlsdXJlQWN0aW9uLCB0eXBlbmFtZSBVPiBVKiBleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWlu
Q2FwYWNpdHksIFUqKTsKKyAgICB0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uLCB0eXBlbmFtZSBVPiBi
b29sIGFwcGVuZFNsb3dDYXNlKFUmJik7CisgICAgdGVtcGxhdGU8RmFpbHVyZUFjdGlvbiwgdHlw
ZW5hbWUuLi4gQXJncz4gYm9vbCBjb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYmLi4uKTsKKyAgICB0
ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uLCB0eXBlbmFtZS4uLiBBcmdzPiBib29sIGNvbnN0cnVjdEFu
ZEFwcGVuZFNsb3dDYXNlKEFyZ3MmJi4uLik7CisKKyAgICB0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9u
LCB0eXBlbmFtZSBVPiBib29sIGFwcGVuZChVJiYpOworICAgIHRlbXBsYXRlPEZhaWx1cmVBY3Rp
b24sIHR5cGVuYW1lIFU+IGJvb2wgYXBwZW5kKGNvbnN0IFUqLCBzaXplX3QpOwogCiAgICAgdGVt
cGxhdGU8c2l6ZV90IHBvc2l0aW9uLCB0eXBlbmFtZSBVLCB0eXBlbmFtZS4uLiBJdGVtcz4KICAg
ICB2b2lkIHVuY2hlY2tlZEluaXRpYWxpemUoVSYmIGl0ZW0sIEl0ZW1zJiYuLi4gaXRlbXMpCkBA
IC0xMDQzLDQ4ICsxMDQ4LDQ0IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0gKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFs
bG9jPgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHksIE1hbGxvYz46OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSkK
K3RlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uPgorYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmV4cGFuZENhcGFj
aXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSkKIHsKLSAgICByZXNlcnZlQ2FwYWNpdHkoc3RkOjpt
YXgobmV3TWluQ2FwYWNpdHksIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4obWluQ2FwYWNp
dHkpLCBjYXBhY2l0eSgpICsgY2FwYWNpdHkoKSAvIDQgKyAxKSkpOworICAgIHJldHVybiByZXNl
cnZlQ2FwYWNpdHk8YWN0aW9uPihzdGQ6Om1heChuZXdNaW5DYXBhY2l0eSwgc3RkOjptYXgoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihtaW5DYXBhY2l0eSksIGNhcGFjaXR5KCkgKyBjYXBhY2l0eSgpIC8g
NCArIDEpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1l
IE1hbGxvYz4KK3RlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uPgogTkVWRVJfSU5MSU5FIFQq
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBUKiBwdHIpCiB7
CisgICAgc3RhdGljX2Fzc2VydChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6Q3Jhc2ggfHwgYWN0
aW9uID09IEZhaWx1cmVBY3Rpb246OlJlcG9ydCk7CiAgICAgaWYgKHB0ciA8IGJlZ2luKCkgfHwg
cHRyID49IGVuZCgpKSB7Ci0gICAgICAgIGV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KTsK
KyAgICAgICAgYm9vbCBzdWNjZXNzID0gZXhwYW5kQ2FwYWNpdHk8YWN0aW9uPihuZXdNaW5DYXBh
Y2l0eSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJl
cG9ydCkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gcHRyOwogICAg
IH0KICAgICBzaXplX3QgaW5kZXggPSBwdHIgLSBiZWdpbigpOwotICAgIGV4cGFuZENhcGFjaXR5
KG5ld01pbkNhcGFjaXR5KTsKLSAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4OwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1ib29sIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9j
Pjo6dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQotewotICAgIHJldHVy
biB0cnlSZXNlcnZlQ2FwYWNpdHkoc3RkOjptYXgobmV3TWluQ2FwYWNpdHksIHN0ZDo6bWF4KHN0
YXRpY19jYXN0PHNpemVfdD4obWluQ2FwYWNpdHkpLCBjYXBhY2l0eSgpICsgY2FwYWNpdHkoKSAv
IDQgKyAxKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFt
ZSBNYWxsb2M+Ci1jb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnRyeUV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdN
aW5DYXBhY2l0eSwgY29uc3QgVCogcHRyKQotewotICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0
ciA+PSBlbmQoKSkgewotICAgICAgICBpZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFj
aXR5KSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gcHRyOworICAgIGJv
b2wgc3VjY2VzcyA9IGV4cGFuZENhcGFjaXR5PGFjdGlvbj4obmV3TWluQ2FwYWNpdHkpOworICAg
IGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJlcG9ydCkgeworICAgICAg
ICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQotICAgIHNpemVfdCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7Ci0gICAgaWYgKCF0cnlFeHBh
bmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSkpCi0gICAgICAgIHJldHVybiAwOwogICAgIHJldHVy
biBiZWdpbigpICsgaW5kZXg7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHks
IHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVuYW1lIFU+Cit0ZW1wbGF0ZTxGYWlsdXJl
QWN0aW9uIGFjdGlvbiwgdHlwZW5hbWUgVT4KIGlubGluZSBVKiBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmV4cGFuZENhcGFj
aXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVSogcHRyKQogewotICAgIGV4cGFuZENhcGFjaXR5
KG5ld01pbkNhcGFjaXR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KGFjdGlvbiA9PSBGYWlsdXJlQWN0
aW9uOjpDcmFzaCB8fCBhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0KTsKKyAgICBib29s
IHN1Y2Nlc3MgPSBleHBhbmRDYXBhY2l0eTxhY3Rpb24+KG5ld01pbkNhcGFjaXR5KTsKKyAgICBp
ZiBjb25zdGV4cHIgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpIHsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KICAgICByZXR1cm4gcHRyOwogfQogCkBAIC0xMDk2LDcgKzEwOTcsNyBAQCBpbmxpbmUgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiAgICAgICAgIGFzYW5CdWZmZXJTaXplV2ls
bENoYW5nZVRvKHNpemUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChzaXplID4gY2FwYWNp
dHkoKSkKLSAgICAgICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOworICAgICAgICAgICAgZXhw
YW5kQ2FwYWNpdHk8RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KHNpemUpOwogICAgICAgICBhc2FuQnVm
ZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXplKTsKICAgICAgICAgaWYgKGJlZ2luKCkpCiAgICAgICAg
ICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZUlmTm9uUE9EKGVuZCgpLCBiZWdpbigpICsg
c2l6ZSk7CkBAIC0xMTI2LDcgKzExMjcsNyBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dICiB7CiAgICAgQVNTRVJUKHNpemUgPj0gbV9zaXplKTsKICAgICBpZiAoc2l6
ZSA+IGNhcGFjaXR5KCkpCi0gICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOworICAgICAgICBl
eHBhbmRDYXBhY2l0eTxGYWlsdXJlQWN0aW9uOjpDcmFzaD4oc2l6ZSk7CiAgICAgYXNhbkJ1ZmZl
clNpemVXaWxsQ2hhbmdlVG8oc2l6ZSk7CiAgICAgaWYgKGJlZ2luKCkpCiAgICAgICAgIFR5cGVP
cGVyYXRpb25zOjppbml0aWFsaXplSWZOb25QT0QoZW5kKCksIGJlZ2luKCkgKyBzaXplKTsKQEAg
LTExNzgsMjcgKzExNzksMTAgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxs
b2M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eSwgTWFsbG9jPjo6cmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKLXsK
LSAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7Ci0gICAgVCogb2xkRW5kID0gZW5kKCk7Ci0KLSAgICBh
c2FuU2V0QnVmZmVyU2l6ZVRvRnVsbENhcGFjaXR5KCk7Ci0KLSAgICBCYXNlOjphbGxvY2F0ZUJ1
ZmZlcihuZXdDYXBhY2l0eSk7Ci0gICAgQVNTRVJUKGJlZ2luKCkpOwotCi0gICAgYXNhblNldElu
aXRpYWxCdWZmZXJTaXplVG8oc2l6ZSgpKTsKLQotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9s
ZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKLSAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9s
ZEJ1ZmZlcik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1l
IE1hbGxvYz4KLWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFj
aXR5KQordGVtcGxhdGU8RmFpbHVyZUFjdGlvbiBhY3Rpb24+Citib29sIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVzZXJ2
ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKIHsKKyAgICBzdGF0aWNfYXNzZXJ0KGFjdGlv
biA9PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCB8fCBhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmVw
b3J0KTsKICAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKQEAgLTEyMDYsOSArMTE5MCwxMiBA
QCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAKICAgICBhc2FuU2V0
QnVmZmVyU2l6ZVRvRnVsbENhcGFjaXR5KCk7CiAKLSAgICBpZiAoIUJhc2U6OnRyeUFsbG9jYXRl
QnVmZmVyKG5ld0NhcGFjaXR5KSkgewotICAgICAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVU
byhzaXplKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBzdWNjZXNzID0gQmFz
ZTo6dGVtcGxhdGUgYWxsb2NhdGVCdWZmZXI8YWN0aW9uPihuZXdDYXBhY2l0eSk7CisgICAgaWYg
Y29uc3RleHByIChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0KSB7CisgICAgICAgIGlm
IChVTkxJS0VMWSghc3VjY2VzcykpIHsKKyAgICAgICAgICAgIGFzYW5TZXRJbml0aWFsQnVmZmVy
U2l6ZVRvKHNpemUoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAg
ICB9CiAgICAgQVNTRVJUKGJlZ2luKCkpOwogCkBAIC0xMjIwLDEyICsxMjA3LDE1IEBAIGJvb2wg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5lIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojpy
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpCit0ZW1wbGF0ZTxG
YWlsdXJlQWN0aW9uIGFjdGlvbj4KK2lubGluZSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KQogeworICAgIHN0YXRpY19hc3NlcnQoYWN0
aW9uID09IEZhaWx1cmVBY3Rpb246OkNyYXNoIHx8IGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpS
ZXBvcnQpOwogICAgIEFTU0VSVCghbV9zaXplKTsKICAgICBBU1NFUlQoY2FwYWNpdHkoKSA9PSBp
bmxpbmVDYXBhY2l0eSk7Ci0gICAgaWYgKGluaXRpYWxDYXBhY2l0eSA+IGlubGluZUNhcGFjaXR5
KQotICAgICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihpbml0aWFsQ2FwYWNpdHkpOworICAgIGlm
IChpbml0aWFsQ2FwYWNpdHkgPD0gaW5saW5lQ2FwYWNpdHkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBCYXNlOjp0ZW1wbGF0ZSBhbGxvY2F0ZUJ1ZmZlcjxhY3Rpb24+KGluaXRp
YWxDYXBhY2l0eSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVu
YW1lIE1hbGxvYz4KQEAgLTEyNjAsMzUgKzEyNTAsMjUgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVPgotQUxXQVlTX0lOTElORSB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPjo6YXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKK3RlbXBs
YXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uLCB0eXBlbmFtZSBVPgorQUxXQVlTX0lOTElORSBib29s
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6YXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKIHsKKyAgICBz
dGF0aWNfYXNzZXJ0KGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCB8fCBhY3Rpb24gPT0g
RmFpbHVyZUFjdGlvbjo6UmVwb3J0KTsKICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSArIGRh
dGFTaXplOwogICAgIGlmIChuZXdTaXplID4gY2FwYWNpdHkoKSkgewotICAgICAgICBkYXRhID0g
ZXhwYW5kQ2FwYWNpdHkobmV3U2l6ZSwgZGF0YSk7CisgICAgICAgIGRhdGEgPSBleHBhbmRDYXBh
Y2l0eTxhY3Rpb24+KG5ld1NpemUsIGRhdGEpOworICAgICAgICBpZiBjb25zdGV4cHIgKGFjdGlv
biA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSgh
ZGF0YSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAg
IEFTU0VSVChiZWdpbigpKTsKICAgICB9Ci0gICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCi0gICAg
ICAgIENSQVNIKCk7Ci0gICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obmV3U2l6ZSk7Ci0g
ICAgVCogZGVzdCA9IGVuZCgpOwotICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46
OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgc3RkOjphZGRyZXNzb2YoZGF0YVtk
YXRhU2l6ZV0pLCBkZXN0KTsKLSAgICBtX3NpemUgPSBuZXdTaXplOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgotQUxXQVlTX0lOTElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEs
IHNpemVfdCBkYXRhU2l6ZSkKLXsKLSAgICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSArIGRhdGFT
aXplOwotICAgIGlmIChuZXdTaXplID4gY2FwYWNpdHkoKSkgewotICAgICAgICBkYXRhID0gdHJ5
RXhwYW5kQ2FwYWNpdHkobmV3U2l6ZSwgZGF0YSk7Ci0gICAgICAgIGlmICghZGF0YSkKKyAgICBp
ZiAobmV3U2l6ZSA8IG1fc2l6ZSkgeworICAgICAgICBpZiBjb25zdGV4cHIgKGFjdGlvbiA9PSBG
YWlsdXJlQWN0aW9uOjpDcmFzaCkKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAg
IH0KLSAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG5ld1NpemUpOwogICAgIFQqIGRlc3QgPSBlbmQo
KTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5p
dGlhbGl6ZWRDb3B5KGRhdGEsIHN0ZDo6YWRkcmVzc29mKGRhdGFbZGF0YVNpemVdKSwgZGVzdCk7
CkBAIC0xMjk3LDM2ICsxMjc3LDIyIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUg
TWFsbG9jPgotdGVtcGxhdGU8dHlwZW5hbWUgVT4KLUFMV0FZU19JTkxJTkUgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46
OmFwcGVuZChVJiYgdmFsdWUpCit0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uIGFjdGlvbiwgdHlwZW5h
bWUgVT4KK0FMV0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZChVJiYgdmFsdWUpCiB7CiAg
ICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7CiAgICAgICAgIGFzYW5CdWZmZXJTaXplV2ls
bENoYW5nZVRvKG1fc2l6ZSArIDEpOwogICAgICAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogICAgICAgICArK21fc2l6ZTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGFwcGVuZFNsb3dDYXNlKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotQUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6Y29u
c3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQotewotICAgIGlmIChzaXplKCkgIT0gY2Fw
YWNpdHkoKSkgewotICAgICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgKyAx
KTsKLSAgICAgICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJn
cykuLi4pOwotICAgICAgICArK21fc2l6ZTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShzdGQ6OmZv
cndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIHJldHVybiBhcHBlbmRTbG93Q2FzZTxhY3Rpb24s
IFU+KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgot
QUxXQVlTX0lOTElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4u
LiBhcmdzKQordGVtcGxhdGU8RmFpbHVyZUFjdGlvbiBhY3Rpb24sIHR5cGVuYW1lLi4uIEFyZ3M+
CitBTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYmLi4u
IGFyZ3MpCiB7CiAgICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7CiAgICAgICAgIGFzYW5C
dWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwpAQCAtMTMzNCw1MiArMTMwMCw0OCBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjCiAgICAgICAgICsrbV9z
aXplOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRyeUNv
bnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisK
KyAgICByZXR1cm4gY29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2U8YWN0aW9uPihzdGQ6OmZvcndh
cmQ8QXJncz4oYXJncykuLi4pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVPgotdm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFw
cGVuZFNsb3dDYXNlKFUmJiB2YWx1ZSkKK3RlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uLCB0
eXBlbmFtZSBVPgorYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZFNsb3dDYXNlKFUmJiB2YWx1ZSkKIHsKKyAg
ICBzdGF0aWNfYXNzZXJ0KGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCB8fCBhY3Rpb24g
PT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0KTsKICAgICBBU1NFUlQoc2l6ZSgpID09IGNhcGFjaXR5
KCkpOwogCiAgICAgYXV0byBwdHIgPSBjb25zdF9jYXN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2Nv
bnN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxVPjo6dHlwZT46OnR5cGUqPihzdGQ6
OmFkZHJlc3NvZih2YWx1ZSkpOwotICAgIHB0ciA9IGV4cGFuZENhcGFjaXR5KHNpemUoKSArIDEs
IHB0cik7CisgICAgcHRyID0gZXhwYW5kQ2FwYWNpdHk8YWN0aW9uPihzaXplKCkgKyAxLCBwdHIp
OworICAgIGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJlcG9ydCkgewor
ICAgICAgICBpZiAoVU5MSUtFTFkoIXB0cikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogICAgIEFTU0VSVChiZWdpbigpKTsKIAogICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5n
ZVRvKG1fc2l6ZSArIDEpOwogICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJk
PFU+KCpwdHIpKTsKICAgICArK21fc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJncz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShB
cmdzJiYuLi4gYXJncykKK3RlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uLCB0eXBlbmFtZS4u
LiBBcmdzPgorYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwg
bWluQ2FwYWNpdHksIE1hbGxvYz46OmNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKEFyZ3MmJi4u
LiBhcmdzKQogeworICAgIHN0YXRpY19hc3NlcnQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OkNy
YXNoIHx8IGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpOwogICAgIEFTU0VSVChzaXpl
KCkgPT0gY2FwYWNpdHkoKSk7CiAKLSAgICBleHBhbmRDYXBhY2l0eShzaXplKCkgKyAxKTsKKyAg
ICBib29sIHN1Y2Nlc3MgPSBleHBhbmRDYXBhY2l0eTxhY3Rpb24+KHNpemUoKSArIDEpOworICAg
IGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJlcG9ydCkgeworICAgICAg
ICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KICAgICBBU1NFUlQoYmVnaW4oKSk7CiAKICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VU
byhtX3NpemUgKyAxKTsKICAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxB
cmdzPihhcmdzKS4uLik7CiAgICAgKyttX3NpemU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3Qg
bWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+
Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eSwgTWFsbG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4uIGFy
Z3MpCi17Ci0gICAgQVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgpKTsKLSAgICAKLSAgICBpZiAo
VU5MSUtFTFkoIXRyeUV4cGFuZENhcGFjaXR5KHNpemUoKSArIDEpKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIEFTU0VSVChiZWdpbigpKTsKLSAgICAKLSAgICBhc2FuQnVmZmVyU2l6ZVdp
bGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKLSAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgKyttX3NpemU7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTE0MjMsNyArMTM4NSw3IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3YKIHsKICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSArIHZhbC5zaXplKCk7
CiAgICAgaWYgKG5ld1NpemUgPiBjYXBhY2l0eSgpKQotICAgICAgICBleHBhbmRDYXBhY2l0eShu
ZXdTaXplKTsKKyAgICAgICAgZXhwYW5kQ2FwYWNpdHk8RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KG5l
d1NpemUpOwogICAgIGZvciAoYXV0byYgaXRlbSA6IHZhbCkKICAgICAgICAgdW5jaGVja2VkQXBw
ZW5kKFdURk1vdmUoaXRlbSkpOwogfQpAQCAtMTQzNSw3ICsxMzk3LDcgQEAgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKHBvc2l0aW9uIDw9IHNpemUoKSk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSBtX3Np
emUgKyBkYXRhU2l6ZTsKICAgICBpZiAobmV3U2l6ZSA+IGNhcGFjaXR5KCkpIHsKLSAgICAgICAg
ZGF0YSA9IGV4cGFuZENhcGFjaXR5KG5ld1NpemUsIGRhdGEpOworICAgICAgICBkYXRhID0gZXhw
YW5kQ2FwYWNpdHk8RmFpbHVyZUFjdGlvbjo6Q3Jhc2g+KG5ld1NpemUsIGRhdGEpOwogICAgICAg
ICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQpAQCAt
MTQ1NSw3ICsxNDE3LDcgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dgogCiAgICAgYXV0byBwdHIgPSBjb25zdF9jYXN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0
PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxVPjo6dHlwZT46OnR5cGUqPihzdGQ6OmFk
ZHJlc3NvZih2YWx1ZSkpOwogICAgIGlmIChzaXplKCkgPT0gY2FwYWNpdHkoKSkgewotICAgICAg
ICBwdHIgPSBleHBhbmRDYXBhY2l0eShzaXplKCkgKyAxLCBwdHIpOworICAgICAgICBwdHIgPSBl
eHBhbmRDYXBhY2l0eTxGYWlsdXJlQWN0aW9uOjpDcmFzaD4oc2l6ZSgpICsgMSwgcHRyKTsKICAg
ICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MjYzNzMxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNTEgQEAKKzIwMjAtMDYtMjkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBoYW5kbGluZyBmb3IgYSBjYXNlIG9mIE9PTUUgaW4gQ1NTVG9rZW5pemVy
IGFuZCBDU1NQYXJzZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTM3MDIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY0ODA4ODg5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFdlIGFkZCBhIGJvb2wqIGNv
bnN0cnVjdGlvblN1Y2Nlc3MgZmVlZGJhY2sgYXJndW1lbnQgdG8gdGhlIHByaXZhdGUgQ1NTVG9r
ZW5pemVyCisgICAgICAgIGNvbnN0cnVjdG9yLiAgSWYgY29uc3RydWN0aW9uIGZhaWxzIGFuZCBj
b25zdHJ1Y3Rpb25TdWNjZXNzIGlzIHByb3ZpZGVkLCB0aGUKKyAgICAgICAgY29uc3RydWN0b3Ig
d2lsbCBzZXQgKmNvbnN0cnVjdGlvblN1Y2Nlc3MgdG8gZmFsc2UuICBJZiBjb25zdHJ1Y3Rpb24g
ZmFpbHMgYW5kCisgICAgICAgIGNvbnN0cnVjdGlvblN1Y2Nlc3MgaXMgbm90IHByb3ZpZGVkLCB0
aGUgY29uc3RydWN0b3Igd2lsbCBjcmFzaCB3aXRoIGEgZmFpbGVkCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJULiAgSW4gb3RoZXIgd29yZHMsIHRoZSBjbGllbnQgbWF5IG9wdCBpbiB0byBoYW5kbGUg
dGhlIGZhaWx1cmUgdG8KKyAgICAgICAgY29uc3RydWN0IGlmIGl0IGRvZXNuJ3Qgd2FudCB0aGUg
ZGVmYXVsdCBiZWhhdmlvciBvZiBjcmFzaGluZyBvbiBmYWlsdXJlLgorCisgICAgICAgIFdlIGFs
c28gcHJvdmlkZSAyIGNvbnZlbmllbmNlIGZhY3RvcnkgbWV0aG9kcyBmb3IgQ1NTVG9rZW5pemVy
IHdoaWNoIHdpbGwgcmV0dXJuCisgICAgICAgIGEgbnVsbCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTVG9r
ZW5pemVyPiBpZiBjb25zdHJ1Y3Rpb24gZmFpbHMuICBUaGlzIGlzIGN1cnJlbnRseQorICAgICAg
ICBvbmx5IHVzZWQgYnkgQ1NTUGFyc2VySW1wbCwgYW5kIGVuc3VyZXMgdGhhdCBpdHMgbV90b2tl
bml6ZXIgaXMgbnVsbCBpZiB3ZSBmYWlsIHRvCisgICAgICAgIGNvbnN0cnVjdC4gIFRoaXMgZW5z
dXJlcyB0aGF0IHRoZXJlIGlzbid0IGEgcG9pbnRlciB0byBhIHBhcnRpYWxseSBjb25zdHJ1Y3Rl
ZAorICAgICAgICB0b2tlbml6ZXIgdGhhdCBzb21lIGNvZGUgbWF5IHVua25vd2luZ2x5IHVzZS4K
KworICAgICAgICBUaGUgcmVhc29uIHdlIGRvbid0IGZvcmNlIGFsbCBjbGllbnRzIG9mIENTU1Rv
a2VuaXplciB0byB1c2UgdGhlIGZhY3RvcnkgbWV0aG9kcworICAgICAgICBpbnN0ZWFkIGlzIGJl
Y2F1c2UgdGhlcmUgYXJlIGNsaWVudHMgdGhhdCBjdXJyZW50bHkgdXNlIG9uLXN0YWNrIGluc3Rh
bnRpYXRpb25zCisgICAgICAgIG9mIENTU1Rva2VuaXplciB0byBkbyB0aGVpciB3b3JrLiAgV2Ug
ZG9uJ3Qgd2FudCB0byBmb3JjZSB0aGVtIHRvIHN3aXRjaCB0byB1c2luZworICAgICAgICBhIG1h
bGxvYyBpbnN0YW5jZS4gIEN1cnJlbnRseSwgdGhlIGNvbnN0cnVjdG9ycyB1c2VkIGJ5IHRob3Nl
IGNsaWVudHMgZG8gbm90CisgICAgICAgIHByb3ZpZGUgYSBjb25zdHJ1Y3Rpb25TdWNjZXNzIGFy
Z3VtZW50IHRvIHRoZSB1bmRlcmx5aW5nIHByaXZhdGUgY29uc3RydWN0b3IuCisgICAgICAgIEhl
bmNlLCBmb3IgdGhlbSwgdGhlIENTU1Rva2VuaXplciBjb25zdHJ1Y3RvciB3aWxsIGNyYXNoIGlm
IGNvbnN0cnVjdGlvbiBmYWlscywKKyAgICAgICAgd2hpY2ggaXMgaG93IHRoaW5ncyB3b3JrIGlu
IHByZS1leGlzdGluZyBjb2RlLiAgVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0CisgICAgICAg
IHRoZSBjcmFzaCBpcyBkZWZlcnJlZCB0aWxsIHRoZSBjbGllbnQgYXR0ZW1wdHMgdG8gdXNlIHRo
ZSB0b2tlbml6ZXIgaW5zdGVhZCBvZiBhdAorICAgICAgICBjb25zdHJ1Y3Rpb24gdGltZS4KKwor
ICAgICAgICBBcyBvZiB0aGlzIHBhdGNoLCBvbmx5IENTU1BhcnNlcjo6cGFyc2VTdXBwb3J0c0Nv
bmRpdGlvbigpIG1ha2VzIHVzZSBvZiB0aGUgbmV3CisgICAgICAgIGZlZWRiYWNrIG1lY2hhbmlz
bSwgYW5kIGhhbmRsZXMgT09NRSBkdXJpbmcgQ1NTVG9rZW5pemVyIGNvbnN0cnVjdGlvbiBieQor
ICAgICAgICBpbnRlcnByZXRpbmcgaXQgYXMgQ1NTIG5vdCBzdXBwb3J0aW5nIHRoZSBwYXNzZWQg
aW4gY29uZGl0aW9uIHN0cmluZy4KKworICAgICAgICBUZXN0OiBjc3MzL291dC1vZi1tZW1vcnkt
aW4tY3NzLXRva2VuaXplci5odG1sCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU3VwcG9ydHNDb25kaXRpb24p
OgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXJJbXBsOjpDU1NQYXJzZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlckltcGw6OmZhaWxlZCBjb25zdCk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJz
ZXJJbXBsLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NUb2tlbml6ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVG9rZW5pemVyOjpDU1NUb2tlbml6ZXIpOgorICAgICAgICAqIGNzcy9w
YXJzZXIvQ1NTVG9rZW5pemVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb2tlbml6ZXI6OmZh
aWxlZCBjb25zdCk6CisKIDIwMjAtMDYtMjkgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW1dlYiBBbmltYXRpb25zXSBSRUdSRVNTSU9OOiBCb290c3RyYXAg
Q2Fyb3VzZWwgY29tcG9uZW50IHY0LjEgcmVncmVzc2VkIHdpdGggV2ViIEFuaW1hdGlvbnMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDI2Mzcz
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNSBBbGxhbiBTYW5kZmVsZCBK
ZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlj
aG9sYXMgU2hhbmtzIDx3ZWJraXRAbmlja3NoYW5rcy5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vKQpAQCAtODksNiArODksOCBAQCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWU+IENT
U1BhcnNlcjo6cGFyCiBib29sIENTU1BhcnNlcjo6cGFyc2VTdXBwb3J0c0NvbmRpdGlvbihjb25z
dCBTdHJpbmcmIGNvbmRpdGlvbikKIHsKICAgICBDU1NQYXJzZXJJbXBsIHBhcnNlcihtX2NvbnRl
eHQsIGNvbmRpdGlvbik7CisgICAgaWYgKCFwYXJzZXIudG9rZW5pemVyKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gQ1NTU3VwcG9ydHNQYXJzZXI6OnN1cHBvcnRzQ29uZGl0
aW9uKHBhcnNlci50b2tlbml6ZXIoKS0+dG9rZW5SYW5nZSgpLCBwYXJzZXIsIENTU1N1cHBvcnRz
UGFyc2VyOjpGb3JXaW5kb3dDU1MpID09IENTU1N1cHBvcnRzUGFyc2VyOjpTdXBwb3J0ZWQ7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmNwcAko
cmV2aXNpb24gMjYzNzMxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vIENvcHlyaWdodCAyMDE0
IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
QykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTc3LDcgKzc3LDcgQEAgQ1NTUGFyc2VySW1wbDo6
Q1NTUGFyc2VySW1wbChjb25zdCBDU1NQYQogICAgICwgbV9zdHlsZVNoZWV0KHN0eWxlU2hlZXQp
CiAgICAgLCBtX29ic2VydmVyV3JhcHBlcih3cmFwcGVyKQogewotICAgIG1fdG9rZW5pemVyID0g
d3JhcHBlciA/IG1ha2VVbmlxdWU8Q1NTVG9rZW5pemVyPihzdHJpbmcsICp3cmFwcGVyKSA6IG1h
a2VVbmlxdWU8Q1NTVG9rZW5pemVyPihzdHJpbmcpOworICAgIG1fdG9rZW5pemVyID0gd3JhcHBl
ciA/IENTU1Rva2VuaXplcjo6dHJ5Q3JlYXRlKHN0cmluZywgKndyYXBwZXIpIDogQ1NTVG9rZW5p
emVyOjp0cnlDcmVhdGUoc3RyaW5nKTsKICAgICBpZiAoY29udGV4dC5kZWZlcnJlZENTU1BhcnNl
ckVuYWJsZWQgJiYgIXdyYXBwZXIgJiYgc3R5bGVTaGVldCAmJiBydWxlUGFyc2luZyA9PSBDU1NQ
YXJzZXI6OlJ1bGVQYXJzaW5nOjpEZWZlcnJlZCkKICAgICAgICAgbV9kZWZlcnJlZFBhcnNlciA9
IENTU0RlZmVycmVkUGFyc2VyOjpjcmVhdGUoY29udGV4dCwgc3RyaW5nLCAqc3R5bGVTaGVldCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuaAkocmV2
aXNpb24gMjYzNzMxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLyBDb3B5cmlnaHQgMjAxNCBUaGUg
Q2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwogLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Rv
a2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NU
b2tlbml6ZXIuY3BwCShyZXZpc2lvbiAyNjM3MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Rva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLyBD
b3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLwogLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00OCwyNSArNDgsNTMgQEAg
c3RhdGljIFN0cmluZyBwcmVwcm9jZXNzU3RyaW5nKFN0cmluZyBzdAogICAgIHJldHVybiBzdHJp
bmcucmVwbGFjZSgnXDAnLCByZXBsYWNlbWVudENoYXJhY3Rlcik7CiB9CiAKK3N0ZDo6dW5pcXVl
X3B0cjxDU1NUb2tlbml6ZXI+IENTU1Rva2VuaXplcjo6dHJ5Q3JlYXRlKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgLy8gV2UgY2FuJ3QgdXNl
IG1ha2VVbmlxdWUgaGVyZSBiZWNhdXNlIGl0IGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoaXMg
cHJpdmF0ZSBjb25zdHJ1Y3Rvci4KKyAgICBhdXRvIHRva2VuaXplciA9IHN0ZDo6dW5pcXVlX3B0
cjxDU1NUb2tlbml6ZXI+KG5ldyBDU1NUb2tlbml6ZXIocHJlcHJvY2Vzc1N0cmluZyhzdHJpbmcp
LCBudWxscHRyLCAmc3VjY2VzcykpOworICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiB0b2tlbml6ZXI7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxDU1NUb2tlbml6ZXI+IENTU1Rva2VuaXplcjo6dHJ5Q3JlYXRlKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXImIHdyYXBwZXIpCit7CisgICAgYm9v
bCBzdWNjZXNzID0gdHJ1ZTsKKyAgICAvLyBXZSBjYW4ndCB1c2UgbWFrZVVuaXF1ZSBoZXJlIGJl
Y2F1c2UgaXQgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBwcml2YXRlIGNvbnN0cnVjdG9y
LgorICAgIGF1dG8gdG9rZW5pemVyID0gc3RkOjp1bmlxdWVfcHRyPENTU1Rva2VuaXplcj4obmV3
IENTU1Rva2VuaXplcihwcmVwcm9jZXNzU3RyaW5nKHN0cmluZyksICZ3cmFwcGVyLCAmc3VjY2Vz
cykpOworICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiB0b2tlbml6ZXI7Cit9CisKIENTU1Rva2VuaXplcjo6Q1NTVG9rZW5pemVy
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgIDogQ1NTVG9rZW5pemVyKHByZXByb2Nlc3NTdHJp
bmcoc3RyaW5nKSwgbnVsbHB0cikKKyAgICA6IENTU1Rva2VuaXplcihwcmVwcm9jZXNzU3RyaW5n
KHN0cmluZyksIG51bGxwdHIsIG51bGxwdHIpCiB7CiB9CiAKIENTU1Rva2VuaXplcjo6Q1NTVG9r
ZW5pemVyKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXImIHdy
YXBwZXIpCi0gICAgOiBDU1NUb2tlbml6ZXIocHJlcHJvY2Vzc1N0cmluZyhzdHJpbmcpLCAmd3Jh
cHBlcikKKyAgICA6IENTU1Rva2VuaXplcihwcmVwcm9jZXNzU3RyaW5nKHN0cmluZyksICZ3cmFw
cGVyLCBudWxscHRyKQogewogfQogCi1pbmxpbmUgQ1NTVG9rZW5pemVyOjpDU1NUb2tlbml6ZXIo
U3RyaW5nJiYgc3RyaW5nLCBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIqIHdyYXBwZXIpCitDU1NU
b2tlbml6ZXI6OkNTU1Rva2VuaXplcihTdHJpbmcmJiBzdHJpbmcsIENTU1BhcnNlck9ic2VydmVy
V3JhcHBlciogd3JhcHBlciwgYm9vbCogY29uc3RydWN0aW9uU3VjY2Vzc1B0cikKICAgICA6IG1f
aW5wdXQoc3RyaW5nKQogeworICAgIGlmIChjb25zdHJ1Y3Rpb25TdWNjZXNzUHRyKQorICAgICAg
ICAqY29uc3RydWN0aW9uU3VjY2Vzc1B0ciA9IHRydWU7CisKICAgICBpZiAoc3RyaW5nLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVG8gYXZvaWQgcmVzaXppbmcgd2UgZXJy
IG9uIHRoZSBzaWRlIG9mIHJlc2VydmluZyB0b28gbXVjaCBzcGFjZS4KICAgICAvLyBNb3N0IHN0
cmluZ3Mgd2UgdG9rZW5pemUgaGF2ZSBhYm91dCAzLjUgdG8gNSBjaGFyYWN0ZXJzIHBlciB0b2tl
bi4KLSAgICBtX3Rva2Vucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSAv
IDMpOworICAgIGlmIChVTkxJS0VMWSghbV90b2tlbnMudHJ5UmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShzdHJpbmcubGVuZ3RoKCkgLyAzKSkpIHsKKyAgICAgICAgLy8gV2hlbiBjb25zdHJ1Y3Rpb25T
dWNjZXNzUHRyIGlzIG51bGwsIG91ciBwb2xpY3kgaXMgdG8gY3Jhc2ggb24gZmFpbHVyZS4KKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RydWN0aW9uU3VjY2Vzc1B0cik7CisgICAgICAgICpj
b25zdHJ1Y3Rpb25TdWNjZXNzUHRyID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC03Nyw3ICsx
MDUsMTIgQEAgaW5saW5lIENTU1Rva2VuaXplcjo6Q1NTVG9rZW5pemVyKFN0cmluZwogICAgICAg
ICAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgICAgICAgICAgd3JhcHBlci0+YWRkQ29tbWVudChv
ZmZzZXQsIG1faW5wdXQub2Zmc2V0KCksIG1fdG9rZW5zLnNpemUoKSk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW4pOworICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFtX3Rva2Vucy50cnlBcHBlbmQodG9rZW4pKSkgeworICAgICAgICAgICAgICAg
IC8vIFdoZW4gY29uc3RydWN0aW9uU3VjY2Vzc1B0ciBpcyBudWxsLCBvdXIgcG9saWN5IGlzIHRv
IGNyYXNoIG9uIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Ry
dWN0aW9uU3VjY2Vzc1B0cik7CisgICAgICAgICAgICAgICAgKmNvbnN0cnVjdGlvblN1Y2Nlc3NQ
dHIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAod3JhcHBlcikKICAgICAgICAgICAgICAgICB3cmFwcGVyLT5hZGRUb2tlbihv
ZmZzZXQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Rv
a2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVG9r
ZW5pemVyLmgJKHJldmlzaW9uIDI2MzczMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTVG9rZW5pemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLyBDb3B5cmln
aHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwog
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00NSw2ICs0NSw5IEBAIGNsYXNzIENT
U1Rva2VuaXplciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NTVG9rZW5pemVyKTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPENTU1Rva2VuaXplcj4gdHJ5Q3JlYXRlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8Q1NTVG9rZW5pemVyPiB0cnlDcmVhdGUoY29uc3QgU3RyaW5nJiwg
Q1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyJik7IC8vIEZvciB0aGUgaW5zcGVjdG9yCisKICAgICBl
eHBsaWNpdCBDU1NUb2tlbml6ZXIoY29uc3QgU3RyaW5nJik7CiAgICAgQ1NTVG9rZW5pemVyKGNv
bnN0IFN0cmluZyYsIENTU1BhcnNlck9ic2VydmVyV3JhcHBlciYpOyAvLyBGb3IgdGhlIGluc3Bl
Y3RvcgogCkBAIC01NCw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8U3RyaW5nPiYmIGVz
Y2FwZWRTdHJpbmdzRm9yQWRvcHRpb24oKSB7IHJldHVybiBXVEZNb3ZlKG1fc3RyaW5nUG9vbCk7
IH0KIAogcHJpdmF0ZToKLSAgICBDU1NUb2tlbml6ZXIoU3RyaW5nJiYsIENTU1BhcnNlck9ic2Vy
dmVyV3JhcHBlciopOworICAgIENTU1Rva2VuaXplcihTdHJpbmcmJiwgQ1NTUGFyc2VyT2JzZXJ2
ZXJXcmFwcGVyKiwgYm9vbCogY29uc3RydWN0aW9uU3VjY2Vzcyk7CiAKICAgICBDU1NQYXJzZXJU
b2tlbiBuZXh0VG9rZW4oKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzNzMxKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDYt
MjkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBoYW5kbGlu
ZyBmb3IgYSBjYXNlIG9mIE9PTUUgaW4gQ1NTVG9rZW5pemVyIGFuZCBDU1NQYXJzZXIuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM3MDIKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzY0ODA4ODg5PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgorCisgICAgICAgICogY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10b2tlbml6ZXIt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL291dC1vZi1tZW1vcnktaW4tY3Nz
LXRva2VuaXplci5odG1sOiBBZGRlZC4KKwogMjAyMC0wNi0yOSAgRGllZ28gUGlubyBHYXJjaWEg
IDxkcGlub0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVucmV2aWV3ZWQgdGVzdCBnYXJk
ZW5pbmcuIEZhaWx1cmVzIGhhcHBlbmluZyBpbiB0aGUgRVdTIEdUSy1XSzIgcXVldWUuCkluZGV4
OiBMYXlvdXRUZXN0cy9jc3MzL291dC1vZi1tZW1vcnktaW4tY3NzLXRva2VuaXplci1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNz
cy10b2tlbml6ZXItZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Nz
czMvb3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5k
ZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAw
CisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBSZW5kZXJC
b2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKSW5kZXg6IExheW91dFRlc3RzL2NzczMv
b3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10b2tlbml6ZXIuaHRtbAkobm9uZXhpc3Rl
bnQpCisrKyBMYXlvdXRUZXN0cy9jc3MzL291dC1vZi1tZW1vcnktaW4tY3NzLXRva2VuaXplci5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorPHNjcmlwdD4KK0NTUy5zdXBwb3J0
cygnYScucmVwZWF0KDIqKjI5ICsgMSkpOworPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403236</attachid>
            <date>2020-06-30 13:25:41 -0700</date>
            <delta_ts>2020-06-30 13:25:41 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-213702.patch</filename>
            <type>text/plain</type>
            <size>41443</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM3NTkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDIwLTA2LTMwICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaGFuZGxpbmcgZm9yIGEgY2FzZSBvZiBPT01FIGlu
IENTU1Rva2VuaXplciBhbmQgQ1NTUGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NDgw
ODg4OT4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAxLiBB
ZGRlZCBGYWlsdXJlQWN0aW9uIHNvIHRoYXQgd2UgY2FuIHBhcmFtZXRlcml6ZSBob3cgd2Ugd2Fu
dCB0byBoYW5kbGUgZmFpbHVyZXMuCisgICAgICAgICAgIEluIHRoaXMgcGF0Y2gsIHdlJ3JlIG9u
bHkgdXNpbmcgdGhpcyBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlcywgYnV0IHdlIGNvdWxkCisgICAg
ICAgICAgIHRlY2huaWNhbGx5IGFwcGx5IHRoaXMgdG8gb3RoZXIgdHlwZXMgb2YgZmFpbHVyZXMg
YXMgd2VsbC4KKworICAgICAgICAyLiBBcHBseSBGYWlsdXJlQWN0aW9uIHRvIG1hbnkgbWV0aG9k
cyBpbiBWZWN0b3IgKGFuZCBpdHMgc3VwZXIgY2xhc3Nlcykgc28gdGhhdAorICAgICAgICAgICB3
ZSBjYW4gc3RhcnQgZGUtZHVwbGljYXRpbmcgY29kZS4gIFByZXZpb3VzbHksIHdlIHdlcmUgYWx3
YXlzIGR1cGxpY2F0aW5nIGNvZGUKKyAgICAgICAgICAganVzdCB0byBoYXZlIGEgInRyeSIgdmVy
c2lvbiBvZiB0aGUgc2FtZSBtZXRob2QgdGhhdCByZXBvcnRzIHRoZSBmYWlsdXJlIHRvCisgICAg
ICAgICAgIGFsbG9jYXRlIGluc3RlYWQgb2YgY3Jhc2hpbmcuICBXZSBjYW4gbm93IHBhcmFtZXRl
cml6ZSBhbGwgdGhlc2UgbWV0aG9kcyBvbiBhCisgICAgICAgICAgIEZhaWx1cmVBY3Rpb24gdGVt
cGxhdGUgcGFyYW1ldGVyIGluc3RlYWQsIGFuZCBhdm9pZCB0aGUgY29kZSBkdXBsaWNhdGlvbi4K
KyAgICAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJldmVyc2VzIHNvbWUgb2YgdGhlIGV4aXN0aW5n
IGNvZGUgZHVwbGljYXRpb24uCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0ZhaWx1
cmVBY3Rpb24uaDogQWRkZWQuCisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RG
OjpWZWN0b3JCdWZmZXJCYXNlOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlZlY3Rv
ckJ1ZmZlckJhc2U6OnRyeUFsbG9jYXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVm
ZmVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlZlY3RvckJ1ZmZlcjo6dHJ5QWxs
b2NhdGVCdWZmZXIpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OnJlc2VydmVDYXBhY2l0eSk6Cisg
ICAgICAgIChXVEY6OlZlY3Rvcjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KToKKyAgICAgICAgKFdURjo6
VmVjdG9yOjpyZXNlcnZlSW5pdGlhbENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6VmVjdG9yOjp0
cnlSZXNlcnZlSW5pdGlhbENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6VmVjdG9yOjphcHBlbmQp
OgorICAgICAgICAoV1RGOjpWZWN0b3I6OnRyeUFwcGVuZCk6CisgICAgICAgIChXVEY6OlZlY3Rv
cjo6Y29uc3RydWN0QW5kQXBwZW5kKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjp0cnlDb25zdHJ1
Y3RBbmRBcHBlbmQpOgorICAgICAgICAoV1RGOjpWZWN0b3I6OmV4cGFuZENhcGFjaXR5KToKKyAg
ICAgICAgKFdURjo6VmVjdG9yOjpyZXNpemUpOgorICAgICAgICAoV1RGOjpWZWN0b3I6Omdyb3cp
OgorICAgICAgICAoV1RGOjpWZWN0b3I6OnJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6
OlZlY3Rvcjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6
YXBwZW5kKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjpjb25zdHJ1Y3RBbmRBcHBlbmQpOgorICAg
ICAgICAoV1RGOjpWZWN0b3I6OmFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6VmVjdG9y
Ojpjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6YXBw
ZW5kVmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjppbnNlcnQpOgorICAgICAgICAoV1RG
OjpWZWN0b3I6OnRyeUV4cGFuZENhcGFjaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VmVj
dG9yOjp0cnlSZXNlcnZlQ2FwYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWZWN0b3I6
OnRyeUFwcGVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlZlY3Rvcjo6dHJ5Q29uc3RydWN0
QW5kQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VmVjdG9yOjp0cnlDb25zdHJ1Y3RB
bmRBcHBlbmRTbG93Q2FzZSk6IERlbGV0ZWQuCisKIDIwMjAtMDYtMzAgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgV1RGOjpNRDUK
SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjYzNzU5KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNzU3LDYgKzc1Nyw3IEBACiAJCUZFODZBODc0MUU1OTQ0MDIwMDExMUJC
RiAvKiBGb3JiaWRIZWFwQWxsb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGb3JiaWRIZWFwQWxsb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5kZW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5kZW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkU5N0Y2QTgyNDVDRTVERDAwQzYzRkM2IC8qIFN0ZEludEV4dHJhcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdGRJbnRFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkU5OTZCNTIyNEE4NDVBRjAwMUQyRTYzIC8qIEZhaWx1cmVBY3Rpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmFpbHVyZUFjdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRUI2QjAzNTIwMUJFMEI2MDBCOTU4QzEgLyogUG9pbnRl
clByZXBhcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2ludGVy
UHJlcGFyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREFDRDNCMTYz
MEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0YWNrU3RhdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRURBQ0QzQzE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1N0YXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMDE2LDYgKzEwMTcsNyBAQAogCQkJCTFBRUE4OEUxMUQ2QkJDRjQwMEU1QUQ2NCAv
KiBFbnVtVHJhaXRzLmggKi8sCiAJCQkJQUQ3QzQzNEExREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVj
dGVkLmggKi8sCiAJCQkJQThBNDcyOUYxNTFBODI1QTAwNDEyM0ZGIC8qIEV4cG9ydE1hY3Jvcy5o
ICovLAorCQkJCUZFOTk2QjUyMjRBODQ1QUYwMDFEMkU2MyAvKiBGYWlsdXJlQWN0aW9uLmggKi8s
CiAJCQkJMEY3QzVGQjUxRDg4NUNGMjAwNDRGNUUyIC8qIEZhc3RCaXRWZWN0b3IuY3BwICovLAog
CQkJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8sCiAJCQkJ
QThBNDcyQTExNTFBODI1QTAwNDEyM0ZGIC8qIEZhc3RNYWxsb2MuY3BwICovLApJbmRleDogU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2Mzc1OSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBAIHNldChXVEZfUFVCTElD
X0hFQURFUlMKICAgICBFbnVtVHJhaXRzLmgKICAgICBFeHBlY3RlZC5oCiAgICAgRXhwb3J0TWFj
cm9zLmgKKyAgICBGYWlsdXJlQWN0aW9uLmgKICAgICBGYXN0Qml0VmVjdG9yLmgKICAgICBGYXN0
TWFsbG9jLmgKICAgICBGYXN0VExTLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZhaWx1cmVBY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYWlsdXJlQWN0aW9uLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvRmFpbHVyZUFjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNl
IFdURiB7CisKK2VudW0gY2xhc3MgRmFpbHVyZUFjdGlvbiB7CisgICAgQ3Jhc2gsCisgICAgUmVw
b3J0Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZlY3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCShyZXZpc2lvbiAyNjM3
NTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3
dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvRmFpbHVyZUFjdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CkBAIC0yODIsMzEgKzI4MywzNSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBNYWxsb2M+CiBjbGFzcyBWZWN0b3JCdWZmZXJCYXNlIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShWZWN0b3JCdWZmZXJCYXNlKTsKIHB1YmxpYzoKLSAgICB2
b2lkIGFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkKKyAgICB0ZW1wbGF0ZTxGYWls
dXJlQWN0aW9uIGFjdGlvbj4KKyAgICBib29sIGFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBh
Y2l0eSkKICAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoYWN0aW9uID09IEZhaWx1cmVBY3Rp
b246OkNyYXNoIHx8IGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpOwogICAgICAgICBB
U1NFUlQobmV3Q2FwYWNpdHkpOwotICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyBzaXplb2YoVCkpCi0gICAgICAgICAgICBDUkFT
SCgpOwotICAgICAgICBzaXplX3Qgc2l6ZVRvQWxsb2NhdGUgPSBuZXdDYXBhY2l0eSAqIHNpemVv
ZihUKTsKLSAgICAgICAgbV9jYXBhY2l0eSA9IHNpemVUb0FsbG9jYXRlIC8gc2l6ZW9mKFQpOwot
ICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihNYWxsb2M6Om1hbGxvYyhzaXplVG9B
bGxvY2F0ZSkpOwotICAgIH0KLQotICAgIGJvb2wgdHJ5QWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5l
d0NhcGFjaXR5KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG5ld0NhcGFjaXR5KTsKLSAgICAgICAg
aWYgKG5ld0NhcGFjaXR5ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8g
c2l6ZW9mKFQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobmV3Q2Fw
YWNpdHkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyBzaXplb2YoVCkp
IHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OkNy
YXNoKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAKICAgICAgICAgc2l6ZV90IHNpemVU
b0FsbG9jYXRlID0gbmV3Q2FwYWNpdHkgKiBzaXplb2YoVCk7Ci0gICAgICAgIFQqIG5ld0J1ZmZl
ciA9IHN0YXRpY19jYXN0PFQqPihNYWxsb2M6OnRyeU1hbGxvYyhzaXplVG9BbGxvY2F0ZSkpOwot
ICAgICAgICBpZiAoIW5ld0J1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgVCogbmV3QnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgaWYgY29uc3RleHByIChhY3Rpb24g
PT0gRmFpbHVyZUFjdGlvbjo6Q3Jhc2gpCisgICAgICAgICAgICBuZXdCdWZmZXIgPSBzdGF0aWNf
Y2FzdDxUKj4oTWFsbG9jOjptYWxsb2Moc2l6ZVRvQWxsb2NhdGUpKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oTWFsbG9jOjp0cnlNYWxs
b2Moc2l6ZVRvQWxsb2NhdGUpKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghbmV3QnVmZmVy
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICAgICAgbV9j
YXBhY2l0eSA9IHNpemVUb0FsbG9jYXRlIC8gc2l6ZW9mKFQpOwogICAgICAgICBtX2J1ZmZlciA9
IG5ld0J1ZmZlcjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgQUxXQVlTX0lO
TElORSB2b2lkIGFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkgeyBhbGxvY2F0ZUJ1
ZmZlcjxGYWlsdXJlQWN0aW9uOjpDcmFzaD4obmV3Q2FwYWNpdHkpOyB9CisgICAgQUxXQVlTX0lO
TElORSBib29sIHRyeUFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkgeyByZXR1cm4g
YWxsb2NhdGVCdWZmZXI8RmFpbHVyZUFjdGlvbjo6UmVwb3J0PihuZXdDYXBhY2l0eSk7IH0KKwog
ICAgIGJvb2wgc2hvdWxkUmVhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gVmVjdG9yVHJhaXRzPFQ+OjpjYW5Nb3ZlV2l0aE1lbWNw
eSAmJiBtX2NhcGFjaXR5ICYmIG5ld0NhcGFjaXR5OwpAQCAtNDU3LDI2ICs0NjIsMjAgQEAgcHVi
bGljOgogICAgICAgICBkZWFsbG9jYXRlQnVmZmVyKGJ1ZmZlcigpKTsKICAgICB9CiAKLSAgICB2
b2lkIGFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkKKyAgICB0ZW1wbGF0ZTxGYWls
dXJlQWN0aW9uIGFjdGlvbj4KKyAgICBib29sIGFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBh
Y2l0eSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBBU1NFUlQoIW1fYnVm
ZmVyKSB0byBjYXRjaCBtaXN1c2UvbGVha3MuCiAgICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IGlu
bGluZUNhcGFjaXR5KQotICAgICAgICAgICAgQmFzZTo6YWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNp
dHkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fYnVmZmVyID0gaW5saW5lQnVmZmVy
KCk7Ci0gICAgICAgICAgICBtX2NhcGFjaXR5ID0gaW5saW5lQ2FwYWNpdHk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBib29sIHRyeUFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkK
LSAgICB7Ci0gICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IGlubGluZUNhcGFjaXR5KQotICAgICAg
ICAgICAgcmV0dXJuIEJhc2U6OnRyeUFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKKyAgICAg
ICAgICAgIHJldHVybiBCYXNlOjp0ZW1wbGF0ZSBhbGxvY2F0ZUJ1ZmZlcjxhY3Rpb24+KG5ld0Nh
cGFjaXR5KTsKICAgICAgICAgbV9idWZmZXIgPSBpbmxpbmVCdWZmZXIoKTsKICAgICAgICAgbV9j
YXBhY2l0eSA9IGlubGluZUNhcGFjaXR5OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5
KSB7IGFsbG9jYXRlQnVmZmVyPEZhaWx1cmVBY3Rpb246OkNyYXNoPihuZXdDYXBhY2l0eSk7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5QWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFj
aXR5KSB7IHJldHVybiBhbGxvY2F0ZUJ1ZmZlcjxGYWlsdXJlQWN0aW9uOjpSZXBvcnQ+KG5ld0Nh
cGFjaXR5KTsgfQorCiAgICAgdm9pZCBkZWFsbG9jYXRlQnVmZmVyKFQqIGJ1ZmZlclRvRGVhbGxv
Y2F0ZSkKICAgICB7CiAgICAgICAgIGlmIChidWZmZXJUb0RlYWxsb2NhdGUgPT0gaW5saW5lQnVm
ZmVyKCkpCkBAIC03NjEsOSArNzYwLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGdyb3coc2l6ZV90
IHNpemUpOwogICAgIHZvaWQgcmVzaXplKHNpemVfdCBzaXplKTsKICAgICB2b2lkIHJlc2l6ZVRv
Rml0KHNpemVfdCBzaXplKTsKLSAgICB2b2lkIHJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2Fw
YWNpdHkpOwotICAgIGJvb2wgdHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSk7
Ci0gICAgdm9pZCByZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkp
OworICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFj
aXR5KSB7IHJlc2VydmVDYXBhY2l0eTxGYWlsdXJlQWN0aW9uOjpDcmFzaD4obmV3Q2FwYWNpdHkp
OyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHRyeVJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3
Q2FwYWNpdHkpIHsgcmV0dXJuIHJlc2VydmVDYXBhY2l0eTxGYWlsdXJlQWN0aW9uOjpSZXBvcnQ+
KG5ld0NhcGFjaXR5KTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpIHsgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eTxG
YWlsdXJlQWN0aW9uOjpDcmFzaD4oaW5pdGlhbENhcGFjaXR5KTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCB0cnlSZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkp
IHsgcmV0dXJuIHJlc2VydmVJbml0aWFsQ2FwYWNpdHk8RmFpbHVyZUFjdGlvbjo6UmVwb3J0Pihp
bml0aWFsQ2FwYWNpdHkpOyB9CiAgICAgdm9pZCBzaHJpbmtDYXBhY2l0eShzaXplX3QgbmV3Q2Fw
YWNpdHkpOwogICAgIHZvaWQgc2hyaW5rVG9GaXQoKSB7IHNocmlua0NhcGFjaXR5KHNpemUoKSk7
IH0KIApAQCAtNzcyLDE4ICs3NzIsMTkgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFUgPSBUPiBWZWN0b3I8VT4gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgYXBwZW5kKFZhbHVlVHlwZSYmIHZhbHVlKSB7IGFwcGVuZDxWYWx1ZVR5cGU+KHN0
ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+KHZhbHVlKSk7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiB2b2lkIGFwcGVuZChVJiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+IHZvaWQg
Y29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJncz4gYm9vbCB0cnlDb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYmLi4uKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kKFUmJiB1KSB7IGFwcGVuZDxG
YWlsdXJlQWN0aW9uOjpDcmFzaCwgVT4oc3RkOjpmb3J3YXJkPFU+KHUpKTsgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IEFMV0FZU19JTkxJTkUgYm9vbCB0cnlBcHBlbmQoVSYmIHUpIHsgcmV0
dXJuIGFwcGVuZDxGYWlsdXJlQWN0aW9uOjpSZXBvcnQsIFU+KHN0ZDo6Zm9yd2FyZDxVPih1KSk7
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiBBTFdBWVNfSU5MSU5FIHZvaWQgY29u
c3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLiBhcmdzKSB7IGNvbnN0cnVjdEFuZEFwcGVuZDxGYWls
dXJlQWN0aW9uOjpDcmFzaD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsgfQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+IEFMV0FZU19JTkxJTkUgYm9vbCB0cnlDb25zdHJ1Y3RB
bmRBcHBlbmQoQXJncyYmLi4uIGFyZ3MpIHsgcmV0dXJuIGNvbnN0cnVjdEFuZEFwcGVuZDxGYWls
dXJlQWN0aW9uOjpSZXBvcnQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7IH0KIAogICAg
IHZvaWQgdW5jaGVja2VkQXBwZW5kKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHVuY2hlY2tlZEFwcGVu
ZDxWYWx1ZVR5cGU+KHN0ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+KHZhbHVlKSk7IH0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiB2b2lkIHVuY2hlY2tlZEFwcGVuZChVJiYpOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+IHZvaWQgdW5jaGVja2VkQ29uc3RydWN0QW5kQXBwZW5kKEFyZ3Mm
Ji4uLik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZChjb25zdCBVKiwg
c2l6ZV90KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBBTFdBWVNfSU5MSU5FIHZvaWQgYXBw
ZW5kKGNvbnN0IFUqIHUsIHNpemVfdCBzaXplKSB7IGFwcGVuZDxGYWlsdXJlQWN0aW9uOjpDcmFz
aD4odSwgc2l6ZSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBBTFdBWVNfSU5MSU5FIGJv
b2wgdHJ5QXBwZW5kKGNvbnN0IFUqIHUsIHNpemVfdCBzaXplKSB7IHJldHVybiBhcHBlbmQ8RmFp
bHVyZUFjdGlvbjo6UmVwb3J0Pih1LCBzaXplKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUs
IHNpemVfdCBvdGhlckNhcGFjaXR5PiB2b2lkIGFwcGVuZFZlY3Rvcihjb25zdCBWZWN0b3I8VSwg
b3RoZXJDYXBhY2l0eT4mKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3Qgb3RoZXJD
YXBhY2l0eT4gdm9pZCBhcHBlbmRWZWN0b3IoVmVjdG9yPFUsIG90aGVyQ2FwYWNpdHk+JiYpOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgdHJ5QXBwZW5kKGNvbnN0IFUqLCBzaXplX3Qp
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBpbnNlcnQoc2l6ZV90IHBvc2l0aW9u
LCBjb25zdCBVKiwgc2l6ZV90KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGluc2Vy
dChzaXplX3QgcG9zaXRpb24sIFUmJik7CkBAIC04MzcsMTQgKzgzOCwxOCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZSA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRlY2x0eXBlKG1fc2l6ZSk+OjptYXgoKTsgfQogCiBwcml2
YXRlOgotICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KTsKLSAg
ICBUKiBleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFQqKTsKLSAgICBib29s
IHRyeUV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSk7Ci0gICAgY29uc3QgVCog
dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBjb25zdCBUKik7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gVSogZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFj
aXR5LCBVKik7IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kU2xvd0Nhc2Uo
VSYmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiB2b2lkIGNvbnN0cnVjdEFuZEFw
cGVuZFNsb3dDYXNlKEFyZ3MmJi4uLik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4g
Ym9vbCB0cnlDb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShBcmdzJiYuLi4pOworICAgIHRlbXBs
YXRlPEZhaWx1cmVBY3Rpb24+IGJvb2wgcmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0
eSk7CisgICAgdGVtcGxhdGU8RmFpbHVyZUFjdGlvbj4gYm9vbCByZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpOworCisgICAgdGVtcGxhdGU8RmFpbHVyZUFjdGlv
bj4gYm9vbCBleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHkpOworICAgIHRlbXBs
YXRlPEZhaWx1cmVBY3Rpb24+IFQqIGV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0
eSwgVCopOworICAgIHRlbXBsYXRlPEZhaWx1cmVBY3Rpb24sIHR5cGVuYW1lIFU+IFUqIGV4cGFu
ZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVSopOworICAgIHRlbXBsYXRlPEZhaWx1
cmVBY3Rpb24sIHR5cGVuYW1lIFU+IGJvb2wgYXBwZW5kU2xvd0Nhc2UoVSYmKTsKKyAgICB0ZW1w
bGF0ZTxGYWlsdXJlQWN0aW9uLCB0eXBlbmFtZS4uLiBBcmdzPiBib29sIGNvbnN0cnVjdEFuZEFw
cGVuZChBcmdzJiYuLi4pOworICAgIHRlbXBsYXRlPEZhaWx1cmVBY3Rpb24sIHR5cGVuYW1lLi4u
IEFyZ3M+IGJvb2wgY29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4uKTsKKworICAg
IHRlbXBsYXRlPEZhaWx1cmVBY3Rpb24sIHR5cGVuYW1lIFU+IGJvb2wgYXBwZW5kKFUmJik7Cisg
ICAgdGVtcGxhdGU8RmFpbHVyZUFjdGlvbiwgdHlwZW5hbWUgVT4gYm9vbCBhcHBlbmQoY29uc3Qg
VSosIHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZTxzaXplX3QgcG9zaXRpb24sIHR5cGVuYW1lIFUs
IHR5cGVuYW1lLi4uIEl0ZW1zPgogICAgIHZvaWQgdW5jaGVja2VkSW5pdGlhbGl6ZShVJiYgaXRl
bSwgSXRlbXMmJi4uLiBpdGVtcykKQEAgLTEwNDMsNDggKzEwNDgsNDQgQEAgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6ZXhwYW5kQ2FwYWNpdHko
c2l6ZV90IG5ld01pbkNhcGFjaXR5KQordGVtcGxhdGU8RmFpbHVyZUFjdGlvbiBhY3Rpb24+Citi
b29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQogewotICAg
IHJlc2VydmVDYXBhY2l0eShzdGQ6Om1heChuZXdNaW5DYXBhY2l0eSwgc3RkOjptYXgoc3RhdGlj
X2Nhc3Q8c2l6ZV90PihtaW5DYXBhY2l0eSksIGNhcGFjaXR5KCkgKyBjYXBhY2l0eSgpIC8gNCAr
IDEpKSk7CisgICAgcmV0dXJuIHJlc2VydmVDYXBhY2l0eTxhY3Rpb24+KHN0ZDo6bWF4KG5ld01p
bkNhcGFjaXR5LCBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KG1pbkNhcGFjaXR5KSwgY2Fw
YWNpdHkoKSArIGNhcGFjaXR5KCkgLyA0ICsgMSkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8RmFpbHVyZUFjdGlvbiBh
Y3Rpb24+CiBORVZFUl9JTkxJTkUgVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3
TWluQ2FwYWNpdHksIFQqIHB0cikKIHsKKyAgICBzdGF0aWNfYXNzZXJ0KGFjdGlvbiA9PSBGYWls
dXJlQWN0aW9uOjpDcmFzaCB8fCBhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0KTsKICAg
ICBpZiAocHRyIDwgYmVnaW4oKSB8fCBwdHIgPj0gZW5kKCkpIHsKLSAgICAgICAgZXhwYW5kQ2Fw
YWNpdHkobmV3TWluQ2FwYWNpdHkpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBleHBhbmRDYXBh
Y2l0eTxhY3Rpb24+KG5ld01pbkNhcGFjaXR5KTsKKyAgICAgICAgaWYgY29uc3RleHByIChhY3Rp
b24gPT0gRmFpbHVyZUFjdGlvbjo6UmVwb3J0KSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
IXN1Y2Nlc3MpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogICAgIHNpemVfdCBpbmRleCA9IHB0ciAtIGJlZ2lu
KCk7Ci0gICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwotICAgIHJldHVybiBiZWdp
bigpICsgaW5kZXg7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVu
YW1lIE1hbGxvYz4KLWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlFeHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWlu
Q2FwYWNpdHkpCi17Ci0gICAgcmV0dXJuIHRyeVJlc2VydmVDYXBhY2l0eShzdGQ6Om1heChuZXdN
aW5DYXBhY2l0eSwgc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PihtaW5DYXBhY2l0eSksIGNh
cGFjaXR5KCkgKyBjYXBhY2l0eSgpIC8gNCArIDEpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWNvbnN0IFQqIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5RXhw
YW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBjb25zdCBUKiBwdHIpCi17Ci0gICAg
aWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7Ci0gICAgICAgIGlmICghdHJ5RXhw
YW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIHJldHVybiBwdHI7CisgICAgYm9vbCBzdWNjZXNzID0gZXhwYW5kQ2FwYWNpdHk8YWN0aW9u
PihuZXdNaW5DYXBhY2l0eSk7CisgICAgaWYgY29uc3RleHByIChhY3Rpb24gPT0gRmFpbHVyZUFj
dGlvbjo6UmVwb3J0KSB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgc2l6ZV90IGluZGV4ID0gcHRyIC0gYmVn
aW4oKTsKLSAgICBpZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KSkKLSAgICAg
ICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGJlZ2luKCkgKyBpbmRleDsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVtcGxhdGU8dHlwZW5h
bWUgVT4KK3RlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uLCB0eXBlbmFtZSBVPgogaW5saW5l
IFUqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBVKiBwdHIp
CiB7Ci0gICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOworICAgIHN0YXRpY19hc3Nl
cnQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OkNyYXNoIHx8IGFjdGlvbiA9PSBGYWlsdXJlQWN0
aW9uOjpSZXBvcnQpOworICAgIGJvb2wgc3VjY2VzcyA9IGV4cGFuZENhcGFjaXR5PGFjdGlvbj4o
bmV3TWluQ2FwYWNpdHkpOworICAgIGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rp
b246OlJlcG9ydCkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogICAgIHJldHVybiBwdHI7CiB9CiAKQEAgLTEwOTYs
NyArMTA5Nyw3IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKICAg
ICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8oc2l6ZSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSgpKQotICAgICAgICAgICAgZXhwYW5kQ2FwYWNpdHko
c2l6ZSk7CisgICAgICAgICAgICBleHBhbmRDYXBhY2l0eTxGYWlsdXJlQWN0aW9uOjpDcmFzaD4o
c2l6ZSk7CiAgICAgICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKHNpemUpOwogICAgICAg
ICBpZiAoYmVnaW4oKSkKICAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplSWZO
b25QT0QoZW5kKCksIGJlZ2luKCkgKyBzaXplKTsKQEAgLTExMjYsNyArMTEyNyw3IEBAIHZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKIHsKICAgICBBU1NFUlQoc2l6ZSA+
PSBtX3NpemUpOwogICAgIGlmIChzaXplID4gY2FwYWNpdHkoKSkKLSAgICAgICAgZXhwYW5kQ2Fw
YWNpdHkoc2l6ZSk7CisgICAgICAgIGV4cGFuZENhcGFjaXR5PEZhaWx1cmVBY3Rpb246OkNyYXNo
PihzaXplKTsKICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXplKTsKICAgICBpZiAo
YmVnaW4oKSkKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemVJZk5vblBPRChlbmQo
KSwgYmVnaW4oKSArIHNpemUpOwpAQCAtMTE3OCwyNyArMTE3OSwxMCBAQCBpbmxpbmUgdm9pZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZXNlcnZlQ2FwYWNpdHko
c2l6ZV90IG5ld0NhcGFjaXR5KQotewotICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgp
KQotICAgICAgICByZXR1cm47Ci0gICAgVCogb2xkQnVmZmVyID0gYmVnaW4oKTsKLSAgICBUKiBv
bGRFbmQgPSBlbmQoKTsKLQotICAgIGFzYW5TZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkoKTsK
LQotICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKLSAgICBBU1NFUlQoYmVn
aW4oKSk7Ci0KLSAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhzaXplKCkpOwotCi0gICAg
VHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOwotICAgIEJh
c2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnRyeVJlc2VydmVD
YXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCit0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uIGFjdGlv
bj4KK2Jvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5LCBNYWxsb2M+OjpyZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KQogewor
ICAgIHN0YXRpY19hc3NlcnQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OkNyYXNoIHx8IGFjdGlv
biA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpOwogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBh
Y2l0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBUKiBvbGRCdWZmZXIgPSBiZWdpbigp
OwpAQCAtMTIwNiw5ICsxMTkwLDEyIEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0gKIAogICAgIGFzYW5TZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkoKTsKIAotICAg
IGlmICghQmFzZTo6dHJ5QWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpKSB7Ci0gICAgICAgIGFz
YW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKHNpemUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBib29sIHN1Y2Nlc3MgPSBCYXNlOjp0ZW1wbGF0ZSBhbGxvY2F0ZUJ1ZmZlcjxhY3Rpb24+
KG5ld0NhcGFjaXR5KTsKKyAgICBpZiBjb25zdGV4cHIgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9u
OjpSZXBvcnQpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkgeworICAgICAgICAg
ICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KICAgICBBU1NFUlQoYmVnaW4oKSk7CiAKQEAgLTEy
MjAsMTIgKzEyMDcsMTUgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+
Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwg
bWluQ2FwYWNpdHksIE1hbGxvYz46OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRp
YWxDYXBhY2l0eSkKK3RlbXBsYXRlPEZhaWx1cmVBY3Rpb24gYWN0aW9uPgoraW5saW5lIGJvb2wg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBN
YWxsb2M+OjpyZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpCiB7
CisgICAgc3RhdGljX2Fzc2VydChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6Q3Jhc2ggfHwgYWN0
aW9uID09IEZhaWx1cmVBY3Rpb246OlJlcG9ydCk7CiAgICAgQVNTRVJUKCFtX3NpemUpOwogICAg
IEFTU0VSVChjYXBhY2l0eSgpID09IGlubGluZUNhcGFjaXR5KTsKLSAgICBpZiAoaW5pdGlhbENh
cGFjaXR5ID4gaW5saW5lQ2FwYWNpdHkpCi0gICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKGlu
aXRpYWxDYXBhY2l0eSk7CisgICAgaWYgKGluaXRpYWxDYXBhY2l0eSA8PSBpbmxpbmVDYXBhY2l0
eSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEJhc2U6OnRlbXBsYXRlIGFsbG9j
YXRlQnVmZmVyPGFjdGlvbj4oaW5pdGlhbENhcGFjaXR5KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgpAQCAtMTI2MCwzNSArMTI1MCwyNSBA
QCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjphcHBlbmQoY29uc3QgVSogZGF0YSwg
c2l6ZV90IGRhdGFTaXplKQordGVtcGxhdGU8RmFpbHVyZUFjdGlvbiBhY3Rpb24sIHR5cGVuYW1l
IFU+CitBTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjphcHBlbmQoY29uc3QgVSogZGF0YSwgc2l6
ZV90IGRhdGFTaXplKQogeworICAgIHN0YXRpY19hc3NlcnQoYWN0aW9uID09IEZhaWx1cmVBY3Rp
b246OkNyYXNoIHx8IGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpOwogICAgIHNpemVf
dCBuZXdTaXplID0gbV9zaXplICsgZGF0YVNpemU7CiAgICAgaWYgKG5ld1NpemUgPiBjYXBhY2l0
eSgpKSB7Ci0gICAgICAgIGRhdGEgPSBleHBhbmRDYXBhY2l0eShuZXdTaXplLCBkYXRhKTsKKyAg
ICAgICAgZGF0YSA9IGV4cGFuZENhcGFjaXR5PGFjdGlvbj4obmV3U2l6ZSwgZGF0YSk7CisgICAg
ICAgIGlmIGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJlcG9ydCkgeworICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCFkYXRhKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KLSAgICBpZiAo
bmV3U2l6ZSA8IG1fc2l6ZSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBhc2FuQnVmZmVyU2l6ZVdp
bGxDaGFuZ2VUbyhuZXdTaXplKTsKLSAgICBUKiBkZXN0ID0gZW5kKCk7Ci0gICAgVmVjdG9yQ29w
aWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRh
LCBzdGQ6OmFkZHJlc3NvZihkYXRhW2RhdGFTaXplXSksIGRlc3QpOwotICAgIG1fc2l6ZSA9IG5l
d1NpemU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1h
bGxvYz4KLXRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1BTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0
cnlBcHBlbmQoY29uc3QgVSogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQotewotICAgIHNpemVfdCBu
ZXdTaXplID0gbV9zaXplICsgZGF0YVNpemU7Ci0gICAgaWYgKG5ld1NpemUgPiBjYXBhY2l0eSgp
KSB7Ci0gICAgICAgIGRhdGEgPSB0cnlFeHBhbmRDYXBhY2l0eShuZXdTaXplLCBkYXRhKTsKLSAg
ICAgICAgaWYgKCFkYXRhKQorICAgIGlmIChuZXdTaXplIDwgbV9zaXplKSB7CisgICAgICAgIGlm
IGNvbnN0ZXhwciAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OkNyYXNoKQorICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQotICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obmV3U2l6
ZSk7CiAgICAgVCogZGVzdCA9IGVuZCgpOwogICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZp
YWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgc3RkOjphZGRyZXNzb2Yo
ZGF0YVtkYXRhU2l6ZV0pLCBkZXN0KTsKQEAgLTEyOTcsMzYgKzEyNzcsMjIgQEAgQUxXQVlTX0lO
TElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhYwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVPgotQUxX
QVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6YXBwZW5kKFUmJiB2YWx1ZSkKK3RlbXBsYXRlPEZhaWx1
cmVBY3Rpb24gYWN0aW9uLCB0eXBlbmFtZSBVPgorQUxXQVlTX0lOTElORSBib29sIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6
YXBwZW5kKFUmJiB2YWx1ZSkKIHsKICAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsKICAg
ICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7CiAgICAgICAgIG5l
dyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgICAgICsr
bV9zaXplOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXBwZW5kU2xvd0Nhc2Uoc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci1BTFdBWVNf
SU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5LCBNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYmLi4uIGFyZ3MpCi17
Ci0gICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7Ci0gICAgICAgIGFzYW5CdWZmZXJTaXpl
V2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwotICAgICAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBU
KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgICAgICsrbV9zaXplOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0cnVjdEFu
ZEFwcGVuZFNsb3dDYXNlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgcmV0dXJu
IGFwcGVuZFNsb3dDYXNlPGFjdGlvbiwgVT4oc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci1BTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlDb25z
dHJ1Y3RBbmRBcHBlbmQoQXJncyYmLi4uIGFyZ3MpCit0ZW1wbGF0ZTxGYWlsdXJlQWN0aW9uIGFj
dGlvbiwgdHlwZW5hbWUuLi4gQXJncz4KK0FMV0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmNvbnN0
cnVjdEFuZEFwcGVuZChBcmdzJiYuLi4gYXJncykKIHsKICAgICBpZiAoc2l6ZSgpICE9IGNhcGFj
aXR5KCkpIHsKICAgICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7
CkBAIC0xMzM0LDUyICsxMzAwLDQ4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWMKICAgICAgICAgKyttX3NpemU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
LSAgICAKLSAgICByZXR1cm4gdHJ5Q29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2Uoc3RkOjpmb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKworICAgIHJldHVybiBjb25zdHJ1Y3RBbmRBcHBlbmRTbG93
Q2FzZTxhY3Rpb24+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eSwgTWFsbG9jPjo6YXBwZW5kU2xvd0Nhc2UoVSYmIHZhbHVlKQordGVtcGxhdGU8
RmFpbHVyZUFjdGlvbiBhY3Rpb24sIHR5cGVuYW1lIFU+Citib29sIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6YXBwZW5kU2xv
d0Nhc2UoVSYmIHZhbHVlKQogeworICAgIHN0YXRpY19hc3NlcnQoYWN0aW9uID09IEZhaWx1cmVB
Y3Rpb246OkNyYXNoIHx8IGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXBvcnQpOwogICAgIEFT
U0VSVChzaXplKCkgPT0gY2FwYWNpdHkoKSk7CiAKICAgICBhdXRvIHB0ciA9IGNvbnN0X2Nhc3Q8
dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNl
PFU+Ojp0eXBlPjo6dHlwZSo+KHN0ZDo6YWRkcmVzc29mKHZhbHVlKSk7Ci0gICAgcHRyID0gZXhw
YW5kQ2FwYWNpdHkoc2l6ZSgpICsgMSwgcHRyKTsKKyAgICBwdHIgPSBleHBhbmRDYXBhY2l0eTxh
Y3Rpb24+KHNpemUoKSArIDEsIHB0cik7CisgICAgaWYgY29uc3RleHByIChhY3Rpb24gPT0gRmFp
bHVyZUFjdGlvbjo6UmVwb3J0KSB7CisgICAgICAgIGlmIChVTkxJS0VMWSghcHRyKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgQVNTRVJUKGJlZ2luKCkpOwogCiAgICAg
YXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7CiAgICAgbmV3IChOb3ROdWxs
LCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOworICAgIHJl
dHVybiB0cnVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFt
ZSBNYWxsb2M+Ci10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmNvbnN0
cnVjdEFuZEFwcGVuZFNsb3dDYXNlKEFyZ3MmJi4uLiBhcmdzKQordGVtcGxhdGU8RmFpbHVyZUFj
dGlvbiBhY3Rpb24sIHR5cGVuYW1lLi4uIEFyZ3M+Citib29sIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6Y29uc3RydWN0QW5k
QXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4uIGFyZ3MpCiB7CisgICAgc3RhdGljX2Fzc2VydChhY3Rp
b24gPT0gRmFpbHVyZUFjdGlvbjo6Q3Jhc2ggfHwgYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJl
cG9ydCk7CiAgICAgQVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgpKTsKIAotICAgIGV4cGFuZENh
cGFjaXR5KHNpemUoKSArIDEpOworICAgIGJvb2wgc3VjY2VzcyA9IGV4cGFuZENhcGFjaXR5PGFj
dGlvbj4oc2l6ZSgpICsgMSk7CisgICAgaWYgY29uc3RleHByIChhY3Rpb24gPT0gRmFpbHVyZUFj
dGlvbjo6UmVwb3J0KSB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIEFTU0VSVChiZWdpbigpKTsKIAogICAgIGFz
YW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwogICAgIG5ldyAoTm90TnVsbCwg
ZW5kKCkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKICAgICArK21fc2l6ZTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlDb25zdHJ1Y3RBbmRBcHBl
bmRTbG93Q2FzZShBcmdzJiYuLi4gYXJncykKLXsKLSAgICBBU1NFUlQoc2l6ZSgpID09IGNhcGFj
aXR5KCkpOwotICAgIAotICAgIGlmIChVTkxJS0VMWSghdHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZSgp
ICsgMSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKGJlZ2luKCkpOwotICAg
IAotICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwotICAgIG5ldyAo
Tm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICArK21f
c2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQyMyw3ICsxMzg1LDcgQEAgaW5saW5l
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogewogICAgIHNpemVfdCBuZXdTaXpl
ID0gbV9zaXplICsgdmFsLnNpemUoKTsKICAgICBpZiAobmV3U2l6ZSA+IGNhcGFjaXR5KCkpCi0g
ICAgICAgIGV4cGFuZENhcGFjaXR5KG5ld1NpemUpOworICAgICAgICBleHBhbmRDYXBhY2l0eTxG
YWlsdXJlQWN0aW9uOjpDcmFzaD4obmV3U2l6ZSk7CiAgICAgZm9yIChhdXRvJiBpdGVtIDogdmFs
KQogICAgICAgICB1bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShpdGVtKSk7CiB9CkBAIC0xNDM1LDcg
KzEzOTcsNyBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPD0gc2l6ZSgpKTsKICAg
ICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSArIGRhdGFTaXplOwogICAgIGlmIChuZXdTaXplID4g
Y2FwYWNpdHkoKSkgewotICAgICAgICBkYXRhID0gZXhwYW5kQ2FwYWNpdHkobmV3U2l6ZSwgZGF0
YSk7CisgICAgICAgIGRhdGEgPSBleHBhbmRDYXBhY2l0eTxGYWlsdXJlQWN0aW9uOjpDcmFzaD4o
bmV3U2l6ZSwgZGF0YSk7CiAgICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAgICB9CiAgICAgaWYg
KG5ld1NpemUgPCBtX3NpemUpCkBAIC0xNDU1LDcgKzE0MTcsNyBAQCBpbmxpbmUgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiAKICAgICBhdXRvIHB0ciA9IGNvbnN0X2Nhc3Q8dHlw
ZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFU+
Ojp0eXBlPjo6dHlwZSo+KHN0ZDo6YWRkcmVzc29mKHZhbHVlKSk7CiAgICAgaWYgKHNpemUoKSA9
PSBjYXBhY2l0eSgpKSB7Ci0gICAgICAgIHB0ciA9IGV4cGFuZENhcGFjaXR5KHNpemUoKSArIDEs
IHB0cik7CisgICAgICAgIHB0ciA9IGV4cGFuZENhcGFjaXR5PEZhaWx1cmVBY3Rpb246OkNyYXNo
PihzaXplKCkgKyAxLCBwdHIpOwogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM3NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MSBAQAorMjAyMC0wNi0zMCAgTWFyayBMYW0g
IDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGhhbmRsaW5nIGZvciBhIGNhc2Ug
b2YgT09NRSBpbiBDU1NUb2tlbml6ZXIgYW5kIENTU1BhcnNlci4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzcwMgorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNjQ4MDg4ODk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAg
ICAgICAgV2UgYWRkIGEgYm9vbCogY29uc3RydWN0aW9uU3VjY2VzcyBmZWVkYmFjayBhcmd1bWVu
dCB0byB0aGUgcHJpdmF0ZSBDU1NUb2tlbml6ZXIKKyAgICAgICAgY29uc3RydWN0b3IuICBJZiBj
b25zdHJ1Y3Rpb24gZmFpbHMgYW5kIGNvbnN0cnVjdGlvblN1Y2Nlc3MgaXMgcHJvdmlkZWQsIHRo
ZQorICAgICAgICBjb25zdHJ1Y3RvciB3aWxsIHNldCAqY29uc3RydWN0aW9uU3VjY2VzcyB0byBm
YWxzZS4gIElmIGNvbnN0cnVjdGlvbiBmYWlscyBhbmQKKyAgICAgICAgY29uc3RydWN0aW9uU3Vj
Y2VzcyBpcyBub3QgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RvciB3aWxsIGNyYXNoIHdpdGggYSBm
YWlsZWQKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQuICBJbiBvdGhlciB3b3JkcywgdGhlIGNsaWVu
dCBtYXkgb3B0IGluIHRvIGhhbmRsZSB0aGUgZmFpbHVyZSB0bworICAgICAgICBjb25zdHJ1Y3Qg
aWYgaXQgZG9lc24ndCB3YW50IHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGNyYXNoaW5nIG9uIGZh
aWx1cmUuCisKKyAgICAgICAgV2UgYWxzbyBwcm92aWRlIDIgY29udmVuaWVuY2UgZmFjdG9yeSBt
ZXRob2RzIGZvciBDU1NUb2tlbml6ZXIgd2hpY2ggd2lsbCByZXR1cm4KKyAgICAgICAgYSBudWxs
IHN0ZDo6dW5pcXVlX3B0cjxDU1NUb2tlbml6ZXI+IGlmIGNvbnN0cnVjdGlvbiBmYWlscy4gIFRo
aXMgaXMgY3VycmVudGx5CisgICAgICAgIG9ubHkgdXNlZCBieSBDU1NQYXJzZXJJbXBsLCBhbmQg
ZW5zdXJlcyB0aGF0IGl0cyBtX3Rva2VuaXplciBpcyBudWxsIGlmIHdlIGZhaWwgdG8KKyAgICAg
ICAgY29uc3RydWN0LiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlcmUgaXNuJ3QgYSBwb2ludGVyIHRv
IGEgcGFydGlhbGx5IGNvbnN0cnVjdGVkCisgICAgICAgIHRva2VuaXplciB0aGF0IHNvbWUgY29k
ZSBtYXkgdW5rbm93aW5nbHkgdXNlLgorCisgICAgICAgIFRoZSByZWFzb24gd2UgZG9uJ3QgZm9y
Y2UgYWxsIGNsaWVudHMgb2YgQ1NTVG9rZW5pemVyIHRvIHVzZSB0aGUgZmFjdG9yeSBtZXRob2Rz
CisgICAgICAgIGluc3RlYWQgaXMgYmVjYXVzZSB0aGVyZSBhcmUgY2xpZW50cyB0aGF0IGN1cnJl
bnRseSB1c2Ugb24tc3RhY2sgaW5zdGFudGlhdGlvbnMKKyAgICAgICAgb2YgQ1NTVG9rZW5pemVy
IHRvIGRvIHRoZWlyIHdvcmsuICBXZSBkb24ndCB3YW50IHRvIGZvcmNlIHRoZW0gdG8gc3dpdGNo
IHRvIHVzaW5nCisgICAgICAgIGEgbWFsbG9jIGluc3RhbmNlLiAgQ3VycmVudGx5LCB0aGUgY29u
c3RydWN0b3JzIHVzZWQgYnkgdGhvc2UgY2xpZW50cyBkbyBub3QKKyAgICAgICAgcHJvdmlkZSBh
IGNvbnN0cnVjdGlvblN1Y2Nlc3MgYXJndW1lbnQgdG8gdGhlIHVuZGVybHlpbmcgcHJpdmF0ZSBj
b25zdHJ1Y3Rvci4KKyAgICAgICAgSGVuY2UsIGZvciB0aGVtLCB0aGUgQ1NTVG9rZW5pemVyIGNv
bnN0cnVjdG9yIHdpbGwgY3Jhc2ggaWYgY29uc3RydWN0aW9uIGZhaWxzLAorICAgICAgICB3aGlj
aCBpcyBob3cgdGhpbmdzIHdvcmsgaW4gcHJlLWV4aXN0aW5nIGNvZGUuICBUaGUgb25seSBkaWZm
ZXJlbmNlIGlzIHRoYXQKKyAgICAgICAgdGhlIGNyYXNoIGlzIGRlZmVycmVkIHRpbGwgdGhlIGNs
aWVudCBhdHRlbXB0cyB0byB1c2UgdGhlIHRva2VuaXplciBpbnN0ZWFkIG9mIGF0CisgICAgICAg
IGNvbnN0cnVjdGlvbiB0aW1lLgorCisgICAgICAgIEFzIG9mIHRoaXMgcGF0Y2gsIG9ubHkgQ1NT
UGFyc2VyOjpwYXJzZVN1cHBvcnRzQ29uZGl0aW9uKCkgbWFrZXMgdXNlIG9mIHRoZSBuZXcKKyAg
ICAgICAgZmVlZGJhY2sgbWVjaGFuaXNtLCBhbmQgaGFuZGxlcyBPT01FIGR1cmluZyBDU1NUb2tl
bml6ZXIgY29uc3RydWN0aW9uIGJ5CisgICAgICAgIGludGVycHJldGluZyBpdCBhcyBDU1Mgbm90
IHN1cHBvcnRpbmcgdGhlIHBhc3NlZCBpbiBjb25kaXRpb24gc3RyaW5nLgorCisgICAgICAgIFRl
c3Q6IGNzczMvb3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVyLmh0bWwKKworICAgICAgICAq
IGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6
cGFyc2VTdXBwb3J0c0NvbmRpdGlvbik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckltcGw6OkNTU1BhcnNlckltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VySW1wbDo6ZmFpbGVkIGNvbnN0KToKKyAgICAg
ICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuaDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1Rva2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb2tlbml6ZXI6OkNTU1Rva2Vu
aXplcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NUb2tlbml6ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Rva2VuaXplcjo6ZmFpbGVkIGNvbnN0KToKKwogMjAyMC0wNi0zMCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBX
VEY6Ok1ENQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkocmV2
aXNpb24gMjYzNzU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
MyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA1IEFsbGFu
IFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtpdEBuaWNrc2hhbmtzLmNvbT4KICAqIENvcHly
aWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8pCkBAIC04OSw2ICs4OSw4IEBAIFJlZlB0cjxTdHlsZVJ1bGVL
ZXlmcmFtZT4gQ1NTUGFyc2VyOjpwYXIKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVN1cHBvcnRzQ29u
ZGl0aW9uKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKQogewogICAgIENTU1BhcnNlckltcGwgcGFy
c2VyKG1fY29udGV4dCwgY29uZGl0aW9uKTsKKyAgICBpZiAoIXBhcnNlci50b2tlbml6ZXIoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBDU1NTdXBwb3J0c1BhcnNlcjo6c3Vw
cG9ydHNDb25kaXRpb24ocGFyc2VyLnRva2VuaXplcigpLT50b2tlblJhbmdlKCksIHBhcnNlciwg
Q1NTU3VwcG9ydHNQYXJzZXI6OkZvcldpbmRvd0NTUykgPT0gQ1NTU3VwcG9ydHNQYXJzZXI6OlN1
cHBvcnRlZDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNl
ckltcGwuY3BwCShyZXZpc2lvbiAyNjM3NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1BhcnNlckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8gQ29w
eXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNzcsNyArNzcsOSBAQCBDU1NQ
YXJzZXJJbXBsOjpDU1NQYXJzZXJJbXBsKGNvbnN0IENTU1BhCiAgICAgLCBtX3N0eWxlU2hlZXQo
c3R5bGVTaGVldCkKICAgICAsIG1fb2JzZXJ2ZXJXcmFwcGVyKHdyYXBwZXIpCiB7Ci0gICAgbV90
b2tlbml6ZXIgPSB3cmFwcGVyID8gbWFrZVVuaXF1ZTxDU1NUb2tlbml6ZXI+KHN0cmluZywgKndy
YXBwZXIpIDogbWFrZVVuaXF1ZTxDU1NUb2tlbml6ZXI+KHN0cmluZyk7CisgICAgbV90b2tlbml6
ZXIgPSB3cmFwcGVyID8gQ1NTVG9rZW5pemVyOjp0cnlDcmVhdGUoc3RyaW5nLCAqd3JhcHBlcikg
OiBDU1NUb2tlbml6ZXI6OnRyeUNyZWF0ZShzdHJpbmcpOworICAgIGlmICghbV90b2tlbml6ZXIp
CisgICAgICAgIHJldHVybjsKICAgICBpZiAoY29udGV4dC5kZWZlcnJlZENTU1BhcnNlckVuYWJs
ZWQgJiYgIXdyYXBwZXIgJiYgc3R5bGVTaGVldCAmJiBydWxlUGFyc2luZyA9PSBDU1NQYXJzZXI6
OlJ1bGVQYXJzaW5nOjpEZWZlcnJlZCkKICAgICAgICAgbV9kZWZlcnJlZFBhcnNlciA9IENTU0Rl
ZmVycmVkUGFyc2VyOjpjcmVhdGUoY29udGV4dCwgc3RyaW5nLCAqc3R5bGVTaGVldCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuaAkocmV2aXNpb24g
MjYzNzU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21p
dW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwogLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Rva2VuaXpl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NUb2tlbml6
ZXIuY3BwCShyZXZpc2lvbiAyNjM3NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Rva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLyBDb3B5cmln
aHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwog
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00OCwyNSArNDgsNTMgQEAgc3RhdGlj
IFN0cmluZyBwcmVwcm9jZXNzU3RyaW5nKFN0cmluZyBzdAogICAgIHJldHVybiBzdHJpbmcucmVw
bGFjZSgnXDAnLCByZXBsYWNlbWVudENoYXJhY3Rlcik7CiB9CiAKK3N0ZDo6dW5pcXVlX3B0cjxD
U1NUb2tlbml6ZXI+IENTU1Rva2VuaXplcjo6dHJ5Q3JlYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgLy8gV2UgY2FuJ3QgdXNlIG1ha2VV
bmlxdWUgaGVyZSBiZWNhdXNlIGl0IGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoaXMgcHJpdmF0
ZSBjb25zdHJ1Y3Rvci4KKyAgICBhdXRvIHRva2VuaXplciA9IHN0ZDo6dW5pcXVlX3B0cjxDU1NU
b2tlbml6ZXI+KG5ldyBDU1NUb2tlbml6ZXIocHJlcHJvY2Vzc1N0cmluZyhzdHJpbmcpLCBudWxs
cHRyLCAmc3VjY2VzcykpOworICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiB0b2tlbml6ZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxDU1NUb2tlbml6ZXI+IENTU1Rva2VuaXplcjo6dHJ5Q3JlYXRlKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXImIHdyYXBwZXIpCit7CisgICAgYm9vbCBzdWNj
ZXNzID0gdHJ1ZTsKKyAgICAvLyBXZSBjYW4ndCB1c2UgbWFrZVVuaXF1ZSBoZXJlIGJlY2F1c2Ug
aXQgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBwcml2YXRlIGNvbnN0cnVjdG9yLgorICAg
IGF1dG8gdG9rZW5pemVyID0gc3RkOjp1bmlxdWVfcHRyPENTU1Rva2VuaXplcj4obmV3IENTU1Rv
a2VuaXplcihwcmVwcm9jZXNzU3RyaW5nKHN0cmluZyksICZ3cmFwcGVyLCAmc3VjY2VzcykpOwor
ICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiB0b2tlbml6ZXI7Cit9CisKIENTU1Rva2VuaXplcjo6Q1NTVG9rZW5pemVyKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQotICAgIDogQ1NTVG9rZW5pemVyKHByZXByb2Nlc3NTdHJpbmcoc3Ry
aW5nKSwgbnVsbHB0cikKKyAgICA6IENTU1Rva2VuaXplcihwcmVwcm9jZXNzU3RyaW5nKHN0cmlu
ZyksIG51bGxwdHIsIG51bGxwdHIpCiB7CiB9CiAKIENTU1Rva2VuaXplcjo6Q1NTVG9rZW5pemVy
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXImIHdyYXBwZXIp
Ci0gICAgOiBDU1NUb2tlbml6ZXIocHJlcHJvY2Vzc1N0cmluZyhzdHJpbmcpLCAmd3JhcHBlcikK
KyAgICA6IENTU1Rva2VuaXplcihwcmVwcm9jZXNzU3RyaW5nKHN0cmluZyksICZ3cmFwcGVyLCBu
dWxscHRyKQogewogfQogCi1pbmxpbmUgQ1NTVG9rZW5pemVyOjpDU1NUb2tlbml6ZXIoU3RyaW5n
JiYgc3RyaW5nLCBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIqIHdyYXBwZXIpCitDU1NUb2tlbml6
ZXI6OkNTU1Rva2VuaXplcihTdHJpbmcmJiBzdHJpbmcsIENTU1BhcnNlck9ic2VydmVyV3JhcHBl
ciogd3JhcHBlciwgYm9vbCogY29uc3RydWN0aW9uU3VjY2Vzc1B0cikKICAgICA6IG1faW5wdXQo
c3RyaW5nKQogeworICAgIGlmIChjb25zdHJ1Y3Rpb25TdWNjZXNzUHRyKQorICAgICAgICAqY29u
c3RydWN0aW9uU3VjY2Vzc1B0ciA9IHRydWU7CisKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVG8gYXZvaWQgcmVzaXppbmcgd2UgZXJyIG9uIHRo
ZSBzaWRlIG9mIHJlc2VydmluZyB0b28gbXVjaCBzcGFjZS4KICAgICAvLyBNb3N0IHN0cmluZ3Mg
d2UgdG9rZW5pemUgaGF2ZSBhYm91dCAzLjUgdG8gNSBjaGFyYWN0ZXJzIHBlciB0b2tlbi4KLSAg
ICBtX3Rva2Vucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSAvIDMpOwor
ICAgIGlmIChVTkxJS0VMWSghbV90b2tlbnMudHJ5UmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdHJp
bmcubGVuZ3RoKCkgLyAzKSkpIHsKKyAgICAgICAgLy8gV2hlbiBjb25zdHJ1Y3Rpb25TdWNjZXNz
UHRyIGlzIG51bGwsIG91ciBwb2xpY3kgaXMgdG8gY3Jhc2ggb24gZmFpbHVyZS4KKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RydWN0aW9uU3VjY2Vzc1B0cik7CisgICAgICAgICpjb25zdHJ1
Y3Rpb25TdWNjZXNzUHRyID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICB1
bnNpZ25lZCBvZmZzZXQgPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC03Nyw3ICsxMDUsMTIg
QEAgaW5saW5lIENTU1Rva2VuaXplcjo6Q1NTVG9rZW5pemVyKFN0cmluZwogICAgICAgICAgICAg
aWYgKHdyYXBwZXIpCiAgICAgICAgICAgICAgICAgd3JhcHBlci0+YWRkQ29tbWVudChvZmZzZXQs
IG1faW5wdXQub2Zmc2V0KCksIG1fdG9rZW5zLnNpemUoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQodG9rZW4pOworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFtX3Rva2Vucy50cnlBcHBlbmQodG9rZW4pKSkgeworICAgICAgICAgICAgICAgIC8vIFdo
ZW4gY29uc3RydWN0aW9uU3VjY2Vzc1B0ciBpcyBudWxsLCBvdXIgcG9saWN5IGlzIHRvIGNyYXNo
IG9uIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RydWN0aW9u
U3VjY2Vzc1B0cik7CisgICAgICAgICAgICAgICAgKmNvbnN0cnVjdGlvblN1Y2Nlc3NQdHIgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAod3JhcHBlcikKICAgICAgICAgICAgICAgICB3cmFwcGVyLT5hZGRUb2tlbihvZmZzZXQp
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Rva2VuaXpl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVG9rZW5pemVy
LmgJKHJldmlzaW9uIDI2Mzc1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVG9r
ZW5pemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLyBDb3B5cmlnaHQgMjAx
NCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwogLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00NSw2ICs0NSw5IEBAIGNsYXNzIENTU1Rva2Vu
aXplciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NTVG9rZW5pemVyKTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PENTU1Rva2VuaXplcj4gdHJ5Q3JlYXRlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8Q1NTVG9rZW5pemVyPiB0cnlDcmVhdGUoY29uc3QgU3RyaW5nJiwgQ1NTUGFy
c2VyT2JzZXJ2ZXJXcmFwcGVyJik7IC8vIEZvciB0aGUgaW5zcGVjdG9yCisKICAgICBleHBsaWNp
dCBDU1NUb2tlbml6ZXIoY29uc3QgU3RyaW5nJik7CiAgICAgQ1NTVG9rZW5pemVyKGNvbnN0IFN0
cmluZyYsIENTU1BhcnNlck9ic2VydmVyV3JhcHBlciYpOyAvLyBGb3IgdGhlIGluc3BlY3Rvcgog
CkBAIC01NCw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8U3RyaW5nPiYmIGVzY2FwZWRT
dHJpbmdzRm9yQWRvcHRpb24oKSB7IHJldHVybiBXVEZNb3ZlKG1fc3RyaW5nUG9vbCk7IH0KIAog
cHJpdmF0ZToKLSAgICBDU1NUb2tlbml6ZXIoU3RyaW5nJiYsIENTU1BhcnNlck9ic2VydmVyV3Jh
cHBlciopOworICAgIENTU1Rva2VuaXplcihTdHJpbmcmJiwgQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFw
cGVyKiwgYm9vbCogY29uc3RydWN0aW9uU3VjY2Vzcyk7CiAKICAgICBDU1NQYXJzZXJUb2tlbiBu
ZXh0VG9rZW4oKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzNzU5KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDYtMzAgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBoYW5kbGluZyBmb3Ig
YSBjYXNlIG9mIE9PTUUgaW4gQ1NTVG9rZW5pemVyIGFuZCBDU1NQYXJzZXIuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM3MDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY0ODA4ODg5PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgorCisgICAgICAgICogY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10b2tlbml6ZXItZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL291dC1vZi1tZW1vcnktaW4tY3NzLXRva2Vu
aXplci5odG1sOiBBZGRlZC4KKwogMjAyMC0wNi0zMCAgS2FybCBSYWNrbGVyICA8cmFja2xlckBh
cHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGV4cGVjdGF0aW9ucyBmb3IgY2FudmFzL3BoaWxp
cC90ZXN0cy8yZC5ncmFkaWVudC5yYWRpYWwuY29uZS5ib3R0b20uaHRtbCBhbmQgY2FudmFzL3Bo
aWxpcC90ZXN0cy8yZC5ncmFkaWVudC5yYWRpYWwuY29uZS5jeWxpbmRlci5odG1sIGFuZCBjYW52
YXMvcGhpbGlwL3Rlc3RzLzJkLmdyYWRpZW50LnJhZGlhbC5jb25lLmZyb250Lmh0bWwgYW5kIGNh
bnZhcy9waGlsaXAvdGVzdHMvMmQuZ3JhZGllbnQucmFkaWFsLmNvbmUuc2hhcGUxLmh0bWwgYW5k
IGNhbnZhcy9waGlsaXAvdGVzdHMvMmQuZ3JhZGllbnQucmFkaWFsLmNvbmUudG9wLmh0bWwgYXMg
dGhleSBhcmUgcGFzc2luZy4gCkluZGV4OiBMYXlvdXRUZXN0cy9jc3MzL291dC1vZi1tZW1vcnkt
aW4tY3NzLXRva2VuaXplci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Y3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10b2tlbml6ZXItZXhwZWN0ZWQudHh0CShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2NzczMvb3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVy
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUgQEAKK2xheWVyIGF0ICgw
LDApIHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5
ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQK
SW5kZXg6IExheW91dFRlc3RzL2NzczMvb3V0LW9mLW1lbW9yeS1pbi1jc3MtdG9rZW5pemVyLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3NzMy9vdXQtb2YtbWVtb3J5LWluLWNzcy10
b2tlbml6ZXIuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9jc3MzL291dC1vZi1t
ZW1vcnktaW4tY3NzLXRva2VuaXplci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBA
QAorPHNjcmlwdD4KK0NTUy5zdXBwb3J0cygnYScucmVwZWF0KDIqKjI5ICsgMSkpOworPC9zY3Jp
cHQ+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>