<?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>135293</bug_id>
          
          <creation_ts>2014-07-25 09:42:44 -0700</creation_ts>
          <short_desc>CSS JIT: Implement :visited pseudo class</short_desc>
          <delta_ts>2014-10-13 15:47:11 -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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>135255</dependson>
    
    <dependson>135324</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1024844</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-07-25 09:42:44 -0700</bug_when>
    <thetext>Implement :visited pseudo class for CSS JIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024883</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-07-25 12:03:16 -0700</bug_when>
    <thetext>Implementation notes.

* preset VisitedMatchDisabled only when mode is QueryingRules (security issue)
* inside :not, :link and :visited are treated with tricky path
* handle :visited tricks

Seeing the dbaron&apos;s post about this[1] and WebKit code,

1. like :visited + span 
2. nested link elements

are affected.

[1]: http://dbaron.org/mozilla/visited-privacy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026518</commentid>
    <comment_count>2</comment_count>
      <attachid>235945</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-03 10:00:28 -0700</bug_when>
    <thetext>Created attachment 235945
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026519</commentid>
    <comment_count>3</comment_count>
      <attachid>235946</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-03 10:45:28 -0700</bug_when>
    <thetext>Created attachment 235946
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026584</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-03 19:34:41 -0700</bug_when>
    <thetext>Attachment 235946 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026585</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-03 19:41:49 -0700</bug_when>
    <thetext>Wow, this is quite crazy.

I guess the state tracking is made necessary by the isLink() check of SelectorChecker? Do we know what kind of leak that guard is actually protecting? The blog post by David Baron is not exactly clear about that. Maybe it is something we should address during style resolution instead of the SelectorMatching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026666</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-04 12:47:44 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I guess the state tracking is made necessary by the isLink() check of SelectorChecker?

Yes!!! That&apos;s correct.

&gt; Do we know what kind of leak that guard is actually protecting? The blog post by David Baron is not exactly clear about that. Maybe it is something we should address during style resolution instead of the SelectorMatching.

Yeah, your question is right!!
Investigating the WebKit :visited implementation, I have some questions and I suspect that this dynamic visitedMatchType is really necessary.
Maybe I miss some WebKit internals, so I&apos;d like to hear your opinions :)

1.
Seeting linkMatchType &amp; adjacent&apos;s VisitedMatchTypeDisable protection combo, I think attacks by using getComputedStyle are already protected by them.
So I think that regardless of the result of SelectorChecker#match with isLink() check, getComputedStyle always returns the conservative (assumed as :link) style. Is it correct?

Currently, by using visitedMatchType in SelectorChecker, we disable the actual web pages&apos; view (visual, not programmably readable) for special :visited links, nested and adjacent. But since they are already protected from getComputedStyle attacks by using linkMatchType, personally, I think it&apos;s not necessary. Showing :visited view to users is safe because these values are not readable.

I think we can remove visitedMatchType special handling from SelectorChecker by extending determineLinkMatchType to support adjacent case correctly. Do you think about this?
If so, I think we can clean up SelectorChecker and the SelectorCompiler becomes more simple :D

2.
And seeing the SelectorChecker&apos;s implementation, I found some edge cases, so I have one concern that current SelectorChecker&apos;s protection is already broken.
Currently, SelectorChecker only checks isLink() to the matched element for the fragment. But I think there&apos;s curious edge cases.

For example, a selector &quot;:visited .mid .rightmost&quot; is provided, the following &quot;.rightmost&quot;
&lt;p&gt;
  &lt;a href=&quot;visited&quot;&gt;
    &lt;span class=&quot;mid&quot;&gt;
      &lt;a class=&quot;rightmost&quot;&gt;TARGET&lt;/a&gt;
    &lt;/span&gt;
  &lt;/a&gt;
&lt;/p&gt;

won&apos;t match to this selector. However, the following &quot;.rightmost&quot;

&lt;p&gt;
  &lt;a href=&quot;visited&quot;&gt;
    &lt;span class=&quot;mid&quot;&gt;
      &lt;a href=&quot;xxx&quot;&gt;
        &lt;span class=&quot;rightmost&quot;&gt;TARGET&lt;/span&gt;
      &lt;/a&gt;
    &lt;/span&gt;
  &lt;/a&gt;
&lt;/p&gt;

will match to this selector I think. Is it correct, and the expected behavior?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026667</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-04 12:50:17 -0700</bug_when>
    <thetext>%s/that this dynamic visitedMatchType is really necessary/that this dynamic visitedMatchType is not necessary/
sorry, mis-typed...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026812</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-05 00:14:57 -0700</bug_when>
    <thetext>&gt; Currently, by using visitedMatchType in SelectorChecker, we disable the actual web pages&apos; view (visual, not programmably readable) for special :visited links, nested and adjacent. But since they are already protected from getComputedStyle attacks by using linkMatchType, personally, I think it&apos;s not necessary. Showing :visited view to users is safe because these values are not readable.

Note that visual aspect are programmatically observable. For example you could change the layout size and observe the size of the document.

--

But I tend to agree with you. Some checks just don&apos;t seem to make sense like in the example you posted.

Adding Antti for comment, I believe he rewrote :visited&apos;s style resolution a while ago.

Antti: do you know why SelectorChecker&apos;s visitedMatchType exists? What cases is it supposed to protect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026835</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-05 05:42:38 -0700</bug_when>
    <thetext>&gt; Antti: do you know why SelectorChecker&apos;s visitedMatchType exists? What cases is it supposed to protect?

It isn&apos;t supposed to protect anything. In terms of security the trick is that selector checker (or style resolver in general) never looks into the  actual visited state so can&apos;t leak any information (decision to use visited style is done at paint time only).

What it does is to make :visited never match (as opposed to always matching) when doing querySelectorAll or other non-style queries. Any code that achieves the same result is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026836</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-05 05:58:06 -0700</bug_when>
    <thetext>It is also used for some semantics (no idea where these come from or whether they match other browsers):

        // Disable :visited matching when we see the first link or try to match anything else than an ancestors.
        if (context.element-&gt;isLink() || (relation != CSSSelector::Descendant &amp;&amp; relation != CSSSelector::Child))
            nextContext.visitedMatchType = VisitedMatchDisabled;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027031</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-05 18:37:48 -0700</bug_when>
    <thetext>It seems simplifying SelectorChecker is a viable path forward. Refactoring this will make it easier to implement the JIT part.

We should make sure to test the hell out of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027095</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-05 22:48:36 -0700</bug_when>
    <thetext>Antti, Benjamin: Thank you for your clarification.

&gt; It seems simplifying SelectorChecker is a viable path forward. Refactoring this will make it easier to implement the JIT part.
&gt; We should make sure to test the hell out of it.

Agreed. So I&apos;ve opened the bug 135639 to refactor SelectorChecker and test to ensure there&apos;s no security issues :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037484</commentid>
    <comment_count>13</comment_count>
      <attachid>238718</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-26 08:31:32 -0700</bug_when>
    <thetext>Created attachment 238718
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037485</commentid>
    <comment_count>14</comment_count>
      <attachid>238719</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-26 08:40:36 -0700</bug_when>
    <thetext>Created attachment 238719
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038349</commentid>
    <comment_count>15</comment_count>
      <attachid>238719</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-30 14:31:53 -0700</bug_when>
    <thetext>Comment on attachment 238719
Patch

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

The part about :visited in top level selectors look good to me.

There is code related to :not() on which I would like more information:
    Wouldn&apos;t it be possible to handle :not(:link) with the generic path by adding discarding the :not() and adding :visited to the fragment&apos;s pseudo classes?

I r- to do a second round with your explanations for :not().

Your changes to StackAllocator looks correct. Feel free to land that separately as reviewed by me.

&gt; Source/WebCore/ChangeLog:8
&gt; +        This patch implements CSS JIT for :visited. And maake :not(:link) JIT-ed.

Typo: maake

&gt; Source/WebCore/ChangeLog:23
&gt; +        Edge cases are tested by the existing tests.
&gt; +        :not(:link)
&gt; +            fast/history/link-inside-not.html
&gt; +        :not(:visited)
&gt; +            fast/history/visited-inside-not.html
&gt; +        :-webkit-any(:link)
&gt; +            fast/history/link-inside-any.html
&gt; +        :-webkit-any(:visited)
&gt; +            fast/history/visited-inside-any.html

Mentioning this in the changelog is absolutely awesome, I wish more authors did that.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:616
&gt; +            // And when :visited is inside :not (:not(:visited)), it returns CannotMatchAnything and it always passes this filter.

This comment is not necessary, the explanation in PseudoClassVisited is enough.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:630
&gt; +                ASSERT_WITH_MESSAGE(selectorContext != SelectorContext::QuerySelector, &quot;When visitedMatchEnabled is true, selector context is never QuerySelector.&quot;);

The message repeats the condition IMHO. Maybe: &quot;QuerySelector should never match :visited link because it would be a privacy issue.&quot; or something like that?

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:723
&gt; +    bool visitedMatchEnabled = true;
&gt; +    if (selectorContext == SelectorContext::QuerySelector)
&gt; +        visitedMatchEnabled = false;

Could be:
bool visitedMatchEnabled = selectorContext != SelectorContext::QuerySelector;

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1431
&gt; +    // Remember the stack base of the temporary variables.

This comment is superfluous, the code below is clear.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1460
&gt; +    // Invalidate temporaryStackBase if there&apos;s no temporary variables.
&gt; +    if (temporaryStackBase == m_stackAllocator.stackTop())
&gt; +        temporaryStackBase = StackAllocator::StackReference();

Instead of this, couldn&apos;t we check &quot;temporaryStackBase == m_stackAllocator.stackTop()&quot; instead of temporaryStackBase.isValid() when discarding the stack?

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1558
&gt; +void SelectorCodeGenerator::generateRightmostTreeWalker(Assembler::JumpList&amp; failureCases, const SelectorFragment&amp; fragment)
&gt; +{
&gt; +    generateElementMatching(failureCases, failureCases, fragment);
&gt; +}
&gt; +

Why do you need this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038482</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-30 23:20:21 -0700</bug_when>
    <thetext>Committed r174142: &lt;http://trac.webkit.org/changeset/174142&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038610</commentid>
    <comment_count>17</comment_count>
      <attachid>238719</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-01 12:19:02 -0700</bug_when>
    <thetext>Comment on attachment 238719
Patch

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

Thank you for your detailed review. And your idea is quite coooooooool! I&apos;ve missed the point. By leveraging your idea, we can implement this much simpler!!

:not(:link) behaves like the following

+ When the visited matche is enabled, always pass
+ Otherwise, :not(:any-link)

In the current implementation, :visited check is deferred until the matching is finished. So even if the fragment inside :not has PseudoClassVisited, it doesn&apos;t cause :not(visited match enabled) behavior. This completely matches to the behavior of :not(:link).

I&apos;ll upload the revised patch!

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        This patch implements CSS JIT for :visited. And maake :not(:link) JIT-ed.
&gt; 
&gt; Typo: maake

oops, thx!

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:616
&gt;&gt; +            // And when :visited is inside :not (:not(:visited)), it returns CannotMatchAnything and it always passes this filter.
&gt; 
&gt; This comment is not necessary, the explanation in PseudoClassVisited is enough.

ok I&apos;ll remove it.

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:630
&gt;&gt; +                ASSERT_WITH_MESSAGE(selectorContext != SelectorContext::QuerySelector, &quot;When visitedMatchEnabled is true, selector context is never QuerySelector.&quot;);
&gt; 
&gt; The message repeats the condition IMHO. Maybe: &quot;QuerySelector should never match :visited link because it would be a privacy issue.&quot; or something like that?

Sounds nice! I&apos;ll replace it with your suggestion.

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:723
&gt;&gt; +        visitedMatchEnabled = false;
&gt; 
&gt; Could be:
&gt; bool visitedMatchEnabled = selectorContext != SelectorContext::QuerySelector;

done.

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1431
&gt;&gt; +    // Remember the stack base of the temporary variables.
&gt; 
&gt; This comment is superfluous, the code below is clear.

Removed.

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1460
&gt;&gt; +        temporaryStackBase = StackAllocator::StackReference();
&gt; 
&gt; Instead of this, couldn&apos;t we check &quot;temporaryStackBase == m_stackAllocator.stackTop()&quot; instead of temporaryStackBase.isValid() when discarding the stack?

Your suggestion is nice. Agreed, `temporaryStackBase == m_stackAllocator.stackTop()` clearly states the meaning of the code.

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1558
&gt;&gt; +
&gt; 
&gt; Why do you need this?

I added it to maintain the one on one corresponding between the methods and combinators.

Rightmost =&gt; generateRightmostTreeWalker
Descendant =&gt; generateAncestorTreeWalker
Child =&gt; generateParentElementTreeWalker
DirectAdjacent =&gt; generateDirectAdjacentTreeWalker
IndirectAdjacent =&gt; generateIndirectAdjacentTreeWalker


Is it preferable to use generateElementMatching directly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038621</commentid>
    <comment_count>18</comment_count>
      <attachid>238719</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-01 13:07:52 -0700</bug_when>
    <thetext>Comment on attachment 238719
Patch

Ah, oops.

In the following example,

*:not(link)

it matches the following &lt;a&gt;

&lt;a href=&apos;xxx&apos;&gt;toplevel&lt;/a&gt;

since visited match type is enabled.
To find it, when the :link is matched (normal :not failed), we need to pass the filter with storing the element as the last visited element.
It requires additional non-generic path in the :not.

And there&apos;s another edge case, `:-webkit-any(:not(:link), a) a` and the tree

&lt;a&gt;
  &lt;a target&gt;&lt;/a&gt;
&lt;/a&gt;

If we choose :not(:link) as matched and storing it to the last visited element, the selector will fail since the last visited element is not the first encountered link.
However, if we choose a in the any&apos;s choices, the selector will succeed.
So to solve this, we should check whether it is the first encountered link when :not(:link) is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038650</commentid>
    <comment_count>19</comment_count>
      <attachid>239050</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-01 14:20:12 -0700</bug_when>
    <thetext>Created attachment 239050
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038654</commentid>
    <comment_count>20</comment_count>
      <attachid>239050</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-01 14:29:08 -0700</bug_when>
    <thetext>Comment on attachment 239050
Patch

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

I&apos;ve updated the patch.
Because of :-webkit-any(:not(:link)), the non-generic path is required in the :not filter check.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:3153
&gt; +        }

To cover :-webkit-any(:not(:link)) case, we need to check whether the element is the first encountered link.
This check is needed only when the :not filter predicate passes (so, the whole filter failed).

And there&apos;s some room for optimization. The immediate check is only needed in the case of :-webkit-any(:not(:link)).
So in the normal cases (:not(:link)), we can leverage :visited check system; Inserting

if (:not(:link) and not inside :-webkit-any) {
    generateStoreLastVisitedElement(elementAddressRegister);
    localFailureCases.append(m_assembler.jump())
}

But it brings some more complexity. What do you think? I think it depends on whether :not(:link) is popular or not.

&gt; LayoutTests/ChangeLog:9
&gt; +        * fast/history/link-inside-not-inside-any.html: Added.

Added new tests for :-webkit-any(:not(:link)).
:not(:-webkit-any(:link)) is syntax error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039109</commentid>
    <comment_count>21</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-10-02 20:38:54 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 238719 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238719&amp;action=review
&gt; 
&gt; Thank you for your detailed review. And your idea is quite coooooooool! I&apos;ve missed the point. By leveraging your idea, we can implement this much simpler!!
&gt; 
&gt; :not(:link) behaves like the following
&gt; 
&gt; + When the visited matche is enabled, always pass
&gt; + Otherwise, :not(:any-link)
&gt; 
&gt; In the current implementation, :visited check is deferred until the matching is finished. So even if the fragment inside :not has PseudoClassVisited, it doesn&apos;t cause :not(visited match enabled) behavior. This completely matches to the behavior of :not(:link).

Rather:

:not(:link) would be:
-adding :visited to the parent selector if visited matching is enabled.
-always failing otherwise.

:not(:visited) would be:
-always passing in all cases.

The problem is the new :not() and :matches() but that is something we can deal with later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039112</commentid>
    <comment_count>22</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-10-02 20:52:45 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #17)
&gt; &gt; (From update of attachment 238719 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238719&amp;action=review
&gt; &gt; 
&gt; &gt; Thank you for your detailed review. And your idea is quite coooooooool! I&apos;ve missed the point. By leveraging your idea, we can implement this much simpler!!
&gt; &gt; 
&gt; &gt; :not(:link) behaves like the following
&gt; &gt; 
&gt; &gt; + When the visited matche is enabled, always pass
&gt; &gt; + Otherwise, :not(:any-link)
&gt; &gt; 
&gt; &gt; In the current implementation, :visited check is deferred until the matching is finished. So even if the fragment inside :not has PseudoClassVisited, it doesn&apos;t cause :not(visited match enabled) behavior. This completely matches to the behavior of :not(:link).
&gt; 
&gt; Rather:
&gt; 
&gt; :not(:link) would be:
&gt; -adding :visited to the parent selector if visited matching is enabled.
&gt; -always failing otherwise.
&gt; 
&gt; :not(:visited) would be:
&gt; -always passing in all cases.
&gt; 
&gt; The problem is the new :not() and :matches() but that is something we can deal with later.

Ok, reading your next comments explained everything...

Reading the edge cases, I am in favor of dropping :visited, and make :link a synonym of :any-link for any functional pseudo class.

The short term future is :matches() and :not() taking selector list. Those are critical use case to improve CSS. Since we do not have a clear path forward for :link and :visited in those, I am in favor of deferring the problem.

If you feel strongly about :not(:visited) and :not(:link), I&apos;ll review your latest patch. Otherwise let&apos;s cut the complexity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039704</commentid>
    <comment_count>23</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-06 04:11:06 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; 
&gt; Ok, reading your next comments explained everything...
&gt; 
&gt; Reading the edge cases, I am in favor of dropping :visited, and make :link a synonym of :any-link for any functional pseudo class.
&gt; 
&gt; The short term future is :matches() and :not() taking selector list. Those are critical use case to improve CSS. Since we do not have a clear path forward for :link and :visited in those, I am in favor of deferring the problem.
&gt; 
&gt; If you feel strongly about :not(:visited) and :not(:link), I&apos;ll review your latest patch. Otherwise let&apos;s cut the complexity.

Thanks for your comment.
Does dropping :visited mean deferring implementing/considering the complex semantics of :visited/:link with functional pseudo classes and taking the simple way, correct?

+ :not(:visited) accepts all, and :-webkit-any(:visited) rejects all.
+ :link becomes :-any-link inside the functional pseudo classes
If so, agree with you :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039927</commentid>
    <comment_count>24</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-10-06 20:18:02 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; 
&gt; &gt; Ok, reading your next comments explained everything...
&gt; &gt; 
&gt; &gt; Reading the edge cases, I am in favor of dropping :visited, and make :link a synonym of :any-link for any functional pseudo class.
&gt; &gt; 
&gt; &gt; The short term future is :matches() and :not() taking selector list. Those are critical use case to improve CSS. Since we do not have a clear path forward for :link and :visited in those, I am in favor of deferring the problem.
&gt; &gt; 
&gt; &gt; If you feel strongly about :not(:visited) and :not(:link), I&apos;ll review your latest patch. Otherwise let&apos;s cut the complexity.
&gt; 
&gt; Thanks for your comment.
&gt; Does dropping :visited mean deferring implementing/considering the complex semantics of :visited/:link with functional pseudo classes and taking the simple way, correct?
&gt; 
&gt; + :not(:visited) accepts all, and :-webkit-any(:visited) rejects all.

That sounds good. We assume &quot;:visited&quot; always fail in those cases.

&gt; + :link becomes :-any-link inside the functional pseudo classes
&gt; If so, agree with you :)

That sounds good too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041227</commentid>
    <comment_count>25</comment_count>
      <attachid>239709</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-12 19:11:45 -0700</bug_when>
    <thetext>Created attachment 239709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041228</commentid>
    <comment_count>26</comment_count>
      <attachid>239709</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-12 19:17:37 -0700</bug_when>
    <thetext>Comment on attachment 239709
Patch

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

Sorry for the further late reply. I&apos;ve updated the patch for the latest CSS JIT :)

&gt; Source/WebCore/css/SelectorChecker.cpp:549
&gt; +                    if (subcontext.selector-&gt;pseudoClassType() == CSSSelector::PseudoClassVisited)

Drop `:not(:link))` special path. Simplify it for further selectors extensions.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:629
&gt; +                    ASSERT_WITH_MESSAGE(ignoreVisitedMode == VisitedMode::None, &quot;:visited is disabled in the functional pseudo classes&quot;);

When the fragment level is `InFunctionalPseudoType`, :visited doesn&apos;t require any :visited checks.
As the result, the visited mode of the sub fragments always becomes VisitedMode::None.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:666
&gt; +            ASSERT_WITH_MESSAGE(ignoreVisitedMode == VisitedMode::None, &quot;:visited is disabled in the functional pseudo classes&quot;);

ditto

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:-652
&gt; -                return FunctionType::CannotCompile;

Drop the :not(:link) restrictions.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1042
&gt; +        rootBacktrackingMemoryRequirement.stackCount += 2;

When the visited mode is Visited, we allocate 2 more stack references in the root fragment.
In the current simplified semantics, visited is only effective on the root fragments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041367</commentid>
    <comment_count>27</comment_count>
      <attachid>239709</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-10-13 14:47:27 -0700</bug_when>
    <thetext>Comment on attachment 239709
Patch

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

Looks good to me. Sorry I changed my mind so many time on the processing of :visited. Thanks for keeping up with the updates.

It believe we should revisit our options after :matches() is implemented, including multiple matching.

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1042
&gt;&gt; +    // Allocate the stack references for the last visited element and the start element.
&gt;&gt; +    if (visitedMode == VisitedMode::Visited)
&gt;&gt; +        rootBacktrackingMemoryRequirement.stackCount += 2;
&gt; 
&gt; When the visited mode is Visited, we allocate 2 more stack references in the root fragment.
&gt; In the current simplified semantics, visited is only effective on the root fragments.

I would put this branch outside computeBacktrackingMemoryRequirements().

Those two registers are unaffected by backtracking. Having the check in generateSelectorChecker() would also put the branch in the same scope where the stack references are assigned.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1561
&gt; +    if (m_visitedMode == VisitedMode::Visited) {
&gt; +        m_lastVisitedElement = m_backtrackingStack.takeLast();
&gt; +        m_startElement = m_backtrackingStack.takeLast();
&gt; +        unsigned offsetToStartElement = m_stackAllocator.offsetToStackReference(m_startElement);
&gt; +        m_assembler.storePtr(elementAddressRegister, Assembler::Address(Assembler::stackPointerRegister, offsetToStartElement));
&gt; +        unsigned offsetToLastVisitedElement = m_stackAllocator.offsetToStackReference(m_lastVisitedElement);
&gt; +        m_assembler.storePtr(Assembler::TrustedImmPtr(nullptr), Assembler::Address(Assembler::stackPointerRegister, offsetToLastVisitedElement));
&gt; +    }
&gt; +

I would prefer this allocation to be more explicit.

First, allocate allocateUninitialized(). Then take two out of the vector for :visited. The assign the remaining vector to m_backtrackingStack.

&gt; LayoutTests/TestExpectations:221
&gt; -fast/history/link-inside-not.html [ Failure ]
&gt; +# fast/history/link-inside-not.html [ Failure ]

Let&apos;s remove those lines entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041375</commentid>
    <comment_count>28</comment_count>
      <attachid>239709</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-13 15:22:32 -0700</bug_when>
    <thetext>Comment on attachment 239709
Patch

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

No problem :) Your review is so helpful. Sorry for my late reply since I needed to implement my research project code...

&gt; It believe we should revisit our options after :matches() is implemented, including multiple matching.

Yup

&gt;&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1042
&gt;&gt;&gt; +        rootBacktrackingMemoryRequirement.stackCount += 2;
&gt;&gt; 
&gt;&gt; When the visited mode is Visited, we allocate 2 more stack references in the root fragment.
&gt;&gt; In the current simplified semantics, visited is only effective on the root fragments.
&gt; 
&gt; I would put this branch outside computeBacktrackingMemoryRequirements().
&gt; 
&gt; Those two registers are unaffected by backtracking. Having the check in generateSelectorChecker() would also put the branch in the same scope where the stack references are assigned.

OK, that sounds nice.
I&apos;ve put this in generateSelectorChecker, it&apos;s near to the use of :visited&apos;s stack reference allocation code.

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1561
&gt;&gt; +
&gt; 
&gt; I would prefer this allocation to be more explicit.
&gt; 
&gt; First, allocate allocateUninitialized(). Then take two out of the vector for :visited. The assign the remaining vector to m_backtrackingStack.

It looks very nice to me.
So creating the variable, `temporaryStack`, allocating the stack references as this vector, taking 2 reference out of it and assigns the remaining vector to m_backtrackingStack. It makes the code clear.

&gt;&gt; LayoutTests/TestExpectations:221
&gt;&gt; +# fast/history/link-inside-not.html [ Failure ]
&gt; 
&gt; Let&apos;s remove those lines entirely.

done :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041391</commentid>
    <comment_count>29</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-13 15:47:11 -0700</bug_when>
    <thetext>Committed r174663: &lt;http://trac.webkit.org/changeset/174663&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235945</attachid>
            <date>2014-08-03 10:00:28 -0700</date>
            <delta_ts>2014-08-03 10:45:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135293-20140804020040.patch</filename>
            <type>text/plain</type>
            <size>44256</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxOTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQwMDI0YmQ1ODdmY2Qx
NzNkNTJmMGI1MDE3MTA5YmZhOTMwZGMzMC4uOGI1OTJmYWE4OTU3MzAyNDc2Y2E2ZTU2NDY1NTFl
MTEwZThhNDQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE0LTA4LTAzICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUyBKSVQ6IElt
cGxlbWVudCA6dmlzaXRlZCBwc2V1ZG8gY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JGcmFnbWVudDo6U2VsZWN0
b3JGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1
ZG9DbGFzc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDb21waWxlcjo6Y29uc3RydWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OmNhblVzZUJhY2t0cmFja2luZ1dpdGhvdXRUYWlsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OnJlcXVpcmVzUmVzdG9yaW5nVmlzaXRl
ZE1hdGNoVHlwZVRhaWwpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Y29t
cHV0ZUJhY2t0cmFja2luZ0luZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZVJpZ2h0bW9zdFRyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVBhcmVudEVsZW1l
bnRUcmVlV2Fsa2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVBbmNlc3RvclRyZWVXYWxrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZUluZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6anVtcElmVmlzaXRlZE1hdGNoVHlwZUlz
RGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpqdW1wSWZWaXNpdGVkTWF0Y2hUeXBlSXNFbmFibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGVTYXZlVmlzaXRlZE1hdGNoVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBp
bGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlUmVzdG9yZVZpc2l0ZWRNYXRjaFR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjp1cGRhdGVWaXNpdGVkTWF0Y2hUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6bGlua0ZhaWx1cmVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVEZXNjZW5kYW50QmFja3RyYWNraW5nVGFpbCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlUmVzdG9yaW5nVmlz
aXRlZE1hdGNoVHlwZVRhaWwpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
bmVlZHNCYWNrdHJhY2tpbmdUYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYWNrdHJhY2tpbmdUYWlsc0lmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50TWF0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRMaW5r
TWF0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRNYXRjaGVzTm90UHNldWRvQ2xhc3MpOgorICAg
ICAgICAqIGNzc2ppdC9TdGFja0FsbG9jYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RhY2tB
bGxvY2F0b3I6OnN0YWNrVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YWNrQWxsb2NhdG9yOjph
bGxvY2F0ZVVuaW5pdGlhbGl6ZWQpOgorCiAyMDE0LTA4LTAyICBKZXJlbXkgSm9uZXMgIDxqZXJl
bXlqQGFwcGxlLmNvbT4KIAogICAgICAgICBTdXBwb3J0IGJvdGggd2luZG93IGFuZCB2aWV3IGJh
c2VkIHZpZGVvIGZ1bGxzY3JlZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQv
U2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21w
aWxlci5jcHAKaW5kZXggOTYzNWUzZjUwYmUzMjYwOGFlZTUwYTBmMzFmMDZiN2ExMGI4NmU1MC4u
MjY1MWEwMGFhY2E1NzUzOTY1NmY0Y2JlYzRiZDVmMGRkODA2YjBiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcApAQCAtNzMsMTQgKzczLDE2IEBAIGVudW0g
Y2xhc3MgQmFja3RyYWNraW5nQWN0aW9uIHsKIH07CiAKIHN0cnVjdCBCYWNrdHJhY2tpbmdGbGFn
IHsKLSAgICBlbnVtIHsKKyAgICBlbnVtIDogdW5zaWduZWQgewogICAgICAgICBEZXNjZW5kYW50
RW50cnlQb2ludCA9IDEsCiAgICAgICAgIEluZGlyZWN0QWRqYWNlbnRFbnRyeVBvaW50ID0gMSA8
PCAxLAogICAgICAgICBTYXZlRGVzY2VuZGFudEJhY2t0cmFja2luZ1N0YXJ0ID0gMSA8PCAyLAog
ICAgICAgICBTYXZlQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCA9IDEgPDwgMywKICAgICAgICAg
RGlyZWN0QWRqYWNlbnRUYWlsID0gMSA8PCA0LAogICAgICAgICBEZXNjZW5kYW50VGFpbCA9IDEg
PDwgNSwKLSAgICAgICAgSW5DaGFpbldpdGhEZXNjZW5kYW50VGFpbCA9IDEgPDwgNgorICAgICAg
ICBJbkNoYWluV2l0aERlc2NlbmRhbnRUYWlsID0gMSA8PCA2LAorICAgICAgICBSZXN0b3JpbmdW
aXNpdGVkTWF0Y2hUeXBlVGFpbCA9IDEgPDwgNywKKyAgICAgICAgTmVlZHNUcmFja2luZ1Zpc2l0
ZWRNYXRjaFR5cGUgPSAxIDw8IDgKICAgICB9OwogfTsKIApAQCAtMTM5LDYgKzE0MSw3IEBAIHN0
cnVjdCBTZWxlY3RvckZyYWdtZW50IHsKICAgICAgICAgLCBpZChudWxscHRyKQogICAgICAgICAs
IGxhbmdGaWx0ZXIobnVsbHB0cikKICAgICAgICAgLCBwc2V1ZG9FbGVtZW50U2VsZWN0b3IobnVs
bHB0cikKKyAgICAgICAgLCB1c2VWaXNpdGVkTWF0Y2hUeXBlKGZhbHNlKQogICAgICAgICAsIG9u
bHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUodHJ1ZSkKICAgICB7CiAgICAgfQpAQCAtMTQ5LDcg
KzE1Miw3IEBAIHN0cnVjdCBTZWxlY3RvckZyYWdtZW50IHsKICAgICBCYWNrdHJhY2tpbmdBY3Rp
b24gdHJhdmVyc2FsQmFja3RyYWNraW5nQWN0aW9uOwogICAgIEJhY2t0cmFja2luZ0FjdGlvbiBt
YXRjaGluZ1RhZ05hbWVCYWNrdHJhY2tpbmdBY3Rpb247CiAgICAgQmFja3RyYWNraW5nQWN0aW9u
IG1hdGNoaW5nUG9zdFRhZ05hbWVCYWNrdHJhY2tpbmdBY3Rpb247Ci0gICAgdW5zaWduZWQgY2hh
ciBiYWNrdHJhY2tpbmdGbGFnczsKKyAgICB1bnNpZ25lZCBiYWNrdHJhY2tpbmdGbGFnczsKICAg
ICB1bnNpZ25lZCB0YWdOYW1lTWF0Y2hlZEJhY2t0cmFja2luZ1N0YXJ0SGVpZ2h0RnJvbURlc2Nl
bmRhbnQ7CiAgICAgdW5zaWduZWQgdGFnTmFtZU5vdE1hdGNoZWRCYWNrdHJhY2tpbmdTdGFydEhl
aWdodEZyb21EZXNjZW5kYW50OwogICAgIHVuc2lnbmVkIGhlaWdodEZyb21EZXNjZW5kYW50OwpA
QCAtMTY5LDYgKzE3Miw5IEBAIHN0cnVjdCBTZWxlY3RvckZyYWdtZW50IHsKICAgICBWZWN0b3I8
VmVjdG9yPFNlbGVjdG9yRnJhZ21lbnQ+PiBhbnlGaWx0ZXJzOwogICAgIGNvbnN0IENTU1NlbGVj
dG9yKiBwc2V1ZG9FbGVtZW50U2VsZWN0b3I7CiAKKyAgICAvLyBJbmRpY2F0ZXMgdGhlIGZyYWdt
ZW50IG9yIGl0cyBzdWIgZnJhZ21lbnRzIHVzZSB2aXNpdGVkTWF0Y2hUeXBlLgorICAgIGJvb2wg
dXNlVmlzaXRlZE1hdGNoVHlwZTsKKwogICAgIC8vIEZvciBxdWlya3MgbW9kZSwgZm9sbG93IHRo
aXM6IGh0dHA6Ly9xdWlya3Muc3BlYy53aGF0d2cub3JnLyN0aGUtOmFjdGl2ZS1hbmQtOmhvdmVy
LXF1aXJrCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIGEgY29tcG91bmQgc2VsZWN0b3IgJ3NlbGVj
dG9yJyB0aGF0IG1hdGNoZXMgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG11c3Qgbm90IG1hdGNo
IGVsZW1lbnRzIHRoYXQgd291bGQgbm90IGFsc28gbWF0Y2ggdGhlICc6YW55LWxpbmsnIHNlbGVj
dG9yLgogICAgIC8vCkBAIC0yMTEsNiArMjE3LDggQEAgY2xhc3MgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yIHsKICAgICB2b2lkIGdlbmVyYXRlU2VsZWN0b3JDaGVja2VyKCk7CiAKICAgICAvLyBFbGVt
ZW50IHJlbGF0aW9ucyB0cmVlIHdhbGtlci4KKyAgICB2b2lkIGdlbmVyYXRlUmlnaHRtb3N0VHJl
ZVdhbGtlcihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9y
RnJhZ21lbnQmKTsKKwogICAgIHZvaWQgZ2VuZXJhdGVXYWxrVG9QYXJlbnROb2RlKEFzc2VtYmxl
cjo6UmVnaXN0ZXJJRCB0YXJnZXRSZWdpc3Rlcik7CiAgICAgdm9pZCBnZW5lcmF0ZVdhbGtUb1Bh
cmVudEVsZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6
OlJlZ2lzdGVySUQgdGFyZ2V0UmVnaXN0ZXIpOwogICAgIHZvaWQgZ2VuZXJhdGVQYXJlbnRFbGVt
ZW50VHJlZVdhbGtlcihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNl
bGVjdG9yRnJhZ21lbnQmKTsKQEAgLTIyNywxMSArMjM1LDEzIEBAIGNsYXNzIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvciB7CiAgICAgdm9pZCBsaW5rRmFpbHVyZXMoQXNzZW1ibGVyOjpKdW1wTGlzdCYg
Z2xvYmFsRmFpbHVyZUNhc2VzLCBCYWNrdHJhY2tpbmdBY3Rpb24sIEFzc2VtYmxlcjo6SnVtcExp
c3QmIGxvY2FsRmFpbHVyZUNhc2VzKTsKICAgICB2b2lkIGdlbmVyYXRlQWRqYWNlbnRCYWNrdHJh
Y2tpbmdUYWlsKCk7CiAgICAgdm9pZCBnZW5lcmF0ZURlc2NlbmRhbnRCYWNrdHJhY2tpbmdUYWls
KCk7Ci0gICAgdm9pZCBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQoQXNzZW1ibGVy
OjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7CisgICAg
dm9pZCBnZW5lcmF0ZVJlc3RvcmluZ1Zpc2l0ZWRNYXRjaFR5cGVUYWlsKCk7CisgICAgdm9pZCBn
ZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQoY29uc3QgU2VsZWN0b3JGcmFnbWVudCYp
OwogCiAgICAgLy8gRWxlbWVudCBwcm9wZXJ0aWVzIG1hdGNoZXJzLgogICAgIHZvaWQgZ2VuZXJh
dGVFbGVtZW50TWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgbWF0Y2hpbmdUYWdOYW1lRmFp
bHVyZUNhc2VzLCBBc3NlbWJsZXI6Okp1bXBMaXN0JiBtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVy
ZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1l
bnREYXRhTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBT
ZWxlY3RvckZyYWdtZW50Jik7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRMaW5rTWF0Y2hpbmco
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50
Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0cik7CiAgICAgdm9pZCBnZW5l
cmF0ZUVsZW1lbnRJc0FjdGl2ZShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNv
bnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzRmlyc3RD
aGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJh
Z21lbnQmKTsKQEAgLTI2MiwxNCArMjcyLDE5IEBAIGNsYXNzIFNlbGVjdG9yQ29kZUdlbmVyYXRv
ciB7CiAgICAgQXNzZW1ibGVyOjpKdW1wIGJyYW5jaE9uUmVzb2x2aW5nTW9kZVdpdGhDaGVja2lu
Z0NvbnRleHQoQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTZWxlY3RvckNoZWNrZXI6
Ok1vZGUsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQpOwogICAgIEFzc2Vt
Ymxlcjo6SnVtcCBicmFuY2hPblJlc29sdmluZ01vZGUoQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uLCBTZWxlY3RvckNoZWNrZXI6Ok1vZGUsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVj
a2luZ0NvbnRleHQpOwogICAgIHZvaWQgZ2VuZXJhdGVNYXJrUHNldWRvU3R5bGVGb3JQc2V1ZG9F
bGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JG
cmFnbWVudCYpOworICAgIHZvaWQgZ2VuZXJhdGVSZXN0b3JlVmlzaXRlZE1hdGNoVHlwZSgpOwog
ICAgIHZvaWQgZ2VuZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBz
ZXVkb0VsZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxl
Y3RvckZyYWdtZW50JiwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCk7Cisg
ICAgdm9pZCBnZW5lcmF0ZVNhdmVWaXNpdGVkTWF0Y2hUeXBlKCk7CiAgICAgdm9pZCBnZW5lcmF0
ZVNwZWNpYWxGYWlsdXJlSW5RdWlya3NNb2RlRm9yQWN0aXZlQW5kSG92ZXJJZk5lZWRlZChBc3Nl
bWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsK
ICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBJZk5vUHJldmlvdXNBZGphY2VudEVsZW1lbnQo
KTsKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBJZk5vTmV4dEFkamFjZW50RWxlbWVudCgp
OwogICAgIEFzc2VtYmxlcjo6SnVtcCBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShBc3NlbWJsZXI6
OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0UmVnaXN0ZXIpOworICAgIEFzc2VtYmxlcjo6SnVt
cCBqdW1wSWZWaXNpdGVkTWF0Y2hUeXBlSXNEaXNhYmxlZCgpOworICAgIEFzc2VtYmxlcjo6SnVt
cCBqdW1wSWZWaXNpdGVkTWF0Y2hUeXBlSXNFbmFibGVkKCk7CiAgICAgdm9pZCBsb2FkQ2hlY2tp
bmdDb250ZXh0KEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQpOwogICAgIEFz
c2VtYmxlcjo6SnVtcCBtb2R1bG8oSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9u
LCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgaW5wdXREaXZpZGVuZCwgaW50IGRpdmlzb3IpOwogICAg
IHZvaWQgbW9kdWxvSXNaZXJvKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIGlucHV0RGl2aWRlbmQsIGludCBkaXZpc29yKTsKKyAgICB2b2lk
IHVwZGF0ZVZpc2l0ZWRNYXRjaFR5cGUoKTsKIAogICAgIGJvb2wgZ2VuZXJhdGVQcm9sb2d1ZSgp
OwogICAgIHZvaWQgZ2VuZXJhdGVFcGlsb2d1ZSgpOwpAQCAtMjgzLDE4ICsyOTgsMjMgQEAgY2xh
c3MgU2VsZWN0b3JDb2RlR2VuZXJhdG9yIHsKICAgICBTZWxlY3RvckNvbnRleHQgbV9zZWxlY3Rv
ckNvbnRleHQ7CiAgICAgRnVuY3Rpb25UeXBlIG1fZnVuY3Rpb25UeXBlOwogICAgIFNlbGVjdG9y
RnJhZ21lbnRMaXN0IG1fc2VsZWN0b3JGcmFnbWVudHM7CisgICAgYm9vbCBtX25lZWRzVmlzaXRl
ZE1hdGNoVHlwZTsKICAgICBib29sIG1fbmVlZHNBZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0Owog
CiAgICAgU3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlIG1fY2hlY2tpbmdDb250ZXh0U3Rh
Y2tSZWZlcmVuY2U7CiAKICAgICBBc3NlbWJsZXI6OkxhYmVsIG1fZGVzY2VuZGFudEVudHJ5UG9p
bnQ7CisgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2Rlc2NlbmRhbnRGYWlsdXJlQ2FzZXM7Cisg
ICAgQXNzZW1ibGVyOjpMYWJlbCBtX2Rlc2NlbmRhbnRUcmVlV2Fsa2VyRW50cnlQb2ludDsKKyAg
ICBBc3NlbWJsZXI6Okp1bXBMaXN0IG1fZGVzY2VuZGFudFRyZWVXYWxrZXJGYWlsdXJlQ2FzZXM7
CiAgICAgQXNzZW1ibGVyOjpMYWJlbCBtX2luZGlyZWN0QWRqYWNlbnRFbnRyeVBvaW50OwotICAg
IEFzc2VtYmxlcjo6TGFiZWwgbV9kZXNjZW5kYW50VHJlZVdhbGtlckJhY2t0cmFja2luZ1BvaW50
OwotICAgIEFzc2VtYmxlcjo6TGFiZWwgbV9pbmRpcmVjdEFkamFjZW50VHJlZVdhbGtlckJhY2t0
cmFja2luZ1BvaW50OworICAgIEFzc2VtYmxlcjo6TGFiZWwgbV9pbmRpcmVjdEFkamFjZW50VHJl
ZVdhbGtlckVudHJ5UG9pbnQ7CiAgICAgQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1fZGVzY2VuZGFu
dEJhY2t0cmFja2luZ1N0YXJ0OwotICAgIEFzc2VtYmxlcjo6SnVtcExpc3QgbV9kZXNjZW5kYW50
QmFja3RyYWNraW5nRmFpbHVyZUNhc2VzOworICAgIEFzc2VtYmxlcjo6SnVtcExpc3QgbV9kZXNj
ZW5kYW50VGFpbEZhaWx1cmVDYXNlczsKICAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVu
Y2UgbV9hZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0OwogICAgIEFzc2VtYmxlcjo6SnVtcExpc3Qg
bV9hZGphY2VudEJhY2t0cmFja2luZ0ZhaWx1cmVDYXNlczsKKyAgICBTdGFja0FsbG9jYXRvcjo6
U3RhY2tSZWZlcmVuY2UgbV9iYWNrdHJhY2tpbmdWaXNpdGVkTWF0Y2hUeXBlOworICAgIFN0YWNr
QWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZSBtX3Zpc2l0ZWRNYXRjaFR5cGU7CiAKICNpZiBDU1Nf
U0VMRUNUT1JfSklUX0RFQlVHR0lORwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBtX29yaWdpbmFs
U2VsZWN0b3I7CkBAIC0zMTEsOSArMzMxLDkgQEAgZW51bSBjbGFzcyBGcmFnbWVudHNMZXZlbCB7
CiAgICAgSW5GdW5jdGlvbmFsUHNldWRvVHlwZSA9IDEKIH07CiAKLXN0YXRpYyBGdW5jdGlvblR5
cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNl
bGVjdG9yQ29udGV4dCwgU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBG
cmFnbWVudHNMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyk7CitzdGF0aWMg
RnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNl
bGVjdG9yLCBTZWxlY3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZy
YWdtZW50cywgRnJhZ21lbnRzTGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMs
IFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoVHlwZSBzdGF0aWNWaXNpdGVkTWF0Y2hUeXBl
LCBib29sJiBuZWVkc1Zpc2l0ZWRNYXRjaFR5cGUpOwogCi1zdGF0aWMgdm9pZCBjb21wdXRlQmFj
a3RyYWNraW5nSW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21l
bnRzLCBib29sJiBuZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpOworc3RhdGljIHZvaWQg
Y29tcHV0ZUJhY2t0cmFja2luZ0luZm9ybWF0aW9uKFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxl
Y3RvckZyYWdtZW50cywgYm9vbCBuZWVkc1Zpc2l0ZWRNYXRjaFR5cGUsIGJvb2wmIG5lZWRzQWRq
YWNlbnRCYWNrdHJhY2tpbmdTdGFydCk7CiAKIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29t
cGlsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBsYXN0U2VsZWN0b3IsIEpTQzo6Vk0qIHZt
LCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYgY29kZVJlZikKIHsKQEAgLTM1NCw3ICszNzQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2hvdWxkVXNlUmVuZGVyU3R5bGVGcm9tQ2hlY2tpbmdDb250ZXh0KGNvbnN0IFNlbGVjdG9yRnJh
Z21lbgogICAgIHJldHVybiBmcmFnbWVudC5yZWxhdGlvblRvUmlnaHRGcmFnbWVudCA9PSBGcmFn
bWVudFJlbGF0aW9uOjpSaWdodG1vc3QgJiYgZnJhZ21lbnQucG9zaXRpb25JblJvb3RGcmFnbWVu
dHMgPT0gRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50czo6UmlnaHRtb3N0OwogfQogCi1z
dGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2Vs
ZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0b3JDb250
ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3Np
dGlvbkluUm9vdEZyYWdtZW50cykKK3N0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVk
b0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjdG9yRnJhZ21lbnQm
IGZyYWdtZW50LCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBGcmFnbWVudFBvc2l0
aW9uSW5Sb290RnJhZ21lbnRzIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBTZWxlY3RvckNoZWNr
ZXI6OlZpc2l0ZWRNYXRjaFR5cGUgc3RhdGljVmlzaXRlZE1hdGNoVHlwZSwgYm9vbCYgbmVlZHNW
aXNpdGVkTWF0Y2hUeXBlKQogewogICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUgdHlw
ZSA9IHNlbGVjdG9yLnBzZXVkb0NsYXNzVHlwZSgpOwogICAgIHN3aXRjaCAodHlwZSkgewpAQCAt
NDM5LDcgKzQ1OSw2IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNz
VHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NOdGhPZlR5cGU6CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NOdGhMYXN0Q2hpbGQ6CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NOdGhM
YXN0T2ZUeXBlOgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZDoKICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RyYWc6CiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NGdWxsUGFnZU1lZGlhOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzU2NvcGU6CkBAIC00NTcsMTUgKzQ3NiwyMSBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9u
VHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxl
YwogCiAgICAgLy8gT3B0aW1pemVkIHBzZXVkbyBzZWxlY3RvcnMuCiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NBbnlMaW5rOgotICAgICAgICBmcmFnbWVudC5wc2V1ZG9DbGFzc2Vz
LmFkZChDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rKTsKLSAgICAgICAgcmV0dXJuIEZ1bmN0
aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwotCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NMaW5rOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUm9vdDoK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1RhcmdldDoKICAgICAgICAgZnJhZ21l
bnQucHNldWRvQ2xhc3Nlcy5hZGQodHlwZSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKIAorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzVmlzaXRlZDoKKyAgICAgICAgLy8gRGV0ZXJtaW5lIHRoaXMgOnZpc2l0ZWQgY2Fubm90IG1h
dGNoIGFueXRoaW5nIHN0YXRpY2FsbHkuCisgICAgICAgIGlmIChzdGF0aWNWaXNpdGVkTWF0Y2hU
eXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpCisgICAgICAgICAg
ICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nOworICAgICAgICBmcmFn
bWVudC5wc2V1ZG9DbGFzc2VzLmFkZCh0eXBlKTsKKyAgICAgICAgZnJhZ21lbnQudXNlVmlzaXRl
ZE1hdGNoVHlwZSA9IHRydWU7CisgICAgICAgIG5lZWRzVmlzaXRlZE1hdGNoVHlwZSA9IHRydWU7
CisgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKKwog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQWN0aXZlOgogICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzRmlyc3RDaGlsZDoKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc0hvdmVyOgpAQCAtNTAyLDcgKzUyNyw4IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25U
eXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVj
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGlu
ZzsKIAogICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgbm90RnJhZ21lbnRzOwotICAg
ICAgICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhz
ZWxlY3Rvckxpc3QtPmZpcnN0KCksIHNlbGVjdG9yQ29udGV4dCwgbm90RnJhZ21lbnRzLCBGcmFn
bWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVu
dHMpOworICAgICAgICAgICAgYm9vbCBpZ25vcmVOZWVkc1Zpc2l0ZWRNYXRjaFR5cGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFn
bWVudHMoc2VsZWN0b3JMaXN0LT5maXJzdCgpLCBzZWxlY3RvckNvbnRleHQsIG5vdEZyYWdtZW50
cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290
RnJhZ21lbnRzLCBzdGF0aWNWaXNpdGVkTWF0Y2hUeXBlLCBpZ25vcmVOZWVkc1Zpc2l0ZWRNYXRj
aFR5cGUpOwogCiAgICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIG5vdCBwc2V1ZG8gY2xhc3Mg
ZmlsdGVyLCBDYW5ub3RNYXRjaEFueXRoaW5nIGltcGxpZXMgdGhpcyBmaWx0ZXIgYWx3YXlzIHBh
c3Nlcy4KICAgICAgICAgICAgIGlmIChmdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpDYW5u
b3RNYXRjaEFueXRoaW5nKQpAQCAtNTE1LDExICs1NDEsMTcgQEAgc3RhdGljIGlubGluZSBGdW5j
dGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3Rvciwg
U2VsZWMKICAgICAgICAgICAgIGlmIChub3RGcmFnbWVudHMuc2l6ZSgpICE9IDEpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZTsKIAotICAgICAgICAg
ICAgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgc3ViRnJhZ21lbnQgPSBub3RGcmFnbWVudHMuZmly
c3QoKTsKKyAgICAgICAgICAgIFNlbGVjdG9yRnJhZ21lbnQmIHN1YkZyYWdtZW50ID0gbm90RnJh
Z21lbnRzLmZpcnN0KCk7CiAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgd2UgZG9u
J3Qgc3VwcG9ydCB2aXNpdGVkTWF0Y2hUeXBlLgotICAgICAgICAgICAgaWYgKHN1YkZyYWdtZW50
LnBzZXVkb0NsYXNzZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluaykpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZTsKKyAgICAg
ICAgICAgIC8vIFdoZW4gOnZpc2l0ZWQgaXMgaW5zaWRlIDpub3QsIGl0IGFsd2F5cyBzdWNjZWVk
LiBEb24ndCBhcHBlbmQgaXQgdG8gbm90RmlsdGVycy4KKyAgICAgICAgICAgIGlmIChzdWJGcmFn
bWVudC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0
ZWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9y
Q2hlY2tlcjsKKworICAgICAgICAgICAgaWYgKHN0YXRpY1Zpc2l0ZWRNYXRjaFR5cGUgPT0gU2Vs
ZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkICYmIHN1YkZyYWdtZW50LnBzZXVkb0Ns
YXNzZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluaykpIHsKKyAgICAgICAg
ICAgICAgICBzdWJGcmFnbWVudC51c2VWaXNpdGVkTWF0Y2hUeXBlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBmcmFnbWVudC51c2VWaXNpdGVkTWF0Y2hUeXBlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBuZWVkc1Zpc2l0ZWRNYXRjaFR5cGUgPSB0cnVlOworICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBmcmFnbWVudC5ub3RGaWx0ZXJzLmFwcGVuZChzdWJGcmFnbWVudCk7CiAgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb25UeXBlOwpAQCAtNTMxLDcgKzU2Myw4IEBAIHN0YXRpYyBpbmxp
bmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2Vs
ZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gRnVu
Y3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgICAgICAgICBmb3IgKGNvbnN0
IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IgPSBzZWxlY3Rvci5zZWxlY3Rvckxpc3QoKS0+Zmly
c3QoKTsgcm9vdFNlbGVjdG9yOyByb290U2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQo
cm9vdFNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IGZy
YWdtZW50TGlzdDsKLSAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgc3ViRnVuY3Rpb25UeXBl
ID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBmcmFn
bWVudExpc3QsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlv
bkluUm9vdEZyYWdtZW50cyk7CisgICAgICAgICAgICAgICAgYm9vbCBzdWJOZWVkc1Zpc2l0ZWRN
YXRjaFR5cGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgc3ViRnVuY3Rp
b25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0
LCBmcmFnbWVudExpc3QsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBw
b3NpdGlvbkluUm9vdEZyYWdtZW50cywgc3RhdGljVmlzaXRlZE1hdGNoVHlwZSwgc3ViTmVlZHNW
aXNpdGVkTWF0Y2hUeXBlKTsKIAogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgZnJhZ21l
bnQgYWx3YXlzIHVubWF0Y2ggYWdhaW5zdCB0aGUgZWxlbWVudCwgZG9uJ3QgaW5zZXJ0IGl0IHRv
IGFueUZyYWdtZW50cy4KICAgICAgICAgICAgICAgICBpZiAoc3ViRnVuY3Rpb25UeXBlID09IEZ1
bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZykKQEAgLTU0NSw2ICs1NzgsMTEgQEAgc3Rh
dGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVj
dG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnRMaXN0LnNp
emUoKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5u
b3RDb21waWxlOwogCisgICAgICAgICAgICAgICAgaWYgKHN1Yk5lZWRzVmlzaXRlZE1hdGNoVHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC51c2VWaXNpdGVkTWF0Y2hUeXBlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbmVlZHNWaXNpdGVkTWF0Y2hUeXBlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBjb25zdCBTZWxlY3RvckZyYWdt
ZW50JiBzdWJGcmFnbWVudCA9IGZyYWdtZW50TGlzdC5maXJzdCgpOwogICAgICAgICAgICAgICAg
IGFueUZyYWdtZW50cy5hcHBlbmQoc3ViRnJhZ21lbnQpOwogICAgICAgICAgICAgICAgIGZ1bmN0
aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5cGUsIHN1YkZ1
bmN0aW9uVHlwZSk7CkBAIC01OTIsNiArNjMwLDcgQEAgaW5saW5lIFNlbGVjdG9yQ29kZUdlbmVy
YXRvcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWMK
ICAgICA6IG1fc3RhY2tBbGxvY2F0b3IobV9hc3NlbWJsZXIpCiAgICAgLCBtX3NlbGVjdG9yQ29u
dGV4dChzZWxlY3RvckNvbnRleHQpCiAgICAgLCBtX2Z1bmN0aW9uVHlwZShGdW5jdGlvblR5cGU6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikKKyAgICAsIG1fbmVlZHNWaXNpdGVkTWF0Y2hUeXBlKGZh
bHNlKQogICAgICwgbV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQoZmFsc2UpCiAjaWYg
Q1NTX1NFTEVDVE9SX0pJVF9ERUJVR0dJTkcKICAgICAsIG1fb3JpZ2luYWxTZWxlY3Rvcihyb290
U2VsZWN0b3IpCkBAIC02MDEsOSArNjQwLDE0IEBAIGlubGluZSBTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcihjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjCiAg
ICAgZGF0YUxvZ0YoIkNvbXBpbGluZyBcIiVzXCJcbiIsIG1fb3JpZ2luYWxTZWxlY3Rvci0+c2Vs
ZWN0b3JUZXh0KCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKIAotICAgIG1fZnVuY3Rpb25UeXBl
ID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3RvciwgbV9zZWxlY3RvckNvbnRleHQsIG1f
c2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpSb290LCBGcmFnbWVudFBvc2l0aW9u
SW5Sb290RnJhZ21lbnRzOjpSaWdodG1vc3QpOworICAgIC8vIEluIFF1ZXJ5U2VsZWN0b3IgY29u
dGV4dCwgOnZpc2l0ZWQgYWx3YXlzIGhhcyBubyBlZmZlY3QgZHVlIHRvIHNlY3VyaXR5IGlzc3Vl
cy4KKyAgICBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUgc3RhdGljVmlzaXRlZE1h
dGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZDsKKyAgICBpZiAo
c2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvcikKKyAgICAg
ICAgc3RhdGljVmlzaXRlZE1hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNo
RGlzYWJsZWQ7CisKKyAgICBtX2Z1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290
U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250ZXh0LCBtX3NlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVu
dHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50czo6UmlnaHRtb3N0
LCBzdGF0aWNWaXNpdGVkTWF0Y2hUeXBlLCBtX25lZWRzVmlzaXRlZE1hdGNoVHlwZSk7CiAgICAg
aWYgKG1fZnVuY3Rpb25UeXBlICE9IEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSAmJiBtX2Z1
bmN0aW9uVHlwZSAhPSBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCi0gICAgICAg
IGNvbXB1dGVCYWNrdHJhY2tpbmdJbmZvcm1hdGlvbihtX3NlbGVjdG9yRnJhZ21lbnRzLCBtX25l
ZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCk7CisgICAgICAgIGNvbXB1dGVCYWNrdHJhY2tp
bmdJbmZvcm1hdGlvbihtX3NlbGVjdG9yRnJhZ21lbnRzLCBtX25lZWRzVmlzaXRlZE1hdGNoVHlw
ZSwgbV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpOwogfQogCiBzdGF0aWMgYm9vbCBw
c2V1ZG9DbGFzc09ubHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUoY29uc3QgQ1NTU2VsZWN0b3Im
IHNlbGVjdG9yKQpAQCAtNjEyLDcgKzY1Niw3IEBAIHN0YXRpYyBib29sIHBzZXVkb0NsYXNzT25s
eU1hdGNoZXNMaW5rc0luUXVpcmtzTW9kZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IpCiAg
ICAgcmV0dXJuIHBzZXVkb0NsYXNzVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3Zl
ciB8fCBwc2V1ZG9DbGFzc1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQWN0aXZlOwog
fQogCi1zdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxl
Y3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBTZWxl
Y3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsIGZyYWdt
ZW50TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMgcG9zaXRpb25JblJvb3RG
cmFnbWVudHMpCitzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBD
U1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0
LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVs
IGZyYWdtZW50TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMgcG9zaXRpb25J
blJvb3RGcmFnbWVudHMsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoVHlwZSBzdGF0aWNW
aXNpdGVkTWF0Y2hUeXBlLCBib29sJiBuZWVkc1Zpc2l0ZWRNYXRjaFR5cGUpCiB7CiAgICAgU2Vs
ZWN0b3JGcmFnbWVudCBmcmFnbWVudDsKICAgICBGcmFnbWVudFJlbGF0aW9uIHJlbGF0aW9uVG9Q
cmV2aW91c0ZyYWdtZW50ID0gRnJhZ21lbnRSZWxhdGlvbjo6UmlnaHRtb3N0OwpAQCAtNjU0LDcg
KzY5OCw3IEBAIHN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENT
U1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yCiAgICAgICAgICAgICBpZiAocmVsYXRp
b25Ub1ByZXZpb3VzRnJhZ21lbnQgIT0gRnJhZ21lbnRSZWxhdGlvbjo6UmlnaHRtb3N0KQogICAg
ICAgICAgICAgICAgIHN1YlBvc2l0aW9uID0gRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50
czo6Tm90UmlnaHRtb3N0OwogCi0gICAgICAgICAgICBmdW5jdGlvblR5cGUgPSBtb3N0UmVzdHJp
Y3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBlLCBhZGRQc2V1ZG9DbGFzc1R5cGUoKnNlbGVj
dG9yLCBmcmFnbWVudCwgc2VsZWN0b3JDb250ZXh0LCBzdWJQb3NpdGlvbikpOworICAgICAgICAg
ICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlw
ZSwgYWRkUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQsIHNlbGVjdG9yQ29udGV4
dCwgc3ViUG9zaXRpb24sIHN0YXRpY1Zpc2l0ZWRNYXRjaFR5cGUsIG5lZWRzVmlzaXRlZE1hdGNo
VHlwZSkpOwogICAgICAgICAgICAgaWYgKCFwc2V1ZG9DbGFzc09ubHlNYXRjaGVzTGlua3NJblF1
aXJrc01vZGUoKnNlbGVjdG9yKSkKICAgICAgICAgICAgICAgICBmcmFnbWVudC5vbmx5TWF0Y2hl
c0xpbmtzSW5RdWlya3NNb2RlID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25UeXBl
ID09IEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSB8fCBmdW5jdGlvblR5cGUgPT0gRnVuY3Rp
b25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nKQpAQCAtNzI4LDYgKzc3Miw5IEBAIHN0YXRpYyBG
dW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2Vs
ZWN0b3IsIFNlbGVjdG9yCiAgICAgICAgICAgICBpZiAoc2VsZWN0b3JDb250ZXh0ID09IFNlbGVj
dG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvcikKICAgICAgICAgICAgICAgICByZWxhdGlvbkZ1bmN0
aW9uVHlwZSA9IEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgICAgICAg
ICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlw
ZSwgcmVsYXRpb25GdW5jdGlvblR5cGUpOworCisgICAgICAgICAgICAvLyBXaGVuIHRoZSByZWxh
dGlvbiBpcyBhZGphY2VudCwgZGlzYWJsZSA6dmlzaXRlZCBtYXRjaC4KKyAgICAgICAgICAgIHN0
YXRpY1Zpc2l0ZWRNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2Fi
bGVkOwogICAgICAgICB9CiAKICAgICAgICAgZnJhZ21lbnQucmVsYXRpb25Ub0xlZnRGcmFnbWVu
dCA9IGZyYWdtZW50UmVsYXRpb25Gb3JTZWxlY3RvclJlbGF0aW9uKHJlbGF0aW9uKTsKQEAgLTEx
MzQsNyArMTE4MSwxNyBAQCBzdGF0aWMgYm9vbCByZXF1aXJlc0Rlc2NlbmRhbnRUYWlsKGNvbnN0
IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogICAgIHJldHVybiBmcmFnbWVudC5tYXRjaGlu
Z1RhZ05hbWVCYWNrdHJhY2tpbmdBY3Rpb24gPT0gQmFja3RyYWNraW5nQWN0aW9uOjpKdW1wVG9E
ZXNjZW5kYW50VGFpbCB8fCBmcmFnbWVudC5tYXRjaGluZ1Bvc3RUYWdOYW1lQmFja3RyYWNraW5n
QWN0aW9uID09IEJhY2t0cmFja2luZ0FjdGlvbjo6SnVtcFRvRGVzY2VuZGFudFRhaWwgfHwgZnJh
Z21lbnQudHJhdmVyc2FsQmFja3RyYWNraW5nQWN0aW9uID09IEJhY2t0cmFja2luZ0FjdGlvbjo6
SnVtcFRvRGVzY2VuZGFudFRhaWw7CiB9CiAKLXZvaWQgY29tcHV0ZUJhY2t0cmFja2luZ0luZm9y
bWF0aW9uKFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgYm9vbCYgbmVl
ZHNBZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KQorc3RhdGljIGJvb2wgY2FuVXNlQmFja3RyYWNr
aW5nV2l0aG91dFRhaWwoQmFja3RyYWNraW5nQWN0aW9uIGJhY2t0cmFja2luZ0FjdGlvbikKK3sK
KyAgICByZXR1cm4gYmFja3RyYWNraW5nQWN0aW9uID09IEJhY2t0cmFja2luZ0FjdGlvbjo6SnVt
cFRvRGVzY2VuZGFudEVudHJ5UG9pbnQgfHwgYmFja3RyYWNraW5nQWN0aW9uID09IEJhY2t0cmFj
a2luZ0FjdGlvbjo6SnVtcFRvRGVzY2VuZGFudFRyZWVXYWxrZXJFbnRyeVBvaW50OworfQorCitz
dGF0aWMgYm9vbCByZXF1aXJlc1Jlc3RvcmluZ1Zpc2l0ZWRNYXRjaFR5cGVUYWlsKGNvbnN0IFNl
bGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQoreworICAgIHJldHVybiBjYW5Vc2VCYWNrdHJhY2tp
bmdXaXRob3V0VGFpbChmcmFnbWVudC5tYXRjaGluZ1RhZ05hbWVCYWNrdHJhY2tpbmdBY3Rpb24p
IHx8IGNhblVzZUJhY2t0cmFja2luZ1dpdGhvdXRUYWlsKGZyYWdtZW50Lm1hdGNoaW5nUG9zdFRh
Z05hbWVCYWNrdHJhY2tpbmdBY3Rpb24pIHx8IGNhblVzZUJhY2t0cmFja2luZ1dpdGhvdXRUYWls
KGZyYWdtZW50LnRyYXZlcnNhbEJhY2t0cmFja2luZ0FjdGlvbik7Cit9CisKK3ZvaWQgY29tcHV0
ZUJhY2t0cmFja2luZ0luZm9ybWF0aW9uKFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZy
YWdtZW50cywgYm9vbCBuZWVkc1Zpc2l0ZWRNYXRjaFR5cGUsIGJvb2wmIG5lZWRzQWRqYWNlbnRC
YWNrdHJhY2tpbmdTdGFydCkKIHsKICAgICBib29sIGhhc0Rlc2NlbmRhbnRSZWxhdGlvbk9uVGhl
UmlnaHQgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBhbmNlc3RvclBvc2l0aW9uU2luY2VEZXNjZW5k
YW50UmVsYXRpb24gPSAwOwpAQCAtMTE0Myw2ICsxMjAwLDcgQEAgdm9pZCBjb21wdXRlQmFja3Ry
YWNraW5nSW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRz
LCBib28KIAogICAgIGJvb2wgbmVlZHNBZGphY2VudFRhaWwgPSBmYWxzZTsKICAgICBib29sIG5l
ZWRzRGVzY2VuZGFudFRhaWwgPSBmYWxzZTsKKyAgICBib29sIG5lZWRzUmVzdG9yaW5nVmlzaXRl
ZE1hdGNoVHlwZVRhaWwgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBzYXZlRGVzY2VuZGFudEJhY2t0
cmFja2luZ1N0YXJ0RnJhZ21lbnRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKTsKICAgICB1bnNpZ25lZCBzYXZlSW5kaXJlY3RBZGphY2VudEJhY2t0cmFja2luZ1N0
YXJ0RnJhZ21lbnRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsK
IApAQCAtMTE1MSw2ICsxMjA5LDkgQEAgdm9pZCBjb21wdXRlQmFja3RyYWNraW5nSW5mb3JtYXRp
b24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBib28KICAgICBjb25z
dCBTZWxlY3RvckZyYWdtZW50KiBwcmV2aW91c0NoaWxkRnJhZ21lbnRJbkNoaWxkQ2hhaW4gPSBu
dWxscHRyOwogICAgIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQqIHByZXZpb3VzRGlyZWN0QWRqYWNl
bnRGcmFnbWVudEluRGlyZWN0QWRqYWNlbnRDaGFpbiA9IG51bGxwdHI7CiAKKyAgICB1bnNpZ25l
ZCBuZWVkc1Zpc2l0ZWRNYXRjaFR5cGVMYXJnZXN0SW5kZXggPSAwOworICAgIGNvbnN0IFNlbGVj
dG9yRnJhZ21lbnQqIGRlc2NlbmRhbnRFbnRyeVBvaW50RnJhZ21lbnQgPSBudWxscHRyOworCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlbGVjdG9yRnJhZ21lbnRzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50ID0gc2VsZWN0b3JGcmFnbWVu
dHNbaV07CiAKQEAgLTExNjgsMTAgKzEyMjksMTkgQEAgdm9pZCBjb21wdXRlQmFja3RyYWNraW5n
SW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBib28K
IAogICAgICAgICBuZWVkc0FkamFjZW50VGFpbCB8PSByZXF1aXJlc0FkamFjZW50VGFpbChmcmFn
bWVudCk7CiAgICAgICAgIG5lZWRzRGVzY2VuZGFudFRhaWwgfD0gcmVxdWlyZXNEZXNjZW5kYW50
VGFpbChmcmFnbWVudCk7CisgICAgICAgIGlmIChuZWVkc1Zpc2l0ZWRNYXRjaFR5cGUgJiYgZGVz
Y2VuZGFudEVudHJ5UG9pbnRGcmFnbWVudCkKKyAgICAgICAgICAgIG5lZWRzUmVzdG9yaW5nVmlz
aXRlZE1hdGNoVHlwZVRhaWwgfD0gcmVxdWlyZXNSZXN0b3JpbmdWaXNpdGVkTWF0Y2hUeXBlVGFp
bChmcmFnbWVudCk7CiAKICAgICAgICAgLy8gQWRkIGNvZGUgZ2VuZXJhdGlvbiBmbGFncy4KLSAg
ICAgICAgaWYgKGZyYWdtZW50LnJlbGF0aW9uVG9MZWZ0RnJhZ21lbnQgIT0gRnJhZ21lbnRSZWxh
dGlvbjo6RGVzY2VuZGFudCAmJiBmcmFnbWVudC5yZWxhdGlvblRvUmlnaHRGcmFnbWVudCA9PSBG
cmFnbWVudFJlbGF0aW9uOjpEZXNjZW5kYW50KQorICAgICAgICBpZiAoZnJhZ21lbnQudXNlVmlz
aXRlZE1hdGNoVHlwZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbmVlZHNWaXNp
dGVkTWF0Y2hUeXBlTGFyZ2VzdEluZGV4OyBqIDwgaTsgKytqKQorICAgICAgICAgICAgICAgIHNl
bGVjdG9yRnJhZ21lbnRzW2pdLmJhY2t0cmFja2luZ0ZsYWdzIHw9IEJhY2t0cmFja2luZ0ZsYWc6
Ok5lZWRzVHJhY2tpbmdWaXNpdGVkTWF0Y2hUeXBlOworICAgICAgICAgICAgbmVlZHNWaXNpdGVk
TWF0Y2hUeXBlTGFyZ2VzdEluZGV4ID0gaTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnJhZ21l
bnQucmVsYXRpb25Ub0xlZnRGcmFnbWVudCAhPSBGcmFnbWVudFJlbGF0aW9uOjpEZXNjZW5kYW50
ICYmIGZyYWdtZW50LnJlbGF0aW9uVG9SaWdodEZyYWdtZW50ID09IEZyYWdtZW50UmVsYXRpb246
OkRlc2NlbmRhbnQpIHsKICAgICAgICAgICAgIGZyYWdtZW50LmJhY2t0cmFja2luZ0ZsYWdzIHw9
IEJhY2t0cmFja2luZ0ZsYWc6OkRlc2NlbmRhbnRFbnRyeVBvaW50OworICAgICAgICAgICAgZGVz
Y2VuZGFudEVudHJ5UG9pbnRGcmFnbWVudCA9ICZmcmFnbWVudDsKKyAgICAgICAgfQogICAgICAg
ICBpZiAoZnJhZ21lbnQucmVsYXRpb25Ub0xlZnRGcmFnbWVudCA9PSBGcmFnbWVudFJlbGF0aW9u
OjpEaXJlY3RBZGphY2VudCAmJiBmcmFnbWVudC5yZWxhdGlvblRvUmlnaHRGcmFnbWVudCA9PSBG
cmFnbWVudFJlbGF0aW9uOjpJbmRpcmVjdEFkamFjZW50KQogICAgICAgICAgICAgZnJhZ21lbnQu
YmFja3RyYWNraW5nRmxhZ3MgfD0gQmFja3RyYWNraW5nRmxhZzo6SW5kaXJlY3RBZGphY2VudEVu
dHJ5UG9pbnQ7CiAgICAgICAgIGlmIChmcmFnbWVudC5yZWxhdGlvblRvTGVmdEZyYWdtZW50ICE9
IEZyYWdtZW50UmVsYXRpb246OkRlc2NlbmRhbnQgJiYgZnJhZ21lbnQucmVsYXRpb25Ub1JpZ2h0
RnJhZ21lbnQgPT0gRnJhZ21lbnRSZWxhdGlvbjo6Q2hpbGQgJiYgaXNGaXJzdEFuY2VzdG9yKGFu
Y2VzdG9yUG9zaXRpb25TaW5jZURlc2NlbmRhbnRSZWxhdGlvbikpIHsKQEAgLTEyMDIsNyArMTI3
MiwxMyBAQCB2b2lkIGNvbXB1dGVCYWNrdHJhY2tpbmdJbmZvcm1hdGlvbihTZWxlY3RvckZyYWdt
ZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIGJvbwogICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IHNhdmVEZXNjZW5kYW50QmFja3RyYWNraW5nU3RhcnRGcmFnbWVudEluZGV4OyBq
IDw9IGk7ICsraikKICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JGcmFnbWVudHNbal0uYmFj
a3RyYWNraW5nRmxhZ3MgfD0gQmFja3RyYWNraW5nRmxhZzo6SW5DaGFpbldpdGhEZXNjZW5kYW50
VGFpbDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuZWVkc1Jlc3RvcmluZ1Zpc2l0
ZWRNYXRjaFR5cGVUYWlsKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlc2NlbmRhbnRFbnRyeVBv
aW50RnJhZ21lbnQtPmJhY2t0cmFja2luZ0ZsYWdzICYgQmFja3RyYWNraW5nRmxhZzo6TmVlZHNU
cmFja2luZ1Zpc2l0ZWRNYXRjaFR5cGUpCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LmJh
Y2t0cmFja2luZ0ZsYWdzIHw9IEJhY2t0cmFja2luZ0ZsYWc6OlJlc3RvcmluZ1Zpc2l0ZWRNYXRj
aFR5cGVUYWlsOworICAgICAgICAgICAgICAgIG5lZWRzUmVzdG9yaW5nVmlzaXRlZE1hdGNoVHlw
ZVRhaWwgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNhdmVEZXNjZW5kYW50
QmFja3RyYWNraW5nU3RhcnRGcmFnbWVudEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpOworICAgICAgICAgICAgZGVzY2VuZGFudEVudHJ5UG9pbnRGcmFnbWVudCA9
IG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xMjc3LDE5ICsxMzUzLDMyIEBAIHZv
aWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcigpCiAKICAg
ICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXIoZWxlbWVudEFkZHJlc3NSZWdp
c3Rlcik7CiAKLSAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2UgdGVtcG9yYXJ5U3Rh
Y2tCYXNlOworICAgIC8vIFJlbWVtYmVyIHRoZSBzdGFjayBiYXNlIG9mIHRoZSB0ZW1wb3Jhcnkg
dmFyaWFibGVzLgorICAgIFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZSB0ZW1wb3JhcnlT
dGFja0Jhc2UgPSBtX3N0YWNrQWxsb2NhdG9yLnN0YWNrVG9wKCk7CiAKICAgICBpZiAobV9mdW5j
dGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250
ZXh0KQogICAgICAgICBtX2NoZWNraW5nQ29udGV4dFN0YWNrUmVmZXJlbmNlID0gbV9zdGFja0Fs
bG9jYXRvci5wdXNoKGNoZWNraW5nQ29udGV4dFJlZ2lzdGVyKTsKIAotICAgIGlmIChtX25lZWRz
QWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCkKKyAgICAvLyBBbGxvY2F0ZSB1bmluaXRpYWxpemVk
IHN0YWNrIHJlZmVyZW5jZXMKKyAgICBpZiAobV9uZWVkc1Zpc2l0ZWRNYXRjaFR5cGUpIHsKKyAg
ICAgICAgaWYgKG1fbmVlZHNBZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KSB7CisgICAgICAgICAg
ICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2VWZWN0b3IgcmVmZXJlbmNlcyA9IG1fc3Rh
Y2tBbGxvY2F0b3IuYWxsb2NhdGVVbmluaXRpYWxpemVkKDMpOworICAgICAgICAgICAgbV9hZGph
Y2VudEJhY2t0cmFja2luZ1N0YXJ0ID0gcmVmZXJlbmNlc1swXTsKKyAgICAgICAgICAgIG1fYmFj
a3RyYWNraW5nVmlzaXRlZE1hdGNoVHlwZSA9IHJlZmVyZW5jZXNbMV07CisgICAgICAgICAgICBt
X3Zpc2l0ZWRNYXRjaFR5cGUgPSByZWZlcmVuY2VzWzJdOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgU3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlVmVjdG9yIHJlZmVyZW5jZXMg
PSBtX3N0YWNrQWxsb2NhdG9yLmFsbG9jYXRlVW5pbml0aWFsaXplZCgyKTsKKyAgICAgICAgICAg
IG1fYmFja3RyYWNraW5nVmlzaXRlZE1hdGNoVHlwZSA9IHJlZmVyZW5jZXNbMF07CisgICAgICAg
ICAgICBtX3Zpc2l0ZWRNYXRjaFR5cGUgPSByZWZlcmVuY2VzWzFdOworICAgICAgICB9CisgICAg
ICAgIHVuc2lnbmVkIG9mZnNldFRvVmlzaXRlZE1hdGNoVHlwZSA9IG1fc3RhY2tBbGxvY2F0b3Iu
b2Zmc2V0VG9TdGFja1JlZmVyZW5jZShtX3Zpc2l0ZWRNYXRjaFR5cGUpOworICAgICAgICBtX2Fz
c2VtYmxlci5zdG9yZTMyKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBBc3NlbWJsZXI6OkFk
ZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9WaXNpdGVkTWF0
Y2hUeXBlKSk7CisgICAgfSBlbHNlIGlmIChtX25lZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFy
dCkKICAgICAgICAgbV9hZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0ID0gbV9zdGFja0FsbG9jYXRv
ci5hbGxvY2F0ZVVuaW5pdGlhbGl6ZWQoKTsKIAotICAgIC8vIFJlbWVtYmVyIHRoZSBzdGFjayBi
YXNlIG9mIHRoZSB0ZW1wb3JhcnkgdmFyaWFibGVzLgotICAgIGlmIChtX2NoZWNraW5nQ29udGV4
dFN0YWNrUmVmZXJlbmNlLmlzVmFsaWQoKSkKLSAgICAgICAgdGVtcG9yYXJ5U3RhY2tCYXNlID0g
bV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZTsKLSAgICBlbHNlIGlmIChtX25lZWRzQWRq
YWNlbnRCYWNrdHJhY2tpbmdTdGFydCkKLSAgICAgICAgdGVtcG9yYXJ5U3RhY2tCYXNlID0gbV9h
ZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0OworICAgIC8vIEludmFsaWRhdGUgdGVtcG9yYXJ5U3Rh
Y2tCYXNlIGlmIHRoZXJlJ3Mgbm8gdGVtcG9yYXJ5IHZhcmlhYmxlcy4KKyAgICBpZiAodGVtcG9y
YXJ5U3RhY2tCYXNlID09IG1fc3RhY2tBbGxvY2F0b3Iuc3RhY2tUb3AoKSkKKyAgICAgICAgdGVt
cG9yYXJ5U3RhY2tCYXNlID0gU3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlKCk7CiAKICAg
ICBBc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKIApAQCAtMTI5Nyw3ICsxMzg2LDcg
QEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyKCkK
ICAgICAgICAgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQgPSBtX3NlbGVjdG9yRnJh
Z21lbnRzW2ldOwogICAgICAgICBzd2l0Y2ggKGZyYWdtZW50LnJlbGF0aW9uVG9SaWdodEZyYWdt
ZW50KSB7CiAgICAgICAgIGNhc2UgRnJhZ21lbnRSZWxhdGlvbjo6UmlnaHRtb3N0OgotICAgICAg
ICAgICAgZ2VuZXJhdGVFbGVtZW50TWF0Y2hpbmcoZmFpbHVyZUNhc2VzLCBmYWlsdXJlQ2FzZXMs
IGZyYWdtZW50KTsKKyAgICAgICAgICAgIGdlbmVyYXRlUmlnaHRtb3N0VHJlZVdhbGtlcihmYWls
dXJlQ2FzZXMsIGZyYWdtZW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZy
YWdtZW50UmVsYXRpb246OkRlc2NlbmRhbnQ6CiAgICAgICAgICAgICBnZW5lcmF0ZUFuY2VzdG9y
VHJlZVdhbGtlcihmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKQEAgLTEzMTIsNyArMTQwMSw3IEBA
IHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcigpCiAg
ICAgICAgICAgICBnZW5lcmF0ZUluZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyKGZhaWx1cmVDYXNl
cywgZnJhZ21lbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZ2Vu
ZXJhdGVCYWNrdHJhY2tpbmdUYWlsc0lmTmVlZGVkKGZhaWx1cmVDYXNlcywgZnJhZ21lbnQpOwor
ICAgICAgICBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQoZnJhZ21lbnQpOwogICAg
IH0KIAogICAgIGlmIChtX2Z1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OlNlbGVjdG9yQ2hl
Y2tlcldpdGhDaGVja2luZ0NvbnRleHQpIHsKQEAgLTEzNzIsNiArMTQ2MSwxMyBAQCBzdGF0aWMg
aW5saW5lIEFzc2VtYmxlcjo6SnVtcCB0ZXN0SXNFbGVtZW50RmxhZ09uTm9kZShBc3NlbWJsZXI6
OlJlc3VsdENvbmRpdGlvbgogICAgIHJldHVybiBhc3NlbWJsZXIuYnJhbmNoVGVzdDMyKGNvbmRp
dGlvbiwgQXNzZW1ibGVyOjpBZGRyZXNzKG5vZGVBZGRyZXNzLCBOb2RlOjpub2RlRmxhZ3NNZW1v
cnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJc0VsZW1lbnQo
KSkpOwogfQogCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVSaWdodG1vc3RU
cmVlV2Fsa2VyKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0
b3JGcmFnbWVudCYgZnJhZ21lbnQpCit7CisgICAgZ2VuZXJhdGVFbGVtZW50TWF0Y2hpbmcoZmFp
bHVyZUNhc2VzLCBmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKKyAgICBpZiAoZnJhZ21lbnQuYmFj
a3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpOZWVkc1RyYWNraW5nVmlzaXRlZE1h
dGNoVHlwZSkKKyAgICAgICAgdXBkYXRlVmlzaXRlZE1hdGNoVHlwZSgpOworfQorCiB2b2lkIFNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVXYWxrVG9QYXJlbnROb2RlKEFzc2VtYmxlcjo6
UmVnaXN0ZXJJRCB0YXJnZXRSZWdpc3RlcikKIHsKICAgICBtX2Fzc2VtYmxlci5sb2FkUHRyKEFz
c2VtYmxlcjo6QWRkcmVzcyhlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBOb2RlOjpwYXJlbnROb2Rl
TWVtb3J5T2Zmc2V0KCkpLCB0YXJnZXRSZWdpc3Rlcik7CkBAIC0xNDAzLDYgKzE0OTksOCBAQCB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVQYXJlbnRFbGVtZW50VHJlZVdhbGtl
cihBc3NlbWJsZXI6Okp1bXBMaXN0JgogICAgICAgICBtX2Rlc2NlbmRhbnRCYWNrdHJhY2tpbmdT
dGFydCA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVSZWdpc3RlcigpOwogICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIG1fZGVzY2VuZGFudEJhY2t0
cmFja2luZ1N0YXJ0KTsKICAgICB9CisgICAgaWYgKGZyYWdtZW50LmJhY2t0cmFja2luZ0ZsYWdz
ICYgQmFja3RyYWNraW5nRmxhZzo6TmVlZHNUcmFja2luZ1Zpc2l0ZWRNYXRjaFR5cGUpCisgICAg
ICAgIHVwZGF0ZVZpc2l0ZWRNYXRjaFR5cGUoKTsKIH0KIAogdm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlQW5jZXN0b3JUcmVlV2Fsa2VyKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZh
aWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCkBAIC0xNDExLDcg
KzE1MDksNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVBbmNlc3RvclRy
ZWVXYWxrZXIoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbAogICAgIEFzc2VtYmxlcjo6TGFiZWwg
bG9vcFN0YXJ0KG1fYXNzZW1ibGVyLmxhYmVsKCkpOwogCiAgICAgaWYgKGZyYWdtZW50LmJhY2t0
cmFja2luZ0ZsYWdzICYgQmFja3RyYWNraW5nRmxhZzo6RGVzY2VuZGFudEVudHJ5UG9pbnQpCi0g
ICAgICAgIG1fZGVzY2VuZGFudFRyZWVXYWxrZXJCYWNrdHJhY2tpbmdQb2ludCA9IG1fYXNzZW1i
bGVyLmxhYmVsKCk7CisgICAgICAgIG1fZGVzY2VuZGFudFRyZWVXYWxrZXJFbnRyeVBvaW50ID0g
bV9hc3NlbWJsZXIubGFiZWwoKTsKIAogICAgIGdlbmVyYXRlV2Fsa1RvUGFyZW50RWxlbWVudChm
YWlsdXJlQ2FzZXMsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOwogCkBAIC0xNDIxLDYgKzE1MTks
MTIgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQW5jZXN0b3JUcmVlV2Fs
a2VyKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWwKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IG1h
dGNoaW5nRmFpbHVyZUNhc2VzOwogICAgIGdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKG1hdGNoaW5n
RmFpbHVyZUNhc2VzLCBtYXRjaGluZ0ZhaWx1cmVDYXNlcywgZnJhZ21lbnQpOwogICAgIG1hdGNo
aW5nRmFpbHVyZUNhc2VzLmxpbmtUbyhsb29wU3RhcnQsICZtX2Fzc2VtYmxlcik7CisKKyAgICBp
ZiAoZnJhZ21lbnQuYmFja3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpOZWVkc1Ry
YWNraW5nVmlzaXRlZE1hdGNoVHlwZSkgeworICAgICAgICAvLyBTYXZlIGN1cnJlbnQgdmlzaXRl
ZE1hdGNoVHlwZSB0byBiYWNrdHJhY2tpbmdWaXNpdGVkTWF0Y2hUeXBlLgorICAgICAgICBnZW5l
cmF0ZVNhdmVWaXNpdGVkTWF0Y2hUeXBlKCk7CisgICAgICAgIHVwZGF0ZVZpc2l0ZWRNYXRjaFR5
cGUoKTsKKyAgICB9CiB9CiAKIGlubGluZSB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVXYWxrVG9OZXh0QWRqYWNlbnRFbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1
cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIHdvcmtSZWdpc3RlcikKQEAgLTE0OTQsNyAr
MTU5OCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUluZGlyZWN0QWRq
YWNlbnRUcmVlV2Fsa2VyKEFzc2VtYmxlcjo6SnVtcExpCiAgICAgQXNzZW1ibGVyOjpMYWJlbCBs
b29wU3RhcnQobV9hc3NlbWJsZXIubGFiZWwoKSk7CiAKICAgICBpZiAoZnJhZ21lbnQuYmFja3Ry
YWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpJbmRpcmVjdEFkamFjZW50RW50cnlQb2lu
dCkKLSAgICAgICAgbV9pbmRpcmVjdEFkamFjZW50VHJlZVdhbGtlckJhY2t0cmFja2luZ1BvaW50
ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKKyAgICAgICAgbV9pbmRpcmVjdEFkamFjZW50VHJlZVdh
bGtlckVudHJ5UG9pbnQgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwogCiAgICAgZ2VuZXJhdGVXYWxr
VG9QcmV2aW91c0FkamFjZW50KGZhaWx1cmVDYXNlcywgZnJhZ21lbnQpOwogCkBAIC0xNTgyLDYg
KzE2ODYsMjAgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmxvYWRDaGVja2luZ0NvbnRl
eHQoQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ28KICAgICByZXR1cm4gYnJhbmNoT25S
ZXNvbHZpbmdNb2RlKEFzc2VtYmxlcjo6Tm90RXF1YWwsIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6
UmVzb2x2aW5nU3R5bGUsIGNoZWNraW5nQ29udGV4dCk7CiB9CiAKK0Fzc2VtYmxlcjo6SnVtcCBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6Omp1bXBJZlZpc2l0ZWRNYXRjaFR5cGVJc0Rpc2FibGVkKCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX25lZWRzVmlzaXRlZE1hdGNoVHlwZSk7CisgICAgdW5z
aWduZWQgb2Zmc2V0VG9WaXNpdGVkTWF0Y2hUeXBlID0gbV9zdGFja0FsbG9jYXRvci5vZmZzZXRU
b1N0YWNrUmVmZXJlbmNlKG1fdmlzaXRlZE1hdGNoVHlwZSk7CisgICAgcmV0dXJuIG1fYXNzZW1i
bGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5vblplcm8sIEFzc2VtYmxlcjo6QWRkcmVzcyhB
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBvZmZzZXRUb1Zpc2l0ZWRNYXRjaFR5cGUp
LCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOb2RlOjpmbGFnSXNMaW5rKCkpKTsKK30KKworQXNz
ZW1ibGVyOjpKdW1wIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6anVtcElmVmlzaXRlZE1hdGNoVHlw
ZUlzRW5hYmxlZCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9uZWVkc1Zpc2l0ZWRNYXRjaFR5
cGUpOworICAgIHVuc2lnbmVkIG9mZnNldFRvVmlzaXRlZE1hdGNoVHlwZSA9IG1fc3RhY2tBbGxv
Y2F0b3Iub2Zmc2V0VG9TdGFja1JlZmVyZW5jZShtX3Zpc2l0ZWRNYXRjaFR5cGUpOworICAgIHJl
dHVybiBtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpaZXJvLCBBc3NlbWJsZXI6
OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9WaXNpdGVk
TWF0Y2hUeXBlKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTm9kZTo6ZmxhZ0lzTGluaygpKSk7
Cit9CisKIHN0YXRpYyB2b2lkIGdldERvY3VtZW50KEFzc2VtYmxlciYgYXNzZW1ibGVyLCBBc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudCwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIG91dHB1dCkK
IHsKICAgICBhc3NlbWJsZXIubG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3MoZWxlbWVudCwgTm9k
ZTo6dHJlZVNjb3BlTWVtb3J5T2Zmc2V0KCkpLCBvdXRwdXQpOwpAQCAtMTczMiw2ICsxODUwLDM4
IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjptb2R1bG9Jc1plcm8oQXNzZW1ibGVyOjpK
dW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtb2R1
bG8oQXNzZW1ibGVyOjpOb25aZXJvLCBpbnB1dERpdmlkZW5kLCBkaXZpc29yKSk7CiB9CiAKK3Zv
aWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNhdmVWaXNpdGVkTWF0Y2hUeXBlKCkK
K3sKKyAgICBMb2NhbFJlZ2lzdGVyIHNjcmF0Y2hSZWdpc3RlcihtX3JlZ2lzdGVyQWxsb2NhdG9y
KTsKKyAgICB1bnNpZ25lZCBvZmZzZXRUb1Zpc2l0ZWRNYXRjaFR5cGUgPSBtX3N0YWNrQWxsb2Nh
dG9yLm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV92aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICB1bnNp
Z25lZCBvZmZzZXRUb0JhY2t0cmFja2luZ1Zpc2l0ZWRNYXRjaFR5cGUgPSBtX3N0YWNrQWxsb2Nh
dG9yLm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV9iYWNrdHJhY2tpbmdWaXNpdGVkTWF0Y2hUeXBl
KTsKKyAgICBtX2Fzc2VtYmxlci5sb2FkMzIoQXNzZW1ibGVyOjpBZGRyZXNzKEFzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRvVmlzaXRlZE1hdGNoVHlwZSksIHNjcmF0Y2hS
ZWdpc3Rlcik7CisgICAgbV9hc3NlbWJsZXIuc3RvcmUzMihzY3JhdGNoUmVnaXN0ZXIsIEFzc2Vt
Ymxlcjo6QWRkcmVzcyhBc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBvZmZzZXRUb0Jh
Y2t0cmFja2luZ1Zpc2l0ZWRNYXRjaFR5cGUpKTsKK30KKwordm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlUmVzdG9yZVZpc2l0ZWRNYXRjaFR5cGUoKQoreworICAgIExvY2FsUmVn
aXN0ZXIgc2NyYXRjaFJlZ2lzdGVyKG1fcmVnaXN0ZXJBbGxvY2F0b3IpOworICAgIHVuc2lnbmVk
IG9mZnNldFRvVmlzaXRlZE1hdGNoVHlwZSA9IG1fc3RhY2tBbGxvY2F0b3Iub2Zmc2V0VG9TdGFj
a1JlZmVyZW5jZShtX3Zpc2l0ZWRNYXRjaFR5cGUpOworICAgIHVuc2lnbmVkIG9mZnNldFRvQmFj
a3RyYWNraW5nVmlzaXRlZE1hdGNoVHlwZSA9IG1fc3RhY2tBbGxvY2F0b3Iub2Zmc2V0VG9TdGFj
a1JlZmVyZW5jZShtX2JhY2t0cmFja2luZ1Zpc2l0ZWRNYXRjaFR5cGUpOworICAgIG1fYXNzZW1i
bGVyLmxvYWQzMihBc3NlbWJsZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlciwgb2Zmc2V0VG9CYWNrdHJhY2tpbmdWaXNpdGVkTWF0Y2hUeXBlKSwgc2NyYXRjaFJlZ2lz
dGVyKTsKKyAgICBtX2Fzc2VtYmxlci5zdG9yZTMyKHNjcmF0Y2hSZWdpc3RlciwgQXNzZW1ibGVy
OjpBZGRyZXNzKEFzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRvVmlzaXRl
ZE1hdGNoVHlwZSkpOworfQorCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6dXBkYXRlVmlz
aXRlZE1hdGNoVHlwZSgpCit7CisgICAgdW5zaWduZWQgb2Zmc2V0VG9WaXNpdGVkTWF0Y2hUeXBl
ID0gbV9zdGFja0FsbG9jYXRvci5vZmZzZXRUb1N0YWNrUmVmZXJlbmNlKG1fdmlzaXRlZE1hdGNo
VHlwZSk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBMb2NhbFJlZ2lzdGVyIGZsYWdSZWdpc3Rlciht
X3JlZ2lzdGVyQWxsb2NhdG9yKTsKKyAgICBtX2Fzc2VtYmxlci5sb2FkMzIoQXNzZW1ibGVyOjpB
ZGRyZXNzKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIE5vZGU6Om5vZGVGbGFnc01lbW9yeU9mZnNl
dCgpKSwgZmxhZ1JlZ2lzdGVyKTsKKyAgICBtX2Fzc2VtYmxlci5vcjMyKGZsYWdSZWdpc3Rlciwg
QXNzZW1ibGVyOjpBZGRyZXNzKEFzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNl
dFRvVmlzaXRlZE1hdGNoVHlwZSkpOworI2Vsc2UKKyAgICBBc3NlbWJsZXI6Okp1bXAgaXNOb3RM
aW5rID0gbV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6WmVybywgQXNzZW1ibGVy
OjpBZGRyZXNzKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIE5vZGU6Om5vZGVGbGFnc01lbW9yeU9m
ZnNldCgpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTm9kZTo6ZmxhZ0lzTGluaygpKSk7Cisg
ICAgbV9hc3NlbWJsZXIuc3RvcmUzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOb2RlOjpmbGFn
SXNMaW5rKCkpLCBBc3NlbWJsZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlciwgb2Zmc2V0VG9WaXNpdGVkTWF0Y2hUeXBlKSk7CisgICAgaXNOb3RMaW5rLmxpbmsoJm1f
YXNzZW1ibGVyKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCBzZXROb2RlRmxhZyhBc3NlbWJs
ZXImIGFzc2VtYmxlciwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnRBZGRyZXNzLCBpbnQz
Ml90IGZsYWcpCiB7CiAgICAgYXNzZW1ibGVyLm9yMzIoQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
ZmxhZyksIEFzc2VtYmxlcjo6QWRkcmVzcyhlbGVtZW50QWRkcmVzcywgTm9kZTo6bm9kZUZsYWdz
TWVtb3J5T2Zmc2V0KCkpKTsKQEAgLTE3OTcsMTkgKzE5NDcsMTkgQEAgdm9pZCBTZWxlY3RvckNv
ZGVHZW5lcmF0b3I6OmxpbmtGYWlsdXJlcyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBnbG9iYWxGYWls
dXJlQ2FzZXMKICAgICAgICAgZ2xvYmFsRmFpbHVyZUNhc2VzLmFwcGVuZChsb2NhbEZhaWx1cmVD
YXNlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQmFja3RyYWNraW5nQWN0aW9uOjpKdW1w
VG9EZXNjZW5kYW50RW50cnlQb2ludDoKLSAgICAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlua1Rv
KG1fZGVzY2VuZGFudEVudHJ5UG9pbnQsICZtX2Fzc2VtYmxlcik7CisgICAgICAgIG1fZGVzY2Vu
ZGFudEZhaWx1cmVDYXNlcy5hcHBlbmQobG9jYWxGYWlsdXJlQ2FzZXMpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEJhY2t0cmFja2luZ0FjdGlvbjo6SnVtcFRvRGVzY2VuZGFudFRyZWVXYWxr
ZXJFbnRyeVBvaW50OgotICAgICAgICBsb2NhbEZhaWx1cmVDYXNlcy5saW5rVG8obV9kZXNjZW5k
YW50VHJlZVdhbGtlckJhY2t0cmFja2luZ1BvaW50LCAmbV9hc3NlbWJsZXIpOworICAgICAgICBt
X2Rlc2NlbmRhbnRUcmVlV2Fsa2VyRmFpbHVyZUNhc2VzLmFwcGVuZChsb2NhbEZhaWx1cmVDYXNl
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQmFja3RyYWNraW5nQWN0aW9uOjpKdW1wVG9E
ZXNjZW5kYW50VGFpbDoKLSAgICAgICAgbV9kZXNjZW5kYW50QmFja3RyYWNraW5nRmFpbHVyZUNh
c2VzLmFwcGVuZChsb2NhbEZhaWx1cmVDYXNlcyk7CisgICAgICAgIG1fZGVzY2VuZGFudFRhaWxG
YWlsdXJlQ2FzZXMuYXBwZW5kKGxvY2FsRmFpbHVyZUNhc2VzKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBCYWNrdHJhY2tpbmdBY3Rpb246Okp1bXBUb0luZGlyZWN0QWRqYWNlbnRFbnRyeVBv
aW50OgogICAgICAgICBsb2NhbEZhaWx1cmVDYXNlcy5saW5rVG8obV9pbmRpcmVjdEFkamFjZW50
RW50cnlQb2ludCwgJm1fYXNzZW1ibGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBCYWNr
dHJhY2tpbmdBY3Rpb246Okp1bXBUb0luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyRW50cnlQb2lu
dDoKLSAgICAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlua1RvKG1faW5kaXJlY3RBZGphY2VudFRy
ZWVXYWxrZXJCYWNrdHJhY2tpbmdQb2ludCwgJm1fYXNzZW1ibGVyKTsKKyAgICAgICAgbG9jYWxG
YWlsdXJlQ2FzZXMubGlua1RvKG1faW5kaXJlY3RBZGphY2VudFRyZWVXYWxrZXJFbnRyeVBvaW50
LCAmbV9hc3NlbWJsZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEJhY2t0cmFja2luZ0Fj
dGlvbjo6SnVtcFRvRGlyZWN0QWRqYWNlbnRUYWlsOgogICAgICAgICBtX2FkamFjZW50QmFja3Ry
YWNraW5nRmFpbHVyZUNhc2VzLmFwcGVuZChsb2NhbEZhaWx1cmVDYXNlcyk7CkBAIC0xODI5LDMw
ICsxOTc5LDQ5IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUFkamFjZW50
QmFja3RyYWNraW5nVGFpbCgpCiAKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZURlc2NlbmRhbnRCYWNrdHJhY2tpbmdUYWlsKCkKIHsKLSAgICBtX2Rlc2NlbmRhbnRCYWNrdHJh
Y2tpbmdGYWlsdXJlQ2FzZXMubGluaygmbV9hc3NlbWJsZXIpOwotICAgIG1fZGVzY2VuZGFudEJh
Y2t0cmFja2luZ0ZhaWx1cmVDYXNlcy5jbGVhcigpOworICAgIG1fZGVzY2VuZGFudFRhaWxGYWls
dXJlQ2FzZXMubGluaygmbV9hc3NlbWJsZXIpOworICAgIG1fZGVzY2VuZGFudFRhaWxGYWlsdXJl
Q2FzZXMuY2xlYXIoKTsKICAgICBtX2Fzc2VtYmxlci5tb3ZlKG1fZGVzY2VuZGFudEJhY2t0cmFj
a2luZ1N0YXJ0LCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKICAgICBtX3JlZ2lzdGVyQWxsb2Nh
dG9yLmRlYWxsb2NhdGVSZWdpc3RlcihtX2Rlc2NlbmRhbnRCYWNrdHJhY2tpbmdTdGFydCk7CiAg
ICAgbV9hc3NlbWJsZXIuanVtcChtX2Rlc2NlbmRhbnRFbnRyeVBvaW50KTsKIH0KIAotdm9pZCBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFja3RyYWNraW5nVGFpbHNJZk5lZWRlZChB
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQm
IGZyYWdtZW50KQordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlUmVzdG9yaW5n
VmlzaXRlZE1hdGNoVHlwZVRhaWwoKQogewotICAgIGlmIChmcmFnbWVudC5iYWNrdHJhY2tpbmdG
bGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6OkRpcmVjdEFkamFjZW50VGFpbCAmJiBmcmFnbWVudC5i
YWNrdHJhY2tpbmdGbGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6OkRlc2NlbmRhbnRUYWlsKSB7Ci0g
ICAgICAgIEFzc2VtYmxlcjo6SnVtcCBub3JtYWxDYXNlID0gbV9hc3NlbWJsZXIuanVtcCgpOwot
ICAgICAgICBnZW5lcmF0ZUFkamFjZW50QmFja3RyYWNraW5nVGFpbCgpOwotICAgICAgICBnZW5l
cmF0ZURlc2NlbmRhbnRCYWNrdHJhY2tpbmdUYWlsKCk7Ci0gICAgICAgIG5vcm1hbENhc2UubGlu
aygmbV9hc3NlbWJsZXIpOwotICAgIH0gZWxzZSBpZiAoZnJhZ21lbnQuYmFja3RyYWNraW5nRmxh
Z3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpEaXJlY3RBZGphY2VudFRhaWwpIHsKLSAgICAgICAgQXNz
ZW1ibGVyOjpKdW1wIG5vcm1hbENhc2UgPSBtX2Fzc2VtYmxlci5qdW1wKCk7Ci0gICAgICAgIGdl
bmVyYXRlQWRqYWNlbnRCYWNrdHJhY2tpbmdUYWlsKCk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQobV9hc3NlbWJsZXIuanVtcCgpKTsKLSAgICAgICAgbm9ybWFsQ2FzZS5saW5rKCZtX2Fz
c2VtYmxlcik7Ci0gICAgfSBlbHNlIGlmIChmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIEJh
Y2t0cmFja2luZ0ZsYWc6OkRlc2NlbmRhbnRUYWlsKSB7CisgICAgaWYgKCFtX2Rlc2NlbmRhbnRG
YWlsdXJlQ2FzZXMuZW1wdHkoKSkgeworICAgICAgICBtX2Rlc2NlbmRhbnRGYWlsdXJlQ2FzZXMu
bGluaygmbV9hc3NlbWJsZXIpOworICAgICAgICBnZW5lcmF0ZVJlc3RvcmVWaXNpdGVkTWF0Y2hU
eXBlKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmp1bXAobV9kZXNjZW5kYW50RW50cnlQb2ludCk7
CisgICAgfQorICAgIGlmICghbV9kZXNjZW5kYW50VHJlZVdhbGtlckZhaWx1cmVDYXNlcy5lbXB0
eSgpKSB7CisgICAgICAgIG1fZGVzY2VuZGFudFRyZWVXYWxrZXJGYWlsdXJlQ2FzZXMubGluaygm
bV9hc3NlbWJsZXIpOworICAgICAgICBnZW5lcmF0ZVJlc3RvcmVWaXNpdGVkTWF0Y2hUeXBlKCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLmp1bXAobV9kZXNjZW5kYW50VHJlZVdhbGtlckVudHJ5UG9p
bnQpOworICAgIH0KK30KKworc3RhdGljIGJvb2wgbmVlZHNCYWNrdHJhY2tpbmdUYWlsKGNvbnN0
IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQoreworICAgIHJldHVybiBmcmFnbWVudC5iYWNr
dHJhY2tpbmdGbGFncyAmIChCYWNrdHJhY2tpbmdGbGFnOjpEaXJlY3RBZGphY2VudFRhaWwgfCBC
YWNrdHJhY2tpbmdGbGFnOjpEZXNjZW5kYW50VGFpbCB8IEJhY2t0cmFja2luZ0ZsYWc6OlJlc3Rv
cmluZ1Zpc2l0ZWRNYXRjaFR5cGVUYWlsKTsKK30KKwordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlQmFja3RyYWNraW5nVGFpbHNJZk5lZWRlZChjb25zdCBTZWxlY3RvckZyYWdt
ZW50JiBmcmFnbWVudCkKK3sKKyAgICBpZiAobmVlZHNCYWNrdHJhY2tpbmdUYWlsKGZyYWdtZW50
KSkgewogICAgICAgICBBc3NlbWJsZXI6Okp1bXAgbm9ybWFsQ2FzZSA9IG1fYXNzZW1ibGVyLmp1
bXAoKTsKLSAgICAgICAgZ2VuZXJhdGVEZXNjZW5kYW50QmFja3RyYWNraW5nVGFpbCgpOworICAg
ICAgICBpZiAoZnJhZ21lbnQuYmFja3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpE
aXJlY3RBZGphY2VudFRhaWwpCisgICAgICAgICAgICBnZW5lcmF0ZUFkamFjZW50QmFja3RyYWNr
aW5nVGFpbCgpOworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja3RyYWNraW5nRmxhZ3MgJiBCYWNr
dHJhY2tpbmdGbGFnOjpEZXNjZW5kYW50VGFpbCkKKyAgICAgICAgICAgIGdlbmVyYXRlRGVzY2Vu
ZGFudEJhY2t0cmFja2luZ1RhaWwoKTsKKyAgICAgICAgaWYgKGZyYWdtZW50LmJhY2t0cmFja2lu
Z0ZsYWdzICYgQmFja3RyYWNraW5nRmxhZzo6UmVzdG9yaW5nVmlzaXRlZE1hdGNoVHlwZVRhaWwp
CisgICAgICAgICAgICBnZW5lcmF0ZVJlc3RvcmluZ1Zpc2l0ZWRNYXRjaFR5cGVUYWlsKCk7CiAg
ICAgICAgIG5vcm1hbENhc2UubGluaygmbV9hc3NlbWJsZXIpOwogICAgIH0KKworICAgIGlmICgh
bV9kZXNjZW5kYW50RmFpbHVyZUNhc2VzLmVtcHR5KCkpCisgICAgICAgIG1fZGVzY2VuZGFudEZh
aWx1cmVDYXNlcy5saW5rVG8obV9kZXNjZW5kYW50RW50cnlQb2ludCwgJm1fYXNzZW1ibGVyKTsK
KyAgICBpZiAoIW1fZGVzY2VuZGFudFRyZWVXYWxrZXJGYWlsdXJlQ2FzZXMuZW1wdHkoKSkKKyAg
ICAgICAgbV9kZXNjZW5kYW50VHJlZVdhbGtlckZhaWx1cmVDYXNlcy5saW5rVG8obV9kZXNjZW5k
YW50VHJlZVdhbGtlckVudHJ5UG9pbnQsICZtX2Fzc2VtYmxlcik7CiB9CiAKIHZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBM
aXN0JiBtYXRjaGluZ1RhZ05hbWVGYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6SnVtcExpc3QmIG1h
dGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZy
YWdtZW50KQpAQCAtMTg2MCw4ICsyMDI5LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6
OmdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoaW4KICAg
ICBpZiAoZnJhZ21lbnQudGFnTmFtZSkKICAgICAgICAgZ2VuZXJhdGVFbGVtZW50SGFzVGFnTmFt
ZShtYXRjaGluZ1RhZ05hbWVGYWlsdXJlQ2FzZXMsICooZnJhZ21lbnQudGFnTmFtZSkpOwogCi0g
ICAgaWYgKGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzTGluaykpCi0gICAgICAgIGdlbmVyYXRlRWxlbWVudElzTGluayhtYXRjaGluZ1Bvc3RU
YWdOYW1lRmFpbHVyZUNhc2VzKTsKKyAgICBnZW5lcmF0ZUVsZW1lbnRMaW5rTWF0Y2hpbmcobWF0
Y2hpbmdQb3N0VGFnTmFtZUZhaWx1cmVDYXNlcywgZnJhZ21lbnQpOwogCiAgICAgaWYgKGZyYWdt
ZW50LnBzZXVkb0NsYXNzZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUm9vdCkp
CiAgICAgICAgIGdlbmVyYXRlRWxlbWVudElzUm9vdChtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVy
ZUNhc2VzKTsKQEAgLTE5MTcsNiArMjA4NSwxNiBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFbGVtZW50RGF0YU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaQog
ICAgICAgICBnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVzTWF0Y2hpbmcoZmFpbHVyZUNhc2VzLCBl
bGVtZW50RGF0YUFkZHJlc3MsIGZyYWdtZW50KTsKIH0KIAordm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlRWxlbWVudExpbmtNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQoreworICAgIGJv
b2wgY29udGFpbnNQc2V1ZG9DbGFzc0xpbmsgPSBmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmNvbnRh
aW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbmspIHx8IGZyYWdtZW50LnBzZXVkb0NsYXNz
ZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQW55TGluayk7CisgICAgYm9vbCBj
b250YWluc1BzZXVkb0NsYXNzVmlzaXRlZCA9IGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29udGFp
bnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZCk7CisgICAgaWYgKGNvbnRhaW5zUHNl
dWRvQ2xhc3NMaW5rIHx8IGNvbnRhaW5zUHNldWRvQ2xhc3NWaXNpdGVkKQorICAgICAgICBnZW5l
cmF0ZUVsZW1lbnRJc0xpbmsoZmFpbHVyZUNhc2VzKTsKKyAgICBpZiAoY29udGFpbnNQc2V1ZG9D
bGFzc1Zpc2l0ZWQpCisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoanVtcElmVmlzaXRlZE1h
dGNoVHlwZUlzRGlzYWJsZWQoKSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgQXNzZW1ibGVyOjpKdW1w
IHRlc3RJc0hUTUxGbGFnT25Ob2RlKEFzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlv
biwgQXNzZW1ibGVyJiBhc3NlbWJsZXIsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBub2RlQWRkcmVz
cykKIHsKICAgICByZXR1cm4gYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihjb25kaXRpb24sIEFzc2Vt
Ymxlcjo6QWRkcmVzcyhub2RlQWRkcmVzcywgTm9kZTo6bm9kZUZsYWdzTWVtb3J5T2Zmc2V0KCkp
LCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOb2RlOjpmbGFnSXNIVE1MKCkpKTsKQEAgLTI4MDks
NiArMjk4NywxMSBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50
TWF0Y2hlc05vdFBzZXVkb0NsYXNzKEFzc2VtYmxlcjo6SnVtcAogewogICAgIGZvciAoY29uc3Qg
YXV0byYgc3ViRnJhZ21lbnQgOiBmcmFnbWVudC5ub3RGaWx0ZXJzKSB7CiAgICAgICAgIEFzc2Vt
Ymxlcjo6SnVtcExpc3QgbG9jYWxGYWlsdXJlQ2FzZXM7CisKKyAgICAgICAgLy8gV2hlbiA6bm90
IGhhcyA6bGluayBhbmQgY3VycmVudCB2aXNpdGVkTWF0Y2hUeXBlIGlzIFZpc2l0ZWRNYXRjaEVu
YWJsZWQsIDpub3QgZmlsdGVyIHBhc3NlcyByZWdhcmRsZXNzIG9mIHRoZSBlbGVtZW50LgorICAg
ICAgICBpZiAoc3ViRnJhZ21lbnQudXNlVmlzaXRlZE1hdGNoVHlwZSAmJiBzdWJGcmFnbWVudC5w
c2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbmspKQorICAg
ICAgICAgICAgbG9jYWxGYWlsdXJlQ2FzZXMuYXBwZW5kKGp1bXBJZlZpc2l0ZWRNYXRjaFR5cGVJ
c0VuYWJsZWQoKSk7CisKICAgICAgICAgZ2VuZXJhdGVFbGVtZW50TWF0Y2hpbmcobG9jYWxGYWls
dXJlQ2FzZXMsIGxvY2FsRmFpbHVyZUNhc2VzLCBzdWJGcmFnbWVudCk7CiAgICAgICAgIC8vIFNp
bmNlIHRoaXMgaXMgYSBub3QgcHNldWRvIGNsYXNzIGZpbHRlciwgcmVhY2hpbmcgaGVyZSBpcyBh
IGZhaWx1cmUuCiAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuanVtcCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oIGIv
U291cmNlL1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgKaW5kZXggYzAxMTIyODRlMzU1
NjYyZTc1NGYxMzUxNDEwOWU1MjBlZmU4ZGRlMy4uYTRkOGYwOTgzNTdlNTMzZTU3NGNmNjJhOTIw
NDUxOGYxMWZhNzQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxs
b2NhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgKQEAg
LTU5LDYgKzU5LDExIEBAIGNsYXNzIFN0YWNrQWxsb2NhdG9yIHsKICAgICB7CiAgICAgfQogCisg
ICAgU3RhY2tSZWZlcmVuY2Ugc3RhY2tUb3AoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0YWNr
UmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCArIHN0YWNrVW5pdEluQnl0ZXMoKSk7CisgICAgfQor
CiAgICAgflN0YWNrQWxsb2NhdG9yKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFt
X29mZnNldEZyb21Ub3ApOwpAQCAtNjcsMTAgKzcyLDMyIEBAIGNsYXNzIFN0YWNrQWxsb2NhdG9y
IHsKIAogICAgIFN0YWNrUmVmZXJlbmNlIGFsbG9jYXRlVW5pbml0aWFsaXplZCgpCiAgICAgewor
ICAgICAgICByZXR1cm4gYWxsb2NhdGVVbmluaXRpYWxpemVkKDEpWzBdOworICAgIH0KKworICAg
IFN0YWNrUmVmZXJlbmNlVmVjdG9yIGFsbG9jYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBjb3Vu
dCkKKyAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2hhc0Z1bmN0aW9uQ2FsbFBhZGRp
bmcpOwotICAgICAgICBtX2Fzc2VtYmxlci5hZGRQdHJOb0ZsYWdzKEpTQzo6TWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigtc3RhY2tVbml0SW5CeXRlcygpKSwgSlNDOjpNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBtX29mZnNldEZyb21Ub3AgKz0gc3Rh
Y2tVbml0SW5CeXRlcygpOwotICAgICAgICByZXR1cm4gU3RhY2tSZWZlcmVuY2UobV9vZmZzZXRG
cm9tVG9wKTsKKyAgICAgICAgU3RhY2tSZWZlcmVuY2VWZWN0b3Igc3RhY2tSZWZlcmVuY2VzOwor
ICAgICAgICB1bnNpZ25lZCBvbGRPZmZzZXRGcm9tVG9wID0gbV9vZmZzZXRGcm9tVG9wOworI2lm
IENQVShBUk02NCkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50IC0gMTsg
aSArPSAyKSB7CisgICAgICAgICAgICBtX29mZnNldEZyb21Ub3AgKz0gc3RhY2tVbml0SW5CeXRl
cygpOworICAgICAgICAgICAgc3RhY2tSZWZlcmVuY2VzLmFwcGVuZChTdGFja1JlZmVyZW5jZSht
X29mZnNldEZyb21Ub3AgLSBzdGFja1VuaXRJbkJ5dGVzKCkgLyAyKSk7CisgICAgICAgICAgICBz
dGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCkpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChjb3VudCAlIDIpIHsKKyAgICAgICAgICAgIG1fb2Zmc2V0
RnJvbVRvcCArPSBzdGFja1VuaXRJbkJ5dGVzKCk7CisgICAgICAgICAgICBzdGFja1JlZmVyZW5j
ZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCkpOworICAgICAgICB9Cisj
ZWxzZQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAg
ICAgICAgICAgbV9vZmZzZXRGcm9tVG9wICs9IHN0YWNrVW5pdEluQnl0ZXMoKTsKKyAgICAgICAg
ICAgIHN0YWNrUmVmZXJlbmNlcy5hcHBlbmQoU3RhY2tSZWZlcmVuY2UobV9vZmZzZXRGcm9tVG9w
KSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBtX2Fzc2VtYmxlci5hZGRQdHJOb0ZsYWdz
KEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtKG1fb2Zmc2V0RnJvbVRvcCAtIG9s
ZE9mZnNldEZyb21Ub3ApKSwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgICAgICByZXR1cm4gc3RhY2tSZWZlcmVuY2VzOwogICAgIH0KIAogICAgIFN0YWNr
UmVmZXJlbmNlVmVjdG9yIHB1c2goY29uc3QgVmVjdG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQ+JiByZWdpc3RlcklEcykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235946</attachid>
            <date>2014-08-03 10:45:28 -0700</date>
            <delta_ts>2014-09-26 08:31:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135293-20140804024540.patch</filename>
            <type>text/plain</type>
            <size>45608</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxOTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQwMDI0YmQ1ODdmY2Qx
NzNkNTJmMGI1MDE3MTA5YmZhOTMwZGMzMC4uYTZmZWMxMWI0NjNkMjhmM2ZlYTk5MTllNjBlN2Uy
YjJmYzg1ODQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE0LTA4LTAzICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUyBKSVQ6IElt
cGxlbWVudCA6dmlzaXRlZCBwc2V1ZG8gY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICog
Y3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
b21waWxlcjo6U2VsZWN0b3JGcmFnbWVudDo6U2VsZWN0b3JGcmFnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpTZWxlY3Rv
ckNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Y29u
c3RydWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OmNh
blVzZUJhY2t0cmFja2luZ1dpdGhvdXRUYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OnJlcXVpcmVzUmVzdG9yaW5nVmlzaXRlZE1hdGNoVHlwZVRhaWwpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Y29tcHV0ZUJhY2t0cmFja2luZ0luZm9ybWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVJpZ2h0bW9zdFRy
ZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVBhcmVudEVsZW1lbnRUcmVlV2Fsa2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGVBbmNlc3RvclRyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUluZGlyZWN0QWRqYWNlbnRUcmVlV2Fs
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6anVtcElmVmlzaXRlZE1hdGNoVHlwZUlzRGlzYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpqdW1wSWZWaXNp
dGVkTWF0Y2hUeXBlSXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTYXZlVmlzaXRlZE1hdGNoVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlUmVzdG9yZVZpc2l0ZWRNYXRjaFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjp1cGRhdGVWaXNpdGVkTWF0
Y2hUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6bGlua0ZhaWx1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29t
cGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVEZXNjZW5kYW50QmFja3RyYWNr
aW5nVGFpbCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlUmVzdG9yaW5nVmlzaXRlZE1hdGNoVHlwZVRhaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6bmVlZHNCYWNrdHJhY2tpbmdUYWlsKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVCYWNrdHJhY2tpbmdUYWlsc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50
TWF0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRMaW5rTWF0Y2hpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVs
ZW1lbnRNYXRjaGVzTm90UHNldWRvQ2xhc3MpOgorICAgICAgICAqIGNzc2ppdC9TdGFja0FsbG9j
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RhY2tBbGxvY2F0b3I6OnN0YWNrVG9wKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0YWNrQWxsb2NhdG9yOjphbGxvY2F0ZVVuaW5pdGlhbGl6ZWQpOgor
CiAyMDE0LTA4LTAyICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTdXBwb3J0IGJvdGggd2luZG93IGFuZCB2aWV3IGJhc2VkIHZpZGVvIGZ1bGxzY3JlZW4uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggOTYzNWUzZjUw
YmUzMjYwOGFlZTUwYTBmMzFmMDZiN2ExMGI4NmU1MC4uZDBiNWFlOTlkZTMyZmVlZWQ4YTIwMjNj
MjhmYTlkMTJjZTk5OGZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVj
dG9yQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBp
bGVyLmNwcApAQCAtNzMsMTQgKzczLDE3IEBAIGVudW0gY2xhc3MgQmFja3RyYWNraW5nQWN0aW9u
IHsKIH07CiAKIHN0cnVjdCBCYWNrdHJhY2tpbmdGbGFnIHsKLSAgICBlbnVtIHsKKyAgICBlbnVt
IDogdW5zaWduZWQgewogICAgICAgICBEZXNjZW5kYW50RW50cnlQb2ludCA9IDEsCiAgICAgICAg
IEluZGlyZWN0QWRqYWNlbnRFbnRyeVBvaW50ID0gMSA8PCAxLAogICAgICAgICBTYXZlRGVzY2Vu
ZGFudEJhY2t0cmFja2luZ1N0YXJ0ID0gMSA8PCAyLAogICAgICAgICBTYXZlQWRqYWNlbnRCYWNr
dHJhY2tpbmdTdGFydCA9IDEgPDwgMywKICAgICAgICAgRGlyZWN0QWRqYWNlbnRUYWlsID0gMSA8
PCA0LAogICAgICAgICBEZXNjZW5kYW50VGFpbCA9IDEgPDwgNSwKLSAgICAgICAgSW5DaGFpbldp
dGhEZXNjZW5kYW50VGFpbCA9IDEgPDwgNgorICAgICAgICBJbkNoYWluV2l0aERlc2NlbmRhbnRU
YWlsID0gMSA8PCA2LAorICAgICAgICBSZXN0b3JpbmdWaXNpdGVkTWF0Y2hUeXBlVGFpbCA9IDEg
PDwgNywKKyAgICAgICAgTmVlZHNUcmFja2luZ1Zpc2l0ZWRNYXRjaFR5cGUgPSAxIDw8IDgsCisg
ICAgICAgIE5lZWRzUmVzdG9yaW5nVmlzaXRlZE1hdGNoVHlwZUluRGVzY2VuZGFudFRhaWwgPSAx
IDw8IDkKICAgICB9OwogfTsKIApAQCAtMTM5LDYgKzE0Miw3IEBAIHN0cnVjdCBTZWxlY3RvckZy
YWdtZW50IHsKICAgICAgICAgLCBpZChudWxscHRyKQogICAgICAgICAsIGxhbmdGaWx0ZXIobnVs
bHB0cikKICAgICAgICAgLCBwc2V1ZG9FbGVtZW50U2VsZWN0b3IobnVsbHB0cikKKyAgICAgICAg
LCB1c2VWaXNpdGVkTWF0Y2hUeXBlKGZhbHNlKQogICAgICAgICAsIG9ubHlNYXRjaGVzTGlua3NJ
blF1aXJrc01vZGUodHJ1ZSkKICAgICB7CiAgICAgfQpAQCAtMTQ5LDcgKzE1Myw3IEBAIHN0cnVj
dCBTZWxlY3RvckZyYWdtZW50IHsKICAgICBCYWNrdHJhY2tpbmdBY3Rpb24gdHJhdmVyc2FsQmFj
a3RyYWNraW5nQWN0aW9uOwogICAgIEJhY2t0cmFja2luZ0FjdGlvbiBtYXRjaGluZ1RhZ05hbWVC
YWNrdHJhY2tpbmdBY3Rpb247CiAgICAgQmFja3RyYWNraW5nQWN0aW9uIG1hdGNoaW5nUG9zdFRh
Z05hbWVCYWNrdHJhY2tpbmdBY3Rpb247Ci0gICAgdW5zaWduZWQgY2hhciBiYWNrdHJhY2tpbmdG
bGFnczsKKyAgICB1bnNpZ25lZCBiYWNrdHJhY2tpbmdGbGFnczsKICAgICB1bnNpZ25lZCB0YWdO
YW1lTWF0Y2hlZEJhY2t0cmFja2luZ1N0YXJ0SGVpZ2h0RnJvbURlc2NlbmRhbnQ7CiAgICAgdW5z
aWduZWQgdGFnTmFtZU5vdE1hdGNoZWRCYWNrdHJhY2tpbmdTdGFydEhlaWdodEZyb21EZXNjZW5k
YW50OwogICAgIHVuc2lnbmVkIGhlaWdodEZyb21EZXNjZW5kYW50OwpAQCAtMTY5LDYgKzE3Myw5
IEBAIHN0cnVjdCBTZWxlY3RvckZyYWdtZW50IHsKICAgICBWZWN0b3I8VmVjdG9yPFNlbGVjdG9y
RnJhZ21lbnQ+PiBhbnlGaWx0ZXJzOwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBwc2V1ZG9FbGVt
ZW50U2VsZWN0b3I7CiAKKyAgICAvLyBJbmRpY2F0ZXMgdGhlIGZyYWdtZW50IG9yIGl0cyBzdWIg
ZnJhZ21lbnRzIHVzZSB2aXNpdGVkTWF0Y2hUeXBlLgorICAgIGJvb2wgdXNlVmlzaXRlZE1hdGNo
VHlwZTsKKwogICAgIC8vIEZvciBxdWlya3MgbW9kZSwgZm9sbG93IHRoaXM6IGh0dHA6Ly9xdWly
a3Muc3BlYy53aGF0d2cub3JnLyN0aGUtOmFjdGl2ZS1hbmQtOmhvdmVyLXF1aXJrCiAgICAgLy8g
SW4gcXVpcmtzIG1vZGUsIGEgY29tcG91bmQgc2VsZWN0b3IgJ3NlbGVjdG9yJyB0aGF0IG1hdGNo
ZXMgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG11c3Qgbm90IG1hdGNoIGVsZW1lbnRzIHRoYXQg
d291bGQgbm90IGFsc28gbWF0Y2ggdGhlICc6YW55LWxpbmsnIHNlbGVjdG9yLgogICAgIC8vCkBA
IC0yMTEsNiArMjE4LDggQEAgY2xhc3MgU2VsZWN0b3JDb2RlR2VuZXJhdG9yIHsKICAgICB2b2lk
IGdlbmVyYXRlU2VsZWN0b3JDaGVja2VyKCk7CiAKICAgICAvLyBFbGVtZW50IHJlbGF0aW9ucyB0
cmVlIHdhbGtlci4KKyAgICB2b2lkIGdlbmVyYXRlUmlnaHRtb3N0VHJlZVdhbGtlcihBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKKwog
ICAgIHZvaWQgZ2VuZXJhdGVXYWxrVG9QYXJlbnROb2RlKEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0
YXJnZXRSZWdpc3Rlcik7CiAgICAgdm9pZCBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFy
Z2V0UmVnaXN0ZXIpOwogICAgIHZvaWQgZ2VuZXJhdGVQYXJlbnRFbGVtZW50VHJlZVdhbGtlcihB
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQm
KTsKQEAgLTIyNiwxMiArMjM1LDE0IEBAIGNsYXNzIFNlbGVjdG9yQ29kZUdlbmVyYXRvciB7CiAK
ICAgICB2b2lkIGxpbmtGYWlsdXJlcyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBnbG9iYWxGYWlsdXJl
Q2FzZXMsIEJhY2t0cmFja2luZ0FjdGlvbiwgQXNzZW1ibGVyOjpKdW1wTGlzdCYgbG9jYWxGYWls
dXJlQ2FzZXMpOwogICAgIHZvaWQgZ2VuZXJhdGVBZGphY2VudEJhY2t0cmFja2luZ1RhaWwoKTsK
LSAgICB2b2lkIGdlbmVyYXRlRGVzY2VuZGFudEJhY2t0cmFja2luZ1RhaWwoKTsKLSAgICB2b2lk
IGdlbmVyYXRlQmFja3RyYWNraW5nVGFpbHNJZk5lZWRlZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKKyAgICB2b2lkIGdlbmVyYXRl
RGVzY2VuZGFudEJhY2t0cmFja2luZ1RhaWwoY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOworICAg
IHZvaWQgZ2VuZXJhdGVSZXN0b3JpbmdWaXNpdGVkTWF0Y2hUeXBlVGFpbCgpOworICAgIHZvaWQg
Z2VuZXJhdGVCYWNrdHJhY2tpbmdUYWlsc0lmTmVlZGVkKGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQm
KTsKIAogICAgIC8vIEVsZW1lbnQgcHJvcGVydGllcyBtYXRjaGVycy4KICAgICB2b2lkIGdlbmVy
YXRlRWxlbWVudE1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoaW5nVGFnTmFtZUZh
aWx1cmVDYXNlcywgQXNzZW1ibGVyOjpKdW1wTGlzdCYgbWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1
cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVt
ZW50RGF0YU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3Qg
U2VsZWN0b3JGcmFnbWVudCYpOworICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50TGlua01hdGNoaW5n
KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVu
dCYpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIpOwogICAgIHZvaWQgZ2Vu
ZXJhdGVFbGVtZW50SXNBY3RpdmUoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBj
b25zdCBTZWxlY3RvckZyYWdtZW50Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0
Q2hpbGQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZy
YWdtZW50Jik7CkBAIC0yNjIsMTQgKzI3MywxOSBAQCBjbGFzcyBTZWxlY3RvckNvZGVHZW5lcmF0
b3IgewogICAgIEFzc2VtYmxlcjo6SnVtcCBicmFuY2hPblJlc29sdmluZ01vZGVXaXRoQ2hlY2tp
bmdDb250ZXh0KEFzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU2VsZWN0b3JDaGVja2Vy
OjpNb2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KTsKICAgICBBc3Nl
bWJsZXI6Okp1bXAgYnJhbmNoT25SZXNvbHZpbmdNb2RlKEFzc2VtYmxlcjo6UmVsYXRpb25hbENv
bmRpdGlvbiwgU2VsZWN0b3JDaGVja2VyOjpNb2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hl
Y2tpbmdDb250ZXh0KTsKICAgICB2b2lkIGdlbmVyYXRlTWFya1BzZXVkb1N0eWxlRm9yUHNldWRv
RWxlbWVudChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9y
RnJhZ21lbnQmKTsKKyAgICB2b2lkIGdlbmVyYXRlUmVzdG9yZVZpc2l0ZWRNYXRjaFR5cGUoKTsK
ICAgICB2b2lkIGdlbmVyYXRlUmVxdWVzdGVkUHNldWRvRWxlbWVudEVxdWFsc1RvU2VsZWN0b3JQ
c2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2Vs
ZWN0b3JGcmFnbWVudCYsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQpOwor
ICAgIHZvaWQgZ2VuZXJhdGVTYXZlVmlzaXRlZE1hdGNoVHlwZSgpOwogICAgIHZvaWQgZ2VuZXJh
dGVTcGVjaWFsRmFpbHVyZUluUXVpcmtzTW9kZUZvckFjdGl2ZUFuZEhvdmVySWZOZWVkZWQoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7
CiAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBqdW1wSWZOb1ByZXZpb3VzQWRqYWNlbnRFbGVtZW50
KCk7CiAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBqdW1wSWZOb05leHRBZGphY2VudEVsZW1lbnQo
KTsKICAgICBBc3NlbWJsZXI6Okp1bXAganVtcElmTm90UmVzb2x2aW5nU3R5bGUoQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dFJlZ2lzdGVyKTsKKyAgICBBc3NlbWJsZXI6Okp1
bXAganVtcElmVmlzaXRlZE1hdGNoVHlwZUlzRGlzYWJsZWQoKTsKKyAgICBBc3NlbWJsZXI6Okp1
bXAganVtcElmVmlzaXRlZE1hdGNoVHlwZUlzRW5hYmxlZCgpOwogICAgIHZvaWQgbG9hZENoZWNr
aW5nQ29udGV4dChBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KTsKICAgICBB
c3NlbWJsZXI6Okp1bXAgbW9kdWxvKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlv
biwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGlucHV0RGl2aWRlbmQsIGludCBkaXZpc29yKTsKICAg
ICB2b2lkIG1vZHVsb0lzWmVybyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBpbnB1dERpdmlkZW5kLCBpbnQgZGl2aXNvcik7CisgICAgdm9p
ZCB1cGRhdGVWaXNpdGVkTWF0Y2hUeXBlKCk7CiAKICAgICBib29sIGdlbmVyYXRlUHJvbG9ndWUo
KTsKICAgICB2b2lkIGdlbmVyYXRlRXBpbG9ndWUoKTsKQEAgLTI4MywxOCArMjk5LDIzIEBAIGNs
YXNzIFNlbGVjdG9yQ29kZUdlbmVyYXRvciB7CiAgICAgU2VsZWN0b3JDb250ZXh0IG1fc2VsZWN0
b3JDb250ZXh0OwogICAgIEZ1bmN0aW9uVHlwZSBtX2Z1bmN0aW9uVHlwZTsKICAgICBTZWxlY3Rv
ckZyYWdtZW50TGlzdCBtX3NlbGVjdG9yRnJhZ21lbnRzOworICAgIGJvb2wgbV9uZWVkc1Zpc2l0
ZWRNYXRjaFR5cGU7CiAgICAgYm9vbCBtX25lZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydDsK
IAogICAgIFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZSBtX2NoZWNraW5nQ29udGV4dFN0
YWNrUmVmZXJlbmNlOwogCiAgICAgQXNzZW1ibGVyOjpMYWJlbCBtX2Rlc2NlbmRhbnRFbnRyeVBv
aW50OworICAgIEFzc2VtYmxlcjo6SnVtcExpc3QgbV9kZXNjZW5kYW50RmFpbHVyZUNhc2VzOwor
ICAgIEFzc2VtYmxlcjo6TGFiZWwgbV9kZXNjZW5kYW50VHJlZVdhbGtlckVudHJ5UG9pbnQ7Cisg
ICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2Rlc2NlbmRhbnRUcmVlV2Fsa2VyRmFpbHVyZUNhc2Vz
OwogICAgIEFzc2VtYmxlcjo6TGFiZWwgbV9pbmRpcmVjdEFkamFjZW50RW50cnlQb2ludDsKLSAg
ICBBc3NlbWJsZXI6OkxhYmVsIG1fZGVzY2VuZGFudFRyZWVXYWxrZXJCYWNrdHJhY2tpbmdQb2lu
dDsKLSAgICBBc3NlbWJsZXI6OkxhYmVsIG1faW5kaXJlY3RBZGphY2VudFRyZWVXYWxrZXJCYWNr
dHJhY2tpbmdQb2ludDsKKyAgICBBc3NlbWJsZXI6OkxhYmVsIG1faW5kaXJlY3RBZGphY2VudFRy
ZWVXYWxrZXJFbnRyeVBvaW50OwogICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtX2Rlc2NlbmRh
bnRCYWNrdHJhY2tpbmdTdGFydDsKLSAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IG1fZGVzY2VuZGFu
dEJhY2t0cmFja2luZ0ZhaWx1cmVDYXNlczsKKyAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IG1fZGVz
Y2VuZGFudFRhaWxGYWlsdXJlQ2FzZXM7CiAgICAgU3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJl
bmNlIG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydDsKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0
IG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdGYWlsdXJlQ2FzZXM7CisgICAgU3RhY2tBbGxvY2F0b3I6
OlN0YWNrUmVmZXJlbmNlIG1fYmFja3RyYWNraW5nVmlzaXRlZE1hdGNoVHlwZTsKKyAgICBTdGFj
a0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2UgbV92aXNpdGVkTWF0Y2hUeXBlOwogCiAjaWYgQ1NT
X1NFTEVDVE9SX0pJVF9ERUJVR0dJTkcKICAgICBjb25zdCBDU1NTZWxlY3RvciogbV9vcmlnaW5h
bFNlbGVjdG9yOwpAQCAtMzExLDkgKzMzMiw5IEBAIGVudW0gY2xhc3MgRnJhZ21lbnRzTGV2ZWwg
ewogICAgIEluRnVuY3Rpb25hbFBzZXVkb1R5cGUgPSAxCiB9OwogCi1zdGF0aWMgRnVuY3Rpb25U
eXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBT
ZWxlY3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywg
RnJhZ21lbnRzTGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMpOworc3RhdGlj
IEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RT
ZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JG
cmFnbWVudHMsIEZyYWdtZW50c0xldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRz
LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUgc3RhdGljVmlzaXRlZE1hdGNoVHlw
ZSwgYm9vbCYgbmVlZHNWaXNpdGVkTWF0Y2hUeXBlKTsKIAotc3RhdGljIHZvaWQgY29tcHV0ZUJh
Y2t0cmFja2luZ0luZm9ybWF0aW9uKFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdt
ZW50cywgYm9vbCYgbmVlZHNBZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KTsKK3N0YXRpYyB2b2lk
IGNvbXB1dGVCYWNrdHJhY2tpbmdJbmZvcm1hdGlvbihTZWxlY3RvckZyYWdtZW50TGlzdCYgc2Vs
ZWN0b3JGcmFnbWVudHMsIGJvb2wgbmVlZHNWaXNpdGVkTWF0Y2hUeXBlLCBib29sJiBuZWVkc0Fk
amFjZW50QmFja3RyYWNraW5nU3RhcnQpOwogCiBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNv
bXBpbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciogbGFzdFNlbGVjdG9yLCBKU0M6OlZNKiB2
bSwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgSlNDOjpNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYmIGNvZGVSZWYpCiB7CkBAIC0zNTQsNyArMzc1LDcgQEAgc3RhdGljIGlubGluZSBib29s
IHNob3VsZFVzZVJlbmRlclN0eWxlRnJvbUNoZWNraW5nQ29udGV4dChjb25zdCBTZWxlY3RvckZy
YWdtZW4KICAgICByZXR1cm4gZnJhZ21lbnQucmVsYXRpb25Ub1JpZ2h0RnJhZ21lbnQgPT0gRnJh
Z21lbnRSZWxhdGlvbjo6UmlnaHRtb3N0ICYmIGZyYWdtZW50LnBvc2l0aW9uSW5Sb290RnJhZ21l
bnRzID09IEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHM6OlJpZ2h0bW9zdDsKIH0KIAot
c3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1Nl
bGVjdG9yJiBzZWxlY3RvciwgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdG9yQ29u
dGV4dCBzZWxlY3RvckNvbnRleHQsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMgcG9z
aXRpb25JblJvb3RGcmFnbWVudHMpCitzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1
ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50
JiBmcmFnbWVudCwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRQb3Np
dGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgU2VsZWN0b3JDaGVj
a2VyOjpWaXNpdGVkTWF0Y2hUeXBlIHN0YXRpY1Zpc2l0ZWRNYXRjaFR5cGUsIGJvb2wmIG5lZWRz
VmlzaXRlZE1hdGNoVHlwZSkKIHsKICAgICBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NUeXBlIHR5
cGUgPSBzZWxlY3Rvci5wc2V1ZG9DbGFzc1R5cGUoKTsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAg
LTQzOSw3ICs0NjAsNiBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFz
c1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzTnRoT2ZUeXBlOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzTnRoTGFzdENoaWxkOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRo
TGFzdE9mVHlwZToKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQ6CiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEcmFnOgogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzRnVsbFBhZ2VNZWRpYToKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc1Njb3BlOgpAQCAtNDU3LDE1ICs0NzcsMjEgQEAgc3RhdGljIGlubGluZSBGdW5jdGlv
blR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2Vs
ZWMKIAogICAgIC8vIE9wdGltaXplZCBwc2V1ZG8gc2VsZWN0b3JzLgogICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzQW55TGluazoKLSAgICAgICAgZnJhZ21lbnQucHNldWRvQ2xhc3Nl
cy5hZGQoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluayk7Ci0gICAgICAgIHJldHVybiBGdW5j
dGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKLQogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzTGluazoKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Jvb3Q6
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NUYXJnZXQ6CiAgICAgICAgIGZyYWdt
ZW50LnBzZXVkb0NsYXNzZXMuYWRkKHR5cGUpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBl
OjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc1Zpc2l0ZWQ6CisgICAgICAgIC8vIERldGVybWluZSB0aGlzIDp2aXNpdGVkIGNhbm5vdCBt
YXRjaCBhbnl0aGluZyBzdGF0aWNhbGx5LgorICAgICAgICBpZiAoc3RhdGljVmlzaXRlZE1hdGNo
VHlwZSA9PSBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2FibGVkKQorICAgICAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZzsKKyAgICAgICAgZnJh
Z21lbnQucHNldWRvQ2xhc3Nlcy5hZGQodHlwZSk7CisgICAgICAgIGZyYWdtZW50LnVzZVZpc2l0
ZWRNYXRjaFR5cGUgPSB0cnVlOworICAgICAgICBuZWVkc1Zpc2l0ZWRNYXRjaFR5cGUgPSB0cnVl
OworICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CisK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FjdGl2ZToKICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc0ZpcnN0Q2hpbGQ6CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NIb3ZlcjoKQEAgLTUwMiw3ICs1MjgsOCBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9u
VHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxl
YwogICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhp
bmc7CiAKICAgICAgICAgICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IG5vdEZyYWdtZW50czsKLSAg
ICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMo
c2VsZWN0b3JMaXN0LT5maXJzdCgpLCBzZWxlY3RvckNvbnRleHQsIG5vdEZyYWdtZW50cywgRnJh
Z21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21l
bnRzKTsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlTmVlZHNWaXNpdGVkTWF0Y2hUeXBlID0gZmFs
c2U7CisgICAgICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJh
Z21lbnRzKHNlbGVjdG9yTGlzdC0+Zmlyc3QoKSwgc2VsZWN0b3JDb250ZXh0LCBub3RGcmFnbWVu
dHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9v
dEZyYWdtZW50cywgc3RhdGljVmlzaXRlZE1hdGNoVHlwZSwgaWdub3JlTmVlZHNWaXNpdGVkTWF0
Y2hUeXBlKTsKIAogICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBub3QgcHNldWRvIGNsYXNz
IGZpbHRlciwgQ2Fubm90TWF0Y2hBbnl0aGluZyBpbXBsaWVzIHRoaXMgZmlsdGVyIGFsd2F5cyBw
YXNzZXMuCiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6Q2Fu
bm90TWF0Y2hBbnl0aGluZykKQEAgLTUxNSwxMSArNTQyLDE3IEBAIHN0YXRpYyBpbmxpbmUgRnVu
Y3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3Is
IFNlbGVjCiAgICAgICAgICAgICBpZiAobm90RnJhZ21lbnRzLnNpemUoKSAhPSAxKQogICAgICAg
ICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGU7CiAKLSAgICAgICAg
ICAgIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIHN1YkZyYWdtZW50ID0gbm90RnJhZ21lbnRzLmZp
cnN0KCk7CisgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50JiBzdWJGcmFnbWVudCA9IG5vdEZy
YWdtZW50cy5maXJzdCgpOwogCi0gICAgICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIGRv
bid0IHN1cHBvcnQgdmlzaXRlZE1hdGNoVHlwZS4KLSAgICAgICAgICAgIGlmIChzdWJGcmFnbWVu
dC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbmspKQot
ICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGU7CisgICAg
ICAgICAgICAvLyBXaGVuIDp2aXNpdGVkIGlzIGluc2lkZSA6bm90LCBpdCBhbHdheXMgc3VjY2Vl
ZC4gRG9uJ3QgYXBwZW5kIGl0IHRvIG5vdEZpbHRlcnMuCisgICAgICAgICAgICBpZiAoc3ViRnJh
Z21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNp
dGVkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3Rv
ckNoZWNrZXI7CisKKyAgICAgICAgICAgIGlmIChzdGF0aWNWaXNpdGVkTWF0Y2hUeXBlID09IFNl
bGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCAmJiBzdWJGcmFnbWVudC5wc2V1ZG9D
bGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbmspKSB7CisgICAgICAg
ICAgICAgICAgc3ViRnJhZ21lbnQudXNlVmlzaXRlZE1hdGNoVHlwZSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgZnJhZ21lbnQudXNlVmlzaXRlZE1hdGNoVHlwZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgbmVlZHNWaXNpdGVkTWF0Y2hUeXBlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgZnJhZ21lbnQubm90RmlsdGVycy5hcHBlbmQoc3ViRnJhZ21lbnQpOwogICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZTsKQEAgLTUzMSw3ICs1NjQsOCBAQCBzdGF0aWMgaW5s
aW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNl
bGVjdG9yLCBTZWxlYwogICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IEZ1
bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgICAgICAgICAgZm9yIChjb25z
dCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3JMaXN0KCktPmZp
cnN0KCk7IHJvb3RTZWxlY3Rvcjsgcm9vdFNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0
KHJvb3RTZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBm
cmFnbWVudExpc3Q7Ci0gICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIHN1YkZ1bmN0aW9uVHlw
ZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgZnJh
Z21lbnRMaXN0LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRp
b25JblJvb3RGcmFnbWVudHMpOworICAgICAgICAgICAgICAgIGJvb2wgc3ViTmVlZHNWaXNpdGVk
TWF0Y2hUeXBlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIHN1YkZ1bmN0
aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4
dCwgZnJhZ21lbnRMaXN0LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwg
cG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHN0YXRpY1Zpc2l0ZWRNYXRjaFR5cGUsIHN1Yk5lZWRz
VmlzaXRlZE1hdGNoVHlwZSk7CiAKICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGZyYWdt
ZW50IGFsd2F5cyB1bm1hdGNoIGFnYWluc3QgdGhlIGVsZW1lbnQsIGRvbid0IGluc2VydCBpdCB0
byBhbnlGcmFnbWVudHMuCiAgICAgICAgICAgICAgICAgaWYgKHN1YkZ1bmN0aW9uVHlwZSA9PSBG
dW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCkBAIC01NDUsNiArNTc5LDExIEBAIHN0
YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxl
Y3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50TGlzdC5z
aXplKCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fu
bm90Q29tcGlsZTsKIAorICAgICAgICAgICAgICAgIGlmIChzdWJOZWVkc1Zpc2l0ZWRNYXRjaFR5
cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQudXNlVmlzaXRlZE1hdGNoVHlwZSA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG5lZWRzVmlzaXRlZE1hdGNoVHlwZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgY29uc3QgU2VsZWN0b3JGcmFn
bWVudCYgc3ViRnJhZ21lbnQgPSBmcmFnbWVudExpc3QuZmlyc3QoKTsKICAgICAgICAgICAgICAg
ICBhbnlGcmFnbWVudHMuYXBwZW5kKHN1YkZyYWdtZW50KTsKICAgICAgICAgICAgICAgICBmdW5j
dGlvblR5cGUgPSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBlLCBzdWJG
dW5jdGlvblR5cGUpOwpAQCAtNTkyLDYgKzYzMSw3IEBAIGlubGluZSBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcihjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVj
CiAgICAgOiBtX3N0YWNrQWxsb2NhdG9yKG1fYXNzZW1ibGVyKQogICAgICwgbV9zZWxlY3RvckNv
bnRleHQoc2VsZWN0b3JDb250ZXh0KQogICAgICwgbV9mdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBl
OjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpCisgICAgLCBtX25lZWRzVmlzaXRlZE1hdGNoVHlwZShm
YWxzZSkKICAgICAsIG1fbmVlZHNBZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KGZhbHNlKQogI2lm
IENTU19TRUxFQ1RPUl9KSVRfREVCVUdHSU5HCiAgICAgLCBtX29yaWdpbmFsU2VsZWN0b3Iocm9v
dFNlbGVjdG9yKQpAQCAtNjAxLDkgKzY0MSwxNCBAQCBpbmxpbmUgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlYwog
ICAgIGRhdGFMb2dGKCJDb21waWxpbmcgXCIlc1wiXG4iLCBtX29yaWdpbmFsU2VsZWN0b3ItPnNl
bGVjdG9yVGV4dCgpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAKLSAgICBtX2Z1bmN0aW9uVHlw
ZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250ZXh0LCBt
X3NlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQb3NpdGlv
bkluUm9vdEZyYWdtZW50czo6UmlnaHRtb3N0KTsKKyAgICAvLyBJbiBRdWVyeVNlbGVjdG9yIGNv
bnRleHQsIDp2aXNpdGVkIGFsd2F5cyBoYXMgbm8gZWZmZWN0IGR1ZSB0byBzZWN1cml0eSBpc3N1
ZXMuCisgICAgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hUeXBlIHN0YXRpY1Zpc2l0ZWRN
YXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQ7CisgICAgaWYg
KHNlbGVjdG9yQ29udGV4dCA9PSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpCisgICAg
ICAgIHN0YXRpY1Zpc2l0ZWRNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRj
aERpc2FibGVkOworCisgICAgbV9mdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMocm9v
dFNlbGVjdG9yLCBtX3NlbGVjdG9yQ29udGV4dCwgbV9zZWxlY3RvckZyYWdtZW50cywgRnJhZ21l
bnRzTGV2ZWw6OlJvb3QsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHM6OlJpZ2h0bW9z
dCwgc3RhdGljVmlzaXRlZE1hdGNoVHlwZSwgbV9uZWVkc1Zpc2l0ZWRNYXRjaFR5cGUpOwogICAg
IGlmIChtX2Z1bmN0aW9uVHlwZSAhPSBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGUgJiYgbV9m
dW5jdGlvblR5cGUgIT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nKQotICAgICAg
ICBjb21wdXRlQmFja3RyYWNraW5nSW5mb3JtYXRpb24obV9zZWxlY3RvckZyYWdtZW50cywgbV9u
ZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpOworICAgICAgICBjb21wdXRlQmFja3RyYWNr
aW5nSW5mb3JtYXRpb24obV9zZWxlY3RvckZyYWdtZW50cywgbV9uZWVkc1Zpc2l0ZWRNYXRjaFR5
cGUsIG1fbmVlZHNBZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KTsKIH0KIAogc3RhdGljIGJvb2wg
cHNldWRvQ2xhc3NPbmx5TWF0Y2hlc0xpbmtzSW5RdWlya3NNb2RlKGNvbnN0IENTU1NlbGVjdG9y
JiBzZWxlY3RvcikKQEAgLTYxMiw3ICs2NTcsNyBAQCBzdGF0aWMgYm9vbCBwc2V1ZG9DbGFzc09u
bHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yKQog
ICAgIHJldHVybiBwc2V1ZG9DbGFzc1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG92
ZXIgfHwgcHNldWRvQ2xhc3NUeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FjdGl2ZTsK
IH0KIAotc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgU2Vs
ZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbCBmcmFn
bWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzIHBvc2l0aW9uSW5Sb290
RnJhZ21lbnRzKQorc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3Qg
Q1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4
dCwgU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZl
bCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzIHBvc2l0aW9u
SW5Sb290RnJhZ21lbnRzLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUgc3RhdGlj
VmlzaXRlZE1hdGNoVHlwZSwgYm9vbCYgbmVlZHNWaXNpdGVkTWF0Y2hUeXBlKQogewogICAgIFNl
bGVjdG9yRnJhZ21lbnQgZnJhZ21lbnQ7CiAgICAgRnJhZ21lbnRSZWxhdGlvbiByZWxhdGlvblRv
UHJldmlvdXNGcmFnbWVudCA9IEZyYWdtZW50UmVsYXRpb246OlJpZ2h0bW9zdDsKQEAgLTY1NCw3
ICs2OTksNyBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBD
U1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvcgogICAgICAgICAgICAgaWYgKHJlbGF0
aW9uVG9QcmV2aW91c0ZyYWdtZW50ICE9IEZyYWdtZW50UmVsYXRpb246OlJpZ2h0bW9zdCkKICAg
ICAgICAgICAgICAgICBzdWJQb3NpdGlvbiA9IEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVu
dHM6Ok5vdFJpZ2h0bW9zdDsKIAotICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3Ry
aWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlwZSwgYWRkUHNldWRvQ2xhc3NUeXBlKCpzZWxl
Y3RvciwgZnJhZ21lbnQsIHNlbGVjdG9yQ29udGV4dCwgc3ViUG9zaXRpb24pKTsKKyAgICAgICAg
ICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5
cGUsIGFkZFBzZXVkb0NsYXNzVHlwZSgqc2VsZWN0b3IsIGZyYWdtZW50LCBzZWxlY3RvckNvbnRl
eHQsIHN1YlBvc2l0aW9uLCBzdGF0aWNWaXNpdGVkTWF0Y2hUeXBlLCBuZWVkc1Zpc2l0ZWRNYXRj
aFR5cGUpKTsKICAgICAgICAgICAgIGlmICghcHNldWRvQ2xhc3NPbmx5TWF0Y2hlc0xpbmtzSW5R
dWlya3NNb2RlKCpzZWxlY3RvcikpCiAgICAgICAgICAgICAgICAgZnJhZ21lbnQub25seU1hdGNo
ZXNMaW5rc0luUXVpcmtzTW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uVHlw
ZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGUgfHwgZnVuY3Rpb25UeXBlID09IEZ1bmN0
aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZykKQEAgLTcyOCw2ICs3NzMsOSBAQCBzdGF0aWMg
RnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNl
bGVjdG9yLCBTZWxlY3RvcgogICAgICAgICAgICAgaWYgKHNlbGVjdG9yQ29udGV4dCA9PSBTZWxl
Y3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpCiAgICAgICAgICAgICAgICAgcmVsYXRpb25GdW5j
dGlvblR5cGUgPSBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICAgICAg
ICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5
cGUsIHJlbGF0aW9uRnVuY3Rpb25UeXBlKTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgcmVs
YXRpb24gaXMgYWRqYWNlbnQsIGRpc2FibGUgOnZpc2l0ZWQgbWF0Y2guCisgICAgICAgICAgICBz
dGF0aWNWaXNpdGVkTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hEaXNh
YmxlZDsKICAgICAgICAgfQogCiAgICAgICAgIGZyYWdtZW50LnJlbGF0aW9uVG9MZWZ0RnJhZ21l
bnQgPSBmcmFnbWVudFJlbGF0aW9uRm9yU2VsZWN0b3JSZWxhdGlvbihyZWxhdGlvbik7CkBAIC0x
MTM0LDcgKzExODIsMTcgQEAgc3RhdGljIGJvb2wgcmVxdWlyZXNEZXNjZW5kYW50VGFpbChjb25z
dCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKICAgICByZXR1cm4gZnJhZ21lbnQubWF0Y2hp
bmdUYWdOYW1lQmFja3RyYWNraW5nQWN0aW9uID09IEJhY2t0cmFja2luZ0FjdGlvbjo6SnVtcFRv
RGVzY2VuZGFudFRhaWwgfHwgZnJhZ21lbnQubWF0Y2hpbmdQb3N0VGFnTmFtZUJhY2t0cmFja2lu
Z0FjdGlvbiA9PSBCYWNrdHJhY2tpbmdBY3Rpb246Okp1bXBUb0Rlc2NlbmRhbnRUYWlsIHx8IGZy
YWdtZW50LnRyYXZlcnNhbEJhY2t0cmFja2luZ0FjdGlvbiA9PSBCYWNrdHJhY2tpbmdBY3Rpb246
Okp1bXBUb0Rlc2NlbmRhbnRUYWlsOwogfQogCi12b2lkIGNvbXB1dGVCYWNrdHJhY2tpbmdJbmZv
cm1hdGlvbihTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIGJvb2wmIG5l
ZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCkKK3N0YXRpYyBib29sIGNhblVzZUJhY2t0cmFj
a2luZ1dpdGhvdXRUYWlsKEJhY2t0cmFja2luZ0FjdGlvbiBiYWNrdHJhY2tpbmdBY3Rpb24pCit7
CisgICAgcmV0dXJuIGJhY2t0cmFja2luZ0FjdGlvbiA9PSBCYWNrdHJhY2tpbmdBY3Rpb246Okp1
bXBUb0Rlc2NlbmRhbnRFbnRyeVBvaW50IHx8IGJhY2t0cmFja2luZ0FjdGlvbiA9PSBCYWNrdHJh
Y2tpbmdBY3Rpb246Okp1bXBUb0Rlc2NlbmRhbnRUcmVlV2Fsa2VyRW50cnlQb2ludDsKK30KKwor
c3RhdGljIGJvb2wgcmVxdWlyZXNSZXN0b3JpbmdWaXNpdGVkTWF0Y2hUeXBlVGFpbChjb25zdCBT
ZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKK3sKKyAgICByZXR1cm4gY2FuVXNlQmFja3RyYWNr
aW5nV2l0aG91dFRhaWwoZnJhZ21lbnQubWF0Y2hpbmdUYWdOYW1lQmFja3RyYWNraW5nQWN0aW9u
KSB8fCBjYW5Vc2VCYWNrdHJhY2tpbmdXaXRob3V0VGFpbChmcmFnbWVudC5tYXRjaGluZ1Bvc3RU
YWdOYW1lQmFja3RyYWNraW5nQWN0aW9uKSB8fCBjYW5Vc2VCYWNrdHJhY2tpbmdXaXRob3V0VGFp
bChmcmFnbWVudC50cmF2ZXJzYWxCYWNrdHJhY2tpbmdBY3Rpb24pOworfQorCit2b2lkIGNvbXB1
dGVCYWNrdHJhY2tpbmdJbmZvcm1hdGlvbihTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JG
cmFnbWVudHMsIGJvb2wgbmVlZHNWaXNpdGVkTWF0Y2hUeXBlLCBib29sJiBuZWVkc0FkamFjZW50
QmFja3RyYWNraW5nU3RhcnQpCiB7CiAgICAgYm9vbCBoYXNEZXNjZW5kYW50UmVsYXRpb25PblRo
ZVJpZ2h0ID0gZmFsc2U7CiAgICAgdW5zaWduZWQgYW5jZXN0b3JQb3NpdGlvblNpbmNlRGVzY2Vu
ZGFudFJlbGF0aW9uID0gMDsKQEAgLTExNDMsNiArMTIwMSw3IEBAIHZvaWQgY29tcHV0ZUJhY2t0
cmFja2luZ0luZm9ybWF0aW9uKFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50
cywgYm9vCiAKICAgICBib29sIG5lZWRzQWRqYWNlbnRUYWlsID0gZmFsc2U7CiAgICAgYm9vbCBu
ZWVkc0Rlc2NlbmRhbnRUYWlsID0gZmFsc2U7CisgICAgYm9vbCBuZWVkc1Jlc3RvcmluZ1Zpc2l0
ZWRNYXRjaFR5cGVUYWlsID0gZmFsc2U7CiAgICAgdW5zaWduZWQgc2F2ZURlc2NlbmRhbnRCYWNr
dHJhY2tpbmdTdGFydEZyYWdtZW50SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCk7CiAgICAgdW5zaWduZWQgc2F2ZUluZGlyZWN0QWRqYWNlbnRCYWNrdHJhY2tpbmdT
dGFydEZyYWdtZW50SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7
CiAKQEAgLTExNTEsNiArMTIxMCw5IEBAIHZvaWQgY29tcHV0ZUJhY2t0cmFja2luZ0luZm9ybWF0
aW9uKFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgYm9vCiAgICAgY29u
c3QgU2VsZWN0b3JGcmFnbWVudCogcHJldmlvdXNDaGlsZEZyYWdtZW50SW5DaGlsZENoYWluID0g
bnVsbHB0cjsKICAgICBjb25zdCBTZWxlY3RvckZyYWdtZW50KiBwcmV2aW91c0RpcmVjdEFkamFj
ZW50RnJhZ21lbnRJbkRpcmVjdEFkamFjZW50Q2hhaW4gPSBudWxscHRyOwogCisgICAgdW5zaWdu
ZWQgbmVlZHNWaXNpdGVkTWF0Y2hUeXBlTGFyZ2VzdEluZGV4ID0gMDsKKyAgICBjb25zdCBTZWxl
Y3RvckZyYWdtZW50KiBkZXNjZW5kYW50RW50cnlQb2ludEZyYWdtZW50ID0gbnVsbHB0cjsKKwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWxlY3RvckZyYWdtZW50cy5zaXplKCk7ICsr
aSkgewogICAgICAgICBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCA9IHNlbGVjdG9yRnJhZ21l
bnRzW2ldOwogCkBAIC0xMTY4LDEwICsxMjMwLDE5IEBAIHZvaWQgY29tcHV0ZUJhY2t0cmFja2lu
Z0luZm9ybWF0aW9uKFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgYm9v
CiAKICAgICAgICAgbmVlZHNBZGphY2VudFRhaWwgfD0gcmVxdWlyZXNBZGphY2VudFRhaWwoZnJh
Z21lbnQpOwogICAgICAgICBuZWVkc0Rlc2NlbmRhbnRUYWlsIHw9IHJlcXVpcmVzRGVzY2VuZGFu
dFRhaWwoZnJhZ21lbnQpOworICAgICAgICBpZiAobmVlZHNWaXNpdGVkTWF0Y2hUeXBlICYmIGRl
c2NlbmRhbnRFbnRyeVBvaW50RnJhZ21lbnQpCisgICAgICAgICAgICBuZWVkc1Jlc3RvcmluZ1Zp
c2l0ZWRNYXRjaFR5cGVUYWlsIHw9IHJlcXVpcmVzUmVzdG9yaW5nVmlzaXRlZE1hdGNoVHlwZVRh
aWwoZnJhZ21lbnQpOwogCiAgICAgICAgIC8vIEFkZCBjb2RlIGdlbmVyYXRpb24gZmxhZ3MuCi0g
ICAgICAgIGlmIChmcmFnbWVudC5yZWxhdGlvblRvTGVmdEZyYWdtZW50ICE9IEZyYWdtZW50UmVs
YXRpb246OkRlc2NlbmRhbnQgJiYgZnJhZ21lbnQucmVsYXRpb25Ub1JpZ2h0RnJhZ21lbnQgPT0g
RnJhZ21lbnRSZWxhdGlvbjo6RGVzY2VuZGFudCkKKyAgICAgICAgaWYgKGZyYWdtZW50LnVzZVZp
c2l0ZWRNYXRjaFR5cGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IG5lZWRzVmlz
aXRlZE1hdGNoVHlwZUxhcmdlc3RJbmRleDsgaiA8IGk7ICsraikKKyAgICAgICAgICAgICAgICBz
ZWxlY3RvckZyYWdtZW50c1tqXS5iYWNrdHJhY2tpbmdGbGFncyB8PSBCYWNrdHJhY2tpbmdGbGFn
OjpOZWVkc1RyYWNraW5nVmlzaXRlZE1hdGNoVHlwZTsKKyAgICAgICAgICAgIG5lZWRzVmlzaXRl
ZE1hdGNoVHlwZUxhcmdlc3RJbmRleCA9IGk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZyYWdt
ZW50LnJlbGF0aW9uVG9MZWZ0RnJhZ21lbnQgIT0gRnJhZ21lbnRSZWxhdGlvbjo6RGVzY2VuZGFu
dCAmJiBmcmFnbWVudC5yZWxhdGlvblRvUmlnaHRGcmFnbWVudCA9PSBGcmFnbWVudFJlbGF0aW9u
OjpEZXNjZW5kYW50KSB7CiAgICAgICAgICAgICBmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyB8
PSBCYWNrdHJhY2tpbmdGbGFnOjpEZXNjZW5kYW50RW50cnlQb2ludDsKKyAgICAgICAgICAgIGRl
c2NlbmRhbnRFbnRyeVBvaW50RnJhZ21lbnQgPSAmZnJhZ21lbnQ7CisgICAgICAgIH0KICAgICAg
ICAgaWYgKGZyYWdtZW50LnJlbGF0aW9uVG9MZWZ0RnJhZ21lbnQgPT0gRnJhZ21lbnRSZWxhdGlv
bjo6RGlyZWN0QWRqYWNlbnQgJiYgZnJhZ21lbnQucmVsYXRpb25Ub1JpZ2h0RnJhZ21lbnQgPT0g
RnJhZ21lbnRSZWxhdGlvbjo6SW5kaXJlY3RBZGphY2VudCkKICAgICAgICAgICAgIGZyYWdtZW50
LmJhY2t0cmFja2luZ0ZsYWdzIHw9IEJhY2t0cmFja2luZ0ZsYWc6OkluZGlyZWN0QWRqYWNlbnRF
bnRyeVBvaW50OwogICAgICAgICBpZiAoZnJhZ21lbnQucmVsYXRpb25Ub0xlZnRGcmFnbWVudCAh
PSBGcmFnbWVudFJlbGF0aW9uOjpEZXNjZW5kYW50ICYmIGZyYWdtZW50LnJlbGF0aW9uVG9SaWdo
dEZyYWdtZW50ID09IEZyYWdtZW50UmVsYXRpb246OkNoaWxkICYmIGlzRmlyc3RBbmNlc3Rvcihh
bmNlc3RvclBvc2l0aW9uU2luY2VEZXNjZW5kYW50UmVsYXRpb24pKSB7CkBAIC0xMTk1LDE0ICsx
MjY2LDI0IEBAIHZvaWQgY29tcHV0ZUJhY2t0cmFja2luZ0luZm9ybWF0aW9uKFNlbGVjdG9yRnJh
Z21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgYm9vCiAgICAgICAgIH0KICAgICAgICAgaWYg
KGZyYWdtZW50LnJlbGF0aW9uVG9MZWZ0RnJhZ21lbnQgPT0gRnJhZ21lbnRSZWxhdGlvbjo6RGVz
Y2VuZGFudCkgewogICAgICAgICAgICAgaWYgKG5lZWRzRGVzY2VuZGFudFRhaWwpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoZGVzY2VuZGFudEVudHJ5UG9pbnRGcmFnbWVudCk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHNhdmVEZXNjZW5kYW50QmFja3RyYWNraW5nU3RhcnRGcmFnbWVudElu
ZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CiAgICAgICAgICAg
ICAgICAgZnJhZ21lbnQuYmFja3RyYWNraW5nRmxhZ3MgfD0gQmFja3RyYWNraW5nRmxhZzo6RGVz
Y2VuZGFudFRhaWw7CisgICAgICAgICAgICAgICAgaWYgKGRlc2NlbmRhbnRFbnRyeVBvaW50RnJh
Z21lbnQtPmJhY2t0cmFja2luZ0ZsYWdzICYgQmFja3RyYWNraW5nRmxhZzo6TmVlZHNUcmFja2lu
Z1Zpc2l0ZWRNYXRjaFR5cGUpCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LmJhY2t0cmFj
a2luZ0ZsYWdzIHw9IEJhY2t0cmFja2luZ0ZsYWc6Ok5lZWRzUmVzdG9yaW5nVmlzaXRlZE1hdGNo
VHlwZUluRGVzY2VuZGFudFRhaWw7CiAgICAgICAgICAgICAgICAgc2VsZWN0b3JGcmFnbWVudHNb
c2F2ZURlc2NlbmRhbnRCYWNrdHJhY2tpbmdTdGFydEZyYWdtZW50SW5kZXhdLmJhY2t0cmFja2lu
Z0ZsYWdzIHw9IEJhY2t0cmFja2luZ0ZsYWc6OlNhdmVEZXNjZW5kYW50QmFja3RyYWNraW5nU3Rh
cnQ7CiAgICAgICAgICAgICAgICAgbmVlZHNEZXNjZW5kYW50VGFpbCA9IGZhbHNlOwogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHNhdmVEZXNjZW5kYW50QmFja3RyYWNraW5nU3Rh
cnRGcmFnbWVudEluZGV4OyBqIDw9IGk7ICsraikKICAgICAgICAgICAgICAgICAgICAgc2VsZWN0
b3JGcmFnbWVudHNbal0uYmFja3RyYWNraW5nRmxhZ3MgfD0gQmFja3RyYWNraW5nRmxhZzo6SW5D
aGFpbldpdGhEZXNjZW5kYW50VGFpbDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChu
ZWVkc1Jlc3RvcmluZ1Zpc2l0ZWRNYXRjaFR5cGVUYWlsKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGRlc2NlbmRhbnRFbnRyeVBvaW50RnJhZ21lbnQpOworICAgICAgICAgICAgICAgIGlmIChk
ZXNjZW5kYW50RW50cnlQb2ludEZyYWdtZW50LT5iYWNrdHJhY2tpbmdGbGFncyAmIEJhY2t0cmFj
a2luZ0ZsYWc6Ok5lZWRzVHJhY2tpbmdWaXNpdGVkTWF0Y2hUeXBlKQorICAgICAgICAgICAgICAg
ICAgICBmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyB8PSBCYWNrdHJhY2tpbmdGbGFnOjpSZXN0
b3JpbmdWaXNpdGVkTWF0Y2hUeXBlVGFpbDsKKyAgICAgICAgICAgICAgICBuZWVkc1Jlc3Rvcmlu
Z1Zpc2l0ZWRNYXRjaFR5cGVUYWlsID0gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBzYXZlRGVzY2VuZGFudEJhY2t0cmFja2luZ1N0YXJ0RnJhZ21lbnRJbmRleCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICAgICAgICAgIGRlc2NlbmRhbnRFbnRy
eVBvaW50RnJhZ21lbnQgPSBudWxscHRyOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTI3Nywx
OSArMTM1OCwzMiBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3Rv
ckNoZWNrZXIoKQogCiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVJlZ2lzdGVyKGVs
ZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOwogCi0gICAgU3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJl
bmNlIHRlbXBvcmFyeVN0YWNrQmFzZTsKKyAgICAvLyBSZW1lbWJlciB0aGUgc3RhY2sgYmFzZSBv
ZiB0aGUgdGVtcG9yYXJ5IHZhcmlhYmxlcy4KKyAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZl
cmVuY2UgdGVtcG9yYXJ5U3RhY2tCYXNlID0gbV9zdGFja0FsbG9jYXRvci5zdGFja1RvcCgpOwog
CiAgICAgaWYgKG1fZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6U2VsZWN0b3JDaGVja2Vy
V2l0aENoZWNraW5nQ29udGV4dCkKICAgICAgICAgbV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVy
ZW5jZSA9IG1fc3RhY2tBbGxvY2F0b3IucHVzaChjaGVja2luZ0NvbnRleHRSZWdpc3Rlcik7CiAK
LSAgICBpZiAobV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpCisgICAgLy8gQWxsb2Nh
dGUgdW5pbml0aWFsaXplZCBzdGFjayByZWZlcmVuY2VzCisgICAgaWYgKG1fbmVlZHNWaXNpdGVk
TWF0Y2hUeXBlKSB7CisgICAgICAgIGlmIChtX25lZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFy
dCkgeworICAgICAgICAgICAgU3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlVmVjdG9yIHJl
ZmVyZW5jZXMgPSBtX3N0YWNrQWxsb2NhdG9yLmFsbG9jYXRlVW5pbml0aWFsaXplZCgzKTsKKyAg
ICAgICAgICAgIG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCA9IHJlZmVyZW5jZXNbMF07Cisg
ICAgICAgICAgICBtX2JhY2t0cmFja2luZ1Zpc2l0ZWRNYXRjaFR5cGUgPSByZWZlcmVuY2VzWzFd
OworICAgICAgICAgICAgbV92aXNpdGVkTWF0Y2hUeXBlID0gcmVmZXJlbmNlc1syXTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZVZl
Y3RvciByZWZlcmVuY2VzID0gbV9zdGFja0FsbG9jYXRvci5hbGxvY2F0ZVVuaW5pdGlhbGl6ZWQo
Mik7CisgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1Zpc2l0ZWRNYXRjaFR5cGUgPSByZWZlcmVu
Y2VzWzBdOworICAgICAgICAgICAgbV92aXNpdGVkTWF0Y2hUeXBlID0gcmVmZXJlbmNlc1sxXTsK
KyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBvZmZzZXRUb1Zpc2l0ZWRNYXRjaFR5cGUgPSBt
X3N0YWNrQWxsb2NhdG9yLm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV92aXNpdGVkTWF0Y2hUeXBl
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RvcmUzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigw
KSwgQXNzZW1ibGVyOjpBZGRyZXNzKEFzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9m
ZnNldFRvVmlzaXRlZE1hdGNoVHlwZSkpOworICAgIH0gZWxzZSBpZiAobV9uZWVkc0FkamFjZW50
QmFja3RyYWNraW5nU3RhcnQpCiAgICAgICAgIG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCA9
IG1fc3RhY2tBbGxvY2F0b3IuYWxsb2NhdGVVbmluaXRpYWxpemVkKCk7CiAKLSAgICAvLyBSZW1l
bWJlciB0aGUgc3RhY2sgYmFzZSBvZiB0aGUgdGVtcG9yYXJ5IHZhcmlhYmxlcy4KLSAgICBpZiAo
bV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZS5pc1ZhbGlkKCkpCi0gICAgICAgIHRlbXBv
cmFyeVN0YWNrQmFzZSA9IG1fY2hlY2tpbmdDb250ZXh0U3RhY2tSZWZlcmVuY2U7Ci0gICAgZWxz
ZSBpZiAobV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpCi0gICAgICAgIHRlbXBvcmFy
eVN0YWNrQmFzZSA9IG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydDsKKyAgICAvLyBJbnZhbGlk
YXRlIHRlbXBvcmFyeVN0YWNrQmFzZSBpZiB0aGVyZSdzIG5vIHRlbXBvcmFyeSB2YXJpYWJsZXMu
CisgICAgaWYgKHRlbXBvcmFyeVN0YWNrQmFzZSA9PSBtX3N0YWNrQWxsb2NhdG9yLnN0YWNrVG9w
KCkpCisgICAgICAgIHRlbXBvcmFyeVN0YWNrQmFzZSA9IFN0YWNrQWxsb2NhdG9yOjpTdGFja1Jl
ZmVyZW5jZSgpOwogCiAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CiAKQEAg
LTEyOTcsNyArMTM5MSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNl
bGVjdG9yQ2hlY2tlcigpCiAgICAgICAgIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50
ID0gbV9zZWxlY3RvckZyYWdtZW50c1tpXTsKICAgICAgICAgc3dpdGNoIChmcmFnbWVudC5yZWxh
dGlvblRvUmlnaHRGcmFnbWVudCkgewogICAgICAgICBjYXNlIEZyYWdtZW50UmVsYXRpb246OlJp
Z2h0bW9zdDoKLSAgICAgICAgICAgIGdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKGZhaWx1cmVDYXNl
cywgZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CisgICAgICAgICAgICBnZW5lcmF0ZVJpZ2h0bW9z
dFRyZWVXYWxrZXIoZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBGcmFnbWVudFJlbGF0aW9uOjpEZXNjZW5kYW50OgogICAgICAgICAgICAg
Z2VuZXJhdGVBbmNlc3RvclRyZWVXYWxrZXIoZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CkBAIC0x
MzEyLDcgKzE0MDYsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxl
Y3RvckNoZWNrZXIoKQogICAgICAgICAgICAgZ2VuZXJhdGVJbmRpcmVjdEFkamFjZW50VHJlZVdh
bGtlcihmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGdlbmVyYXRlQmFja3RyYWNraW5nVGFpbHNJZk5lZWRlZChmYWlsdXJlQ2Fz
ZXMsIGZyYWdtZW50KTsKKyAgICAgICAgZ2VuZXJhdGVCYWNrdHJhY2tpbmdUYWlsc0lmTmVlZGVk
KGZyYWdtZW50KTsKICAgICB9CiAKICAgICBpZiAobV9mdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25U
eXBlOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KSB7CkBAIC0xMzcyLDYgKzE0
NjYsMTMgQEAgc3RhdGljIGlubGluZSBBc3NlbWJsZXI6Okp1bXAgdGVzdElzRWxlbWVudEZsYWdP
bk5vZGUoQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24KICAgICByZXR1cm4gYXNzZW1ibGVyLmJy
YW5jaFRlc3QzMihjb25kaXRpb24sIEFzc2VtYmxlcjo6QWRkcmVzcyhub2RlQWRkcmVzcywgTm9k
ZTo6bm9kZUZsYWdzTWVtb3J5T2Zmc2V0KCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOb2Rl
OjpmbGFnSXNFbGVtZW50KCkpKTsKIH0KIAordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlUmlnaHRtb3N0VHJlZVdhbGtlcihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQoreworICAgIGdlbmVyYXRlRWxl
bWVudE1hdGNoaW5nKGZhaWx1cmVDYXNlcywgZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CisgICAg
aWYgKGZyYWdtZW50LmJhY2t0cmFja2luZ0ZsYWdzICYgQmFja3RyYWNraW5nRmxhZzo6TmVlZHNU
cmFja2luZ1Zpc2l0ZWRNYXRjaFR5cGUpCisgICAgICAgIHVwZGF0ZVZpc2l0ZWRNYXRjaFR5cGUo
KTsKK30KKwogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlV2Fsa1RvUGFyZW50
Tm9kZShBc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFyZ2V0UmVnaXN0ZXIpCiB7CiAgICAgbV9hc3Nl
bWJsZXIubG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3MoZWxlbWVudEFkZHJlc3NSZWdpc3Rlciwg
Tm9kZTo6cGFyZW50Tm9kZU1lbW9yeU9mZnNldCgpKSwgdGFyZ2V0UmVnaXN0ZXIpOwpAQCAtMTQw
Myw2ICsxNTA0LDggQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlUGFyZW50
RWxlbWVudFRyZWVXYWxrZXIoQXNzZW1ibGVyOjpKdW1wTGlzdCYKICAgICAgICAgbV9kZXNjZW5k
YW50QmFja3RyYWNraW5nU3RhcnQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0
ZXIoKTsKICAgICAgICAgbV9hc3NlbWJsZXIubW92ZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBt
X2Rlc2NlbmRhbnRCYWNrdHJhY2tpbmdTdGFydCk7CiAgICAgfQorICAgIGlmIChmcmFnbWVudC5i
YWNrdHJhY2tpbmdGbGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6Ok5lZWRzVHJhY2tpbmdWaXNpdGVk
TWF0Y2hUeXBlKQorICAgICAgICB1cGRhdGVWaXNpdGVkTWF0Y2hUeXBlKCk7CiB9CiAKIHZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUFuY2VzdG9yVHJlZVdhbGtlcihBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdt
ZW50KQpAQCAtMTQxMSw3ICsxNTE0LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlQW5jZXN0b3JUcmVlV2Fsa2VyKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWwKICAgICBB
c3NlbWJsZXI6OkxhYmVsIGxvb3BTdGFydChtX2Fzc2VtYmxlci5sYWJlbCgpKTsKIAogICAgIGlm
IChmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6OkRlc2NlbmRh
bnRFbnRyeVBvaW50KQotICAgICAgICBtX2Rlc2NlbmRhbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5n
UG9pbnQgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOworICAgICAgICBtX2Rlc2NlbmRhbnRUcmVlV2Fs
a2VyRW50cnlQb2ludCA9IG1fYXNzZW1ibGVyLmxhYmVsKCk7CiAKICAgICBnZW5lcmF0ZVdhbGtU
b1BhcmVudEVsZW1lbnQoZmFpbHVyZUNhc2VzLCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKIApA
QCAtMTQyMSw2ICsxNTI0LDEyIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZUFuY2VzdG9yVHJlZVdhbGtlcihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsCiAgICAgQXNzZW1i
bGVyOjpKdW1wTGlzdCBtYXRjaGluZ0ZhaWx1cmVDYXNlczsKICAgICBnZW5lcmF0ZUVsZW1lbnRN
YXRjaGluZyhtYXRjaGluZ0ZhaWx1cmVDYXNlcywgbWF0Y2hpbmdGYWlsdXJlQ2FzZXMsIGZyYWdt
ZW50KTsKICAgICBtYXRjaGluZ0ZhaWx1cmVDYXNlcy5saW5rVG8obG9vcFN0YXJ0LCAmbV9hc3Nl
bWJsZXIpOworCisgICAgaWYgKGZyYWdtZW50LmJhY2t0cmFja2luZ0ZsYWdzICYgQmFja3RyYWNr
aW5nRmxhZzo6TmVlZHNUcmFja2luZ1Zpc2l0ZWRNYXRjaFR5cGUpIHsKKyAgICAgICAgLy8gU2F2
ZSBjdXJyZW50IHZpc2l0ZWRNYXRjaFR5cGUgdG8gYmFja3RyYWNraW5nVmlzaXRlZE1hdGNoVHlw
ZS4KKyAgICAgICAgZ2VuZXJhdGVTYXZlVmlzaXRlZE1hdGNoVHlwZSgpOworICAgICAgICB1cGRh
dGVWaXNpdGVkTWF0Y2hUeXBlKCk7CisgICAgfQogfQogCiBpbmxpbmUgdm9pZCBTZWxlY3RvckNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlV2Fsa1RvTmV4dEFkamFjZW50RWxlbWVudChBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCB3b3JrUmVnaXN0
ZXIpCkBAIC0xNDk0LDcgKzE2MDMsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVJbmRpcmVjdEFkamFjZW50VHJlZVdhbGtlcihBc3NlbWJsZXI6Okp1bXBMaQogICAgIEFz
c2VtYmxlcjo6TGFiZWwgbG9vcFN0YXJ0KG1fYXNzZW1ibGVyLmxhYmVsKCkpOwogCiAgICAgaWYg
KGZyYWdtZW50LmJhY2t0cmFja2luZ0ZsYWdzICYgQmFja3RyYWNraW5nRmxhZzo6SW5kaXJlY3RB
ZGphY2VudEVudHJ5UG9pbnQpCi0gICAgICAgIG1faW5kaXJlY3RBZGphY2VudFRyZWVXYWxrZXJC
YWNrdHJhY2tpbmdQb2ludCA9IG1fYXNzZW1ibGVyLmxhYmVsKCk7CisgICAgICAgIG1faW5kaXJl
Y3RBZGphY2VudFRyZWVXYWxrZXJFbnRyeVBvaW50ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKIAog
ICAgIGdlbmVyYXRlV2Fsa1RvUHJldmlvdXNBZGphY2VudChmYWlsdXJlQ2FzZXMsIGZyYWdtZW50
KTsKIApAQCAtMTU4Miw2ICsxNjkxLDIwIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjps
b2FkQ2hlY2tpbmdDb250ZXh0KEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvCiAgICAg
cmV0dXJuIGJyYW5jaE9uUmVzb2x2aW5nTW9kZShBc3NlbWJsZXI6Ok5vdEVxdWFsLCBTZWxlY3Rv
ckNoZWNrZXI6Ok1vZGU6OlJlc29sdmluZ1N0eWxlLCBjaGVja2luZ0NvbnRleHQpOwogfQogCitB
c3NlbWJsZXI6Okp1bXAgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpqdW1wSWZWaXNpdGVkTWF0Y2hU
eXBlSXNEaXNhYmxlZCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9uZWVkc1Zpc2l0ZWRNYXRj
aFR5cGUpOworICAgIHVuc2lnbmVkIG9mZnNldFRvVmlzaXRlZE1hdGNoVHlwZSA9IG1fc3RhY2tB
bGxvY2F0b3Iub2Zmc2V0VG9TdGFja1JlZmVyZW5jZShtX3Zpc2l0ZWRNYXRjaFR5cGUpOworICAg
IHJldHVybiBtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpOb25aZXJvLCBBc3Nl
bWJsZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9W
aXNpdGVkTWF0Y2hUeXBlKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTm9kZTo6ZmxhZ0lzTGlu
aygpKSk7Cit9CisKK0Fzc2VtYmxlcjo6SnVtcCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omp1bXBJ
ZlZpc2l0ZWRNYXRjaFR5cGVJc0VuYWJsZWQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fbmVl
ZHNWaXNpdGVkTWF0Y2hUeXBlKTsKKyAgICB1bnNpZ25lZCBvZmZzZXRUb1Zpc2l0ZWRNYXRjaFR5
cGUgPSBtX3N0YWNrQWxsb2NhdG9yLm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV92aXNpdGVkTWF0
Y2hUeXBlKTsKKyAgICByZXR1cm4gbV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6
WmVybywgQXNzZW1ibGVyOjpBZGRyZXNzKEFzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIs
IG9mZnNldFRvVmlzaXRlZE1hdGNoVHlwZSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6
OmZsYWdJc0xpbmsoKSkpOworfQorCiBzdGF0aWMgdm9pZCBnZXREb2N1bWVudChBc3NlbWJsZXIm
IGFzc2VtYmxlciwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQsIEFzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBvdXRwdXQpCiB7CiAgICAgYXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRy
ZXNzKGVsZW1lbnQsIE5vZGU6OnRyZWVTY29wZU1lbW9yeU9mZnNldCgpKSwgb3V0cHV0KTsKQEAg
LTE3MzIsNiArMTg1NSwzOCBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6bW9kdWxvSXNa
ZXJvKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZQogICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQobW9kdWxvKEFzc2VtYmxlcjo6Tm9uWmVybywgaW5wdXREaXZpZGVuZCwgZGl2
aXNvcikpOwogfQogCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTYXZlVmlz
aXRlZE1hdGNoVHlwZSgpCit7CisgICAgTG9jYWxSZWdpc3RlciBzY3JhdGNoUmVnaXN0ZXIobV9y
ZWdpc3RlckFsbG9jYXRvcik7CisgICAgdW5zaWduZWQgb2Zmc2V0VG9WaXNpdGVkTWF0Y2hUeXBl
ID0gbV9zdGFja0FsbG9jYXRvci5vZmZzZXRUb1N0YWNrUmVmZXJlbmNlKG1fdmlzaXRlZE1hdGNo
VHlwZSk7CisgICAgdW5zaWduZWQgb2Zmc2V0VG9CYWNrdHJhY2tpbmdWaXNpdGVkTWF0Y2hUeXBl
ID0gbV9zdGFja0FsbG9jYXRvci5vZmZzZXRUb1N0YWNrUmVmZXJlbmNlKG1fYmFja3RyYWNraW5n
VmlzaXRlZE1hdGNoVHlwZSk7CisgICAgbV9hc3NlbWJsZXIubG9hZDMyKEFzc2VtYmxlcjo6QWRk
cmVzcyhBc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBvZmZzZXRUb1Zpc2l0ZWRNYXRj
aFR5cGUpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgIG1fYXNzZW1ibGVyLnN0b3JlMzIoc2NyYXRj
aFJlZ2lzdGVyLCBBc3NlbWJsZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlciwgb2Zmc2V0VG9CYWNrdHJhY2tpbmdWaXNpdGVkTWF0Y2hUeXBlKSk7Cit9CisKK3ZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVJlc3RvcmVWaXNpdGVkTWF0Y2hUeXBlKCkK
K3sKKyAgICBMb2NhbFJlZ2lzdGVyIHNjcmF0Y2hSZWdpc3RlcihtX3JlZ2lzdGVyQWxsb2NhdG9y
KTsKKyAgICB1bnNpZ25lZCBvZmZzZXRUb1Zpc2l0ZWRNYXRjaFR5cGUgPSBtX3N0YWNrQWxsb2Nh
dG9yLm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV92aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICB1bnNp
Z25lZCBvZmZzZXRUb0JhY2t0cmFja2luZ1Zpc2l0ZWRNYXRjaFR5cGUgPSBtX3N0YWNrQWxsb2Nh
dG9yLm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV9iYWNrdHJhY2tpbmdWaXNpdGVkTWF0Y2hUeXBl
KTsKKyAgICBtX2Fzc2VtYmxlci5sb2FkMzIoQXNzZW1ibGVyOjpBZGRyZXNzKEFzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRvQmFja3RyYWNraW5nVmlzaXRlZE1hdGNoVHlw
ZSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgbV9hc3NlbWJsZXIuc3RvcmUzMihzY3JhdGNoUmVn
aXN0ZXIsIEFzc2VtYmxlcjo6QWRkcmVzcyhBc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBvZmZzZXRUb1Zpc2l0ZWRNYXRjaFR5cGUpKTsKK30KKwordm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OnVwZGF0ZVZpc2l0ZWRNYXRjaFR5cGUoKQoreworICAgIHVuc2lnbmVkIG9mZnNldFRv
VmlzaXRlZE1hdGNoVHlwZSA9IG1fc3RhY2tBbGxvY2F0b3Iub2Zmc2V0VG9TdGFja1JlZmVyZW5j
ZShtX3Zpc2l0ZWRNYXRjaFR5cGUpOworI2lmIENQVShYODZfNjQpCisgICAgTG9jYWxSZWdpc3Rl
ciBmbGFnUmVnaXN0ZXIobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAgbV9hc3NlbWJsZXIubG9h
ZDMyKEFzc2VtYmxlcjo6QWRkcmVzcyhlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBOb2RlOjpub2Rl
RmxhZ3NNZW1vcnlPZmZzZXQoKSksIGZsYWdSZWdpc3Rlcik7CisgICAgbV9hc3NlbWJsZXIub3Iz
MihmbGFnUmVnaXN0ZXIsIEFzc2VtYmxlcjo6QWRkcmVzcyhBc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBvZmZzZXRUb1Zpc2l0ZWRNYXRjaFR5cGUpKTsKKyNlbHNlCisgICAgQXNzZW1i
bGVyOjpKdW1wIGlzTm90TGluayA9IG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6
Olplcm8sIEFzc2VtYmxlcjo6QWRkcmVzcyhlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBOb2RlOjpu
b2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZs
YWdJc0xpbmsoKSkpOworICAgIG1fYXNzZW1ibGVyLnN0b3JlMzIoQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoTm9kZTo6ZmxhZ0lzTGluaygpKSwgQXNzZW1ibGVyOjpBZGRyZXNzKEFzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRvVmlzaXRlZE1hdGNoVHlwZSkpOworICAgIGlz
Tm90TGluay5saW5rKCZtX2Fzc2VtYmxlcik7CisjZW5kaWYKK30KKwogc3RhdGljIHZvaWQgc2V0
Tm9kZUZsYWcoQXNzZW1ibGVyJiBhc3NlbWJsZXIsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVt
ZW50QWRkcmVzcywgaW50MzJfdCBmbGFnKQogewogICAgIGFzc2VtYmxlci5vcjMyKEFzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKGZsYWcpLCBBc3NlbWJsZXI6OkFkZHJlc3MoZWxlbWVudEFkZHJlc3Ms
IE5vZGU6Om5vZGVGbGFnc01lbW9yeU9mZnNldCgpKSk7CkBAIC0xNzk3LDE5ICsxOTUyLDE5IEBA
IHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpsaW5rRmFpbHVyZXMoQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZ2xvYmFsRmFpbHVyZUNhc2VzCiAgICAgICAgIGdsb2JhbEZhaWx1cmVDYXNlcy5hcHBl
bmQobG9jYWxGYWlsdXJlQ2FzZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEJhY2t0cmFj
a2luZ0FjdGlvbjo6SnVtcFRvRGVzY2VuZGFudEVudHJ5UG9pbnQ6Ci0gICAgICAgIGxvY2FsRmFp
bHVyZUNhc2VzLmxpbmtUbyhtX2Rlc2NlbmRhbnRFbnRyeVBvaW50LCAmbV9hc3NlbWJsZXIpOwor
ICAgICAgICBtX2Rlc2NlbmRhbnRGYWlsdXJlQ2FzZXMuYXBwZW5kKGxvY2FsRmFpbHVyZUNhc2Vz
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBCYWNrdHJhY2tpbmdBY3Rpb246Okp1bXBUb0Rl
c2NlbmRhbnRUcmVlV2Fsa2VyRW50cnlQb2ludDoKLSAgICAgICAgbG9jYWxGYWlsdXJlQ2FzZXMu
bGlua1RvKG1fZGVzY2VuZGFudFRyZWVXYWxrZXJCYWNrdHJhY2tpbmdQb2ludCwgJm1fYXNzZW1i
bGVyKTsKKyAgICAgICAgbV9kZXNjZW5kYW50VHJlZVdhbGtlckZhaWx1cmVDYXNlcy5hcHBlbmQo
bG9jYWxGYWlsdXJlQ2FzZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEJhY2t0cmFja2lu
Z0FjdGlvbjo6SnVtcFRvRGVzY2VuZGFudFRhaWw6Ci0gICAgICAgIG1fZGVzY2VuZGFudEJhY2t0
cmFja2luZ0ZhaWx1cmVDYXNlcy5hcHBlbmQobG9jYWxGYWlsdXJlQ2FzZXMpOworICAgICAgICBt
X2Rlc2NlbmRhbnRUYWlsRmFpbHVyZUNhc2VzLmFwcGVuZChsb2NhbEZhaWx1cmVDYXNlcyk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQmFja3RyYWNraW5nQWN0aW9uOjpKdW1wVG9JbmRpcmVj
dEFkamFjZW50RW50cnlQb2ludDoKICAgICAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlua1RvKG1f
aW5kaXJlY3RBZGphY2VudEVudHJ5UG9pbnQsICZtX2Fzc2VtYmxlcik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQmFja3RyYWNraW5nQWN0aW9uOjpKdW1wVG9JbmRpcmVjdEFkamFjZW50VHJl
ZVdhbGtlckVudHJ5UG9pbnQ6Ci0gICAgICAgIGxvY2FsRmFpbHVyZUNhc2VzLmxpbmtUbyhtX2lu
ZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9pbnQsICZtX2Fzc2VtYmxlcik7
CisgICAgICAgIGxvY2FsRmFpbHVyZUNhc2VzLmxpbmtUbyhtX2luZGlyZWN0QWRqYWNlbnRUcmVl
V2Fsa2VyRW50cnlQb2ludCwgJm1fYXNzZW1ibGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBCYWNrdHJhY2tpbmdBY3Rpb246Okp1bXBUb0RpcmVjdEFkamFjZW50VGFpbDoKICAgICAgICAg
bV9hZGphY2VudEJhY2t0cmFja2luZ0ZhaWx1cmVDYXNlcy5hcHBlbmQobG9jYWxGYWlsdXJlQ2Fz
ZXMpOwpAQCAtMTgyNywzMiArMTk4Miw1MyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVBZGphY2VudEJhY2t0cmFja2luZ1RhaWwoKQogICAgIG1fYXNzZW1ibGVyLmp1bXAo
bV9pbmRpcmVjdEFkamFjZW50RW50cnlQb2ludCk7CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZURlc2NlbmRhbnRCYWNrdHJhY2tpbmdUYWlsKCkKK3ZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZURlc2NlbmRhbnRCYWNrdHJhY2tpbmdUYWlsKGNvbnN0
IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewotICAgIG1fZGVzY2VuZGFudEJhY2t0cmFj
a2luZ0ZhaWx1cmVDYXNlcy5saW5rKCZtX2Fzc2VtYmxlcik7Ci0gICAgbV9kZXNjZW5kYW50QmFj
a3RyYWNraW5nRmFpbHVyZUNhc2VzLmNsZWFyKCk7CisgICAgbV9kZXNjZW5kYW50VGFpbEZhaWx1
cmVDYXNlcy5saW5rKCZtX2Fzc2VtYmxlcik7CisgICAgbV9kZXNjZW5kYW50VGFpbEZhaWx1cmVD
YXNlcy5jbGVhcigpOwogICAgIG1fYXNzZW1ibGVyLm1vdmUobV9kZXNjZW5kYW50QmFja3RyYWNr
aW5nU3RhcnQsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOwogICAgIG1fcmVnaXN0ZXJBbGxvY2F0
b3IuZGVhbGxvY2F0ZVJlZ2lzdGVyKG1fZGVzY2VuZGFudEJhY2t0cmFja2luZ1N0YXJ0KTsKKyAg
ICBpZiAoZnJhZ21lbnQuYmFja3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpOZWVk
c1Jlc3RvcmluZ1Zpc2l0ZWRNYXRjaFR5cGVJbkRlc2NlbmRhbnRUYWlsKQorICAgICAgICBnZW5l
cmF0ZVJlc3RvcmVWaXNpdGVkTWF0Y2hUeXBlKCk7CiAgICAgbV9hc3NlbWJsZXIuanVtcChtX2Rl
c2NlbmRhbnRFbnRyeVBvaW50KTsKIH0KIAotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlQmFja3RyYWNraW5nVGFpbHNJZk5lZWRlZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQordm9pZCBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlUmVzdG9yaW5nVmlzaXRlZE1hdGNoVHlwZVRhaWwoKQog
ewotICAgIGlmIChmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6
OkRpcmVjdEFkamFjZW50VGFpbCAmJiBmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIEJhY2t0
cmFja2luZ0ZsYWc6OkRlc2NlbmRhbnRUYWlsKSB7Ci0gICAgICAgIEFzc2VtYmxlcjo6SnVtcCBu
b3JtYWxDYXNlID0gbV9hc3NlbWJsZXIuanVtcCgpOwotICAgICAgICBnZW5lcmF0ZUFkamFjZW50
QmFja3RyYWNraW5nVGFpbCgpOwotICAgICAgICBnZW5lcmF0ZURlc2NlbmRhbnRCYWNrdHJhY2tp
bmdUYWlsKCk7Ci0gICAgICAgIG5vcm1hbENhc2UubGluaygmbV9hc3NlbWJsZXIpOwotICAgIH0g
ZWxzZSBpZiAoZnJhZ21lbnQuYmFja3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpE
aXJlY3RBZGphY2VudFRhaWwpIHsKLSAgICAgICAgQXNzZW1ibGVyOjpKdW1wIG5vcm1hbENhc2Ug
PSBtX2Fzc2VtYmxlci5qdW1wKCk7Ci0gICAgICAgIGdlbmVyYXRlQWRqYWNlbnRCYWNrdHJhY2tp
bmdUYWlsKCk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuanVtcCgp
KTsKLSAgICAgICAgbm9ybWFsQ2FzZS5saW5rKCZtX2Fzc2VtYmxlcik7Ci0gICAgfSBlbHNlIGlm
IChmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6OkRlc2NlbmRh
bnRUYWlsKSB7CisgICAgaWYgKCFtX2Rlc2NlbmRhbnRGYWlsdXJlQ2FzZXMuZW1wdHkoKSkgewor
ICAgICAgICBtX2Rlc2NlbmRhbnRGYWlsdXJlQ2FzZXMubGluaygmbV9hc3NlbWJsZXIpOworICAg
ICAgICBnZW5lcmF0ZVJlc3RvcmVWaXNpdGVkTWF0Y2hUeXBlKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmp1bXAobV9kZXNjZW5kYW50RW50cnlQb2ludCk7CisgICAgfQorICAgIGlmICghbV9kZXNj
ZW5kYW50VHJlZVdhbGtlckZhaWx1cmVDYXNlcy5lbXB0eSgpKSB7CisgICAgICAgIG1fZGVzY2Vu
ZGFudFRyZWVXYWxrZXJGYWlsdXJlQ2FzZXMubGluaygmbV9hc3NlbWJsZXIpOworICAgICAgICBn
ZW5lcmF0ZVJlc3RvcmVWaXNpdGVkTWF0Y2hUeXBlKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmp1
bXAobV9kZXNjZW5kYW50VHJlZVdhbGtlckVudHJ5UG9pbnQpOworICAgIH0KK30KKworc3RhdGlj
IGJvb2wgbmVlZHNCYWNrdHJhY2tpbmdUYWlsKGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdt
ZW50KQoreworICAgIHJldHVybiBmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIChCYWNrdHJh
Y2tpbmdGbGFnOjpEaXJlY3RBZGphY2VudFRhaWwgfCBCYWNrdHJhY2tpbmdGbGFnOjpEZXNjZW5k
YW50VGFpbCB8IEJhY2t0cmFja2luZ0ZsYWc6OlJlc3RvcmluZ1Zpc2l0ZWRNYXRjaFR5cGVUYWls
KTsKK30KKwordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFja3RyYWNraW5n
VGFpbHNJZk5lZWRlZChjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKK3sKKyAgICBp
ZiAobmVlZHNCYWNrdHJhY2tpbmdUYWlsKGZyYWdtZW50KSkgewogICAgICAgICBBc3NlbWJsZXI6
Okp1bXAgbm9ybWFsQ2FzZSA9IG1fYXNzZW1ibGVyLmp1bXAoKTsKLSAgICAgICAgZ2VuZXJhdGVE
ZXNjZW5kYW50QmFja3RyYWNraW5nVGFpbCgpOworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja3Ry
YWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpEaXJlY3RBZGphY2VudFRhaWwpCisgICAg
ICAgICAgICBnZW5lcmF0ZUFkamFjZW50QmFja3RyYWNraW5nVGFpbCgpOworICAgICAgICBpZiAo
ZnJhZ21lbnQuYmFja3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpEZXNjZW5kYW50
VGFpbCkKKyAgICAgICAgICAgIGdlbmVyYXRlRGVzY2VuZGFudEJhY2t0cmFja2luZ1RhaWwoZnJh
Z21lbnQpOworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJh
Y2tpbmdGbGFnOjpSZXN0b3JpbmdWaXNpdGVkTWF0Y2hUeXBlVGFpbCkKKyAgICAgICAgICAgIGdl
bmVyYXRlUmVzdG9yaW5nVmlzaXRlZE1hdGNoVHlwZVRhaWwoKTsKICAgICAgICAgbm9ybWFsQ2Fz
ZS5saW5rKCZtX2Fzc2VtYmxlcik7CiAgICAgfQorCisgICAgaWYgKCFtX2Rlc2NlbmRhbnRGYWls
dXJlQ2FzZXMuZW1wdHkoKSkKKyAgICAgICAgbV9kZXNjZW5kYW50RmFpbHVyZUNhc2VzLmxpbmtU
byhtX2Rlc2NlbmRhbnRFbnRyeVBvaW50LCAmbV9hc3NlbWJsZXIpOworICAgIGlmICghbV9kZXNj
ZW5kYW50VHJlZVdhbGtlckZhaWx1cmVDYXNlcy5lbXB0eSgpKQorICAgICAgICBtX2Rlc2NlbmRh
bnRUcmVlV2Fsa2VyRmFpbHVyZUNhc2VzLmxpbmtUbyhtX2Rlc2NlbmRhbnRUcmVlV2Fsa2VyRW50
cnlQb2ludCwgJm1fYXNzZW1ibGVyKTsKIH0KIAogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6
OmdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoaW5nVGFn
TmFtZUZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpKdW1wTGlzdCYgbWF0Y2hpbmdQb3N0VGFnTmFt
ZUZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCkBAIC0xODYw
LDggKzIwMzYsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50
TWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgbWF0Y2hpbgogICAgIGlmIChmcmFnbWVudC50
YWdOYW1lKQogICAgICAgICBnZW5lcmF0ZUVsZW1lbnRIYXNUYWdOYW1lKG1hdGNoaW5nVGFnTmFt
ZUZhaWx1cmVDYXNlcywgKihmcmFnbWVudC50YWdOYW1lKSk7CiAKLSAgICBpZiAoZnJhZ21lbnQu
cHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rKSkKLSAg
ICAgICAgZ2VuZXJhdGVFbGVtZW50SXNMaW5rKG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2Fz
ZXMpOworICAgIGdlbmVyYXRlRWxlbWVudExpbmtNYXRjaGluZyhtYXRjaGluZ1Bvc3RUYWdOYW1l
RmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CiAKICAgICBpZiAoZnJhZ21lbnQucHNldWRvQ2xhc3Nl
cy5jb250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NSb290KSkKICAgICAgICAgZ2VuZXJh
dGVFbGVtZW50SXNSb290KG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMpOwpAQCAtMTkx
Nyw2ICsyMDkyLDE2IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1l
bnREYXRhTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpCiAgICAgICAgIGdlbmVyYXRl
RWxlbWVudEF0dHJpYnV0ZXNNYXRjaGluZyhmYWlsdXJlQ2FzZXMsIGVsZW1lbnREYXRhQWRkcmVz
cywgZnJhZ21lbnQpOwogfQogCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVF
bGVtZW50TGlua01hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29u
c3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit7CisgICAgYm9vbCBjb250YWluc1BzZXVk
b0NsYXNzTGluayA9IGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzTGluaykgfHwgZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnlMaW5rKTsKKyAgICBib29sIGNvbnRhaW5zUHNldWRvQ2xh
c3NWaXNpdGVkID0gZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NWaXNpdGVkKTsKKyAgICBpZiAoY29udGFpbnNQc2V1ZG9DbGFzc0xpbmsgfHwg
Y29udGFpbnNQc2V1ZG9DbGFzc1Zpc2l0ZWQpCisgICAgICAgIGdlbmVyYXRlRWxlbWVudElzTGlu
ayhmYWlsdXJlQ2FzZXMpOworICAgIGlmIChjb250YWluc1BzZXVkb0NsYXNzVmlzaXRlZCkKKyAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChqdW1wSWZWaXNpdGVkTWF0Y2hUeXBlSXNEaXNhYmxl
ZCgpKTsKK30KKwogc3RhdGljIGlubGluZSBBc3NlbWJsZXI6Okp1bXAgdGVzdElzSFRNTEZsYWdP
bk5vZGUoQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uLCBBc3NlbWJsZXImIGFz
c2VtYmxlciwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIG5vZGVBZGRyZXNzKQogewogICAgIHJldHVy
biBhc3NlbWJsZXIuYnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgQXNzZW1ibGVyOjpBZGRyZXNzKG5v
ZGVBZGRyZXNzLCBOb2RlOjpub2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKE5vZGU6OmZsYWdJc0hUTUwoKSkpOwpAQCAtMjgwOSw2ICsyOTk0LDExIEBAIHZv
aWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRNYXRjaGVzTm90UHNldWRv
Q2xhc3MoQXNzZW1ibGVyOjpKdW1wCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBzdWJGcmFnbWVu
dCA6IGZyYWdtZW50Lm5vdEZpbHRlcnMpIHsKICAgICAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBs
b2NhbEZhaWx1cmVDYXNlczsKKworICAgICAgICAvLyBXaGVuIDpub3QgaGFzIDpsaW5rIGFuZCBj
dXJyZW50IHZpc2l0ZWRNYXRjaFR5cGUgaXMgVmlzaXRlZE1hdGNoRW5hYmxlZCwgOm5vdCBmaWx0
ZXIgcGFzc2VzIHJlZ2FyZGxlc3Mgb2YgdGhlIGVsZW1lbnQuCisgICAgICAgIGlmIChzdWJGcmFn
bWVudC51c2VWaXNpdGVkTWF0Y2hUeXBlICYmIHN1YkZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29u
dGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluaykpCisgICAgICAgICAgICBsb2NhbEZh
aWx1cmVDYXNlcy5hcHBlbmQoanVtcElmVmlzaXRlZE1hdGNoVHlwZUlzRW5hYmxlZCgpKTsKKwog
ICAgICAgICBnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyhsb2NhbEZhaWx1cmVDYXNlcywgbG9jYWxG
YWlsdXJlQ2FzZXMsIHN1YkZyYWdtZW50KTsKICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBhIG5v
dCBwc2V1ZG8gY2xhc3MgZmlsdGVyLCByZWFjaGluZyBoZXJlIGlzIGEgZmFpbHVyZS4KICAgICAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5qdW1wKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3NqaXQvU3RhY2tBbGxvY2F0b3IuaAppbmRleCBjMDExMjI4NGUzNTU2NjJlNzU0ZjEzNTE0MTA5
ZTUyMGVmZThkZGUzLi5hNGQ4ZjA5ODM1N2U1MzNlNTc0Y2Y2MmE5MjA0NTE4ZjExZmE3NDFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU3RhY2tBbGxvY2F0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3NqaXQvU3RhY2tBbGxvY2F0b3IuaApAQCAtNTksNiArNTksMTEgQEAg
Y2xhc3MgU3RhY2tBbGxvY2F0b3IgewogICAgIHsKICAgICB9CiAKKyAgICBTdGFja1JlZmVyZW5j
ZSBzdGFja1RvcCgpCisgICAgeworICAgICAgICByZXR1cm4gU3RhY2tSZWZlcmVuY2UobV9vZmZz
ZXRGcm9tVG9wICsgc3RhY2tVbml0SW5CeXRlcygpKTsKKyAgICB9CisKICAgICB+U3RhY2tBbGxv
Y2F0b3IoKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fb2Zmc2V0RnJvbVRvcCk7
CkBAIC02NywxMCArNzIsMzIgQEAgY2xhc3MgU3RhY2tBbGxvY2F0b3IgewogCiAgICAgU3RhY2tS
ZWZlcmVuY2UgYWxsb2NhdGVVbmluaXRpYWxpemVkKCkKICAgICB7CisgICAgICAgIHJldHVybiBh
bGxvY2F0ZVVuaW5pdGlhbGl6ZWQoMSlbMF07CisgICAgfQorCisgICAgU3RhY2tSZWZlcmVuY2VW
ZWN0b3IgYWxsb2NhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGNvdW50KQorICAgIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rpb25DYWxsUGFkZGluZyk7Ci0gICAgICAgIG1f
YXNzZW1ibGVyLmFkZFB0ck5vRmxhZ3MoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KC1zdGFja1VuaXRJbkJ5dGVzKCkpLCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0gICAgICAgIG1fb2Zmc2V0RnJvbVRvcCArPSBzdGFja1VuaXRJbkJ5dGVzKCk7
Ci0gICAgICAgIHJldHVybiBTdGFja1JlZmVyZW5jZShtX29mZnNldEZyb21Ub3ApOworICAgICAg
ICBTdGFja1JlZmVyZW5jZVZlY3RvciBzdGFja1JlZmVyZW5jZXM7CisgICAgICAgIHVuc2lnbmVk
IG9sZE9mZnNldEZyb21Ub3AgPSBtX29mZnNldEZyb21Ub3A7CisjaWYgQ1BVKEFSTTY0KQorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQgLSAxOyBpICs9IDIpIHsKKyAgICAg
ICAgICAgIG1fb2Zmc2V0RnJvbVRvcCArPSBzdGFja1VuaXRJbkJ5dGVzKCk7CisgICAgICAgICAg
ICBzdGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCAt
IHN0YWNrVW5pdEluQnl0ZXMoKSAvIDIpKTsKKyAgICAgICAgICAgIHN0YWNrUmVmZXJlbmNlcy5h
cHBlbmQoU3RhY2tSZWZlcmVuY2UobV9vZmZzZXRGcm9tVG9wKSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNvdW50ICUgMikgeworICAgICAgICAgICAgbV9vZmZzZXRGcm9tVG9wICs9IHN0YWNr
VW5pdEluQnl0ZXMoKTsKKyAgICAgICAgICAgIHN0YWNrUmVmZXJlbmNlcy5hcHBlbmQoU3RhY2tS
ZWZlcmVuY2UobV9vZmZzZXRGcm9tVG9wKSk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBtX29mZnNl
dEZyb21Ub3AgKz0gc3RhY2tVbml0SW5CeXRlcygpOworICAgICAgICAgICAgc3RhY2tSZWZlcmVu
Y2VzLmFwcGVuZChTdGFja1JlZmVyZW5jZShtX29mZnNldEZyb21Ub3ApKTsKKyAgICAgICAgfQor
I2VuZGlmCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZFB0ck5vRmxhZ3MoSlNDOjpNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKC0obV9vZmZzZXRGcm9tVG9wIC0gb2xkT2Zmc2V0RnJvbVRvcCkp
LCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIHJl
dHVybiBzdGFja1JlZmVyZW5jZXM7CiAgICAgfQogCiAgICAgU3RhY2tSZWZlcmVuY2VWZWN0b3Ig
cHVzaChjb25zdCBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4mIHJlZ2lz
dGVySURzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238718</attachid>
            <date>2014-09-26 08:31:32 -0700</date>
            <delta_ts>2014-09-26 08:40:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135293-20140927003137.patch</filename>
            <type>text/plain</type>
            <size>36285</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczOTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg5MzVhNzZkOTQyMTdh
ZTQ4YzVjY2MzZGRjOGMxMTdkMTAxMjBmNC4uZWUzMzA2NWNkYzAyMGE3OWY0NmUyMzI2OGZiOWI5
YTQyYWRlMWNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE0LTA5LTI2ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUyBKSVQ6IElt
cGxlbWVudCA6dmlzaXRlZCBwc2V1ZG8gY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBDU1MgSklUIGZvciA6
dmlzaXRlZC4gQW5kIG1hYWtlIDpub3QoOmxpbmspIEpJVC1lZC4KKyAgICAgICAgRm9sbG93aW5n
IHRoZSBkZXNpZ24gZGlzY3Vzc2VkIGF0IHRoZSBvdGhlciBidWdbMV0sIGltcGxlbWVudGVkIDp2
aXNpdGVkIEpJVAorICAgICAgICB3aXRob3V0IHRyYWNraW5nIFZpc2l0ZWRNYXRjaEVuYWJsZWQg
c3RhdGUuCisKKyAgICAgICAgQW5kIGluIHRoaXMgcGF0Y2gsIHdlIGNsZWFuIHVwIHNvbWUgYmFj
a3RyYWNraW5nIHRhaWwgY29kZSBhbmQgcmVuYW1lCisgICAgICAgIHRoZSBsYWJlbHMgYW5kIGp1
bXAgbGlzdHMuCisKKyAgICAgICAgRWRnZSBjYXNlcyBhcmUgdGVzdGVkIGJ5IHRoZSBleGlzdGlu
ZyB0ZXN0cy4KKyAgICAgICAgOm5vdCg6bGluaykKKyAgICAgICAgICAgIGZhc3QvaGlzdG9yeS9s
aW5rLWluc2lkZS1ub3QuaHRtbAorICAgICAgICA6bm90KDp2aXNpdGVkKQorICAgICAgICAgICAg
ZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLW5vdC5odG1sCisgICAgICAgIDotd2Via2l0LWFu
eSg6bGluaykKKyAgICAgICAgICAgIGZhc3QvaGlzdG9yeS9saW5rLWluc2lkZS1hbnkuaHRtbAor
ICAgICAgICA6LXdlYmtpdC1hbnkoOnZpc2l0ZWQpCisgICAgICAgICAgICBmYXN0L2hpc3Rvcnkv
dmlzaXRlZC1pbnNpZGUtYW55Lmh0bWwKKworICAgICAgICBbMV06IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU2MzkKKworICAgICAgICAqIGNzc2ppdC9TZWxlY3Rv
ckNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6Om1vc3RF
eHRlbmRlZFZpc2l0ZWRDaGVja01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21w
aWxlcjo6U2VsZWN0b3JGcmFnbWVudDo6U2VsZWN0b3JGcmFnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpTZWxlY3RvckNv
ZGVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Y29uc3Ry
dWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVJp
Z2h0bW9zdFRyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUFuY2VzdG9yVHJlZVdhbGtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlSW5kaXJlY3RBZGphY2VudFRyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpsaW5rRmFpbHVyZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZURlc2NlbmRhbnRCYWNrdHJhY2tpbmdUYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ29tcGlsZXI6Om5lZWRzQmFja3RyYWNraW5nVGFpbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFja3Ry
YWNraW5nVGFpbHNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVy
OjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVFbGVtZW50TGlua01hdGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29t
cGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50TWF0Y2hlc05vdFBz
ZXVkb0NsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNUYXJnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1l
bnRJc0ZpcnN0TGluayk6CisgICAgICAgICogY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdGFja0FsbG9jYXRvcjo6c3RhY2tUb3ApOgorICAgICAgICAoV2ViQ29y
ZTo6U3RhY2tBbGxvY2F0b3I6OmFsbG9jYXRlVW5pbml0aWFsaXplZCk6CisKIDIwMTQtMDktMjUg
IEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFN0b3Jh
Z2VUcmFja2VyOjpkZWxldGVPcmlnaW4gYmVpbmcgY2FsbGVkIG9mZiB0aGUgbWFpbiB0aHJlYWQg
KEFTU0VSVHMgaW4gaW5zcGVjdG9yL3Rlc3QtaGFybmVzcy10cml2aWFsbHktd29ya3MuaHRtbCB0
ZXN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCmluZGV4IDQy
NGExN2U4YWEzMGE2YmE0ZWZjZjM4NGQwNjA1ODA1YTNhYzIwNjUuLmQ5ZDEyNGMzYTM1MDhiMTJi
MDMzNDZmODY3NTUzYWZmZTIxOTc5NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2pp
dC9TZWxlY3RvckNvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0
b3JDb21waWxlci5jcHAKQEAgLTEwNSw2ICsxMDUsMTcgQEAgZW51bSBjbGFzcyBGcmFnbWVudFBv
c2l0aW9uSW5Sb290RnJhZ21lbnRzIHsKICAgICBOb3RSaWdodG1vc3QKIH07CiAKK2VudW0gY2xh
c3MgVmlzaXRlZENoZWNrTW9kZSB7CisgICAgTm9uZSwKKyAgICBMaW5rSW5zaWRlTm90LAorICAg
IFZpc2l0ZWQsCit9OworCitzdGF0aWMgaW5saW5lIFZpc2l0ZWRDaGVja01vZGUgbW9zdEV4dGVu
ZGVkVmlzaXRlZENoZWNrTW9kZShWaXNpdGVkQ2hlY2tNb2RlIGEsIFZpc2l0ZWRDaGVja01vZGUg
YikKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoYSwgYik7Cit9CisKIGNsYXNzIEF0dHJpYnV0ZU1h
dGNoaW5nSW5mbyB7CiBwdWJsaWM6CiAgICAgQXR0cmlidXRlTWF0Y2hpbmdJbmZvKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvciwgYm9vbCBjYW5EZWZhdWx0VG9DYXNlU2Vuc2l0aXZlVmFsdWVN
YXRjaCkKQEAgLTE0MCw2ICsxNTEsNyBAQCBzdHJ1Y3QgU2VsZWN0b3JGcmFnbWVudCB7CiAgICAg
ICAgICwgaWQobnVsbHB0cikKICAgICAgICAgLCBsYW5nRmlsdGVyKG51bGxwdHIpCiAgICAgICAg
ICwgcHNldWRvRWxlbWVudFNlbGVjdG9yKG51bGxwdHIpCisgICAgICAgICwgY2hlY2tWaXNpdGVk
SW5MaW5rSW5zaWRlTm90KGZhbHNlKQogICAgICAgICAsIG9ubHlNYXRjaGVzTGlua3NJblF1aXJr
c01vZGUodHJ1ZSkKICAgICB7CiAgICAgfQpAQCAtMTczLDYgKzE4NSw4IEBAIHN0cnVjdCBTZWxl
Y3RvckZyYWdtZW50IHsKICAgICBWZWN0b3I8VmVjdG9yPFNlbGVjdG9yRnJhZ21lbnQ+PiBhbnlG
aWx0ZXJzOwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBwc2V1ZG9FbGVtZW50U2VsZWN0b3I7CiAK
KyAgICBib29sIGNoZWNrVmlzaXRlZEluTGlua0luc2lkZU5vdDsKKwogICAgIC8vIEZvciBxdWly
a3MgbW9kZSwgZm9sbG93IHRoaXM6IGh0dHA6Ly9xdWlya3Muc3BlYy53aGF0d2cub3JnLyN0aGUt
OmFjdGl2ZS1hbmQtOmhvdmVyLXF1aXJrCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIGEgY29tcG91
bmQgc2VsZWN0b3IgJ3NlbGVjdG9yJyB0aGF0IG1hdGNoZXMgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIG11c3Qgbm90IG1hdGNoIGVsZW1lbnRzIHRoYXQgd291bGQgbm90IGFsc28gbWF0Y2ggdGhl
ICc6YW55LWxpbmsnIHNlbGVjdG9yLgogICAgIC8vCkBAIC0yMTUsNiArMjI5LDggQEAgY2xhc3Mg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yIHsKICAgICB2b2lkIGdlbmVyYXRlU2VsZWN0b3JDaGVja2Vy
KCk7CiAKICAgICAvLyBFbGVtZW50IHJlbGF0aW9ucyB0cmVlIHdhbGtlci4KKyAgICB2b2lkIGdl
bmVyYXRlUmlnaHRtb3N0VHJlZVdhbGtlcihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKKwogICAgIHZvaWQgZ2VuZXJhdGVXYWxrVG9Q
YXJlbnROb2RlKEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0YXJnZXRSZWdpc3Rlcik7CiAgICAgdm9p
ZCBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVy
ZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFyZ2V0UmVnaXN0ZXIpOwogICAgIHZvaWQg
Z2VuZXJhdGVQYXJlbnRFbGVtZW50VHJlZVdhbGtlcihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKQEAgLTIyOSwxMSArMjQ1LDEyIEBA
IGNsYXNzIFNlbGVjdG9yQ29kZUdlbmVyYXRvciB7CiAgICAgdm9pZCBsaW5rRmFpbHVyZXMoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZ2xvYmFsRmFpbHVyZUNhc2VzLCBCYWNrdHJhY2tpbmdBY3Rpb24s
IEFzc2VtYmxlcjo6SnVtcExpc3QmIGxvY2FsRmFpbHVyZUNhc2VzKTsKICAgICB2b2lkIGdlbmVy
YXRlQWRqYWNlbnRCYWNrdHJhY2tpbmdUYWlsKCk7CiAgICAgdm9pZCBnZW5lcmF0ZURlc2NlbmRh
bnRCYWNrdHJhY2tpbmdUYWlsKCk7Ci0gICAgdm9pZCBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxz
SWZOZWVkZWQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3Rv
ckZyYWdtZW50Jik7CisgICAgdm9pZCBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQo
Y29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogCiAgICAgLy8gRWxlbWVudCBwcm9wZXJ0aWVzIG1h
dGNoZXJzLgogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50TWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1w
TGlzdCYgbWF0Y2hpbmdUYWdOYW1lRmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6Okp1bXBMaXN0JiBt
YXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7
CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnREYXRhTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7CisgICAgdm9pZCBnZW5l
cmF0ZUVsZW1lbnRMaW5rTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2Vz
LCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRGdW5j
dGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5j
dGlvblB0cik7CiAgICAgdm9pZCBnZW5lcmF0ZUNvbnRleHRGdW5jdGlvbkNhbGxUZXN0KEFzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0cik7CiAgICAgdm9p
ZCBnZW5lcmF0ZUVsZW1lbnRJc0FjdGl2ZShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKQEAgLTI2OSw2ICsyODYsNyBAQCBjbGFzcyBT
ZWxlY3RvckNvZGVHZW5lcmF0b3IgewogICAgIHZvaWQgYWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZy
b21Db250ZXh0KEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQsIGludDY0X3Qp
OwogICAgIEFzc2VtYmxlcjo6SnVtcCBicmFuY2hPblJlc29sdmluZ01vZGVXaXRoQ2hlY2tpbmdD
b250ZXh0KEFzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU2VsZWN0b3JDaGVja2VyOjpN
b2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KTsKICAgICBBc3NlbWJs
ZXI6Okp1bXAgYnJhbmNoT25SZXNvbHZpbmdNb2RlKEFzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiwgU2VsZWN0b3JDaGVja2VyOjpNb2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tp
bmdDb250ZXh0KTsKKyAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzRmlyc3RMaW5rKEFzc2VtYmxl
cjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQp
OwogICAgIHZvaWQgZ2VuZXJhdGVNYXJrUHNldWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KEFzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwog
ICAgIHZvaWQgZ2VuZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBz
ZXVkb0VsZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxl
Y3RvckZyYWdtZW50JiwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCk7CiAg
ICAgdm9pZCBnZW5lcmF0ZVNwZWNpYWxGYWlsdXJlSW5RdWlya3NNb2RlRm9yQWN0aXZlQW5kSG92
ZXJJZk5lZWRlZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVj
dG9yRnJhZ21lbnQmKTsKQEAgLTI5MiwxOCArMzEwLDIzIEBAIGNsYXNzIFNlbGVjdG9yQ29kZUdl
bmVyYXRvciB7CiAgICAgU2VsZWN0b3JDb250ZXh0IG1fc2VsZWN0b3JDb250ZXh0OwogICAgIEZ1
bmN0aW9uVHlwZSBtX2Z1bmN0aW9uVHlwZTsKICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBtX3Nl
bGVjdG9yRnJhZ21lbnRzOworICAgIFZpc2l0ZWRDaGVja01vZGUgbV92aXNpdGVkQ2hlY2tNb2Rl
OwogICAgIGJvb2wgbV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQ7CiAKICAgICBTdGFj
a0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2UgbV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5j
ZTsKIAogICAgIEFzc2VtYmxlcjo6TGFiZWwgbV9kZXNjZW5kYW50RW50cnlQb2ludDsKKyAgICBB
c3NlbWJsZXI6Okp1bXBMaXN0IG1fZGVzY2VuZGFudEZhaWx1cmVDYXNlczsKKyAgICBBc3NlbWJs
ZXI6OkxhYmVsIG1fZGVzY2VuZGFudFRyZWVXYWxrZXJFbnRyeVBvaW50OworICAgIEFzc2VtYmxl
cjo6SnVtcExpc3QgbV9kZXNjZW5kYW50VHJlZVdhbGtlckZhaWx1cmVDYXNlczsKICAgICBBc3Nl
bWJsZXI6OkxhYmVsIG1faW5kaXJlY3RBZGphY2VudEVudHJ5UG9pbnQ7Ci0gICAgQXNzZW1ibGVy
OjpMYWJlbCBtX2Rlc2NlbmRhbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9pbnQ7Ci0gICAgQXNz
ZW1ibGVyOjpMYWJlbCBtX2luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9p
bnQ7CisgICAgQXNzZW1ibGVyOjpMYWJlbCBtX2luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyRW50
cnlQb2ludDsKICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgbV9kZXNjZW5kYW50QmFja3RyYWNr
aW5nU3RhcnQ7Ci0gICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2Rlc2NlbmRhbnRCYWNrdHJhY2tp
bmdGYWlsdXJlQ2FzZXM7CisgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2Rlc2NlbmRhbnRUYWls
RmFpbHVyZUNhc2VzOwogICAgIFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZSBtX2FkamFj
ZW50QmFja3RyYWNraW5nU3RhcnQ7CiAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2FkamFjZW50
QmFja3RyYWNraW5nRmFpbHVyZUNhc2VzOworICAgIFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVy
ZW5jZSBtX2xhc3RWaXNpdGVkRWxlbWVudDsKKyAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZl
cmVuY2UgbV9zdGFydEVsZW1lbnQ7CiAKICNpZiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lORwog
ICAgIGNvbnN0IENTU1NlbGVjdG9yKiBtX29yaWdpbmFsU2VsZWN0b3I7CkBAIC0zMjAsNyArMzQz
LDcgQEAgZW51bSBjbGFzcyBGcmFnbWVudHNMZXZlbCB7CiAgICAgSW5GdW5jdGlvbmFsUHNldWRv
VHlwZSA9IDEKIH07CiAKLXN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNv
bnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yQ29udGV4dCwgU2VsZWN0b3JG
cmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbCwgRnJhZ21lbnRQ
b3NpdGlvbkluUm9vdEZyYWdtZW50cyk7CitzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZy
YWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQs
IFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWws
IEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxl
ZCwgVmlzaXRlZENoZWNrTW9kZSYpOwogCiBzdGF0aWMgdm9pZCBjb21wdXRlQmFja3RyYWNraW5n
SW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBib29s
JiBuZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpOwogCkBAIC00MTAsNyArNDMzLDcgQEAg
c3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKGNv
bnN0IENTU1NlbGVjdG9yJiBzZWxlY3QKICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RN
YXRjaEFueXRoaW5nOwogfQogCi1zdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9D
bGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBm
cmFnbWVudCwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRQb3NpdGlv
bkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cykKK3N0YXRpYyBpbmxpbmUg
RnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0
b3IsIFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JD
b250ZXh0LCBGcmFnbWVudHNMZXZlbCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5S
b290RnJhZ21lbnRzIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVu
YWJsZWQsIFZpc2l0ZWRDaGVja01vZGUmIHZpc2l0ZWRDaGVja01vZGUpCiB7CiAgICAgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSB0eXBlID0gc2VsZWN0b3IucHNldWRvQ2xhc3NUeXBlKCk7
CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC00NjYsNyArNDg5LDcgQEAgc3RhdGljIGlubGluZSBG
dW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3Rv
ciwgU2VsZWMKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1dpbmRvd0luYWN0aXZl
OgogICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6
RnVuY3Rpb25QdHIoaXNXaW5kb3dJbmFjdGl2ZSkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7Ci0gICAgICAgICAgICAKKwogI2lmIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1bGxTY3Jl
ZW46CiAgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlND
OjpGdW5jdGlvblB0cihtYXRjaGVzRnVsbFNjcmVlblBzZXVkb0NsYXNzKSk7CkBAIC01MTAsMjEg
KzUzMywzMSBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUo
Y29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzTnRoT2ZUeXBlOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
TnRoTGFzdENoaWxkOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoTGFzdE9m
VHlwZToKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQ6CiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEcmFnOgogICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpDYW5ub3RDb21waWxlOwogCiAgICAgLy8gT3B0aW1pemVkIHBzZXVkbyBzZWxlY3RvcnMu
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnlMaW5rOgotICAgICAgICBmcmFn
bWVudC5wc2V1ZG9DbGFzc2VzLmFkZChDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rKTsKLSAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwotCiAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzUm9vdDoKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Rhcmdl
dDoKICAgICAgICAgZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5hZGQodHlwZSk7CiAgICAgICAgIHJl
dHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKIAorICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZDoKKyAgICAgICAgLy8gRGV0ZXJtaW5lIHRoaXMg
OnZpc2l0ZWQgY2Fubm90IG1hdGNoIGFueXRoaW5nIHN0YXRpY2FsbHkuCisgICAgICAgIGlmICgh
dmlzaXRlZE1hdGNoRW5hYmxlZCkKKyAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNh
bm5vdE1hdGNoQW55dGhpbmc7CisKKyAgICAgICAgLy8gSW5zaWRlIGZ1bmN0aW9uYWwgcHNldWRv
IGNsYXNzIGV4Y2VwdCBmb3IgOm5vdCwgOnZpc2l0ZWQgbmV2ZXIgbWF0Y2hlcy4KKyAgICAgICAg
Ly8gSW4gdGhlIGNhc2UgaW5zaWRlIDpub3QsIHJldHVybmluZyBDYW5ub3RNYXRjaEFueXRoaW5n
IGluZGljYXRlcyB0aGF0IDpub3QoOnZpc2l0ZWQpIGNhbiBtYXRjaCBvdmVyIGFueXRoaW5nLgor
ICAgICAgICBpZiAoZnJhZ21lbnRMZXZlbCA9PSBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFs
UHNldWRvVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNo
QW55dGhpbmc7CisKKyAgICAgICAgZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5hZGQodHlwZSk7Cisg
ICAgICAgIHZpc2l0ZWRDaGVja01vZGUgPSBWaXNpdGVkQ2hlY2tNb2RlOjpWaXNpdGVkOworICAg
ICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CisKICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Njb3BlOgogICAgICAgICBpZiAoc2VsZWN0b3JD
b250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvcikgewogICAgICAgICAgICAg
ZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5hZGQoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUm9vdCk7
CkBAIC01NzYsOSArNjA5LDExIEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVk
b0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZzsKIAogICAgICAg
ICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgbm90RnJhZ21lbnRzOwotICAgICAgICAgICAgRnVu
Y3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzZWxlY3Rvckxpc3Qt
PmZpcnN0KCksIHNlbGVjdG9yQ29udGV4dCwgbm90RnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6
SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMpOworICAgICAg
ICAgICAgVmlzaXRlZENoZWNrTW9kZSBpZ25vcmVWaXNpdGVkQ2hlY2tNb2RlID0gVmlzaXRlZENo
ZWNrTW9kZTo6Tm9uZTsKKyAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBj
b25zdHJ1Y3RGcmFnbWVudHMoc2VsZWN0b3JMaXN0LT5maXJzdCgpLCBzZWxlY3RvckNvbnRleHQs
IG5vdEZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBv
c2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVk
Q2hlY2tNb2RlKTsKIAogICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBub3QgcHNldWRvIGNs
YXNzIGZpbHRlciwgQ2Fubm90TWF0Y2hBbnl0aGluZyBpbXBsaWVzIHRoaXMgZmlsdGVyIGFsd2F5
cyBwYXNzZXMuCisgICAgICAgICAgICAvLyBBbmQgd2hlbiA6dmlzaXRlZCBpcyBpbnNpZGUgOm5v
dCAoOm5vdCg6dmlzaXRlZCkpLCBpdCByZXR1cm5zIENhbm5vdE1hdGNoQW55dGhpbmcgYW5kIGl0
IGFsd2F5cyBwYXNzIHRoaXMgZmlsdGVyLgogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSA9
PSBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogCkBAIC01ODksMTEgKzYy
NCwxMyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29u
c3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAgICAgICAgaWYgKG5vdEZyYWdt
ZW50cy5zaXplKCkgIT0gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpD
YW5ub3RDb21waWxlOwogCi0gICAgICAgICAgICBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBzdWJG
cmFnbWVudCA9IG5vdEZyYWdtZW50cy5maXJzdCgpOworICAgICAgICAgICAgU2VsZWN0b3JGcmFn
bWVudCYgc3ViRnJhZ21lbnQgPSBub3RGcmFnbWVudHMuZmlyc3QoKTsKIAotICAgICAgICAgICAg
Ly8gRklYTUU6IEN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHZpc2l0ZWRNYXRjaFR5cGUuCi0g
ICAgICAgICAgICBpZiAoc3ViRnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NMaW5rKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpDYW5ub3RDb21waWxlOworICAgICAgICAgICAgaWYgKHZpc2l0ZWRNYXRjaEVuYWJsZWQg
JiYgc3ViRnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NMaW5rKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc2VsZWN0
b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvciwgIldoZW4gdmlzaXRl
ZE1hdGNoRW5hYmxlZCBpcyB0cnVlLCBzZWxlY3RvciBjb250ZXh0IGlzIG5ldmVyIFF1ZXJ5U2Vs
ZWN0b3IuIik7CisgICAgICAgICAgICAgICAgc3ViRnJhZ21lbnQuY2hlY2tWaXNpdGVkSW5MaW5r
SW5zaWRlTm90ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB2aXNpdGVkQ2hlY2tNb2RlID0gbW9z
dEV4dGVuZGVkVmlzaXRlZENoZWNrTW9kZSh2aXNpdGVkQ2hlY2tNb2RlLCBWaXNpdGVkQ2hlY2tN
b2RlOjpMaW5rSW5zaWRlTm90KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZnJhZ21l
bnQubm90RmlsdGVycy5hcHBlbmQoc3ViRnJhZ21lbnQpOwogICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uVHlwZTsKQEAgLTYwNSw3ICs2NDIsOCBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlw
ZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwog
ICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IEZ1bmN0aW9uVHlwZTo6U2lt
cGxlU2VsZWN0b3JDaGVja2VyOwogICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciog
cm9vdFNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHJvb3RTZWxl
Y3Rvcjsgcm9vdFNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHJvb3RTZWxlY3Rvcikp
IHsKICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBmcmFnbWVudExpc3Q7Ci0g
ICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZy
YWdtZW50cyhyb290U2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0LCBGcmFn
bWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVu
dHMpOworICAgICAgICAgICAgICAgIFZpc2l0ZWRDaGVja01vZGUgc3ViVmlzaXRlZENoZWNrTW9k
ZSA9IFZpc2l0ZWRDaGVja01vZGU6Ok5vbmU7CisgICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBl
IHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIHNlbGVj
dG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNl
dWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIHN1
YlZpc2l0ZWRDaGVja01vZGUpOwogCiAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBmcmFn
bWVudCBhbHdheXMgdW5tYXRjaCBhZ2FpbnN0IHRoZSBlbGVtZW50LCBkb24ndCBpbnNlcnQgaXQg
dG8gYW55RnJhZ21lbnRzLgogICAgICAgICAgICAgICAgIGlmIChzdWJGdW5jdGlvblR5cGUgPT0g
RnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nKQpAQCAtNjE5LDYgKzY1Nyw4IEBAIHN0
YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxl
Y3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50TGlzdC5z
aXplKCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fu
bm90Q29tcGlsZTsKIAorICAgICAgICAgICAgICAgIHZpc2l0ZWRDaGVja01vZGUgPSBtb3N0RXh0
ZW5kZWRWaXNpdGVkQ2hlY2tNb2RlKHZpc2l0ZWRDaGVja01vZGUsIHN1YlZpc2l0ZWRDaGVja01v
ZGUpOworCiAgICAgICAgICAgICAgICAgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgc3ViRnJhZ21l
bnQgPSBmcmFnbWVudExpc3QuZmlyc3QoKTsKICAgICAgICAgICAgICAgICBhbnlGcmFnbWVudHMu
YXBwZW5kKHN1YkZyYWdtZW50KTsKICAgICAgICAgICAgICAgICBmdW5jdGlvblR5cGUgPSBtb3N0
UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBlLCBzdWJGdW5jdGlvblR5cGUpOwpA
QCAtNjY3LDYgKzcwNyw3IEBAIGlubGluZSBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OlNlbGVjdG9y
Q29kZUdlbmVyYXRvcihjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjCiAgICAgOiBtX3N0YWNr
QWxsb2NhdG9yKG1fYXNzZW1ibGVyKQogICAgICwgbV9zZWxlY3RvckNvbnRleHQoc2VsZWN0b3JD
b250ZXh0KQogICAgICwgbV9mdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3Rv
ckNoZWNrZXIpCisgICAgLCBtX3Zpc2l0ZWRDaGVja01vZGUoVmlzaXRlZENoZWNrTW9kZTo6Tm9u
ZSkKICAgICAsIG1fbmVlZHNBZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KGZhbHNlKQogI2lmIENT
U19TRUxFQ1RPUl9KSVRfREVCVUdHSU5HCiAgICAgLCBtX29yaWdpbmFsU2VsZWN0b3Iocm9vdFNl
bGVjdG9yKQpAQCAtNjc2LDcgKzcxNywxMiBAQCBpbmxpbmUgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpTZWxlY3RvckNvZGVHZW5lcmF0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlYwogICAg
IGRhdGFMb2dGKCJDb21waWxpbmcgXCIlc1wiXG4iLCBtX29yaWdpbmFsU2VsZWN0b3ItPnNlbGVj
dG9yVGV4dCgpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAKLSAgICBtX2Z1bmN0aW9uVHlwZSA9
IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250ZXh0LCBtX3Nl
bGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQb3NpdGlvbklu
Um9vdEZyYWdtZW50czo6UmlnaHRtb3N0KTsKKyAgICAvLyBJbiBRdWVyeVNlbGVjdG9yIGNvbnRl
eHQsIDp2aXNpdGVkIGFsd2F5cyBoYXMgbm8gZWZmZWN0IGR1ZSB0byBzZWN1cml0eSBpc3N1ZXMu
CisgICAgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkID0gdHJ1ZTsKKyAgICBpZiAoc2VsZWN0b3JD
b250ZXh0ID09IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvcikKKyAgICAgICAgdmlzaXRl
ZE1hdGNoRW5hYmxlZCA9IGZhbHNlOworCisgICAgbV9mdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RG
cmFnbWVudHMocm9vdFNlbGVjdG9yLCBtX3NlbGVjdG9yQ29udGV4dCwgbV9zZWxlY3RvckZyYWdt
ZW50cywgRnJhZ21lbnRzTGV2ZWw6OlJvb3QsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVu
dHM6OlJpZ2h0bW9zdCwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgbV92aXNpdGVkQ2hlY2tNb2RlKTsK
ICAgICBpZiAobV9mdW5jdGlvblR5cGUgIT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlICYm
IG1fZnVuY3Rpb25UeXBlICE9IEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZykKICAg
ICAgICAgY29tcHV0ZUJhY2t0cmFja2luZ0luZm9ybWF0aW9uKG1fc2VsZWN0b3JGcmFnbWVudHMs
IG1fbmVlZHNBZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KTsKIH0KQEAgLTY5Miw3ICs3MzgsNyBA
QCBzdGF0aWMgYm9vbCBpc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoQ1NTU2VsZWN0b3I6OlBzZXVk
b0VsZW1lbnRUeXBlIHR5cGUpCiAgICAgcmV0dXJuIHR5cGUgPj0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0VsZW1lbnRTY3JvbGxiYXIgJiYgdHlwZSA8PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFNj
cm9sbGJhclRyYWNrUGllY2U7CiB9CiAKLXN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJh
Z21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yQ29udGV4dCBz
ZWxlY3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywg
RnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdt
ZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cykKK3N0YXRpYyBGdW5jdGlvblR5cGUgY29uc3Ry
dWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yQ29u
dGV4dCBzZWxlY3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdt
ZW50cywgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9v
dEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hFbmFi
bGVkLCBWaXNpdGVkQ2hlY2tNb2RlJiB2aXNpdGVkQ2hlY2tNb2RlKQogewogICAgIFNlbGVjdG9y
RnJhZ21lbnQgZnJhZ21lbnQ7CiAgICAgRnJhZ21lbnRSZWxhdGlvbiByZWxhdGlvblRvUHJldmlv
dXNGcmFnbWVudCA9IEZyYWdtZW50UmVsYXRpb246OlJpZ2h0bW9zdDsKQEAgLTczNyw3ICs3ODMs
NyBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxl
Y3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvcgogICAgICAgICAgICAgaWYgKGZyYWdtZW50LnBz
ZXVkb0VsZW1lbnRTZWxlY3RvciAmJiBpc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZnJhZ21lbnQu
cHNldWRvRWxlbWVudFNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpKSkKICAgICAgICAgICAg
ICAgICBmdW5jdGlvblR5cGUgPSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25U
eXBlLCBhZGRTY3JvbGxiYXJQc2V1ZG9DbGFzc1R5cGUoKnNlbGVjdG9yLCBmcmFnbWVudCkpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0
cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5cGUsIGFkZFBzZXVkb0NsYXNzVHlwZSgqc2Vs
ZWN0b3IsIGZyYWdtZW50LCBzZWxlY3RvckNvbnRleHQsIHN1YlBvc2l0aW9uKSk7CisgICAgICAg
ICAgICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0
aW9uVHlwZSwgYWRkUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQsIHNlbGVjdG9y
Q29udGV4dCwgZnJhZ21lbnRMZXZlbCwgc3ViUG9zaXRpb24sIHZpc2l0ZWRNYXRjaEVuYWJsZWQs
IHZpc2l0ZWRDaGVja01vZGUpKTsKICAgICAgICAgICAgIGlmICghcHNldWRvQ2xhc3NPbmx5TWF0
Y2hlc0xpbmtzSW5RdWlya3NNb2RlKCpzZWxlY3RvcikpCiAgICAgICAgICAgICAgICAgZnJhZ21l
bnQub25seU1hdGNoZXNMaW5rc0luUXVpcmtzTW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgaWYg
KGZ1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGUgfHwgZnVuY3Rpb25U
eXBlID09IEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZykKQEAgLTgyMCw2ICs4NjYs
OSBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxl
Y3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvcgogICAgICAgICAgICAgaWYgKHNlbGVjdG9yQ29u
dGV4dCA9PSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpCiAgICAgICAgICAgICAgICAg
cmVsYXRpb25GdW5jdGlvblR5cGUgPSBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cjsKICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0aW9uVHlw
ZShmdW5jdGlvblR5cGUsIHJlbGF0aW9uRnVuY3Rpb25UeXBlKTsKKworICAgICAgICAgICAgLy8g
V2hlbiB0aGUgcmVsYXRpb24gaXMgYWRqYWNlbnQsIGRpc2FibGUgOnZpc2l0ZWQgbWF0Y2guCisg
ICAgICAgICAgICB2aXNpdGVkTWF0Y2hFbmFibGVkID0gZmFsc2U7CiAgICAgICAgIH0KIAogICAg
ICAgICBmcmFnbWVudC5yZWxhdGlvblRvTGVmdEZyYWdtZW50ID0gZnJhZ21lbnRSZWxhdGlvbkZv
clNlbGVjdG9yUmVsYXRpb24ocmVsYXRpb24pOwpAQCAtMTM3OSwxOSArMTQyOCwzNiBAQCB2b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIoKQogCiAgICAg
bV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVJlZ2lzdGVyKGVsZW1lbnRBZGRyZXNzUmVnaXN0
ZXIpOwogCi0gICAgU3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlIHRlbXBvcmFyeVN0YWNr
QmFzZTsKKyAgICAvLyBSZW1lbWJlciB0aGUgc3RhY2sgYmFzZSBvZiB0aGUgdGVtcG9yYXJ5IHZh
cmlhYmxlcy4KKyAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2UgdGVtcG9yYXJ5U3Rh
Y2tCYXNlID0gbV9zdGFja0FsbG9jYXRvci5zdGFja1RvcCgpOwogCiAgICAgaWYgKG1fZnVuY3Rp
b25UeXBlID09IEZ1bmN0aW9uVHlwZTo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4
dCkKICAgICAgICAgbV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZSA9IG1fc3RhY2tBbGxv
Y2F0b3IucHVzaChjaGVja2luZ0NvbnRleHRSZWdpc3Rlcik7CiAKLSAgICBpZiAobV9uZWVkc0Fk
amFjZW50QmFja3RyYWNraW5nU3RhcnQpCisgICAgLy8gQWxsb2NhdGUgdW5pbml0aWFsaXplZCBz
dGFjayByZWZlcmVuY2VzCisgICAgaWYgKG1fdmlzaXRlZENoZWNrTW9kZSAhPSBWaXNpdGVkQ2hl
Y2tNb2RlOjpOb25lKSB7CisgICAgICAgIGlmIChtX25lZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdT
dGFydCkgeworICAgICAgICAgICAgU3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlVmVjdG9y
IHJlZmVyZW5jZXMgPSBtX3N0YWNrQWxsb2NhdG9yLmFsbG9jYXRlVW5pbml0aWFsaXplZCgzKTsK
KyAgICAgICAgICAgIG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCA9IHJlZmVyZW5jZXNbMF07
CisgICAgICAgICAgICBtX2xhc3RWaXNpdGVkRWxlbWVudCA9IHJlZmVyZW5jZXNbMV07CisgICAg
ICAgICAgICBtX3N0YXJ0RWxlbWVudCA9IHJlZmVyZW5jZXNbMl07CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2VWZWN0b3IgcmVmZXJl
bmNlcyA9IG1fc3RhY2tBbGxvY2F0b3IuYWxsb2NhdGVVbmluaXRpYWxpemVkKDIpOworICAgICAg
ICAgICAgbV9sYXN0VmlzaXRlZEVsZW1lbnQgPSByZWZlcmVuY2VzWzBdOworICAgICAgICAgICAg
bV9zdGFydEVsZW1lbnQgPSByZWZlcmVuY2VzWzFdOworICAgICAgICB9CisgICAgICAgIHVuc2ln
bmVkIG9mZnNldFRvU3RhcnRFbGVtZW50ID0gbV9zdGFja0FsbG9jYXRvci5vZmZzZXRUb1N0YWNr
UmVmZXJlbmNlKG1fc3RhcnRFbGVtZW50KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RvcmVQdHIo
ZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgQXNzZW1ibGVyOjpBZGRyZXNzKEFzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRvU3RhcnRFbGVtZW50KSk7CisgICAgICAgIGlmICht
X3Zpc2l0ZWRDaGVja01vZGUgPT0gVmlzaXRlZENoZWNrTW9kZTo6VmlzaXRlZCkgeworICAgICAg
ICAgICAgdW5zaWduZWQgb2Zmc2V0VG9MYXN0VmlzaXRlZEVsZW1lbnQgPSBtX3N0YWNrQWxsb2Nh
dG9yLm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV9sYXN0VmlzaXRlZEVsZW1lbnQpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc3RvcmVQdHIoQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxw
dHIpLCBBc3NlbWJsZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
b2Zmc2V0VG9MYXN0VmlzaXRlZEVsZW1lbnQpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAo
bV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpCiAgICAgICAgIG1fYWRqYWNlbnRCYWNr
dHJhY2tpbmdTdGFydCA9IG1fc3RhY2tBbGxvY2F0b3IuYWxsb2NhdGVVbmluaXRpYWxpemVkKCk7
CiAKLSAgICAvLyBSZW1lbWJlciB0aGUgc3RhY2sgYmFzZSBvZiB0aGUgdGVtcG9yYXJ5IHZhcmlh
Ymxlcy4KLSAgICBpZiAobV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZS5pc1ZhbGlkKCkp
Ci0gICAgICAgIHRlbXBvcmFyeVN0YWNrQmFzZSA9IG1fY2hlY2tpbmdDb250ZXh0U3RhY2tSZWZl
cmVuY2U7Ci0gICAgZWxzZSBpZiAobV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpCi0g
ICAgICAgIHRlbXBvcmFyeVN0YWNrQmFzZSA9IG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydDsK
KyAgICAvLyBJbnZhbGlkYXRlIHRlbXBvcmFyeVN0YWNrQmFzZSBpZiB0aGVyZSdzIG5vIHRlbXBv
cmFyeSB2YXJpYWJsZXMuCisgICAgaWYgKHRlbXBvcmFyeVN0YWNrQmFzZSA9PSBtX3N0YWNrQWxs
b2NhdG9yLnN0YWNrVG9wKCkpCisgICAgICAgIHRlbXBvcmFyeVN0YWNrQmFzZSA9IFN0YWNrQWxs
b2NhdG9yOjpTdGFja1JlZmVyZW5jZSgpOwogCiAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXM7CiAKQEAgLTEzOTksNyArMTQ2NSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcigpCiAgICAgICAgIGNvbnN0IFNlbGVjdG9yRnJh
Z21lbnQmIGZyYWdtZW50ID0gbV9zZWxlY3RvckZyYWdtZW50c1tpXTsKICAgICAgICAgc3dpdGNo
IChmcmFnbWVudC5yZWxhdGlvblRvUmlnaHRGcmFnbWVudCkgewogICAgICAgICBjYXNlIEZyYWdt
ZW50UmVsYXRpb246OlJpZ2h0bW9zdDoKLSAgICAgICAgICAgIGdlbmVyYXRlRWxlbWVudE1hdGNo
aW5nKGZhaWx1cmVDYXNlcywgZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CisgICAgICAgICAgICBn
ZW5lcmF0ZVJpZ2h0bW9zdFRyZWVXYWxrZXIoZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGcmFnbWVudFJlbGF0aW9uOjpEZXNjZW5kYW50
OgogICAgICAgICAgICAgZ2VuZXJhdGVBbmNlc3RvclRyZWVXYWxrZXIoZmFpbHVyZUNhc2VzLCBm
cmFnbWVudCk7CkBAIC0xNDE2LDcgKzE0ODIsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIoKQogICAgICAgICB9CiAgICAgICAgIGlmIChzaG91
bGRNYXJrU3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoZnJhZ21lbnQpKQogICAgICAg
ICAgICAgbWFya0VsZW1lbnRJZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIs
IE5vZGU6OmZsYWdTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpKTsKLSAgICAgICAg
Z2VuZXJhdGVCYWNrdHJhY2tpbmdUYWlsc0lmTmVlZGVkKGZhaWx1cmVDYXNlcywgZnJhZ21lbnQp
OworICAgICAgICBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQoZnJhZ21lbnQpOwog
ICAgIH0KIAogICAgIGlmIChtX3NlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1
ZXJ5U2VsZWN0b3IgJiYgbV9mdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpTZWxlY3RvckNo
ZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KSB7CkBAIC0xNDI0LDYgKzE0OTAsMTUgQEAgdm9pZCBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyKCkKICAgICAgICAg
Z2VuZXJhdGVNYXJrUHNldWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KGZhaWx1cmVDYXNlcywgbV9z
ZWxlY3RvckZyYWdtZW50cy5maXJzdCgpKTsKICAgICB9CiAKKyAgICBpZiAobV92aXNpdGVkQ2hl
Y2tNb2RlID09IFZpc2l0ZWRDaGVja01vZGU6OlZpc2l0ZWQpIHsKKyAgICAgICAgTG9jYWxSZWdp
c3RlciBsYXN0VmlzaXRlZEVsZW1lbnQobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAgICAgIHVu
c2lnbmVkIG9mZnNldFRvTGFzdFZpc2l0ZWRFbGVtZW50ID0gbV9zdGFja0FsbG9jYXRvci5vZmZz
ZXRUb1N0YWNrUmVmZXJlbmNlKG1fbGFzdFZpc2l0ZWRFbGVtZW50KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlciwgb2Zmc2V0VG9MYXN0VmlzaXRlZEVsZW1lbnQpLCBsYXN0VmlzaXRlZEVsZW1lbnQp
OworICAgICAgICBBc3NlbWJsZXI6Okp1bXAgbm9MYXN0VmlzaXRlZEVsZW1lbnQgPSBtX2Fzc2Vt
Ymxlci5icmFuY2hUZXN0UHRyKEFzc2VtYmxlcjo6WmVybywgbGFzdFZpc2l0ZWRFbGVtZW50KTsK
KyAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNGaXJzdExpbmsoZmFpbHVyZUNhc2VzLCBsYXN0Vmlz
aXRlZEVsZW1lbnQpOworICAgICAgICBub0xhc3RWaXNpdGVkRWxlbWVudC5saW5rKCZtX2Fzc2Vt
Ymxlcik7CisgICAgfQorCiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0
ZXIoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CiAKICAgICBpZiAobV9mdW5jdGlvblR5cGUgPT0g
RnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKQEAgLTE0NzYsNiArMTU1MSwx
MSBAQCBzdGF0aWMgaW5saW5lIEFzc2VtYmxlcjo6SnVtcCB0ZXN0SXNFbGVtZW50RmxhZ09uTm9k
ZShBc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbgogICAgIHJldHVybiBhc3NlbWJsZXIuYnJhbmNo
VGVzdDMyKGNvbmRpdGlvbiwgQXNzZW1ibGVyOjpBZGRyZXNzKG5vZGVBZGRyZXNzLCBOb2RlOjpu
b2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZs
YWdJc0VsZW1lbnQoKSkpOwogfQogCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGVSaWdodG1vc3RUcmVlV2Fsa2VyKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
Y29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit7CisgICAgZ2VuZXJhdGVFbGVtZW50
TWF0Y2hpbmcoZmFpbHVyZUNhc2VzLCBmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKK30KKwogdm9p
ZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlV2Fsa1RvUGFyZW50Tm9kZShBc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgdGFyZ2V0UmVnaXN0ZXIpCiB7CiAgICAgbV9hc3NlbWJsZXIubG9hZFB0
cihBc3NlbWJsZXI6OkFkZHJlc3MoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgTm9kZTo6cGFyZW50
Tm9kZU1lbW9yeU9mZnNldCgpKSwgdGFyZ2V0UmVnaXN0ZXIpOwpAQCAtMTUxNSw3ICsxNTk1LDcg
QEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQW5jZXN0b3JUcmVlV2Fsa2Vy
KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWwKICAgICBBc3NlbWJsZXI6OkxhYmVsIGxvb3BTdGFy
dChtX2Fzc2VtYmxlci5sYWJlbCgpKTsKIAogICAgIGlmIChmcmFnbWVudC5iYWNrdHJhY2tpbmdG
bGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6OkRlc2NlbmRhbnRFbnRyeVBvaW50KQotICAgICAgICBt
X2Rlc2NlbmRhbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9pbnQgPSBtX2Fzc2VtYmxlci5sYWJl
bCgpOworICAgICAgICBtX2Rlc2NlbmRhbnRUcmVlV2Fsa2VyRW50cnlQb2ludCA9IG1fYXNzZW1i
bGVyLmxhYmVsKCk7CiAKICAgICBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQoZmFpbHVyZUNh
c2VzLCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKIApAQCAtMTU5NSw3ICsxNjc1LDcgQEAgdm9p
ZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlSW5kaXJlY3RBZGphY2VudFRyZWVXYWxr
ZXIoQXNzZW1ibGVyOjpKdW1wTGkKICAgICBBc3NlbWJsZXI6OkxhYmVsIGxvb3BTdGFydChtX2Fz
c2VtYmxlci5sYWJlbCgpKTsKIAogICAgIGlmIChmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAm
IEJhY2t0cmFja2luZ0ZsYWc6OkluZGlyZWN0QWRqYWNlbnRFbnRyeVBvaW50KQotICAgICAgICBt
X2luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9pbnQgPSBtX2Fzc2VtYmxl
ci5sYWJlbCgpOworICAgICAgICBtX2luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyRW50cnlQb2lu
dCA9IG1fYXNzZW1ibGVyLmxhYmVsKCk7CiAKICAgICBnZW5lcmF0ZVdhbGtUb1ByZXZpb3VzQWRq
YWNlbnQoZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CiAgICAgbWFya0VsZW1lbnRJZlJlc29sdmlu
Z1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIE5vZGU6OmZsYWdBZmZlY3RzTmV4dFNpYmxp
bmdFbGVtZW50U3R5bGUoKSk7CkBAIC0xODYzLDE5ICsxOTQzLDE5IEBAIHZvaWQgU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpsaW5rRmFpbHVyZXMoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZ2xvYmFsRmFp
bHVyZUNhc2VzCiAgICAgICAgIGdsb2JhbEZhaWx1cmVDYXNlcy5hcHBlbmQobG9jYWxGYWlsdXJl
Q2FzZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEJhY2t0cmFja2luZ0FjdGlvbjo6SnVt
cFRvRGVzY2VuZGFudEVudHJ5UG9pbnQ6Ci0gICAgICAgIGxvY2FsRmFpbHVyZUNhc2VzLmxpbmtU
byhtX2Rlc2NlbmRhbnRFbnRyeVBvaW50LCAmbV9hc3NlbWJsZXIpOworICAgICAgICBtX2Rlc2Nl
bmRhbnRGYWlsdXJlQ2FzZXMuYXBwZW5kKGxvY2FsRmFpbHVyZUNhc2VzKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBCYWNrdHJhY2tpbmdBY3Rpb246Okp1bXBUb0Rlc2NlbmRhbnRUcmVlV2Fs
a2VyRW50cnlQb2ludDoKLSAgICAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlua1RvKG1fZGVzY2Vu
ZGFudFRyZWVXYWxrZXJCYWNrdHJhY2tpbmdQb2ludCwgJm1fYXNzZW1ibGVyKTsKKyAgICAgICAg
bV9kZXNjZW5kYW50VHJlZVdhbGtlckZhaWx1cmVDYXNlcy5hcHBlbmQobG9jYWxGYWlsdXJlQ2Fz
ZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEJhY2t0cmFja2luZ0FjdGlvbjo6SnVtcFRv
RGVzY2VuZGFudFRhaWw6Ci0gICAgICAgIG1fZGVzY2VuZGFudEJhY2t0cmFja2luZ0ZhaWx1cmVD
YXNlcy5hcHBlbmQobG9jYWxGYWlsdXJlQ2FzZXMpOworICAgICAgICBtX2Rlc2NlbmRhbnRUYWls
RmFpbHVyZUNhc2VzLmFwcGVuZChsb2NhbEZhaWx1cmVDYXNlcyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQmFja3RyYWNraW5nQWN0aW9uOjpKdW1wVG9JbmRpcmVjdEFkamFjZW50RW50cnlQ
b2ludDoKICAgICAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlua1RvKG1faW5kaXJlY3RBZGphY2Vu
dEVudHJ5UG9pbnQsICZtX2Fzc2VtYmxlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQmFj
a3RyYWNraW5nQWN0aW9uOjpKdW1wVG9JbmRpcmVjdEFkamFjZW50VHJlZVdhbGtlckVudHJ5UG9p
bnQ6Ci0gICAgICAgIGxvY2FsRmFpbHVyZUNhc2VzLmxpbmtUbyhtX2luZGlyZWN0QWRqYWNlbnRU
cmVlV2Fsa2VyQmFja3RyYWNraW5nUG9pbnQsICZtX2Fzc2VtYmxlcik7CisgICAgICAgIGxvY2Fs
RmFpbHVyZUNhc2VzLmxpbmtUbyhtX2luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyRW50cnlQb2lu
dCwgJm1fYXNzZW1ibGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBCYWNrdHJhY2tpbmdB
Y3Rpb246Okp1bXBUb0RpcmVjdEFkamFjZW50VGFpbDoKICAgICAgICAgbV9hZGphY2VudEJhY2t0
cmFja2luZ0ZhaWx1cmVDYXNlcy5hcHBlbmQobG9jYWxGYWlsdXJlQ2FzZXMpOwpAQCAtMTg5NSwz
MCArMTk3NSwzMyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVBZGphY2Vu
dEJhY2t0cmFja2luZ1RhaWwoKQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGVEZXNjZW5kYW50QmFja3RyYWNraW5nVGFpbCgpCiB7Ci0gICAgbV9kZXNjZW5kYW50QmFja3Ry
YWNraW5nRmFpbHVyZUNhc2VzLmxpbmsoJm1fYXNzZW1ibGVyKTsKLSAgICBtX2Rlc2NlbmRhbnRC
YWNrdHJhY2tpbmdGYWlsdXJlQ2FzZXMuY2xlYXIoKTsKKyAgICBtX2Rlc2NlbmRhbnRUYWlsRmFp
bHVyZUNhc2VzLmxpbmsoJm1fYXNzZW1ibGVyKTsKKyAgICBtX2Rlc2NlbmRhbnRUYWlsRmFpbHVy
ZUNhc2VzLmNsZWFyKCk7CiAgICAgbV9hc3NlbWJsZXIubW92ZShtX2Rlc2NlbmRhbnRCYWNrdHJh
Y2tpbmdTdGFydCwgZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CiAgICAgbV9yZWdpc3RlckFsbG9j
YXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIobV9kZXNjZW5kYW50QmFja3RyYWNraW5nU3RhcnQpOwog
ICAgIG1fYXNzZW1ibGVyLmp1bXAobV9kZXNjZW5kYW50RW50cnlQb2ludCk7CiB9CiAKLXZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQo
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50
JiBmcmFnbWVudCkKK3N0YXRpYyBib29sIG5lZWRzQmFja3RyYWNraW5nVGFpbChjb25zdCBTZWxl
Y3RvckZyYWdtZW50JiBmcmFnbWVudCkKIHsKLSAgICBpZiAoZnJhZ21lbnQuYmFja3RyYWNraW5n
RmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpEaXJlY3RBZGphY2VudFRhaWwgJiYgZnJhZ21lbnQu
YmFja3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpEZXNjZW5kYW50VGFpbCkgewot
ICAgICAgICBBc3NlbWJsZXI6Okp1bXAgbm9ybWFsQ2FzZSA9IG1fYXNzZW1ibGVyLmp1bXAoKTsK
LSAgICAgICAgZ2VuZXJhdGVBZGphY2VudEJhY2t0cmFja2luZ1RhaWwoKTsKLSAgICAgICAgZ2Vu
ZXJhdGVEZXNjZW5kYW50QmFja3RyYWNraW5nVGFpbCgpOwotICAgICAgICBub3JtYWxDYXNlLmxp
bmsoJm1fYXNzZW1ibGVyKTsKLSAgICB9IGVsc2UgaWYgKGZyYWdtZW50LmJhY2t0cmFja2luZ0Zs
YWdzICYgQmFja3RyYWNraW5nRmxhZzo6RGlyZWN0QWRqYWNlbnRUYWlsKSB7Ci0gICAgICAgIEFz
c2VtYmxlcjo6SnVtcCBub3JtYWxDYXNlID0gbV9hc3NlbWJsZXIuanVtcCgpOwotICAgICAgICBn
ZW5lcmF0ZUFkamFjZW50QmFja3RyYWNraW5nVGFpbCgpOwotICAgICAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKG1fYXNzZW1ibGVyLmp1bXAoKSk7Ci0gICAgICAgIG5vcm1hbENhc2UubGluaygmbV9h
c3NlbWJsZXIpOwotICAgIH0gZWxzZSBpZiAoZnJhZ21lbnQuYmFja3RyYWNraW5nRmxhZ3MgJiBC
YWNrdHJhY2tpbmdGbGFnOjpEZXNjZW5kYW50VGFpbCkgeworICAgIHJldHVybiBmcmFnbWVudC5i
YWNrdHJhY2tpbmdGbGFncyAmIChCYWNrdHJhY2tpbmdGbGFnOjpEaXJlY3RBZGphY2VudFRhaWwg
fCBCYWNrdHJhY2tpbmdGbGFnOjpEZXNjZW5kYW50VGFpbCk7Cit9CisKK3ZvaWQgU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQoY29uc3QgU2Vs
ZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit7CisgICAgaWYgKG5lZWRzQmFja3RyYWNraW5nVGFp
bChmcmFnbWVudCkpIHsKICAgICAgICAgQXNzZW1ibGVyOjpKdW1wIG5vcm1hbENhc2UgPSBtX2Fz
c2VtYmxlci5qdW1wKCk7Ci0gICAgICAgIGdlbmVyYXRlRGVzY2VuZGFudEJhY2t0cmFja2luZ1Rh
aWwoKTsKKyAgICAgICAgaWYgKGZyYWdtZW50LmJhY2t0cmFja2luZ0ZsYWdzICYgQmFja3RyYWNr
aW5nRmxhZzo6RGlyZWN0QWRqYWNlbnRUYWlsKQorICAgICAgICAgICAgZ2VuZXJhdGVBZGphY2Vu
dEJhY2t0cmFja2luZ1RhaWwoKTsKKyAgICAgICAgaWYgKGZyYWdtZW50LmJhY2t0cmFja2luZ0Zs
YWdzICYgQmFja3RyYWNraW5nRmxhZzo6RGVzY2VuZGFudFRhaWwpCisgICAgICAgICAgICBnZW5l
cmF0ZURlc2NlbmRhbnRCYWNrdHJhY2tpbmdUYWlsKCk7CiAgICAgICAgIG5vcm1hbENhc2UubGlu
aygmbV9hc3NlbWJsZXIpOwogICAgIH0KKworICAgIGlmICghbV9kZXNjZW5kYW50RmFpbHVyZUNh
c2VzLmVtcHR5KCkpCisgICAgICAgIG1fZGVzY2VuZGFudEZhaWx1cmVDYXNlcy5saW5rVG8obV9k
ZXNjZW5kYW50RW50cnlQb2ludCwgJm1fYXNzZW1ibGVyKTsKKyAgICBpZiAoIW1fZGVzY2VuZGFu
dFRyZWVXYWxrZXJGYWlsdXJlQ2FzZXMuZW1wdHkoKSkKKyAgICAgICAgbV9kZXNjZW5kYW50VHJl
ZVdhbGtlckZhaWx1cmVDYXNlcy5saW5rVG8obV9kZXNjZW5kYW50VHJlZVdhbGtlckVudHJ5UG9p
bnQsICZtX2Fzc2VtYmxlcik7CiB9CiAKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZUVsZW1lbnRNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBtYXRjaGluZ1RhZ05hbWVG
YWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoaW5nUG9zdFRhZ05hbWVGYWls
dXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQpAQCAtMTkyNiw4ICsy
MDA5LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNo
aW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoaW4KICAgICBpZiAoZnJhZ21lbnQudGFnTmFt
ZSkKICAgICAgICAgZ2VuZXJhdGVFbGVtZW50SGFzVGFnTmFtZShtYXRjaGluZ1RhZ05hbWVGYWls
dXJlQ2FzZXMsICooZnJhZ21lbnQudGFnTmFtZSkpOwogCi0gICAgaWYgKGZyYWdtZW50LnBzZXVk
b0NsYXNzZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluaykpCi0gICAgICAg
IGdlbmVyYXRlRWxlbWVudElzTGluayhtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzKTsK
KyAgICBnZW5lcmF0ZUVsZW1lbnRMaW5rTWF0Y2hpbmcobWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1
cmVDYXNlcywgZnJhZ21lbnQpOwogCiAgICAgaWYgKGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29u
dGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUm9vdCkpCiAgICAgICAgIGdlbmVyYXRlRWxl
bWVudElzUm9vdChtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzKTsKQEAgLTE5OTUsNiAr
MjA3NywxOCBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RGF0
YU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaQogICAgICAgICBnZW5lcmF0ZUVsZW1l
bnRBdHRyaWJ1dGVzTWF0Y2hpbmcoZmFpbHVyZUNhc2VzLCBlbGVtZW50RGF0YUFkZHJlc3MsIGZy
YWdtZW50KTsKIH0KIAordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVu
dExpbmtNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNl
bGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQoreworICAgIGJvb2wgY29udGFpbnNQc2V1ZG9DbGFz
c0xpbmsgPSBmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc0xpbmspIHx8IGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29udGFpbnMoQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzQW55TGluayk7CisgICAgYm9vbCBjb250YWluc1BzZXVkb0NsYXNzVmlz
aXRlZCA9IGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzVmlzaXRlZCk7CisgICAgaWYgKGNvbnRhaW5zUHNldWRvQ2xhc3NMaW5rIHx8IGNvbnRh
aW5zUHNldWRvQ2xhc3NWaXNpdGVkKQorICAgICAgICBnZW5lcmF0ZUVsZW1lbnRJc0xpbmsoZmFp
bHVyZUNhc2VzKTsKKyAgICBpZiAoY29udGFpbnNQc2V1ZG9DbGFzc1Zpc2l0ZWQpIHsKKyAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0VG9MYXN0VmlzaXRlZEVsZW1lbnQgPSBtX3N0YWNrQWxsb2NhdG9y
Lm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV9sYXN0VmlzaXRlZEVsZW1lbnQpOworICAgICAgICBt
X2Fzc2VtYmxlci5zdG9yZVB0cihlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBBc3NlbWJsZXI6OkFk
ZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9MYXN0VmlzaXRl
ZEVsZW1lbnQpKTsKKyAgICB9Cit9CisKIHN0YXRpYyBpbmxpbmUgQXNzZW1ibGVyOjpKdW1wIHRl
c3RJc0hUTUxGbGFnT25Ob2RlKEFzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbiwg
QXNzZW1ibGVyJiBhc3NlbWJsZXIsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBub2RlQWRkcmVzcykK
IHsKICAgICByZXR1cm4gYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihjb25kaXRpb24sIEFzc2VtYmxl
cjo6QWRkcmVzcyhub2RlQWRkcmVzcywgTm9kZTo6bm9kZUZsYWdzTWVtb3J5T2Zmc2V0KCkpLCBB
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOb2RlOjpmbGFnSXNIVE1MKCkpKTsKQEAgLTMwMTYsNiAr
MzExMCwxNiBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50TWF0
Y2hlc05vdFBzZXVkb0NsYXNzKEFzc2VtYmxlcjo6SnVtcAogewogICAgIGZvciAoY29uc3QgYXV0
byYgc3ViRnJhZ21lbnQgOiBmcmFnbWVudC5ub3RGaWx0ZXJzKSB7CiAgICAgICAgIEFzc2VtYmxl
cjo6SnVtcExpc3QgbG9jYWxGYWlsdXJlQ2FzZXM7CisKKyAgICAgICAgLy8gV2hlbiA6bm90IGhh
cyA6bGluayBhbmQgY3VycmVudCB2aXNpdGVkTWF0Y2hUeXBlIGlzIFZpc2l0ZWRNYXRjaEVuYWJs
ZWQsIDpub3QgZmlsdGVyIHBhc3NlcyByZWdhcmRsZXNzIG9mIHRoZSBlbGVtZW50LgorICAgICAg
ICBpZiAoc3ViRnJhZ21lbnQuY2hlY2tWaXNpdGVkSW5MaW5rSW5zaWRlTm90KSB7CisgICAgICAg
ICAgICBBU1NFUlQoc3ViRnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NMaW5rKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IG5v
dEZpcnN0TGlua0Nhc2VzOworICAgICAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNGaXJzdExpbmso
bm90Rmlyc3RMaW5rQ2FzZXMsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOworICAgICAgICAgICAg
bG9jYWxGYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmp1bXAoKSk7CisgICAgICAgICAg
ICBub3RGaXJzdExpbmtDYXNlcy5saW5rKCZtX2Fzc2VtYmxlcik7CisgICAgICAgIH0KKwogICAg
ICAgICBnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyhsb2NhbEZhaWx1cmVDYXNlcywgbG9jYWxGYWls
dXJlQ2FzZXMsIHN1YkZyYWdtZW50KTsKICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBhIG5vdCBw
c2V1ZG8gY2xhc3MgZmlsdGVyLCByZWFjaGluZyBoZXJlIGlzIGEgZmFpbHVyZS4KICAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5qdW1wKCkpOwpAQCAtMzEwNCw2ICszMjA4
LDI4IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc1Rhcmdl
dChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZCht
X2Fzc2VtYmxlci5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRy
ZXNzKGRvY3VtZW50LCBEb2N1bWVudDo6Y3NzVGFyZ2V0TWVtb3J5T2Zmc2V0KCkpLCBlbGVtZW50
QWRkcmVzc1JlZ2lzdGVyKSk7CiB9CiAKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZUVsZW1lbnRJc0ZpcnN0TGluayhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMs
IEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50KQoreworICAgIExvY2FsUmVnaXN0ZXIgY3Vy
cmVudEVsZW1lbnQobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAgdW5zaWduZWQgb2Zmc2V0VG9T
dGFydEVsZW1lbnQgPSBtX3N0YWNrQWxsb2NhdG9yLm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV9z
dGFydEVsZW1lbnQpOworICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNz
KEFzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRvU3RhcnRFbGVtZW50KSwg
Y3VycmVudEVsZW1lbnQpOworCisgICAgLy8gTG9vcCB0byB0aGUgZWxlbWVudCB1bnRpbCBvbmUg
b2YgdGhlbSBpcyBsaW5rLgorICAgIEFzc2VtYmxlcjo6TGFiZWwgbG9vcFN0YXJ0KG1fYXNzZW1i
bGVyLmxhYmVsKCkpOworCisgICAgLy8gVGhlIHRhcmdldCBlbGVtZW50IGlzIGFsd2F5cyBpbiB0
aGUgYW5jZXN0b3JzIGZyb20gdGhlIHN0YXJ0IGVsZW1lbnQgdG8gdGhlIHJvb3QuCisgICAgLy8g
U28gdGhpcyBkb2Vzbid0IGxvb3AgaW5maW5pdGVseSBhbmQgaXQgd2lsbCBiZSBzdG9wcGVkIHdp
dGggdGhpcyBjb25kaXRpb24uCisgICAgQXNzZW1ibGVyOjpKdW1wIHJlYWNoZWRUb0VsZW1lbnQg
PSBtX2Fzc2VtYmxlci5icmFuY2hQdHIoQXNzZW1ibGVyOjpFcXVhbCwgY3VycmVudEVsZW1lbnQs
IGVsZW1lbnQpOworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVz
dDMyKEFzc2VtYmxlcjo6Tm9uWmVybywgQXNzZW1ibGVyOjpBZGRyZXNzKGN1cnJlbnRFbGVtZW50
LCBOb2RlOjpub2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KE5vZGU6OmZsYWdJc0xpbmsoKSkpKTsKKworICAgIC8vIEFuZCB0aGVzZSBhbmNlc3RvcnMgYXJl
IGd1YXJhbnRlZWQgdGhhdCB0aGV5IGFyZSBlbGVtZW50IG5vZGUuCisgICAgLy8gU28gdGhlcmUn
cyBubyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgZWxlbWVudCBhbmQgd2hldGhlciBpdCBp
cyBudWxscHRyLgorICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNzKGN1
cnJlbnRFbGVtZW50LCBOb2RlOjpwYXJlbnROb2RlTWVtb3J5T2Zmc2V0KCkpLCBjdXJyZW50RWxl
bWVudCk7CisgICAgbV9hc3NlbWJsZXIuanVtcChsb29wU3RhcnQpOworCisgICAgcmVhY2hlZFRv
RWxlbWVudC5saW5rKCZtX2Fzc2VtYmxlcik7Cit9CisKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZU1hcmtQc2V1ZG9TdHlsZUZvclBzZXVkb0VsZW1lbnQoQXNzZW1ibGVyOjpK
dW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkK
IHsKICAgICBBU1NFUlQobV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVy
eVNlbGVjdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9j
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgKaW5kZXggYzAx
MTIyODRlMzU1NjYyZTc1NGYxMzUxNDEwOWU1MjBlZmU4ZGRlMy4uYTRkOGYwOTgzNTdlNTMzZTU3
NGNmNjJhOTIwNDUxOGYxMWZhNzQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0
L1N0YWNrQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2Nh
dG9yLmgKQEAgLTU5LDYgKzU5LDExIEBAIGNsYXNzIFN0YWNrQWxsb2NhdG9yIHsKICAgICB7CiAg
ICAgfQogCisgICAgU3RhY2tSZWZlcmVuY2Ugc3RhY2tUb3AoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCArIHN0YWNrVW5pdEluQnl0ZXMoKSk7
CisgICAgfQorCiAgICAgflN0YWNrQWxsb2NhdG9yKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX29mZnNldEZyb21Ub3ApOwpAQCAtNjcsMTAgKzcyLDMyIEBAIGNsYXNzIFN0YWNr
QWxsb2NhdG9yIHsKIAogICAgIFN0YWNrUmVmZXJlbmNlIGFsbG9jYXRlVW5pbml0aWFsaXplZCgp
CiAgICAgeworICAgICAgICByZXR1cm4gYWxsb2NhdGVVbmluaXRpYWxpemVkKDEpWzBdOworICAg
IH0KKworICAgIFN0YWNrUmVmZXJlbmNlVmVjdG9yIGFsbG9jYXRlVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBjb3VudCkKKyAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2hhc0Z1bmN0aW9u
Q2FsbFBhZGRpbmcpOwotICAgICAgICBtX2Fzc2VtYmxlci5hZGRQdHJOb0ZsYWdzKEpTQzo6TWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtc3RhY2tVbml0SW5CeXRlcygpKSwgSlNDOjpNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBtX29mZnNldEZyb21U
b3AgKz0gc3RhY2tVbml0SW5CeXRlcygpOwotICAgICAgICByZXR1cm4gU3RhY2tSZWZlcmVuY2Uo
bV9vZmZzZXRGcm9tVG9wKTsKKyAgICAgICAgU3RhY2tSZWZlcmVuY2VWZWN0b3Igc3RhY2tSZWZl
cmVuY2VzOworICAgICAgICB1bnNpZ25lZCBvbGRPZmZzZXRGcm9tVG9wID0gbV9vZmZzZXRGcm9t
VG9wOworI2lmIENQVShBUk02NCkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
dW50IC0gMTsgaSArPSAyKSB7CisgICAgICAgICAgICBtX29mZnNldEZyb21Ub3AgKz0gc3RhY2tV
bml0SW5CeXRlcygpOworICAgICAgICAgICAgc3RhY2tSZWZlcmVuY2VzLmFwcGVuZChTdGFja1Jl
ZmVyZW5jZShtX29mZnNldEZyb21Ub3AgLSBzdGFja1VuaXRJbkJ5dGVzKCkgLyAyKSk7CisgICAg
ICAgICAgICBzdGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJv
bVRvcCkpOworICAgICAgICB9CisgICAgICAgIGlmIChjb3VudCAlIDIpIHsKKyAgICAgICAgICAg
IG1fb2Zmc2V0RnJvbVRvcCArPSBzdGFja1VuaXRJbkJ5dGVzKCk7CisgICAgICAgICAgICBzdGFj
a1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCkpOworICAg
ICAgICB9CisjZWxzZQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgeworICAgICAgICAgICAgbV9vZmZzZXRGcm9tVG9wICs9IHN0YWNrVW5pdEluQnl0ZXMoKTsK
KyAgICAgICAgICAgIHN0YWNrUmVmZXJlbmNlcy5hcHBlbmQoU3RhY2tSZWZlcmVuY2UobV9vZmZz
ZXRGcm9tVG9wKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBtX2Fzc2VtYmxlci5hZGRQ
dHJOb0ZsYWdzKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtKG1fb2Zmc2V0RnJv
bVRvcCAtIG9sZE9mZnNldEZyb21Ub3ApKSwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gc3RhY2tSZWZlcmVuY2VzOwogICAgIH0KIAog
ICAgIFN0YWNrUmVmZXJlbmNlVmVjdG9yIHB1c2goY29uc3QgVmVjdG9yPEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQ+JiByZWdpc3RlcklEcykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238719</attachid>
            <date>2014-09-26 08:40:36 -0700</date>
            <delta_ts>2014-10-01 14:20:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135293-20140927004040.patch</filename>
            <type>text/plain</type>
            <size>36381</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczOTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg5MzVhNzZkOTQyMTdh
ZTQ4YzVjY2MzZGRjOGMxMTdkMTAxMjBmNC4uZWUzMzA2NWNkYzAyMGE3OWY0NmUyMzI2OGZiOWI5
YTQyYWRlMWNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE0LTA5LTI2ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUyBKSVQ6IElt
cGxlbWVudCA6dmlzaXRlZCBwc2V1ZG8gY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBDU1MgSklUIGZvciA6
dmlzaXRlZC4gQW5kIG1hYWtlIDpub3QoOmxpbmspIEpJVC1lZC4KKyAgICAgICAgRm9sbG93aW5n
IHRoZSBkZXNpZ24gZGlzY3Vzc2VkIGF0IHRoZSBvdGhlciBidWdbMV0sIGltcGxlbWVudGVkIDp2
aXNpdGVkIEpJVAorICAgICAgICB3aXRob3V0IHRyYWNraW5nIFZpc2l0ZWRNYXRjaEVuYWJsZWQg
c3RhdGUuCisKKyAgICAgICAgQW5kIGluIHRoaXMgcGF0Y2gsIHdlIGNsZWFuIHVwIHNvbWUgYmFj
a3RyYWNraW5nIHRhaWwgY29kZSBhbmQgcmVuYW1lCisgICAgICAgIHRoZSBsYWJlbHMgYW5kIGp1
bXAgbGlzdHMuCisKKyAgICAgICAgRWRnZSBjYXNlcyBhcmUgdGVzdGVkIGJ5IHRoZSBleGlzdGlu
ZyB0ZXN0cy4KKyAgICAgICAgOm5vdCg6bGluaykKKyAgICAgICAgICAgIGZhc3QvaGlzdG9yeS9s
aW5rLWluc2lkZS1ub3QuaHRtbAorICAgICAgICA6bm90KDp2aXNpdGVkKQorICAgICAgICAgICAg
ZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLW5vdC5odG1sCisgICAgICAgIDotd2Via2l0LWFu
eSg6bGluaykKKyAgICAgICAgICAgIGZhc3QvaGlzdG9yeS9saW5rLWluc2lkZS1hbnkuaHRtbAor
ICAgICAgICA6LXdlYmtpdC1hbnkoOnZpc2l0ZWQpCisgICAgICAgICAgICBmYXN0L2hpc3Rvcnkv
dmlzaXRlZC1pbnNpZGUtYW55Lmh0bWwKKworICAgICAgICBbMV06IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU2MzkKKworICAgICAgICAqIGNzc2ppdC9TZWxlY3Rv
ckNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6Om1vc3RF
eHRlbmRlZFZpc2l0ZWRDaGVja01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21w
aWxlcjo6U2VsZWN0b3JGcmFnbWVudDo6U2VsZWN0b3JGcmFnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpTZWxlY3RvckNv
ZGVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Y29uc3Ry
dWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVJp
Z2h0bW9zdFRyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUFuY2VzdG9yVHJlZVdhbGtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlSW5kaXJlY3RBZGphY2VudFRyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpsaW5rRmFpbHVyZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZURlc2NlbmRhbnRCYWNrdHJhY2tpbmdUYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ29tcGlsZXI6Om5lZWRzQmFja3RyYWNraW5nVGFpbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFja3Ry
YWNraW5nVGFpbHNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVy
OjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVFbGVtZW50TGlua01hdGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29t
cGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50TWF0Y2hlc05vdFBz
ZXVkb0NsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNUYXJnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1l
bnRJc0ZpcnN0TGluayk6CisgICAgICAgICogY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdGFja0FsbG9jYXRvcjo6c3RhY2tUb3ApOgorICAgICAgICAoV2ViQ29y
ZTo6U3RhY2tBbGxvY2F0b3I6OmFsbG9jYXRlVW5pbml0aWFsaXplZCk6CisKIDIwMTQtMDktMjUg
IEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFN0b3Jh
Z2VUcmFja2VyOjpkZWxldGVPcmlnaW4gYmVpbmcgY2FsbGVkIG9mZiB0aGUgbWFpbiB0aHJlYWQg
KEFTU0VSVHMgaW4gaW5zcGVjdG9yL3Rlc3QtaGFybmVzcy10cml2aWFsbHktd29ya3MuaHRtbCB0
ZXN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCmluZGV4IDQy
NGExN2U4YWEzMGE2YmE0ZWZjZjM4NGQwNjA1ODA1YTNhYzIwNjUuLmMyMjg3YzgxOWVkMGM3ODdh
OWQ4OTU2NzYxYzkxOWJhNmQ2YTE1ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2pp
dC9TZWxlY3RvckNvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0
b3JDb21waWxlci5jcHAKQEAgLTEwNSw2ICsxMDUsMTcgQEAgZW51bSBjbGFzcyBGcmFnbWVudFBv
c2l0aW9uSW5Sb290RnJhZ21lbnRzIHsKICAgICBOb3RSaWdodG1vc3QKIH07CiAKK2VudW0gY2xh
c3MgVmlzaXRlZENoZWNrTW9kZSB7CisgICAgTm9uZSwKKyAgICBMaW5rSW5zaWRlTm90LAorICAg
IFZpc2l0ZWQsCit9OworCitzdGF0aWMgaW5saW5lIFZpc2l0ZWRDaGVja01vZGUgbW9zdEV4dGVu
ZGVkVmlzaXRlZENoZWNrTW9kZShWaXNpdGVkQ2hlY2tNb2RlIGEsIFZpc2l0ZWRDaGVja01vZGUg
YikKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoYSwgYik7Cit9CisKIGNsYXNzIEF0dHJpYnV0ZU1h
dGNoaW5nSW5mbyB7CiBwdWJsaWM6CiAgICAgQXR0cmlidXRlTWF0Y2hpbmdJbmZvKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvciwgYm9vbCBjYW5EZWZhdWx0VG9DYXNlU2Vuc2l0aXZlVmFsdWVN
YXRjaCkKQEAgLTE0MCw2ICsxNTEsNyBAQCBzdHJ1Y3QgU2VsZWN0b3JGcmFnbWVudCB7CiAgICAg
ICAgICwgaWQobnVsbHB0cikKICAgICAgICAgLCBsYW5nRmlsdGVyKG51bGxwdHIpCiAgICAgICAg
ICwgcHNldWRvRWxlbWVudFNlbGVjdG9yKG51bGxwdHIpCisgICAgICAgICwgY2hlY2tWaXNpdGVk
SW5MaW5rSW5zaWRlTm90KGZhbHNlKQogICAgICAgICAsIG9ubHlNYXRjaGVzTGlua3NJblF1aXJr
c01vZGUodHJ1ZSkKICAgICB7CiAgICAgfQpAQCAtMTczLDYgKzE4NSw4IEBAIHN0cnVjdCBTZWxl
Y3RvckZyYWdtZW50IHsKICAgICBWZWN0b3I8VmVjdG9yPFNlbGVjdG9yRnJhZ21lbnQ+PiBhbnlG
aWx0ZXJzOwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBwc2V1ZG9FbGVtZW50U2VsZWN0b3I7CiAK
KyAgICBib29sIGNoZWNrVmlzaXRlZEluTGlua0luc2lkZU5vdDsKKwogICAgIC8vIEZvciBxdWly
a3MgbW9kZSwgZm9sbG93IHRoaXM6IGh0dHA6Ly9xdWlya3Muc3BlYy53aGF0d2cub3JnLyN0aGUt
OmFjdGl2ZS1hbmQtOmhvdmVyLXF1aXJrCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIGEgY29tcG91
bmQgc2VsZWN0b3IgJ3NlbGVjdG9yJyB0aGF0IG1hdGNoZXMgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIG11c3Qgbm90IG1hdGNoIGVsZW1lbnRzIHRoYXQgd291bGQgbm90IGFsc28gbWF0Y2ggdGhl
ICc6YW55LWxpbmsnIHNlbGVjdG9yLgogICAgIC8vCkBAIC0yMTUsNiArMjI5LDggQEAgY2xhc3Mg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yIHsKICAgICB2b2lkIGdlbmVyYXRlU2VsZWN0b3JDaGVja2Vy
KCk7CiAKICAgICAvLyBFbGVtZW50IHJlbGF0aW9ucyB0cmVlIHdhbGtlci4KKyAgICB2b2lkIGdl
bmVyYXRlUmlnaHRtb3N0VHJlZVdhbGtlcihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKKwogICAgIHZvaWQgZ2VuZXJhdGVXYWxrVG9Q
YXJlbnROb2RlKEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0YXJnZXRSZWdpc3Rlcik7CiAgICAgdm9p
ZCBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVy
ZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFyZ2V0UmVnaXN0ZXIpOwogICAgIHZvaWQg
Z2VuZXJhdGVQYXJlbnRFbGVtZW50VHJlZVdhbGtlcihBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKQEAgLTIyOSwxMSArMjQ1LDEyIEBA
IGNsYXNzIFNlbGVjdG9yQ29kZUdlbmVyYXRvciB7CiAgICAgdm9pZCBsaW5rRmFpbHVyZXMoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZ2xvYmFsRmFpbHVyZUNhc2VzLCBCYWNrdHJhY2tpbmdBY3Rpb24s
IEFzc2VtYmxlcjo6SnVtcExpc3QmIGxvY2FsRmFpbHVyZUNhc2VzKTsKICAgICB2b2lkIGdlbmVy
YXRlQWRqYWNlbnRCYWNrdHJhY2tpbmdUYWlsKCk7CiAgICAgdm9pZCBnZW5lcmF0ZURlc2NlbmRh
bnRCYWNrdHJhY2tpbmdUYWlsKCk7Ci0gICAgdm9pZCBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxz
SWZOZWVkZWQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3Rv
ckZyYWdtZW50Jik7CisgICAgdm9pZCBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQo
Y29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogCiAgICAgLy8gRWxlbWVudCBwcm9wZXJ0aWVzIG1h
dGNoZXJzLgogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50TWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1w
TGlzdCYgbWF0Y2hpbmdUYWdOYW1lRmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6Okp1bXBMaXN0JiBt
YXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7
CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnREYXRhTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7CisgICAgdm9pZCBnZW5l
cmF0ZUVsZW1lbnRMaW5rTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2Vz
LCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRGdW5j
dGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5j
dGlvblB0cik7CiAgICAgdm9pZCBnZW5lcmF0ZUNvbnRleHRGdW5jdGlvbkNhbGxUZXN0KEFzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0cik7CiAgICAgdm9p
ZCBnZW5lcmF0ZUVsZW1lbnRJc0FjdGl2ZShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKQEAgLTI2OSw2ICsyODYsNyBAQCBjbGFzcyBT
ZWxlY3RvckNvZGVHZW5lcmF0b3IgewogICAgIHZvaWQgYWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZy
b21Db250ZXh0KEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQsIGludDY0X3Qp
OwogICAgIEFzc2VtYmxlcjo6SnVtcCBicmFuY2hPblJlc29sdmluZ01vZGVXaXRoQ2hlY2tpbmdD
b250ZXh0KEFzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU2VsZWN0b3JDaGVja2VyOjpN
b2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KTsKICAgICBBc3NlbWJs
ZXI6Okp1bXAgYnJhbmNoT25SZXNvbHZpbmdNb2RlKEFzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiwgU2VsZWN0b3JDaGVja2VyOjpNb2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tp
bmdDb250ZXh0KTsKKyAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzRmlyc3RMaW5rKEFzc2VtYmxl
cjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQp
OwogICAgIHZvaWQgZ2VuZXJhdGVNYXJrUHNldWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KEFzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwog
ICAgIHZvaWQgZ2VuZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBz
ZXVkb0VsZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxl
Y3RvckZyYWdtZW50JiwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCk7CiAg
ICAgdm9pZCBnZW5lcmF0ZVNwZWNpYWxGYWlsdXJlSW5RdWlya3NNb2RlRm9yQWN0aXZlQW5kSG92
ZXJJZk5lZWRlZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVj
dG9yRnJhZ21lbnQmKTsKQEAgLTI5MiwxOCArMzEwLDIzIEBAIGNsYXNzIFNlbGVjdG9yQ29kZUdl
bmVyYXRvciB7CiAgICAgU2VsZWN0b3JDb250ZXh0IG1fc2VsZWN0b3JDb250ZXh0OwogICAgIEZ1
bmN0aW9uVHlwZSBtX2Z1bmN0aW9uVHlwZTsKICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBtX3Nl
bGVjdG9yRnJhZ21lbnRzOworICAgIFZpc2l0ZWRDaGVja01vZGUgbV92aXNpdGVkQ2hlY2tNb2Rl
OwogICAgIGJvb2wgbV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQ7CiAKICAgICBTdGFj
a0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2UgbV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5j
ZTsKIAogICAgIEFzc2VtYmxlcjo6TGFiZWwgbV9kZXNjZW5kYW50RW50cnlQb2ludDsKKyAgICBB
c3NlbWJsZXI6Okp1bXBMaXN0IG1fZGVzY2VuZGFudEZhaWx1cmVDYXNlczsKKyAgICBBc3NlbWJs
ZXI6OkxhYmVsIG1fZGVzY2VuZGFudFRyZWVXYWxrZXJFbnRyeVBvaW50OworICAgIEFzc2VtYmxl
cjo6SnVtcExpc3QgbV9kZXNjZW5kYW50VHJlZVdhbGtlckZhaWx1cmVDYXNlczsKICAgICBBc3Nl
bWJsZXI6OkxhYmVsIG1faW5kaXJlY3RBZGphY2VudEVudHJ5UG9pbnQ7Ci0gICAgQXNzZW1ibGVy
OjpMYWJlbCBtX2Rlc2NlbmRhbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9pbnQ7Ci0gICAgQXNz
ZW1ibGVyOjpMYWJlbCBtX2luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9p
bnQ7CisgICAgQXNzZW1ibGVyOjpMYWJlbCBtX2luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyRW50
cnlQb2ludDsKICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgbV9kZXNjZW5kYW50QmFja3RyYWNr
aW5nU3RhcnQ7Ci0gICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2Rlc2NlbmRhbnRCYWNrdHJhY2tp
bmdGYWlsdXJlQ2FzZXM7CisgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2Rlc2NlbmRhbnRUYWls
RmFpbHVyZUNhc2VzOwogICAgIFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZSBtX2FkamFj
ZW50QmFja3RyYWNraW5nU3RhcnQ7CiAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2FkamFjZW50
QmFja3RyYWNraW5nRmFpbHVyZUNhc2VzOworICAgIFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVy
ZW5jZSBtX2xhc3RWaXNpdGVkRWxlbWVudDsKKyAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZl
cmVuY2UgbV9zdGFydEVsZW1lbnQ7CiAKICNpZiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lORwog
ICAgIGNvbnN0IENTU1NlbGVjdG9yKiBtX29yaWdpbmFsU2VsZWN0b3I7CkBAIC0zMjAsNyArMzQz
LDcgQEAgZW51bSBjbGFzcyBGcmFnbWVudHNMZXZlbCB7CiAgICAgSW5GdW5jdGlvbmFsUHNldWRv
VHlwZSA9IDEKIH07CiAKLXN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNv
bnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yQ29udGV4dCwgU2VsZWN0b3JG
cmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbCwgRnJhZ21lbnRQ
b3NpdGlvbkluUm9vdEZyYWdtZW50cyk7CitzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZy
YWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQs
IFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWws
IEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxl
ZCwgVmlzaXRlZENoZWNrTW9kZSYpOwogCiBzdGF0aWMgdm9pZCBjb21wdXRlQmFja3RyYWNraW5n
SW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBib29s
JiBuZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpOwogCkBAIC00MTAsNyArNDMzLDcgQEAg
c3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKGNv
bnN0IENTU1NlbGVjdG9yJiBzZWxlY3QKICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RN
YXRjaEFueXRoaW5nOwogfQogCi1zdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9D
bGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBm
cmFnbWVudCwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRQb3NpdGlv
bkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cykKK3N0YXRpYyBpbmxpbmUg
RnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0
b3IsIFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JD
b250ZXh0LCBGcmFnbWVudHNMZXZlbCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5S
b290RnJhZ21lbnRzIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVu
YWJsZWQsIFZpc2l0ZWRDaGVja01vZGUmIHZpc2l0ZWRDaGVja01vZGUpCiB7CiAgICAgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSB0eXBlID0gc2VsZWN0b3IucHNldWRvQ2xhc3NUeXBlKCk7
CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC00NjYsNyArNDg5LDcgQEAgc3RhdGljIGlubGluZSBG
dW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3Rv
ciwgU2VsZWMKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1dpbmRvd0luYWN0aXZl
OgogICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6
RnVuY3Rpb25QdHIoaXNXaW5kb3dJbmFjdGl2ZSkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7Ci0gICAgICAgICAgICAKKwogI2lmIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1bGxTY3Jl
ZW46CiAgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlND
OjpGdW5jdGlvblB0cihtYXRjaGVzRnVsbFNjcmVlblBzZXVkb0NsYXNzKSk7CkBAIC01MTAsMjEg
KzUzMywzMSBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUo
Y29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzTnRoT2ZUeXBlOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
TnRoTGFzdENoaWxkOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoTGFzdE9m
VHlwZToKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQ6CiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEcmFnOgogICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpDYW5ub3RDb21waWxlOwogCiAgICAgLy8gT3B0aW1pemVkIHBzZXVkbyBzZWxlY3RvcnMu
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnlMaW5rOgotICAgICAgICBmcmFn
bWVudC5wc2V1ZG9DbGFzc2VzLmFkZChDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rKTsKLSAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwotCiAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzUm9vdDoKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Rhcmdl
dDoKICAgICAgICAgZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5hZGQodHlwZSk7CiAgICAgICAgIHJl
dHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKIAorICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZDoKKyAgICAgICAgLy8gRGV0ZXJtaW5lIHRoaXMg
OnZpc2l0ZWQgY2Fubm90IG1hdGNoIGFueXRoaW5nIHN0YXRpY2FsbHkuCisgICAgICAgIGlmICgh
dmlzaXRlZE1hdGNoRW5hYmxlZCkKKyAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNh
bm5vdE1hdGNoQW55dGhpbmc7CisKKyAgICAgICAgLy8gSW5zaWRlIGZ1bmN0aW9uYWwgcHNldWRv
IGNsYXNzIGV4Y2VwdCBmb3IgOm5vdCwgOnZpc2l0ZWQgbmV2ZXIgbWF0Y2hlcy4KKyAgICAgICAg
Ly8gQW5kIGluIHRoZSBjYXNlIGluc2lkZSA6bm90LCByZXR1cm5pbmcgQ2Fubm90TWF0Y2hBbnl0
aGluZyBpbmRpY2F0ZXMgdGhhdCA6bm90KDp2aXNpdGVkKSBjYW4gbWF0Y2ggb3ZlciBhbnl0aGlu
Zy4KKyAgICAgICAgaWYgKGZyYWdtZW50TGV2ZWwgPT0gRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rp
b25hbFBzZXVkb1R5cGUpCisgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RN
YXRjaEFueXRoaW5nOworCisgICAgICAgIGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuYWRkKHR5cGUp
OworICAgICAgICB2aXNpdGVkQ2hlY2tNb2RlID0gVmlzaXRlZENoZWNrTW9kZTo6VmlzaXRlZDsK
KyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOworCiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTY29wZToKICAgICAgICAgaWYgKHNlbGVj
dG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpIHsKICAgICAgICAg
ICAgIGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuYWRkKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Jv
b3QpOwpAQCAtNTc2LDkgKzYwOSwxMSBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQ
c2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAg
ICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmc7CiAKICAg
ICAgICAgICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IG5vdEZyYWdtZW50czsKLSAgICAgICAgICAg
IEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc2VsZWN0b3JM
aXN0LT5maXJzdCgpLCBzZWxlY3RvckNvbnRleHQsIG5vdEZyYWdtZW50cywgRnJhZ21lbnRzTGV2
ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzKTsKKyAg
ICAgICAgICAgIFZpc2l0ZWRDaGVja01vZGUgaWdub3JlVmlzaXRlZENoZWNrTW9kZSA9IFZpc2l0
ZWRDaGVja01vZGU6Ok5vbmU7CisgICAgICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBl
ID0gY29uc3RydWN0RnJhZ21lbnRzKHNlbGVjdG9yTGlzdC0+Zmlyc3QoKSwgc2VsZWN0b3JDb250
ZXh0LCBub3RGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBl
LCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlz
aXRlZENoZWNrTW9kZSk7CiAKICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgbm90IHBzZXVk
byBjbGFzcyBmaWx0ZXIsIENhbm5vdE1hdGNoQW55dGhpbmcgaW1wbGllcyB0aGlzIGZpbHRlciBh
bHdheXMgcGFzc2VzLgorICAgICAgICAgICAgLy8gQW5kIHdoZW4gOnZpc2l0ZWQgaXMgaW5zaWRl
IDpub3QgKDpub3QoOnZpc2l0ZWQpKSwgaXQgcmV0dXJucyBDYW5ub3RNYXRjaEFueXRoaW5nIGFu
ZCBpdCBhbHdheXMgcGFzc2VzIHRoaXMgZmlsdGVyLgogICAgICAgICAgICAgaWYgKGZ1bmN0aW9u
VHlwZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogCkBAIC01ODks
MTEgKzYyNCwxMyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5
cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAgICAgICAgaWYgKG5v
dEZyYWdtZW50cy5zaXplKCkgIT0gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpDYW5ub3RDb21waWxlOwogCi0gICAgICAgICAgICBjb25zdCBTZWxlY3RvckZyYWdtZW50
JiBzdWJGcmFnbWVudCA9IG5vdEZyYWdtZW50cy5maXJzdCgpOworICAgICAgICAgICAgU2VsZWN0
b3JGcmFnbWVudCYgc3ViRnJhZ21lbnQgPSBub3RGcmFnbWVudHMuZmlyc3QoKTsKIAotICAgICAg
ICAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHZpc2l0ZWRNYXRjaFR5
cGUuCi0gICAgICAgICAgICBpZiAoc3ViRnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gRnVu
Y3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOworICAgICAgICAgICAgaWYgKHZpc2l0ZWRNYXRjaEVu
YWJsZWQgJiYgc3ViRnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NMaW5rKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
c2VsZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvciwgIldoZW4g
dmlzaXRlZE1hdGNoRW5hYmxlZCBpcyB0cnVlLCBzZWxlY3RvciBjb250ZXh0IGlzIG5ldmVyIFF1
ZXJ5U2VsZWN0b3IuIik7CisgICAgICAgICAgICAgICAgc3ViRnJhZ21lbnQuY2hlY2tWaXNpdGVk
SW5MaW5rSW5zaWRlTm90ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB2aXNpdGVkQ2hlY2tNb2Rl
ID0gbW9zdEV4dGVuZGVkVmlzaXRlZENoZWNrTW9kZSh2aXNpdGVkQ2hlY2tNb2RlLCBWaXNpdGVk
Q2hlY2tNb2RlOjpMaW5rSW5zaWRlTm90KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ZnJhZ21lbnQubm90RmlsdGVycy5hcHBlbmQoc3ViRnJhZ21lbnQpOwogICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uVHlwZTsKQEAgLTYwNSw3ICs2NDIsOCBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0
aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBT
ZWxlYwogICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IEZ1bmN0aW9uVHlw
ZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxl
Y3Rvciogcm9vdFNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHJv
b3RTZWxlY3Rvcjsgcm9vdFNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHJvb3RTZWxl
Y3RvcikpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBmcmFnbWVudExp
c3Q7Ci0gICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0
cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0
LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RG
cmFnbWVudHMpOworICAgICAgICAgICAgICAgIFZpc2l0ZWRDaGVja01vZGUgc3ViVmlzaXRlZENo
ZWNrTW9kZSA9IFZpc2l0ZWRDaGVja01vZGU6Ok5vbmU7CisgICAgICAgICAgICAgICAgRnVuY3Rp
b25UeXBlIHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3Is
IHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlv
bmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJs
ZWQsIHN1YlZpc2l0ZWRDaGVja01vZGUpOwogCiAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhp
cyBmcmFnbWVudCBhbHdheXMgdW5tYXRjaCBhZ2FpbnN0IHRoZSBlbGVtZW50LCBkb24ndCBpbnNl
cnQgaXQgdG8gYW55RnJhZ21lbnRzLgogICAgICAgICAgICAgICAgIGlmIChzdWJGdW5jdGlvblR5
cGUgPT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nKQpAQCAtNjE5LDYgKzY1Nyw4
IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBD
U1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50
TGlzdC5zaXplKCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlw
ZTo6Q2Fubm90Q29tcGlsZTsKIAorICAgICAgICAgICAgICAgIHZpc2l0ZWRDaGVja01vZGUgPSBt
b3N0RXh0ZW5kZWRWaXNpdGVkQ2hlY2tNb2RlKHZpc2l0ZWRDaGVja01vZGUsIHN1YlZpc2l0ZWRD
aGVja01vZGUpOworCiAgICAgICAgICAgICAgICAgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgc3Vi
RnJhZ21lbnQgPSBmcmFnbWVudExpc3QuZmlyc3QoKTsKICAgICAgICAgICAgICAgICBhbnlGcmFn
bWVudHMuYXBwZW5kKHN1YkZyYWdtZW50KTsKICAgICAgICAgICAgICAgICBmdW5jdGlvblR5cGUg
PSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBlLCBzdWJGdW5jdGlvblR5
cGUpOwpAQCAtNjY3LDYgKzcwNyw3IEBAIGlubGluZSBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OlNl
bGVjdG9yQ29kZUdlbmVyYXRvcihjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjCiAgICAgOiBt
X3N0YWNrQWxsb2NhdG9yKG1fYXNzZW1ibGVyKQogICAgICwgbV9zZWxlY3RvckNvbnRleHQoc2Vs
ZWN0b3JDb250ZXh0KQogICAgICwgbV9mdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlOjpTaW1wbGVT
ZWxlY3RvckNoZWNrZXIpCisgICAgLCBtX3Zpc2l0ZWRDaGVja01vZGUoVmlzaXRlZENoZWNrTW9k
ZTo6Tm9uZSkKICAgICAsIG1fbmVlZHNBZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KGZhbHNlKQog
I2lmIENTU19TRUxFQ1RPUl9KSVRfREVCVUdHSU5HCiAgICAgLCBtX29yaWdpbmFsU2VsZWN0b3Io
cm9vdFNlbGVjdG9yKQpAQCAtNjc2LDcgKzcxNywxMiBAQCBpbmxpbmUgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxl
YwogICAgIGRhdGFMb2dGKCJDb21waWxpbmcgXCIlc1wiXG4iLCBtX29yaWdpbmFsU2VsZWN0b3It
PnNlbGVjdG9yVGV4dCgpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAKLSAgICBtX2Z1bmN0aW9u
VHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250ZXh0
LCBtX3NlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQb3Np
dGlvbkluUm9vdEZyYWdtZW50czo6UmlnaHRtb3N0KTsKKyAgICAvLyBJbiBRdWVyeVNlbGVjdG9y
IGNvbnRleHQsIDp2aXNpdGVkIGFsd2F5cyBoYXMgbm8gZWZmZWN0IGR1ZSB0byBzZWN1cml0eSBp
c3N1ZXMuCisgICAgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkID0gdHJ1ZTsKKyAgICBpZiAoc2Vs
ZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvcikKKyAgICAgICAg
dmlzaXRlZE1hdGNoRW5hYmxlZCA9IGZhbHNlOworCisgICAgbV9mdW5jdGlvblR5cGUgPSBjb25z
dHJ1Y3RGcmFnbWVudHMocm9vdFNlbGVjdG9yLCBtX3NlbGVjdG9yQ29udGV4dCwgbV9zZWxlY3Rv
ckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OlJvb3QsIEZyYWdtZW50UG9zaXRpb25JblJvb3RG
cmFnbWVudHM6OlJpZ2h0bW9zdCwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgbV92aXNpdGVkQ2hlY2tN
b2RlKTsKICAgICBpZiAobV9mdW5jdGlvblR5cGUgIT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21w
aWxlICYmIG1fZnVuY3Rpb25UeXBlICE9IEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGlu
ZykKICAgICAgICAgY29tcHV0ZUJhY2t0cmFja2luZ0luZm9ybWF0aW9uKG1fc2VsZWN0b3JGcmFn
bWVudHMsIG1fbmVlZHNBZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KTsKIH0KQEAgLTY5Miw3ICs3
MzgsNyBAQCBzdGF0aWMgYm9vbCBpc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoQ1NTU2VsZWN0b3I6
OlBzZXVkb0VsZW1lbnRUeXBlIHR5cGUpCiAgICAgcmV0dXJuIHR5cGUgPj0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0VsZW1lbnRTY3JvbGxiYXIgJiYgdHlwZSA8PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudFNjcm9sbGJhclRyYWNrUGllY2U7CiB9CiAKLXN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3Ry
dWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yQ29u
dGV4dCBzZWxlY3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdt
ZW50cywgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9v
dEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cykKK3N0YXRpYyBGdW5jdGlvblR5cGUg
Y29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVj
dG9yQ29udGV4dCBzZWxlY3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3Rv
ckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlv
bkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVkTWF0
Y2hFbmFibGVkLCBWaXNpdGVkQ2hlY2tNb2RlJiB2aXNpdGVkQ2hlY2tNb2RlKQogewogICAgIFNl
bGVjdG9yRnJhZ21lbnQgZnJhZ21lbnQ7CiAgICAgRnJhZ21lbnRSZWxhdGlvbiByZWxhdGlvblRv
UHJldmlvdXNGcmFnbWVudCA9IEZyYWdtZW50UmVsYXRpb246OlJpZ2h0bW9zdDsKQEAgLTczNyw3
ICs3ODMsNyBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBD
U1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvcgogICAgICAgICAgICAgaWYgKGZyYWdt
ZW50LnBzZXVkb0VsZW1lbnRTZWxlY3RvciAmJiBpc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZnJh
Z21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpKSkKICAgICAg
ICAgICAgICAgICBmdW5jdGlvblR5cGUgPSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVu
Y3Rpb25UeXBlLCBhZGRTY3JvbGxiYXJQc2V1ZG9DbGFzc1R5cGUoKnNlbGVjdG9yLCBmcmFnbWVu
dCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1v
c3RSZXN0cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5cGUsIGFkZFBzZXVkb0NsYXNzVHlw
ZSgqc2VsZWN0b3IsIGZyYWdtZW50LCBzZWxlY3RvckNvbnRleHQsIHN1YlBvc2l0aW9uKSk7Cisg
ICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBl
KGZ1bmN0aW9uVHlwZSwgYWRkUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQsIHNl
bGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMZXZlbCwgc3ViUG9zaXRpb24sIHZpc2l0ZWRNYXRjaEVu
YWJsZWQsIHZpc2l0ZWRDaGVja01vZGUpKTsKICAgICAgICAgICAgIGlmICghcHNldWRvQ2xhc3NP
bmx5TWF0Y2hlc0xpbmtzSW5RdWlya3NNb2RlKCpzZWxlY3RvcikpCiAgICAgICAgICAgICAgICAg
ZnJhZ21lbnQub25seU1hdGNoZXNMaW5rc0luUXVpcmtzTW9kZSA9IGZhbHNlOwogICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGUgfHwgZnVu
Y3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZykKQEAgLTgyMCw2
ICs4NjYsOSBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBD
U1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvcgogICAgICAgICAgICAgaWYgKHNlbGVj
dG9yQ29udGV4dCA9PSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpCiAgICAgICAgICAg
ICAgICAgcmVsYXRpb25GdW5jdGlvblR5cGUgPSBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9y
Q2hlY2tlcjsKICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0
aW9uVHlwZShmdW5jdGlvblR5cGUsIHJlbGF0aW9uRnVuY3Rpb25UeXBlKTsKKworICAgICAgICAg
ICAgLy8gV2hlbiB0aGUgcmVsYXRpb24gaXMgYWRqYWNlbnQsIGRpc2FibGUgOnZpc2l0ZWQgbWF0
Y2guCisgICAgICAgICAgICB2aXNpdGVkTWF0Y2hFbmFibGVkID0gZmFsc2U7CiAgICAgICAgIH0K
IAogICAgICAgICBmcmFnbWVudC5yZWxhdGlvblRvTGVmdEZyYWdtZW50ID0gZnJhZ21lbnRSZWxh
dGlvbkZvclNlbGVjdG9yUmVsYXRpb24ocmVsYXRpb24pOwpAQCAtMTM3OSwxOSArMTQyOCwzNiBA
QCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIoKQog
CiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVJlZ2lzdGVyKGVsZW1lbnRBZGRyZXNz
UmVnaXN0ZXIpOwogCi0gICAgU3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlIHRlbXBvcmFy
eVN0YWNrQmFzZTsKKyAgICAvLyBSZW1lbWJlciB0aGUgc3RhY2sgYmFzZSBvZiB0aGUgdGVtcG9y
YXJ5IHZhcmlhYmxlcy4KKyAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2UgdGVtcG9y
YXJ5U3RhY2tCYXNlID0gbV9zdGFja0FsbG9jYXRvci5zdGFja1RvcCgpOwogCiAgICAgaWYgKG1f
ZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5n
Q29udGV4dCkKICAgICAgICAgbV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZSA9IG1fc3Rh
Y2tBbGxvY2F0b3IucHVzaChjaGVja2luZ0NvbnRleHRSZWdpc3Rlcik7CiAKLSAgICBpZiAobV9u
ZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpCisgICAgLy8gQWxsb2NhdGUgdW5pbml0aWFs
aXplZCBzdGFjayByZWZlcmVuY2VzCisgICAgaWYgKG1fdmlzaXRlZENoZWNrTW9kZSAhPSBWaXNp
dGVkQ2hlY2tNb2RlOjpOb25lKSB7CisgICAgICAgIGlmIChtX25lZWRzQWRqYWNlbnRCYWNrdHJh
Y2tpbmdTdGFydCkgeworICAgICAgICAgICAgU3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNl
VmVjdG9yIHJlZmVyZW5jZXMgPSBtX3N0YWNrQWxsb2NhdG9yLmFsbG9jYXRlVW5pbml0aWFsaXpl
ZCgzKTsKKyAgICAgICAgICAgIG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCA9IHJlZmVyZW5j
ZXNbMF07CisgICAgICAgICAgICBtX2xhc3RWaXNpdGVkRWxlbWVudCA9IHJlZmVyZW5jZXNbMV07
CisgICAgICAgICAgICBtX3N0YXJ0RWxlbWVudCA9IHJlZmVyZW5jZXNbMl07CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2VWZWN0b3Ig
cmVmZXJlbmNlcyA9IG1fc3RhY2tBbGxvY2F0b3IuYWxsb2NhdGVVbmluaXRpYWxpemVkKDIpOwor
ICAgICAgICAgICAgbV9sYXN0VmlzaXRlZEVsZW1lbnQgPSByZWZlcmVuY2VzWzBdOworICAgICAg
ICAgICAgbV9zdGFydEVsZW1lbnQgPSByZWZlcmVuY2VzWzFdOworICAgICAgICB9CisgICAgICAg
IHVuc2lnbmVkIG9mZnNldFRvU3RhcnRFbGVtZW50ID0gbV9zdGFja0FsbG9jYXRvci5vZmZzZXRU
b1N0YWNrUmVmZXJlbmNlKG1fc3RhcnRFbGVtZW50KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Rv
cmVQdHIoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgQXNzZW1ibGVyOjpBZGRyZXNzKEFzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRvU3RhcnRFbGVtZW50KSk7CisgICAgICAg
IGlmIChtX3Zpc2l0ZWRDaGVja01vZGUgPT0gVmlzaXRlZENoZWNrTW9kZTo6VmlzaXRlZCkgewor
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0VG9MYXN0VmlzaXRlZEVsZW1lbnQgPSBtX3N0YWNr
QWxsb2NhdG9yLm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV9sYXN0VmlzaXRlZEVsZW1lbnQpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RvcmVQdHIoQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBBc3NlbWJsZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlciwgb2Zmc2V0VG9MYXN0VmlzaXRlZEVsZW1lbnQpKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAobV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpCiAgICAgICAgIG1fYWRqYWNl
bnRCYWNrdHJhY2tpbmdTdGFydCA9IG1fc3RhY2tBbGxvY2F0b3IuYWxsb2NhdGVVbmluaXRpYWxp
emVkKCk7CiAKLSAgICAvLyBSZW1lbWJlciB0aGUgc3RhY2sgYmFzZSBvZiB0aGUgdGVtcG9yYXJ5
IHZhcmlhYmxlcy4KLSAgICBpZiAobV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZS5pc1Zh
bGlkKCkpCi0gICAgICAgIHRlbXBvcmFyeVN0YWNrQmFzZSA9IG1fY2hlY2tpbmdDb250ZXh0U3Rh
Y2tSZWZlcmVuY2U7Ci0gICAgZWxzZSBpZiAobV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3Rh
cnQpCi0gICAgICAgIHRlbXBvcmFyeVN0YWNrQmFzZSA9IG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdT
dGFydDsKKyAgICAvLyBJbnZhbGlkYXRlIHRlbXBvcmFyeVN0YWNrQmFzZSBpZiB0aGVyZSdzIG5v
IHRlbXBvcmFyeSB2YXJpYWJsZXMuCisgICAgaWYgKHRlbXBvcmFyeVN0YWNrQmFzZSA9PSBtX3N0
YWNrQWxsb2NhdG9yLnN0YWNrVG9wKCkpCisgICAgICAgIHRlbXBvcmFyeVN0YWNrQmFzZSA9IFN0
YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZSgpOwogCiAgICAgQXNzZW1ibGVyOjpKdW1wTGlz
dCBmYWlsdXJlQ2FzZXM7CiAKQEAgLTEzOTksNyArMTQ2NSw3IEBAIHZvaWQgU2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcigpCiAgICAgICAgIGNvbnN0IFNlbGVj
dG9yRnJhZ21lbnQmIGZyYWdtZW50ID0gbV9zZWxlY3RvckZyYWdtZW50c1tpXTsKICAgICAgICAg
c3dpdGNoIChmcmFnbWVudC5yZWxhdGlvblRvUmlnaHRGcmFnbWVudCkgewogICAgICAgICBjYXNl
IEZyYWdtZW50UmVsYXRpb246OlJpZ2h0bW9zdDoKLSAgICAgICAgICAgIGdlbmVyYXRlRWxlbWVu
dE1hdGNoaW5nKGZhaWx1cmVDYXNlcywgZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CisgICAgICAg
ICAgICBnZW5lcmF0ZVJpZ2h0bW9zdFRyZWVXYWxrZXIoZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGcmFnbWVudFJlbGF0aW9uOjpEZXNj
ZW5kYW50OgogICAgICAgICAgICAgZ2VuZXJhdGVBbmNlc3RvclRyZWVXYWxrZXIoZmFpbHVyZUNh
c2VzLCBmcmFnbWVudCk7CkBAIC0xNDE2LDcgKzE0ODIsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIoKQogICAgICAgICB9CiAgICAgICAgIGlm
IChzaG91bGRNYXJrU3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoZnJhZ21lbnQpKQog
ICAgICAgICAgICAgbWFya0VsZW1lbnRJZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVn
aXN0ZXIsIE5vZGU6OmZsYWdTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpKTsKLSAg
ICAgICAgZ2VuZXJhdGVCYWNrdHJhY2tpbmdUYWlsc0lmTmVlZGVkKGZhaWx1cmVDYXNlcywgZnJh
Z21lbnQpOworICAgICAgICBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQoZnJhZ21l
bnQpOwogICAgIH0KIAogICAgIGlmIChtX3NlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRl
eHQ6OlF1ZXJ5U2VsZWN0b3IgJiYgbV9mdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpTZWxl
Y3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KSB7CkBAIC0xNDI0LDYgKzE0OTAsMTUgQEAg
dm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyKCkKICAg
ICAgICAgZ2VuZXJhdGVNYXJrUHNldWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KGZhaWx1cmVDYXNl
cywgbV9zZWxlY3RvckZyYWdtZW50cy5maXJzdCgpKTsKICAgICB9CiAKKyAgICBpZiAobV92aXNp
dGVkQ2hlY2tNb2RlID09IFZpc2l0ZWRDaGVja01vZGU6OlZpc2l0ZWQpIHsKKyAgICAgICAgTG9j
YWxSZWdpc3RlciBsYXN0VmlzaXRlZEVsZW1lbnQobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAg
ICAgIHVuc2lnbmVkIG9mZnNldFRvTGFzdFZpc2l0ZWRFbGVtZW50ID0gbV9zdGFja0FsbG9jYXRv
ci5vZmZzZXRUb1N0YWNrUmVmZXJlbmNlKG1fbGFzdFZpc2l0ZWRFbGVtZW50KTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9MYXN0VmlzaXRlZEVsZW1lbnQpLCBsYXN0VmlzaXRlZEVs
ZW1lbnQpOworICAgICAgICBBc3NlbWJsZXI6Okp1bXAgbm9MYXN0VmlzaXRlZEVsZW1lbnQgPSBt
X2Fzc2VtYmxlci5icmFuY2hUZXN0UHRyKEFzc2VtYmxlcjo6WmVybywgbGFzdFZpc2l0ZWRFbGVt
ZW50KTsKKyAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNGaXJzdExpbmsoZmFpbHVyZUNhc2VzLCBs
YXN0VmlzaXRlZEVsZW1lbnQpOworICAgICAgICBub0xhc3RWaXNpdGVkRWxlbWVudC5saW5rKCZt
X2Fzc2VtYmxlcik7CisgICAgfQorCiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRl
UmVnaXN0ZXIoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CiAKICAgICBpZiAobV9mdW5jdGlvblR5
cGUgPT0gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKQEAgLTE0NzYsNiAr
MTU1MSwxMSBAQCBzdGF0aWMgaW5saW5lIEFzc2VtYmxlcjo6SnVtcCB0ZXN0SXNFbGVtZW50Rmxh
Z09uTm9kZShBc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbgogICAgIHJldHVybiBhc3NlbWJsZXIu
YnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgQXNzZW1ibGVyOjpBZGRyZXNzKG5vZGVBZGRyZXNzLCBO
b2RlOjpub2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5v
ZGU6OmZsYWdJc0VsZW1lbnQoKSkpOwogfQogCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVSaWdodG1vc3RUcmVlV2Fsa2VyKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit7CisgICAgZ2VuZXJhdGVF
bGVtZW50TWF0Y2hpbmcoZmFpbHVyZUNhc2VzLCBmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKK30K
Kwogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlV2Fsa1RvUGFyZW50Tm9kZShB
c3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFyZ2V0UmVnaXN0ZXIpCiB7CiAgICAgbV9hc3NlbWJsZXIu
bG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3MoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgTm9kZTo6
cGFyZW50Tm9kZU1lbW9yeU9mZnNldCgpKSwgdGFyZ2V0UmVnaXN0ZXIpOwpAQCAtMTUxNSw3ICsx
NTk1LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQW5jZXN0b3JUcmVl
V2Fsa2VyKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWwKICAgICBBc3NlbWJsZXI6OkxhYmVsIGxv
b3BTdGFydChtX2Fzc2VtYmxlci5sYWJlbCgpKTsKIAogICAgIGlmIChmcmFnbWVudC5iYWNrdHJh
Y2tpbmdGbGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6OkRlc2NlbmRhbnRFbnRyeVBvaW50KQotICAg
ICAgICBtX2Rlc2NlbmRhbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9pbnQgPSBtX2Fzc2VtYmxl
ci5sYWJlbCgpOworICAgICAgICBtX2Rlc2NlbmRhbnRUcmVlV2Fsa2VyRW50cnlQb2ludCA9IG1f
YXNzZW1ibGVyLmxhYmVsKCk7CiAKICAgICBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQoZmFp
bHVyZUNhc2VzLCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKIApAQCAtMTU5NSw3ICsxNjc1LDcg
QEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlSW5kaXJlY3RBZGphY2VudFRy
ZWVXYWxrZXIoQXNzZW1ibGVyOjpKdW1wTGkKICAgICBBc3NlbWJsZXI6OkxhYmVsIGxvb3BTdGFy
dChtX2Fzc2VtYmxlci5sYWJlbCgpKTsKIAogICAgIGlmIChmcmFnbWVudC5iYWNrdHJhY2tpbmdG
bGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6OkluZGlyZWN0QWRqYWNlbnRFbnRyeVBvaW50KQotICAg
ICAgICBtX2luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9pbnQgPSBtX2Fz
c2VtYmxlci5sYWJlbCgpOworICAgICAgICBtX2luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyRW50
cnlQb2ludCA9IG1fYXNzZW1ibGVyLmxhYmVsKCk7CiAKICAgICBnZW5lcmF0ZVdhbGtUb1ByZXZp
b3VzQWRqYWNlbnQoZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CiAgICAgbWFya0VsZW1lbnRJZlJl
c29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIE5vZGU6OmZsYWdBZmZlY3RzTmV4
dFNpYmxpbmdFbGVtZW50U3R5bGUoKSk7CkBAIC0xODYzLDE5ICsxOTQzLDE5IEBAIHZvaWQgU2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yOjpsaW5rRmFpbHVyZXMoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZ2xv
YmFsRmFpbHVyZUNhc2VzCiAgICAgICAgIGdsb2JhbEZhaWx1cmVDYXNlcy5hcHBlbmQobG9jYWxG
YWlsdXJlQ2FzZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEJhY2t0cmFja2luZ0FjdGlv
bjo6SnVtcFRvRGVzY2VuZGFudEVudHJ5UG9pbnQ6Ci0gICAgICAgIGxvY2FsRmFpbHVyZUNhc2Vz
LmxpbmtUbyhtX2Rlc2NlbmRhbnRFbnRyeVBvaW50LCAmbV9hc3NlbWJsZXIpOworICAgICAgICBt
X2Rlc2NlbmRhbnRGYWlsdXJlQ2FzZXMuYXBwZW5kKGxvY2FsRmFpbHVyZUNhc2VzKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBCYWNrdHJhY2tpbmdBY3Rpb246Okp1bXBUb0Rlc2NlbmRhbnRU
cmVlV2Fsa2VyRW50cnlQb2ludDoKLSAgICAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlua1RvKG1f
ZGVzY2VuZGFudFRyZWVXYWxrZXJCYWNrdHJhY2tpbmdQb2ludCwgJm1fYXNzZW1ibGVyKTsKKyAg
ICAgICAgbV9kZXNjZW5kYW50VHJlZVdhbGtlckZhaWx1cmVDYXNlcy5hcHBlbmQobG9jYWxGYWls
dXJlQ2FzZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEJhY2t0cmFja2luZ0FjdGlvbjo6
SnVtcFRvRGVzY2VuZGFudFRhaWw6Ci0gICAgICAgIG1fZGVzY2VuZGFudEJhY2t0cmFja2luZ0Zh
aWx1cmVDYXNlcy5hcHBlbmQobG9jYWxGYWlsdXJlQ2FzZXMpOworICAgICAgICBtX2Rlc2NlbmRh
bnRUYWlsRmFpbHVyZUNhc2VzLmFwcGVuZChsb2NhbEZhaWx1cmVDYXNlcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQmFja3RyYWNraW5nQWN0aW9uOjpKdW1wVG9JbmRpcmVjdEFkamFjZW50
RW50cnlQb2ludDoKICAgICAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlua1RvKG1faW5kaXJlY3RB
ZGphY2VudEVudHJ5UG9pbnQsICZtX2Fzc2VtYmxlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQmFja3RyYWNraW5nQWN0aW9uOjpKdW1wVG9JbmRpcmVjdEFkamFjZW50VHJlZVdhbGtlckVu
dHJ5UG9pbnQ6Ci0gICAgICAgIGxvY2FsRmFpbHVyZUNhc2VzLmxpbmtUbyhtX2luZGlyZWN0QWRq
YWNlbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9pbnQsICZtX2Fzc2VtYmxlcik7CisgICAgICAg
IGxvY2FsRmFpbHVyZUNhc2VzLmxpbmtUbyhtX2luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyRW50
cnlQb2ludCwgJm1fYXNzZW1ibGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBCYWNrdHJh
Y2tpbmdBY3Rpb246Okp1bXBUb0RpcmVjdEFkamFjZW50VGFpbDoKICAgICAgICAgbV9hZGphY2Vu
dEJhY2t0cmFja2luZ0ZhaWx1cmVDYXNlcy5hcHBlbmQobG9jYWxGYWlsdXJlQ2FzZXMpOwpAQCAt
MTg5NSwzMCArMTk3NSwzMyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVB
ZGphY2VudEJhY2t0cmFja2luZ1RhaWwoKQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVEZXNjZW5kYW50QmFja3RyYWNraW5nVGFpbCgpCiB7Ci0gICAgbV9kZXNjZW5kYW50
QmFja3RyYWNraW5nRmFpbHVyZUNhc2VzLmxpbmsoJm1fYXNzZW1ibGVyKTsKLSAgICBtX2Rlc2Nl
bmRhbnRCYWNrdHJhY2tpbmdGYWlsdXJlQ2FzZXMuY2xlYXIoKTsKKyAgICBtX2Rlc2NlbmRhbnRU
YWlsRmFpbHVyZUNhc2VzLmxpbmsoJm1fYXNzZW1ibGVyKTsKKyAgICBtX2Rlc2NlbmRhbnRUYWls
RmFpbHVyZUNhc2VzLmNsZWFyKCk7CiAgICAgbV9hc3NlbWJsZXIubW92ZShtX2Rlc2NlbmRhbnRC
YWNrdHJhY2tpbmdTdGFydCwgZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CiAgICAgbV9yZWdpc3Rl
ckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIobV9kZXNjZW5kYW50QmFja3RyYWNraW5nU3Rh
cnQpOwogICAgIG1fYXNzZW1ibGVyLmp1bXAobV9kZXNjZW5kYW50RW50cnlQb2ludCk7CiB9CiAK
LXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZO
ZWVkZWQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZy
YWdtZW50JiBmcmFnbWVudCkKK3N0YXRpYyBib29sIG5lZWRzQmFja3RyYWNraW5nVGFpbChjb25z
dCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKIHsKLSAgICBpZiAoZnJhZ21lbnQuYmFja3Ry
YWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpEaXJlY3RBZGphY2VudFRhaWwgJiYgZnJh
Z21lbnQuYmFja3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpEZXNjZW5kYW50VGFp
bCkgewotICAgICAgICBBc3NlbWJsZXI6Okp1bXAgbm9ybWFsQ2FzZSA9IG1fYXNzZW1ibGVyLmp1
bXAoKTsKLSAgICAgICAgZ2VuZXJhdGVBZGphY2VudEJhY2t0cmFja2luZ1RhaWwoKTsKLSAgICAg
ICAgZ2VuZXJhdGVEZXNjZW5kYW50QmFja3RyYWNraW5nVGFpbCgpOwotICAgICAgICBub3JtYWxD
YXNlLmxpbmsoJm1fYXNzZW1ibGVyKTsKLSAgICB9IGVsc2UgaWYgKGZyYWdtZW50LmJhY2t0cmFj
a2luZ0ZsYWdzICYgQmFja3RyYWNraW5nRmxhZzo6RGlyZWN0QWRqYWNlbnRUYWlsKSB7Ci0gICAg
ICAgIEFzc2VtYmxlcjo6SnVtcCBub3JtYWxDYXNlID0gbV9hc3NlbWJsZXIuanVtcCgpOwotICAg
ICAgICBnZW5lcmF0ZUFkamFjZW50QmFja3RyYWNraW5nVGFpbCgpOwotICAgICAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmp1bXAoKSk7Ci0gICAgICAgIG5vcm1hbENhc2UubGlu
aygmbV9hc3NlbWJsZXIpOwotICAgIH0gZWxzZSBpZiAoZnJhZ21lbnQuYmFja3RyYWNraW5nRmxh
Z3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpEZXNjZW5kYW50VGFpbCkgeworICAgIHJldHVybiBmcmFn
bWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIChCYWNrdHJhY2tpbmdGbGFnOjpEaXJlY3RBZGphY2Vu
dFRhaWwgfCBCYWNrdHJhY2tpbmdGbGFnOjpEZXNjZW5kYW50VGFpbCk7Cit9CisKK3ZvaWQgU2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQoY29u
c3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit7CisgICAgaWYgKG5lZWRzQmFja3RyYWNr
aW5nVGFpbChmcmFnbWVudCkpIHsKICAgICAgICAgQXNzZW1ibGVyOjpKdW1wIG5vcm1hbENhc2Ug
PSBtX2Fzc2VtYmxlci5qdW1wKCk7Ci0gICAgICAgIGdlbmVyYXRlRGVzY2VuZGFudEJhY2t0cmFj
a2luZ1RhaWwoKTsKKyAgICAgICAgaWYgKGZyYWdtZW50LmJhY2t0cmFja2luZ0ZsYWdzICYgQmFj
a3RyYWNraW5nRmxhZzo6RGlyZWN0QWRqYWNlbnRUYWlsKQorICAgICAgICAgICAgZ2VuZXJhdGVB
ZGphY2VudEJhY2t0cmFja2luZ1RhaWwoKTsKKyAgICAgICAgaWYgKGZyYWdtZW50LmJhY2t0cmFj
a2luZ0ZsYWdzICYgQmFja3RyYWNraW5nRmxhZzo6RGVzY2VuZGFudFRhaWwpCisgICAgICAgICAg
ICBnZW5lcmF0ZURlc2NlbmRhbnRCYWNrdHJhY2tpbmdUYWlsKCk7CiAgICAgICAgIG5vcm1hbENh
c2UubGluaygmbV9hc3NlbWJsZXIpOwogICAgIH0KKworICAgIGlmICghbV9kZXNjZW5kYW50RmFp
bHVyZUNhc2VzLmVtcHR5KCkpCisgICAgICAgIG1fZGVzY2VuZGFudEZhaWx1cmVDYXNlcy5saW5r
VG8obV9kZXNjZW5kYW50RW50cnlQb2ludCwgJm1fYXNzZW1ibGVyKTsKKyAgICBpZiAoIW1fZGVz
Y2VuZGFudFRyZWVXYWxrZXJGYWlsdXJlQ2FzZXMuZW1wdHkoKSkKKyAgICAgICAgbV9kZXNjZW5k
YW50VHJlZVdhbGtlckZhaWx1cmVDYXNlcy5saW5rVG8obV9kZXNjZW5kYW50VHJlZVdhbGtlckVu
dHJ5UG9pbnQsICZtX2Fzc2VtYmxlcik7CiB9CiAKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBtYXRjaGluZ1Rh
Z05hbWVGYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoaW5nUG9zdFRhZ05h
bWVGYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQpAQCAtMTky
Niw4ICsyMDA5LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVu
dE1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoaW4KICAgICBpZiAoZnJhZ21lbnQu
dGFnTmFtZSkKICAgICAgICAgZ2VuZXJhdGVFbGVtZW50SGFzVGFnTmFtZShtYXRjaGluZ1RhZ05h
bWVGYWlsdXJlQ2FzZXMsICooZnJhZ21lbnQudGFnTmFtZSkpOwogCi0gICAgaWYgKGZyYWdtZW50
LnBzZXVkb0NsYXNzZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluaykpCi0g
ICAgICAgIGdlbmVyYXRlRWxlbWVudElzTGluayhtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNh
c2VzKTsKKyAgICBnZW5lcmF0ZUVsZW1lbnRMaW5rTWF0Y2hpbmcobWF0Y2hpbmdQb3N0VGFnTmFt
ZUZhaWx1cmVDYXNlcywgZnJhZ21lbnQpOwogCiAgICAgaWYgKGZyYWdtZW50LnBzZXVkb0NsYXNz
ZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUm9vdCkpCiAgICAgICAgIGdlbmVy
YXRlRWxlbWVudElzUm9vdChtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzKTsKQEAgLTE5
OTUsNiArMjA3NywxOCBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50RGF0YU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaQogICAgICAgICBnZW5lcmF0
ZUVsZW1lbnRBdHRyaWJ1dGVzTWF0Y2hpbmcoZmFpbHVyZUNhc2VzLCBlbGVtZW50RGF0YUFkZHJl
c3MsIGZyYWdtZW50KTsKIH0KIAordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
RWxlbWVudExpbmtNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNv
bnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQoreworICAgIGJvb2wgY29udGFpbnNQc2V1
ZG9DbGFzc0xpbmsgPSBmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc0xpbmspIHx8IGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29udGFpbnMoQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzQW55TGluayk7CisgICAgYm9vbCBjb250YWluc1BzZXVkb0Ns
YXNzVmlzaXRlZCA9IGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzVmlzaXRlZCk7CisgICAgaWYgKGNvbnRhaW5zUHNldWRvQ2xhc3NMaW5rIHx8
IGNvbnRhaW5zUHNldWRvQ2xhc3NWaXNpdGVkKQorICAgICAgICBnZW5lcmF0ZUVsZW1lbnRJc0xp
bmsoZmFpbHVyZUNhc2VzKTsKKyAgICBpZiAoY29udGFpbnNQc2V1ZG9DbGFzc1Zpc2l0ZWQpIHsK
KyAgICAgICAgdW5zaWduZWQgb2Zmc2V0VG9MYXN0VmlzaXRlZEVsZW1lbnQgPSBtX3N0YWNrQWxs
b2NhdG9yLm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV9sYXN0VmlzaXRlZEVsZW1lbnQpOworICAg
ICAgICBtX2Fzc2VtYmxlci5zdG9yZVB0cihlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBBc3NlbWJs
ZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9MYXN0
VmlzaXRlZEVsZW1lbnQpKTsKKyAgICB9Cit9CisKIHN0YXRpYyBpbmxpbmUgQXNzZW1ibGVyOjpK
dW1wIHRlc3RJc0hUTUxGbGFnT25Ob2RlKEFzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRp
dGlvbiwgQXNzZW1ibGVyJiBhc3NlbWJsZXIsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBub2RlQWRk
cmVzcykKIHsKICAgICByZXR1cm4gYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihjb25kaXRpb24sIEFz
c2VtYmxlcjo6QWRkcmVzcyhub2RlQWRkcmVzcywgTm9kZTo6bm9kZUZsYWdzTWVtb3J5T2Zmc2V0
KCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOb2RlOjpmbGFnSXNIVE1MKCkpKTsKQEAgLTMw
MTYsNiArMzExMCwxNiBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50TWF0Y2hlc05vdFBzZXVkb0NsYXNzKEFzc2VtYmxlcjo6SnVtcAogewogICAgIGZvciAoY29u
c3QgYXV0byYgc3ViRnJhZ21lbnQgOiBmcmFnbWVudC5ub3RGaWx0ZXJzKSB7CiAgICAgICAgIEFz
c2VtYmxlcjo6SnVtcExpc3QgbG9jYWxGYWlsdXJlQ2FzZXM7CisKKyAgICAgICAgLy8gV2hlbiA6
bm90IGhhcyA6bGluayBhbmQgY3VycmVudCB2aXNpdGVkTWF0Y2hUeXBlIGlzIFZpc2l0ZWRNYXRj
aEVuYWJsZWQsIDpub3QgZmlsdGVyIHBhc3NlcyByZWdhcmRsZXNzIG9mIHRoZSBlbGVtZW50Lgor
ICAgICAgICBpZiAoc3ViRnJhZ21lbnQuY2hlY2tWaXNpdGVkSW5MaW5rSW5zaWRlTm90KSB7Cisg
ICAgICAgICAgICBBU1NFUlQoc3ViRnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6Okp1bXBM
aXN0IG5vdEZpcnN0TGlua0Nhc2VzOworICAgICAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNGaXJz
dExpbmsobm90Rmlyc3RMaW5rQ2FzZXMsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOworICAgICAg
ICAgICAgbG9jYWxGYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmp1bXAoKSk7CisgICAg
ICAgICAgICBub3RGaXJzdExpbmtDYXNlcy5saW5rKCZtX2Fzc2VtYmxlcik7CisgICAgICAgIH0K
KwogICAgICAgICBnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyhsb2NhbEZhaWx1cmVDYXNlcywgbG9j
YWxGYWlsdXJlQ2FzZXMsIHN1YkZyYWdtZW50KTsKICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBh
IG5vdCBwc2V1ZG8gY2xhc3MgZmlsdGVyLCByZWFjaGluZyBoZXJlIGlzIGEgZmFpbHVyZS4KICAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5qdW1wKCkpOwpAQCAtMzEwNCw2
ICszMjA4LDI5IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJ
c1RhcmdldChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlCiAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChtX2Fzc2VtYmxlci5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVy
OjpBZGRyZXNzKGRvY3VtZW50LCBEb2N1bWVudDo6Y3NzVGFyZ2V0TWVtb3J5T2Zmc2V0KCkpLCBl
bGVtZW50QWRkcmVzc1JlZ2lzdGVyKSk7CiB9CiAKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0TGluayhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50KQoreworICAgIExvY2FsUmVnaXN0
ZXIgY3VycmVudEVsZW1lbnQobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAgdW5zaWduZWQgb2Zm
c2V0VG9TdGFydEVsZW1lbnQgPSBtX3N0YWNrQWxsb2NhdG9yLm9mZnNldFRvU3RhY2tSZWZlcmVu
Y2UobV9zdGFydEVsZW1lbnQpOworICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpB
ZGRyZXNzKEFzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRvU3RhcnRFbGVt
ZW50KSwgY3VycmVudEVsZW1lbnQpOworCisgICAgLy8gVHJlZSB3YWxraW5nIHVwIHRvIHRoZSBw
cm92aWRlZCBlbGVtZW50IHVudGlsIGxpbmsgbm9kZSBpcyBmb3VuZC4KKyAgICBBc3NlbWJsZXI6
OkxhYmVsIGxvb3BTdGFydChtX2Fzc2VtYmxlci5sYWJlbCgpKTsKKworICAgIC8vIFRoZSB0YXJn
ZXQgZWxlbWVudCBpcyBhbHdheXMgaW4gdGhlIGFuY2VzdG9ycyBmcm9tIHRoZSBzdGFydCBlbGVt
ZW50IHRvIHRoZSByb290IG5vZGUuCisgICAgLy8gU28gdGhlIHRyZWUgd2Fsa2luZyBkb2Vzbid0
IGxvb3AgaW5maW5pdGVseSBhbmQgaXQgd2lsbCBiZSBzdG9wcGVkIHdpdGggdGhlIGZvbGxvd2lu
ZyBgY3VycmVudEVsZW1lbnQgPT0gZWxlbWVudGAgY29uZGl0aW9uLgorICAgIEFzc2VtYmxlcjo6
SnVtcCByZWFjaGVkVG9FbGVtZW50ID0gbV9hc3NlbWJsZXIuYnJhbmNoUHRyKEFzc2VtYmxlcjo6
RXF1YWwsIGN1cnJlbnRFbGVtZW50LCBlbGVtZW50KTsKKworICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVybywgQXNzZW1ibGVy
OjpBZGRyZXNzKGN1cnJlbnRFbGVtZW50LCBOb2RlOjpub2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSks
IEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJc0xpbmsoKSkpKTsKKworICAgIC8v
IEFuZCB0aGVzZSBhbmNlc3RvcnMgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGV5IGFyZSBlbGVtZW50
IG5vZGVzLgorICAgIC8vIFNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGlz
IGFuIGVsZW1lbnQgbm9kZSBhbmQgd2hldGhlciBpdCBpcyBub3QgYSBudWxscHRyLgorICAgIG1f
YXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNzKGN1cnJlbnRFbGVtZW50LCBOb2Rl
OjpwYXJlbnROb2RlTWVtb3J5T2Zmc2V0KCkpLCBjdXJyZW50RWxlbWVudCk7CisgICAgbV9hc3Nl
bWJsZXIuanVtcChsb29wU3RhcnQpOworCisgICAgcmVhY2hlZFRvRWxlbWVudC5saW5rKCZtX2Fz
c2VtYmxlcik7Cit9CisKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZU1hcmtQ
c2V1ZG9TdHlsZUZvclBzZXVkb0VsZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKIHsKICAgICBBU1NFUlQobV9z
ZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgKaW5kZXggYzAxMTIyODRlMzU1NjYyZTc1NGYx
MzUxNDEwOWU1MjBlZmU4ZGRlMy4uYTRkOGYwOTgzNTdlNTMzZTU3NGNmNjJhOTIwNDUxOGYxMWZh
NzQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgKQEAgLTU5LDYgKzU5
LDExIEBAIGNsYXNzIFN0YWNrQWxsb2NhdG9yIHsKICAgICB7CiAgICAgfQogCisgICAgU3RhY2tS
ZWZlcmVuY2Ugc3RhY2tUb3AoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0YWNrUmVmZXJlbmNl
KG1fb2Zmc2V0RnJvbVRvcCArIHN0YWNrVW5pdEluQnl0ZXMoKSk7CisgICAgfQorCiAgICAgflN0
YWNrQWxsb2NhdG9yKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX29mZnNldEZy
b21Ub3ApOwpAQCAtNjcsMTAgKzcyLDMyIEBAIGNsYXNzIFN0YWNrQWxsb2NhdG9yIHsKIAogICAg
IFN0YWNrUmVmZXJlbmNlIGFsbG9jYXRlVW5pbml0aWFsaXplZCgpCiAgICAgeworICAgICAgICBy
ZXR1cm4gYWxsb2NhdGVVbmluaXRpYWxpemVkKDEpWzBdOworICAgIH0KKworICAgIFN0YWNrUmVm
ZXJlbmNlVmVjdG9yIGFsbG9jYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBjb3VudCkKKyAgICB7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2hhc0Z1bmN0aW9uQ2FsbFBhZGRpbmcpOwotICAg
ICAgICBtX2Fzc2VtYmxlci5hZGRQdHJOb0ZsYWdzKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigtc3RhY2tVbml0SW5CeXRlcygpKSwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBtX29mZnNldEZyb21Ub3AgKz0gc3RhY2tVbml0SW5C
eXRlcygpOwotICAgICAgICByZXR1cm4gU3RhY2tSZWZlcmVuY2UobV9vZmZzZXRGcm9tVG9wKTsK
KyAgICAgICAgU3RhY2tSZWZlcmVuY2VWZWN0b3Igc3RhY2tSZWZlcmVuY2VzOworICAgICAgICB1
bnNpZ25lZCBvbGRPZmZzZXRGcm9tVG9wID0gbV9vZmZzZXRGcm9tVG9wOworI2lmIENQVShBUk02
NCkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50IC0gMTsgaSArPSAyKSB7
CisgICAgICAgICAgICBtX29mZnNldEZyb21Ub3AgKz0gc3RhY2tVbml0SW5CeXRlcygpOworICAg
ICAgICAgICAgc3RhY2tSZWZlcmVuY2VzLmFwcGVuZChTdGFja1JlZmVyZW5jZShtX29mZnNldEZy
b21Ub3AgLSBzdGFja1VuaXRJbkJ5dGVzKCkgLyAyKSk7CisgICAgICAgICAgICBzdGFja1JlZmVy
ZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCkpOworICAgICAgICB9
CisgICAgICAgIGlmIChjb3VudCAlIDIpIHsKKyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVRvcCAr
PSBzdGFja1VuaXRJbkJ5dGVzKCk7CisgICAgICAgICAgICBzdGFja1JlZmVyZW5jZXMuYXBwZW5k
KFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCkpOworICAgICAgICB9CisjZWxzZQorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAg
bV9vZmZzZXRGcm9tVG9wICs9IHN0YWNrVW5pdEluQnl0ZXMoKTsKKyAgICAgICAgICAgIHN0YWNr
UmVmZXJlbmNlcy5hcHBlbmQoU3RhY2tSZWZlcmVuY2UobV9vZmZzZXRGcm9tVG9wKSk7CisgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICBtX2Fzc2VtYmxlci5hZGRQdHJOb0ZsYWdzKEpTQzo6TWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtKG1fb2Zmc2V0RnJvbVRvcCAtIG9sZE9mZnNldEZy
b21Ub3ApKSwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
ICAgICByZXR1cm4gc3RhY2tSZWZlcmVuY2VzOwogICAgIH0KIAogICAgIFN0YWNrUmVmZXJlbmNl
VmVjdG9yIHB1c2goY29uc3QgVmVjdG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+
JiByZWdpc3RlcklEcykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239050</attachid>
            <date>2014-10-01 14:20:12 -0700</date>
            <delta_ts>2014-10-12 19:11:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135293-20141002062039.patch</filename>
            <type>text/plain</type>
            <size>40394</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmFiZThiZjRjMmY1N2M2
OTMyOGE4NDc2OTBjOGFlOWEzMDk5NWNmNi4uYWE1ZTRhM2ExMWZlNTI0MmJlNzcyMGUzOTI2NWM1
OWMzMTdhMTUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE0LTEwLTAxICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUyBKSVQ6IElt
cGxlbWVudCA6dmlzaXRlZCBwc2V1ZG8gY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBDU1MgSklUIGZvciA6
dmlzaXRlZC4gQW5kIGl0IG1ha2VzIDpub3QoOmxpbmspIEpJVC1lZC4KKyAgICAgICAgRm9sbG93
aW5nIHRoZSBkZXNpZ24gZGlzY3Vzc2VkIGF0IHRoZSBvdGhlciBidWdbMV0sIGltcGxlbWVudGVk
IDp2aXNpdGVkIEpJVAorICAgICAgICB3aXRob3V0IHRyYWNraW5nIFZpc2l0ZWRNYXRjaEVuYWJs
ZWQgc3RhdGUuCisKKyAgICAgICAgQW5kIGluIHRoaXMgcGF0Y2gsIHdlIGNsZWFuIHVwIHNvbWUg
YmFja3RyYWNraW5nIHRhaWwgY29kZSBhbmQgcmVuYW1lCisgICAgICAgIHRoZSBsYWJlbHMgYW5k
IGp1bXAgbGlzdHMuCisKKyAgICAgICAgRWRnZSBjYXNlcyBhcmUgdGVzdGVkIGJ5IHRoZSBleGlz
dGluZyB0ZXN0cy4KKyAgICAgICAgOm5vdCg6bGluaykKKyAgICAgICAgICAgIGZhc3QvaGlzdG9y
eS9saW5rLWluc2lkZS1ub3QuaHRtbAorICAgICAgICA6bm90KDp2aXNpdGVkKQorICAgICAgICAg
ICAgZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLW5vdC5odG1sCisgICAgICAgIDotd2Via2l0
LWFueSg6bGluaykKKyAgICAgICAgICAgIGZhc3QvaGlzdG9yeS9saW5rLWluc2lkZS1hbnkuaHRt
bAorICAgICAgICA6LXdlYmtpdC1hbnkoOnZpc2l0ZWQpCisgICAgICAgICAgICBmYXN0L2hpc3Rv
cnkvdmlzaXRlZC1pbnNpZGUtYW55Lmh0bWwKKworICAgICAgICBUbyBjb3ZlciB0aGUgOi13ZWJr
aXQtYW55KDpub3QoOmxpbmspKSwgYWRkZWQgbmV3IHRlc3RzLgorCisgICAgICAgIFsxXTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTYzOQorCisgICAgICAgICog
Y3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
b21waWxlcjo6bW9zdEV4dGVuZGVkVmlzaXRlZENoZWNrTW9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckZyYWdtZW50OjpTZWxlY3RvckZyYWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OmFkZFBzZXVkb0NsYXNzVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNv
bXBpbGVyOjpjb25zdHJ1Y3RGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
b21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcik6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlUmlnaHRtb3N0VHJlZVdhbGtlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQW5jZXN0b3JUcmVl
V2Fsa2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVJbmRpcmVjdEFkamFjZW50VHJlZVdhbGtlcik6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmxpbmtG
YWlsdXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlRGVzY2VuZGFudEJhY2t0cmFja2luZ1RhaWwpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6bmVlZHNCYWNrdHJhY2tpbmdUYWlsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVCYWNrdHJhY2tpbmdUYWlsc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50TWF0
Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRMaW5rTWF0Y2hpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1l
bnRNYXRjaGVzTm90UHNldWRvQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21w
aWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc1RhcmdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6
OmdlbmVyYXRlRWxlbWVudElzRmlyc3RMaW5rKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTdG9yZUxhc3RWaXNpdGVk
RWxlbWVudCk6CisKIDIwMTQtMDktMzAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CiAKICAgICAgICAgQ1NTIEpJVDogRW5hYmxlIG11bHRpcGxlIHN0YWNrIHJlZmVyZW5j
ZXMgYWxsb2NhdGlvbiBieSBhbGxvY2F0ZVVuaW5pdGlhbGl6ZWQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
c2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAppbmRleCA5NWRmM2I1YjRlNjkxY2U3YzE2NmNkMTY4
MmVmNzk0MjQ3YjNjODJlLi5jZWI2YWRjY2QwNjhlNTY3ZTMxZTBkZDBjMmVkYmU1ZTBiNjY4MzA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCkBAIC0xMDUs
NiArMTA1LDE3IEBAIGVudW0gY2xhc3MgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyB7
CiAgICAgTm90UmlnaHRtb3N0CiB9OwogCitlbnVtIGNsYXNzIFZpc2l0ZWRDaGVja01vZGUgewor
ICAgIE5vbmUsCisgICAgTGlua0luc2lkZU5vdCwKKyAgICBWaXNpdGVkLAorfTsKKworc3RhdGlj
IGlubGluZSBWaXNpdGVkQ2hlY2tNb2RlIG1vc3RFeHRlbmRlZFZpc2l0ZWRDaGVja01vZGUoVmlz
aXRlZENoZWNrTW9kZSBhLCBWaXNpdGVkQ2hlY2tNb2RlIGIpCit7CisgICAgcmV0dXJuIHN0ZDo6
bWF4KGEsIGIpOworfQorCiBjbGFzcyBBdHRyaWJ1dGVNYXRjaGluZ0luZm8gewogcHVibGljOgog
ICAgIEF0dHJpYnV0ZU1hdGNoaW5nSW5mbyhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGJv
b2wgY2FuRGVmYXVsdFRvQ2FzZVNlbnNpdGl2ZVZhbHVlTWF0Y2gpCkBAIC0xNDAsNiArMTUxLDcg
QEAgc3RydWN0IFNlbGVjdG9yRnJhZ21lbnQgewogICAgICAgICAsIGlkKG51bGxwdHIpCiAgICAg
ICAgICwgbGFuZ0ZpbHRlcihudWxscHRyKQogICAgICAgICAsIHBzZXVkb0VsZW1lbnRTZWxlY3Rv
cihudWxscHRyKQorICAgICAgICAsIGNoZWNrVmlzaXRlZEluTGlua0luc2lkZU5vdChmYWxzZSkK
ICAgICAgICAgLCBvbmx5TWF0Y2hlc0xpbmtzSW5RdWlya3NNb2RlKHRydWUpCiAgICAgewogICAg
IH0KQEAgLTE3Myw2ICsxODUsOCBAQCBzdHJ1Y3QgU2VsZWN0b3JGcmFnbWVudCB7CiAgICAgVmVj
dG9yPFZlY3RvcjxTZWxlY3RvckZyYWdtZW50Pj4gYW55RmlsdGVyczsKICAgICBjb25zdCBDU1NT
ZWxlY3RvciogcHNldWRvRWxlbWVudFNlbGVjdG9yOwogCisgICAgYm9vbCBjaGVja1Zpc2l0ZWRJ
bkxpbmtJbnNpZGVOb3Q7CisKICAgICAvLyBGb3IgcXVpcmtzIG1vZGUsIGZvbGxvdyB0aGlzOiBo
dHRwOi8vcXVpcmtzLnNwZWMud2hhdHdnLm9yZy8jdGhlLTphY3RpdmUtYW5kLTpob3Zlci1xdWly
awogICAgIC8vIEluIHF1aXJrcyBtb2RlLCBhIGNvbXBvdW5kIHNlbGVjdG9yICdzZWxlY3Rvcicg
dGhhdCBtYXRjaGVzIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IG5vdCBtYXRjaCBlbGVt
ZW50cyB0aGF0IHdvdWxkIG5vdCBhbHNvIG1hdGNoIHRoZSAnOmFueS1saW5rJyBzZWxlY3Rvci4K
ICAgICAvLwpAQCAtMjE1LDYgKzIyOSw4IEBAIGNsYXNzIFNlbGVjdG9yQ29kZUdlbmVyYXRvciB7
CiAgICAgdm9pZCBnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcigpOwogCiAgICAgLy8gRWxlbWVudCBy
ZWxhdGlvbnMgdHJlZSB3YWxrZXIuCisgICAgdm9pZCBnZW5lcmF0ZVJpZ2h0bW9zdFRyZWVXYWxr
ZXIoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdt
ZW50Jik7CisKICAgICB2b2lkIGdlbmVyYXRlV2Fsa1RvUGFyZW50Tm9kZShBc3NlbWJsZXI6OlJl
Z2lzdGVySUQgdGFyZ2V0UmVnaXN0ZXIpOwogICAgIHZvaWQgZ2VuZXJhdGVXYWxrVG9QYXJlbnRF
bGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHRhcmdldFJlZ2lzdGVyKTsKICAgICB2b2lkIGdlbmVyYXRlUGFyZW50RWxlbWVudFRy
ZWVXYWxrZXIoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3Rv
ckZyYWdtZW50Jik7CkBAIC0yMjksMTEgKzI0NSwxMiBAQCBjbGFzcyBTZWxlY3RvckNvZGVHZW5l
cmF0b3IgewogICAgIHZvaWQgbGlua0ZhaWx1cmVzKEFzc2VtYmxlcjo6SnVtcExpc3QmIGdsb2Jh
bEZhaWx1cmVDYXNlcywgQmFja3RyYWNraW5nQWN0aW9uLCBBc3NlbWJsZXI6Okp1bXBMaXN0JiBs
b2NhbEZhaWx1cmVDYXNlcyk7CiAgICAgdm9pZCBnZW5lcmF0ZUFkamFjZW50QmFja3RyYWNraW5n
VGFpbCgpOwogICAgIHZvaWQgZ2VuZXJhdGVEZXNjZW5kYW50QmFja3RyYWNraW5nVGFpbCgpOwot
ICAgIHZvaWQgZ2VuZXJhdGVCYWNrdHJhY2tpbmdUYWlsc0lmTmVlZGVkKEFzc2VtYmxlcjo6SnVt
cExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOworICAgIHZvaWQg
Z2VuZXJhdGVCYWNrdHJhY2tpbmdUYWlsc0lmTmVlZGVkKGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQm
KTsKIAogICAgIC8vIEVsZW1lbnQgcHJvcGVydGllcyBtYXRjaGVycy4KICAgICB2b2lkIGdlbmVy
YXRlRWxlbWVudE1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoaW5nVGFnTmFtZUZh
aWx1cmVDYXNlcywgQXNzZW1ibGVyOjpKdW1wTGlzdCYgbWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1
cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVt
ZW50RGF0YU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3Qg
U2VsZWN0b3JGcmFnbWVudCYpOworICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50TGlua01hdGNoaW5n
KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVu
dCYpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIpOwogICAgIHZvaWQgZ2Vu
ZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNBY3Rp
dmUoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdt
ZW50Jik7CkBAIC0yNjksNiArMjg2LDggQEAgY2xhc3MgU2VsZWN0b3JDb2RlR2VuZXJhdG9yIHsK
ICAgICB2b2lkIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChBc3NlbWJsZXI6OlJl
Z2lzdGVySUQgY2hlY2tpbmdDb250ZXh0LCBpbnQ2NF90KTsKICAgICBBc3NlbWJsZXI6Okp1bXAg
YnJhbmNoT25SZXNvbHZpbmdNb2RlV2l0aENoZWNraW5nQ29udGV4dChBc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24sIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSwgQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGNoZWNraW5nQ29udGV4dCk7CiAgICAgQXNzZW1ibGVyOjpKdW1wIGJyYW5jaE9uUmVzb2x2
aW5nTW9kZShBc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNlbGVjdG9yQ2hlY2tlcjo6
TW9kZSwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCk7CisgICAgdm9pZCBn
ZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0TGluayhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50KTsKKyAgICB2b2lkIGdlbmVyYXRlU3Rv
cmVMYXN0VmlzaXRlZEVsZW1lbnQoQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQpOwogICAg
IHZvaWQgZ2VuZXJhdGVNYXJrUHNldWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogICAgIHZv
aWQgZ2VuZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBzZXVkb0Vs
ZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZy
YWdtZW50JiwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCk7CiAgICAgdm9p
ZCBnZW5lcmF0ZVNwZWNpYWxGYWlsdXJlSW5RdWlya3NNb2RlRm9yQWN0aXZlQW5kSG92ZXJJZk5l
ZWRlZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJh
Z21lbnQmKTsKQEAgLTI5MiwxOCArMzExLDIzIEBAIGNsYXNzIFNlbGVjdG9yQ29kZUdlbmVyYXRv
ciB7CiAgICAgU2VsZWN0b3JDb250ZXh0IG1fc2VsZWN0b3JDb250ZXh0OwogICAgIEZ1bmN0aW9u
VHlwZSBtX2Z1bmN0aW9uVHlwZTsKICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBtX3NlbGVjdG9y
RnJhZ21lbnRzOworICAgIFZpc2l0ZWRDaGVja01vZGUgbV92aXNpdGVkQ2hlY2tNb2RlOwogICAg
IGJvb2wgbV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQ7CiAKICAgICBTdGFja0FsbG9j
YXRvcjo6U3RhY2tSZWZlcmVuY2UgbV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZTsKIAog
ICAgIEFzc2VtYmxlcjo6TGFiZWwgbV9kZXNjZW5kYW50RW50cnlQb2ludDsKKyAgICBBc3NlbWJs
ZXI6Okp1bXBMaXN0IG1fZGVzY2VuZGFudEZhaWx1cmVDYXNlczsKKyAgICBBc3NlbWJsZXI6Okxh
YmVsIG1fZGVzY2VuZGFudFRyZWVXYWxrZXJFbnRyeVBvaW50OworICAgIEFzc2VtYmxlcjo6SnVt
cExpc3QgbV9kZXNjZW5kYW50VHJlZVdhbGtlckZhaWx1cmVDYXNlczsKICAgICBBc3NlbWJsZXI6
OkxhYmVsIG1faW5kaXJlY3RBZGphY2VudEVudHJ5UG9pbnQ7Ci0gICAgQXNzZW1ibGVyOjpMYWJl
bCBtX2Rlc2NlbmRhbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9pbnQ7Ci0gICAgQXNzZW1ibGVy
OjpMYWJlbCBtX2luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9pbnQ7Cisg
ICAgQXNzZW1ibGVyOjpMYWJlbCBtX2luZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyRW50cnlQb2lu
dDsKICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgbV9kZXNjZW5kYW50QmFja3RyYWNraW5nU3Rh
cnQ7Ci0gICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2Rlc2NlbmRhbnRCYWNrdHJhY2tpbmdGYWls
dXJlQ2FzZXM7CisgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2Rlc2NlbmRhbnRUYWlsRmFpbHVy
ZUNhc2VzOwogICAgIFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZSBtX2FkamFjZW50QmFj
a3RyYWNraW5nU3RhcnQ7CiAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2FkamFjZW50QmFja3Ry
YWNraW5nRmFpbHVyZUNhc2VzOworICAgIFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZSBt
X2xhc3RWaXNpdGVkRWxlbWVudDsKKyAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2Ug
bV9zdGFydEVsZW1lbnQ7CiAKICNpZiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lORwogICAgIGNv
bnN0IENTU1NlbGVjdG9yKiBtX29yaWdpbmFsU2VsZWN0b3I7CkBAIC0zMjAsNyArMzQ0LDcgQEAg
ZW51bSBjbGFzcyBGcmFnbWVudHNMZXZlbCB7CiAgICAgSW5GdW5jdGlvbmFsUHNldWRvVHlwZSA9
IDEKIH07CiAKLXN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENT
U1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yQ29udGV4dCwgU2VsZWN0b3JGcmFnbWVu
dExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbCwgRnJhZ21lbnRQb3NpdGlv
bkluUm9vdEZyYWdtZW50cyk7CitzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50
cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQsIFNlbGVj
dG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWwsIEZyYWdt
ZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCwgVmlz
aXRlZENoZWNrTW9kZSYpOwogCiBzdGF0aWMgdm9pZCBjb21wdXRlQmFja3RyYWNraW5nSW5mb3Jt
YXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBib29sJiBuZWVk
c0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpOwogCkBAIC00MTAsNyArNDM0LDcgQEAgc3RhdGlj
IGlubGluZSBGdW5jdGlvblR5cGUgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENT
U1NlbGVjdG9yJiBzZWxlY3QKICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFu
eXRoaW5nOwogfQogCi1zdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5
cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVu
dCwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRQb3NpdGlvbkluUm9v
dEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cykKK3N0YXRpYyBpbmxpbmUgRnVuY3Rp
b25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNl
bGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0
LCBGcmFnbWVudHNMZXZlbCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJh
Z21lbnRzIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQs
IFZpc2l0ZWRDaGVja01vZGUmIHZpc2l0ZWRDaGVja01vZGUpCiB7CiAgICAgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzVHlwZSB0eXBlID0gc2VsZWN0b3IucHNldWRvQ2xhc3NUeXBlKCk7CiAgICAg
c3dpdGNoICh0eXBlKSB7CkBAIC00NjYsNyArNDkwLDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlv
blR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2Vs
ZWMKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1dpbmRvd0luYWN0aXZlOgogICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rp
b25QdHIoaXNXaW5kb3dJbmFjdGl2ZSkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpT
aW1wbGVTZWxlY3RvckNoZWNrZXI7Ci0gICAgICAgICAgICAKKwogI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1bGxTY3JlZW46CiAg
ICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5j
dGlvblB0cihtYXRjaGVzRnVsbFNjcmVlblBzZXVkb0NsYXNzKSk7CkBAIC01MTAsMjEgKzUzNCwz
MSBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3Qg
Q1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzTnRoT2ZUeXBlOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoTGFz
dENoaWxkOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoTGFzdE9mVHlwZToK
LSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQ6CiAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NEcmFnOgogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpD
YW5ub3RDb21waWxlOwogCiAgICAgLy8gT3B0aW1pemVkIHBzZXVkbyBzZWxlY3RvcnMuCiAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnlMaW5rOgotICAgICAgICBmcmFnbWVudC5w
c2V1ZG9DbGFzc2VzLmFkZChDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rKTsKLSAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwotCiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzUm9vdDoKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1RhcmdldDoKICAg
ICAgICAgZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5hZGQodHlwZSk7CiAgICAgICAgIHJldHVybiBG
dW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKIAorICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzVmlzaXRlZDoKKyAgICAgICAgLy8gRGV0ZXJtaW5lIHRoaXMgOnZpc2l0
ZWQgY2Fubm90IG1hdGNoIGFueXRoaW5nIHN0YXRpY2FsbHkuCisgICAgICAgIGlmICghdmlzaXRl
ZE1hdGNoRW5hYmxlZCkKKyAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1h
dGNoQW55dGhpbmc7CisKKyAgICAgICAgLy8gSW5zaWRlIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNz
IGV4Y2VwdCBmb3IgOm5vdCwgOnZpc2l0ZWQgbmV2ZXIgbWF0Y2hlcy4KKyAgICAgICAgLy8gQW5k
IGluIHRoZSBjYXNlIGluc2lkZSA6bm90LCByZXR1cm5pbmcgQ2Fubm90TWF0Y2hBbnl0aGluZyBp
bmRpY2F0ZXMgdGhhdCA6bm90KDp2aXNpdGVkKSBjYW4gbWF0Y2ggb3ZlciBhbnl0aGluZy4KKyAg
ICAgICAgaWYgKGZyYWdtZW50TGV2ZWwgPT0gRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBz
ZXVkb1R5cGUpCisgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFu
eXRoaW5nOworCisgICAgICAgIGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuYWRkKHR5cGUpOworICAg
ICAgICB2aXNpdGVkQ2hlY2tNb2RlID0gVmlzaXRlZENoZWNrTW9kZTo6VmlzaXRlZDsKKyAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOworCiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTY29wZToKICAgICAgICAgaWYgKHNlbGVjdG9yQ29u
dGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpIHsKICAgICAgICAgICAgIGZy
YWdtZW50LnBzZXVkb0NsYXNzZXMuYWRkKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Jvb3QpOwpA
QCAtNTc2LDcgKzYxMCw4IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0Ns
YXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZzsKIAogICAgICAgICAg
ICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgbm90RnJhZ21lbnRzOwotICAgICAgICAgICAgRnVuY3Rp
b25UeXBlIGZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzZWxlY3Rvckxpc3QtPmZp
cnN0KCksIHNlbGVjdG9yQ29udGV4dCwgbm90RnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5G
dW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMpOworICAgICAgICAg
ICAgVmlzaXRlZENoZWNrTW9kZSBpZ25vcmVWaXNpdGVkQ2hlY2tNb2RlID0gVmlzaXRlZENoZWNr
TW9kZTo6Tm9uZTsKKyAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBjb25z
dHJ1Y3RGcmFnbWVudHMoc2VsZWN0b3JMaXN0LT5maXJzdCgpLCBzZWxlY3RvckNvbnRleHQsIG5v
dEZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0
aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkQ2hl
Y2tNb2RlKTsKIAogICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBub3QgcHNldWRvIGNsYXNz
IGZpbHRlciwgQ2Fubm90TWF0Y2hBbnl0aGluZyBpbXBsaWVzIHRoaXMgZmlsdGVyIGFsd2F5cyBw
YXNzZXMuCiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6Q2Fu
bm90TWF0Y2hBbnl0aGluZykKQEAgLTU4OSwxMSArNjI0LDEzIEBAIHN0YXRpYyBpbmxpbmUgRnVu
Y3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3Is
IFNlbGVjCiAgICAgICAgICAgICBpZiAobm90RnJhZ21lbnRzLnNpemUoKSAhPSAxKQogICAgICAg
ICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGU7CiAKLSAgICAgICAg
ICAgIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIHN1YkZyYWdtZW50ID0gbm90RnJhZ21lbnRzLmZp
cnN0KCk7CisgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50JiBzdWJGcmFnbWVudCA9IG5vdEZy
YWdtZW50cy5maXJzdCgpOwogCi0gICAgICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIGRv
bid0IHN1cHBvcnQgdmlzaXRlZE1hdGNoVHlwZS4KLSAgICAgICAgICAgIGlmIChzdWJGcmFnbWVu
dC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbmspKQot
ICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGU7CisgICAg
ICAgICAgICBpZiAodmlzaXRlZE1hdGNoRW5hYmxlZCAmJiBzdWJGcmFnbWVudC5wc2V1ZG9DbGFz
c2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbmspKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250
ZXh0OjpRdWVyeVNlbGVjdG9yLCAiUXVlcnlTZWxlY3RvciBzaG91bGQgbmV2ZXIgbWF0Y2ggOnZp
c2l0ZWQgbGluayBiZWNhdXNlIGl0IHdvdWxkIGJlIGEgcHJpdmFjeSBpc3N1ZS4iKTsKKyAgICAg
ICAgICAgICAgICBzdWJGcmFnbWVudC5jaGVja1Zpc2l0ZWRJbkxpbmtJbnNpZGVOb3QgPSB0cnVl
OworICAgICAgICAgICAgICAgIHZpc2l0ZWRDaGVja01vZGUgPSBtb3N0RXh0ZW5kZWRWaXNpdGVk
Q2hlY2tNb2RlKHZpc2l0ZWRDaGVja01vZGUsIFZpc2l0ZWRDaGVja01vZGU6OkxpbmtJbnNpZGVO
b3QpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmcmFnbWVudC5ub3RGaWx0ZXJzLmFw
cGVuZChzdWJGcmFnbWVudCk7CiAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25UeXBlOwpAQCAt
NjA1LDcgKzY0Miw4IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNz
VHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICBGdW5j
dGlvblR5cGUgZnVuY3Rpb25UeXBlID0gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNr
ZXI7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IgPSBz
ZWxlY3Rvci5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgcm9vdFNlbGVjdG9yOyByb290U2VsZWN0
b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocm9vdFNlbGVjdG9yKSkgewogICAgICAgICAgICAg
ICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IGZyYWdtZW50TGlzdDsKLSAgICAgICAgICAgICAgICBG
dW5jdGlvblR5cGUgc3ViRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxl
Y3Rvciwgc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudExpc3QsIEZyYWdtZW50c0xldmVsOjpJbkZ1
bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cyk7CisgICAgICAgICAg
ICAgICAgVmlzaXRlZENoZWNrTW9kZSBzdWJWaXNpdGVkQ2hlY2tNb2RlID0gVmlzaXRlZENoZWNr
TW9kZTo6Tm9uZTsKKyAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgc3ViRnVuY3Rpb25UeXBl
ID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBmcmFn
bWVudExpc3QsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlv
bkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgc3ViVmlzaXRlZENoZWNrTW9k
ZSk7CiAKICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGZyYWdtZW50IGFsd2F5cyB1bm1h
dGNoIGFnYWluc3QgdGhlIGVsZW1lbnQsIGRvbid0IGluc2VydCBpdCB0byBhbnlGcmFnbWVudHMu
CiAgICAgICAgICAgICAgICAgaWYgKHN1YkZ1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OkNh
bm5vdE1hdGNoQW55dGhpbmcpCkBAIC02MTksNiArNjU3LDggQEAgc3RhdGljIGlubGluZSBGdW5j
dGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3Rvciwg
U2VsZWMKICAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnRMaXN0LnNpemUoKSAhPSAxKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOwogCisg
ICAgICAgICAgICAgICAgdmlzaXRlZENoZWNrTW9kZSA9IG1vc3RFeHRlbmRlZFZpc2l0ZWRDaGVj
a01vZGUodmlzaXRlZENoZWNrTW9kZSwgc3ViVmlzaXRlZENoZWNrTW9kZSk7CisKICAgICAgICAg
ICAgICAgICBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBzdWJGcmFnbWVudCA9IGZyYWdtZW50TGlz
dC5maXJzdCgpOwogICAgICAgICAgICAgICAgIGFueUZyYWdtZW50cy5hcHBlbmQoc3ViRnJhZ21l
bnQpOwogICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0
aW9uVHlwZShmdW5jdGlvblR5cGUsIHN1YkZ1bmN0aW9uVHlwZSk7CkBAIC02NjcsNiArNzA3LDcg
QEAgaW5saW5lIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yKGNv
bnN0IENTU1NlbGVjdG9yKiByb290U2VsZWMKICAgICA6IG1fc3RhY2tBbGxvY2F0b3IobV9hc3Nl
bWJsZXIpCiAgICAgLCBtX3NlbGVjdG9yQ29udGV4dChzZWxlY3RvckNvbnRleHQpCiAgICAgLCBt
X2Z1bmN0aW9uVHlwZShGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikKKyAgICAs
IG1fdmlzaXRlZENoZWNrTW9kZShWaXNpdGVkQ2hlY2tNb2RlOjpOb25lKQogICAgICwgbV9uZWVk
c0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQoZmFsc2UpCiAjaWYgQ1NTX1NFTEVDVE9SX0pJVF9E
RUJVR0dJTkcKICAgICAsIG1fb3JpZ2luYWxTZWxlY3Rvcihyb290U2VsZWN0b3IpCkBAIC02NzYs
NyArNzE3LDEwIEBAIGlubGluZSBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OlNlbGVjdG9yQ29kZUdl
bmVyYXRvcihjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjCiAgICAgZGF0YUxvZ0YoIkNvbXBp
bGluZyBcIiVzXCJcbiIsIG1fb3JpZ2luYWxTZWxlY3Rvci0+c2VsZWN0b3JUZXh0KCkudXRmOCgp
LmRhdGEoKSk7CiAjZW5kaWYKIAotICAgIG1fZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21l
bnRzKHJvb3RTZWxlY3RvciwgbV9zZWxlY3RvckNvbnRleHQsIG1fc2VsZWN0b3JGcmFnbWVudHMs
IEZyYWdtZW50c0xldmVsOjpSb290LCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzOjpS
aWdodG1vc3QpOworICAgIC8vIEluIFF1ZXJ5U2VsZWN0b3IgY29udGV4dCwgOnZpc2l0ZWQgYWx3
YXlzIGhhcyBubyBlZmZlY3QgZHVlIHRvIHNlY3VyaXR5IGlzc3Vlcy4KKyAgICBib29sIHZpc2l0
ZWRNYXRjaEVuYWJsZWQgPSBzZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVy
eVNlbGVjdG9yOworCisgICAgbV9mdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMocm9v
dFNlbGVjdG9yLCBtX3NlbGVjdG9yQ29udGV4dCwgbV9zZWxlY3RvckZyYWdtZW50cywgRnJhZ21l
bnRzTGV2ZWw6OlJvb3QsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHM6OlJpZ2h0bW9z
dCwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgbV92aXNpdGVkQ2hlY2tNb2RlKTsKICAgICBpZiAobV9m
dW5jdGlvblR5cGUgIT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlICYmIG1fZnVuY3Rpb25U
eXBlICE9IEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZykKICAgICAgICAgY29tcHV0
ZUJhY2t0cmFja2luZ0luZm9ybWF0aW9uKG1fc2VsZWN0b3JGcmFnbWVudHMsIG1fbmVlZHNBZGph
Y2VudEJhY2t0cmFja2luZ1N0YXJ0KTsKIH0KQEAgLTY5Miw3ICs3MzYsNyBAQCBzdGF0aWMgYm9v
bCBpc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRUeXBl
IHR5cGUpCiAgICAgcmV0dXJuIHR5cGUgPj0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTY3Jv
bGxiYXIgJiYgdHlwZSA8PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFNjcm9sbGJhclRyYWNr
UGllY2U7CiB9CiAKLXN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0
IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yQ29udGV4dCBzZWxlY3RvckNvbnRl
eHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2
ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlv
bkluUm9vdEZyYWdtZW50cykKK3N0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRz
KGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yQ29udGV4dCBzZWxlY3Rv
ckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21l
bnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBw
b3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVk
Q2hlY2tNb2RlJiB2aXNpdGVkQ2hlY2tNb2RlKQogewogICAgIFNlbGVjdG9yRnJhZ21lbnQgZnJh
Z21lbnQ7CiAgICAgRnJhZ21lbnRSZWxhdGlvbiByZWxhdGlvblRvUHJldmlvdXNGcmFnbWVudCA9
IEZyYWdtZW50UmVsYXRpb246OlJpZ2h0bW9zdDsKQEAgLTczNyw3ICs3ODEsNyBAQCBzdGF0aWMg
RnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNl
bGVjdG9yLCBTZWxlY3RvcgogICAgICAgICAgICAgaWYgKGZyYWdtZW50LnBzZXVkb0VsZW1lbnRT
ZWxlY3RvciAmJiBpc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZnJhZ21lbnQucHNldWRvRWxlbWVu
dFNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpKSkKICAgICAgICAgICAgICAgICBmdW5jdGlv
blR5cGUgPSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBlLCBhZGRTY3Jv
bGxiYXJQc2V1ZG9DbGFzc1R5cGUoKnNlbGVjdG9yLCBmcmFnbWVudCkpOwogICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0
aW9uVHlwZShmdW5jdGlvblR5cGUsIGFkZFBzZXVkb0NsYXNzVHlwZSgqc2VsZWN0b3IsIGZyYWdt
ZW50LCBzZWxlY3RvckNvbnRleHQsIHN1YlBvc2l0aW9uKSk7CisgICAgICAgICAgICAgICAgZnVu
Y3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlwZSwgYWRk
UHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQsIHNlbGVjdG9yQ29udGV4dCwgZnJh
Z21lbnRMZXZlbCwgc3ViUG9zaXRpb24sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIHZpc2l0ZWRDaGVj
a01vZGUpKTsKICAgICAgICAgICAgIGlmICghcHNldWRvQ2xhc3NPbmx5TWF0Y2hlc0xpbmtzSW5R
dWlya3NNb2RlKCpzZWxlY3RvcikpCiAgICAgICAgICAgICAgICAgZnJhZ21lbnQub25seU1hdGNo
ZXNMaW5rc0luUXVpcmtzTW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uVHlw
ZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGUgfHwgZnVuY3Rpb25UeXBlID09IEZ1bmN0
aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZykKQEAgLTgyMCw2ICs4NjQsOSBAQCBzdGF0aWMg
RnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNl
bGVjdG9yLCBTZWxlY3RvcgogICAgICAgICAgICAgaWYgKHNlbGVjdG9yQ29udGV4dCA9PSBTZWxl
Y3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpCiAgICAgICAgICAgICAgICAgcmVsYXRpb25GdW5j
dGlvblR5cGUgPSBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICAgICAg
ICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5
cGUsIHJlbGF0aW9uRnVuY3Rpb25UeXBlKTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgcmVs
YXRpb24gaXMgYWRqYWNlbnQsIGRpc2FibGUgOnZpc2l0ZWQgbWF0Y2guCisgICAgICAgICAgICB2
aXNpdGVkTWF0Y2hFbmFibGVkID0gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICBmcmFnbWVu
dC5yZWxhdGlvblRvTGVmdEZyYWdtZW50ID0gZnJhZ21lbnRSZWxhdGlvbkZvclNlbGVjdG9yUmVs
YXRpb24ocmVsYXRpb24pOwpAQCAtMTM5MCwyNyArMTQzNywzOSBAQCB2b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIoKQogCiAgICAgbV9yZWdpc3RlckFs
bG9jYXRvci5hbGxvY2F0ZVJlZ2lzdGVyKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOwogCi0gICAg
U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlIHRlbXBvcmFyeVN0YWNrQmFzZTsKKyAgICBT
dGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2UgdGVtcG9yYXJ5U3RhY2tCYXNlID0gbV9zdGFj
a0FsbG9jYXRvci5zdGFja1RvcCgpOwogCiAgICAgaWYgKG1fZnVuY3Rpb25UeXBlID09IEZ1bmN0
aW9uVHlwZTo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCkKICAgICAgICAgbV9j
aGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZSA9IG1fc3RhY2tBbGxvY2F0b3IucHVzaChjaGVj
a2luZ0NvbnRleHRSZWdpc3Rlcik7CiAKLSAgICBpZiAobV9uZWVkc0FkamFjZW50QmFja3RyYWNr
aW5nU3RhcnQpCisgICAgLy8gQWxsb2NhdGUgdW5pbml0aWFsaXplZCBzdGFjayByZWZlcmVuY2Vz
CisgICAgaWYgKG1fdmlzaXRlZENoZWNrTW9kZSAhPSBWaXNpdGVkQ2hlY2tNb2RlOjpOb25lKSB7
CisgICAgICAgIGlmIChtX25lZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCkgeworICAgICAg
ICAgICAgU3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlVmVjdG9yIHJlZmVyZW5jZXMgPSBt
X3N0YWNrQWxsb2NhdG9yLmFsbG9jYXRlVW5pbml0aWFsaXplZCgzKTsKKyAgICAgICAgICAgIG1f
YWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCA9IHJlZmVyZW5jZXNbMF07CisgICAgICAgICAgICBt
X2xhc3RWaXNpdGVkRWxlbWVudCA9IHJlZmVyZW5jZXNbMV07CisgICAgICAgICAgICBtX3N0YXJ0
RWxlbWVudCA9IHJlZmVyZW5jZXNbMl07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBT
dGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2VWZWN0b3IgcmVmZXJlbmNlcyA9IG1fc3RhY2tB
bGxvY2F0b3IuYWxsb2NhdGVVbmluaXRpYWxpemVkKDIpOworICAgICAgICAgICAgbV9sYXN0Vmlz
aXRlZEVsZW1lbnQgPSByZWZlcmVuY2VzWzBdOworICAgICAgICAgICAgbV9zdGFydEVsZW1lbnQg
PSByZWZlcmVuY2VzWzFdOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIG9mZnNldFRvU3Rh
cnRFbGVtZW50ID0gbV9zdGFja0FsbG9jYXRvci5vZmZzZXRUb1N0YWNrUmVmZXJlbmNlKG1fc3Rh
cnRFbGVtZW50KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RvcmVQdHIoZWxlbWVudEFkZHJlc3NS
ZWdpc3RlciwgQXNzZW1ibGVyOjpBZGRyZXNzKEFzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsIG9mZnNldFRvU3RhcnRFbGVtZW50KSk7CisgICAgICAgIGlmIChtX3Zpc2l0ZWRDaGVja01v
ZGUgPT0gVmlzaXRlZENoZWNrTW9kZTo6VmlzaXRlZCkgeworICAgICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0VG9MYXN0VmlzaXRlZEVsZW1lbnQgPSBtX3N0YWNrQWxsb2NhdG9yLm9mZnNldFRvU3Rh
Y2tSZWZlcmVuY2UobV9sYXN0VmlzaXRlZEVsZW1lbnQpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc3RvcmVQdHIoQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBc3NlbWJsZXI6
OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9MYXN0Vmlz
aXRlZEVsZW1lbnQpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9uZWVkc0FkamFjZW50
QmFja3RyYWNraW5nU3RhcnQpCiAgICAgICAgIG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCA9
IG1fc3RhY2tBbGxvY2F0b3IuYWxsb2NhdGVVbmluaXRpYWxpemVkKCk7CiAKLSAgICAvLyBSZW1l
bWJlciB0aGUgc3RhY2sgYmFzZSBvZiB0aGUgdGVtcG9yYXJ5IHZhcmlhYmxlcy4KLSAgICBpZiAo
bV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZS5pc1ZhbGlkKCkpCi0gICAgICAgIHRlbXBv
cmFyeVN0YWNrQmFzZSA9IG1fY2hlY2tpbmdDb250ZXh0U3RhY2tSZWZlcmVuY2U7Ci0gICAgZWxz
ZSBpZiAobV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpCi0gICAgICAgIHRlbXBvcmFy
eVN0YWNrQmFzZSA9IG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydDsKLQogICAgIEFzc2VtYmxl
cjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fc2VsZWN0b3JGcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgU2VsZWN0
b3JGcmFnbWVudCYgZnJhZ21lbnQgPSBtX3NlbGVjdG9yRnJhZ21lbnRzW2ldOwogICAgICAgICBz
d2l0Y2ggKGZyYWdtZW50LnJlbGF0aW9uVG9SaWdodEZyYWdtZW50KSB7CiAgICAgICAgIGNhc2Ug
RnJhZ21lbnRSZWxhdGlvbjo6UmlnaHRtb3N0OgotICAgICAgICAgICAgZ2VuZXJhdGVFbGVtZW50
TWF0Y2hpbmcoZmFpbHVyZUNhc2VzLCBmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKKyAgICAgICAg
ICAgIGdlbmVyYXRlUmlnaHRtb3N0VHJlZVdhbGtlcihmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZyYWdtZW50UmVsYXRpb246OkRlc2Nl
bmRhbnQ6CiAgICAgICAgICAgICBnZW5lcmF0ZUFuY2VzdG9yVHJlZVdhbGtlcihmYWlsdXJlQ2Fz
ZXMsIGZyYWdtZW50KTsKQEAgLTE0MjcsNyArMTQ4Niw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcigpCiAgICAgICAgIH0KICAgICAgICAgaWYg
KHNob3VsZE1hcmtTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyhmcmFnbWVudCkpCiAg
ICAgICAgICAgICBtYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdp
c3RlciwgTm9kZTo6ZmxhZ1N0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkpOwotICAg
ICAgICBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQoZmFpbHVyZUNhc2VzLCBmcmFn
bWVudCk7CisgICAgICAgIGdlbmVyYXRlQmFja3RyYWNraW5nVGFpbHNJZk5lZWRlZChmcmFnbWVu
dCk7CiAgICAgfQogCiAgICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4
dDo6UXVlcnlTZWxlY3RvciAmJiBtX2Z1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OlNlbGVj
dG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpIHsKQEAgLTE0MzUsMTAgKzE0OTQsMTkgQEAg
dm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyKCkKICAg
ICAgICAgZ2VuZXJhdGVNYXJrUHNldWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KGZhaWx1cmVDYXNl
cywgbV9zZWxlY3RvckZyYWdtZW50cy5maXJzdCgpKTsKICAgICB9CiAKKyAgICBpZiAobV92aXNp
dGVkQ2hlY2tNb2RlID09IFZpc2l0ZWRDaGVja01vZGU6OlZpc2l0ZWQpIHsKKyAgICAgICAgTG9j
YWxSZWdpc3RlciBsYXN0VmlzaXRlZEVsZW1lbnQobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAg
ICAgIHVuc2lnbmVkIG9mZnNldFRvTGFzdFZpc2l0ZWRFbGVtZW50ID0gbV9zdGFja0FsbG9jYXRv
ci5vZmZzZXRUb1N0YWNrUmVmZXJlbmNlKG1fbGFzdFZpc2l0ZWRFbGVtZW50KTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9MYXN0VmlzaXRlZEVsZW1lbnQpLCBsYXN0VmlzaXRlZEVs
ZW1lbnQpOworICAgICAgICBBc3NlbWJsZXI6Okp1bXAgbm9MYXN0VmlzaXRlZEVsZW1lbnQgPSBt
X2Fzc2VtYmxlci5icmFuY2hUZXN0UHRyKEFzc2VtYmxlcjo6WmVybywgbGFzdFZpc2l0ZWRFbGVt
ZW50KTsKKyAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNGaXJzdExpbmsoZmFpbHVyZUNhc2VzLCBs
YXN0VmlzaXRlZEVsZW1lbnQpOworICAgICAgICBub0xhc3RWaXNpdGVkRWxlbWVudC5saW5rKCZt
X2Fzc2VtYmxlcik7CisgICAgfQorCiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRl
UmVnaXN0ZXIoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CiAKICAgICBpZiAobV9mdW5jdGlvblR5
cGUgPT0gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKLSAgICAgICAgaWYg
KCF0ZW1wb3JhcnlTdGFja0Jhc2UuaXNWYWxpZCgpICYmICFyZXNlcnZlZENhbGxlZVNhdmVkUmVn
aXN0ZXJzICYmICFuZWVkc0VwaWxvZ3VlKSB7CisgICAgICAgIGlmICh0ZW1wb3JhcnlTdGFja0Jh
c2UgPT0gbV9zdGFja0FsbG9jYXRvci5zdGFja1RvcCgpICYmICFyZXNlcnZlZENhbGxlZVNhdmVk
UmVnaXN0ZXJzICYmICFuZWVkc0VwaWxvZ3VlKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fbmVl
ZHNBZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KTsKICAgICAgICAgICAgIC8vIFN1Y2Nlc3MuCiAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBy
ZXR1cm5SZWdpc3Rlcik7CkBAIC0xNDY2LDcgKzE1MzQsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIoKQogICAgICAgICBza2lwRmFpbHVyZUNh
c2UubGluaygmbV9hc3NlbWJsZXIpOwogICAgIH0KIAotICAgIGlmICh0ZW1wb3JhcnlTdGFja0Jh
c2UuaXNWYWxpZCgpKQorICAgIGlmICh0ZW1wb3JhcnlTdGFja0Jhc2UgIT0gbV9zdGFja0FsbG9j
YXRvci5zdGFja1RvcCgpKQogICAgICAgICBtX3N0YWNrQWxsb2NhdG9yLnBvcEFuZERpc2NhcmRV
cFRvKHRlbXBvcmFyeVN0YWNrQmFzZSk7CiAgICAgaWYgKHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdp
c3RlcnMpCiAgICAgICAgIG1fc3RhY2tBbGxvY2F0b3IucG9wKGNhbGxlZVNhdmVkUmVnaXN0ZXJT
dGFja1JlZmVyZW5jZXMsIG1fcmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZUNhbGxlZVNhdmVkUmVn
aXN0ZXJzKCkpOwpAQCAtMTQ4Nyw2ICsxNTU1LDExIEBAIHN0YXRpYyBpbmxpbmUgQXNzZW1ibGVy
OjpKdW1wIHRlc3RJc0VsZW1lbnRGbGFnT25Ob2RlKEFzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9u
CiAgICAgcmV0dXJuIGFzc2VtYmxlci5icmFuY2hUZXN0MzIoY29uZGl0aW9uLCBBc3NlbWJsZXI6
OkFkZHJlc3Mobm9kZUFkZHJlc3MsIE5vZGU6Om5vZGVGbGFnc01lbW9yeU9mZnNldCgpKSwgQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoTm9kZTo6ZmxhZ0lzRWxlbWVudCgpKSk7CiB9CiAKK3ZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVJpZ2h0bW9zdFRyZWVXYWxrZXIoQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFn
bWVudCkKK3sKKyAgICBnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyhmYWlsdXJlQ2FzZXMsIGZhaWx1
cmVDYXNlcywgZnJhZ21lbnQpOworfQorCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVXYWxrVG9QYXJlbnROb2RlKEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0YXJnZXRSZWdpc3Rl
cikKIHsKICAgICBtX2Fzc2VtYmxlci5sb2FkUHRyKEFzc2VtYmxlcjo6QWRkcmVzcyhlbGVtZW50
QWRkcmVzc1JlZ2lzdGVyLCBOb2RlOjpwYXJlbnROb2RlTWVtb3J5T2Zmc2V0KCkpLCB0YXJnZXRS
ZWdpc3Rlcik7CkBAIC0xNTI2LDcgKzE1OTksNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVBbmNlc3RvclRyZWVXYWxrZXIoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbAog
ICAgIEFzc2VtYmxlcjo6TGFiZWwgbG9vcFN0YXJ0KG1fYXNzZW1ibGVyLmxhYmVsKCkpOwogCiAg
ICAgaWYgKGZyYWdtZW50LmJhY2t0cmFja2luZ0ZsYWdzICYgQmFja3RyYWNraW5nRmxhZzo6RGVz
Y2VuZGFudEVudHJ5UG9pbnQpCi0gICAgICAgIG1fZGVzY2VuZGFudFRyZWVXYWxrZXJCYWNrdHJh
Y2tpbmdQb2ludCA9IG1fYXNzZW1ibGVyLmxhYmVsKCk7CisgICAgICAgIG1fZGVzY2VuZGFudFRy
ZWVXYWxrZXJFbnRyeVBvaW50ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKIAogICAgIGdlbmVyYXRl
V2Fsa1RvUGFyZW50RWxlbWVudChmYWlsdXJlQ2FzZXMsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIp
OwogCkBAIC0xNjA2LDcgKzE2NzksNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVJbmRpcmVjdEFkamFjZW50VHJlZVdhbGtlcihBc3NlbWJsZXI6Okp1bXBMaQogICAgIEFz
c2VtYmxlcjo6TGFiZWwgbG9vcFN0YXJ0KG1fYXNzZW1ibGVyLmxhYmVsKCkpOwogCiAgICAgaWYg
KGZyYWdtZW50LmJhY2t0cmFja2luZ0ZsYWdzICYgQmFja3RyYWNraW5nRmxhZzo6SW5kaXJlY3RB
ZGphY2VudEVudHJ5UG9pbnQpCi0gICAgICAgIG1faW5kaXJlY3RBZGphY2VudFRyZWVXYWxrZXJC
YWNrdHJhY2tpbmdQb2ludCA9IG1fYXNzZW1ibGVyLmxhYmVsKCk7CisgICAgICAgIG1faW5kaXJl
Y3RBZGphY2VudFRyZWVXYWxrZXJFbnRyeVBvaW50ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKIAog
ICAgIGdlbmVyYXRlV2Fsa1RvUHJldmlvdXNBZGphY2VudChmYWlsdXJlQ2FzZXMsIGZyYWdtZW50
KTsKICAgICBtYXJrRWxlbWVudElmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3Rl
ciwgTm9kZTo6ZmxhZ0FmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpKTsKQEAgLTE4OTgs
MTkgKzE5NzEsMTkgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmxpbmtGYWlsdXJlcyhB
c3NlbWJsZXI6Okp1bXBMaXN0JiBnbG9iYWxGYWlsdXJlQ2FzZXMKICAgICAgICAgZ2xvYmFsRmFp
bHVyZUNhc2VzLmFwcGVuZChsb2NhbEZhaWx1cmVDYXNlcyk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQmFja3RyYWNraW5nQWN0aW9uOjpKdW1wVG9EZXNjZW5kYW50RW50cnlQb2ludDoKLSAg
ICAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlua1RvKG1fZGVzY2VuZGFudEVudHJ5UG9pbnQsICZt
X2Fzc2VtYmxlcik7CisgICAgICAgIG1fZGVzY2VuZGFudEZhaWx1cmVDYXNlcy5hcHBlbmQobG9j
YWxGYWlsdXJlQ2FzZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEJhY2t0cmFja2luZ0Fj
dGlvbjo6SnVtcFRvRGVzY2VuZGFudFRyZWVXYWxrZXJFbnRyeVBvaW50OgotICAgICAgICBsb2Nh
bEZhaWx1cmVDYXNlcy5saW5rVG8obV9kZXNjZW5kYW50VHJlZVdhbGtlckJhY2t0cmFja2luZ1Bv
aW50LCAmbV9hc3NlbWJsZXIpOworICAgICAgICBtX2Rlc2NlbmRhbnRUcmVlV2Fsa2VyRmFpbHVy
ZUNhc2VzLmFwcGVuZChsb2NhbEZhaWx1cmVDYXNlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQmFja3RyYWNraW5nQWN0aW9uOjpKdW1wVG9EZXNjZW5kYW50VGFpbDoKLSAgICAgICAgbV9k
ZXNjZW5kYW50QmFja3RyYWNraW5nRmFpbHVyZUNhc2VzLmFwcGVuZChsb2NhbEZhaWx1cmVDYXNl
cyk7CisgICAgICAgIG1fZGVzY2VuZGFudFRhaWxGYWlsdXJlQ2FzZXMuYXBwZW5kKGxvY2FsRmFp
bHVyZUNhc2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBCYWNrdHJhY2tpbmdBY3Rpb246
Okp1bXBUb0luZGlyZWN0QWRqYWNlbnRFbnRyeVBvaW50OgogICAgICAgICBsb2NhbEZhaWx1cmVD
YXNlcy5saW5rVG8obV9pbmRpcmVjdEFkamFjZW50RW50cnlQb2ludCwgJm1fYXNzZW1ibGVyKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBCYWNrdHJhY2tpbmdBY3Rpb246Okp1bXBUb0luZGly
ZWN0QWRqYWNlbnRUcmVlV2Fsa2VyRW50cnlQb2ludDoKLSAgICAgICAgbG9jYWxGYWlsdXJlQ2Fz
ZXMubGlua1RvKG1faW5kaXJlY3RBZGphY2VudFRyZWVXYWxrZXJCYWNrdHJhY2tpbmdQb2ludCwg
Jm1fYXNzZW1ibGVyKTsKKyAgICAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlua1RvKG1faW5kaXJl
Y3RBZGphY2VudFRyZWVXYWxrZXJFbnRyeVBvaW50LCAmbV9hc3NlbWJsZXIpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEJhY2t0cmFja2luZ0FjdGlvbjo6SnVtcFRvRGlyZWN0QWRqYWNlbnRU
YWlsOgogICAgICAgICBtX2FkamFjZW50QmFja3RyYWNraW5nRmFpbHVyZUNhc2VzLmFwcGVuZChs
b2NhbEZhaWx1cmVDYXNlcyk7CkBAIC0xOTMwLDMwICsyMDAzLDMzIEBAIHZvaWQgU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUFkamFjZW50QmFja3RyYWNraW5nVGFpbCgpCiAKIHZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZURlc2NlbmRhbnRCYWNrdHJhY2tpbmdUYWls
KCkKIHsKLSAgICBtX2Rlc2NlbmRhbnRCYWNrdHJhY2tpbmdGYWlsdXJlQ2FzZXMubGluaygmbV9h
c3NlbWJsZXIpOwotICAgIG1fZGVzY2VuZGFudEJhY2t0cmFja2luZ0ZhaWx1cmVDYXNlcy5jbGVh
cigpOworICAgIG1fZGVzY2VuZGFudFRhaWxGYWlsdXJlQ2FzZXMubGluaygmbV9hc3NlbWJsZXIp
OworICAgIG1fZGVzY2VuZGFudFRhaWxGYWlsdXJlQ2FzZXMuY2xlYXIoKTsKICAgICBtX2Fzc2Vt
Ymxlci5tb3ZlKG1fZGVzY2VuZGFudEJhY2t0cmFja2luZ1N0YXJ0LCBlbGVtZW50QWRkcmVzc1Jl
Z2lzdGVyKTsKICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdpc3RlcihtX2Rl
c2NlbmRhbnRCYWNrdHJhY2tpbmdTdGFydCk7CiAgICAgbV9hc3NlbWJsZXIuanVtcChtX2Rlc2Nl
bmRhbnRFbnRyeVBvaW50KTsKIH0KIAotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlQmFja3RyYWNraW5nVGFpbHNJZk5lZWRlZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQorc3RhdGljIGJvb2wgbmVl
ZHNCYWNrdHJhY2tpbmdUYWlsKGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewot
ICAgIGlmIChmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6OkRp
cmVjdEFkamFjZW50VGFpbCAmJiBmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIEJhY2t0cmFj
a2luZ0ZsYWc6OkRlc2NlbmRhbnRUYWlsKSB7Ci0gICAgICAgIEFzc2VtYmxlcjo6SnVtcCBub3Jt
YWxDYXNlID0gbV9hc3NlbWJsZXIuanVtcCgpOwotICAgICAgICBnZW5lcmF0ZUFkamFjZW50QmFj
a3RyYWNraW5nVGFpbCgpOwotICAgICAgICBnZW5lcmF0ZURlc2NlbmRhbnRCYWNrdHJhY2tpbmdU
YWlsKCk7Ci0gICAgICAgIG5vcm1hbENhc2UubGluaygmbV9hc3NlbWJsZXIpOwotICAgIH0gZWxz
ZSBpZiAoZnJhZ21lbnQuYmFja3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpEaXJl
Y3RBZGphY2VudFRhaWwpIHsKLSAgICAgICAgQXNzZW1ibGVyOjpKdW1wIG5vcm1hbENhc2UgPSBt
X2Fzc2VtYmxlci5qdW1wKCk7Ci0gICAgICAgIGdlbmVyYXRlQWRqYWNlbnRCYWNrdHJhY2tpbmdU
YWlsKCk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuanVtcCgpKTsK
LSAgICAgICAgbm9ybWFsQ2FzZS5saW5rKCZtX2Fzc2VtYmxlcik7Ci0gICAgfSBlbHNlIGlmIChm
cmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIEJhY2t0cmFja2luZ0ZsYWc6OkRlc2NlbmRhbnRU
YWlsKSB7CisgICAgcmV0dXJuIGZyYWdtZW50LmJhY2t0cmFja2luZ0ZsYWdzICYgKEJhY2t0cmFj
a2luZ0ZsYWc6OkRpcmVjdEFkamFjZW50VGFpbCB8IEJhY2t0cmFja2luZ0ZsYWc6OkRlc2NlbmRh
bnRUYWlsKTsKK30KKwordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFja3Ry
YWNraW5nVGFpbHNJZk5lZWRlZChjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkKK3sK
KyAgICBpZiAobmVlZHNCYWNrdHJhY2tpbmdUYWlsKGZyYWdtZW50KSkgewogICAgICAgICBBc3Nl
bWJsZXI6Okp1bXAgbm9ybWFsQ2FzZSA9IG1fYXNzZW1ibGVyLmp1bXAoKTsKLSAgICAgICAgZ2Vu
ZXJhdGVEZXNjZW5kYW50QmFja3RyYWNraW5nVGFpbCgpOworICAgICAgICBpZiAoZnJhZ21lbnQu
YmFja3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpEaXJlY3RBZGphY2VudFRhaWwp
CisgICAgICAgICAgICBnZW5lcmF0ZUFkamFjZW50QmFja3RyYWNraW5nVGFpbCgpOworICAgICAg
ICBpZiAoZnJhZ21lbnQuYmFja3RyYWNraW5nRmxhZ3MgJiBCYWNrdHJhY2tpbmdGbGFnOjpEZXNj
ZW5kYW50VGFpbCkKKyAgICAgICAgICAgIGdlbmVyYXRlRGVzY2VuZGFudEJhY2t0cmFja2luZ1Rh
aWwoKTsKICAgICAgICAgbm9ybWFsQ2FzZS5saW5rKCZtX2Fzc2VtYmxlcik7CiAgICAgfQorCisg
ICAgaWYgKCFtX2Rlc2NlbmRhbnRGYWlsdXJlQ2FzZXMuZW1wdHkoKSkKKyAgICAgICAgbV9kZXNj
ZW5kYW50RmFpbHVyZUNhc2VzLmxpbmtUbyhtX2Rlc2NlbmRhbnRFbnRyeVBvaW50LCAmbV9hc3Nl
bWJsZXIpOworICAgIGlmICghbV9kZXNjZW5kYW50VHJlZVdhbGtlckZhaWx1cmVDYXNlcy5lbXB0
eSgpKQorICAgICAgICBtX2Rlc2NlbmRhbnRUcmVlV2Fsa2VyRmFpbHVyZUNhc2VzLmxpbmtUbyht
X2Rlc2NlbmRhbnRUcmVlV2Fsa2VyRW50cnlQb2ludCwgJm1fYXNzZW1ibGVyKTsKIH0KIAogdm9p
ZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKEFzc2VtYmxl
cjo6SnVtcExpc3QmIG1hdGNoaW5nVGFnTmFtZUZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpKdW1w
TGlzdCYgbWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFn
bWVudCYgZnJhZ21lbnQpCkBAIC0xOTYxLDggKzIwMzcsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50TWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgbWF0
Y2hpbgogICAgIGlmIChmcmFnbWVudC50YWdOYW1lKQogICAgICAgICBnZW5lcmF0ZUVsZW1lbnRI
YXNUYWdOYW1lKG1hdGNoaW5nVGFnTmFtZUZhaWx1cmVDYXNlcywgKihmcmFnbWVudC50YWdOYW1l
KSk7CiAKLSAgICBpZiAoZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NMaW5rKSkKLSAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNMaW5rKG1hdGNo
aW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMpOworICAgIGdlbmVyYXRlRWxlbWVudExpbmtNYXRj
aGluZyhtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CiAKICAgICBp
ZiAoZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NSb290KSkKICAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNSb290KG1hdGNoaW5nUG9zdFRhZ05h
bWVGYWlsdXJlQ2FzZXMpOwpAQCAtMjAwNyw2ICsyMDgyLDExIEBAIHZvaWQgU2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBt
YXRjaGluCiAgICAgICAgIGdlbmVyYXRlRWxlbWVudElzSW5MYW5ndWFnZShtYXRjaGluZ1Bvc3RU
YWdOYW1lRmFpbHVyZUNhc2VzLCAqZnJhZ21lbnQubGFuZ0ZpbHRlcik7CiAgICAgaWYgKGZyYWdt
ZW50LnBzZXVkb0VsZW1lbnRTZWxlY3RvcikKICAgICAgICAgZ2VuZXJhdGVFbGVtZW50SGFzUHNl
dWRvRWxlbWVudChtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CisK
KyAgICAvLyBSZWFjaCBoZXJlIHdoZW4gdGhlIGdlbmVyYXRlRWxlbWVudE1hdGNoaW5nIG1hdGNo
aW5nIHN1Y2NlZWRlZC4KKyAgICAvLyBPbmx5IHdoZW4gdGhlIG1hdGNoaW5nIHN1Y2NlZWVkZWQs
IHRoZSBsYXN0IHZpc2l0ZWQgZWxlbWVudCBzaG91bGQgYmUgc3RvcmVkIGFuZCBjaGVja2VkIGF0
IHRoZSBlbmQgb2YgdGhlIHdob2xlIG1hdGNoaW5nLgorICAgIGlmIChmcmFnbWVudC5wc2V1ZG9D
bGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQpKQorICAgICAg
ICBnZW5lcmF0ZVN0b3JlTGFzdFZpc2l0ZWRFbGVtZW50KGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIp
OwogfQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RGF0YU1h
dGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JG
cmFnbWVudCYgZnJhZ21lbnQpCkBAIC0yMDMwLDYgKzIxMTAsMTIgQEAgdm9pZCBTZWxlY3RvckNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudERhdGFNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWkKICAgICAgICAgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlc01hdGNoaW5nKGZhaWx1
cmVDYXNlcywgZWxlbWVudERhdGFBZGRyZXNzLCBmcmFnbWVudCk7CiB9CiAKK3ZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRMaW5rTWF0Y2hpbmcoQXNzZW1ibGVyOjpK
dW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkK
K3sKKyAgICBpZiAoZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NMaW5rKSB8fCBmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc0FueUxpbmspIHx8IGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29u
dGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZCkpCisgICAgICAgIGdlbmVyYXRl
RWxlbWVudElzTGluayhmYWlsdXJlQ2FzZXMpOworfQorCiBzdGF0aWMgaW5saW5lIEFzc2VtYmxl
cjo6SnVtcCB0ZXN0SXNIVE1MRmxhZ09uTm9kZShBc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBj
b25kaXRpb24sIEFzc2VtYmxlciYgYXNzZW1ibGVyLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgbm9k
ZUFkZHJlc3MpCiB7CiAgICAgcmV0dXJuIGFzc2VtYmxlci5icmFuY2hUZXN0MzIoY29uZGl0aW9u
LCBBc3NlbWJsZXI6OkFkZHJlc3Mobm9kZUFkZHJlc3MsIE5vZGU6Om5vZGVGbGFnc01lbW9yeU9m
ZnNldCgpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTm9kZTo6ZmxhZ0lzSFRNTCgpKSk7CkBA
IC0zMDU1LDggKzMxNDEsMTcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
RWxlbWVudE1hdGNoZXNOb3RQc2V1ZG9DbGFzcyhBc3NlbWJsZXI6Okp1bXAKIHsKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHN1YkZyYWdtZW50IDogZnJhZ21lbnQubm90RmlsdGVycykgewogICAgICAg
ICBBc3NlbWJsZXI6Okp1bXBMaXN0IGxvY2FsRmFpbHVyZUNhc2VzOworCiAgICAgICAgIGdlbmVy
YXRlRWxlbWVudE1hdGNoaW5nKGxvY2FsRmFpbHVyZUNhc2VzLCBsb2NhbEZhaWx1cmVDYXNlcywg
c3ViRnJhZ21lbnQpOwogICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIGEgbm90IHBzZXVkbyBjbGFz
cyBmaWx0ZXIsIHJlYWNoaW5nIGhlcmUgaXMgYSBmYWlsdXJlLgorCisgICAgICAgIC8vIFdoZW4g
Om5vdCBoYXMgOmxpbmsgYW5kIGN1cnJlbnQgdmlzaXRlZE1hdGNoVHlwZSBpcyBWaXNpdGVkTWF0
Y2hFbmFibGVkLCA6bm90IGZpbHRlciBwYXNzZXMgcmVnYXJkbGVzcyBvZiB0aGUgZWxlbWVudC4K
KyAgICAgICAgaWYgKHN1YkZyYWdtZW50LmNoZWNrVmlzaXRlZEluTGlua0luc2lkZU5vdCkgewor
ICAgICAgICAgICAgQVNTRVJUKHN1YkZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29udGFpbnMoQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluaykpOworICAgICAgICAgICAgZ2VuZXJhdGVFbGVtZW50
SXNGaXJzdExpbmsoZmFpbHVyZUNhc2VzLCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIGxvY2FsRmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5qdW1wKCkpOworICAg
ICAgICB9CisKICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5qdW1wKCkp
OwogICAgICAgICBsb2NhbEZhaWx1cmVDYXNlcy5saW5rKCZtX2Fzc2VtYmxlcik7CiAgICAgfQpA
QCAtMzE0Myw2ICszMjM4LDM1IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZUVsZW1lbnRJc1RhcmdldChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlCiAgICAgZmFpbHVy
ZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwg
QXNzZW1ibGVyOjpBZGRyZXNzKGRvY3VtZW50LCBEb2N1bWVudDo6Y3NzVGFyZ2V0TWVtb3J5T2Zm
c2V0KCkpLCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKSk7CiB9CiAKK3ZvaWQgU2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0TGluayhBc3NlbWJsZXI6Okp1bXBMaXN0
JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50KQoreworICAgIExv
Y2FsUmVnaXN0ZXIgY3VycmVudEVsZW1lbnQobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAgdW5z
aWduZWQgb2Zmc2V0VG9TdGFydEVsZW1lbnQgPSBtX3N0YWNrQWxsb2NhdG9yLm9mZnNldFRvU3Rh
Y2tSZWZlcmVuY2UobV9zdGFydEVsZW1lbnQpOworICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNz
ZW1ibGVyOjpBZGRyZXNzKEFzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRv
U3RhcnRFbGVtZW50KSwgY3VycmVudEVsZW1lbnQpOworCisgICAgLy8gVHJlZSB3YWxraW5nIHVw
IHRvIHRoZSBwcm92aWRlZCBlbGVtZW50IHVudGlsIGxpbmsgbm9kZSBpcyBmb3VuZC4KKyAgICBB
c3NlbWJsZXI6OkxhYmVsIGxvb3BTdGFydChtX2Fzc2VtYmxlci5sYWJlbCgpKTsKKworICAgIC8v
IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBhbHdheXMgaW4gdGhlIGFuY2VzdG9ycyBmcm9tIHRoZSBz
dGFydCBlbGVtZW50IHRvIHRoZSByb290IG5vZGUuCisgICAgLy8gU28gdGhlIHRyZWUgd2Fsa2lu
ZyBkb2Vzbid0IGxvb3AgaW5maW5pdGVseSBhbmQgaXQgd2lsbCBiZSBzdG9wcGVkIHdpdGggdGhl
IGZvbGxvd2luZyBgY3VycmVudEVsZW1lbnQgPT0gZWxlbWVudGAgY29uZGl0aW9uLgorICAgIEFz
c2VtYmxlcjo6SnVtcCByZWFjaGVkVG9FbGVtZW50ID0gbV9hc3NlbWJsZXIuYnJhbmNoUHRyKEFz
c2VtYmxlcjo6RXF1YWwsIGN1cnJlbnRFbGVtZW50LCBlbGVtZW50KTsKKworICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVybywg
QXNzZW1ibGVyOjpBZGRyZXNzKGN1cnJlbnRFbGVtZW50LCBOb2RlOjpub2RlRmxhZ3NNZW1vcnlP
ZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJc0xpbmsoKSkpKTsK
KworICAgIC8vIEFuZCB0aGVzZSBhbmNlc3RvcnMgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGV5IGFy
ZSBlbGVtZW50IG5vZGVzLgorICAgIC8vIFNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVjayB3aGV0
aGVyIGl0IGlzIGFuIGVsZW1lbnQgbm9kZSBhbmQgd2hldGhlciBpdCBpcyBub3QgYSBudWxscHRy
LgorICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNzKGN1cnJlbnRFbGVt
ZW50LCBOb2RlOjpwYXJlbnROb2RlTWVtb3J5T2Zmc2V0KCkpLCBjdXJyZW50RWxlbWVudCk7Cisg
ICAgbV9hc3NlbWJsZXIuanVtcChsb29wU3RhcnQpOworCisgICAgcmVhY2hlZFRvRWxlbWVudC5s
aW5rKCZtX2Fzc2VtYmxlcik7Cit9CisKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZVN0b3JlTGFzdFZpc2l0ZWRFbGVtZW50KEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50
KQoreworICAgIHVuc2lnbmVkIG9mZnNldFRvTGFzdFZpc2l0ZWRFbGVtZW50ID0gbV9zdGFja0Fs
bG9jYXRvci5vZmZzZXRUb1N0YWNrUmVmZXJlbmNlKG1fbGFzdFZpc2l0ZWRFbGVtZW50KTsKKyAg
ICBtX2Fzc2VtYmxlci5zdG9yZVB0cihlbGVtZW50LCBBc3NlbWJsZXI6OkFkZHJlc3MoQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9MYXN0VmlzaXRlZEVsZW1lbnQpKTsK
K30KKwogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlTWFya1BzZXVkb1N0eWxl
Rm9yUHNldWRvRWxlbWVudChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0
IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewogICAgIEFTU0VSVChtX3NlbGVjdG9yQ29u
dGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGFjZmRjYWQ1
MGQ3MTM5ODJkYzBiOWI4NGZlMTZkMWNmZWVjYjA2MzcuLmI3MDg3N2I2MTAzMWI1OTU1YWE0ZTJh
ZTAwOWY5ZWNiNTcwMDJkMzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNC0xMC0wMSAgWXVz
dWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBDU1MgSklUOiBJ
bXBsZW1lbnQgOnZpc2l0ZWQgcHNldWRvIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUyOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvaGlzdG9yeS9saW5rLWluc2lkZS1ub3QtaW5z
aWRlLWFueS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9saW5r
LWluc2lkZS1ub3QtaW5zaWRlLWFueS5odG1sOiBBZGRlZC4KKyAgICAgICAgQ292ZXIgOi13ZWJr
aXQtYW55KDpub3QoOmxpbmspKSBjYXNlcy4KKwogMjAxNC0wOS0zMCAgUm9nZXIgRm9uZyAgPHJv
Z2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFsgV2luZG93cyBdIE1vcmUgV2luZG93cyB0
ZXN0IGdhcmRlbmluZyB0byBnZXQgYm90cyBncmVlbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvaGlzdG9yeS9saW5rLWluc2lkZS1ub3QtaW5zaWRlLWFueS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvbGluay1pbnNpZGUtbm90LWluc2lkZS1hbnktZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmEyMDY4NThjMzVkZmRlZmZjZmJlZjQ4Y2I3MWNhYzEyNzU3ZmI3
MDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvbGluay1pbnNp
ZGUtbm90LWluc2lkZS1hbnktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjYgQEAKKzpsaW5rIGlu
c2lkZSA6bm90IGluc2lkZSA6LXdlYmtpdC1hbnkgYDotd2Via2l0LWFueSg6bm90KDpsaW5rKSlg
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGFsbEdyZWVuKCkgYmVjYW1l
IHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
TGluayBzaG91bGQgYmUgZ3JlZW4uCisKK0xpbmsgc2hvdWxkIGJlIGdyZWVuLgorCitMaW5rIHNo
b3VsZCBiZSBncmVlbi4KKworTGluayBzaG91bGQgYmUgZ3JlZW4uCisKK0xpbmsgc2hvdWxkIGJl
IGdyZWVuLgorCitMaW5rIHNob3VsZCBiZSBncmVlbi4KKworTGluayBzaG91bGQgYmUgZ3JlZW4u
CisKK0xpbmsgc2hvdWxkIGJlIGdyZWVuLgorCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvaGlzdG9yeS9saW5rLWluc2lkZS1ub3QtaW5zaWRlLWFueS5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9oaXN0b3J5L2xpbmstaW5zaWRlLW5vdC1pbnNpZGUtYW55Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjJiNzU1ZDEwZjg4YzUwMWFjOWY3YTk1NzdhZmFmZGI0ODg5NTgyNQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9saW5rLWluc2lkZS1ub3QtaW5zaWRlLWFueS5o
dG1sCkBAIC0wLDAgKzEsMTUyIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIjpsaW5rIGluc2lkZSA6bm90IGluc2lkZSA6LXdlYmtpdC1hbnkgYDotd2Via2l0LWFueSg6
bm90KDpsaW5rKSlgIik7Citqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgIHdpbmRvdy50ZXN0UnVubmVyLmtlZXBXZWJIaXN0b3J5KCk7CisKK2Z1bmN0
aW9uIGdlbmVyYXRlTGluaygpIHsKKyAgICB2YXIgYW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiYSIpOworICAgIGFuY2hvci5ocmVmPSJodHRwOi8vbWFkZXVwLnNpdGUuY29tIjsKKyAg
ICBhbmNob3IuaW5uZXJIVE1MID0gIkxpbmsgc2hvdWxkIGJlIGdyZWVuLiI7CisgICAgcmV0dXJu
IGFuY2hvcjsKK30KKworYW5jaG9ycyA9IFtdOworCitmdW5jdGlvbiBhbGxHcmVlbigpIHsKKyAg
ICByZXR1cm4gYW5jaG9ycy5ldmVyeShmdW5jdGlvbiAoYW5jaG9yKSB7CisgICAgICAgIHJldHVy
biBpbnRlcm5hbHMuY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGFuY2hvcikuY29s
b3IgPT09ICdyZ2IoMCwgMTI4LCAwKSc7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGNvbXBhcmVT
dHlsZXMoKQoreworICAgIHZhciBhbmNob3I7CisKKyAgICBhbmNob3IgPSBnZW5lcmF0ZUxpbmso
KTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW5jbG9zdXJlMScpLmFwcGVuZENoaWxk
KGFuY2hvcik7CisgICAgYW5jaG9ycy5wdXNoKGFuY2hvcik7CisKKyAgICBhbmNob3IgPSBnZW5l
cmF0ZUxpbmsoKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW5jbG9zdXJlMicpLmFw
cGVuZENoaWxkKGFuY2hvcik7CisgICAgYW5jaG9ycy5wdXNoKGFuY2hvcik7CisKKyAgICBhbmNo
b3IgPSBnZW5lcmF0ZUxpbmsoKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDMn
KS5hcHBlbmRDaGlsZChhbmNob3IpOworICAgIGFuY2hvcnMucHVzaChhbmNob3IpOworCisgICAg
YW5jaG9yID0gZ2VuZXJhdGVMaW5rKCk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vu
Y2xvc3VyZTQnKS5hcHBlbmRDaGlsZChhbmNob3IpOworICAgIGFuY2hvcnMucHVzaChhbmNob3Ip
OworCisgICAgYW5jaG9yID0gZ2VuZXJhdGVMaW5rKCk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2VuY2xvc3VyZTUnKS5hcHBlbmRDaGlsZChhbmNob3IpOworICAgIGFuY2hvcnMucHVz
aChhbmNob3IpOworCisgICAgYW5jaG9yID0gZ2VuZXJhdGVMaW5rKCk7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2VuY2xvc3VyZTYnKS5hcHBlbmRDaGlsZChhbmNob3IpOworICAgIGFu
Y2hvcnMucHVzaChhbmNob3IpOworCisgICAgYW5jaG9yID0gZ2VuZXJhdGVMaW5rKCk7CisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3Q3JykuYXBwZW5kQ2hpbGQoYW5jaG9yKTsKKyAg
ICBhbmNob3JzLnB1c2goYW5jaG9yKTsKKworICAgIGFuY2hvciA9IGdlbmVyYXRlTGluaygpOwor
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0OCcpLmFwcGVuZENoaWxkKGFuY2hvcik7
CisgICAgYW5jaG9ycy5wdXNoKGFuY2hvcik7CisKKyAgICBpZiAod2luZG93LmludGVybmFscykg
eworICAgICAgICBzaG91bGRCZWNvbWVFcXVhbCgnYWxsR3JlZW4oKScsICd0cnVlJywgZmluaXNo
SlNUZXN0KTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzxzdHlsZT4KK2EgeworICAgIGNvbG9yOiBy
ZWQ7Cit9CisKKyN0ZXN0MSA6LXdlYmtpdC1hbnkoOm5vdCg6bGluayksIGEpIGEgeworICAgIGNv
bG9yOiBncmVlbjsKK30KKworI3Rlc3QyIGEgeworICAgIGNvbG9yOiBncmVlbjsKK30KKyN0ZXN0
MiA6LXdlYmtpdC1hbnkoOm5vdCg6bGluaykpIGEgeworICAgIGNvbG9yOiByZWQ7Cit9CisKKyN0
ZXN0MyA6LXdlYmtpdC1hbnkoOm5vdCg6bGluaykpIHsKKyAgICBjb2xvcjogZ3JlZW47Cit9CisK
KyN0ZXN0NCA6LXdlYmtpdC1hbnkoOm5vdCg6bGluaykpIHsKKyAgICBjb2xvcjogZ3JlZW47Cit9
CisKKyN0ZXN0NSA6LXdlYmtpdC1hbnkoYSwgOm5vdCg6bGluaykpIGEgeworICAgIGNvbG9yOiBn
cmVlbjsKK30KKworI3Rlc3Q2IGEgeworICAgIGNvbG9yOiBncmVlbjsKK30KKyN0ZXN0NiA6LXdl
YmtpdC1hbnkoZGl2LCA6bm90KDpsaW5rKSkgYSB7CisgICAgY29sb3I6IHJlZDsKK30KKworI3Rl
c3Q3IDotd2Via2l0LWFueSg6bm90KDp2aXNpdGVkKSkgeworICAgIGNvbG9yOiBncmVlbjsKK30K
KworCisjdGVzdDggYSB7CisgICAgY29sb3I6IGdyZWVuOworfQorI3Rlc3Q4IDotd2Via2l0LWFu
eSg6dmlzaXRlZCkgeworICAgIGNvbG9yOiByZWQ7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJv
ZHkgb25sb2FkPSJjb21wYXJlU3R5bGVzKCkiPgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9kdW1t
eS5odG1sIiBzdHlsZT0iZGlzcGxheTpub25lIj48L2lmcmFtZT4KKworPHAgaWQ9ImFyZWEiPgor
ICAgIDxwIGlkPSJ0ZXN0MSI+CisgICAgICAgIDxhIGlkPSJlbmNsb3N1cmUxIiBocmVmPSJyZXNv
dXJjZXMvZHVtbXkuaHRtbCI+PC9hPgorICAgIDwvcD4KKworICAgIDxwIGlkPSJ0ZXN0MiI+Cisg
ICAgICAgIDxhIGlkPSJlbmNsb3N1cmUyIiBocmVmPSJyZXNvdXJjZXMvZHVtbXkuaHRtbCI+PC9h
PgorICAgIDwvcD4KKworICAgIDxwIGlkPSJ0ZXN0MyI+CisgICAgPC9wPgorCisgICAgPHAgaWQ9
InRlc3Q0Ij4KKyAgICAgICAgPGEgaWQ9ImVuY2xvc3VyZTQiIGhyZWY9InJlc291cmNlcy9kdW1t
eS5odG1sIj48L2E+CisgICAgPC9wPgorCisgICAgPHAgaWQ9InRlc3Q1Ij4KKyAgICAgICAgPGEg
aWQ9ImVuY2xvc3VyZTUiIGhyZWY9InJlc291cmNlcy9kdW1teS5odG1sIj48L2E+CisgICAgPC9w
PgorCisgICAgPHAgaWQ9InRlc3Q2Ij4KKyAgICAgICAgPGEgaWQ9ImVuY2xvc3VyZTYiIGhyZWY9
InJlc291cmNlcy9kdW1teS5odG1sIj48L2E+CisgICAgPC9wPgorCisgICAgPHAgaWQ9InRlc3Q3
Ij4KKyAgICA8L3A+CisKKyAgICA8cCBpZD0idGVzdDgiPgorICAgIDwvcD4KKzwvcD4KKworPGRp
diBpZD1jb25zb2xlPjwvZGl2PgorPC9ib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239709</attachid>
            <date>2014-10-12 19:11:45 -0700</date>
            <delta_ts>2014-10-13 15:22:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135293-20141013111258.patch</filename>
            <type>text/plain</type>
            <size>36416</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE5YTcxMGU3OTk4MmQz
YzUxMzg4YThiMDhhNTE2Y2M2M2YyNDM1OS4uNGEzYWRmYTE5OWRkMWMzNDFhMDIwNGYxMTNkMmE4
NmVkZjZhYTc1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE0LTEwLTEyICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUyBKSVQ6IElt
cGxlbWVudCA6dmlzaXRlZCBwc2V1ZG8gY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvaGlzdG9yeS9saW5rLWluc2lkZS1ub3Qt
aW5zaWRlLWFueS5odG1sCisKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAgICAqIGNz
c2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29t
cGlsZXI6Om1vc3RFeHRlbmRlZFZpc2l0ZWRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ29tcGlsZXI6OmFkZFBzZXVkb0NsYXNzVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OlNlbGVjdG9yQ29kZUdlbmVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpjb25zdHJ1Y3RGcmFnbWVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Y29tcHV0ZUJhY2t0cmFj
a2luZ01lbW9yeVJlcXVpcmVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBp
bGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXJFeGNsdWRpbmdQc2V1ZG9FbGVtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlUmlnaHRtb3N0VHJlZVdhbGtlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBp
bGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVFbGVtZW50TGlua01hdGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNGaXJzdExp
bmspOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZVN0b3JlTGFzdFZpc2l0ZWRFbGVtZW50KToKKwogMjAxNC0xMC0xMiAg
TWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlZmVycmVyIFBvbGlj
eTogVXBkYXRlIDxtZXRhIG5hbWU9InJlZmVycmVyIj4gdmFsdWVzIHRvIG1hdGNoIHRoZSBzcGVj
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IDJjZDAxNzY2NWQyOTE1
ZTMxOGQwYjJlN2E0N2JkNDM3Zjk5MmQ2ZTIuLjljNGM3YWYwZWJlMjFjZTI3ZWE0NDQ1ZjgwYjk3
YWI1MjY2ZWIzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC01
NDYsNyArNTQ2LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAg
IC8vIHRoZSBwYXJzZXIgZW5mb3JjZXMgdGhhdCB0aGlzIG5ldmVyIG9jY3VycwogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoc3ViY29udGV4dC5zZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkg
IT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTm90KTsKICAgICAgICAgICAgICAgICAgICAgLy8g
V2Ugc2VsZWN0IGJldHdlZW4gOnZpc2l0ZWQgYW5kIDpsaW5rIHdoZW4gYXBwbHlpbmcuIFdlIGRv
bid0IGtub3cgd2hpY2ggb25lIGFwcGxpZWQgKG9yIG5vdCkgeWV0LgotICAgICAgICAgICAgICAg
ICAgICBpZiAoc3ViY29udGV4dC5zZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZCB8fCAoc3ViY29udGV4dC5zZWxlY3Rvci0+cHNldWRv
Q2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluayAmJiBzdWJjb250ZXh0
LnZpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoVHlwZTo6RW5hYmxlZCkpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChzdWJjb250ZXh0LnNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNpdGVkKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICgh
Y2hlY2tPbmUoc3ViY29udGV4dCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQv
U2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21w
aWxlci5jcHAKaW5kZXggMmI1ZjJlZmMwODU4MzMxNzNiODI1NjE3Yjg1ODhmYTNkMDU1ZDgzMy4u
OWFlYTc3ZjUyMTY4NWM1YjhmMmY2NzE4ZWI0Mjg2NDc2M2M3Mjg5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcApAQCAtMTA3LDYgKzEwNywxNiBAQCBlbnVt
IGNsYXNzIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMgewogICAgIE5vdFJpZ2h0bW9z
dAogfTsKIAorZW51bSBjbGFzcyBWaXNpdGVkTW9kZSB7CisgICAgTm9uZSwKKyAgICBWaXNpdGVk
Cit9OworCitzdGF0aWMgaW5saW5lIFZpc2l0ZWRNb2RlIG1vc3RFeHRlbmRlZFZpc2l0ZWRNb2Rl
KFZpc2l0ZWRNb2RlIGEsIFZpc2l0ZWRNb2RlIGIpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KGEs
IGIpOworfQorCiBjbGFzcyBBdHRyaWJ1dGVNYXRjaGluZ0luZm8gewogcHVibGljOgogICAgIEF0
dHJpYnV0ZU1hdGNoaW5nSW5mbyhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGJvb2wgY2Fu
RGVmYXVsdFRvQ2FzZVNlbnNpdGl2ZVZhbHVlTWF0Y2gpCkBAIC0yNDIsNiArMjUyLDcgQEAgY2xh
c3MgU2VsZWN0b3JDb2RlR2VuZXJhdG9yIHsKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IGdlbmVy
YXRlRWxlbWVudE1hdGNoZXNTZWxlY3Rvckxpc3QoQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1l
bnRSZWdpc3RlciwgY29uc3QgVmVjdG9yPFNlbGVjdG9yRnJhZ21lbnRMaXN0PiYpOwogCiAgICAg
Ly8gRWxlbWVudCByZWxhdGlvbnMgdHJlZSB3YWxrZXIuCisgICAgdm9pZCBnZW5lcmF0ZVJpZ2h0
bW9zdFRyZWVXYWxrZXIoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBT
ZWxlY3RvckZyYWdtZW50Jik7CiAgICAgdm9pZCBnZW5lcmF0ZVdhbGtUb1BhcmVudE5vZGUoQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHRhcmdldFJlZ2lzdGVyKTsKICAgICB2b2lkIGdlbmVyYXRlV2Fs
a1RvUGFyZW50RWxlbWVudChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCB0YXJnZXRSZWdpc3Rlcik7CiAgICAgdm9pZCBnZW5lcmF0ZVBhcmVu
dEVsZW1lbnRUcmVlV2Fsa2VyKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29u
c3QgU2VsZWN0b3JGcmFnbWVudCYpOwpAQCAtMjYxLDYgKzI3Miw3IEBAIGNsYXNzIFNlbGVjdG9y
Q29kZUdlbmVyYXRvciB7CiAgICAgLy8gRWxlbWVudCBwcm9wZXJ0aWVzIG1hdGNoZXJzLgogICAg
IHZvaWQgZ2VuZXJhdGVFbGVtZW50TWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgbWF0Y2hp
bmdUYWdOYW1lRmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6Okp1bXBMaXN0JiBtYXRjaGluZ1Bvc3RU
YWdOYW1lRmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7CiAgICAgdm9pZCBn
ZW5lcmF0ZUVsZW1lbnREYXRhTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50Jik7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRM
aW5rTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxl
Y3RvckZyYWdtZW50Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0
KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0cik7CiAg
ICAgdm9pZCBnZW5lcmF0ZUNvbnRleHRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0cik7CiAgICAgdm9pZCBnZW5lcmF0ZUVs
ZW1lbnRJc0FjdGl2ZShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNl
bGVjdG9yRnJhZ21lbnQmKTsKQEAgLTI5Nyw2ICszMDksOCBAQCBjbGFzcyBTZWxlY3RvckNvZGVH
ZW5lcmF0b3IgewogICAgIHZvaWQgYWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZyb21Db250ZXh0KEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQsIGludDY0X3QpOwogICAgIEFzc2Vt
Ymxlcjo6SnVtcCBicmFuY2hPblJlc29sdmluZ01vZGVXaXRoQ2hlY2tpbmdDb250ZXh0KEFzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU2VsZWN0b3JDaGVja2VyOjpNb2RlLCBBc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KTsKICAgICBBc3NlbWJsZXI6Okp1bXAgYnJh
bmNoT25SZXNvbHZpbmdNb2RlKEFzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU2VsZWN0
b3JDaGVja2VyOjpNb2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KTsK
KyAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzRmlyc3RMaW5rKEFzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQpOworICAgIHZvaWQg
Z2VuZXJhdGVTdG9yZUxhc3RWaXNpdGVkRWxlbWVudChBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxl
bWVudCk7CiAgICAgdm9pZCBnZW5lcmF0ZU1hcmtQc2V1ZG9TdHlsZUZvclBzZXVkb0VsZW1lbnQo
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50
Jik7CiAgICAgdm9pZCBnZW5lcmF0ZU50aEZpbHRlclRlc3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYg
ZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRlciwgaW50IGEsIGludCBi
KTsKICAgICB2b2lkIGdlbmVyYXRlUmVxdWVzdGVkUHNldWRvRWxlbWVudEVxdWFsc1RvU2VsZWN0
b3JQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3Qg
U2VsZWN0b3JGcmFnbWVudCYsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQp
OwpAQCAtMzIxLDYgKzMzNSw3IEBAIGNsYXNzIFNlbGVjdG9yQ29kZUdlbmVyYXRvciB7CiAgICAg
U2VsZWN0b3JDb250ZXh0IG1fc2VsZWN0b3JDb250ZXh0OwogICAgIEZ1bmN0aW9uVHlwZSBtX2Z1
bmN0aW9uVHlwZTsKICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBtX3NlbGVjdG9yRnJhZ21lbnRz
OworICAgIFZpc2l0ZWRNb2RlIG1fdmlzaXRlZE1vZGU7CiAKICAgICBTdGFja0FsbG9jYXRvcjo6
U3RhY2tSZWZlcmVuY2UgbV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZTsKIApAQCAtMzI4
LDYgKzM0Myw4IEBAIGNsYXNzIFNlbGVjdG9yQ29kZUdlbmVyYXRvciB7CiAgICAgQXNzZW1ibGVy
OjpSZWdpc3RlcklEIG1fZGVzY2VuZGFudEJhY2t0cmFja2luZ1N0YXJ0OwogICAgIFN0YWNrQWxs
b2NhdG9yOjpTdGFja1JlZmVyZW5jZVZlY3RvciBtX2JhY2t0cmFja2luZ1N0YWNrOwogICAgIERl
cXVlPEJhY2t0cmFja2luZ0xldmVsLCAzMj4gbV9iYWNrdHJhY2tpbmdMZXZlbHM7CisgICAgU3Rh
Y2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlIG1fbGFzdFZpc2l0ZWRFbGVtZW50OworICAgIFN0
YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZSBtX3N0YXJ0RWxlbWVudDsKIAogI2lmIENTU19T
RUxFQ1RPUl9KSVRfREVCVUdHSU5HCiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIG1fb3JpZ2luYWxT
ZWxlY3RvcjsKQEAgLTM0NCw3ICszNjEsNyBAQCBlbnVtIGNsYXNzIEZyYWdtZW50c0xldmVsIHsK
ICAgICBJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlID0gMQogfTsKIAotc3RhdGljIEZ1bmN0aW9uVHlw
ZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2Vs
ZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIEZy
YWdtZW50c0xldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzKTsKK3N0YXRpYyBG
dW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2Vs
ZWN0b3IsIFNlbGVjdG9yQ29udGV4dCwgU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJh
Z21lbnRzLCBGcmFnbWVudHNMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cywg
Ym9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYpOwogCiBzdGF0aWMgdm9pZCBj
b21wdXRlQmFja3RyYWNraW5nSW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVj
dG9yRnJhZ21lbnRzLCB1bnNpZ25lZCBsZXZlbCA9IDApOwogCkBAIC00MzQsNyArNDUxLDcgQEAg
c3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKGNv
bnN0IENTU1NlbGVjdG9yJiBzZWxlY3QKICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RN
YXRjaEFueXRoaW5nOwogfQogCi1zdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9D
bGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBm
cmFnbWVudCwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRQb3NpdGlv
bkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cykKK3N0YXRpYyBpbmxpbmUg
RnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0
b3IsIFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JD
b250ZXh0LCBGcmFnbWVudHNMZXZlbCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5S
b290RnJhZ21lbnRzIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVu
YWJsZWQsIFZpc2l0ZWRNb2RlJiB2aXNpdGVkTW9kZSkKIHsKICAgICBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NUeXBlIHR5cGUgPSBzZWxlY3Rvci5wc2V1ZG9DbGFzc1R5cGUoKTsKICAgICBzd2l0
Y2ggKHR5cGUpIHsKQEAgLTQ5MCw3ICs1MDcsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlw
ZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzV2luZG93SW5hY3RpdmU6CiAgICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0
cihpc1dpbmRvd0luYWN0aXZlKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcjsKLSAgICAgICAgICAgIAorCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFNjcmVlbjoKICAgICAg
ICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9u
UHRyKG1hdGNoZXNGdWxsU2NyZWVuUHNldWRvQ2xhc3MpKTsKQEAgLTUzNCw3ICs1NTEsNiBAQCBz
dGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2Vs
ZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
TnRoT2ZUeXBlOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoTGFzdENoaWxk
OgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoTGFzdE9mVHlwZToKLSAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQ6CiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NEcmFnOgogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JTX0xFVkVMNCkKICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc01hdGNoZXM6CkBAIC01NDMsMTUgKzU1OSwy
NiBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3Qg
Q1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogCiAgICAgLy8gT3B0aW1pemVkIHBzZXVkbyBz
ZWxlY3RvcnMuCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnlMaW5rOgotICAg
ICAgICBmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmFkZChDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NM
aW5rKTsKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2Vy
OwotCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rOgogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzUm9vdDoKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc1RhcmdldDoKICAgICAgICAgZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5hZGQodHlwZSk7CiAg
ICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKIAorICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZDoKKyAgICAgICAgLy8gRGV0ZXJt
aW5lIHRoaXMgOnZpc2l0ZWQgY2Fubm90IG1hdGNoIGFueXRoaW5nIHN0YXRpY2FsbHkuCisgICAg
ICAgIGlmICghdmlzaXRlZE1hdGNoRW5hYmxlZCkKKyAgICAgICAgICAgIHJldHVybiBGdW5jdGlv
blR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmc7CisKKyAgICAgICAgLy8gSW5zaWRlIGZ1bmN0aW9u
YWwgcHNldWRvIGNsYXNzIGV4Y2VwdCBmb3IgOm5vdCwgOnZpc2l0ZWQgbmV2ZXIgbWF0Y2hlcy4K
KyAgICAgICAgLy8gQW5kIGluIHRoZSBjYXNlIGluc2lkZSA6bm90LCByZXR1cm5pbmcgQ2Fubm90
TWF0Y2hBbnl0aGluZyBpbmRpY2F0ZXMgdGhhdCA6bm90KDp2aXNpdGVkKSBjYW4gbWF0Y2ggb3Zl
ciBhbnl0aGluZy4KKyAgICAgICAgaWYgKGZyYWdtZW50TGV2ZWwgPT0gRnJhZ21lbnRzTGV2ZWw6
OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUpCisgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBl
OjpDYW5ub3RNYXRjaEFueXRoaW5nOworCisgICAgICAgIGZyYWdtZW50LnBzZXVkb0NsYXNzZXMu
YWRkKHR5cGUpOworICAgICAgICB2aXNpdGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpWaXNpdGVkOwor
ICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CisKICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Njb3BlOgogICAgICAgICBpZiAoc2VsZWN0
b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvcikgewogICAgICAgICAg
ICAgZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5hZGQoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUm9v
dCk7CkBAIC01OTcsNyArNjI0LDkgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNl
dWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKIAogICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JM
aXN0LT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6
Om5leHQoc3Vic2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgIFNlbGVjdG9yRnJhZ21l
bnRMaXN0IHNlbGVjdG9yRnJhZ21lbnRzOwotICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblR5
cGUgZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3Rv
ckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFs
UHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMpOworICAgICAgICAgICAgICAgICAg
ICBWaXNpdGVkTW9kZSBpZ25vcmVWaXNpdGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOworICAg
ICAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJh
Z21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBG
cmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFn
bWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpZ25vcmVWaXNpdGVkTW9kZSA9PSBWaXNp
dGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2FibGVkIGluIHRoZSBmdW5jdGlvbmFsIHBz
ZXVkbyBjbGFzc2VzIik7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZnVuY3Rpb25UeXBl
KSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3Rv
ckNoZWNrZXI6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRnVuY3Rpb25UeXBlOjpTZWxlY3Rv
ckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0OgpAQCAtNjMyLDcgKzY2MSw5IEBAIHN0YXRpYyBp
bmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYg
c2VsZWN0b3IsIFNlbGVjCiAjZW5kaWYKIAogICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExp
c3Qgbm90RnJhZ21lbnRzOwotICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9
IGNvbnN0cnVjdEZyYWdtZW50cyhzZWxlY3Rvckxpc3QtPmZpcnN0KCksIHNlbGVjdG9yQ29udGV4
dCwgbm90RnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwg
cG9zaXRpb25JblJvb3RGcmFnbWVudHMpOworICAgICAgICAgICAgVmlzaXRlZE1vZGUgaWdub3Jl
VmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsKKyAgICAgICAgICAgIEZ1bmN0aW9uVHlw
ZSBmdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc2VsZWN0b3JMaXN0LT5maXJzdCgp
LCBzZWxlY3RvckNvbnRleHQsIG5vdEZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rp
b25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFi
bGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KGlnbm9yZVZpc2l0ZWRNb2RlID09IFZpc2l0ZWRNb2RlOjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlz
YWJsZWQgaW4gdGhlIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzZXMiKTsKIAogICAgICAgICAgICAg
Ly8gU2luY2UgdGhpcyBpcyBub3QgcHNldWRvIGNsYXNzIGZpbHRlciwgQ2Fubm90TWF0Y2hBbnl0
aGluZyBpbXBsaWVzIHRoaXMgZmlsdGVyIGFsd2F5cyBwYXNzZXMuCiAgICAgICAgICAgICBpZiAo
ZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZykKQEAgLTY0
NywxMCArNjc4LDYgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NU
eXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKIAogICAgICAgICAgICAgY29u
c3QgU2VsZWN0b3JGcmFnbWVudCYgc3ViRnJhZ21lbnQgPSBub3RGcmFnbWVudHMuZmlyc3QoKTsK
IAotICAgICAgICAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHZpc2l0
ZWRNYXRjaFR5cGUuCi0gICAgICAgICAgICBpZiAoc3ViRnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5j
b250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOwotCiAgICAgICAgICAgICBmcmFnbWVu
dC5ub3RGaWx0ZXJzLmFwcGVuZChzdWJGcmFnbWVudCk7CiAgICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb25UeXBlOwogICAgICAgICB9CkBAIC02NjEsNyArNjg4LDkgQEAgc3RhdGljIGlubGluZSBG
dW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3Rv
ciwgU2VsZWMKICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBGdW5jdGlv
blR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NT
U2VsZWN0b3IqIHJvb3RTZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yTGlzdCgpLT5maXJzdCgp
OyByb290U2VsZWN0b3I7IHJvb3RTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChyb290
U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3QgZnJhZ21l
bnRMaXN0OwotICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBzdWJGdW5jdGlvblR5cGUgPSBj
b25zdHJ1Y3RGcmFnbWVudHMocm9vdFNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIGZyYWdtZW50
TGlzdCwgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5S
b290RnJhZ21lbnRzKTsKKyAgICAgICAgICAgICAgICBWaXNpdGVkTW9kZSBpZ25vcmVWaXNpdGVk
TW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOworICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBz
dWJGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMocm9vdFNlbGVjdG9yLCBzZWxlY3Rv
ckNvbnRleHQsIGZyYWdtZW50TGlzdCwgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVk
b1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25v
cmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpZ25v
cmVWaXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2FibGVk
IGluIHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAKICAgICAgICAgICAgICAgICAv
LyBTaW5jZSB0aGlzIGZyYWdtZW50IGFsd2F5cyB1bm1hdGNoIGFnYWluc3QgdGhlIGVsZW1lbnQs
IGRvbid0IGluc2VydCBpdCB0byBhbnlGcmFnbWVudHMuCiAgICAgICAgICAgICAgICAgaWYgKHN1
YkZ1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCkBAIC03
MjMsNiArNzUyLDcgQEAgaW5saW5lIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6U2VsZWN0b3JDb2Rl
R2VuZXJhdG9yKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWMKICAgICA6IG1fc3RhY2tBbGxv
Y2F0b3IobV9hc3NlbWJsZXIpCiAgICAgLCBtX3NlbGVjdG9yQ29udGV4dChzZWxlY3RvckNvbnRl
eHQpCiAgICAgLCBtX2Z1bmN0aW9uVHlwZShGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hl
Y2tlcikKKyAgICAsIG1fdmlzaXRlZE1vZGUoVmlzaXRlZE1vZGU6Ok5vbmUpCiAgICAgLCBtX2Rl
c2NlbmRhbnRCYWNrdHJhY2tpbmdTdGFydEluVXNlKGZhbHNlKQogI2lmIENTU19TRUxFQ1RPUl9K
SVRfREVCVUdHSU5HCiAgICAgLCBtX29yaWdpbmFsU2VsZWN0b3Iocm9vdFNlbGVjdG9yKQpAQCAt
NzMyLDcgKzc2MiwxMCBAQCBpbmxpbmUgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpTZWxlY3RvckNv
ZGVHZW5lcmF0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlYwogICAgIGRhdGFMb2dGKCJD
b21waWxpbmcgXCIlc1wiXG4iLCBtX29yaWdpbmFsU2VsZWN0b3ItPnNlbGVjdG9yVGV4dCgpLnV0
ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAKLSAgICBtX2Z1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZy
YWdtZW50cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250ZXh0LCBtX3NlbGVjdG9yRnJhZ21l
bnRzLCBGcmFnbWVudHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50
czo6UmlnaHRtb3N0KTsKKyAgICAvLyBJbiBRdWVyeVNlbGVjdG9yIGNvbnRleHQsIDp2aXNpdGVk
IGFsd2F5cyBoYXMgbm8gZWZmZWN0IGR1ZSB0byBzZWN1cml0eSBpc3N1ZXMuCisgICAgYm9vbCB2
aXNpdGVkTWF0Y2hFbmFibGVkID0gc2VsZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6
UXVlcnlTZWxlY3RvcjsKKworICAgIG1fZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRz
KHJvb3RTZWxlY3RvciwgbV9zZWxlY3RvckNvbnRleHQsIG1fc2VsZWN0b3JGcmFnbWVudHMsIEZy
YWdtZW50c0xldmVsOjpSb290LCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzOjpSaWdo
dG1vc3QsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIG1fdmlzaXRlZE1vZGUpOwogICAgIGlmIChtX2Z1
bmN0aW9uVHlwZSAhPSBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGUgJiYgbV9mdW5jdGlvblR5
cGUgIT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nKQogICAgICAgICBjb21wdXRl
QmFja3RyYWNraW5nSW5mb3JtYXRpb24obV9zZWxlY3RvckZyYWdtZW50cyk7CiB9CkBAIC03NDgs
NyArNzgxLDcgQEAgc3RhdGljIGJvb2wgaXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50VHlwZSB0eXBlKQogICAgIHJldHVybiB0eXBlID49IENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50U2Nyb2xsYmFyICYmIHR5cGUgPD0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0VsZW1lbnRTY3JvbGxiYXJUcmFja1BpZWNlOwogfQogCi1zdGF0aWMgRnVuY3Rpb25UeXBlIGNv
bnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3Rv
ckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JG
cmFnbWVudHMsIEZyYWdtZW50c0xldmVsIGZyYWdtZW50TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25J
blJvb3RGcmFnbWVudHMgcG9zaXRpb25JblJvb3RGcmFnbWVudHMpCitzdGF0aWMgRnVuY3Rpb25U
eXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBT
ZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2Vs
ZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsIGZyYWdtZW50TGV2ZWwsIEZyYWdtZW50UG9z
aXRpb25JblJvb3RGcmFnbWVudHMgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRl
ZE1hdGNoRW5hYmxlZCwgVmlzaXRlZE1vZGUmIHZpc2l0ZWRNb2RlKQogewogICAgIFNlbGVjdG9y
RnJhZ21lbnQgZnJhZ21lbnQ7CiAgICAgRnJhZ21lbnRSZWxhdGlvbiByZWxhdGlvblRvUHJldmlv
dXNGcmFnbWVudCA9IEZyYWdtZW50UmVsYXRpb246OlJpZ2h0bW9zdDsKQEAgLTc5Myw3ICs4MjYs
NyBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxl
Y3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvcgogICAgICAgICAgICAgaWYgKGZyYWdtZW50LnBz
ZXVkb0VsZW1lbnRTZWxlY3RvciAmJiBpc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZnJhZ21lbnQu
cHNldWRvRWxlbWVudFNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpKSkKICAgICAgICAgICAg
ICAgICBmdW5jdGlvblR5cGUgPSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25U
eXBlLCBhZGRTY3JvbGxiYXJQc2V1ZG9DbGFzc1R5cGUoKnNlbGVjdG9yLCBmcmFnbWVudCkpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0
cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5cGUsIGFkZFBzZXVkb0NsYXNzVHlwZSgqc2Vs
ZWN0b3IsIGZyYWdtZW50LCBzZWxlY3RvckNvbnRleHQsIHN1YlBvc2l0aW9uKSk7CisgICAgICAg
ICAgICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0
aW9uVHlwZSwgYWRkUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQsIHNlbGVjdG9y
Q29udGV4dCwgZnJhZ21lbnRMZXZlbCwgc3ViUG9zaXRpb24sIHZpc2l0ZWRNYXRjaEVuYWJsZWQs
IHZpc2l0ZWRNb2RlKSk7CiAgICAgICAgICAgICBpZiAoIXBzZXVkb0NsYXNzT25seU1hdGNoZXNM
aW5rc0luUXVpcmtzTW9kZSgqc2VsZWN0b3IpKQogICAgICAgICAgICAgICAgIGZyYWdtZW50Lm9u
bHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChmdW5j
dGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlIHx8IGZ1bmN0aW9uVHlwZSA9
PSBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCkBAIC04NzYsNiArOTA5LDkgQEAg
c3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3Iq
IHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAgICAgICAgIGlmIChzZWxlY3RvckNvbnRleHQg
PT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKQogICAgICAgICAgICAgICAgIHJlbGF0
aW9uRnVuY3Rpb25UeXBlID0gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAg
ICAgICAgICAgICBmdW5jdGlvblR5cGUgPSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVu
Y3Rpb25UeXBlLCByZWxhdGlvbkZ1bmN0aW9uVHlwZSk7CisKKyAgICAgICAgICAgIC8vIFdoZW4g
dGhlIHJlbGF0aW9uIGlzIGFkamFjZW50LCBkaXNhYmxlIDp2aXNpdGVkIG1hdGNoLgorICAgICAg
ICAgICAgdmlzaXRlZE1hdGNoRW5hYmxlZCA9IGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAg
ZnJhZ21lbnQucmVsYXRpb25Ub0xlZnRGcmFnbWVudCA9IGZyYWdtZW50UmVsYXRpb25Gb3JTZWxl
Y3RvclJlbGF0aW9uKHJlbGF0aW9uKTsKQEAgLTk5NywxMCArMTAzMywxMyBAQCBzdGF0aWMgQmFj
a3RyYWNraW5nTWVtb3J5UmVxdWlyZW1lbnRzIGNvbXB1dGVCYWNrdHJhY2tpbmdNZW1vcnlSZXF1
aXJlbWVudHMoY29ucwogCiAvLyBUaGUgQ1NTIEpJVCBoYXMgb25seSBiZWVuIHZhbGlkYXRlZCB3
aXRoIGEgc3RyaWN0IG1pbmltdW0gb2YgNiBhbGxvY2F0ZWQgcmVnaXN0ZXJzLgogY29uc3QgdW5z
aWduZWQgbWluaW11bVJlZ2lzdGVyUmVxdWlyZW1lbnQgPSA2Owotc3RhdGljIEJhY2t0cmFja2lu
Z01lbW9yeVJlcXVpcmVtZW50cyBjb21wdXRlQmFja3RyYWNraW5nTWVtb3J5UmVxdWlyZW1lbnRz
KGNvbnN0IFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cykKK3N0YXRpYyBC
YWNrdHJhY2tpbmdNZW1vcnlSZXF1aXJlbWVudHMgY29tcHV0ZUJhY2t0cmFja2luZ01lbW9yeVJl
cXVpcmVtZW50cyhjb25zdCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMs
IFZpc2l0ZWRNb2RlIHZpc2l0ZWRNb2RlKQogewogICAgIEJhY2t0cmFja2luZ01lbW9yeVJlcXVp
cmVtZW50cyByb290QmFja3RyYWNraW5nTWVtb3J5UmVxdWlyZW1lbnQgPSBjb21wdXRlQmFja3Ry
YWNraW5nTWVtb3J5UmVxdWlyZW1lbnRzKHNlbGVjdG9yRnJhZ21lbnRzLCBmYWxzZSk7CiAgICAg
cm9vdEJhY2t0cmFja2luZ01lbW9yeVJlcXVpcmVtZW50LnJlZ2lzdGVyQ291bnQgPSBzdGQ6Om1h
eChyb290QmFja3RyYWNraW5nTWVtb3J5UmVxdWlyZW1lbnQucmVnaXN0ZXJDb3VudCwgbWluaW11
bVJlZ2lzdGVyUmVxdWlyZW1lbnQpOworICAgIC8vIEFsbG9jYXRlIHRoZSBzdGFjayByZWZlcmVu
Y2VzIGZvciB0aGUgbGFzdCB2aXNpdGVkIGVsZW1lbnQgYW5kIHRoZSBzdGFydCBlbGVtZW50Lgor
ICAgIGlmICh2aXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6VmlzaXRlZCkKKyAgICAgICAgcm9v
dEJhY2t0cmFja2luZ01lbW9yeVJlcXVpcmVtZW50LnN0YWNrQ291bnQgKz0gMjsKICAgICByZXR1
cm4gcm9vdEJhY2t0cmFja2luZ01lbW9yeVJlcXVpcmVtZW50OwogfQogCkBAIC0xNDc2LDcgKzE1
MTUsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNr
ZXIoKQogICAgICAgICBnZW5lcmF0ZVJlcXVlc3RlZFBzZXVkb0VsZW1lbnRFcXVhbHNUb1NlbGVj
dG9yUHNldWRvRWxlbWVudChmYWlsdXJlT25GdW5jdGlvbkVudHJ5LCBtX3NlbGVjdG9yRnJhZ21l
bnRzLmZpcnN0KCksIGNoZWNraW5nQ29udGV4dFJlZ2lzdGVyKTsKICAgICB9CiAKLSAgICBCYWNr
dHJhY2tpbmdNZW1vcnlSZXF1aXJlbWVudHMgYmFja3RyYWNraW5nTWVtb3J5UmVxdWlyZW1lbnRz
ID0gY29tcHV0ZUJhY2t0cmFja2luZ01lbW9yeVJlcXVpcmVtZW50cyhtX3NlbGVjdG9yRnJhZ21l
bnRzKTsKKyAgICBCYWNrdHJhY2tpbmdNZW1vcnlSZXF1aXJlbWVudHMgYmFja3RyYWNraW5nTWVt
b3J5UmVxdWlyZW1lbnRzID0gY29tcHV0ZUJhY2t0cmFja2luZ01lbW9yeVJlcXVpcmVtZW50cyht
X3NlbGVjdG9yRnJhZ21lbnRzLCBtX3Zpc2l0ZWRNb2RlKTsKICAgICB1bnNpZ25lZCBhdmFpbGFi
bGVSZWdpc3RlckNvdW50ID0gbV9yZWdpc3RlckFsbG9jYXRvci5yZXNlcnZlQ2FsbGVyU2F2ZWRS
ZWdpc3RlcnMoYmFja3RyYWNraW5nTWVtb3J5UmVxdWlyZW1lbnRzLnJlZ2lzdGVyQ291bnQpOwog
CiAjaWYgQ1NTX1NFTEVDVE9SX0pJVF9ERUJVR0dJTkcKQEAgLTE1MTEsNiArMTU1MCwxNSBAQCB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIoKQogICAg
IGlmICh1bnNpZ25lZCBzdGFja1JlcXVpcmVtZW50Q291bnQgPSBiYWNrdHJhY2tpbmdNZW1vcnlS
ZXF1aXJlbWVudHMuc3RhY2tDb3VudCkKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGFjayA9IG1f
c3RhY2tBbGxvY2F0b3IuYWxsb2NhdGVVbmluaXRpYWxpemVkKHN0YWNrUmVxdWlyZW1lbnRDb3Vu
dCk7CiAKKyAgICBpZiAobV92aXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6VmlzaXRlZCkgewor
ICAgICAgICBtX2xhc3RWaXNpdGVkRWxlbWVudCA9IG1fYmFja3RyYWNraW5nU3RhY2sudGFrZUxh
c3QoKTsKKyAgICAgICAgbV9zdGFydEVsZW1lbnQgPSBtX2JhY2t0cmFja2luZ1N0YWNrLnRha2VM
YXN0KCk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldFRvU3RhcnRFbGVtZW50ID0gbV9zdGFja0Fs
bG9jYXRvci5vZmZzZXRUb1N0YWNrUmVmZXJlbmNlKG1fc3RhcnRFbGVtZW50KTsKKyAgICAgICAg
bV9hc3NlbWJsZXIuc3RvcmVQdHIoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgQXNzZW1ibGVyOjpB
ZGRyZXNzKEFzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRvU3RhcnRFbGVt
ZW50KSk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldFRvTGFzdFZpc2l0ZWRFbGVtZW50ID0gbV9z
dGFja0FsbG9jYXRvci5vZmZzZXRUb1N0YWNrUmVmZXJlbmNlKG1fbGFzdFZpc2l0ZWRFbGVtZW50
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RvcmVQdHIoQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBBc3NlbWJsZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlciwgb2Zmc2V0VG9MYXN0VmlzaXRlZEVsZW1lbnQpKTsKKyAgICB9CisKICAgICBBc3NlbWJs
ZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKICAgICBnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlckV4
Y2x1ZGluZ1BzZXVkb0VsZW1lbnRzKGZhaWx1cmVDYXNlcywgbV9zZWxlY3RvckZyYWdtZW50cyk7
CiAKQEAgLTE1MTksNiArMTU2NywxNSBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVTZWxlY3RvckNoZWNrZXIoKQogICAgICAgICBnZW5lcmF0ZU1hcmtQc2V1ZG9TdHlsZUZv
clBzZXVkb0VsZW1lbnQoZmFpbHVyZUNhc2VzLCBtX3NlbGVjdG9yRnJhZ21lbnRzLmZpcnN0KCkp
OwogICAgIH0KIAorICAgIGlmIChtX3Zpc2l0ZWRNb2RlID09IFZpc2l0ZWRNb2RlOjpWaXNpdGVk
KSB7CisgICAgICAgIExvY2FsUmVnaXN0ZXIgbGFzdFZpc2l0ZWRFbGVtZW50KG1fcmVnaXN0ZXJB
bGxvY2F0b3IpOworICAgICAgICB1bnNpZ25lZCBvZmZzZXRUb0xhc3RWaXNpdGVkRWxlbWVudCA9
IG1fc3RhY2tBbGxvY2F0b3Iub2Zmc2V0VG9TdGFja1JlZmVyZW5jZShtX2xhc3RWaXNpdGVkRWxl
bWVudCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNzKEFz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRvTGFzdFZpc2l0ZWRFbGVtZW50
KSwgbGFzdFZpc2l0ZWRFbGVtZW50KTsKKyAgICAgICAgQXNzZW1ibGVyOjpKdW1wIG5vTGFzdFZp
c2l0ZWRFbGVtZW50ID0gbV9hc3NlbWJsZXIuYnJhbmNoVGVzdFB0cihBc3NlbWJsZXI6Olplcm8s
IGxhc3RWaXNpdGVkRWxlbWVudCk7CisgICAgICAgIGdlbmVyYXRlRWxlbWVudElzRmlyc3RMaW5r
KGZhaWx1cmVDYXNlcywgbGFzdFZpc2l0ZWRFbGVtZW50KTsKKyAgICAgICAgbm9MYXN0VmlzaXRl
ZEVsZW1lbnQubGluaygmbV9hc3NlbWJsZXIpOworICAgIH0KKwogICAgIG1fcmVnaXN0ZXJBbGxv
Y2F0b3IuZGVhbGxvY2F0ZVJlZ2lzdGVyKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOwogCiAgICAg
aWYgKG1fZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2Vy
KSB7CkBAIC0xNTczLDcgKzE2MzAsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVTZWxlY3RvckNoZWNrZXJFeGNsdWRpbmdQc2V1ZG9FbGVtZW50cyhBc3NlbQogICAgIGZv
ciAoY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQgOiBzZWxlY3RvckZyYWdtZW50TGlz
dCkgewogICAgICAgICBzd2l0Y2ggKGZyYWdtZW50LnJlbGF0aW9uVG9SaWdodEZyYWdtZW50KSB7
CiAgICAgICAgIGNhc2UgRnJhZ21lbnRSZWxhdGlvbjo6UmlnaHRtb3N0OgotICAgICAgICAgICAg
Z2VuZXJhdGVFbGVtZW50TWF0Y2hpbmcoZmFpbHVyZUNhc2VzLCBmYWlsdXJlQ2FzZXMsIGZyYWdt
ZW50KTsKKyAgICAgICAgICAgIGdlbmVyYXRlUmlnaHRtb3N0VHJlZVdhbGtlcihmYWlsdXJlQ2Fz
ZXMsIGZyYWdtZW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZyYWdtZW50
UmVsYXRpb246OkRlc2NlbmRhbnQ6CiAgICAgICAgICAgICBnZW5lcmF0ZUFuY2VzdG9yVHJlZVdh
bGtlcihmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKQEAgLTE2NDIsNiArMTY5OSwxMSBAQCBzdGF0
aWMgaW5saW5lIEFzc2VtYmxlcjo6SnVtcCB0ZXN0SXNFbGVtZW50RmxhZ09uTm9kZShBc3NlbWJs
ZXI6OlJlc3VsdENvbmRpdGlvbgogICAgIHJldHVybiBhc3NlbWJsZXIuYnJhbmNoVGVzdDMyKGNv
bmRpdGlvbiwgQXNzZW1ibGVyOjpBZGRyZXNzKG5vZGVBZGRyZXNzLCBOb2RlOjpub2RlRmxhZ3NN
ZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJc0VsZW1l
bnQoKSkpOwogfQogCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVSaWdodG1v
c3RUcmVlV2Fsa2VyKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2Vs
ZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit7CisgICAgZ2VuZXJhdGVFbGVtZW50TWF0Y2hpbmco
ZmFpbHVyZUNhc2VzLCBmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKK30KKwogdm9pZCBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlV2Fsa1RvUGFyZW50Tm9kZShBc3NlbWJsZXI6OlJlZ2lz
dGVySUQgdGFyZ2V0UmVnaXN0ZXIpCiB7CiAgICAgbV9hc3NlbWJsZXIubG9hZFB0cihBc3NlbWJs
ZXI6OkFkZHJlc3MoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgTm9kZTo6cGFyZW50Tm9kZU1lbW9y
eU9mZnNldCgpKSwgdGFyZ2V0UmVnaXN0ZXIpOwpAQCAtMjE0Niw4ICsyMjA4LDcgQEAgdm9pZCBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKEFzc2VtYmxlcjo6
SnVtcExpc3QmIG1hdGNoaW4KICAgICBpZiAoZnJhZ21lbnQudGFnTmFtZSkKICAgICAgICAgZ2Vu
ZXJhdGVFbGVtZW50SGFzVGFnTmFtZShtYXRjaGluZ1RhZ05hbWVGYWlsdXJlQ2FzZXMsICooZnJh
Z21lbnQudGFnTmFtZSkpOwogCi0gICAgaWYgKGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29udGFp
bnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluaykpCi0gICAgICAgIGdlbmVyYXRlRWxlbWVu
dElzTGluayhtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzKTsKKyAgICBnZW5lcmF0ZUVs
ZW1lbnRMaW5rTWF0Y2hpbmcobWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1cmVDYXNlcywgZnJhZ21l
bnQpOwogCiAgICAgaWYgKGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29udGFpbnMoQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzUm9vdCkpCiAgICAgICAgIGdlbmVyYXRlRWxlbWVudElzUm9vdChtYXRj
aGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzKTsKQEAgLTIxOTQsNiArMjI1NSwxMSBAQCB2b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50TWF0Y2hpbmcoQXNzZW1ibGVy
OjpKdW1wTGlzdCYgbWF0Y2hpbgogICAgICAgICBnZW5lcmF0ZUVsZW1lbnRJc0luTGFuZ3VhZ2Uo
bWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1cmVDYXNlcywgKmZyYWdtZW50LmxhbmdGaWx0ZXIpOwog
ICAgIGlmIChmcmFnbWVudC5wc2V1ZG9FbGVtZW50U2VsZWN0b3IpCiAgICAgICAgIGdlbmVyYXRl
RWxlbWVudEhhc1BzZXVkb0VsZW1lbnQobWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1cmVDYXNlcywg
ZnJhZ21lbnQpOworCisgICAgLy8gUmVhY2ggaGVyZSB3aGVuIHRoZSBnZW5lcmF0ZUVsZW1lbnRN
YXRjaGluZyBtYXRjaGluZyBzdWNjZWVkZWQuCisgICAgLy8gT25seSB3aGVuIHRoZSBtYXRjaGlu
ZyBzdWNjZWVlZGVkLCB0aGUgbGFzdCB2aXNpdGVkIGVsZW1lbnQgc2hvdWxkIGJlIHN0b3JlZCBh
bmQgY2hlY2tlZCBhdCB0aGUgZW5kIG9mIHRoZSB3aG9sZSBtYXRjaGluZy4KKyAgICBpZiAoZnJh
Z21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNp
dGVkKSkKKyAgICAgICAgZ2VuZXJhdGVTdG9yZUxhc3RWaXNpdGVkRWxlbWVudChlbGVtZW50QWRk
cmVzc1JlZ2lzdGVyKTsKIH0KIAogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
RWxlbWVudERhdGFNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNv
bnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQpAQCAtMjIxNyw2ICsyMjgzLDEyIEBAIHZv
aWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnREYXRhTWF0Y2hpbmcoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZmFpCiAgICAgICAgIGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZXNN
YXRjaGluZyhmYWlsdXJlQ2FzZXMsIGVsZW1lbnREYXRhQWRkcmVzcywgZnJhZ21lbnQpOwogfQog
Cit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50TGlua01hdGNoaW5n
KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVu
dCYgZnJhZ21lbnQpCit7CisgICAgaWYgKGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29udGFpbnMo
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluaykgfHwgZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5j
b250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnlMaW5rKSB8fCBmcmFnbWVudC5wc2V1
ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQpKQorICAg
ICAgICBnZW5lcmF0ZUVsZW1lbnRJc0xpbmsoZmFpbHVyZUNhc2VzKTsKK30KKwogc3RhdGljIGlu
bGluZSBBc3NlbWJsZXI6Okp1bXAgdGVzdElzSFRNTEZsYWdPbk5vZGUoQXNzZW1ibGVyOjpSZXN1
bHRDb25kaXRpb24gY29uZGl0aW9uLCBBc3NlbWJsZXImIGFzc2VtYmxlciwgQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIG5vZGVBZGRyZXNzKQogewogICAgIHJldHVybiBhc3NlbWJsZXIuYnJhbmNoVGVz
dDMyKGNvbmRpdGlvbiwgQXNzZW1ibGVyOjpBZGRyZXNzKG5vZGVBZGRyZXNzLCBOb2RlOjpub2Rl
RmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJ
c0hUTUwoKSkpOwpAQCAtMzM2NCw2ICszNDM2LDM1IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW1lbnRJc1RhcmdldChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hQdHIoQXNzZW1ibGVy
OjpOb3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGRvY3VtZW50LCBEb2N1bWVudDo6Y3NzVGFy
Z2V0TWVtb3J5T2Zmc2V0KCkpLCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKSk7CiB9CiAKK3ZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0TGluayhBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50
KQoreworICAgIExvY2FsUmVnaXN0ZXIgY3VycmVudEVsZW1lbnQobV9yZWdpc3RlckFsbG9jYXRv
cik7CisgICAgdW5zaWduZWQgb2Zmc2V0VG9TdGFydEVsZW1lbnQgPSBtX3N0YWNrQWxsb2NhdG9y
Lm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV9zdGFydEVsZW1lbnQpOworICAgIG1fYXNzZW1ibGVy
LmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNzKEFzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsIG9mZnNldFRvU3RhcnRFbGVtZW50KSwgY3VycmVudEVsZW1lbnQpOworCisgICAgLy8gVHJl
ZSB3YWxraW5nIHVwIHRvIHRoZSBwcm92aWRlZCBlbGVtZW50IHVudGlsIGxpbmsgbm9kZSBpcyBm
b3VuZC4KKyAgICBBc3NlbWJsZXI6OkxhYmVsIGxvb3BTdGFydChtX2Fzc2VtYmxlci5sYWJlbCgp
KTsKKworICAgIC8vIFRoZSB0YXJnZXQgZWxlbWVudCBpcyBhbHdheXMgaW4gdGhlIGFuY2VzdG9y
cyBmcm9tIHRoZSBzdGFydCBlbGVtZW50IHRvIHRoZSByb290IG5vZGUuCisgICAgLy8gU28gdGhl
IHRyZWUgd2Fsa2luZyBkb2Vzbid0IGxvb3AgaW5maW5pdGVseSBhbmQgaXQgd2lsbCBiZSBzdG9w
cGVkIHdpdGggdGhlIGZvbGxvd2luZyBgY3VycmVudEVsZW1lbnQgPT0gZWxlbWVudGAgY29uZGl0
aW9uLgorICAgIEFzc2VtYmxlcjo6SnVtcCByZWFjaGVkVG9FbGVtZW50ID0gbV9hc3NlbWJsZXIu
YnJhbmNoUHRyKEFzc2VtYmxlcjo6RXF1YWwsIGN1cnJlbnRFbGVtZW50LCBlbGVtZW50KTsKKwor
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxl
cjo6Tm9uWmVybywgQXNzZW1ibGVyOjpBZGRyZXNzKGN1cnJlbnRFbGVtZW50LCBOb2RlOjpub2Rl
RmxhZ3NNZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJ
c0xpbmsoKSkpKTsKKworICAgIC8vIEFuZCB0aGVzZSBhbmNlc3RvcnMgYXJlIGd1YXJhbnRlZWQg
dGhhdCB0aGV5IGFyZSBlbGVtZW50IG5vZGVzLgorICAgIC8vIFNvIHRoZXJlJ3Mgbm8gbmVlZCB0
byBjaGVjayB3aGV0aGVyIGl0IGlzIGFuIGVsZW1lbnQgbm9kZSBhbmQgd2hldGhlciBpdCBpcyBu
b3QgYSBudWxscHRyLgorICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNz
KGN1cnJlbnRFbGVtZW50LCBOb2RlOjpwYXJlbnROb2RlTWVtb3J5T2Zmc2V0KCkpLCBjdXJyZW50
RWxlbWVudCk7CisgICAgbV9hc3NlbWJsZXIuanVtcChsb29wU3RhcnQpOworCisgICAgcmVhY2hl
ZFRvRWxlbWVudC5saW5rKCZtX2Fzc2VtYmxlcik7Cit9CisKK3ZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZVN0b3JlTGFzdFZpc2l0ZWRFbGVtZW50KEFzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBlbGVtZW50KQoreworICAgIHVuc2lnbmVkIG9mZnNldFRvTGFzdFZpc2l0ZWRFbGVtZW50
ID0gbV9zdGFja0FsbG9jYXRvci5vZmZzZXRUb1N0YWNrUmVmZXJlbmNlKG1fbGFzdFZpc2l0ZWRF
bGVtZW50KTsKKyAgICBtX2Fzc2VtYmxlci5zdG9yZVB0cihlbGVtZW50LCBBc3NlbWJsZXI6OkFk
ZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9MYXN0VmlzaXRl
ZEVsZW1lbnQpKTsKK30KKwogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlTWFy
a1BzZXVkb1N0eWxlRm9yUHNldWRvRWxlbWVudChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewogICAgIEFTU0VSVCht
X3NlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDdlODUyM2MzYTcwN2JjNGVmMGM3YjBjNDAxYmUzODgyNDAzMDcyZWYuLjhmZTUwNjRhN2Rm
YTQwYTFhYmNhNWJiZGMyODk5ZWYyNThhYjU2NDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAx
NC0xMC0xMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAg
ICBDU1MgSklUOiBJbXBsZW1lbnQgOnZpc2l0ZWQgcHNldWRvIGNsYXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUyOTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMg
Q1NTIEpJVCBmb3IgOnZpc2l0ZWQuIEFuZCBpdCBtYWtlcyA6bm90KDpsaW5rKSBKSVQtZWQuCisg
ICAgICAgIEZvbGxvd2luZyB0aGUgZGVzaWduIGRpc2N1c3NlZCBhdCB0aGUgb3RoZXIgYnVnWzFd
LCBpbXBsZW1lbnRlZCA6dmlzaXRlZCBKSVQKKyAgICAgICAgd2l0aG91dCB0cmFja2luZyBWaXNp
dGVkTWF0Y2hFbmFibGVkIHN0YXRlLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIHdlIGNoYW5n
ZSB0aGUgc2VtYW50aWNzIG9mIDp2aXNpdGVkIC8gOmxpbmsKKyAgICAgICAgaW5zaWRlIGZ1bmN0
aW9uYWwgcHNldWRvIGNsYXNzZXMgZm9yIGZ1cnRoZXIgQ1NTIFNlbGVjdG9yIExldmVsIDQgZXh0
ZW5zaW9ucy4KKworICAgICAgICBFZGdlIGNhc2VzIGFyZSB0ZXN0ZWQgYnkgdGhlIGV4aXN0aW5n
IHRlc3RzLgorICAgICAgICA6bm90KDpsaW5rKQorICAgICAgICAgICAgZmFzdC9oaXN0b3J5L2xp
bmstaW5zaWRlLW5vdC5odG1sCisgICAgICAgIDpub3QoOnZpc2l0ZWQpCisgICAgICAgICAgICBm
YXN0L2hpc3RvcnkvdmlzaXRlZC1pbnNpZGUtbm90Lmh0bWwKKyAgICAgICAgOi13ZWJraXQtYW55
KDpsaW5rKQorICAgICAgICAgICAgZmFzdC9oaXN0b3J5L2xpbmstaW5zaWRlLWFueS5odG1sCisg
ICAgICAgIDotd2Via2l0LWFueSg6dmlzaXRlZCkKKyAgICAgICAgICAgIGZhc3QvaGlzdG9yeS92
aXNpdGVkLWluc2lkZS1hbnkuaHRtbAorCisgICAgICAgIFRvIGNvdmVyIHRoZSA6LXdlYmtpdC1h
bnkoOm5vdCg6bGluaykpLCBhZGRlZCBuZXcgdGVzdHMuCisKKyAgICAgICAgWzFdOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NjM5CisKKyAgICAgICAgKiBUZXN0
RXhwZWN0YXRpb25zOgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9saW5rLWluc2lkZS1ub3QtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9saW5rLWluc2lkZS1ub3QtaW5zaWRl
LWFueS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9saW5rLWlu
c2lkZS1ub3QtaW5zaWRlLWFueS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hpc3Rvcnkv
bGluay1pbnNpZGUtbm90Lmh0bWw6CisKIDIwMTQtMTAtMTIgIE1pa2UgV2VzdCAgPG1rd3N0QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZWZlcnJlciBQb2xpY3k6IFVwZGF0ZSA8bWV0YSBuYW1l
PSJyZWZlcnJlciI+IHZhbHVlcyB0byBtYXRjaCB0aGUgc3BlYwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggMDU4YjBkMmRhYTdjMTJlMDg4ZWMxMmIyMjZiMzRhZmNhYWE5YTU0ZS4uMDcxMzQxNGEyM2Qw
ODIxZjBlM2VlYjYyMmQzYjlhZjhhMzIwNTMyZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVz
dEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC0yMTgs
NyArMjE4LDcgQEAgd2Via2l0Lm9yZy9iLzEzNzE2NyBqcy9rZGUvZnVuY3Rpb25fYXJndW1lbnRz
Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMzY4NzgganMvcHJvbWlzZXMtdGVzdHMv
cHJvbWlzZXMtdGVzdHMtMi0zLTMuaHRtbCBbIFNsb3cgXQogCiAjIEludGVudGlvbmFsIGJyZWFr
aW5nIG9mIDpub3QoOmxpbmspIGFuZCA6bm90KDp2aXNpdGVkKSBmb3IgdGhlIGRldmVsb3BtZW50
IG9mIHRoZSBleHRlbmRlZCA6bm90KCkgZnJvbSBDU1MgU2VsZWN0b3IgTGV2ZWwgNC4KLWZhc3Qv
aGlzdG9yeS9saW5rLWluc2lkZS1ub3QuaHRtbCBbIEZhaWx1cmUgXQorIyBmYXN0L2hpc3Rvcnkv
bGluay1pbnNpZGUtbm90Lmh0bWwgWyBGYWlsdXJlIF0KIAogIyBAc3VwcG9ydHMgVzNDIEZhaWx1
cmVzCiB3ZWJraXQub3JnL2IvMTM3NTY2IGNzczMvY29uZGl0aW9uYWwvdzNjL2F0LXN1cHBvcnRz
LTAxMC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2hpc3RvcnkvbGluay1pbnNpZGUtbm90LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvaGlzdG9yeS9saW5rLWluc2lkZS1ub3QtZXhwZWN0ZWQudHh0CmluZGV4IGFiMmEzYzNlZDdh
YTBmMDdhZWU5ZDY4MDkzYTBjYzMyYjk1MDEwZDcuLmY2ODA3Y2MwYjU3NWVkOTM1YjA0N2E3MDBh
N2YxNzYxNmQ5MzFkMmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9saW5r
LWluc2lkZS1ub3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9s
aW5rLWluc2lkZS1ub3QtZXhwZWN0ZWQudHh0CkBAIC0zLDE0ICszLDE0IEBACiBPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyBvbmVTdHlsZS5jb2xvciBiZWNhbWUgInJnYigwLCAx
MjgsIDApIgorUEFTUyBvbmVTdHlsZS5jb2xvciBiZWNhbWUgInJnYigyNTUsIDAsIDApIgogUEFT
UyB0d29TdHlsZS5jb2xvciBiZWNhbWUgInJnYigwLCAxMjgsIDApIgogUEFTUyB0aHJlZVN0eWxl
LmNvbG9yIGJlY2FtZSAicmdiKDAsIDEyOCwgMCkiCiBQQVNTIGZvdXJTdHlsZS5jb2xvciBiZWNh
bWUgInJnYigwLCAxMjgsIDApIgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBU
RVNUIENPTVBMRVRFCi1jb2xvciBvZiBPbmUsIFR3bywgVGhyZWUsIGFuZCBGb3VyIHNob3VsZCBi
ZSBncmVlbjoKK2NvbG9yIG9mIE9uZSBzaG91bGQgYmUgcmVkLCBhbmQgdGhvc2Ugb2YgVHdvLCBU
aHJlZSwgYW5kIEZvdXIgc2hvdWxkIGJlIGdyZWVuOgogCiBPbmUKIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9oaXN0b3J5L2xpbmstaW5zaWRlLW5vdC1pbnNpZGUtYW55LWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9saW5rLWluc2lkZS1ub3QtaW5zaWRlLWFu
eS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDJiYjdmZWZmNzhlODU1NTk0MjE2ZDEzNDA0NmJi
Zjg5ZGNiOGQxYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9s
aW5rLWluc2lkZS1ub3QtaW5zaWRlLWFueS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNiBAQAor
OmxpbmsgaW5zaWRlIDpub3QgaW5zaWRlIDotd2Via2l0LWFueSBgOi13ZWJraXQtYW55KDpub3Qo
OmxpbmspKWAKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9uZSgpIGJl
Y2FtZSB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKK0xpbmsgc2hvdWxkIGJlIGdyZWVuLgorCitMaW5rIHNob3VsZCBiZSBncmVlbi4KKworTGlu
ayBzaG91bGQgYmUgcmVkLgorCitMaW5rIHNob3VsZCBiZSByZWQuCisKK0xpbmsgc2hvdWxkIGJl
IGdyZWVuLgorCitMaW5rIHNob3VsZCBiZSBncmVlbi4KKworTGluayBzaG91bGQgYmUgZ3JlZW4u
CisKK0xpbmsgc2hvdWxkIGJlIGdyZWVuLgorCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvaGlzdG9yeS9saW5rLWluc2lkZS1ub3QtaW5zaWRlLWFueS5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9oaXN0b3J5L2xpbmstaW5zaWRlLW5vdC1pbnNpZGUtYW55Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OGEyNjFiYWFkYjE5N2FhMGZmZDAwZDllNzIzM2JhNmNiNDdhOTEyOAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9saW5rLWluc2lkZS1ub3QtaW5zaWRlLWFueS5o
dG1sCkBAIC0wLDAgKzEsMTU3IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIjpsaW5rIGluc2lkZSA6bm90IGluc2lkZSA6LXdlYmtpdC1hbnkgYDotd2Via2l0LWFueSg6
bm90KDpsaW5rKSlgIik7Citqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgIHdpbmRvdy50ZXN0UnVubmVyLmtlZXBXZWJIaXN0b3J5KCk7CisKK2Z1bmN0
aW9uIGdlbmVyYXRlTGluayhjb2xvcikgeworICAgIHZhciBhbmNob3IgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJhIik7CisgICAgYW5jaG9yLmhyZWY9Imh0dHA6Ly9tYWRldXAuc2l0ZS5jb20i
OworICAgIGFuY2hvci5pbm5lckhUTUwgPSAiTGluayBzaG91bGQgYmUgIiArIGNvbG9yICsgIi4i
OworICAgIHJldHVybiBhbmNob3I7Cit9CisKK3ZhciBHUkVFTiA9ICdyZ2IoMCwgMTI4LCAwKSc7
Cit2YXIgUkVEID0gJ3JnYigyNTUsIDAsIDApJzsKKworYW5jaG9ycyA9IFtdOworCitmdW5jdGlv
biBkb25lKCkgeworICAgIHJldHVybiBhbmNob3JzLmV2ZXJ5KGZ1bmN0aW9uIChzZXQpIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFscy5jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8o
c2V0WzBdKS5jb2xvciA9PT0gc2V0WzFdOzsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gY29tcGFy
ZVN0eWxlcygpCit7CisgICAgdmFyIGFuY2hvcjsKKworICAgIGFuY2hvciA9IGdlbmVyYXRlTGlu
aygnZ3JlZW4nKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW5jbG9zdXJlMScpLmFw
cGVuZENoaWxkKGFuY2hvcik7CisgICAgYW5jaG9ycy5wdXNoKFthbmNob3IsIEdSRUVOXSk7CisK
KyAgICBhbmNob3IgPSBnZW5lcmF0ZUxpbmsoJ2dyZWVuJyk7CisgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2VuY2xvc3VyZTInKS5hcHBlbmRDaGlsZChhbmNob3IpOworICAgIGFuY2hvcnMu
cHVzaChbYW5jaG9yLCBHUkVFTl0pOworCisgICAgYW5jaG9yID0gZ2VuZXJhdGVMaW5rKCdyZWQn
KTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDMnKS5hcHBlbmRDaGlsZChhbmNo
b3IpOworICAgIGFuY2hvcnMucHVzaChbYW5jaG9yLCBSRURdKTsKKworICAgIGFuY2hvciA9IGdl
bmVyYXRlTGluaygncmVkJyk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuY2xvc3Vy
ZTQnKS5hcHBlbmRDaGlsZChhbmNob3IpOworICAgIGFuY2hvcnMucHVzaChbYW5jaG9yLCBSRURd
KTsKKworICAgIGFuY2hvciA9IGdlbmVyYXRlTGluaygnZ3JlZW4nKTsKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnZW5jbG9zdXJlNScpLmFwcGVuZENoaWxkKGFuY2hvcik7CisgICAgYW5j
aG9ycy5wdXNoKFthbmNob3IsIEdSRUVOXSk7CisKKyAgICBhbmNob3IgPSBnZW5lcmF0ZUxpbmso
J2dyZWVuJyk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuY2xvc3VyZTYnKS5hcHBl
bmRDaGlsZChhbmNob3IpOworICAgIGFuY2hvcnMucHVzaChbYW5jaG9yLCBHUkVFTl0pOworCisg
ICAgYW5jaG9yID0gZ2VuZXJhdGVMaW5rKCdncmVlbicpOworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCd0ZXN0NycpLmFwcGVuZENoaWxkKGFuY2hvcik7CisgICAgYW5jaG9ycy5wdXNoKFth
bmNob3IsIEdSRUVOXSk7CisKKyAgICBhbmNob3IgPSBnZW5lcmF0ZUxpbmsoJ2dyZWVuJyk7Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3Q4JykuYXBwZW5kQ2hpbGQoYW5jaG9yKTsK
KyAgICBhbmNob3JzLnB1c2goW2FuY2hvciwgR1JFRU5dKTsKKworICAgIGlmICh3aW5kb3cuaW50
ZXJuYWxzKSB7CisgICAgICAgIHNob3VsZEJlY29tZUVxdWFsKCdkb25lKCknLCAndHJ1ZScsIGZp
bmlzaEpTVGVzdCk7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8c3R5bGU+CithIHsKKyAgICBjb2xv
cjogcmVkOworfQorCisjdGVzdDEgOi13ZWJraXQtYW55KDpub3QoOmxpbmspLCBhKSBhIHsKKyAg
ICBjb2xvcjogZ3JlZW47Cit9CisKKyN0ZXN0MiBhIHsKKyAgICBjb2xvcjogZ3JlZW47Cit9Cisj
dGVzdDIgOi13ZWJraXQtYW55KDpub3QoOmxpbmspKSBhIHsKKyAgICBjb2xvcjogcmVkOworfQor
CisvKiA6bm90KDpsaW5rKSBkb2Vzbid0IG1hdGNoIHRvIHRoZSBsaW5rIGVsZW1lbnQuICovCisj
dGVzdDMgOi13ZWJraXQtYW55KDpub3QoOmxpbmspKSB7CisgICAgY29sb3I6IGdyZWVuOworfQor
CisvKiA6bm90KDpsaW5rKSBkb2Vzbid0IG1hdGNoIHRvIHRoZSBsaW5rIGVsZW1lbnQuICovCisj
dGVzdDQgOi13ZWJraXQtYW55KDpub3QoOmxpbmspKSB7CisgICAgY29sb3I6IGdyZWVuOworfQor
CisjdGVzdDUgOi13ZWJraXQtYW55KGEsIDpub3QoOmxpbmspKSBhIHsKKyAgICBjb2xvcjogZ3Jl
ZW47Cit9CisKKyN0ZXN0NiBhIHsKKyAgICBjb2xvcjogZ3JlZW47Cit9CisjdGVzdDYgOi13ZWJr
aXQtYW55KGRpdiwgOm5vdCg6bGluaykpIGEgeworICAgIGNvbG9yOiByZWQ7Cit9CisKKyN0ZXN0
NyA6LXdlYmtpdC1hbnkoOm5vdCg6dmlzaXRlZCkpIHsKKyAgICBjb2xvcjogZ3JlZW47Cit9CisK
KworI3Rlc3Q4IGEgeworICAgIGNvbG9yOiBncmVlbjsKK30KKyN0ZXN0OCA6LXdlYmtpdC1hbnko
OnZpc2l0ZWQpIHsKKyAgICBjb2xvcjogcmVkOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5
IG9ubG9hZD0iY29tcGFyZVN0eWxlcygpIj4KKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvZHVtbXku
aHRtbCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9pZnJhbWU+CisKKzxwIGlkPSJhcmVhIj4KKyAg
ICA8cCBpZD0idGVzdDEiPgorICAgICAgICA8YSBpZD0iZW5jbG9zdXJlMSIgaHJlZj0icmVzb3Vy
Y2VzL2R1bW15Lmh0bWwiPjwvYT4KKyAgICA8L3A+CisKKyAgICA8cCBpZD0idGVzdDIiPgorICAg
ICAgICA8YSBpZD0iZW5jbG9zdXJlMiIgaHJlZj0icmVzb3VyY2VzL2R1bW15Lmh0bWwiPjwvYT4K
KyAgICA8L3A+CisKKyAgICA8cCBpZD0idGVzdDMiPgorICAgIDwvcD4KKworICAgIDxwIGlkPSJ0
ZXN0NCI+CisgICAgICAgIDxhIGlkPSJlbmNsb3N1cmU0IiBocmVmPSJyZXNvdXJjZXMvZHVtbXku
aHRtbCI+PC9hPgorICAgIDwvcD4KKworICAgIDxwIGlkPSJ0ZXN0NSI+CisgICAgICAgIDxhIGlk
PSJlbmNsb3N1cmU1IiBocmVmPSJyZXNvdXJjZXMvZHVtbXkuaHRtbCI+PC9hPgorICAgIDwvcD4K
KworICAgIDxwIGlkPSJ0ZXN0NiI+CisgICAgICAgIDxhIGlkPSJlbmNsb3N1cmU2IiBocmVmPSJy
ZXNvdXJjZXMvZHVtbXkuaHRtbCI+PC9hPgorICAgIDwvcD4KKworICAgIDxwIGlkPSJ0ZXN0NyI+
CisgICAgPC9wPgorCisgICAgPHAgaWQ9InRlc3Q4Ij4KKyAgICA8L3A+Cis8L3A+CisKKzxkaXYg
aWQ9Y29uc29sZT48L2Rpdj4KKzwvYm9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvaGlzdG9yeS9saW5rLWluc2lkZS1ub3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
aGlzdG9yeS9saW5rLWluc2lkZS1ub3QuaHRtbAppbmRleCBlMzdlNWViNWVkNWU0OTBjNjI5ZDli
NDM4NjAzYjE5NGY1N2Y5ZjE1Li4zYWM4YjBkNTVjMGY3ZWU0NDY0MDJkZmVhMjNmM2M2NWFjZGE1
OWQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvbGluay1pbnNpZGUtbm90
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L2xpbmstaW5zaWRlLW5vdC5odG1s
CkBAIC0yMiw3ICsyMiw3IEBACiAgICAgICAgIHR3b1N0eWxlID0gaW50ZXJuYWxzLmNvbXB1dGVk
U3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHdvIikp
OwogICAgICAgICB0aHJlZVN0eWxlID0gaW50ZXJuYWxzLmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdW
aXNpdGVkSW5mbyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGhyZWUiKSk7CiAgICAgICAgIGZv
dXJTdHlsZSA9IGludGVybmFscy5jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvdXIiKSk7Ci0gICAgICAgIHNob3VsZEJlY29tZUVxdWFs
VG9TdHJpbmcoIm9uZVN0eWxlLmNvbG9yIiwgInJnYigwLCAxMjgsIDApIiwgZmluaXNoKTsKKyAg
ICAgICAgc2hvdWxkQmVjb21lRXF1YWxUb1N0cmluZygib25lU3R5bGUuY29sb3IiLCAicmdiKDI1
NSwgMCwgMCkiLCBmaW5pc2gpOwogICAgICAgICBzaG91bGRCZWNvbWVFcXVhbFRvU3RyaW5nKCJ0
d29TdHlsZS5jb2xvciIsICJyZ2IoMCwgMTI4LCAwKSIsIGZpbmlzaCk7CiAgICAgICAgIHNob3Vs
ZEJlY29tZUVxdWFsVG9TdHJpbmcoInRocmVlU3R5bGUuY29sb3IiLCAicmdiKDAsIDEyOCwgMCki
LCBmaW5pc2gpOwogICAgICAgICBzaG91bGRCZWNvbWVFcXVhbFRvU3RyaW5nKCJmb3VyU3R5bGUu
Y29sb3IiLCAicmdiKDAsIDEyOCwgMCkiLCBmaW5pc2gpOwpAQCAtMzAsNiArMzAsNyBAQAogfQog
PC9zY3JpcHQ+CiA8c3R5bGU+CisvKiBBZnRlciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM1MjkzLCA6bm90KDpsaW5rKSBzaW1wbHkgY29uc2lkZXJlZCBhcyA6bm90
KDphbnktbGluaykgaW4gdGhlIHNlbGVjdG9yIG1hdGNoaW5nLiAqLwogYSB7IGNvbG9yOiByZWQ7
IH0KICNhcmVhMSBhOm5vdCg6bGluaykgewogICAgIGNvbG9yOiBncmVlbjsKQEAgLTU1LDcgKzU2
LDcgQEAKIDxib2R5IG9ubG9hZD0iY29tcGFyZVN0eWxlcygpIj4KIDxpZnJhbWUgc3JjPSJyZXNv
dXJjZXMvZHVtbXkuaHRtbCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9pZnJhbWU+CiAKLTxwPmNv
bG9yIG9mIE9uZSwgVHdvLCBUaHJlZSwgYW5kIEZvdXIgc2hvdWxkIGJlIGdyZWVuOjwvcD4KKzxw
PmNvbG9yIG9mIE9uZSBzaG91bGQgYmUgcmVkLCBhbmQgdGhvc2Ugb2YgVHdvLCBUaHJlZSwgYW5k
IEZvdXIgc2hvdWxkIGJlIGdyZWVuOjwvcD4KIDxwPgogCiA8cCBpZD0iYXJlYTEiPgo=
</data>
<flag name="review"
          id="264434"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="264474"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>