<?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>50038</bug_id>
          
          <creation_ts>2010-11-24 13:49:14 -0800</creation_ts>
          <short_desc>Add word-prefix search options to the text search API</short_desc>
          <delta_ts>2010-11-30 10:24:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>50245</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>abecsi</cc>
    
    <cc>buildbot</cc>
    
    <cc>eric</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>313446</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-11-24 13:49:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/8650085&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313451</commentid>
    <comment_count>1</comment_count>
      <attachid>74790</attachid>
    <who name="">mitz</who>
    <bug_when>2010-11-24 13:55:12 -0800</bug_when>
    <thetext>Created attachment 74790
WebCore (ICU code path only) implementation, WebKit/mac WebKit2 API, DumpRenderTree/mac test support and tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313477</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-11-24 14:44:30 -0800</bug_when>
    <thetext>Attachment 74790 did not build on qt:
Build output: http://queues.webkit.org/results/6408034</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313499</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-24 15:37:09 -0800</bug_when>
    <thetext>Attachment 74790 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2
Updating OpenSource
RA layer request failed: OPTIONS of &apos;http://svn.webkit.org/repository/webkit&apos;: timed out waiting for server (http://svn.webkit.org) at /usr/lib/git-core/git-svn line 2295

Died at WebKitTools/Scripts/update-webkit line 129.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313515</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-11-24 16:14:46 -0800</bug_when>
    <thetext>Attachment 74790 did not build on win:
Build output: http://queues.webkit.org/results/6342032</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314157</commentid>
    <comment_count>5</comment_count>
      <attachid>74790</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-27 18:00:57 -0800</bug_when>
    <thetext>Comment on attachment 74790
WebCore (ICU code path only) implementation, WebKit/mac WebKit2 API, DumpRenderTree/mac test support and tests

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

r=me, assuming you get this to build on all platforms before landing it

&gt; WebCore/editing/Editor.h:333
&gt; +    bool findString(const String&amp;, FindOptions);
&gt;      bool findString(const String&amp;, bool forward, bool caseFlag, bool wrapFlag, bool startInSelection);

Longer term it might be nice to return the version with four bool arguments. Maybe even put a FIXME reminding us that we want to do that?

&gt; WebCore/editing/FindOptions.h:34
&gt; +    TreatMedialCapAsWordStart = 1 &lt;&lt; 2,

Might want a comment nearby explaining what medial capitals are. Why the abbreviation “cap” for capital?

&gt; WebCore/editing/TextIterator.cpp:1841
&gt; +    static const char latin1SeparatorTable[256] = {

Is char the optimal type here? If bool is not good on some platforms, perhaps unsigned char is slightly better than char?

&gt; WebCore/editing/TextIterator.cpp:1863
&gt; +    return U_GET_GC_MASK(character) &amp; (U_GC_S_MASK | U_GC_P_MASK | U_GC_Z_MASK | U_GC_CF_MASK);

Should we make this part non-inline?

&gt; WebCore/editing/TextIterator.cpp:1923
&gt; +        if (m_prefixLength)
&gt; +            m_prefixLength -= min(m_prefixLength, m_buffer.size() - m_overlap);

I don’t think you need the if here. The min already has a suitable branch. Unless the if is a performance optimization.

&gt; WebCore/editing/TextIterator.cpp:2044
&gt; +            U16_FWD_1(m_buffer.data(), offset, size);

I suspect the non-ICU-using platforms don’t have this macro. You may need to beef up the header they use to get some of the ICU macros.

&gt; WebCore/editing/TextIterator.cpp:2062
&gt; +    size_t wordBreakSearchStart = start + length;
&gt; +    while (wordBreakSearchStart &gt; start)
&gt; +        wordBreakSearchStart = findNextWordFromIndex(m_buffer.data(), m_buffer.size(), wordBreakSearchStart, false /* backwards */);
&gt; +    return wordBreakSearchStart == start;

Is this sufficiently efficient when called repeatedly?

&gt; WebCore/editing/TextIterator.cpp:2109
&gt; +        if (m_prefixLength)
&gt; +            m_prefixLength -= min(m_prefixLength, size - overlap);

Again, I suspect the if is not needed.

&gt; WebCore/editing/TextIterator.cpp:2128
&gt; +    if (m_prefixLength)
&gt; +        m_prefixLength -= min&lt;size_t&gt;(m_prefixLength, matchStart + 1);

Yet again, the if is not necessary.

&gt; WebCore/editing/TextIterator.cpp:2469
&gt; +            int wordBoundaryContextStart = backwardsIterator.length();
&gt; +            U16_BACK_1(backwardsIterator.characters(), 0, wordBoundaryContextStart);
&gt; +            wordBoundaryContextStart = startOfLastWordBoundaryContext(backwardsIterator.characters(), wordBoundaryContextStart);
&gt; +            int contextLength = backwardsIterator.length() - wordBoundaryContextStart;

Is int really the right type here?

&gt; WebCore/editing/TextIterator.cpp:2515
&gt; -    {
&gt; -        CharacterIterator findIterator(range, TextIteratorEntersTextControls);
&gt; -        matchLength = findPlainText(findIterator, target, forward, caseSensitive, matchStart);
&gt; -        if (!matchLength)
&gt; -            return collapsedToBoundary(range, forward);
&gt; -    }
&gt; +
&gt; +    CharacterIterator findIterator(range, TextIteratorEntersTextControls);
&gt; +    matchLength = findPlainText(findIterator, target, options, matchStart);
&gt; +    if (!matchLength)
&gt; +        return collapsedToBoundary(range, !(options &amp; Backwards));

You dropped the braces that make the character iterator fall out of scope early. Why? Was that not a helpful optimization?

Another way to accomplish the same thing is to use a temporary for the character iterator instead of a named local.

&gt; WebCore/editing/TextIterator.h:62
&gt;  String plainText(const Range*, TextIteratorBehavior defaultBehavior = TextIteratorDefaultBehavior);
&gt;  UChar* plainTextToMallocAllocatedBuffer(const Range*, unsigned&amp; bufferLength, bool isDisplayString, TextIteratorBehavior defaultBehavior = TextIteratorDefaultBehavior);

We should remove that misleading argument name.

&gt; WebCore/editing/TextIterator.h:64
&gt; +PassRefPtr&lt;Range&gt; findPlainText(const Range*, const String&amp;, FindOptions);
&gt;  PassRefPtr&lt;Range&gt; findPlainText(const Range*, const String&amp;, bool forward, bool caseSensitive);

As above, should we consider deprecating and then removing the bool version?

&gt; WebCore/page/Page.h:205
&gt; +        bool findString(const String&amp;, FindOptions);
&gt;          bool findString(const String&amp;, TextCaseSensitivity, FindDirection, bool shouldWrap);
&gt; +        unsigned int markAllMatchesForText(const String&amp;, FindOptions, bool shouldHighlight, unsigned);
&gt;          unsigned int markAllMatchesForText(const String&amp;, TextCaseSensitivity, bool shouldHighlight, unsigned);

Should we deprecate the TextCaseSensitivity versions?

&gt; LayoutTests/editing/text-iterator/findString.html:12
&gt; +        log(&quot;Searching for \u2018&quot; + target + &quot;\u2019 &quot; + (text.length &lt;= 64 ? &quot;in \u2018&quot; + text + &quot;\u2019 &quot; : &quot;in long string &quot;) + &quot;with options [&quot; + options.join(&quot;, &quot;) + &quot;]:&quot;);

Why not use straight quotes instead of curly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314512</commentid>
    <comment_count>6</comment_count>
      <attachid>75040</attachid>
    <who name="">mitz</who>
    <bug_when>2010-11-29 10:46:14 -0800</bug_when>
    <thetext>Created attachment 75040
WebCore (ICU code path only) implementation, WebKit/mac WebKit2 API, DumpRenderTree/mac test support and tests

(In reply to comment #5)
&gt; (From update of attachment 74790 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74790&amp;action=review
&gt; 
&gt; r=me, assuming you get this to build on all platforms before landing it

Thanks for the review. This version includes more build system changes.

&gt; 
&gt; &gt; WebCore/editing/Editor.h:333
&gt; &gt; +    bool findString(const String&amp;, FindOptions);
&gt; &gt;      bool findString(const String&amp;, bool forward, bool caseFlag, bool wrapFlag, bool startInSelection);
&gt; 
&gt; Longer term it might be nice to return the version with four bool arguments. Maybe even put a FIXME reminding us that we want to do that?

Done.

&gt; 
&gt; &gt; WebCore/editing/FindOptions.h:34
&gt; &gt; +    TreatMedialCapAsWordStart = 1 &lt;&lt; 2,
&gt; 
&gt; Might want a comment nearby explaining what medial capitals are. Why the abbreviation “cap” for capital?

Added a comment. Changed  to “capital”.

&gt; 
&gt; &gt; WebCore/editing/TextIterator.cpp:1841
&gt; &gt; +    static const char latin1SeparatorTable[256] = {
&gt; 
&gt; Is char the optimal type here? If bool is not good on some platforms, perhaps unsigned char is slightly better than char?

Changed to bool but left the values as 0s and 1s.

&gt; 
&gt; &gt; WebCore/editing/TextIterator.cpp:1863
&gt; &gt; +    return U_GET_GC_MASK(character) &amp; (U_GC_S_MASK | U_GC_P_MASK | U_GC_Z_MASK | U_GC_CF_MASK);
&gt; 
&gt; Should we make this part non-inline?

Done, although the name might not be ideal.

&gt; 
&gt; &gt; WebCore/editing/TextIterator.cpp:1923
&gt; &gt; +        if (m_prefixLength)
&gt; &gt; +            m_prefixLength -= min(m_prefixLength, m_buffer.size() - m_overlap);
&gt; 
&gt; I don’t think you need the if here. The min already has a suitable branch. Unless the if is a performance optimization.

Removed the if for now.

&gt; 
&gt; &gt; WebCore/editing/TextIterator.cpp:2044
&gt; &gt; +            U16_FWD_1(m_buffer.data(), offset, size);
&gt; 
&gt; I suspect the non-ICU-using platforms don’t have this macro. You may need to beef up the header they use to get some of the ICU macros.

Done.

&gt; 
&gt; &gt; WebCore/editing/TextIterator.cpp:2062
&gt; &gt; +    size_t wordBreakSearchStart = start + length;
&gt; &gt; +    while (wordBreakSearchStart &gt; start)
&gt; &gt; +        wordBreakSearchStart = findNextWordFromIndex(m_buffer.data(), m_buffer.size(), wordBreakSearchStart, false /* backwards */);
&gt; &gt; +    return wordBreakSearchStart == start;
&gt; 
&gt; Is this sufficiently efficient when called repeatedly?

Don’t know.

&gt; 
&gt; &gt; WebCore/editing/TextIterator.cpp:2109
&gt; &gt; +        if (m_prefixLength)
&gt; &gt; +            m_prefixLength -= min(m_prefixLength, size - overlap);
&gt; 
&gt; Again, I suspect the if is not needed.

Removed the if.

&gt; 
&gt; &gt; WebCore/editing/TextIterator.cpp:2128
&gt; &gt; +    if (m_prefixLength)
&gt; &gt; +        m_prefixLength -= min&lt;size_t&gt;(m_prefixLength, matchStart + 1);
&gt; 
&gt; Yet again, the if is not necessary.

Removed it.

&gt; 
&gt; &gt; WebCore/editing/TextIterator.cpp:2469
&gt; &gt; +            int wordBoundaryContextStart = backwardsIterator.length();
&gt; &gt; +            U16_BACK_1(backwardsIterator.characters(), 0, wordBoundaryContextStart);
&gt; &gt; +            wordBoundaryContextStart = startOfLastWordBoundaryContext(backwardsIterator.characters(), wordBoundaryContextStart);
&gt; &gt; +            int contextLength = backwardsIterator.length() - wordBoundaryContextStart;
&gt; 
&gt; Is int really the right type here?

I deferred to startOfLastWordBoundary and SimplifiedBackwardsTextIterator::length().

&gt; 
&gt; &gt; WebCore/editing/TextIterator.cpp:2515
&gt; &gt; -    {
&gt; &gt; -        CharacterIterator findIterator(range, TextIteratorEntersTextControls);
&gt; &gt; -        matchLength = findPlainText(findIterator, target, forward, caseSensitive, matchStart);
&gt; &gt; -        if (!matchLength)
&gt; &gt; -            return collapsedToBoundary(range, forward);
&gt; &gt; -    }
&gt; &gt; +
&gt; &gt; +    CharacterIterator findIterator(range, TextIteratorEntersTextControls);
&gt; &gt; +    matchLength = findPlainText(findIterator, target, options, matchStart);
&gt; &gt; +    if (!matchLength)
&gt; &gt; +        return collapsedToBoundary(range, !(options &amp; Backwards));
&gt; 
&gt; You dropped the braces that make the character iterator fall out of scope early. Why? Was that not a helpful optimization?

I thought I was cleaning up and didn’t realize the performance implication. Reinstated the braces.

&gt; 
&gt; Another way to accomplish the same thing is to use a temporary for the character iterator instead of a named local.
&gt; 
&gt; &gt; WebCore/editing/TextIterator.h:62
&gt; &gt;  String plainText(const Range*, TextIteratorBehavior defaultBehavior = TextIteratorDefaultBehavior);
&gt; &gt;  UChar* plainTextToMallocAllocatedBuffer(const Range*, unsigned&amp; bufferLength, bool isDisplayString, TextIteratorBehavior defaultBehavior = TextIteratorDefaultBehavior);
&gt; 
&gt; We should remove that misleading argument name.

Done.

&gt; 
&gt; &gt; WebCore/editing/TextIterator.h:64
&gt; &gt; +PassRefPtr&lt;Range&gt; findPlainText(const Range*, const String&amp;, FindOptions);
&gt; &gt;  PassRefPtr&lt;Range&gt; findPlainText(const Range*, const String&amp;, bool forward, bool caseSensitive);
&gt; 
&gt; As above, should we consider deprecating and then removing the bool version?

Yes. Added comments to that effect.

&gt; 
&gt; &gt; WebCore/page/Page.h:205
&gt; &gt; +        bool findString(const String&amp;, FindOptions);
&gt; &gt;          bool findString(const String&amp;, TextCaseSensitivity, FindDirection, bool shouldWrap);
&gt; &gt; +        unsigned int markAllMatchesForText(const String&amp;, FindOptions, bool shouldHighlight, unsigned);
&gt; &gt;          unsigned int markAllMatchesForText(const String&amp;, TextCaseSensitivity, bool shouldHighlight, unsigned);
&gt; 
&gt; Should we deprecate the TextCaseSensitivity versions?

Ditto.

&gt; 
&gt; &gt; LayoutTests/editing/text-iterator/findString.html:12
&gt; &gt; +        log(&quot;Searching for \u2018&quot; + target + &quot;\u2019 &quot; + (text.length &lt;= 64 ? &quot;in \u2018&quot; + text + &quot;\u2019 &quot; : &quot;in long string &quot;) + &quot;with options [&quot; + options.join(&quot;, &quot;) + &quot;]:&quot;);
&gt; 
&gt; Why not use straight quotes instead of curly?

Tough question.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314524</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-11-29 11:09:54 -0800</bug_when>
    <thetext>Attachment 75040 did not build on qt:
Build output: http://queues.webkit.org/results/6393100</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314531</commentid>
    <comment_count>8</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-11-29 11:22:10 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Attachment 75040 [details] did not build on qt:
&gt; Build output: http://queues.webkit.org/results/6393100

Any idea why this is happening, given the change to WebKit2’s FindOptions.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314560</commentid>
    <comment_count>9</comment_count>
      <attachid>75040</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-29 12:32:16 -0800</bug_when>
    <thetext>Comment on attachment 75040
WebCore (ICU code path only) implementation, WebKit/mac WebKit2 API, DumpRenderTree/mac test support and tests

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

review- just because of those buffer under/overrun questions. I’m sure you also will get the Qt build working. I fear that your guess that it’s the FindOptions.h header may well be correct.

&gt; WebCore/editing/TextIterator.cpp:2026
&gt; +inline bool SearchBuffer::isWordStartMatch(size_t start, size_t length) const

This function might read more clearly decomposed a bit more. The names of the smaller functions could help make it clearer why it’s correct to do both of these checks (actual word starts are always word starts regardless of the medial capital flag).

It’s OK as is, though.

&gt; WebCore/editing/TextIterator.cpp:2034
&gt; +        U16_GET(m_buffer.data(), 0, offset, size, firstCharacter);

I assume that offset is guaranteed to be &lt; size, so there is no problem here, but I did have to look twice at this to be sure.

&gt; WebCore/editing/TextIterator.cpp:2036
&gt; +        U16_PREV(m_buffer.data(), 0, offset, previousCharacter);

If offset is 0, this will read past the beginning of the buffer, which is not good.

&gt; WebCore/editing/TextIterator.cpp:2051
&gt; +            U16_FWD_1(m_buffer.data(), offset, size);
&gt; +            U16_GET(m_buffer.data(), 0, offset, size, nextCharacter);

What guarantees this won’t read off the end of the buffer?

&gt; WebCore/editing/TextIterator.cpp:2109
&gt; +            int wordBoundaryContextStart = matchStart;
&gt; +            U16_BACK_1(m_buffer.data(), 0, wordBoundaryContextStart);

Is matchStart guaranteed to be &gt; 0? If not, then U16_BACK_1 will read off the start of the buffer.

&gt; WebCore/editing/TextIterator.cpp:2124
&gt; +    if (isBadMatch(m_buffer.data() + matchStart, matchedLength)
&gt; +        || m_options &amp; AtWordStarts &amp;&amp; !isWordStartMatch(matchStart, matchedLength)) {

I would like this better all on one line.

&gt; WebCore/editing/TextIterator.cpp:2478
&gt; +    if (options &amp; AtWordStarts) {
&gt; +        RefPtr&lt;Range&gt; startRange = it.range();
&gt; +        RefPtr&lt;Range&gt; beforeStartRange = startRange-&gt;ownerDocument()-&gt;createRange();
&gt; +        ExceptionCode ec = 0;
&gt; +        beforeStartRange-&gt;setEnd(startRange-&gt;startContainer(), startRange-&gt;startOffset(), ec);
&gt; +        SimplifiedBackwardsTextIterator backwardsIterator(beforeStartRange.get(), TextIteratorDefaultBehavior);
&gt; +        while (!backwardsIterator.atEnd()) {
&gt; +            int wordBoundaryContextStart = backwardsIterator.length();
&gt; +            U16_BACK_1(backwardsIterator.characters(), 0, wordBoundaryContextStart);
&gt; +            wordBoundaryContextStart = startOfLastWordBoundaryContext(backwardsIterator.characters(), wordBoundaryContextStart);
&gt; +            int contextLength = backwardsIterator.length() - wordBoundaryContextStart;
&gt; +            if (!buffer.prependContext(backwardsIterator.characters() + wordBoundaryContextStart, contextLength) || wordBoundaryContextStart)
&gt; +                break;
&gt; +            backwardsIterator.advance();
&gt; +        }
&gt; +    }

You could consider putting the entire body of this if statement into a separate function. It needs the iterator, the search buffer, and the options. Giving it a name might help document what it does.

You could use a for loop, although it’s always annoying to do that when the initialization part of the for is long. It would be nice to have the call to the advance function explicitly part of the loop structure.

The U16_BACK_1 call may need a check to see if wordBoundaryContextStart is 0.

&gt; WebCore/page/Page.cpp:522
&gt; +        if (frame-&gt;editor()-&gt;findString(target, options &amp; ~WrapAround | StartInSelection)) {

Some newer versions of gcc may warn about the mix of &amp; and | without parentheses, correctly relying on operator precedence but confusing to some programmers. I suspect that could happening in the Qt build, or it’s possible it only applies to the &amp;&amp; and || operators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314669</commentid>
    <comment_count>10</comment_count>
      <attachid>75040</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2010-11-29 14:49:43 -0800</bug_when>
    <thetext>Comment on attachment 75040
WebCore (ICU code path only) implementation, WebKit/mac WebKit2 API, DumpRenderTree/mac test support and tests

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

Previously Qt had issues with clashing file names in WebCore and WebKit2, the build problem here seems to be caused by this, too. 
After renaming the WebCore/editing/FindOptions.h file to FindOptionFlag.h the Qt build had the following issues:

&gt; WebCore/ChangeLog:49
&gt; +        * platform/text/TextBoundaries.cpp:

This file is not listed in WebCore.pro and Qt seems to lack the isAlphanumeric function, too, which is used in this source.
Qt does not use ICU, AFAIK.

&gt; WebCore/ChangeLog:52
&gt; +        * platform/text/TextBoundaries.h:

Ditto.

&gt; WebCore/editing/TextIterator.cpp:1941
&gt; +size_t SearchBuffer::prependContext(const UChar* characters, size_t length)

This is inside a long #if USE(ICU_UNICODE) &amp;&amp; !UCONFIG_NO_COLLATION guard which seems to be false on Qt thus the linking fails with undefined reference.

&gt; WebCore/editing/TextIterator.cpp:2142
&gt; -inline SearchBuffer::SearchBuffer(const String&amp; target, bool isCaseSensitive)
&gt; +inline SearchBuffer::SearchBuffer(const String&amp; target, FindOptions options)
&gt;      : m_target(isCaseSensitive ? target : target.foldCase())

A stray isCaseSensitive parameter was left here.

&gt;&gt; WebCore/page/Page.cpp:522
&gt;&gt; +        if (frame-&gt;editor()-&gt;findString(target, options &amp; ~WrapAround | StartInSelection)) {
&gt; 
&gt; Some newer versions of gcc may warn about the mix of &amp; and | without parentheses, correctly relying on operator precedence but confusing to some programmers. I suspect that could happening in the Qt build, or it’s possible it only applies to the &amp;&amp; and || operators.

The rule also applies to bitwise operators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314718</commentid>
    <comment_count>11</comment_count>
      <attachid>75080</attachid>
    <who name="">mitz</who>
    <bug_when>2010-11-29 16:22:34 -0800</bug_when>
    <thetext>Created attachment 75080
https://bugs.webkit.org/attachment.cgi?bugid=50038&amp;action=enter

Addressed Darin’s comments and made some changes needed to make this build on non-ICU platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314768</commentid>
    <comment_count>12</comment_count>
      <attachid>75080</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-29 17:36:18 -0800</bug_when>
    <thetext>Comment on attachment 75080
https://bugs.webkit.org/attachment.cgi?bugid=50038&amp;action=enter

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

&gt; WebCore/page/Page.h:205
&gt; +        unsigned int markAllMatchesForText(const String&amp;, FindOptions, bool shouldHighlight, unsigned);

Instead of “unsigned int” please do “unsigned”.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314865</commentid>
    <comment_count>13</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-11-29 22:41:12 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/72887&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314875</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-29 23:28:50 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/72887 might have broken Qt Windows 32-bit Debug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74790</attachid>
            <date>2010-11-24 13:55:12 -0800</date>
            <delta_ts>2010-11-29 10:46:14 -0800</delta_ts>
            <desc>WebCore (ICU code path only) implementation, WebKit/mac WebKit2 API, DumpRenderTree/mac test support and tests</desc>
            <filename>token-find_r6.diff</filename>
            <type>text/plain</type>
            <size>106749</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjY5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMTAtMTEtMjQgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJD
b3JlIHBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzg2NTAwODU+IGFkZGluZyB3b3JkLXByZWZpeCBz
ZWFyY2ggb3B0aW9ucyB0byB0aGUgdGV4dCBzZWFyY2ggQVBJLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzgKKworICAgICAgICBUZXN0OiBlZGl0
aW5nL3RleHQtaXRlcmF0b3IvZmluZFN0cmluZy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmV4
cC5pbjogRXhwb3J0IHRoZSBuZXcgbWV0aG9kcyB0aGF0IHRha2UgRmluZE9wdGlvbnMuCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBGaW5kT3B0aW9u
cy5oIGFuZCBUZXh0Qm91bmRhcmllcy5jcHAuCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaXJzdFZpc2libGVSYW5nZSk6IENoYW5nZWQg
dG8gdXNlIEZpbmRPcHRpb25zLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpsYXN0VmlzaWJs
ZVJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om5leHRWaXNpYmxlUmFu
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZmluZFN0cmluZyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KTogRGl0dG8u
CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDogQWRkZWQgYSB2ZXJzaW9uIG9mIGZpbmRTdHJp
bmcoKSB0aGF0IHRha2VzIEZpbmRPcHRpb25zLiBDaGFuZ2VkCisgICAgICAgIGNvdW50TWF0Y2hl
c0ZvclRleHQoKSB0byB0YWtlIEZpbmRPcHRpb25zLiBNYWRlIG5leHRWaXNpYmxlUmFuZ2UoKSBw
cml2YXRlIGFuZCBjaGFuZ2VkIGl0CisgICAgICAgIGFuZCBmaXJzdFZpc2libGVSYW5nZSgpIGFu
ZCBsYXN0VmlzaWJsZVJhbmdlKCkgdG8gdGFrZSBGaW5kT3B0aW9ucy4KKyAgICAgICAgKiBlZGl0
aW5nL0ZpbmRPcHRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcDoKKyAgICAgICAgQXVnbWVudGVkIFNlYXJjaEJ1ZmZlciB3aXRoIGFuIG9wdGlvbmFsIHBy
ZWZpeCwgd2hpY2ggaXMgbm90IHNlYXJjaGVkLCBidXQgcHJvdmlkZXMgY29udGV4dAorICAgICAg
ICBmb3IgZGV0ZXJtaW5pbmcgd29yZCBib3VuZGFyaWVzLgorICAgICAgICAoV2ViQ29yZTo6aXNT
ZXBhcmF0b3IpOiBBZGRlZC4gSWRlbnRpZmllcyBhIGNsYXNzIG9mIGNoYXJhY3RlcnMgdXNlZCB0
byBkZXRlcm1pbmUgd2hlcmUKKyAgICAgICAg4oCcd29yZHPigJ0gYXJlIGVtYmVkZGVkIGluIGEg
d29yZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6U2VhcmNoQnVmZmVyKTogQ2hh
bmdlZCB0byB0YWtlIEZpbmRPcHRpb25zLiBBZGRlZCBpbml0aWFsaXphdGlvbiBvZgorICAgICAg
ICBtX29wdGlvbnMgYW5kIG1fcHJlZml4TGVuZ3RoLgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNo
QnVmZmVyOjphcHBlbmQpOiBBZGp1c3QgbV9wcmVmaXhMZW5ndGggYXMgcGFydCBvZiB0aGUgcHJl
Zml4IGdldHMgcHVzaGVkIG91dAorICAgICAgICBvZiB0aGUgYnVmZmVyLgorICAgICAgICAoV2Vi
Q29yZTo6U2VhcmNoQnVmZmVyOjpwcmVwZW5kQ29udGV4dCk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2VhcmNoQnVmZmVyOjppc1dvcmRTdGFydE1hdGNoKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTZWFyY2hCdWZmZXI6OnNlYXJjaCk6IENoYW5nZWQgdG8gYWNjb3VudCBmb3IgdGhl
IGNvbnRleHQgcHJlZml4LiBXaGVuIHNlYXJjaGluZworICAgICAgICBvbmx5IGZvciB3b3JkIHBy
ZWZpeCBtYXRjaGVzLCBtYWludGFpbnMgZW5vdWdoIGNvbnRleHQgYmVmb3JlIGEgdGVudGF0aXZl
IG1hdGNoIHdoZW4gbW92aW5nCisgICAgICAgIGl0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1
ZmZlci4gUmVqZWN0IG1hdGNoZXMgdGhhdCBhcmUgbm90IGF0IHdvcmQgc3RhcnRzIGlmIHJlcXVl
c3RlZC4KKyAgICAgICAgQWRqdXN0IG1fcHJlZml4TGVuZ3RoIHdoZW4gcHVzaGluZyBjaGFyYWN0
ZXJzIG91dCBvZiB0aGUgYnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6ZmluZFBsYWluVGV4dCk6
IENoYW5nZWQgdG8gd29yayB3aXRoIEZpbmRPcHRpb25zLiBQcmVwZW5kIGNvbnRleHQgZnJvbSBi
ZWZvcmUgdGhlCisgICAgICAgIHN0YXJ0aW5nIHBvaW50IGFzIG5lZWRlZCBmb3Igd29yZCBib3Vu
ZGFyeSBzZWFyY2guCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuaDogQWRkZWQgYSB2
ZXJzaW9uIG9mIGZpbmRQbGFpblRleHQoKSB0aGF0IHRha2VzIEZpbmRPcHRpb25zLgorICAgICAg
ICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6IE1vdmVkIHtlbmQsc3RhcnR9T2Z7Rmlyc3Qs
TGFzdH1Xb3JkQm91bmRhcnkgdG8gVGV4dEJvdW5kYXJpZXMuY3BwLgorICAgICAgICAqIHBhZ2Uv
UGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpmaW5kU3RyaW5nKTogQ2hhbmdlZCB0
byB3b3JrIHdpdGggRmluZE9wdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjptYXJrQWxs
TWF0Y2hlc0ZvclRleHQpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL1BhZ2UuaDogQWRkZWQgRmlu
ZE9wdGlvbnMtYmFzZWQgZmluZFN0cmluZygpIGFuZCBtYXJrQWxsTWF0Y2hlc0ZvclRleHQoKS4K
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmVuZE9mRmlyc3RXb3JkQm91bmRhcnlDb250ZXh0KTogTW92ZWQgaGVyZSBmcm9tIHZp
c2libGVfdW5pdHMuY3BwLgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPZkxhc3RXb3JkQm91bmRh
cnlDb250ZXh0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmll
cy5oOgorCiAyMDEwLTExLTI0ICBOaWNvbGFzIER1ZnJlc25lICA8bmljb2xhcy5kdWZyZXNuZUBj
b2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuZXhwLmluCShyZXZpc2lvbiA3MjU0NikKKysrIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTU5OSw3ICs1OTksNyBAQCBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVy
UmVjdEVQYgogX19aTjdXZWJDb3JlNE5vZGUxN3N0b3BJZ25vcmluZ0xlYWtzRXYKIF9fWk43V2Vi
Q29yZTROb2RlMThzdGFydElnbm9yaW5nTGVha3NFdgogX19aTjdXZWJDb3JlNE5vZGUxOXNldE5l
ZWRzU3R5bGVSZWNhbGNFTlNfMTVTdHlsZUNoYW5nZVR5cGVFCi1fX1pON1dlYkNvcmU0UGFnZTEw
ZmluZFN0cmluZ0VSS04zV1RGNlN0cmluZ0VOUzFfMTlUZXh0Q2FzZVNlbnNpdGl2aXR5RU5TXzEz
RmluZERpcmVjdGlvbkViCitfX1pON1dlYkNvcmU0UGFnZTEwZmluZFN0cmluZ0VSS04zV1RGNlN0
cmluZ0VqCiBfX1pON1dlYkNvcmU0UGFnZTExUGFnZUNsaWVudHNDMUV2CiBfX1pON1dlYkNvcmU0
UGFnZTExUGFnZUNsaWVudHNEMUV2CiBfX1pON1dlYkNvcmU0UGFnZTEyc2V0R3JvdXBOYW1lRVJL
TjNXVEY2U3RyaW5nRQpAQCAtNjE0LDcgKzYxNCw3IEBAIF9fWk43V2ViQ29yZTRQYWdlMTd3aWxs
TW92ZU9mZnNjcmVlbkV2CiBfX1pON1dlYkNvcmU0UGFnZTE4cmVtb3ZlU2NoZWR1bGVQYWlyRU4z
V1RGMTBQYXNzUmVmUHRySU5TXzEyU2NoZWR1bGVQYWlyRUVFCiBfX1pON1dlYkNvcmU0UGFnZTE5
dmlzaXRlZFN0YXRlQ2hhbmdlZEVQTlNfOVBhZ2VHcm91cEV5CiBfX1pON1dlYkNvcmU0UGFnZTIw
dW5tYXJrQWxsVGV4dE1hdGNoZXNFdgotX19aTjdXZWJDb3JlNFBhZ2UyMW1hcmtBbGxNYXRjaGVz
Rm9yVGV4dEVSS04zV1RGNlN0cmluZ0VOUzFfMTlUZXh0Q2FzZVNlbnNpdGl2aXR5RWJqCitfX1pO
N1dlYkNvcmU0UGFnZTIxbWFya0FsbE1hdGNoZXNGb3JUZXh0RVJLTjNXVEY2U3RyaW5nRWpiagog
X19aTjdXZWJDb3JlNFBhZ2UyMmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWRFUE5TXzlQYWdlR3JvdXBF
CiBfX1pON1dlYkNvcmU0UGFnZTIzY2xlYXJVbmRvUmVkb09wZXJhdGlvbnNFdgogX19aTjdXZWJD
b3JlNFBhZ2UyN3NldEphdmFTY3JpcHRVUkxzQXJlQWxsb3dlZEViCkBAIC02NjEsNyArNjYxLDcg
QEAgX19aTjdXZWJDb3JlNkN1cnNvcjhmcm9tVHlwZUVOUzBfNFR5cGVFCiBfX1pON1dlYkNvcmU2
Q3Vyc29yRDFFdgogX19aTjdXZWJDb3JlNkN1cnNvcmFTRVJLUzBfCiBfX1pON1dlYkNvcmU2RWRp
dG9yMTBhcHBseVN0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9u
RQotX19aTjdXZWJDb3JlNkVkaXRvcjEwZmluZFN0cmluZ0VSS04zV1RGNlN0cmluZ0ViYmJiCitf
X1pON1dlYkNvcmU2RWRpdG9yMTBmaW5kU3RyaW5nRVJLTjNXVEY2U3RyaW5nRWoKIF9fWk43V2Vi
Q29yZTZFZGl0b3IxMGluc2VydFRleHRFUktOM1dURjZTdHJpbmdFUE5TXzVFdmVudEUKIF9fWk43
V2ViQ29yZTZFZGl0b3IxM2NhbkRIVE1MUGFzdGVFdgogX19aTjdXZWJDb3JlNkVkaXRvcjEzcGVy
Zm9ybURlbGV0ZUV2CkBAIC02NzMsNyArNjczLDcgQEAgX19aTjdXZWJDb3JlNkVkaXRvcjE2cGFz
dGVBc1BsYWluVGV4dEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMTdpbnNlcnRPcmRlcmVkTGlzdEV2
CiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJtQ29tcG9zaXRpb25FUktOM1dURjZTdHJpbmdF
CiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJtQ29tcG9zaXRpb25FdgotX19aTjdXZWJDb3Jl
NkVkaXRvcjE5Y291bnRNYXRjaGVzRm9yVGV4dEVSS04zV1RGNlN0cmluZ0ViamIKK19fWk43V2Vi
Q29yZTZFZGl0b3IxOWNvdW50TWF0Y2hlc0ZvclRleHRFUktOM1dURjZTdHJpbmdFampiCiBfX1pO
N1dlYkNvcmU2RWRpdG9yMTlkZWxldGVXaXRoRGlyZWN0aW9uRU5TXzE5U2VsZWN0aW9uQ29udHJv
bGxlcjEwRURpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUViYgogX19aTjdXZWJDb3JlNkVk
aXRvcjE5aW5zZXJ0VW5vcmRlcmVkTGlzdEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjFhcHBseVN0
eWxlVG9TZWxlY3Rpb25FUE5TXzE5Q1NTU3R5bGVEZWNsYXJhdGlvbkVOU18xMEVkaXRBY3Rpb25F
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNzI1NDYpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtODY0LDYgKzg2NCw4IEBACiAJCTM3MUY1M0U5MEQyNzA0RjkwMEVD
RTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRjUzRTcwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNv
ZGVSYW5nZVZhbHVlLmggKi87IH07CiAJCTM3MUY1M0VBMEQyNzA0RjkwMEVDRTBENSAvKiBDU1NV
bmljb2RlUmFuZ2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzFGNTNFODBEMjcwNEY5MDBFQ0UwRDUgLyogQ1NTVW5pY29kZVJhbmdlVmFs
dWUuY3BwICovOyB9OwogCQkzNzIwMjE5OTEwNjIxM0M2MDBGMjVDNEIgLyogRm9udFNtb290aGlu
Z01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3
MjAyMTk4MTA2MjEzQzYwMEYyNUM0QiAvKiBGb250U21vb3RoaW5nTW9kZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTM3MkMwMEM0MTI5NjExRjEw
MDVDOTU3NSAvKiBUZXh0Qm91bmRhcmllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzNzJDMDBDMzEyOTYxMUYxMDA1Qzk1NzUgLyogVGV4dEJvdW5k
YXJpZXMuY3BwICovOyB9OworCQkzNzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MkMw
MEQ4MTI5NjE5RjgwMDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3NDQ1NzBGMERCMDVGQTUwMEFFMDk5MiAv
KiBTVkdHbHlwaE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzc0NDU3MEUwREIwNUZBNTAwQUUwOTkyIC8qIFNWR0dseXBoTWFwLmggKi87IH07CiAJ
CTM3NUNEMjMyMTE5RDQzQzgwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1Q0QyMzExMTlENDNDODAwQTJBODU5
IC8qIEh5cGhlbmF0aW9uLmggKi87IH07CiAJCTM3NUNEMjNCMTE5RDQ0RUEwMEEyQTg1OSAvKiBI
eXBoZW5hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3NUNEMjM5MTE5RDQ0RUEwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbk1hYy5tbSAqLzsg
fTsKQEAgLTY5MzQsNiArNjkzNiw4IEBACiAJCTM3MUY1M0U3MEQyNzA0RjkwMEVDRTBENSAvKiBD
U1NVbmljb2RlUmFuZ2VWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
U1NVbmljb2RlUmFuZ2VWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFG
NTNFODBEMjcwNEY5MDBFQ0UwRDUgLyogQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzIwMjE5ODEwNjIxM0M2MDBGMjVDNEIgLyog
Rm9udFNtb290aGluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9u
dFNtb290aGluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzcyQzAwQzMx
Mjk2MTFGMTAwNUM5NTc1IC8qIFRleHRCb3VuZGFyaWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMzcyQzAwRDgxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRPcHRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTM3NDQ1NzBFMERCMDVGQTUwMEFFMDk5MiAvKiBTVkdHbHlwaE1h
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdHbHlwaE1hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzVDRDIzMTExOUQ0M0M4MDBBMkE4NTkgLyogSHlw
aGVuYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSHlwaGVuYXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc1Q0QyMzkxMTlENDRFQTAwQTJBODU5
IC8qIEh5cGhlbmF0aW9uTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gSHlwaGVuYXRpb25NYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NDUxOSw2ICsxNDUyMyw3IEBACiAJCQkJOTNBMzhCNEEwRDBFNTgwODAwNjg3MkMyIC8qIEVkaXRv
ckNvbW1hbmQuY3BwICovLAogCQkJCTRCQUU5NUIwMEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0b3JE
ZWxldGVBY3Rpb24uaCAqLywKIAkJCQk5M0ZEQUZDOTBCMTEzMDc0MDBFMjc0NkYgLyogRWRpdG9y
SW5zZXJ0QWN0aW9uLmggKi8sCisJCQkJMzcyQzAwRDgxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRP
cHRpb25zLmggKi8sCiAJCQkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2Nr
Q29tbWFuZC5jcHAgKi8sCiAJCQkJRDA1Q0VEMjgwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJs
b2NrQ29tbWFuZC5oICovLAogCQkJCTkzMzA5RDk4MDk5RTY0OTEwMDU2RTU4MSAvKiBodG1sZWRp
dGluZy5jcHAgKi8sCkBAIC0xNjc0NSw2ICsxNjc1MCw3IEBACiAJCQkJQjJDM0Q5RkYwRDAwNkMx
RDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oICovLAogCQkJCUIyQzNEQTAwMEQwMDZDMUQw
MEVGNkYyNiAvKiBTdHJpbmcuY3BwICovLAogCQkJCTk3QzA3ODRGMTE2NUQ1QkUwMDNBMzJFRiAv
KiBTdWZmaXhUcmVlLmggKi8sCisJCQkJMzcyQzAwQzMxMjk2MTFGMTAwNUM5NTc1IC8qIFRleHRC
b3VuZGFyaWVzLmNwcCAqLywKIAkJCQlCMkMzREEwNDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJv
dW5kYXJpZXMuaCAqLywKIAkJCQlCMkMzREEwNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFr
SXRlcmF0b3IuaCAqLywKIAkJCQlCMkMzREEwNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFr
SXRlcmF0b3JJQ1UuY3BwICovLApAQCAtMTk1NjksNiArMTk1NzUsNyBAQAogCQkJCUJDNUVCNjlG
MEU4MURBRUIwMEIyNTk2NSAvKiBGaWxsTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0NUU3
MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4Qzky
NTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTM3MkMwMEQ5MTI5NjE5RjgwMDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThDRkYwNEYwQTE1NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg5ODc4NTY2MTIyQ0EwNjQwMDNBQUJEQSAvKiBGbGFncy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDlFRUNERTYxMDUwM0MyNDAwMDk5RkFCIC8qIEZsb2F0MzJBcnJheS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yMzY1MSw2ICsyMzY1OCw3IEBACiAJCQkJRjU1QjNERDUxMjUx
RjEyRDAwM0VGMjY5IC8qIFRlbGVwaG9uZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0OTg3NzBFRTEyNDJDNTM1MDAyMjI2QkEgLyogVGV4U2hhZGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTY1NTBCNkE1MDk5REYwMjcwMDkwRDc4MSAvKiBUZXh0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTM3MkMwMEM0MTI5NjExRjEwMDVDOTU3NSAvKiBUZXh0Qm91bmRhcmllcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMkFGRkM5NzBEMDBBNURGMDAzMDA3NEQgLyogVGV4dEJvdW5kYXJp
ZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREEzNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dEJyZWFrSXRlcmF0b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBRkZDOTgwRDAwQTVE
RjAwMzAwNzREIC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0gaW4gU291cmNl
cyAqLywKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA3MjU0NikKKysrIFdlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODQ3LDM5ICsyODQ3LDM5IEBAIGJv
b2wgRWRpdG9yOjppbnNpZGVWaXNpYmxlQXJlYShSYW5nZSogcmEKICAgICByZXR1cm4gcmVjdElu
RnJhbWVDb29yZHMuY29udGFpbnMocmVzdWx0UmVjdCk7CiB9CiAKLVBhc3NSZWZQdHI8UmFuZ2U+
IEVkaXRvcjo6Zmlyc3RWaXNpYmxlUmFuZ2UoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGJvb2wgY2Fz
ZUZsYWcpCitQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmZpcnN0VmlzaWJsZVJhbmdlKGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewogICAgIFJlZlB0cjxSYW5n
ZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKG1fZnJhbWUtPmRvY3VtZW50KCkpKTsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5n
ZXQoKSwgdGFyZ2V0LCB0cnVlLCBjYXNlRmxhZyk7CisgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRS
YW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgb3B0aW9ucyAm
IH5CYWNrd2FyZHMpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCiAgICAgd2hpbGUgKCFp
bnNpZGVWaXNpYmxlQXJlYShyZXN1bHRSYW5nZS5nZXQoKSkpIHsKICAgICAgICAgc2VhcmNoUmFu
Z2UtPnNldFN0YXJ0QWZ0ZXIocmVzdWx0UmFuZ2UtPmVuZENvbnRhaW5lcigpLCBlYyk7CiAgICAg
ICAgIGlmIChzZWFyY2hSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzZWFyY2hSYW5nZS0+ZW5k
Q29udGFpbmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5k
b2N1bWVudCgpKTsKLSAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNlYXJjaFJh
bmdlLmdldCgpLCB0YXJnZXQsIHRydWUsIGNhc2VGbGFnKTsKKyAgICAgICAgcmVzdWx0UmFuZ2Ug
PSBmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIG9wdGlvbnMgJiB+QmFj
a3dhcmRzKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdFJhbmdlOwogfQogCi1QYXNz
UmVmUHRyPFJhbmdlPiBFZGl0b3I6Omxhc3RWaXNpYmxlUmFuZ2UoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIGJvb2wgY2FzZUZsYWcpCitQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6Omxhc3RWaXNpYmxl
UmFuZ2UoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMpCiB7CiAgICAg
UmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1l
bnQoKSkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNl
YXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIGZhbHNlLCBjYXNlRmxhZyk7CisgICAgUmVmUHRyPFJh
bmdlPiByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdl
dCwgb3B0aW9ucyB8IEJhY2t3YXJkcyk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKICAg
ICB3aGlsZSAoIWluc2lkZVZpc2libGVBcmVhKHJlc3VsdFJhbmdlLmdldCgpKSkgewogICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0RW5kQmVmb3JlKHJlc3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigp
LCBlYyk7CiAgICAgICAgIGlmIChzZWFyY2hSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzZWFy
Y2hSYW5nZS0+ZW5kQ29udGFpbmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0
ZShtX2ZyYW1lLT5kb2N1bWVudCgpKTsKLSAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5U
ZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIGZhbHNlLCBjYXNlRmxhZyk7CisgICAgICAg
IHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBv
cHRpb25zIHwgQmFja3dhcmRzKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdFJhbmdl
OwogfQogCi1QYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6Om5leHRWaXNpYmxlUmFuZ2UoUmFuZ2Uq
IGN1cnJlbnRSYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGJvb2wgZm9yd2FyZCwgYm9vbCBj
YXNlRmxhZywgYm9vbCB3cmFwRmxhZykKK1Bhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6bmV4dFZp
c2libGVSYW5nZShSYW5nZSogY3VycmVudFJhbmdlLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgRmlu
ZE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAobV9mcmFtZS0+ZXhjbHVkZUZyb21UZXh0U2Vh
cmNoKCkpCiAgICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCkp
OwpAQCAtMjg4Nyw4ICsyODg3LDggQEAgUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpuZXh0Vmlz
aWJsZVJhbgogICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBjdXJyZW50UmFuZ2U7CiAg
ICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9j
dW1lbnQoKSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIAotICAgIGZvciAoIDsg
IWluc2lkZVZpc2libGVBcmVhKHJlc3VsdFJhbmdlLmdldCgpKTsgcmVzdWx0UmFuZ2UgPSBmaW5k
UGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnKSkg
eworICAgIGJvb2wgZm9yd2FyZCA9ICEob3B0aW9ucyAmIEJhY2t3YXJkcyk7CisgICAgZm9yICgg
OyAhaW5zaWRlVmlzaWJsZUFyZWEocmVzdWx0UmFuZ2UuZ2V0KCkpOyByZXN1bHRSYW5nZSA9IGZp
bmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgb3B0aW9ucykpIHsKICAgICAg
ICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZWMpKSB7CiAgICAgICAgICAgICBpZiAoIXJl
c3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5pc0luU2hhZG93VHJlZSgpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjkyMCwxMyArMjkyMCwxMyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBF
ZGl0b3I6Om5leHRWaXNpYmxlUmFuCiAgICAgaWYgKGluc2lkZVZpc2libGVBcmVhKHJlc3VsdFJh
bmdlLmdldCgpKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdFJhbmdlOwogICAgIAotICAgIGlmICgh
d3JhcEZsYWcpCisgICAgaWYgKCEob3B0aW9ucyAmIFdyYXBBcm91bmQpKQogICAgICAgICByZXR1
cm4gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpKTsKIAotICAgIGlmIChmb3J3YXJk
KQotICAgICAgICByZXR1cm4gZmlyc3RWaXNpYmxlUmFuZ2UodGFyZ2V0LCBjYXNlRmxhZyk7Cisg
ICAgaWYgKG9wdGlvbnMgJiBCYWNrd2FyZHMpCisgICAgICAgIHJldHVybiBsYXN0VmlzaWJsZVJh
bmdlKHRhcmdldCwgb3B0aW9ucyk7CiAKLSAgICByZXR1cm4gbGFzdFZpc2libGVSYW5nZSh0YXJn
ZXQsIGNhc2VGbGFnKTsKKyAgICByZXR1cm4gZmlyc3RWaXNpYmxlUmFuZ2UodGFyZ2V0LCBvcHRp
b25zKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wg
Y2xlYXJUeXBpbmdTdHlsZSkKQEAgLTMxOTYsNiArMzE5NiwxMiBAQCBSZW5kZXJTdHlsZSogRWRp
dG9yOjpzdHlsZUZvclNlbGVjdGlvblN0CiAvLyBTZWFyY2hlcyBmcm9tIHRoZSBiZWdpbm5pbmcg
b2YgdGhlIGRvY3VtZW50IGlmIG5vdGhpbmcgaXMgc2VsZWN0ZWQuCiBib29sIEVkaXRvcjo6Zmlu
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFn
LCBib29sIHdyYXBGbGFnLCBib29sIHN0YXJ0SW5TZWxlY3Rpb24pCiB7CisgICAgRmluZE9wdGlv
bnMgb3B0aW9ucyA9IChmb3J3YXJkID8gMCA6IEJhY2t3YXJkcykgfCAoY2FzZUZsYWcgPyAwIDog
Q2FzZUluc2Vuc2l0aXZlKSB8ICh3cmFwRmxhZyA/IFdyYXBBcm91bmQgOiAwKSB8IChzdGFydElu
U2VsZWN0aW9uID8gU3RhcnRJblNlbGVjdGlvbiA6IDApOworICAgIHJldHVybiBmaW5kU3RyaW5n
KHRhcmdldCwgb3B0aW9ucyk7Cit9CisKK2Jvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQorewogICAgIGlmICh0YXJnZXQuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTMyMDcsNiArMzIxMyw4IEBAIGJv
b2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGEKICAgICBSZWZQdHI8UmFuZ2U+
IHNlYXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50cyhtX2ZyYW1lLT5kb2N1bWVudCgpKSk7CiAgICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCk7CiAKKyAgICBib29sIGZvcndhcmQgPSAhKG9wdGlvbnMgJiBCYWNrd2FyZHMpOworICAg
IGJvb2wgc3RhcnRJblNlbGVjdGlvbiA9IG9wdGlvbnMgJiBTdGFydEluU2VsZWN0aW9uOwogICAg
IGlmIChmb3J3YXJkKQogICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgc3RhcnRJ
blNlbGVjdGlvbiA/IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSA6IHNlbGVjdGlvbi52aXNpYmxl
RW5kKCkpOwogICAgIGVsc2UKQEAgLTMyMjEsNyArMzIyOSw3IEBAIGJvb2wgRWRpdG9yOjpmaW5k
U3RyaW5nKGNvbnN0IFN0cmluZyYgdGEKICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dChzaGFkb3dUcmVlUm9vdC5nZXQoKSwgMCwgZWMpOwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5n
ZT4gcmVzdWx0UmFuZ2UoZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBm
b3J3YXJkLCBjYXNlRmxhZykpOworICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UoZmluZFBs
YWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBvcHRpb25zKSk7CiAgICAgLy8gSWYg
d2Ugc3RhcnRlZCBpbiB0aGUgc2VsZWN0aW9uIGFuZCB0aGUgZm91bmQgcmFuZ2UgZXhhY3RseSBt
YXRjaGVzIHRoZSBleGlzdGluZyBzZWxlY3Rpb24sIGZpbmQgYWdhaW4uCiAgICAgLy8gQnVpbGQg
YSBzZWxlY3Rpb24gd2l0aCB0aGUgZm91bmQgcmFuZ2UgdG8gcmVtb3ZlIGNvbGxhcHNlZCB3aGl0
ZXNwYWNlLgogICAgIC8vIENvbXBhcmUgcmFuZ2VzIGluc3RlYWQgb2Ygc2VsZWN0aW9uIG9iamVj
dHMgdG8gaWdub3JlIHRoZSB3YXkgdGhhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gd2FzIG1hZGUu
CkBAIC0zMjQwLDcgKzMyNDgsNyBAQCBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJp
bmcmIHRhCiAgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHNoYWRvd1RyZWVS
b290LmdldCgpLCAwLCBlYyk7CiAgICAgICAgIH0KIAotICAgICAgICByZXN1bHRSYW5nZSA9IGZp
bmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcp
OworICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCks
IHRhcmdldCwgb3B0aW9ucyk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24g
PSAwOwpAQCAtMzI1MywyMCArMzI2MSwyMCBAQCBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25z
dCBTdHJpbmcmIHRhCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRF
bmRCZWZvcmUoc2hhZG93VHJlZVJvb3QtPnNoYWRvd1BhcmVudE5vZGUoKSwgZXhjZXB0aW9uKTsK
IAotICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCks
IHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcpOworICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQ
bGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgb3B0aW9ucyk7CiAgICAgfQogCiAg
ICAgaWYgKCFpbnNpZGVWaXNpYmxlQXJlYShyZXN1bHRSYW5nZS5nZXQoKSkpIHsKLSAgICAgICAg
cmVzdWx0UmFuZ2UgPSBuZXh0VmlzaWJsZVJhbmdlKHJlc3VsdFJhbmdlLmdldCgpLCB0YXJnZXQs
IGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxhZyk7CisgICAgICAgIHJlc3VsdFJhbmdlID0gbmV4
dFZpc2libGVSYW5nZShyZXN1bHRSYW5nZS5nZXQoKSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICAg
ICAgaWYgKCFyZXN1bHRSYW5nZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
ICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyBhbmQgd2UncmUgd3JhcHBpbmcsIHNl
YXJjaCBhZ2FpbiBpbiB0aGUgZW50aXJlIGRvY3VtZW50ICh0aGlzIHdpbGwKICAgICAvLyByZWR1
bmRhbnRseSByZS1zZWFyY2ggdGhlIGFyZWEgYWxyZWFkeSBzZWFyY2hlZCBpbiBzb21lIGNhc2Vz
KS4KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChleGNlcHRpb24pICYmIHdyYXBGbGFn
KSB7CisgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSAmJiBvcHRpb25z
ICYgV3JhcEFyb3VuZCkgewogICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyht
X2ZyYW1lLT5kb2N1bWVudCgpKTsKLSAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0
KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnKTsKKyAgICAgICAg
cmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIG9w
dGlvbnMpOwogICAgICAgICAvLyBXZSB1c2VkIHRvIHJldHVybiBmYWxzZSBoZXJlIGlmIHdlIGVu
ZGVkIHVwIHdpdGggdGhlIHNhbWUgcmFuZ2UgdGhhdCB3ZSBzdGFydGVkIHdpdGgKICAgICAgICAg
Ly8gKGUuZy4sIHRoZSBzZWxlY3Rpb24gd2FzIGFscmVhZHkgdGhlIG9ubHkgaW5zdGFuY2Ugb2Yg
dGhpcyB0ZXh0KS4gQnV0IHdlIGRlY2lkZWQgdGhhdAogICAgICAgICAvLyB0aGlzIHNob3VsZCBi
ZSBhIHN1Y2Nlc3MgY2FzZSBpbnN0ZWFkLCBzbyB3ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCBpbiB0
aGF0IGNhc2UuCkBAIC0zMjgwLDcgKzMyODgsNyBAQCBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhj
b25zdCBTdHJpbmcmIHRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXVuc2lnbmVkIEVkaXRvcjo6
Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBjYXNlRmxhZywg
dW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMpCit1bnNpZ25lZCBFZGl0b3I6OmNvdW50
TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMs
IHVuc2lnbmVkIGxpbWl0LCBib29sIG1hcmtNYXRjaGVzKQogewogICAgIGlmICh0YXJnZXQuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMyOTAsNyArMzI5OCw3IEBAIHVuc2lnbmVk
IEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb24KICAgICBFeGNlcHRpb25Db2RlIGV4Y2Vw
dGlvbiA9IDA7CiAgICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7CiAgICAgZG8gewotICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0
KCksIHRhcmdldCwgdHJ1ZSwgY2FzZUZsYWcpKTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByZXN1
bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIG9wdGlvbnMg
JiB+QmFja3dhcmRzKSk7CiAgICAgICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2Vw
dGlvbikpIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkt
PmlzSW5TaGFkb3dUcmVlKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBXZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5o
CShyZXZpc2lvbiA3MjU0NikKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvci5oIgogI2lu
Y2x1ZGUgIkVkaXRvckRlbGV0ZUFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlv
bi5oIgorI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJv
bGxlci5oIgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChfX09CSkNfXykKQEAgLTMw
OCw3ICszMDksNiBAQCBwdWJsaWM6CiAgICAgLy8gV2Ugc2hvdWxkIG1ha2UgdGhlc2UgZnVuY3Rp
b25zIHByaXZhdGUgd2hlbiB0aGVpciBjYWxsZXJzIGluIEZyYW1lIGFyZSBtb3ZlZCBvdmVyIGhl
cmUgdG8gRWRpdG9yCiAgICAgYm9vbCBpbnNpZGVWaXNpYmxlQXJlYShjb25zdCBJbnRQb2ludCYp
IGNvbnN0OwogICAgIGJvb2wgaW5zaWRlVmlzaWJsZUFyZWEoUmFuZ2UqKSBjb25zdDsKLSAgICBQ
YXNzUmVmUHRyPFJhbmdlPiBuZXh0VmlzaWJsZVJhbmdlKFJhbmdlKiwgY29uc3QgU3RyaW5nJiwg
Ym9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnKTsKIAogICAgIHZvaWQg
YWRkVG9LaWxsUmluZyhSYW5nZSosIGJvb2wgcHJlcGVuZCk7CiAKQEAgLTMyOSw2ICszMjksNyBA
QCBwdWJsaWM6CiAgICAgTm9kZSogZmluZEV2ZW50VGFyZ2V0RnJvbShjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0OwogCiAgICAgU3RyaW5nIHNlbGVjdGVkVGV4dCgpIGNv
bnN0OworICAgIGJvb2wgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiAg
ICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNl
RmxhZywgYm9vbCB3cmFwRmxhZywgYm9vbCBzdGFydEluU2VsZWN0aW9uKTsKIAogICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG1hcmsoKSBjb25zdDsgLy8gTWFyaywgdG8gYmUgdXNlZCBhcyBl
bWFjcyB1c2VzIGl0LgpAQCAtMzQ1LDcgKzM0Niw3IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlclN0
eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KE5vZGUqJiBub2RlVG9SZW1vdmUpIGNvbnN0Owog
Ci0gICAgdW5zaWduZWQgY291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCBib29sIGNh
c2VGbGFnLCB1bnNpZ25lZCBsaW1pdCwgYm9vbCBtYXJrTWF0Y2hlcyk7CisgICAgdW5zaWduZWQg
Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQg
bGltaXQsIGJvb2wgbWFya01hdGNoZXMpOwogICAgIGJvb2wgbWFya2VkVGV4dE1hdGNoZXNBcmVI
aWdobGlnaHRlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
bGlnaHRlZChib29sKTsKIApAQCAtMzk5LDggKzQwMCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
b25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiwgYm9vbCBwcmVzZXJ2ZVNlbGVjdGlvbik7
CiAgICAgdm9pZCBzZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZShib29sIGlnbm9y
ZSk7CiAKLSAgICBQYXNzUmVmUHRyPFJhbmdlPiBmaXJzdFZpc2libGVSYW5nZShjb25zdCBTdHJp
bmcmLCBib29sIGNhc2VGbGFnKTsKLSAgICBQYXNzUmVmUHRyPFJhbmdlPiBsYXN0VmlzaWJsZVJh
bmdlKGNvbnN0IFN0cmluZyYsIGJvb2wgY2FzZUZsYWcpOworICAgIFBhc3NSZWZQdHI8UmFuZ2U+
IGZpcnN0VmlzaWJsZVJhbmdlKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKKyAgICBQYXNz
UmVmUHRyPFJhbmdlPiBsYXN0VmlzaWJsZVJhbmdlKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25z
KTsKKyAgICBQYXNzUmVmUHRyPFJhbmdlPiBuZXh0VmlzaWJsZVJhbmdlKFJhbmdlKiwgY29uc3Qg
U3RyaW5nJiwgRmluZE9wdGlvbnMpOwogCiAgICAgdm9pZCBjaGFuZ2VTZWxlY3Rpb25BZnRlckNv
bW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBib29sIGNsb3NlVHlw
aW5nLCBib29sIGNsZWFyVHlwaW5nU3R5bGUpOwogICAgIHZvaWQgY29ycmVjdGlvblBhbmVsVGlt
ZXJGaXJlZChUaW1lcjxFZGl0b3I+Kik7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRmluZE9wdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRmluZE9wdGlvbnMuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvZWRpdGluZy9GaW5kT3B0aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGaW5kT3B0aW9uc19oCisjZGVmaW5l
IEZpbmRPcHRpb25zX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIEZpbmRPcHRpb25G
bGFnIHsKKyAgICBDYXNlSW5zZW5zaXRpdmUgPSAxIDw8IDAsCisgICAgQXRXb3JkU3RhcnRzID0g
MSA8PCAxLAorICAgIFRyZWF0TWVkaWFsQ2FwQXNXb3JkU3RhcnQgPSAxIDw8IDIsCisgICAgQmFj
a3dhcmRzID0gMSA8PCAzLAorICAgIFdyYXBBcm91bmQgPSAxIDw8IDQsCisgICAgU3RhcnRJblNl
bGVjdGlvbiA9IDEgPDwgNQorfTsKKwordHlwZWRlZiB1bnNpZ25lZCBGaW5kT3B0aW9uczsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRmluZE9wdGlvbnNfaApJbmRleDog
V2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDcyNTQ2KQorKysgV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDggQEAKICNp
bmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGV4dEZyYWdtZW50LmgiCisjaW5jbHVkZSAiVGV4dEJvdW5kYXJp
ZXMuaCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVQ
b3NpdGlvbi5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKIApAQCAtNTYsMTQgKzU4LDE3
IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAvLyBCdWZmZXIgdGhhdCBrbm93cyBob3cg
dG8gY29tcGFyZSB3aXRoIGEgc2VhcmNoIHRhcmdldC4KIC8vIEtlZXBzIGVub3VnaCBvZiB0aGUg
cHJldmlvdXMgdGV4dCB0byBiZSBhYmxlIHRvIHNlYXJjaCBpbiB0aGUgZnV0dXJlLCBidXQgbm8g
bW9yZS4KIC8vIE5vbi1icmVha2luZyBzcGFjZXMgYXJlIGFsd2F5cyBlcXVhbCB0byBub3JtYWwg
c3BhY2VzLgotLy8gQ2FzZSBmb2xkaW5nIGlzIGFsc28gZG9uZSBpZiA8aXNDYXNlU2Vuc2l0aXZl
PiBpcyBmYWxzZS4KKy8vIENhc2UgZm9sZGluZyBpcyBhbHNvIGRvbmUgaWYgdGhlIENhc2VJbnNl
bnNpdGl2ZSBvcHRpb24gaXMgc3BlY2lmaWVkLgorLy8gTWF0Y2hlcyBhcmUgZnVydGhlciBmaWx0
ZXJlZCBpZiB0aGUgQXRXb3JkU3RhcnRzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGFsdGhvdWdoIHNv
bWUKKy8vIG1hdGNoZXMgaW5zaWRlIGEgd29yZCBhcmUgcGVybWl0dGVkIGlmIFRyZWF0TWVkaWFs
Q2FwQXNXb3JkU3RhcnQgaXMgc3BlY2lmaWVkIGFzIHdlbGwuCiBjbGFzcyBTZWFyY2hCdWZmZXIg
OiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIFNlYXJjaEJ1ZmZlcihjb25zdCBT
dHJpbmcmIHRhcmdldCwgYm9vbCBpc0Nhc2VTZW5zaXRpdmUpOworICAgIFNlYXJjaEJ1ZmZlcihj
b25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMpOwogICAgIH5TZWFyY2hCdWZmZXIoKTsK
IAogICAgIC8vIFJldHVybnMgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYXBwZW5kZWQ7IGd1YXJhbnRl
ZWQgdG8gYmUgaW4gdGhlIHJhbmdlIFsxLCBsZW5ndGhdLgogICAgIHNpemVfdCBhcHBlbmQoY29u
c3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoKTsKKyAgICBzaXplX3QgcHJlcGVuZENvbnRleHQoY29u
c3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoKTsKICAgICB2b2lkIHJlYWNoZWRCcmVhaygpOwogCiAg
ICAgLy8gUmVzdWx0IGlzIHRoZSBzaXplIGluIGNoYXJhY3RlcnMgb2Ygd2hhdCB3YXMgZm91bmQu
CkBAIC03NSwxMCArODAsMTMgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGJvb2wgaXNCYWRN
YXRjaChjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgpIGNvbnN0OworICAgIGJvb2wgaXNXb3Jk
U3RhcnRNYXRjaChzaXplX3Qgc3RhcnQsIHNpemVfdCBsZW5ndGgpIGNvbnN0OwogCiAgICAgU3Ry
aW5nIG1fdGFyZ2V0OworICAgIEZpbmRPcHRpb25zIG1fb3B0aW9uczsKICAgICBWZWN0b3I8VUNo
YXI+IG1fYnVmZmVyOwogICAgIHNpemVfdCBtX292ZXJsYXA7CisgICAgc2l6ZV90IG1fcHJlZml4
TGVuZ3RoOwogICAgIGJvb2wgbV9hdEJyZWFrOwogCiAgICAgYm9vbCBtX3RhcmdldFJlcXVpcmVz
S2FuYVdvcmthcm91bmQ7CkBAIC05Miw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIHNpemVfdCBs
ZW5ndGgoKSBjb25zdDsKIAogICAgIFN0cmluZyBtX3RhcmdldDsKLSAgICBib29sIG1faXNDYXNl
U2Vuc2l0aXZlOworICAgIEZpbmRPcHRpb25zIG1fb3B0aW9uczsKIAogICAgIFZlY3RvcjxVQ2hh
cj4gbV9idWZmZXI7CiAgICAgVmVjdG9yPGJvb2w+IG1faXNDaGFyYWN0ZXJTdGFydEJ1ZmZlcjsK
QEAgLTE4MjgsOCArMTgzNiwzNyBAQCBzdGF0aWMgdm9pZCBub3JtYWxpemVDaGFyYWN0ZXJzKGNv
bnN0IFVDCiAgICAgQVNTRVJUKHN0YXR1cyA9PSBVX1NUUklOR19OT1RfVEVSTUlOQVRFRF9XQVJO
SU5HKTsKIH0KIAotaW5saW5lIFNlYXJjaEJ1ZmZlcjo6U2VhcmNoQnVmZmVyKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBib29sIGlzQ2FzZVNlbnNpdGl2ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Nl
cGFyYXRvcihVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBsYXRp
bjFTZXBhcmF0b3JUYWJsZVsyNTZdID0geworICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAx
LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAvLyBzcGFjZSAhICIgIyAkICUgJiAnICggKSAqICsg
LCAtIC4gLworICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAx
LCAxLCAxLCAvLyAgICAgICAgICAgICAgICAgICAgICAgICA6IDsgPCA9ID4gPworICAgICAgICAx
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAvLyAgIEAKKyAg
ICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgWyBcIF0gXiBfCisgICAgICAgIDEsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIC8vICAgYAorICAgICAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAwLCAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsgfCB9IH4KKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMCwgMSwgMSwgMSwgMSwgMSwKKyAgICAgICAgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwg
MSwgMCwgMSwgMSwgMSwgMSwgMSwKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMAorICAgIH07CisKKyAgICBpZiAoY2hhcmFjdGVyIDwgMjU2KQor
ICAgICAgICByZXR1cm4gbGF0aW4xU2VwYXJhdG9yVGFibGVbY2hhcmFjdGVyXTsKKworICAgIHJl
dHVybiBVX0dFVF9HQ19NQVNLKGNoYXJhY3RlcikgJiAoVV9HQ19TX01BU0sgfCBVX0dDX1BfTUFT
SyB8IFVfR0NfWl9NQVNLIHwgVV9HQ19DRl9NQVNLKTsKK30KKworaW5saW5lIFNlYXJjaEJ1ZmZl
cjo6U2VhcmNoQnVmZmVyKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25z
KQogICAgIDogbV90YXJnZXQodGFyZ2V0KQorICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCisgICAg
LCBtX3ByZWZpeExlbmd0aCgwKQogICAgICwgbV9hdEJyZWFrKHRydWUpCiAgICAgLCBtX3Rhcmdl
dFJlcXVpcmVzS2FuYVdvcmthcm91bmQoY29udGFpbnNLYW5hTGV0dGVycyhtX3RhcmdldCkpCiB7
CkBAIC0xODUyLDcgKzE4ODksNyBAQCBpbmxpbmUgU2VhcmNoQnVmZmVyOjpTZWFyY2hCdWZmZXIo
Y29uc3QgCiAgICAgVVN0cmluZ1NlYXJjaCogc2VhcmNoZXIgPSBXZWJDb3JlOjpzZWFyY2hlcigp
OwogICAgIFVDb2xsYXRvciogY29sbGF0b3IgPSB1c2VhcmNoX2dldENvbGxhdG9yKHNlYXJjaGVy
KTsKIAotICAgIFVDb2xsYXRpb25TdHJlbmd0aCBzdHJlbmd0aCA9IGlzQ2FzZVNlbnNpdGl2ZSA/
IFVDT0xfVEVSVElBUlkgOiBVQ09MX1BSSU1BUlk7CisgICAgVUNvbGxhdGlvblN0cmVuZ3RoIHN0
cmVuZ3RoID0gbV9vcHRpb25zICYgQ2FzZUluc2Vuc2l0aXZlID8gVUNPTF9QUklNQVJZIDogVUNP
TF9URVJUSUFSWTsKICAgICBpZiAodWNvbF9nZXRTdHJlbmd0aChjb2xsYXRvcikgIT0gc3RyZW5n
dGgpIHsKICAgICAgICAgdWNvbF9zZXRTdHJlbmd0aChjb2xsYXRvciwgc3RyZW5ndGgpOwogICAg
ICAgICB1c2VhcmNoX3Jlc2V0KHNlYXJjaGVyKTsKQEAgLTE4NzgsOSArMTkxNSwxMiBAQCBpbmxp
bmUgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6YXBwZW5kKGNvbnN0CiAKICAgICBpZiAobV9hdEJyZWFr
KSB7CiAgICAgICAgIG1fYnVmZmVyLnNocmluaygwKTsKKyAgICAgICAgbV9wcmVmaXhMZW5ndGgg
PSAwOwogICAgICAgICBtX2F0QnJlYWsgPSBmYWxzZTsKICAgICB9IGVsc2UgaWYgKG1fYnVmZmVy
LnNpemUoKSA9PSBtX2J1ZmZlci5jYXBhY2l0eSgpKSB7CiAgICAgICAgIG1lbWNweShtX2J1ZmZl
ci5kYXRhKCksIG1fYnVmZmVyLmRhdGEoKSArIG1fYnVmZmVyLnNpemUoKSAtIG1fb3ZlcmxhcCwg
bV9vdmVybGFwICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGlmIChtX3ByZWZpeExlbmd0aCkK
KyAgICAgICAgICAgIG1fcHJlZml4TGVuZ3RoIC09IG1pbihtX3ByZWZpeExlbmd0aCwgbV9idWZm
ZXIuc2l6ZSgpIC0gbV9vdmVybGFwKTsKICAgICAgICAgbV9idWZmZXIuc2hyaW5rKG1fb3Zlcmxh
cCk7CiAgICAgfQogCkBAIC0xODkyLDYgKzE5MzIsMjEgQEAgaW5saW5lIHNpemVfdCBTZWFyY2hC
dWZmZXI6OmFwcGVuZChjb25zdAogICAgIHJldHVybiB1c2FibGVMZW5ndGg7CiB9CiAKK3NpemVf
dCBTZWFyY2hCdWZmZXI6OnByZXBlbmRDb250ZXh0KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoKQoreworICAgIEFTU0VSVF9BUkcobGVuZ3RoLCBsZW5ndGgpOworICAgIGlm
ICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChtX3ByZWZpeExlbmd0
aCA9PSBtX2J1ZmZlci5zaXplKCkpOworCisgICAgbV9hdEJyZWFrID0gZmFsc2U7CisgICAgc2l6
ZV90IHVzYWJsZUxlbmd0aCA9IG1pbihtX2J1ZmZlci5jYXBhY2l0eSgpIC0gbV9wcmVmaXhMZW5n
dGgsIGxlbmd0aCk7CisgICAgbV9idWZmZXIucHJlcGVuZChjaGFyYWN0ZXJzICsgbGVuZ3RoIC0g
dXNhYmxlTGVuZ3RoLCB1c2FibGVMZW5ndGgpOworICAgIG1fcHJlZml4TGVuZ3RoICs9IHVzYWJs
ZUxlbmd0aDsKKyAgICByZXR1cm4gdXNhYmxlTGVuZ3RoOworfQorCiBpbmxpbmUgYm9vbCBTZWFy
Y2hCdWZmZXI6OmF0QnJlYWsoKSBjb25zdAogewogICAgIHJldHVybiBtX2F0QnJlYWs7CkBAIC0x
OTYyLDYgKzIwMTcsNTEgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc0JhZE1hdGNoKGNv
bgogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc1dvcmRTdGFydE1hdGNo
KHNpemVfdCBzdGFydCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9vcHRp
b25zICYgQXRXb3JkU3RhcnRzKTsKKworICAgIGlmIChtX29wdGlvbnMgJiBUcmVhdE1lZGlhbENh
cEFzV29yZFN0YXJ0KSB7CisgICAgICAgIGludCBzaXplID0gbV9idWZmZXIuc2l6ZSgpOworICAg
ICAgICBpbnQgb2Zmc2V0ID0gc3RhcnQ7CisgICAgICAgIFVDaGFyMzIgZmlyc3RDaGFyYWN0ZXI7
CisgICAgICAgIFUxNl9HRVQobV9idWZmZXIuZGF0YSgpLCAwLCBvZmZzZXQsIHNpemUsIGZpcnN0
Q2hhcmFjdGVyKTsKKyAgICAgICAgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlcjsKKyAgICAgICAg
VTE2X1BSRVYobV9idWZmZXIuZGF0YSgpLCAwLCBvZmZzZXQsIHByZXZpb3VzQ2hhcmFjdGVyKTsK
KworICAgICAgICBpZiAoaXNTZXBhcmF0b3IoZmlyc3RDaGFyYWN0ZXIpKSB7CisgICAgICAgICAg
ICAvLyBUaGUgc3RhcnQgb2YgYSBzZXBhcmF0b3IgcnVuIGlzIGEgd29yZCBzdGFydCAoIi5vcmci
IGluICJ3ZWJraXQub3JnIikuCisgICAgICAgICAgICBpZiAoIWlzU2VwYXJhdG9yKHByZXZpb3Vz
Q2hhcmFjdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
IGlmIChpc0FTQ0lJVXBwZXIoZmlyc3RDaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAvLyBUaGUg
c3RhcnQgb2YgYW4gdXBwZXJjYXNlIHJ1biBpcyBhIHdvcmQgc3RhcnQgKCJLaXQiIGluICJXZWJL
aXQiKS4KKyAgICAgICAgICAgIGlmICghaXNBU0NJSVVwcGVyKHByZXZpb3VzQ2hhcmFjdGVyKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFRoZSBsYXN0IGNo
YXJhY3RlciBvZiBhbiB1cHBlcmNhc2UgcnVuIGZvbGxvd2VkIGJ5IGEgbm9uLXNlcGFyYXRvciwg
bm9uLWRpZ2l0CisgICAgICAgICAgICAvLyBpcyBhIHdvcmQgc3RhcnQgKCJSZXF1ZXN0IiBpbiAi
WE1MSFRUUFJlcXVlc3QiKS4KKyAgICAgICAgICAgIG9mZnNldCA9IHN0YXJ0OworICAgICAgICAg
ICAgVUNoYXIzMiBuZXh0Q2hhcmFjdGVyOworICAgICAgICAgICAgVTE2X0ZXRF8xKG1fYnVmZmVy
LmRhdGEoKSwgb2Zmc2V0LCBzaXplKTsKKyAgICAgICAgICAgIFUxNl9HRVQobV9idWZmZXIuZGF0
YSgpLCAwLCBvZmZzZXQsIHNpemUsIG5leHRDaGFyYWN0ZXIpOworICAgICAgICAgICAgaWYgKCFp
c0FTQ0lJVXBwZXIobmV4dENoYXJhY3RlcikgJiYgIWlzQVNDSUlEaWdpdChuZXh0Q2hhcmFjdGVy
KSAmJiAhaXNTZXBhcmF0b3IobmV4dENoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoaXNBU0NJSURpZ2l0KGZpcnN0Q2hhcmFjdGVyKSkg
eworICAgICAgICAgICAgLy8gVGhlIHN0YXJ0IG9mIGEgZGlnaXQgcnVuIGlzIGEgd29yZCBzdGFy
dCAoIjIiIGluICJXZWJLaXQyIikuCisgICAgICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChwcmV2
aW91c0NoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0g
ZWxzZSBpZiAoaXNTZXBhcmF0b3IocHJldmlvdXNDaGFyYWN0ZXIpIHx8IGlzQVNDSUlEaWdpdChw
cmV2aW91c0NoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIC8vIFRoZSBzdGFydCBvZiBhIG5vbi1z
ZXBhcmF0b3IsIG5vbi11cHBlcmNhc2UsIG5vbi1kaWdpdCBydW4gaXMgYSB3b3JkIHN0YXJ0LAor
ICAgICAgICAgICAgLy8gZXhjZXB0IGFmdGVyIGFuIHVwcGVyY2FzZS4gKCJvcmciIGluICJ3ZWJr
aXQub3JnIiwgYnV0IG5vdCAib3JlIiBpbiAiV2ViQ29yZSIpLgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzaXplX3Qgd29yZEJyZWFrU2VhcmNoU3Rh
cnQgPSBzdGFydCArIGxlbmd0aDsKKyAgICB3aGlsZSAod29yZEJyZWFrU2VhcmNoU3RhcnQgPiBz
dGFydCkKKyAgICAgICAgd29yZEJyZWFrU2VhcmNoU3RhcnQgPSBmaW5kTmV4dFdvcmRGcm9tSW5k
ZXgobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCksIHdvcmRCcmVha1NlYXJjaFN0YXJ0
LCBmYWxzZSAvKiBiYWNrd2FyZHMgKi8pOworICAgIHJldHVybiB3b3JkQnJlYWtTZWFyY2hTdGFy
dCA9PSBzdGFydDsKK30KKwogaW5saW5lIHNpemVfdCBTZWFyY2hCdWZmZXI6OnNlYXJjaChzaXpl
X3QmIHN0YXJ0KQogewogICAgIHNpemVfdCBzaXplID0gbV9idWZmZXIuc2l6ZSgpOwpAQCAtMTk3
OSw3ICsyMDc5LDEwIEBAIGlubGluZSBzaXplX3QgU2VhcmNoQnVmZmVyOjpzZWFyY2goc2l6ZV8K
ICAgICB1c2VhcmNoX3NldFRleHQoc2VhcmNoZXIsIG1fYnVmZmVyLmRhdGEoKSwgc2l6ZSwgJnN0
YXR1cyk7CiAgICAgQVNTRVJUKHN0YXR1cyA9PSBVX1pFUk9fRVJST1IpOwogCi0gICAgaW50IG1h
dGNoU3RhcnQgPSB1c2VhcmNoX2ZpcnN0KHNlYXJjaGVyLCAmc3RhdHVzKTsKKyAgICB1c2VhcmNo
X3NldE9mZnNldChzZWFyY2hlciwgbV9wcmVmaXhMZW5ndGgsICZzdGF0dXMpOworICAgIEFTU0VS
VChzdGF0dXMgPT0gVV9aRVJPX0VSUk9SKTsKKworICAgIGludCBtYXRjaFN0YXJ0ID0gdXNlYXJj
aF9uZXh0KHNlYXJjaGVyLCAmc3RhdHVzKTsKICAgICBBU1NFUlQoc3RhdHVzID09IFVfWkVST19F
UlJPUik7CiAKIG5leHRNYXRjaDoKQEAgLTE5OTIsOCArMjA5NSwxOSBAQCBuZXh0TWF0Y2g6CiAg
ICAgLy8gVGhlIHNhbWUgbWF0Y2ggbWF5IGFwcGVhciBsYXRlciwgbWF0Y2hpbmcgbW9yZSBjaGFy
YWN0ZXJzLAogICAgIC8vIHBvc3NpYmx5IGluY2x1ZGluZyBhIGNvbWJpbmluZyBjaGFyYWN0ZXIg
dGhhdCdzIG5vdCB5ZXQgaW4gdGhlIGJ1ZmZlci4KICAgICBpZiAoIW1fYXRCcmVhayAmJiBzdGF0
aWNfY2FzdDxzaXplX3Q+KG1hdGNoU3RhcnQpID49IHNpemUgLSBtX292ZXJsYXApIHsKLSAgICAg
ICAgbWVtY3B5KG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuZGF0YSgpICsgc2l6ZSAtIG1fb3Zl
cmxhcCwgbV9vdmVybGFwICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgIG1fYnVmZmVyLnNocmlu
ayhtX292ZXJsYXApOworICAgICAgICBzaXplX3Qgb3ZlcmxhcCA9IG1fb3ZlcmxhcDsKKyAgICAg
ICAgaWYgKG1fb3B0aW9ucyAmIEF0V29yZFN0YXJ0cykgeworICAgICAgICAgICAgLy8gRW5zdXJl
IHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCBjb250ZXh0IGJlZm9yZSBtYXRjaFN0YXJ0IHRoZSBu
ZXh0IHRpbWUgYXJvdW5kIGZvcgorICAgICAgICAgICAgLy8gZGV0ZXJtaW5pbmcgaWYgaXQgaXMg
YXQgYSB3b3JkIGJvdW5kYXJ5LgorICAgICAgICAgICAgaW50IHdvcmRCb3VuZGFyeUNvbnRleHRT
dGFydCA9IG1hdGNoU3RhcnQ7CisgICAgICAgICAgICBVMTZfQkFDS18xKG1fYnVmZmVyLmRhdGEo
KSwgMCwgd29yZEJvdW5kYXJ5Q29udGV4dFN0YXJ0KTsKKyAgICAgICAgICAgIHdvcmRCb3VuZGFy
eUNvbnRleHRTdGFydCA9IHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dChtX2J1ZmZlci5k
YXRhKCksIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCk7CisgICAgICAgICAgICBvdmVybGFwID0g
bWluKHNpemUgLSAxLCBtYXgob3ZlcmxhcCwgc2l6ZSAtIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFy
dCkpOworICAgICAgICB9CisgICAgICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVy
LmRhdGEoKSArIHNpemUgLSBvdmVybGFwLCBvdmVybGFwICogc2l6ZW9mKFVDaGFyKSk7CisgICAg
ICAgIGlmIChtX3ByZWZpeExlbmd0aCkKKyAgICAgICAgICAgIG1fcHJlZml4TGVuZ3RoIC09IG1p
bihtX3ByZWZpeExlbmd0aCwgc2l6ZSAtIG92ZXJsYXApOworICAgICAgICBtX2J1ZmZlci5zaHJp
bmsob3ZlcmxhcCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMjAwMSw3ICsyMTE1
LDggQEAgbmV4dE1hdGNoOgogICAgIEFTU0VSVChtYXRjaFN0YXJ0ICsgbWF0Y2hlZExlbmd0aCA8
PSBzaXplKTsKIAogICAgIC8vIElmIHRoaXMgbWF0Y2ggaXMgImJhZCIsIG1vdmUgb24gdG8gdGhl
IG5leHQgbWF0Y2guCi0gICAgaWYgKGlzQmFkTWF0Y2gobV9idWZmZXIuZGF0YSgpICsgbWF0Y2hT
dGFydCwgbWF0Y2hlZExlbmd0aCkpIHsKKyAgICBpZiAoaXNCYWRNYXRjaChtX2J1ZmZlci5kYXRh
KCkgKyBtYXRjaFN0YXJ0LCBtYXRjaGVkTGVuZ3RoKQorICAgICAgICB8fCBtX29wdGlvbnMgJiBB
dFdvcmRTdGFydHMgJiYgIWlzV29yZFN0YXJ0TWF0Y2gobWF0Y2hTdGFydCwgbWF0Y2hlZExlbmd0
aCkpIHsKICAgICAgICAgbWF0Y2hTdGFydCA9IHVzZWFyY2hfbmV4dChzZWFyY2hlciwgJnN0YXR1
cyk7CiAgICAgICAgIEFTU0VSVChzdGF0dXMgPT0gVV9aRVJPX0VSUk9SKTsKICAgICAgICAgZ290
byBuZXh0TWF0Y2g7CkBAIC0yMDA5LDYgKzIxMjQsOCBAQCBuZXh0TWF0Y2g6CiAKICAgICBzaXpl
X3QgbmV3U2l6ZSA9IHNpemUgLSAobWF0Y2hTdGFydCArIDEpOwogICAgIG1lbW1vdmUobV9idWZm
ZXIuZGF0YSgpLCBtX2J1ZmZlci5kYXRhKCkgKyBtYXRjaFN0YXJ0ICsgMSwgbmV3U2l6ZSAqIHNp
emVvZihVQ2hhcikpOworICAgIGlmIChtX3ByZWZpeExlbmd0aCkKKyAgICAgICAgbV9wcmVmaXhM
ZW5ndGggLT0gbWluPHNpemVfdD4obV9wcmVmaXhMZW5ndGgsIG1hdGNoU3RhcnQgKyAxKTsKICAg
ICBtX2J1ZmZlci5zaHJpbmsobmV3U2l6ZSk7CiAKICAgICBzdGFydCA9IHNpemUgLSBtYXRjaFN0
YXJ0OwpAQCAtMjAxNyw5ICsyMTM0LDkgQEAgbmV4dE1hdGNoOgogCiAjZWxzZSAvLyAhSUNVX1VO
SUNPREUKIAotaW5saW5lIFNlYXJjaEJ1ZmZlcjo6U2VhcmNoQnVmZmVyKGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBib29sIGlzQ2FzZVNlbnNpdGl2ZSkKK2lubGluZSBTZWFyY2hCdWZmZXI6OlNlYXJj
aEJ1ZmZlcihjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKICAgICA6
IG1fdGFyZ2V0KGlzQ2FzZVNlbnNpdGl2ZSA/IHRhcmdldCA6IHRhcmdldC5mb2xkQ2FzZSgpKQot
ICAgICwgbV9pc0Nhc2VTZW5zaXRpdmUoaXNDYXNlU2Vuc2l0aXZlKQorICAgICwgbV9vcHRpb25z
KG9wdGlvbnMpCiAgICAgLCBtX2J1ZmZlcihtX3RhcmdldC5sZW5ndGgoKSkKICAgICAsIG1faXND
aGFyYWN0ZXJTdGFydEJ1ZmZlcihtX3RhcmdldC5sZW5ndGgoKSkKICAgICAsIG1faXNCdWZmZXJG
dWxsKGZhbHNlKQpAQCAtMjA1OCw3ICsyMTc1LDcgQEAgaW5saW5lIHZvaWQgU2VhcmNoQnVmZmVy
OjphcHBlbmQoVUNoYXIgYwogaW5saW5lIHNpemVfdCBTZWFyY2hCdWZmZXI6OmFwcGVuZChjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBBU1NFUlQobGVuZ3Ro
KTsKLSAgICBpZiAobV9pc0Nhc2VTZW5zaXRpdmUpIHsKKyAgICBpZiAoIShtX29wdGlvbnMgJiBD
YXNlSW5zZW5zaXRpdmUpKSB7CiAgICAgICAgIGFwcGVuZChjaGFyYWN0ZXJzWzBdLCB0cnVlKTsK
ICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQpAQCAtMjMzMiwxMiArMjQ0OSwyOSBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxSYW5nZT4gY29sbGFwc2VkVG9Cb3VuCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlKCk7CiB9CiAKLXN0YXRpYyBzaXplX3QgZmluZFBsYWluVGV4dChDaGFyYWN0ZXJJdGVyYXRv
ciYgaXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGZvcndhcmQsIGJvb2wgY2FzZVNlbnNp
dGl2ZSwgc2l6ZV90JiBtYXRjaFN0YXJ0KQorc3RhdGljIHNpemVfdCBmaW5kUGxhaW5UZXh0KENo
YXJhY3Rlckl0ZXJhdG9yJiBpdCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9w
dGlvbnMsIHNpemVfdCYgbWF0Y2hTdGFydCkKIHsKICAgICBtYXRjaFN0YXJ0ID0gMDsKICAgICBz
aXplX3QgbWF0Y2hMZW5ndGggPSAwOwogCi0gICAgU2VhcmNoQnVmZmVyIGJ1ZmZlcih0YXJnZXQs
IGNhc2VTZW5zaXRpdmUpOworICAgIFNlYXJjaEJ1ZmZlciBidWZmZXIodGFyZ2V0LCBvcHRpb25z
KTsKKworICAgIGlmIChvcHRpb25zICYgQXRXb3JkU3RhcnRzKSB7CisgICAgICAgIFJlZlB0cjxS
YW5nZT4gc3RhcnRSYW5nZSA9IGl0LnJhbmdlKCk7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gYmVm
b3JlU3RhcnRSYW5nZSA9IHN0YXJ0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+Y3JlYXRlUmFuZ2Uo
KTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGJlZm9yZVN0YXJ0UmFu
Z2UtPnNldEVuZChzdGFydFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBzdGFydFJhbmdlLT5zdGFy
dE9mZnNldCgpLCBlYyk7CisgICAgICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3Ig
YmFja3dhcmRzSXRlcmF0b3IoYmVmb3JlU3RhcnRSYW5nZS5nZXQoKSwgVGV4dEl0ZXJhdG9yRGVm
YXVsdEJlaGF2aW9yKTsKKyAgICAgICAgd2hpbGUgKCFiYWNrd2FyZHNJdGVyYXRvci5hdEVuZCgp
KSB7CisgICAgICAgICAgICBpbnQgd29yZEJvdW5kYXJ5Q29udGV4dFN0YXJ0ID0gYmFja3dhcmRz
SXRlcmF0b3IubGVuZ3RoKCk7CisgICAgICAgICAgICBVMTZfQkFDS18xKGJhY2t3YXJkc0l0ZXJh
dG9yLmNoYXJhY3RlcnMoKSwgMCwgd29yZEJvdW5kYXJ5Q29udGV4dFN0YXJ0KTsKKyAgICAgICAg
ICAgIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCA9IHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29u
dGV4dChiYWNrd2FyZHNJdGVyYXRvci5jaGFyYWN0ZXJzKCksIHdvcmRCb3VuZGFyeUNvbnRleHRT
dGFydCk7CisgICAgICAgICAgICBpbnQgY29udGV4dExlbmd0aCA9IGJhY2t3YXJkc0l0ZXJhdG9y
Lmxlbmd0aCgpIC0gd29yZEJvdW5kYXJ5Q29udGV4dFN0YXJ0OworICAgICAgICAgICAgaWYgKCFi
dWZmZXIucHJlcGVuZENvbnRleHQoYmFja3dhcmRzSXRlcmF0b3IuY2hhcmFjdGVycygpICsgd29y
ZEJvdW5kYXJ5Q29udGV4dFN0YXJ0LCBjb250ZXh0TGVuZ3RoKSB8fCB3b3JkQm91bmRhcnlDb250
ZXh0U3RhcnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBiYWNrd2FyZHNJ
dGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICB3aGlsZSAoIWl0LmF0
RW5kKCkpIHsKICAgICAgICAgaXQuYWR2YW5jZShidWZmZXIuYXBwZW5kKGl0LmNoYXJhY3RlcnMo
KSwgaXQubGVuZ3RoKCkpKTsKQEAgLTIzNTEsNyArMjQ4NSw3IEBAIHRyeUFnYWluOgogICAgICAg
ICAgICAgbWF0Y2hMZW5ndGggPSBuZXdNYXRjaExlbmd0aDsKICAgICAgICAgICAgIC8vIElmIHNl
YXJjaGluZyBmb3J3YXJkLCBzdG9wIG9uIHRoZSBmaXJzdCBtYXRjaC4KICAgICAgICAgICAgIC8v
IElmIHNlYXJjaGluZyBiYWNrd2FyZCwgZG9uJ3Qgc3RvcCwgc28gd2UgZW5kIHVwIHdpdGggdGhl
IGxhc3QgbWF0Y2guCi0gICAgICAgICAgICBpZiAoZm9yd2FyZCkKKyAgICAgICAgICAgIGlmICgh
KG9wdGlvbnMgJiBCYWNrd2FyZHMpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZ290byB0cnlBZ2FpbjsKICAgICAgICAgfQpAQCAtMjM2NiwxNSArMjUwMCwxOSBAQCB0cnlB
Z2FpbjoKIAogUGFzc1JlZlB0cjxSYW5nZT4gZmluZFBsYWluVGV4dChjb25zdCBSYW5nZSogcmFu
Z2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGZvcndhcmQsIGJvb2wgY2FzZVNlbnNpdGl2
ZSkKIHsKKyAgICByZXR1cm4gZmluZFBsYWluVGV4dChyYW5nZSwgdGFyZ2V0LCAoZm9yd2FyZCA/
IDAgOiBCYWNrd2FyZHMpIHwgKGNhc2VTZW5zaXRpdmUgPyAwIDogQ2FzZUluc2Vuc2l0aXZlKSk7
Cit9CisKK1Bhc3NSZWZQdHI8UmFuZ2U+IGZpbmRQbGFpblRleHQoY29uc3QgUmFuZ2UqIHJhbmdl
LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKK3sKICAgICAvLyBG
aXJzdCwgZmluZCB0aGUgdGV4dC4KICAgICBzaXplX3QgbWF0Y2hTdGFydDsKICAgICBzaXplX3Qg
bWF0Y2hMZW5ndGg7Ci0gICAgewotICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBmaW5kSXRlcmF0
b3IocmFuZ2UsIFRleHRJdGVyYXRvckVudGVyc1RleHRDb250cm9scyk7Ci0gICAgICAgIG1hdGNo
TGVuZ3RoID0gZmluZFBsYWluVGV4dChmaW5kSXRlcmF0b3IsIHRhcmdldCwgZm9yd2FyZCwgY2Fz
ZVNlbnNpdGl2ZSwgbWF0Y2hTdGFydCk7Ci0gICAgICAgIGlmICghbWF0Y2hMZW5ndGgpCi0gICAg
ICAgICAgICByZXR1cm4gY29sbGFwc2VkVG9Cb3VuZGFyeShyYW5nZSwgZm9yd2FyZCk7Ci0gICAg
fQorCisgICAgQ2hhcmFjdGVySXRlcmF0b3IgZmluZEl0ZXJhdG9yKHJhbmdlLCBUZXh0SXRlcmF0
b3JFbnRlcnNUZXh0Q29udHJvbHMpOworICAgIG1hdGNoTGVuZ3RoID0gZmluZFBsYWluVGV4dChm
aW5kSXRlcmF0b3IsIHRhcmdldCwgb3B0aW9ucywgbWF0Y2hTdGFydCk7CisgICAgaWYgKCFtYXRj
aExlbmd0aCkKKyAgICAgICAgcmV0dXJuIGNvbGxhcHNlZFRvQm91bmRhcnkocmFuZ2UsICEob3B0
aW9ucyAmIEJhY2t3YXJkcykpOwogCiAgICAgLy8gVGhlbiwgZmluZCB0aGUgZG9jdW1lbnQgcG9z
aXRpb24gb2YgdGhlIHN0YXJ0IGFuZCB0aGUgZW5kIG9mIHRoZSB0ZXh0LgogICAgIENoYXJhY3Rl
ckl0ZXJhdG9yIGNvbXB1dGVSYW5nZUl0ZXJhdG9yKHJhbmdlLCBUZXh0SXRlcmF0b3JFbnRlcnNU
ZXh0Q29udHJvbHMpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAkocmV2aXNpb24gNzI1NDYp
CisrKyBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDcgQEAKICNpZm5kZWYgVGV4dEl0ZXJhdG9yX2gKICNkZWZpbmUgVGV4dEl0ZXJhdG9y
X2gKIAorI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5o
IgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNTksNiAr
NjAsNyBAQCBpbmxpbmUgYm9vbCBpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShVQ2hhCiAKIFN0cmlu
ZyBwbGFpblRleHQoY29uc3QgUmFuZ2UqLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBkZWZhdWx0QmVo
YXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwogVUNoYXIqIHBsYWluVGV4dFRv
TWFsbG9jQWxsb2NhdGVkQnVmZmVyKGNvbnN0IFJhbmdlKiwgdW5zaWduZWQmIGJ1ZmZlckxlbmd0
aCwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcsIFRleHRJdGVyYXRvckJlaGF2aW9yIGRlZmF1bHRCZWhh
dmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CitQYXNzUmVmUHRyPFJhbmdlPiBm
aW5kUGxhaW5UZXh0KGNvbnN0IFJhbmdlKiwgY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMpOwog
UGFzc1JlZlB0cjxSYW5nZT4gZmluZFBsYWluVGV4dChjb25zdCBSYW5nZSosIGNvbnN0IFN0cmlu
ZyYsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlU2Vuc2l0aXZlKTsKIAogY2xhc3MgQml0U3RhY2sg
ewpJbmRleDogV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gNzI1NDYpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDMw
ICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiB1c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwogCi1zdGF0aWMgaW50IGVuZE9mRmlyc3RX
b3JkQm91bmRhcnlDb250ZXh0KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQot
ewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyApIHsKLSAgICAgICAgaW50IGZpcnN0
ID0gaTsKLSAgICAgICAgVUNoYXIzMiBjaDsKLSAgICAgICAgVTE2X05FWFQoY2hhcmFjdGVycywg
aSwgbGVuZ3RoLCBjaCk7Ci0gICAgICAgIGlmICghcmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5k
YXJ5KGNoKSkKLSAgICAgICAgICAgIHJldHVybiBmaXJzdDsKLSAgICB9Ci0gICAgcmV0dXJuIGxl
bmd0aDsKLX0KLQotc3RhdGljIGludCBzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCi17Ci0gICAgZm9yIChpbnQgaSA9IGxl
bmd0aDsgaSA+IDA7ICkgewotICAgICAgICBpbnQgbGFzdCA9IGk7Ci0gICAgICAgIFVDaGFyMzIg
Y2g7Ci0gICAgICAgIFUxNl9QUkVWKGNoYXJhY3RlcnMsIDAsIGksIGNoKTsKLSAgICAgICAgaWYg
KCFyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2gpKQotICAgICAgICAgICAgcmV0dXJu
IGxhc3Q7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCiBlbnVtIEJvdW5kYXJ5U2VhcmNoQ29u
dGV4dEF2YWlsYWJpbGl0eSB7IERvbnRIYXZlTW9yZUNvbnRleHQsIE1heUhhdmVNb3JlQ29udGV4
dCB9OwogCiB0eXBlZGVmIHVuc2lnbmVkICgqQm91bmRhcnlTZWFyY2hGdW5jdGlvbikoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG9mZnNldCwgQm91bmRhcnlTZWFyY2hD
b250ZXh0QXZhaWxhYmlsaXR5LCBib29sJiBuZWVkTW9yZUNvbnRleHQpOwpJbmRleDogV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2
aXNpb24gNzI1NDYpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwNywyNSArNTA3LDMxIEBAIHN0YXRpYyBGcmFtZSogaW5jcmVtZW50RnJhbWUoRnJhbWUqIGN1
cnIKIAogYm9vbCBQYWdlOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBUZXh0Q2Fz
ZVNlbnNpdGl2aXR5IGNhc2VTZW5zaXRpdml0eSwgRmluZERpcmVjdGlvbiBkaXJlY3Rpb24sIGJv
b2wgc2hvdWxkV3JhcCkKIHsKKyAgICByZXR1cm4gZmluZFN0cmluZyh0YXJnZXQsIChjYXNlU2Vu
c2l0aXZpdHkgPT0gVGV4dENhc2VJbnNlbnNpdGl2ZSA/IENhc2VJbnNlbnNpdGl2ZSA6IDApIHwg
KGRpcmVjdGlvbiA9PSBGaW5kRGlyZWN0aW9uQmFja3dhcmQgPyBCYWNrd2FyZHMgOiAwKSB8IChz
aG91bGRXcmFwID8gV3JhcEFyb3VuZCA6IDApKTsKK30KKworYm9vbCBQYWdlOjpmaW5kU3RyaW5n
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQorewogICAgIGlmICh0
YXJnZXQuaXNFbXB0eSgpIHx8ICFtYWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgYm9vbCBzaG91bGRXcmFwID0gb3B0aW9ucyAmIFdyYXBBcm91bmQ7CiAgICAgRnJhbWUq
IGZyYW1lID0gZm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIEZy
YW1lKiBzdGFydEZyYW1lID0gZnJhbWU7CiAgICAgZG8gewotICAgICAgICBpZiAoZnJhbWUtPmVk
aXRvcigpLT5maW5kU3RyaW5nKHRhcmdldCwgZGlyZWN0aW9uID09IEZpbmREaXJlY3Rpb25Gb3J3
YXJkLCBjYXNlU2Vuc2l0aXZpdHkgPT0gVGV4dENhc2VTZW5zaXRpdmUsIGZhbHNlLCB0cnVlKSkg
eworICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5maW5kU3RyaW5nKHRhcmdldCwgb3B0aW9u
cyAmIH5XcmFwQXJvdW5kIHwgU3RhcnRJblNlbGVjdGlvbikpIHsKICAgICAgICAgICAgIGlmIChm
cmFtZSAhPSBzdGFydEZyYW1lKQogICAgICAgICAgICAgICAgIHN0YXJ0RnJhbWUtPnNlbGVjdGlv
bigpLT5jbGVhcigpOwogICAgICAgICAgICAgZm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWRG
cmFtZShmcmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAg
ICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCBkaXJlY3Rpb24gPT0gRmluZERpcmVjdGlv
bkZvcndhcmQsIHNob3VsZFdyYXApOworICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZy
YW1lLCAhKG9wdGlvbnMgJiBCYWNrd2FyZHMpLCBzaG91bGRXcmFwKTsKICAgICB9IHdoaWxlIChm
cmFtZSAmJiBmcmFtZSAhPSBzdGFydEZyYW1lKTsKIAogICAgIC8vIFNlYXJjaCBjb250ZW50cyBv
ZiBzdGFydEZyYW1lLCBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgc2VsZWN0aW9uIHRoYXQgd2Ug
ZGlkIGVhcmxpZXIuCiAgICAgLy8gV2UgY2hlYXQgYSBiaXQgYW5kIGp1c3QgcmVzZWFyY2ggd2l0
aCB3cmFwIG9uCiAgICAgaWYgKHNob3VsZFdyYXAgJiYgIXN0YXJ0RnJhbWUtPnNlbGVjdGlvbigp
LT5pc05vbmUoKSkgewotICAgICAgICBib29sIGZvdW5kID0gc3RhcnRGcmFtZS0+ZWRpdG9yKCkt
PmZpbmRTdHJpbmcodGFyZ2V0LCBkaXJlY3Rpb24gPT0gRmluZERpcmVjdGlvbkZvcndhcmQsIGNh
c2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAg
IGJvb2wgZm91bmQgPSBzdGFydEZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyh0YXJnZXQsIG9w
dGlvbnMgfCBXcmFwQXJvdW5kIHwgU3RhcnRJblNlbGVjdGlvbik7CiAgICAgICAgIGZvY3VzQ29u
dHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUoZnJhbWUpOwogICAgICAgICByZXR1cm4gZm91bmQ7
CiAgICAgfQpAQCAtNTM1LDYgKzU0MSwxMSBAQCBib29sIFBhZ2U6OmZpbmRTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0YXJnCiAKIHVuc2lnbmVkIGludCBQYWdlOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQo
Y29uc3QgU3RyaW5nJiB0YXJnZXQsIFRleHRDYXNlU2Vuc2l0aXZpdHkgY2FzZVNlbnNpdGl2aXR5
LCBib29sIHNob3VsZEhpZ2hsaWdodCwgdW5zaWduZWQgbGltaXQpCiB7CisgICAgcmV0dXJuIG1h
cmtBbGxNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZUlu
c2Vuc2l0aXZlID8gQ2FzZUluc2Vuc2l0aXZlIDogMCwgc2hvdWxkSGlnaGxpZ2h0LCBsaW1pdCk7
Cit9CisKK3Vuc2lnbmVkIGludCBQYWdlOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQoY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGJvb2wgc2hvdWxkSGlnaGxpZ2h0LCB1
bnNpZ25lZCBsaW1pdCkKK3sKICAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSB8fCAhbWFpbkZyYW1l
KCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC01NDMsNyArNTU0LDcgQEAgdW5zaWduZWQgaW50
IFBhZ2U6Om1hcmtBbGxNYXRjaGVzRm9yVGV4dAogICAgIEZyYW1lKiBmcmFtZSA9IG1haW5GcmFt
ZSgpOwogICAgIGRvIHsKICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5zZXRNYXJrZWRUZXh0TWF0
Y2hlc0FyZUhpZ2hsaWdodGVkKHNob3VsZEhpZ2hsaWdodCk7Ci0gICAgICAgIG1hdGNoZXMgKz0g
ZnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNoZXNGb3JUZXh0KHRhcmdldCwgY2FzZVNlbnNpdGl2
aXR5ID09IFRleHRDYXNlU2Vuc2l0aXZlLCBsaW1pdCA/IChsaW1pdCAtIG1hdGNoZXMpIDogMCwg
dHJ1ZSk7CisgICAgICAgIG1hdGNoZXMgKz0gZnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNoZXNG
b3JUZXh0KHRhcmdldCwgb3B0aW9ucywgbGltaXQgPyAobGltaXQgLSBtYXRjaGVzKSA6IDAsIHRy
dWUpOwogICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCB0cnVlLCBmYWxzZSk7
CiAgICAgfSB3aGlsZSAoZnJhbWUpOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDcyNTQ2KQorKysgV2ViQ29y
ZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBQ
YWdlX2gKIAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKKyNpbmNsdWRlICJGaW5kT3B0
aW9ucy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVmlld3BvcnRB
cmd1bWVudHMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMTk4LDcgKzE5OSw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRUYWJLZXlDeWNsZXNUaHJvdWdo
RWxlbWVudHMoYm9vbCBiKSB7IG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzID0gYjsgfQog
ICAgICAgICBib29sIHRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzOyB9CiAKKyAgICAgICAgYm9vbCBmaW5kU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKICAgICAgICAgYm9vbCBmaW5kU3RyaW5n
KGNvbnN0IFN0cmluZyYsIFRleHRDYXNlU2Vuc2l0aXZpdHksIEZpbmREaXJlY3Rpb24sIGJvb2wg
c2hvdWxkV3JhcCk7CisgICAgICAgIHVuc2lnbmVkIGludCBtYXJrQWxsTWF0Y2hlc0ZvclRleHQo
Y29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIGJvb2wgc2hvdWxkSGlnaGxpZ2h0LCB1bnNpZ25l
ZCk7CiAgICAgICAgIHVuc2lnbmVkIGludCBtYXJrQWxsTWF0Y2hlc0ZvclRleHQoY29uc3QgU3Ry
aW5nJiwgVGV4dENhc2VTZW5zaXRpdml0eSwgYm9vbCBzaG91bGRIaWdobGlnaHQsIHVuc2lnbmVk
KTsKICAgICAgICAgdm9pZCB1bm1hcmtBbGxUZXh0TWF0Y2hlcygpOwogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAJKHJldmlzaW9uIDcyNTQ2KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNiArMzYsMzIgQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAoraW50IGVuZE9mRmlyc3RXb3JkQm91bmRhcnlDb250ZXh0KGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro
OyApIHsKKyAgICAgICAgaW50IGZpcnN0ID0gaTsKKyAgICAgICAgVUNoYXIzMiBjaDsKKyAgICAg
ICAgVTE2X05FWFQoY2hhcmFjdGVycywgaSwgbGVuZ3RoLCBjaCk7CisgICAgICAgIGlmICghcmVx
dWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGNoKSkKKyAgICAgICAgICAgIHJldHVybiBmaXJz
dDsKKyAgICB9CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKworaW50IHN0YXJ0T2ZMYXN0V29yZEJv
dW5kYXJ5Q29udGV4dChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK3sKKyAg
ICBmb3IgKGludCBpID0gbGVuZ3RoOyBpID4gMDsgKSB7CisgICAgICAgIGludCBsYXN0ID0gaTsK
KyAgICAgICAgVUNoYXIzMiBjaDsKKyAgICAgICAgVTE2X1BSRVYoY2hhcmFjdGVycywgMCwgaSwg
Y2gpOworICAgICAgICBpZiAoIXJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjaCkpCisg
ICAgICAgICAgICByZXR1cm4gbGFzdDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiAh
UExBVEZPUk0oTUFDKQorCiBpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KGNvbnN0IFVDaGFyKiBj
aGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBib29sIGZvcndhcmQpCiB7CiAgICAgVGV4dEJy
ZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7CkBAIC03Niw0
ICsxMDIsNiBAQCB2b2lkIGZpbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJzCiAgICAg
KnN0YXJ0ID0gdGV4dEJyZWFrUHJldmlvdXMoaXQpOwogfQogCisjZW5kaWYgLy8gIVBMQVRGT1JN
KE1BQykKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRCb3VuZGFyaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRCb3VuZGFyaWVzLmgJKHJldmlzaW9uIDcyNTQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRCb3VuZGFyaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1cm4gV1RGOjpVbmljb2RlOjpoYXNMaW5lQnJl
YWtpbmdQcm9wZXJ0eUNvbXBsZXhDb250ZXh0KGNoKTsKICAgICB9CiAKKyAgICBpbnQgZW5kT2ZG
aXJzdFdvcmRCb3VuZGFyeUNvbnRleHQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgpOworICAgIGludCBzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgpOworCiAgICAgdm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNv
bnN0IFVDaGFyKiwgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCk7
CiAgICAgaW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25zdCBVQ2hhciosIGludCBsZW4sIGlu
dCBwb3NpdGlvbiwgYm9vbCBmb3J3YXJkKTsKIApJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyNjk2KQorKysgV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0xMS0yNCAg
RGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDIgcGFydCBvZiA8cmRhcjovL3Byb2JsZW0v
ODY1MDA4NT4gYWRkaW5nIHdvcmQtcHJlZml4IHNlYXJjaCBvcHRpb25zIHRvIHRoZSB0ZXh0IHNl
YXJjaCBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MDAzOAorICAgICAgICBCYXNlZCBvbiBhIHBhdGNoIGZyb20gRGFyaW4gQWRsZXIuCisKKyAg
ICAgICAgKiBTaGFyZWQvRmluZE9wdGlvbnMuaDogQ2hhbmdlZCB0aGUgaGVhZGVyIGd1YXJkIHRv
IGFjY291bnQgZm9yIFdlYkNvcmXigJlzIG5ldyBwcml2YXRlCisgICAgICAgIEZpbmRPcHRpb25z
LmguIEFkZGVkIGFuZCByZW9yZGVyZWQgRmluZE9wdGlvbnMgYW5kIHJvbGxlZCBGaW5kRGlyZWN0
aW9uIGludG8gRmluZE9wdGlvbnMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2Fz
dC5oOiBSZW1vdmVkIHRvRmluZERpcmVjdGlvbigpLgorICAgICAgICAoV2ViS2l0Ojp0b0ZpbmRP
cHRpb25zKTogVXBkYXRlZCBmb3IgbmV3IHZhbHVlcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZUZpbmRTdHJpbmcpOiBSZW1vdmVkIHNlcGFy
YXRlIFdLRmluZERpcmVjdGlvbi4KKyAgICAgICAgKFdLUGFnZUNvdW50U3RyaW5nTWF0Y2hlcyk6
IFJlcGxhY2VzIGNhc2VJbnNlbnNpdGl2ZSBib29sZWFuIHdpdGggV0tGaW5kT3B0aW9ucy4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmg6IFJlbW92ZWQgV0tGaW5kRGlyZWN0aW9u
IGFuZCB1cGRhdGVkIFdLRmluZE9wdGlvbnMuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZmluZFN0cmluZyk6IFJl
bW92ZWQgc2VwYXJhdGUgRmluZERpcmVjdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojpjb3VudFN0cmluZ01hdGNoZXMpOiBSZXBsYWNlZCBjYXNlSW5zZW5zaXRpdmUgYm9vbGVh
biB3aXRoIEZpbmRPcHRpb25zLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViS2l0Ojpjb3JlKTogQWRkZWQuIENvbnZlcnRzIFdlYktpdDIgRmluZE9wdGlvbnMgdG8g
V2ViQ29yZSBGaW5kT3B0aW9ucy4KKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmNv
dW50U3RyaW5nTWF0Y2hlcyk6IENoYW5nZWQgdG8gdXNlIEZpbmRPcHRpb25zLgorICAgICAgICAo
V2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyk6IERpdHRvLgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZmluZFN0cmlu
Zyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb3VudFN0cmluZ01hdGNoZXMp
OiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOiBEaXR0by4KKwogMjAx
MC0xMS0yNCAgQW5kcmFzIEJlY3NpICA8YWJlY3NpQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFdlYktpdDIv
U2hhcmVkL0ZpbmRPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvRmluZE9w
dGlvbnMuaAkocmV2aXNpb24gNzI1NDYpCisrKyBXZWJLaXQyL1NoYXJlZC9GaW5kT3B0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMyArMjMsMjIgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZpbmRPcHRpb25zX2gKLSNkZWZpbmUgRmlu
ZE9wdGlvbnNfaAorLy8gVGhpcyBub24tc3RhbmRhcmQgaGVhZGVyIGd1YXJkIGlzIG5lZWRlZCBi
ZWNhdXNlIFdlYkNvcmUncyBGaW5kT3B0aW9ucy5oIGRlZmluZXMgRmluZE9wdGlvbnNfaC4KKyNp
Zm5kZWYgV2ViS2l0Ml9GaW5kT3B0aW9uc19oCisjZGVmaW5lIFdlYktpdDJfRmluZE9wdGlvbnNf
aAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotZW51bSBGaW5kRGlyZWN0aW9uIHsgCi0gICAgRmlu
ZERpcmVjdGlvbkZvcndhcmQsIAotICAgIEZpbmREaXJlY3Rpb25CYWNrd2FyZAotfTsKLQogZW51
bSBGaW5kT3B0aW9ucyB7CiAgICAgRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUgPSAxIDw8IDAs
Ci0gICAgRmluZE9wdGlvbnNXcmFwQXJvdW5kID0gMSA8PCAxLAotICAgIEZpbmRPcHRpb25zU2hv
d092ZXJsYXkgPSAxIDw8IDIsCi0gICAgRmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvciA9IDEg
PDwgMywKKyAgICBGaW5kT3B0aW9uc0F0V29yZFN0YXJ0cyA9IDEgPDwgMSwKKyAgICBGaW5kT3B0
aW9uc1RyZWF0TWVkaWFsQ2FwQXNXb3JkU3RhcnQgPSAxIDw8IDIsCisgICAgRmluZE9wdGlvbnNC
YWNrd2FyZHMgPSAxIDw8IDMsCisgICAgRmluZE9wdGlvbnNXcmFwQXJvdW5kID0gMSA8PCA0LAor
ICAgIEZpbmRPcHRpb25zU2hvd092ZXJsYXkgPSAxIDw8IDUsCisgICAgRmluZE9wdGlvbnNTaG93
RmluZEluZGljYXRvciA9IDEgPDwgNgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNl
bmRpZiAvLyBGaW5kT3B0aW9uc19oCisjZW5kaWYgLy8gV2ViS2l0Ml9GaW5kT3B0aW9uc19oCklu
ZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDcyNTQ2KQorKysgV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA1LDkg
KzYwNSw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzY2FsZVdlYlZpZXcoZG91YmxlIHMKICAgICBw
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNjYWxlV2ViVmlldyhzY2FsZSwgb3Jp
Z2luKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZmluZFN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZywgRmluZERpcmVjdGlvbiBmaW5kRGlyZWN0aW9uLCBGaW5kT3B0aW9u
cyBmaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKK3ZvaWQgV2ViUGFnZVByb3h5
OjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1
bnNpZ25lZCBtYXhNYXRjaENvdW50KQogewotICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6RmluZFN0cmluZyhzdHJpbmcsIGZpbmREaXJlY3Rpb24sIGZpbmRPcHRpb25zLCBt
YXhNYXRjaENvdW50KSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6RmluZFN0cmluZyhzdHJpbmcsIG9wdGlvbnMsIG1heE1hdGNoQ291bnQpLCBtX3Bh
Z2VJRCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpoaWRlRmluZFVJKCkKQEAgLTYxNSw5ICs2
MTUsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGlkZUZpbmRVSSgpCiAgICAgcHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpIaWRlRmluZFVJKCksIG1fcGFnZUlEKTsKIH0KIAotdm9p
ZCBXZWJQYWdlUHJveHk6OmNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmluZywg
Ym9vbCBjYXNlSW5zZW5zaXRpdmUsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCit2b2lkIFdlYlBh
Z2VQcm94eTo6Y291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0
aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogewotICAgIHByb2Nlc3MoKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q291bnRTdHJpbmdNYXRjaGVzKHN0cmluZywgY2FzZUlu
c2Vuc2l0aXZlLCBtYXhNYXRjaENvdW50KSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6Q291bnRTdHJpbmdNYXRjaGVzKHN0cmluZywgb3B0aW9ucywg
bWF4TWF0Y2hDb3VudCksIG1fcGFnZUlEKTsKIH0KICAgICAKIHZvaWQgV2ViUGFnZVByb3h5Ojpy
dW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIFBhc3NSZWZQdHI8
U2NyaXB0UmV0dXJuVmFsdWVDYWxsYmFjaz4gcHJwQ2FsbGJhY2spCkluZGV4OiBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAkocmV2aXNpb24gNzI1NDYpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDkgKzIwNiw5IEBAIHB1YmxpYzoKICAg
ICBkb3VibGUgdmlld1NjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92aWV3U2NhbGVGYWN0
b3I7IH0KIAogICAgIC8vIEZpbmQuCi0gICAgdm9pZCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYs
IEZpbmREaXJlY3Rpb24sIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKKyAg
ICB2b2lkIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1h
eE1hdGNoQ291bnQpOwogICAgIHZvaWQgaGlkZUZpbmRVSSgpOwotICAgIHZvaWQgY291bnRTdHJp
bmdNYXRjaGVzKGNvbnN0IFN0cmluZyYsIGJvb2wgY2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBt
YXhNYXRjaENvdW50KTsKKyAgICB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcm
LCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CiAKICAgICB2b2lkIHJ1bkph
dmFTY3JpcHRJbk1haW5GcmFtZShjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPFNjcmlwdFJldHVy
blZhbHVlQ2FsbGJhY2s+KTsKICAgICB2b2lkIGdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFBhc3NSZWZQdHI8UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb25DYWxsYmFj
az4pOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHJldmlzaW9uIDcyNTQ2
KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMiwyNSArMTIyLDE4IEBAIGlubGluZSBXS0NhY2hlTW9kZWwgdG9BUEkoQ2FjaGVNb2Rl
bCBjYWMKICAgICByZXR1cm4ga1dLQ2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOwogfQogCi1pbmxp
bmUgRmluZERpcmVjdGlvbiB0b0ZpbmREaXJlY3Rpb24oV0tGaW5kRGlyZWN0aW9uIHdrRmluZERp
cmVjdGlvbikKLXsKLSAgICBzd2l0Y2ggKHdrRmluZERpcmVjdGlvbikgewotICAgIGNhc2Uga1dL
RmluZERpcmVjdGlvbkZvcndhcmQ6Ci0gICAgICAgIHJldHVybiBGaW5kRGlyZWN0aW9uRm9yd2Fy
ZDsKLSAgICBjYXNlIGtXS0ZpbmREaXJlY3Rpb25CYWNrd2FyZDoKLSAgICAgICAgcmV0dXJuIEZp
bmREaXJlY3Rpb25CYWNrd2FyZDsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gRmluZERpcmVjdGlvbkZvcndhcmQ7Ci19Ci0KIGlubGluZSBGaW5kT3B0aW9u
cyB0b0ZpbmRPcHRpb25zKFdLRmluZE9wdGlvbnMgd2tGaW5kT3B0aW9ucykKIHsKICAgICB1bnNp
Z25lZCBmaW5kT3B0aW9ucyA9IDA7CiAKICAgICBpZiAod2tGaW5kT3B0aW9ucyAmIGtXS0ZpbmRP
cHRpb25zQ2FzZUluc2Vuc2l0aXZlKQogICAgICAgICBmaW5kT3B0aW9ucyB8PSBGaW5kT3B0aW9u
c0Nhc2VJbnNlbnNpdGl2ZTsKKyAgICBpZiAod2tGaW5kT3B0aW9ucyAmIGtXS0ZpbmRPcHRpb25z
QXRXb3JkU3RhcnRzKQorICAgICAgICBmaW5kT3B0aW9ucyB8PSBGaW5kT3B0aW9uc0F0V29yZFN0
YXJ0czsKKyAgICBpZiAod2tGaW5kT3B0aW9ucyAmIGtXS0ZpbmRPcHRpb25zVHJlYXRNZWRpYWxD
YXBBc1dvcmRTdGFydCkKKyAgICAgICAgZmluZE9wdGlvbnMgfD0gRmluZE9wdGlvbnNUcmVhdE1l
ZGlhbENhcEFzV29yZFN0YXJ0OworICAgIGlmICh3a0ZpbmRPcHRpb25zICYga1dLRmluZE9wdGlv
bnNCYWNrd2FyZHMpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IEZpbmRPcHRpb25zQmFja3dhcmRz
OwogICAgIGlmICh3a0ZpbmRPcHRpb25zICYga1dLRmluZE9wdGlvbnNXcmFwQXJvdW5kKQogICAg
ICAgICBmaW5kT3B0aW9ucyB8PSBGaW5kT3B0aW9uc1dyYXBBcm91bmQ7CiAgICAgaWYgKHdrRmlu
ZE9wdGlvbnMgJiBrV0tGaW5kT3B0aW9uc1Nob3dPdmVybGF5KQpJbmRleDogV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiA3MjU0NikKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw5ICsyMjgsOSBAQCBkb3VibGUg
V0tQYWdlR2V0Vmlld1NjYWxlRmFjdG9yKFdLUGFnZVJlCiAgICAgcmV0dXJuIHRvSW1wbChwYWdl
UmVmKS0+dmlld1NjYWxlRmFjdG9yKCk7CiB9CiAKLXZvaWQgV0tQYWdlRmluZFN0cmluZyhXS1Bh
Z2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgc3RyaW5nLCBXS0ZpbmREaXJlY3Rpb24gZmluZERp
cmVjdGlvbiwgV0tGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3Vu
dCkKK3ZvaWQgV0tQYWdlRmluZFN0cmluZyhXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYg
c3RyaW5nLCBXS0ZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCiB7
Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5maW5kU3RyaW5nKHRvSW1wbChzdHJpbmcpLT5zdHJpbmco
KSwgdG9GaW5kRGlyZWN0aW9uKGZpbmREaXJlY3Rpb24pLCB0b0ZpbmRPcHRpb25zKGZpbmRPcHRp
b25zKSwgbWF4TWF0Y2hDb3VudCk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5maW5kU3RyaW5nKHRv
SW1wbChzdHJpbmcpLT5zdHJpbmcoKSwgdG9GaW5kT3B0aW9ucyhvcHRpb25zKSwgbWF4TWF0Y2hD
b3VudCk7CiB9CiAKIHZvaWQgV0tQYWdlSGlkZUZpbmRVSShXS1BhZ2VSZWYgcGFnZVJlZikKQEAg
LTIzOCw5ICsyMzgsOSBAQCB2b2lkIFdLUGFnZUhpZGVGaW5kVUkoV0tQYWdlUmVmIHBhZ2VSZWYp
CiAgICAgdG9JbXBsKHBhZ2VSZWYpLT5oaWRlRmluZFVJKCk7CiB9CiAKLXZvaWQgV0tQYWdlQ291
bnRTdHJpbmdNYXRjaGVzKFdLUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBzdHJpbmcsIGJv
b2wgY2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQordm9pZCBXS1BhZ2VD
b3VudFN0cmluZ01hdGNoZXMoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHN0cmluZywg
V0tGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogewotICAgIHRv
SW1wbChwYWdlUmVmKS0+Y291bnRTdHJpbmdNYXRjaGVzKHRvSW1wbChzdHJpbmcpLT5zdHJpbmco
KSwgY2FzZUluc2Vuc2l0aXZlLCBtYXhNYXRjaENvdW50KTsKKyAgICB0b0ltcGwocGFnZVJlZikt
PmNvdW50U3RyaW5nTWF0Y2hlcyh0b0ltcGwoc3RyaW5nKS0+c3RyaW5nKCksIHRvRmluZE9wdGlv
bnMob3B0aW9ucyksIG1heE1hdGNoQ291bnQpOwogfQogCiB2b2lkIFdLUGFnZVNldFBhZ2VDb250
ZXh0TWVudUNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29uc3QgV0tQYWdlQ29udGV4dE1lbnVD
bGllbnQqIHdrQ2xpZW50KQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgJKHJldmlzaW9u
IDcyNTQ2KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3MCwyMiArMjcwLDE5IEBAIFdLX0VYUE9SVCBkb3VibGUgV0tQYWdlR2V0Vmlld1Nj
YWxlRmFjdG8KIAogLy8gRmluZC4KIGVudW0gewotICAgIGtXS0ZpbmREaXJlY3Rpb25Gb3J3YXJk
LAotICAgIGtXS0ZpbmREaXJlY3Rpb25CYWNrd2FyZAotfTsKLXR5cGVkZWYgdWludDMyX3QgV0tG
aW5kRGlyZWN0aW9uOwotCi1lbnVtIHsKICAgICBrV0tGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2
ZSA9IDEgPDwgMCwKLSAgICBrV0tGaW5kT3B0aW9uc1dyYXBBcm91bmQgPSAxIDw8IDEsCi0gICAg
a1dLRmluZE9wdGlvbnNTaG93T3ZlcmxheSA9IDEgPDwgMiwKLSAgICBrV0tGaW5kT3B0aW9uc1No
b3dGaW5kSW5kaWNhdG9yID0gMSA8PCAzCisgICAga1dLRmluZE9wdGlvbnNBdFdvcmRTdGFydHMg
PSAxIDw8IDEsCisgICAga1dLRmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcEFzV29yZFN0YXJ0ID0g
MSA8PCAyLAorICAgIGtXS0ZpbmRPcHRpb25zQmFja3dhcmRzID0gMSA8PCAzLAorICAgIGtXS0Zp
bmRPcHRpb25zV3JhcEFyb3VuZCA9IDEgPDwgNCwKKyAgICBrV0tGaW5kT3B0aW9uc1Nob3dPdmVy
bGF5ID0gMSA8PCA1LAorICAgIGtXS0ZpbmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3IgPSAxIDw8
IDYKIH07CiB0eXBlZGVmIHVpbnQzMl90IFdLRmluZE9wdGlvbnM7CiAKLVdLX0VYUE9SVCB2b2lk
IFdLUGFnZUZpbmRTdHJpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgV0tG
aW5kRGlyZWN0aW9uIGZpbmREaXJlY3Rpb24sIFdLRmluZE9wdGlvbnMgZmluZE9wdGlvbnMsIHVu
c2lnbmVkIG1heE1hdGNoQ291bnQpOworV0tfRVhQT1JUIHZvaWQgV0tQYWdlRmluZFN0cmluZyhX
S1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgc3RyaW5nLCBXS0ZpbmRPcHRpb25zIGZpbmRPcHRp
b25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKIFdLX0VYUE9SVCB2b2lkIFdLUGFnZUhpZGVG
aW5kVUkoV0tQYWdlUmVmIHBhZ2UpOwotV0tfRVhQT1JUIHZvaWQgV0tQYWdlQ291bnRTdHJpbmdN
YXRjaGVzKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBzdHJpbmcsIGJvb2wgY2FzZUluc2Vu
c2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKK1dLX0VYUE9SVCB2b2lkIFdLUGFnZUNv
dW50U3RyaW5nTWF0Y2hlcyhXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgc3RyaW5nLCBXS0Zp
bmRPcHRpb25zIGZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKIAogV0tfRVhQ
T1JUIHZvaWQgV0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KFdLUGFnZVJlZiBwYWdlLCBj
b25zdCBXS1BhZ2VDb250ZXh0TWVudUNsaWVudCogY2xpZW50KTsKIFdLX0VYUE9SVCB2b2lkIFdL
UGFnZVNldFBhZ2VGaW5kQ2xpZW50KFdLUGFnZVJlZiBwYWdlLCBjb25zdCBXS1BhZ2VGaW5kQ2xp
ZW50KiBjbGllbnQpOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gNzI1NDYpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE1IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorc3RhdGlj
IFdlYkNvcmU6OkZpbmRPcHRpb25zIGNvcmUoRmluZE9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICBy
ZXR1cm4gKG9wdGlvbnMgJiBGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSA/IENhc2VJbnNlbnNp
dGl2ZSA6IDApCisgICAgICAgIHwgKG9wdGlvbnMgJiBGaW5kT3B0aW9uc0F0V29yZFN0YXJ0cyA/
IEF0V29yZFN0YXJ0cyA6IDApCisgICAgICAgIHwgKG9wdGlvbnMgJiBGaW5kT3B0aW9uc1RyZWF0
TWVkaWFsQ2FwQXNXb3JkU3RhcnQgPyBUcmVhdE1lZGlhbENhcEFzV29yZFN0YXJ0IDogMCkKKyAg
ICAgICAgfCAob3B0aW9ucyAmIEZpbmRPcHRpb25zQmFja3dhcmRzID8gQmFja3dhcmRzIDogMCkK
KyAgICAgICAgfCAob3B0aW9ucyAmIEZpbmRPcHRpb25zV3JhcEFyb3VuZCA/IFdyYXBBcm91bmQg
OiAwKTsKK30KKwogRmluZENvbnRyb2xsZXI6OkZpbmRDb250cm9sbGVyKFdlYlBhZ2UqIHdlYlBh
Z2UpCiAgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKICAgICAsIG1fZmluZFBhZ2VPdmVybGF5KDAp
CkBAIC01MSw5ICs2MCw5IEBAIEZpbmRDb250cm9sbGVyOjp+RmluZENvbnRyb2xsZXIoKQogewog
fQogCi12b2lkIEZpbmRDb250cm9sbGVyOjpjb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGJvb2wgY2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQor
dm9pZCBGaW5kQ29udHJvbGxlcjo6Y291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogewotICAg
IHVuc2lnbmVkIG1hdGNoQ291bnQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1hcmtBbGxNYXRj
aGVzRm9yVGV4dChzdHJpbmcsIGNhc2VJbnNlbnNpdGl2ZSA/IFRleHRDYXNlSW5zZW5zaXRpdmUg
OiBUZXh0Q2FzZVNlbnNpdGl2ZSwgZmFsc2UsIG1heE1hdGNoQ291bnQpOworICAgIHVuc2lnbmVk
IG1hdGNoQ291bnQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1hcmtBbGxNYXRjaGVzRm9yVGV4
dChzdHJpbmcsIGNvcmUob3B0aW9ucyksIGZhbHNlLCBtYXhNYXRjaENvdW50KTsKICAgICBtX3dl
YlBhZ2UtPmNvcmVQYWdlKCktPnVubWFya0FsbFRleHRNYXRjaGVzKCk7CiAKICAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ291bnRTdHJpbmdNYXRjaGVzKHN0
cmluZywgbWF0Y2hDb3VudCkpOwpAQCAtNjksMTQgKzc4LDExIEBAIHN0YXRpYyBGcmFtZSogZnJh
bWVXaXRoU2VsZWN0aW9uKFBhZ2UqIHAKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBGaW5kQ29u
dHJvbGxlcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgRmluZERpcmVjdGlvbiBm
aW5kRGlyZWN0aW9uLCBGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hD
b3VudCkKK3ZvaWQgRmluZENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCiB7CiAgICAg
bV93ZWJQYWdlLT5jb3JlUGFnZSgpLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOwogCi0gICAgVGV4
dENhc2VTZW5zaXRpdml0eSBjYXNlU2Vuc2l0aXZpdHkgPSBmaW5kT3B0aW9ucyAmIEZpbmRPcHRp
b25zQ2FzZUluc2Vuc2l0aXZlID8gVGV4dENhc2VJbnNlbnNpdGl2ZSA6IFRleHRDYXNlU2Vuc2l0
aXZlOwotICAgIGJvb2wgZm91bmQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRTdHJpbmco
c3RyaW5nLCBjYXNlU2Vuc2l0aXZpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaW5kRGlyZWN0aW9uID09IEZpbmREaXJlY3Rpb25Gb3J3YXJk
ID8gV2ViQ29yZTo6RmluZERpcmVjdGlvbkZvcndhcmQgOiBXZWJDb3JlOjpGaW5kRGlyZWN0aW9u
QmFja3dhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaW5kT3B0aW9ucyAmIEZpbmRPcHRpb25zV3JhcEFyb3VuZCk7CisgICAgYm9vbCBmb3Vu
ZCA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFN0cmluZyhzdHJpbmcsIGNvcmUob3B0aW9u
cykpOwogCiAgICAgRnJhbWUqIHNlbGVjdGVkRnJhbWUgPSBmcmFtZVdpdGhTZWxlY3Rpb24obV93
ZWJQYWdlLT5jb3JlUGFnZSgpKTsKIApAQCAtOTEsMTAgKzk3LDEwIEBAIHZvaWQgRmluZENvbnRy
b2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgU3QKIAogICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmFpbFRvRmluZFN0cmluZyhzdHJpbmcpKTsKICAgICB9
IGVsc2UgewotICAgICAgICBzaG91bGRTaG93T3ZlcmxheSA9IGZpbmRPcHRpb25zICYgRmluZE9w
dGlvbnNTaG93T3ZlcmxheTsKKyAgICAgICAgc2hvdWxkU2hvd092ZXJsYXkgPSBvcHRpb25zICYg
RmluZE9wdGlvbnNTaG93T3ZlcmxheTsKIAogICAgICAgICBpZiAoc2hvdWxkU2hvd092ZXJsYXkp
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdl
KCktPm1hcmtBbGxNYXRjaGVzRm9yVGV4dChzdHJpbmcsIGNhc2VTZW5zaXRpdml0eSwgZmFsc2Us
IG1heE1hdGNoQ291bnQgKyAxKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1hcmtBbGxNYXRjaGVzRm9yVGV4dChzdHJpbmcsIGNvcmUo
b3B0aW9ucyksIGZhbHNlLCBtYXhNYXRjaENvdW50ICsgMSk7CiAKICAgICAgICAgICAgIC8vIENo
ZWNrIGlmIHdlIGhhdmUgbW9yZSBtYXRjaGVzIHRoYW4gYWxsb3dlZC4KICAgICAgICAgICAgIGlm
IChtYXRjaENvdW50ID4gbWF4TWF0Y2hDb3VudCkgewpAQCAtMTA1LDcgKzExMSw3IEBAIHZvaWQg
RmluZENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgU3QKICAgICAgICAgICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nKHN0cmluZywgbWF0
Y2hDb3VudCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCEoZmluZE9wdGlvbnMgJiBGaW5k
T3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9yKSB8fCAhdXBkYXRlRmluZEluZGljYXRvcihzZWxlY3Rl
ZEZyYW1lLCBzaG91bGRTaG93T3ZlcmxheSkpIHsKKyAgICAgICAgaWYgKCEob3B0aW9ucyAmIEZp
bmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3IpIHx8ICF1cGRhdGVGaW5kSW5kaWNhdG9yKHNlbGVj
dGVkRnJhbWUsIHNob3VsZFNob3dPdmVybGF5KSkgewogICAgICAgICAgICAgLy8gRWl0aGVyIHdl
IHNob3VsZG4ndCBzaG93IHRoZSBmaW5kIGluZGljYXRvciwgb3Igd2UgY291bGRuJ3QgdXBkYXRl
IGl0LgogICAgICAgICAgICAgaGlkZUZpbmRJbmRpY2F0b3IoKTsKICAgICAgICAgfQpJbmRleDog
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCShyZXZpc2lvbiA3
MjU0NikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IEZpbmRD
b250cm9sbGVyKFdlYlBhZ2UqKTsKICAgICB2aXJ0dWFsIH5GaW5kQ29udHJvbGxlcigpOwogCi0g
ICAgdm9pZCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIEZpbmREaXJlY3Rpb24sIEZpbmRPcHRp
b25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKKyAgICB2b2lkIGZpbmRTdHJpbmcoY29uc3Qg
U3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwogICAgIHZvaWQg
aGlkZUZpbmRVSSgpOwotICAgIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYs
IGJvb2wgY2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKKyAgICB2b2lk
IGNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQg
bWF4TWF0Y2hDb3VudCk7CiAgICAgCiAgICAgdm9pZCBoaWRlRmluZEluZGljYXRvcigpOwogCklu
ZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNzI1NDYp
CisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTkyLDkgKzk5Miw5IEBAIHZvaWQgV2ViUGFnZTo6c2V0QWN0aXZlUG9wdXBNZW51KFdl
YlBvcHUKICAgICBtX2FjdGl2ZVBvcHVwTWVudSA9IG1lbnU7CiB9CiAKLXZvaWQgV2ViUGFnZTo6
ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgdWludDMyX3QgZmluZERpcmVjdGlvbiwg
dWludDMyX3QgZmluZE9wdGlvbnMsIHVpbnQzMl90IG1heE1hdGNoQ291bnQpCit2b2lkIFdlYlBh
Z2U6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG9wdGlvbnMsIHVp
bnQzMl90IG1heE1hdGNoQ291bnQpCiB7Ci0gICAgbV9maW5kQ29udHJvbGxlci5maW5kU3RyaW5n
KHN0cmluZywgc3RhdGljX2Nhc3Q8RmluZERpcmVjdGlvbj4oZmluZERpcmVjdGlvbiksIHN0YXRp
Y19jYXN0PEZpbmRPcHRpb25zPihmaW5kT3B0aW9ucyksIG1heE1hdGNoQ291bnQpOworICAgIG1f
ZmluZENvbnRyb2xsZXIuZmluZFN0cmluZyhzdHJpbmcsIHN0YXRpY19jYXN0PEZpbmRPcHRpb25z
PihvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6aGlkZUZpbmRV
SSgpCkBAIC0xMDAyLDkgKzEwMDIsOSBAQCB2b2lkIFdlYlBhZ2U6OmhpZGVGaW5kVUkoKQogICAg
IG1fZmluZENvbnRyb2xsZXIuaGlkZUZpbmRVSSgpOwogfQogCi12b2lkIFdlYlBhZ2U6OmNvdW50
U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBjYXNlSW5zZW5zaXRpdmUs
IHVpbnQzMl90IG1heE1hdGNoQ291bnQpCit2b2lkIFdlYlBhZ2U6OmNvdW50U3RyaW5nTWF0Y2hl
cyhjb25zdCBTdHJpbmcmIHN0cmluZywgdWludDMyX3Qgb3B0aW9ucywgdWludDMyX3QgbWF4TWF0
Y2hDb3VudCkKIHsKLSAgICBtX2ZpbmRDb250cm9sbGVyLmNvdW50U3RyaW5nTWF0Y2hlcyhzdHJp
bmcsIGNhc2VJbnNlbnNpdGl2ZSwgbWF4TWF0Y2hDb3VudCk7CisgICAgbV9maW5kQ29udHJvbGxl
ci5jb3VudFN0cmluZ01hdGNoZXMoc3RyaW5nLCBzdGF0aWNfY2FzdDxGaW5kT3B0aW9ucz4ob3B0
aW9ucyksIG1heE1hdGNoQ291bnQpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmRpZENoYW5nZVNlbGVj
dGVkSW5kZXhGb3JBY3RpdmVQb3B1cE1lbnUoaW50MzJfdCBuZXdJbmRleCkKSW5kZXg6IFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDcyNTQ2KQorKysgV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsOSArMjg3
LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlYXBwbHlFZGl0Q29tbWFuZCh1aW50NjRfdCBjb21t
YW5kSUQpOwogICAgIHZvaWQgZGlkUmVtb3ZlRWRpdENvbW1hbmQodWludDY0X3QgY29tbWFuZElE
KTsKIAotICAgIHZvaWQgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBmaW5kRGly
ZWN0aW9uLCB1aW50MzJfdCBmaW5kT3B0aW9ucywgdWludDMyX3QgbWF4TWF0Y2hDb3VudCk7Cisg
ICAgdm9pZCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IGZpbmRPcHRpb25zLCB1
aW50MzJfdCBtYXhNYXRjaENvdW50KTsKICAgICB2b2lkIGhpZGVGaW5kVUkoKTsKLSAgICB2b2lk
IGNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBib29sIGNhc2VJbnNlbnNpdGl2ZSwg
dWludDMyX3QgbWF4TWF0Y2hDb3VudCk7CisgICAgdm9pZCBjb3VudFN0cmluZ01hdGNoZXMoY29u
c3QgU3RyaW5nJiwgdWludDMyX3QgZmluZE9wdGlvbnMsIHVpbnQzMl90IG1heE1hdGNoQ291bnQp
OwogCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQo
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gNzI1NDYpCisrKyBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw5ICs3OCw5IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAgIFNjYWxlV2ViVmlldyhk
b3VibGUgc2NhbGUsIFdlYkNvcmU6OkludFBvaW50IG9yaWdpbikKIAogICAgICMgRmluZC4KLSAg
ICBGaW5kU3RyaW5nKFdURjo6U3RyaW5nIHN0cmluZywgdWludDMyX3QgZmluZERpcmVjdGlvbiwg
dWludDMyX3QgZmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCisgICAgRmluZFN0
cmluZyhXVEY6OlN0cmluZyBzdHJpbmcsIHVpbnQzMl90IGZpbmRPcHRpb25zLCB1bnNpZ25lZCBt
YXhNYXRjaENvdW50KQogICAgIEhpZGVGaW5kVUkoKQotICAgIENvdW50U3RyaW5nTWF0Y2hlcyhX
VEY6OlN0cmluZyBzdHJpbmcsIGJvb2wgY2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRj
aENvdW50KQorICAgIENvdW50U3RyaW5nTWF0Y2hlcyhXVEY6OlN0cmluZyBzdHJpbmcsIHVpbnQz
Ml90IGZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogCiAgICAgIyBQb3B1cCBt
ZW51LgogICAgIERpZENoYW5nZVNlbGVjdGVkSW5kZXhGb3JBY3RpdmVQb3B1cE1lbnUoaW50MzJf
dCBuZXdJbmRleCk7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzI2OTYpCisrKyBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEwLTExLTI0ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2ViS2l0IE1hYyBwYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS84NjUw
MDg1PiBhZGRpbmcgd29yZC1wcmVmaXggc2VhcmNoIG9wdGlvbnMgdG8gdGhlIHRleHQgc2VhcmNo
IEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUw
MDM4CisgICAgICAgIEJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBEYXJpbiBBZGxlci4KKworICAgICAg
ICAqIFdlYlZpZXcvV2ViRG9jdW1lbnRJbnRlcm5hbC5oOiBSZW1vdmVkIC1tYXJrQWxsTWF0Y2hl
c0ZvclRleHQ6Y2FzZVNlbnNpdGl2ZTpsaW1pdDogYW5kCisgICAgICAgIHJlcGxhY2VkIC1jb3Vu
dE1hdGNoZXNGb3JUZXh0OmNhc2VTZW5zaXRpdmU6bGltaXQ6bWFya01hdGNoZXM6IHdpdGggYSBX
ZWJGaW5kT3B0aW9ucy1iYXNlZAorICAgICAgICBtZXRob2QuIERlY2xhcmVkIGEgV2ViRG9jdW1l
bnRPcHRpb25zU2VhcmNoaW5nIHByb3RvY29sIHdpdGggYSBuZXcgLWZpbmRTdHJpbmc6b3B0aW9u
czoKKyAgICAgICAgbWV0aG9kLiBNYWRlIFdlYkhUTUxWaWV3IGNvbmZvcm0gdG8gdGhlIG5ldyBw
cm90b2NvbC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoY29y
ZU9wdGlvbnMpOiBBZGRlZC4gQ29udmVydHMgV2ViRmluZE9wdGlvbnMgdG8gV2ViQ29yZSBGaW5k
T3B0aW9ucy4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2VhcmNoRm9yOmRpcmVjdGlvbjpjYXNl
U2Vuc2l0aXZlOndyYXA6c3RhcnRJblNlbGVjdGlvbjpdKTogQ2hhbmdlZCB0byB1c2UKKyAgICAg
ICAgLWZpbmRTdHJpbmc6b3B0aW9uczouCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGNvdW50TWF0
Y2hlc0ZvclRleHQ6b3B0aW9uczpsaW1pdDptYXJrTWF0Y2hlczpdKTogQ2hhbmdlZCB0byB1c2Ug
V2ViRmluZE9wdGlvbnMuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGZpbmRTdHJpbmc6b3B0aW9u
czpdKTogQWRkZWQuIENhbGxzIHRocm91Z2ggdG8gV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5n
KCkuCisgICAgICAgICogV2ViVmlldy9XZWJQREZWaWV3Lm1tOgorICAgICAgICAoLVtXZWJQREZW
aWV3IGNvdW50TWF0Y2hlc0ZvclRleHQ6b3B0aW9uczpsaW1pdDptYXJrTWF0Y2hlczpdKTogQ2hh
bmdlZCB0byB1c2UgV2ViRmluZE9wdGlvbnMuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1t
OgorICAgICAgICAoLVtXZWJWaWV3IG1hcmtBbGxNYXRjaGVzRm9yVGV4dDpjYXNlU2Vuc2l0aXZl
OmhpZ2hsaWdodDpsaW1pdDpdKTogTm93IGNhbGxzIHRocm91Z2ggdG8KKyAgICAgICAgLWNvdW50
TWF0Y2hlc0ZvclRleHQ6b3B0aW9uczpoaWdobGlnaHQ6bGltaXQ6bWFya01hdGNoZXMuCisgICAg
ICAgICgtW1dlYlZpZXcgY291bnRNYXRjaGVzRm9yVGV4dDpjYXNlU2Vuc2l0aXZlOmhpZ2hsaWdo
dDpsaW1pdDptYXJrTWF0Y2hlczpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgc2VhcmNo
Rm9yOmRpcmVjdGlvbjpjYXNlU2Vuc2l0aXZlOndyYXA6c3RhcnRJblNlbGVjdGlvbjpdKTogTm93
IGNhbGxzIHRocm91Z2ggdG8KKyAgICAgICAgLWZpbmRTdHJpbmc6b3B0aW9uczouCisgICAgICAg
IChpbmNyZW1lbnRGcmFtZSk6IENoYW5nZWQgdG8gdXNlIFdlYkZpbmRPcHRpb25zLgorICAgICAg
ICAoZmluZFN0cmluZyk6IEFkZGVkIHRoaXMgaGVscGVyIG1ldGhvZCB0aGF0IHBlcmZvcm1zIHRo
ZSBzZWFyY2ggdXNpbmcgdGhlIGJlc3Qgc3VwcG9ydGVkCisgICAgICAgIG1ldGhvZCBmb3IgdGhl
IGRvY3VtZW50IHZpZXcuCisgICAgICAgICgtW1dlYlZpZXcgZmluZFN0cmluZzpvcHRpb25zOl0p
OiBDaGFuZ2VkIC1zZWFyY2hGb3I6Ojo6OiBpbnRvIHRoaXMuCisgICAgICAgICgtW1dlYlZpZXcg
Y2FuTWFya0FsbFRleHRNYXRjaGVzXSk6CisgICAgICAgICgtW1dlYlZpZXcgY291bnRNYXRjaGVz
Rm9yVGV4dDpvcHRpb25zOmhpZ2hsaWdodDpsaW1pdDptYXJrTWF0Y2hlczpdKTogVXBkYXRlZCB0
byB1c2UKKyAgICAgICAgV2ViRmluZE9wdGlvbnMuCisgICAgICAgICgtW1dlYlZpZXcgdW5tYXJr
QWxsVGV4dE1hdGNoZXNdKTogVXBkYXRlZCBmb3IgY2hhbmdlIHRvIGluY3JlbWVudEZyYW1lLgor
ICAgICAgICAoLVtXZWJWaWV3IHJlY3RzRm9yVGV4dE1hdGNoZXNdKTogRGl0dG8uCisgICAgICAg
ICogV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oOiBBZGRlZCBXZWJGaW5kT3B0aW9ucywgLWZpbmRT
dHJpbmc6b3B0aW9uczosIGFuZCBXZWJGaW5kT3B0aW9ucyB2ZXJzaW9uCisgICAgICAgIG9mIGNv
dW50TWF0Y2hlc0ZvclRleHQ6LgorCiAyMDEwLTExLTIyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCkluZGV4OiBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRG9jdW1lbnRJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJEb2N1bWVudEludGVybmFsLmgJKHJldmlzaW9uIDcyNTQ2KQorKysg
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkRvY3VtZW50SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW1wb3J0IDxXZWJLaXQvV2ViRG9jdW1lbnRQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViSFRNTFZpZXcuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJWaWV3
UHJpdmF0ZS5oPgogCiAjaWYgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8PSBNQUNfT1Nf
WF9WRVJTSU9OXzEwXzQKICNkZWZpbmUgV2ViTlNVSW50ZWdlciB1bnNpZ25lZCBpbnQKQEAgLTYx
LDEyICs2MiwxNCBAQAogQHByb3RvY29sIFdlYk11bHRpcGxlVGV4dE1hdGNoZXMgPE5TT2JqZWN0
PgogLSAodm9pZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOihCT09MKW5ld1Zh
bHVlOwogLSAoQk9PTCltYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOwotLSAoV2ViTlNV
SW50ZWdlciltYXJrQWxsTWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5z
aXRpdmU6KEJPT0wpY2FzZUZsYWcgbGltaXQ6KFdlYk5TVUludGVnZXIpbGltaXQ7Ci0tIChXZWJO
U1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5z
aXRpdmU6KEJPT0wpY2FzZUZsYWcgbGltaXQ6KFdlYk5TVUludGVnZXIpbGltaXQgbWFya01hdGNo
ZXM6KEJPT0wpbWFya01hdGNoZXM7CistIChXZWJOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRl
eHQ6KE5TU3RyaW5nICopc3RyaW5nIG9wdGlvbnM6KFdlYkZpbmRPcHRpb25zKW9wdGlvbnMgbGlt
aXQ6KFdlYk5TVUludGVnZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wpbWFya01hdGNoZXM7CiAt
ICh2b2lkKXVubWFya0FsbFRleHRNYXRjaGVzOwogLSAoTlNBcnJheSAqKXJlY3RzRm9yVGV4dE1h
dGNoZXM7CiBAZW5kCiAKK0Bwcm90b2NvbCBXZWJEb2N1bWVudE9wdGlvbnNTZWFyY2hpbmcgPE5T
T2JqZWN0PgorLSAoQk9PTClmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBvcHRpb25zOihX
ZWJGaW5kT3B0aW9ucylvcHRpb25zOworQGVuZAogCiAvKiBVc2VkIHRvIHNhdmUgYW5kIHJlc3Rv
cmUgc3RhdGUgaW4gdGhlIHZpZXcsIHR5cGljYWxseSB3aGVuIGdvaW5nIGJhY2svZm9yd2FyZCAq
LwogQHByb3RvY29sIF9XZWJEb2N1bWVudFZpZXdTdGF0ZSA8TlNPYmplY3Q+CkBAIC03Niw3ICs3
OSw3IEBACiAtICh2b2lkKXNldFZpZXdTdGF0ZTooaWQpc3RhdGVQTGlzdDsKIEBlbmQKIAotQGlu
dGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViRG9jdW1lbnRJbnRlcm5hbFByb3RvY29scykgPFdlYkRv
Y3VtZW50RWxlbWVudCwgV2ViTXVsdGlwbGVUZXh0TWF0Y2hlcz4KK0BpbnRlcmZhY2UgV2ViSFRN
TFZpZXcgKFdlYkRvY3VtZW50SW50ZXJuYWxQcm90b2NvbHMpIDxXZWJEb2N1bWVudEVsZW1lbnQs
IFdlYk11bHRpcGxlVGV4dE1hdGNoZXMsIFdlYkRvY3VtZW50T3B0aW9uc1NlYXJjaGluZz4KIEBl
bmQKIAogI3VuZGVmIFdlYk5TVUludGVnZXIKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0JKHJldmlzaW9uIDcyNTQ2KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC01MjUsNiArNTI1LDE2IEBAIHN0YXRpYyBOU0NlbGxTdGF0ZVZh
bHVlIGtpdChUcmlTdGF0ZSBzdGEKICAgICByZXR1cm4gTlNPZmZTdGF0ZTsKIH0KIAorc3RhdGlj
IEZpbmRPcHRpb25zIGNvcmVPcHRpb25zKFdlYkZpbmRPcHRpb25zIG9wdGlvbnMpCit7CisgICAg
cmV0dXJuIChvcHRpb25zICYgV2ViRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUgPyBDYXNlSW5z
ZW5zaXRpdmUgOiAwKQorICAgICAgICB8IChvcHRpb25zICYgV2ViRmluZE9wdGlvbnNBdFdvcmRT
dGFydHMgPyBBdFdvcmRTdGFydHMgOiAwKQorICAgICAgICB8IChvcHRpb25zICYgV2ViRmluZE9w
dGlvbnNUcmVhdE1lZGlhbENhcEFzV29yZFN0YXJ0ID8gVHJlYXRNZWRpYWxDYXBBc1dvcmRTdGFy
dCA6IDApCisgICAgICAgIHwgKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc0JhY2t3YXJkcyA/IEJh
Y2t3YXJkcyA6IDApCisgICAgICAgIHwgKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc1dyYXBBcm91
bmQgPyBXcmFwQXJvdW5kIDogMCkKKyAgICAgICAgfCAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25z
U3RhcnRJblNlbGVjdGlvbiA/IFN0YXJ0SW5TZWxlY3Rpb24gOiAwKTsKK30KKwogQGltcGxlbWVu
dGF0aW9uIFdlYkhUTUxWaWV3UHJpdmF0ZQogCiArICh2b2lkKWluaXRpYWxpemUKQEAgLTYxOTYs
MTAgKzYyMDYsNyBAQCAtIChCT09MKXN1cHBvcnRzVGV4dEVuY29kaW5nCiAKIC0gKEJPT0wpc2Vh
cmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vu
c2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcgc3RhcnRJblNlbGVjdGlv
bjooQk9PTClzdGFydEluU2VsZWN0aW9uCiB7Ci0gICAgaWYgKCFbc3RyaW5nIGxlbmd0aF0pCi0g
ICAgICAgIHJldHVybiBOTzsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmZpbmRT
dHJpbmcoc3RyaW5nLCBmb3J3YXJkLCBjYXNlRmxhZywgd3JhcEZsYWcsIHN0YXJ0SW5TZWxlY3Rp
b24pOworICAgIHJldHVybiBbc2VsZiBmaW5kU3RyaW5nOnN0cmluZyBvcHRpb25zOihmb3J3YXJk
ID8gMCA6IFdlYkZpbmRPcHRpb25zQmFja3dhcmRzKSB8IChjYXNlRmxhZyA/IDAgOiBXZWJGaW5k
T3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkgfCAoc3RhcnRJblNlbGVjdGlvbiA/IFdlYkZpbmRPcHRp
b25zU3RhcnRJblNlbGVjdGlvbiA6IDApXTsKIH0KIAogQGVuZApAQCAtNjIxOSwxNyArNjIyNiwx
MiBAQCAtIChOU0RpY3Rpb25hcnkgKillbGVtZW50QXRQb2ludDooTlNQb2luCiAgICAgcmV0dXJu
IFtbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhpdFRlc3RSZXN1bHQ6Y29y
ZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQoSW50UG9pbnQocG9p
bnQpLCBhbGxvdyldIGF1dG9yZWxlYXNlXTsKIH0KIAotLSAoTlNVSW50ZWdlciltYXJrQWxsTWF0
Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZs
YWcgbGltaXQ6KE5TVUludGVnZXIpbGltaXQKLXsKLSAgICByZXR1cm4gW3NlbGYgY291bnRNYXRj
aGVzRm9yVGV4dDpzdHJpbmcgY2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyBsaW1pdDpsaW1pdCBtYXJr
TWF0Y2hlczpZRVNdOwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5T
U3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgbGltaXQ6KE5TVUlu
dGVnZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wpbWFya01hdGNoZXMKKy0gKE5TVUludGVnZXIp
Y291bnRNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczooV2ViRmluZE9w
dGlvbnMpb3B0aW9ucyBsaW1pdDooTlNVSW50ZWdlcilsaW1pdCBtYXJrTWF0Y2hlczooQk9PTClt
YXJrTWF0Y2hlcwogewogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29y
ZUZyYW1lLT5lZGl0b3IoKS0+Y291bnRNYXRjaGVzRm9yVGV4dChzdHJpbmcsIGNhc2VGbGFnLCBs
aW1pdCwgbWFya01hdGNoZXMpOworICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb3Vu
dE1hdGNoZXNGb3JUZXh0KHN0cmluZywgY29yZU9wdGlvbnMob3B0aW9ucyksIGxpbWl0LCBtYXJr
TWF0Y2hlcyk7CiB9CiAKIC0gKHZvaWQpc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRl
ZDooQk9PTCluZXdWYWx1ZQpAQCAtNjI3NCw2ICs2Mjc2LDE0IEBAIC0gKE5TQXJyYXkgKilyZWN0
c0ZvclRleHRNYXRjaGVzCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLSAoQk9PTClmaW5kU3Ry
aW5nOihOU1N0cmluZyAqKXN0cmluZyBvcHRpb25zOihXZWJGaW5kT3B0aW9ucylvcHRpb25zCit7
CisgICAgaWYgKCFbc3RyaW5nIGxlbmd0aF0pCisgICAgICAgIHJldHVybiBOTzsKKyAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1l
ICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoc3RyaW5nLCBjb3JlT3B0aW9ucyhv
cHRpb25zKSk7Cit9CisKIEBlbmQKIAogLy8gVGhpcyBpcyB1c2VkIGJ5IEFwcEtpdCBhbmQgaXMg
aW5jbHVkZWQgaGVyZSBzbyB0aGF0IFdlYkRhdGFQcm90b2NvbFNjaGVtZSBpcyBvbmx5IGRlZmlu
ZWQgb25jZS4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCShyZXZpc2lvbiA3MjU0NikK
KysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02
MjYsMTkgKzYyNiwxMyBAQCAtIChCT09MKW1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQK
ICAgICByZXR1cm4gTk87CiB9CiAKLS0gKE5TVUludGVnZXIpbWFya0FsbE1hdGNoZXNGb3JUZXh0
OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGxpbWl0OihO
U1VJbnRlZ2VyKWxpbWl0Ci17Ci0gICAgcmV0dXJuIFtzZWxmIGNvdW50TWF0Y2hlc0ZvclRleHQ6
c3RyaW5nIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWcgbGltaXQ6bGltaXQgbWFya01hdGNoZXM6WUVT
XTsKLX0KLQotLSAoTlNVSW50ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0
cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGxpbWl0OihOU1VJbnRlZ2VyKWxpbWl0
IG1hcmtNYXRjaGVzOihCT09MKW1hcmtNYXRjaGVzCistIChOU1VJbnRlZ2VyKWNvdW50TWF0Y2hl
c0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIG9wdGlvbnM6KFdlYkZpbmRPcHRpb25zKW9wdGlv
bnMgbGltaXQ6KE5TVUludGVnZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wpbWFya01hdGNoZXMK
IHsKICAgICBQREZTZWxlY3Rpb24gKnByZXZpb3VzTWF0Y2ggPSBuaWw7Ci0gICAgUERGU2VsZWN0
aW9uICpuZXh0TWF0Y2ggPSBuaWw7CiAgICAgTlNNdXRhYmxlQXJyYXkgKm1hdGNoZXMgPSBbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmxpbWl0XTsKICAgICAKICAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIG5leHRNYXRjaCA9IFtzZWxmIF9uZXh0TWF0Y2hGb3I6c3RyaW5n
IGRpcmVjdGlvbjpZRVMgY2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyB3cmFwOk5PIGZyb21TZWxlY3Rp
b246cHJldmlvdXNNYXRjaCBzdGFydEluU2VsZWN0aW9uOk5PXTsKKyAgICAgICAgUERGU2VsZWN0
aW9uICpuZXh0TWF0Y2ggPSBbc2VsZiBfbmV4dE1hdGNoRm9yOnN0cmluZyBkaXJlY3Rpb246WUVT
IGNhc2VTZW5zaXRpdmU6IShvcHRpb25zICYgV2ViRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUp
IHdyYXA6Tk8gZnJvbVNlbGVjdGlvbjpwcmV2aW91c01hdGNoIHN0YXJ0SW5TZWxlY3Rpb246Tk9d
OwogICAgICAgICBpZiAoIW5leHRNYXRjaCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAK
SW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA3MjU0NikKKysrIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQ1LDYgKzI2NDUsMjEgQEAg
LSAoZmxvYXQpX3ZpZXdTY2FsZUZhY3RvcgogICAgIHJldHVybiBjb3JlRnJhbWUtPnBhZ2VTY2Fs
ZUZhY3RvcigpOwogfQogCistIChOU1VJbnRlZ2VyKW1hcmtBbGxNYXRjaGVzRm9yVGV4dDooTlNT
dHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyBoaWdobGlnaHQ6KEJP
T0wpaGlnaGxpZ2h0IGxpbWl0OihOU1VJbnRlZ2VyKWxpbWl0Cit7CisgICAgcmV0dXJuIFtzZWxm
IGNvdW50TWF0Y2hlc0ZvclRleHQ6c3RyaW5nIG9wdGlvbnM6KGNhc2VGbGFnID8gMCA6IFdlYkZp
bmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlKSBoaWdobGlnaHQ6aGlnaGxpZ2h0IGxpbWl0OmxpbWl0
IG1hcmtNYXRjaGVzOllFU107Cit9CisKKy0gKE5TVUludGVnZXIpY291bnRNYXRjaGVzRm9yVGV4
dDooTlNTdHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyBoaWdobGln
aHQ6KEJPT0wpaGlnaGxpZ2h0IGxpbWl0OihOU1VJbnRlZ2VyKWxpbWl0IG1hcmtNYXRjaGVzOihC
T09MKW1hcmtNYXRjaGVzCit7CisgICAgcmV0dXJuIFtzZWxmIGNvdW50TWF0Y2hlc0ZvclRleHQ6
c3RyaW5nIG9wdGlvbnM6KGNhc2VGbGFnID8gMCA6IFdlYkZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0
aXZlKSBoaWdobGlnaHQ6aGlnaGxpZ2h0IGxpbWl0OmxpbWl0IG1hcmtNYXRjaGVzOm1hcmtNYXRj
aGVzXTsKK30KKworLSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlv
bjooQk9PTClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3
cmFwRmxhZyBzdGFydEluU2VsZWN0aW9uOihCT09MKXN0YXJ0SW5TZWxlY3Rpb24KK3sKKyAgICBy
ZXR1cm4gW3NlbGYgZmluZFN0cmluZzpzdHJpbmcgb3B0aW9uczooKGZvcndhcmQgPyAwIDogV2Vi
RmluZE9wdGlvbnNCYWNrd2FyZHMpIHwgKGNhc2VGbGFnID8gMCA6IFdlYkZpbmRPcHRpb25zQ2Fz
ZUluc2Vuc2l0aXZlKSB8ICh3cmFwRmxhZyA/IFdlYkZpbmRPcHRpb25zV3JhcEFyb3VuZCA6IDAp
IHwgKHN0YXJ0SW5TZWxlY3Rpb24gPyBXZWJGaW5kT3B0aW9uc1N0YXJ0SW5TZWxlY3Rpb24gOiAw
KSldOworfQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBfV2ViU2FmZUZvcndhcmRlcgpAQCAt
MzgyNCwxMiArMzgzOSwxMiBAQCAtICh2b2lkKXNldE5leHRLZXlWaWV3OihOU1ZpZXcgKil2aWV3
CiAgICAgW3N1cGVyIHNldE5leHRLZXlWaWV3OnZpZXddOwogfQogCi1zdGF0aWMgV2ViRnJhbWUg
KmluY3JlbWVudEZyYW1lKFdlYkZyYW1lICpmcmFtZSwgQk9PTCBmb3J3YXJkLCBCT09MIHdyYXBG
bGFnKQorc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZSAqZnJhbWUsIFdl
YkZpbmRPcHRpb25zIG9wdGlvbnMgPSAwKQogewogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KGZyYW1lKTsKLSAgICByZXR1cm4ga2l0KGZvcndhcmQKLSAgICAgICAgPyBjb3JlRnJhbWUtPnRy
ZWUoKS0+dHJhdmVyc2VOZXh0V2l0aFdyYXAod3JhcEZsYWcpCi0gICAgICAgIDogY29yZUZyYW1l
LT50cmVlKCktPnRyYXZlcnNlUHJldmlvdXNXaXRoV3JhcCh3cmFwRmxhZykpOworICAgIHJldHVy
biBraXQoKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc0JhY2t3YXJkcykKKyAgICAgICAgPyBjb3Jl
RnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VQcmV2aW91c1dpdGhXcmFwKG9wdGlvbnMgJiBXZWJGaW5k
T3B0aW9uc1dyYXBBcm91bmQpCisgICAgICAgIDogY29yZUZyYW1lLT50cmVlKCktPnRyYXZlcnNl
TmV4dFdpdGhXcmFwKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc1dyYXBBcm91bmQpKTsKIH0KIAog
LSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3
YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZwpAQCAt
NDI1NSw3ICs0MjcwLDE2IEBAIC0gKHZvaWQpdW5zY2hlZHVsZUZyb21SdW5Mb29wOihOU1J1bkxv
b3AKICAgICAgICAgY29yZShzZWxmKS0+cmVtb3ZlU2NoZWR1bGVQYWlyKFNjaGVkdWxlUGFpcjo6
Y3JlYXRlKHJ1bkxvb3AsIChDRlN0cmluZ1JlZiltb2RlKSk7CiB9CiAKLS0gKEJPT0wpc2VhcmNo
Rm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0
aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcgc3RhcnRJblNlbGVjdGlvbjoo
Qk9PTClzdGFydEluU2VsZWN0aW9uCitzdGF0aWMgQk9PTCBmaW5kU3RyaW5nKE5TVmlldyA8V2Vi
RG9jdW1lbnRTZWFyY2hpbmc+ICpzZWFyY2hWaWV3LCBOU1N0cmluZyAqc3RyaW5nLCBXZWJGaW5k
T3B0aW9ucyBvcHRpb25zKQoreworICAgIGlmIChbc2VhcmNoVmlldyBjb25mb3Jtc1RvUHJvdG9j
b2w6QHByb3RvY29sKFdlYkRvY3VtZW50T3B0aW9uc1NlYXJjaGluZyldKQorICAgICAgICByZXR1
cm4gWyhOU1ZpZXcgPFdlYkRvY3VtZW50T3B0aW9uc1NlYXJjaGluZz4gKilzZWFyY2hWaWV3IGZp
bmRTdHJpbmc6c3RyaW5nIG9wdGlvbnM6b3B0aW9uc107CisgICAgaWYgKFtzZWFyY2hWaWV3IGNv
bmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViRG9jdW1lbnRJbmNyZW1lbnRhbFNlYXJjaGlu
ZyldKQorICAgICAgICByZXR1cm4gWyhOU1ZpZXcgPFdlYkRvY3VtZW50SW5jcmVtZW50YWxTZWFy
Y2hpbmc+ICopc2VhcmNoVmlldyBzZWFyY2hGb3I6c3RyaW5nIGRpcmVjdGlvbjohKG9wdGlvbnMg
JiBXZWJGaW5kT3B0aW9uc0JhY2t3YXJkcykgY2FzZVNlbnNpdGl2ZTohKG9wdGlvbnMgJiBXZWJG
aW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkgd3JhcDohIShvcHRpb25zICYgV2ViRmluZE9wdGlv
bnNXcmFwQXJvdW5kKSBzdGFydEluU2VsZWN0aW9uOiEhKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9u
c1N0YXJ0SW5TZWxlY3Rpb24pXTsKKyAgICByZXR1cm4gW3NlYXJjaFZpZXcgc2VhcmNoRm9yOnN0
cmluZyBkaXJlY3Rpb246IShvcHRpb25zICYgV2ViRmluZE9wdGlvbnNCYWNrd2FyZHMpIGNhc2VT
ZW5zaXRpdmU6IShvcHRpb25zICYgV2ViRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpIHdyYXA6
ISEob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zV3JhcEFyb3VuZCldOworfQorCistIChCT09MKWZp
bmRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG9wdGlvbnM6KFdlYkZpbmRPcHRpb25zKW9wdGlv
bnMKIHsKICAgICBpZiAoX3ByaXZhdGUtPmNsb3NlZCkKICAgICAgICAgcmV0dXJuIE5POwpAQCAt
NDI2Nyw3ICs0MjkxLDcgQEAgLSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRp
cgogICAgIE5TVmlldyA8V2ViRG9jdW1lbnRTZWFyY2hpbmc+ICpzdGFydFNlYXJjaFZpZXcgPSBu
aWw7CiAgICAgV2ViRnJhbWUgKmZyYW1lID0gc3RhcnRGcmFtZTsKICAgICBkbyB7Ci0gICAgICAg
IFdlYkZyYW1lICpuZXh0RnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwgZm9yd2FyZCwgd3Jh
cEZsYWcpOworICAgICAgICBXZWJGcmFtZSAqbmV4dEZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJh
bWUsIG9wdGlvbnMpOwogICAgICAgICAKICAgICAgICAgQk9PTCBvbmx5T25lRnJhbWUgPSAoZnJh
bWUgPT0gbmV4dEZyYW1lKTsKICAgICAgICAgQVNTRVJUKCFvbmx5T25lRnJhbWUgfHwgZnJhbWUg
PT0gc3RhcnRGcmFtZSk7CkBAIC00Mjc5LDE4ICs0MzAzLDEzIEBAIC0gKEJPT0wpc2VhcmNoRm9y
OihOU1N0cmluZyAqKXN0cmluZyBkaXIKICAgICAgICAgICAgIGlmIChmcmFtZSA9PSBzdGFydEZy
YW1lKQogICAgICAgICAgICAgICAgIHN0YXJ0U2VhcmNoVmlldyA9IHNlYXJjaFZpZXc7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIEJPT0wgZm91bmRTdHJpbmc7CiAgICAgICAgICAgICAvLyBJ
biBzb21lIGNhc2VzIHdlIGhhdmUgdG8gc2VhcmNoIHNvbWUgY29udGVudCB0d2ljZTsgc2VlIGNv
bW1lbnQgbGF0ZXIgaW4gdGhpcyBtZXRob2QuCi0gICAgICAgICAgICAvLyBXZSBjYW4gYXZvaWQg
ZXZlciBkb2luZyB0aGlzIGluIHRoZSBjb21tb24gb25lLWZyYW1lIGNhc2UgYnkgcGFzc2luZyBZ
RVMgZm9yIHdyYXBGbGFnIAorICAgICAgICAgICAgLy8gV2UgY2FuIGF2b2lkIGV2ZXIgZG9pbmcg
dGhpcyBpbiB0aGUgY29tbW9uIG9uZS1mcmFtZSBjYXNlIGJ5IHBhc3NpbmcgdGhlIHdyYXAgb3B0
aW9uIHRocm91Z2ggCiAgICAgICAgICAgICAvLyBoZXJlLCBhbmQgdGhlbiBiYWlsaW5nIG91dCBi
ZWZvcmUgd2UgZ2V0IHRvIHRoZSBjb2RlIHRoYXQgd291bGQgc2VhcmNoIGFnYWluIGluIHRoZQog
ICAgICAgICAgICAgLy8gc2FtZSBjb250ZW50LgotICAgICAgICAgICAgQk9PTCB3cmFwT25UaGlz
UGFzcyA9IHdyYXBGbGFnICYmIG9ubHlPbmVGcmFtZTsKLSAgICAgICAgICAgIGlmIChbc2VhcmNo
VmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYkRvY3VtZW50SW5jcmVtZW50YWxT
ZWFyY2hpbmcpXSkKLSAgICAgICAgICAgICAgICBmb3VuZFN0cmluZyA9IFsoTlNWaWV3IDxXZWJE
b2N1bWVudEluY3JlbWVudGFsU2VhcmNoaW5nPiAqKXNlYXJjaFZpZXcgc2VhcmNoRm9yOnN0cmlu
ZyBkaXJlY3Rpb246Zm9yd2FyZCBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIHdyYXA6d3JhcE9uVGhp
c1Bhc3Mgc3RhcnRJblNlbGVjdGlvbjpzdGFydEluU2VsZWN0aW9uXTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBmb3VuZFN0cmluZyA9IFtzZWFyY2hWaWV3IHNlYXJjaEZvcjpz
dHJpbmcgZGlyZWN0aW9uOmZvcndhcmQgY2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyB3cmFwOndyYXBP
blRoaXNQYXNzXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZvdW5kU3RyaW5nKSB7
CisgICAgICAgICAgICBXZWJGaW5kT3B0aW9ucyBvcHRpb25zRm9yVGhpc1Bhc3MgPSBvbmx5T25l
RnJhbWUgPyBvcHRpb25zIDogKG9wdGlvbnMgJiB+V2ViRmluZE9wdGlvbnNXcmFwQXJvdW5kKTsK
KworICAgICAgICAgICAgaWYgKGZpbmRTdHJpbmcoc2VhcmNoVmlldywgc3RyaW5nLCBvcHRpb25z
Rm9yVGhpc1Bhc3MpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGZyYW1lICE9IHN0YXJ0RnJhbWUp
CiAgICAgICAgICAgICAgICAgICAgIFtzdGFydEZyYW1lIF9jbGVhclNlbGVjdGlvbl07CiAgICAg
ICAgICAgICAgICAgW1tzZWxmIHdpbmRvd10gbWFrZUZpcnN0UmVzcG9uZGVyOnNlYXJjaFZpZXdd
OwpAQCAtNDMwMywxOCArNDMyMiwxMyBAQCAtIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilz
dHJpbmcgZGlyCiAgICAgICAgIGZyYW1lID0gbmV4dEZyYW1lOwogICAgIH0gd2hpbGUgKGZyYW1l
ICYmIGZyYW1lICE9IHN0YXJ0RnJhbWUpOwogICAgIAotICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0
aXBsZSBmcmFtZXMgYW5kIHdyYXBGbGFnIGlzIHRydWUgYW5kIHdlJ3ZlIHZpc2l0ZWQgZWFjaCBv
bmUgd2l0aG91dCBmaW5kaW5nIGEgcmVzdWx0LCB3ZSBzdGlsbCBuZWVkIHRvIHNlYXJjaCBpbiB0
aGUgCisgICAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGZyYW1lcyBhbmQgV2ViRmluZE9wdGlv
bnNXcmFwQXJvdW5kIGlzIHNldCBhbmQgd2UndmUgdmlzaXRlZCBlYWNoIG9uZSB3aXRob3V0IGZp
bmRpbmcgYSByZXN1bHQsIHdlIHN0aWxsIG5lZWQgdG8gc2VhcmNoIGluIHRoZSAKICAgICAvLyBm
aXJzdC1zZWFyY2hlZCBmcmFtZSB1cCB0byB0aGUgc2VsZWN0aW9uLiBIb3dldmVyLCB0aGUgQVBJ
IGRvZXNuJ3QgcHJvdmlkZSBhIHdheSB0byBzZWFyY2ggb25seSB1cCB0byBhIHBhcnRpY3VsYXIg
cG9pbnQuIFRoZSBvbmx5IAotICAgIC8vIHdheSB0byBtYWtlIHN1cmUgdGhlIGVudGlyZSBmcmFt
ZSBpcyBzZWFyY2hlZCBpcyB0byBwYXNzIFlFUyBmb3IgdGhlIHdyYXBGbGFnLiBXaGVuIHRoZXJl
IGFyZSBubyBtYXRjaGVzLCB0aGlzIHdpbGwgc2VhcmNoIGFnYWluCisgICAgLy8gd2F5IHRvIG1h
a2Ugc3VyZSB0aGUgZW50aXJlIGZyYW1lIGlzIHNlYXJjaGVkIGlzIHRvIHBhc3MgV2ViRmluZE9w
dGlvbnNXcmFwQXJvdW5kLiBXaGVuIHRoZXJlIGFyZSBubyBtYXRjaGVzLCB0aGlzIHdpbGwgc2Vh
cmNoCiAgICAgLy8gc29tZSBjb250ZW50IHRoYXQgd2UgYWxyZWFkeSBzZWFyY2hlZCBvbiB0aGUg
Zmlyc3QgcGFzcy4gSW4gdGhlIHdvcnN0IGNhc2UsIHdlIGNvdWxkIHNlYXJjaCB0aGUgZW50aXJl
IGNvbnRlbnRzIG9mIHRoaXMgZnJhbWUgdHdpY2UuCiAgICAgLy8gVG8gZml4IHRoaXMsIHdlJ2Qg
bmVlZCB0byBhZGQgYSBtZWNoYW5pc20gdG8gc3BlY2lmeSBhIHJhbmdlIGluIHdoaWNoIHRvIHNl
YXJjaC4KLSAgICBpZiAod3JhcEZsYWcgJiYgc3RhcnRTZWFyY2hWaWV3KSB7Ci0gICAgICAgIEJP
T0wgZm91bmRTdHJpbmc7Ci0gICAgICAgIGlmIChbc3RhcnRTZWFyY2hWaWV3IGNvbmZvcm1zVG9Q
cm90b2NvbDpAcHJvdG9jb2woV2ViRG9jdW1lbnRJbmNyZW1lbnRhbFNlYXJjaGluZyldKQotICAg
ICAgICAgICAgZm91bmRTdHJpbmcgPSBbKE5TVmlldyA8V2ViRG9jdW1lbnRJbmNyZW1lbnRhbFNl
YXJjaGluZz4gKilzdGFydFNlYXJjaFZpZXcgc2VhcmNoRm9yOnN0cmluZyBkaXJlY3Rpb246Zm9y
d2FyZCBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIHdyYXA6WUVTIHN0YXJ0SW5TZWxlY3Rpb246c3Rh
cnRJblNlbGVjdGlvbl07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvdW5kU3RyaW5nID0g
W3N0YXJ0U2VhcmNoVmlldyBzZWFyY2hGb3I6c3RyaW5nIGRpcmVjdGlvbjpmb3J3YXJkIGNhc2VT
ZW5zaXRpdmU6Y2FzZUZsYWcgd3JhcDpZRVNdOwotICAgICAgICBpZiAoZm91bmRTdHJpbmcpIHsK
KyAgICBpZiAoKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc1dyYXBBcm91bmQpICYmIHN0YXJ0U2Vh
cmNoVmlldykgeworICAgICAgICBpZiAoZmluZFN0cmluZyhzdGFydFNlYXJjaFZpZXcsIHN0cmlu
Zywgb3B0aW9ucykpIHsKICAgICAgICAgICAgIFtbc2VsZiB3aW5kb3ddIG1ha2VGaXJzdFJlc3Bv
bmRlcjpzdGFydFNlYXJjaFZpZXddOwogICAgICAgICAgICAgcmV0dXJuIFlFUzsKICAgICAgICAg
fQpAQCAtNDQ5NiwyMSArNDUxMCwxMyBAQCAtIChCT09MKWNhbk1hcmtBbGxUZXh0TWF0Y2hlcwog
ICAgICAgICBpZiAodmlldyAmJiAhW3ZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChX
ZWJNdWx0aXBsZVRleHRNYXRjaGVzKV0pCiAgICAgICAgICAgICByZXR1cm4gTk87CiAgICAgICAg
IAotICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCBZRVMsIE5PKTsKKyAgICAg
ICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSk7CiAgICAgfSB3aGlsZSAoZnJhbWUpOwog
ICAgIAogICAgIHJldHVybiBZRVM7CiB9CiAKLS0gKE5TVUludGVnZXIpbWFya0FsbE1hdGNoZXNG
b3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGhp
Z2hsaWdodDooQk9PTCloaWdobGlnaHQgbGltaXQ6KE5TVUludGVnZXIpbGltaXQKLXsKLSAgICBp
ZiAoX3ByaXZhdGUtPmNsb3NlZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gW3Nl
bGYgY291bnRNYXRjaGVzRm9yVGV4dDpzdHJpbmcgY2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyBoaWdo
bGlnaHQ6aGlnaGxpZ2h0IGxpbWl0OmxpbWl0IG1hcmtNYXRjaGVzOllFU107Ci19Ci0KLS0gKE5T
VUludGVnZXIpY291bnRNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgY2FzZVNlbnNp
dGl2ZTooQk9PTCljYXNlRmxhZyBoaWdobGlnaHQ6KEJPT0wpaGlnaGxpZ2h0IGxpbWl0OihOU1VJ
bnRlZ2VyKWxpbWl0IG1hcmtNYXRjaGVzOihCT09MKW1hcmtNYXRjaGVzCistIChOU1VJbnRlZ2Vy
KWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIG9wdGlvbnM6KFdlYkZpbmRP
cHRpb25zKW9wdGlvbnMgaGlnaGxpZ2h0OihCT09MKWhpZ2hsaWdodCBsaW1pdDooTlNVSW50ZWdl
cilsaW1pdCBtYXJrTWF0Y2hlczooQk9PTCltYXJrTWF0Y2hlcwogewogICAgIGlmIChfcHJpdmF0
ZS0+Y2xvc2VkKQogICAgICAgICByZXR1cm4gMDsKQEAgLTQ1MjQsMTQgKzQ1MzAsMTQgQEAgLSAo
TlNVSW50ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0cgogICAgICAgICAgICAgICAgIFso
TlNWaWV3IDxXZWJNdWx0aXBsZVRleHRNYXRjaGVzPiopdmlldyBzZXRNYXJrZWRUZXh0TWF0Y2hl
c0FyZUhpZ2hsaWdodGVkOmhpZ2hsaWdodF07CiAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJU
KGxpbWl0ID09IDAgfHwgbWF0Y2hDb3VudCA8IGxpbWl0KTsKLSAgICAgICAgICAgIG1hdGNoQ291
bnQgKz0gWyhOU1ZpZXcgPFdlYk11bHRpcGxlVGV4dE1hdGNoZXM+Kil2aWV3IGNvdW50TWF0Y2hl
c0ZvclRleHQ6c3RyaW5nIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWcgbGltaXQ6bGltaXQgPT0gMCA/
IDAgOiBsaW1pdCAtIG1hdGNoQ291bnQgbWFya01hdGNoZXM6bWFya01hdGNoZXNdOworICAgICAg
ICAgICAgbWF0Y2hDb3VudCArPSBbKE5TVmlldyA8V2ViTXVsdGlwbGVUZXh0TWF0Y2hlcz4qKXZp
ZXcgY291bnRNYXRjaGVzRm9yVGV4dDpzdHJpbmcgb3B0aW9uczpvcHRpb25zIGxpbWl0OihsaW1p
dCA9PSAwID8gMCA6IGxpbWl0IC0gbWF0Y2hDb3VudCkgbWFya01hdGNoZXM6bWFya01hdGNoZXNd
OwogCiAgICAgICAgICAgICAvLyBTdG9wIGxvb2tpbmcgaWYgd2UndmUgcmVhY2hlZCB0aGUgbGlt
aXQuIEEgbGltaXQgb2YgMCBtZWFucyBubyBsaW1pdC4KICAgICAgICAgICAgIGlmIChsaW1pdCA+
IDAgJiYgbWF0Y2hDb3VudCA+PSBsaW1pdCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwgWUVT
LCBOTyk7CisgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUpOwogICAgIH0gd2hp
bGUgKGZyYW1lKTsKICAgICAKICAgICByZXR1cm4gbWF0Y2hDb3VudDsKQEAgLTQ1NDgsNyArNDU1
NCw3IEBAIC0gKHZvaWQpdW5tYXJrQWxsVGV4dE1hdGNoZXMKICAgICAgICAgaWYgKFt2aWV3IGNv
bmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViTXVsdGlwbGVUZXh0TWF0Y2hlcyldKQogICAg
ICAgICAgICAgWyhOU1ZpZXcgPFdlYk11bHRpcGxlVGV4dE1hdGNoZXM+Kil2aWV3IHVubWFya0Fs
bFRleHRNYXRjaGVzXTsKICAgICAgICAgCi0gICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUo
ZnJhbWUsIFlFUywgTk8pOworICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lKTsK
ICAgICB9IHdoaWxlIChmcmFtZSk7CiB9CiAKQEAgLTQ1ODYsNyArNDU5Miw3IEBAIC0gKE5TQXJy
YXkgKilyZWN0c0ZvclRleHRNYXRjaGVzCiAgICAgICAgICAgICBbcG9vbCBkcmFpbl07CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsIFlF
UywgTk8pOworICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lKTsKICAgICB9IHdo
aWxlIChmcmFtZSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFdlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiA3MjU0NikKKysrIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIGV4dGVy
biBOU1N0cmluZyAqV2ViRWxlbWVudElzQ29udGVudEVkaXQKIGV4dGVybiBOU1N0cmluZyAqV2Vi
RWxlbWVudE1lZGlhVVJMS2V5OyAgICAgICAgICAvLyBOU1VSTCBvZiB0aGUgbWVkaWEgZWxlbWVu
dAogCiAvLyBvdGhlciBXZWJFbGVtZW50RGljdGlvbmFyeSBrZXlzCi1leHRlcm4gTlNTdHJpbmcg
KldlYkVsZW1lbnRMaW5rSXNMaXZlS2V5OyAgICAgICAgLy8gTlNOdW1iZXIgb2YgQk9PTCBpbmRp
Y3RhdGluZyB3aGV0aGVyIHRoZSBsaW5rIGlzIGxpdmUgb3Igbm90CitleHRlcm4gTlNTdHJpbmcg
KldlYkVsZW1lbnRMaW5rSXNMaXZlS2V5OyAgICAgICAgLy8gTlNOdW1iZXIgb2YgQk9PTCBpbmRp
Y2F0aW5nIHdoZXRoZXIgdGhlIGxpbmsgaXMgbGl2ZSBvciBub3QKIGV4dGVybiBOU1N0cmluZyAq
V2ViRWxlbWVudElzSW5TY3JvbGxCYXJLZXk7CiAKIC8vIE9uZSBvZiB0aGUgc3Vidmlld3Mgb2Yg
dGhlIFdlYlZpZXcgZW50ZXJlZCBjb21wb3NpdGluZyBtb2RlLgpAQCAtOTYsNiArOTYsMTYgQEAg
dHlwZWRlZiBlbnVtIHsKICAgICBXZWJJbmplY3RJblRvcEZyYW1lT25seQogfSBXZWJVc2VyQ29u
dGVudEluamVjdGVkRnJhbWVzOwogCitlbnVtIHsKKyAgICBXZWJGaW5kT3B0aW9uc0Nhc2VJbnNl
bnNpdGl2ZSA9IDEgPDwgMCwKKyAgICBXZWJGaW5kT3B0aW9uc0F0V29yZFN0YXJ0cyA9IDEgPDwg
MSwKKyAgICBXZWJGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwQXNXb3JkU3RhcnQgPSAxIDw8IDIs
CisgICAgV2ViRmluZE9wdGlvbnNCYWNrd2FyZHMgPSAxIDw8IDMsCisgICAgV2ViRmluZE9wdGlv
bnNXcmFwQXJvdW5kID0gMSA8PCA0LAorICAgIFdlYkZpbmRPcHRpb25zU3RhcnRJblNlbGVjdGlv
biA9IDEgPDwgNQorfTsKK3R5cGVkZWYgTlNVSW50ZWdlciBXZWJGaW5kT3B0aW9uczsKKwogQGlu
dGVyZmFjZSBXZWJDb250cm9sbGVyIDogTlNUcmVlQ29udHJvbGxlciB7CiAgICAgSUJPdXRsZXQg
V2ViVmlldyAqd2ViVmlldzsKIH0KQEAgLTExNCwxOCArMTI0LDcgQEAgQGludGVyZmFjZSBXZWJW
aWV3IChXZWJQZW5kaW5nUHVibGljKQogLSAodm9pZClzY2hlZHVsZUluUnVuTG9vcDooTlNSdW5M
b29wICopcnVuTG9vcCBmb3JNb2RlOihOU1N0cmluZyAqKW1vZGU7CiAtICh2b2lkKXVuc2NoZWR1
bGVGcm9tUnVuTG9vcDooTlNSdW5Mb29wICopcnVuTG9vcCBmb3JNb2RlOihOU1N0cmluZyAqKW1v
ZGU7CiAKLS8qIQotQG1ldGhvZCBzZWFyY2hGb3I6ZGlyZWN0aW9uOmNhc2VTZW5zaXRpdmU6d3Jh
cDpzdGFydEluU2VsZWN0aW9uOgotIEBhYnN0cmFjdCBTZWFyY2hlcyBhIGRvY3VtZW50IHZpZXcg
Zm9yIGEgc3RyaW5nIGFuZCBoaWdobGlnaHRzIHRoZSBzdHJpbmcgaWYgaXQgaXMgZm91bmQuCi0g
U3RhcnRzIHRoZSBzZWFyY2ggZnJvbSB0aGUgY3VycmVudCBzZWxlY3Rpb24uICBXaWxsIHNlYXJj
aCBhY3Jvc3MgYWxsIGZyYW1lcy4KLSBAcGFyYW0gc3RyaW5nIFRoZSBzdHJpbmcgdG8gc2VhcmNo
IGZvci4KLSBAcGFyYW0gZm9yd2FyZCBZRVMgdG8gc2VhcmNoIGZvcndhcmQsIE5PIHRvIHNlYWNo
IGJhY2t3YXJkcy4KLSBAcGFyYW0gY2FzZUZsYWcgWUVTIHRvIGZvciBjYXNlLXNlbnNpdGl2ZSBz
ZWFyY2gsIE5PIGZvciBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4KLSBAcGFyYW0gd3JhcEZsYWcg
WUVTIHRvIHdyYXAgYXJvdW5kLCBOTyB0byBhdm9pZCB3cmFwcGluZy4KLSBAcGFyYW0gc3RhcnRJ
blNlbGVjdGlvbiBZRVMgdG8gYmVnaW4gc2VhcmNoIGluIHRoZSBzZWxlY3RlZCB0ZXh0ICh1c2Vm
dWwgZm9yIGluY3JlbWVudGFsIHNlYXJjaGluZyksIE5PIHRvIGJlZ2luIHNlYXJjaCBhZnRlciB0
aGUgc2VsZWN0ZWQgdGV4dC4KLSBAcmVzdWx0IFlFUyBpZiBmb3VuZCwgTk8gaWYgbm90IGZvdW5k
LgotICovCi0tIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihC
T09MKWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBG
bGFnIHN0YXJ0SW5TZWxlY3Rpb246KEJPT0wpc3RhcnRJblNlbGVjdGlvbjsKKy0gKEJPT0wpZmlu
ZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczooV2ViRmluZE9wdGlvbnMpb3B0aW9u
czsKIAogLSAodm9pZClzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5OihCT09MKW1haW5GcmFtZURv
Y3VtZW50UmVhZHk7CiAKQEAgLTE4Miw4ICsxODEsNyBAQCBAaW50ZXJmYWNlIFdlYlZpZXcgKFdl
YlBlbmRpbmdQdWJsaWMpCiAvLyB3aGV0aGVyIG9yIG5vdCB0aGV5IGltcGxlbWVudCB0aGUgcHJv
dG9jb2wuIEZvciBub3cgd2UnbGwganVzdCBkZWFsIHdpdGggSFRNTC4KIC8vIFRoZXNlIG1ldGhv
ZHMgYXJlIHN0aWxsIGluIGZsdXg7IGRvbid0IHJlbHkgb24gdGhlbSB5ZXQuCiAtIChCT09MKWNh
bk1hcmtBbGxUZXh0TWF0Y2hlczsKLS0gKFdlYk5TVUludGVnZXIpbWFya0FsbE1hdGNoZXNGb3JU
ZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGhpZ2hs
aWdodDooQk9PTCloaWdobGlnaHQgbGltaXQ6KFdlYk5TVUludGVnZXIpbGltaXQ7Ci0tIChXZWJO
U1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5z
aXRpdmU6KEJPT0wpY2FzZUZsYWcgaGlnaGxpZ2h0OihCT09MKWhpZ2hsaWdodCBsaW1pdDooV2Vi
TlNVSW50ZWdlcilsaW1pdCBtYXJrTWF0Y2hlczooQk9PTCltYXJrTWF0Y2hlczsKKy0gKFdlYk5T
VUludGVnZXIpY291bnRNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczoo
V2ViRmluZE9wdGlvbnMpb3B0aW9ucyBoaWdobGlnaHQ6KEJPT0wpaGlnaGxpZ2h0IGxpbWl0OihX
ZWJOU1VJbnRlZ2VyKWxpbWl0IG1hcmtNYXRjaGVzOihCT09MKW1hcmtNYXRjaGVzOwogLSAodm9p
ZCl1bm1hcmtBbGxUZXh0TWF0Y2hlczsKIC0gKE5TQXJyYXkgKilyZWN0c0ZvclRleHRNYXRjaGVz
OwogCkBAIC01NDUsNiArNTQzLDI0IEBAIENvdWxkIGJlIHdvcnRoIGFkZGluZyB0byB0aGUgQVBJ
LgogLSAodm9pZClfc2NhbGVXZWJWaWV3OihmbG9hdClzY2FsZSBhdE9yaWdpbjooTlNQb2ludClv
cmlnaW47CiAtIChmbG9hdClfdmlld1NjYWxlRmFjdG9yOwogCisvLyBEZXByZWNhdGVkLiBVc2Ug
dGhlIG1ldGhvZHMgaW4gcGVuZGluZyBwdWJsaWMgYWJvdmUgaW5zdGVhZC4KKy0gKFdlYk5TVUlu
dGVnZXIpbWFya0FsbE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0
aXZlOihCT09MKWNhc2VGbGFnIGhpZ2hsaWdodDooQk9PTCloaWdobGlnaHQgbGltaXQ6KFdlYk5T
VUludGVnZXIpbGltaXQ7CistIChXZWJOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5T
U3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgaGlnaGxpZ2h0OihC
T09MKWhpZ2hsaWdodCBsaW1pdDooV2ViTlNVSW50ZWdlcilsaW1pdCBtYXJrTWF0Y2hlczooQk9P
TCltYXJrTWF0Y2hlczsKKworLyohCisgQG1ldGhvZCBzZWFyY2hGb3I6ZGlyZWN0aW9uOmNhc2VT
ZW5zaXRpdmU6d3JhcDpzdGFydEluU2VsZWN0aW9uOgorIEBhYnN0cmFjdCBTZWFyY2hlcyBhIGRv
Y3VtZW50IHZpZXcgZm9yIGEgc3RyaW5nIGFuZCBoaWdobGlnaHRzIHRoZSBzdHJpbmcgaWYgaXQg
aXMgZm91bmQuCisgU3RhcnRzIHRoZSBzZWFyY2ggZnJvbSB0aGUgY3VycmVudCBzZWxlY3Rpb24u
ICBXaWxsIHNlYXJjaCBhY3Jvc3MgYWxsIGZyYW1lcy4KKyBAcGFyYW0gc3RyaW5nIFRoZSBzdHJp
bmcgdG8gc2VhcmNoIGZvci4KKyBAcGFyYW0gZm9yd2FyZCBZRVMgdG8gc2VhcmNoIGZvcndhcmQs
IE5PIHRvIHNlYWNoIGJhY2t3YXJkcy4KKyBAcGFyYW0gY2FzZUZsYWcgWUVTIHRvIGZvciBjYXNl
LXNlbnNpdGl2ZSBzZWFyY2gsIE5PIGZvciBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4KKyBAcGFy
YW0gd3JhcEZsYWcgWUVTIHRvIHdyYXAgYXJvdW5kLCBOTyB0byBhdm9pZCB3cmFwcGluZy4KKyBA
cGFyYW0gc3RhcnRJblNlbGVjdGlvbiBZRVMgdG8gYmVnaW4gc2VhcmNoIGluIHRoZSBzZWxlY3Rl
ZCB0ZXh0ICh1c2VmdWwgZm9yIGluY3JlbWVudGFsIHNlYXJjaGluZyksIE5PIHRvIGJlZ2luIHNl
YXJjaCBhZnRlciB0aGUgc2VsZWN0ZWQgdGV4dC4KKyBAcmVzdWx0IFlFUyBpZiBmb3VuZCwgTk8g
aWYgbm90IGZvdW5kLgorICovCisvLyBEZXByZWNhdGVkLiBVc2UgZmluZFN0cmluZy4KKy0gKEJP
T0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2FyZCBj
YXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcgc3RhcnRJblNl
bGVjdGlvbjooQk9PTClzdGFydEluU2VsZWN0aW9uOworCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2Vi
VmlldyAoV2ViVmlld1ByaW50aW5nUHJpdmF0ZSkKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyNjk2KQor
KysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMTEtMjQgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEdW1wUmVuZGVyVHJlZSBjaGFu
Z2VzIGZvciB0ZXN0aW5nIHRoZSB0ZXh0IHNlYXJjaCBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDAzOAorCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoZmluZFN0cmluZ0NhbGxi
YWNrKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcpOgorICAgICAgICAqIE1pbmlCcm93
c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tOgorICAgICAgICAoLVtCcm93c2VyV2lu
ZG93Q29udHJvbGxlciBmaW5kOl0pOgorCiAyMDEwLTExLTI0ICBNaWhhaSBQYXJwYXJpdGEgIDxt
aWhhaXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJ
bmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gNzI1NDYpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Miw2ICs0NDIs
MjIgQEAgc3RhdGljIEpTVmFsdWVSZWYgZXhlY0NvbW1hbmRDYWxsYmFjayhKUwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYg
ZmluZFN0cmluZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAv
LyBIYXMgTWFjIGltcGxlbWVudGF0aW9uLgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IHRhcmdldChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7
CisKKyAgICBKU09iamVjdFJlZiBvcHRpb25zID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFy
Z3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBjb250cm9sbGVyLT5maW5kU3RyaW5nKGNvbnRl
eHQsIHRhcmdldC5nZXQoKSwgb3B0aW9ucykpOworfQorCiBzdGF0aWMgSlNWYWx1ZVJlZiBjb3Vu
dGVyVmFsdWVGb3JFbGVtZW50QnlJZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKIHsKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCkBAIC0xOTE0LDYgKzE5MzAsNyBAQCBK
U1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6CiAgICAgICAgIHsgImV2YWx1
YXRlSW5XZWJJbnNwZWN0b3IiLCBldmFsdWF0ZUluV2ViSW5zcGVjdG9yQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQiLCBldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImV4ZWNDb21t
YW5kIiwgZXhlY0NvbW1hbmRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJmaW5kU3RyaW5n
IiwgZmluZFN0cmluZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImNvdW50ZXJWYWx1ZUZv
ckVsZW1lbnRCeUlkIiwgY291bnRlclZhbHVlRm9yRWxlbWVudEJ5SWRDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7ICJncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uIiwgZ3JhbnRE
ZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sIAogICAgICAgICB7
ICJoYXNTcGVsbGluZ01hcmtlciIsIGhhc1NwZWxsaW5nTWFya2VyQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
SW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuaAkocmV2aXNpb24gNzI1NDYpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMSArNTIsMTIgQEAg
cHVibGljOgogICAgIGJvb2wgY2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCk7CiAgICAgSlNTdHJp
bmdSZWYgY29weURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKTsKICAgICBKU1N0cmlu
Z1JlZiBjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpOworICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBjb3VudGVyVmFsdWVGb3JFbGVtZW50QnlJZChKU1N0cmluZ1JlZiBp
ZCk7CiAgICAgdm9pZCBkaXNhYmxlSW1hZ2VMb2FkaW5nKCk7CiAgICAgdm9pZCBkaXNwYXRjaFBl
bmRpbmdMb2FkUmVxdWVzdHMoKTsKICAgICB2b2lkIGRpc3BsYXkoKTsKICAgICB2b2lkIGV4ZWND
b21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKTsKLSAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gY291bnRlclZhbHVlRm9yRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYg
aWQpOworICAgIGJvb2wgZmluZFN0cmluZyhKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmLCBKU09i
amVjdFJlZiBvcHRpb25zQXJyYXkpOwogICAgIGJvb2wgaXNDb21tYW5kRW5hYmxlZChKU1N0cmlu
Z1JlZiBuYW1lKTsKICAgICB2b2lkIGtlZXBXZWJIaXN0b3J5KCk7CiAgICAgSlNWYWx1ZVJlZiBj
b21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVm
KTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJv
bGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
TGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDcyNTQ2KQorKysgV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01ODMsNiArNTgzLDQyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4
ZWNDb21tYW5kKEoKICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBfZXhlY3V0ZUNvcmVDb21tYW5k
QnlOYW1lOm5hbWVOUyB2YWx1ZTp2YWx1ZU5TXTsKIH0KIAorYm9vbCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0
LCBKU09iamVjdFJlZiBvcHRpb25zQXJyYXkpCit7CisgICAgV2ViRmluZE9wdGlvbnMgb3B0aW9u
cyA9IDA7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbGVuZ3RoUHJvcGVydHlOYW1l
KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOworICAgIEpT
VmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlv
bnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKKyAgICBpZiAoIUpTVmFsdWVJ
c051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdGFyZ2V0Q0ZTdHJpbmcoQWRvcHRDRiwgSlNTdHJp
bmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGFyZ2V0KSk7CisKKyAgICBzaXpl
X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
bGVuZ3RoVmFsdWUsIDApKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CisgICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRl
eChjb250ZXh0LCBvcHRpb25zQXJyYXksIGksIDApOworICAgICAgICBpZiAoIUpTVmFsdWVJc1N0
cmluZyhjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gb3B0aW9uTmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCB2YWx1ZSwgMCkpOworCisgICAgICAgIGlmIChKU1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJDYXNlSW5zZW5zaXRpdmUiKSkKKyAgICAg
ICAgICAgIG9wdGlvbnMgfD0gV2ViRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7CisgICAgICAg
IGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwg
IkF0V29yZFN0YXJ0cyIpKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJGaW5kT3B0aW9uc0F0
V29yZFN0YXJ0czsKKyAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhvcHRpb25OYW1lLmdldCgpLCAiVHJlYXRNZWRpYWxDYXBBc1dvcmRTdGFydCIpKQorICAgICAg
ICAgICAgb3B0aW9ucyB8PSBXZWJGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwQXNXb3JkU3RhcnQ7
CisgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFt
ZS5nZXQoKSwgIkJhY2t3YXJkcyIpKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJGaW5kT3B0
aW9uc0JhY2t3YXJkczsKKyAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhvcHRpb25OYW1lLmdldCgpLCAiV3JhcEFyb3VuZCIpKQorICAgICAgICAgICAgb3B0aW9u
cyB8PSBXZWJGaW5kT3B0aW9uc1dyYXBBcm91bmQ7CisgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIlN0YXJ0SW5TZWxlY3Rpb24i
KSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViRmluZE9wdGlvbnNTdGFydEluU2VsZWN0aW9u
OworICAgIH0KKworICAgIHJldHVybiBbW21haW5GcmFtZSB3ZWJWaWV3XSBmaW5kU3RyaW5nOihO
U1N0cmluZyAqKXRhcmdldENGU3RyaW5nLmdldCgpIG9wdGlvbnM6b3B0aW9uc107Cit9CisKIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hlTW9kZWwoaW50IGNhY2hlTW9kZWwpCiB7
CiAgICAgW1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSBzZXRDYWNoZU1vZGVs
OmNhY2hlTW9kZWxdOwpJbmRleDogV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJX
aW5kb3dDb250cm9sbGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIv
bWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0JKHJldmlzaW9uIDcyNTQ2KQorKysgV2ViS2l0
VG9vbHMvTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0JKHdvcmtpbmcg
Y29weSkKQEAgLTY5MCw4ICs2OTAsNyBAQCAtIChJQkFjdGlvbilmaW5kOihpZClzZW5kZXIKIHsK
ICAgICBXS1N0cmluZ1JlZiBzdHJpbmcgPSBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZT
dHJpbmdSZWYpW3NlbmRlciBzdHJpbmdWYWx1ZV0pOwogCi0gICAgV0tQYWdlRmluZFN0cmluZyhf
d2ViVmlldy5wYWdlUmVmLCBzdHJpbmcsIGtXS0ZpbmREaXJlY3Rpb25Gb3J3YXJkLCAKLSAgICAg
ICAgICAgICAgICAgICAgIGtXS0ZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlIHwga1dLRmluZE9w
dGlvbnNXcmFwQXJvdW5kIHwga1dLRmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvciB8IGtXS0Zp
bmRPcHRpb25zU2hvd092ZXJsYXksIDEwMCk7CisgICAgV0tQYWdlRmluZFN0cmluZyhfd2ViVmll
dy5wYWdlUmVmLCBzdHJpbmcsIGtXS0ZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlIHwga1dLRmlu
ZE9wdGlvbnNXcmFwQXJvdW5kIHwga1dLRmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvciB8IGtX
S0ZpbmRPcHRpb25zU2hvd092ZXJsYXksIDEwMCk7CiB9CiAKIEBlbmQKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDcyNjk2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTAtMTEtMjQgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0
ZXh0IHNlYXJjaCB0ZXN0cywgaW4gcGFydGljdWxhciB0ZXN0aW5nIHdvcmQtcHJlZml4IHNlYXJj
aC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMDM4
CisKKyAgICAgICAgKiBlZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZFN0cmluZy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLmh0
bWw6IEFkZGVkLgorCiAyMDEwLTExLTI0ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBKdXN0IGFzc2lnbiBhIGJ1ZyBmb3IgY29t
cG9zaXRpbmcvcGx1Z2luIHRlc3RzLgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy90ZXh0LWl0
ZXJhdG9yL2ZpbmRTdHJpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDkgQEAKK1NlYXJjaGluZyBmb3Ig4oCY
b+KAmSBpbiDigJhMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldOKAmSB3aXRoIG9wdGlvbnMgW106
CitQQVNTOiBHb3QgYSBtYXRjaCBhdCAxLDIgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBtYXRj
aCBhdCAxMywxNCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDE1LDE2IGFzIGV4
cGVjdGVkLgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9y
IOKAmG/igJkgaW4g4oCYTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXTigJkgd2l0aCBvcHRpb25z
IFtXcmFwQXJvdW5kXToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDEsMiBhcyBleHBlY3RlZC4KK1BB
U1M6IEdvdCBhIG1hdGNoIGF0IDEzLDE0IGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2gg
YXQgMTUsMTYgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBtYXRjaCBhdCAxLDIgYXMgZXhwZWN0
ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYb+KAmSBpbiDigJhMb3JlbSBpcHN1bSBkb2xvciBzaXQg
YW1ldOKAmSB3aXRoIG9wdGlvbnMgW0JhY2t3YXJkc106CitQQVNTOiBHb3QgYSBtYXRjaCBhdCAx
NSwxNiBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDEzLDE0IGFzIGV4cGVjdGVk
LgorUEFTUzogR290IGEgbWF0Y2ggYXQgMSwyIGFzIGV4cGVjdGVkLgorUEFTUzogR290IG5vIG1h
dGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmG/igJkgaW4g4oCYTG9yZW0gaXBz
dW0gZG9sb3Igc2l0IGFtZXTigJkgd2l0aCBvcHRpb25zIFtCYWNrd2FyZHMsIFdyYXBBcm91bmRd
OgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTUsMTYgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBt
YXRjaCBhdCAxMywxNCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDEsMiBhcyBl
eHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDE1LDE2IGFzIGV4cGVjdGVkLgorCitTZWFy
Y2hpbmcgZm9yIOKAmE/igJkgaW4g4oCYTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXTigJkgd2l0
aCBvcHRpb25zIFtdOgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hp
bmcgZm9yIOKAmE/igJkgaW4g4oCYTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXTigJkgd2l0aCBv
cHRpb25zIFtDYXNlSW5zZW5zaXRpdmVdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgMSwyIGFzIGV4
cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTMsMTQgYXMgZXhwZWN0ZWQuCitQQVNTOiBH
b3QgYSBtYXRjaCBhdCAxNSwxNiBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhtb3Vu
dOKAmSBpbiDigJhpbnN1cm1vdW50YWJsZSBtb3VudGFpbuKAmSB3aXRoIG9wdGlvbnMgW106CitQ
QVNTOiBHb3QgYSBtYXRjaCBhdCA1LDEwIGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2gg
YXQgMTUsMjAgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisK
K1NlYXJjaGluZyBmb3Ig4oCYbW91bnTigJkgaW4g4oCYaW5zdXJtb3VudGFibGUgbW91bnRhaW7i
gJkgd2l0aCBvcHRpb25zIFtBdFdvcmRTdGFydHNdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTUs
MjAgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJj
aGluZyBmb3Ig4oCYY2/igJkgaW4g4oCYY29jb2HigJkgd2l0aCBvcHRpb25zIFtdOgorUEFTUzog
R290IGEgbWF0Y2ggYXQgMCwyIGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgMiw0
IGFzIGV4cGVjdGVkLgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hp
bmcgZm9yIOKAmGNv4oCZIGluIOKAmGNvY29h4oCZIHdpdGggb3B0aW9ucyBbQXRXb3JkU3RhcnRz
XToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDAsMiBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBubyBt
YXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhvcmfigJkgaW4g4oCYd2Via2l0
Lm9yZ+KAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0c106CitQQVNTOiBHb3Qgbm8gbWF0Y2gg
YXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYLm9yZ+KAmSBpbiDigJh3ZWJraXQub3Jn
4oCZIHdpdGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzXToKK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBl
eHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhyZ+KAmSBpbiDigJh3ZWJraXQub3Jn4oCZIHdp
dGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzLCBUcmVhdE1lZGlhbENhcEFzV29yZFN0YXJ0XToKK1BB
U1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhvcmfigJkg
aW4g4oCYd2Via2l0Lm9yZ+KAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRNZWRp
YWxDYXBBc1dvcmRTdGFydF06CitQQVNTOiBHb3QgYSBtYXRjaCBhdCA3LDEwIGFzIGV4cGVjdGVk
LgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmC5v
cmfigJkgaW4g4oCYd2Via2l0Lm9yZ+KAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJl
YXRNZWRpYWxDYXBBc1dvcmRTdGFydF06CitQQVNTOiBHb3QgYSBtYXRjaCBhdCA2LDEwIGFzIGV4
cGVjdGVkLgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9y
IOKAmHQub3Jn4oCZIGluIOKAmHdlYmtpdC5vcmfigJkgd2l0aCBvcHRpb25zIFtBdFdvcmRTdGFy
dHMsIFRyZWF0TWVkaWFsQ2FwQXNXb3JkU3RhcnRdOgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4
cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmGl04oCZIGluIOKAmFdlYktpdOKAmSB3aXRoIG9w
dGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRNZWRpYWxDYXBBc1dvcmRTdGFydF06CitQQVNTOiBH
b3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYS2l04oCZIGluIOKA
mFdlYktpdOKAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRNZWRpYWxDYXBBc1dv
cmRTdGFydF06CitQQVNTOiBHb3QgYSBtYXRjaCBhdCAzLDYgYXMgZXhwZWN0ZWQuCitQQVNTOiBH
b3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYYktpdOKAmSBpbiDi
gJhXZWJLaXTigJkgd2l0aCBvcHRpb25zIFtBdFdvcmRTdGFydHMsIFRyZWF0TWVkaWFsQ2FwQXNX
b3JkU3RhcnRdOgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcg
Zm9yIOKAmGVxdWVzdOKAmSBpbiDigJhYTUxIVFRQUmVxdWVzdOKAmSB3aXRoIG9wdGlvbnMgW0F0
V29yZFN0YXJ0cywgVHJlYXRNZWRpYWxDYXBBc1dvcmRTdGFydF06CitQQVNTOiBHb3Qgbm8gbWF0
Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYUmVxdWVzdOKAmSBpbiDigJhYTUxI
VFRQUmVxdWVzdOKAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRNZWRpYWxDYXBB
c1dvcmRTdGFydF06CitQQVNTOiBHb3QgYSBtYXRjaCBhdCA3LDE0IGFzIGV4cGVjdGVkLgorUEFT
UzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmFBSZXF1ZXN0
4oCZIGluIOKAmFhNTEhUVFBSZXF1ZXN04oCZIHdpdGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzLCBU
cmVhdE1lZGlhbENhcEFzV29yZFN0YXJ0XToKK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3Rl
ZC4KKworU2VhcmNoaW5nIGZvciDigJg2NOKAmSBpbiDigJhMUDY04oCZIHdpdGggb3B0aW9ucyBb
QXRXb3JkU3RhcnRzXToKK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNo
aW5nIGZvciDigJg04oCZIGluIOKAmExQNjTigJkgd2l0aCBvcHRpb25zIFtBdFdvcmRTdGFydHMs
IFRyZWF0TWVkaWFsQ2FwQXNXb3JkU3RhcnRdOgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVj
dGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmDY04oCZIGluIOKAmExQNjTigJkgd2l0aCBvcHRpb25z
IFtBdFdvcmRTdGFydHMsIFRyZWF0TWVkaWFsQ2FwQXNXb3JkU3RhcnRdOgorUEFTUzogR290IGEg
bWF0Y2ggYXQgMiw0IGFzIGV4cGVjdGVkLgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVk
LgorCitTZWFyY2hpbmcgZm9yIOKAmFA2NOKAmSBpbiDigJhMUDY04oCZIHdpdGggb3B0aW9ucyBb
QXRXb3JkU3RhcnRzLCBUcmVhdE1lZGlhbENhcEFzV29yZFN0YXJ0XToKK1BBU1M6IEdvdCBubyBt
YXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhh4oCZIGluIGxvbmcgc3RyaW5n
IHdpdGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzXToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDYxNDYs
NjE0NyBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2Vh
cmNoaW5nIGZvciDigJjguIHguKPigJkgaW4g4oCY4LiB4Lij4Lib4Li54LmA4Lil4LiB4LiK4LiB
4LiK4LiB4Lij4LiB4Lij4LiB4LiK4Lia4LiH4LiB4LiK4oCZIHdpdGggb3B0aW9ucyBbXToKK1BB
U1M6IEdvdCBhIG1hdGNoIGF0IDAsMiBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0
IDEwLDEyIGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTIsMTQgYXMgZXhwZWN0
ZWQuCitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCY
4LiB4Lij4oCZIGluIOKAmOC4geC4o+C4m+C4ueC5gOC4peC4geC4iuC4geC4iuC4geC4o+C4geC4
o+C4geC4iuC4muC4h+C4geC4iuKAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0c106CitQQVNT
OiBHb3QgYSBtYXRjaCBhdCAwLDIgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBtYXRjaCBhdCAx
MiwxNCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2Vh
cmNoaW5nIGZvciDigJjguIHguIrigJkgaW4g4oCY4LiB4Lij4Lib4Li54LmA4Lil4LiB4LiK4LiB
4LiK4LiB4Lij4LiB4Lij4LiB4LiK4Lia4LiH4LiB4LiK4oCZIHdpdGggb3B0aW9ucyBbXToKK1BB
U1M6IEdvdCBhIG1hdGNoIGF0IDYsOCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0
IDgsMTAgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBtYXRjaCBhdCAxNCwxNiBhcyBleHBlY3Rl
ZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDE4LDIwIGFzIGV4cGVjdGVkLgorUEFTUzogR290IG5v
IG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmOC4geC4iuKAmSBpbiDigJjg
uIHguKPguJvguLnguYDguKXguIHguIrguIHguIrguIHguKPguIHguKPguIHguIrguJrguIfguIHg
uIrigJkgd2l0aCBvcHRpb25zIFtBdFdvcmRTdGFydHNdOgorUEFTUzogR290IGEgbWF0Y2ggYXQg
Niw4IGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgOCwxMCBhcyBleHBlY3RlZC4K
K1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJjguIHg
uKPigJkgaW4gbG9uZyBzdHJpbmcgd2l0aCBvcHRpb25zIFtdOgorUEFTUzogR290IGEgbWF0Y2gg
YXQgNjE0NCw2MTQ2IGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgNjE1NCw2MTU2
IGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgNjE1Niw2MTU4IGFzIGV4cGVjdGVk
LgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmOC4
geC4o+KAmSBpbiBsb25nIHN0cmluZyB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0c106CitQQVNT
OiBHb3QgYSBtYXRjaCBhdCA2MTU2LDYxNTggYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3Qgbm8gbWF0
Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCY4LiB4Lij4oCZIGluIGxvbmcgc3Ry
aW5nIHdpdGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzXToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDYx
NDQsNjE0NiBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDYxNTYsNjE1OCBhcyBl
eHBlY3RlZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZv
ciDigJjguIHguIrigJkgaW4gbG9uZyBzdHJpbmcgd2l0aCBvcHRpb25zIFtBdFdvcmRTdGFydHNd
OgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCisKSW5kZXg6IExheW91dFRlc3Rz
L2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmRTdHJpbmcuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA1IEBACis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8
ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgorPHByZSBpZD0iY29uc29sZSIgc3R5bGU9InZpc2li
aWxpdHk6IGhpZGRlbjsiPjwvcHJlPgorPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBsb2cobWVzc2Fn
ZSkKKyAgICB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSArICJcbiIpKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiB0ZXN0RmluZFN0cmluZyh0ZXh0LCB0YXJnZXQsIG9wdGlvbnMsIGV4
cGVjdGVkUmFuZ2VzKQorICAgIHsKKyAgICAgICAgbG9nKCJTZWFyY2hpbmcgZm9yIFx1MjAxOCIg
KyB0YXJnZXQgKyAiXHUyMDE5ICIgKyAodGV4dC5sZW5ndGggPD0gNjQgPyAiaW4gXHUyMDE4IiAr
IHRleHQgKyAiXHUyMDE5ICIgOiAiaW4gbG9uZyBzdHJpbmcgIikgKyAid2l0aCBvcHRpb25zIFsi
ICsgb3B0aW9ucy5qb2luKCIsICIpICsgIl06Iik7CisKKyAgICAgICAgdmFyIGNvbnRhaW5lciA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsKKyAgICAgICAgY29udGFpbmVy
LmlubmVyVGV4dCA9IHRleHQ7CisgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworICAg
ICAgICB2YXIgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIHNlbGVjdGlvbi5l
bXB0eSgpOworCisgICAgICAgIHZhciBleHBlY3RlZFJhbmdlOworICAgICAgICB3aGlsZSAoZXhw
ZWN0ZWRSYW5nZSA9IGV4cGVjdGVkUmFuZ2VzLnNoaWZ0KCkpIHsKKyAgICAgICAgICAgIHZhciBm
b3VuZCA9IGxheW91dFRlc3RDb250cm9sbGVyLmZpbmRTdHJpbmcodGFyZ2V0LCBvcHRpb25zKTsK
KyAgICAgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAgICAgICAgIHZhciBhY3R1YWxSYW5n
ZSA9IFtzZWxlY3Rpb24uYmFzZU9mZnNldCwgc2VsZWN0aW9uLmV4dGVudE9mZnNldF07CisgICAg
ICAgICAgICAgICAgaWYgKGV4cGVjdGVkUmFuZ2VbMF0gIT09IGFjdHVhbFJhbmdlWzBdIHx8IGV4
cGVjdGVkUmFuZ2VbMV0gIT09IGFjdHVhbFJhbmdlWzFdKQorICAgICAgICAgICAgICAgICAgICBs
b2coIkZBSUw6IEV4cGVjdGVkIGEgbWF0Y2ggYXQgIiArIGV4cGVjdGVkUmFuZ2UgKyAiIGJ1dCBn
b3QgYSBtYXRjaCBhdCAiICsgYWN0dWFsUmFuZ2UgKyAiIGluc3RlYWQuIik7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBsb2coIlBBU1M6IEdvdCBhIG1hdGNoIGF0
ICIgKyBleHBlY3RlZFJhbmdlICsgIiBhcyBleHBlY3RlZC4iKTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZXhwZWN0ZWRSYW5nZS5sZW5ndGgpCisgICAgICAgICAgICAgICAgbG9nKCJGQUlMOiBF
eHBlY3RlZCAiICsgZXhwZWN0ZWRSYW5nZSArICIgYnV0IGdvdCBubyBtYXRjaC4iKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2coIlBBU1M6IEdvdCBubyBtYXRjaCBhcyBl
eHBlY3RlZC4iKTsKKyAgICAgICAgfQorICAgICAgICBjb250YWluZXIuaW5uZXJUZXh0ID0gIiI7
CisgICAgICAgIGxvZygiIik7CisgICAgfQorCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworCisgICAgdGVzdEZpbmRTdHJpbmcoIkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBh
bWV0IiwgIm8iLCBbXSwgW1sxLCAyXSwgWzEzLCAxNF0sIFsxNSwgMTZdLCBbXV0pOworICAgIHRl
c3RGaW5kU3RyaW5nKCJMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCIsICJvIiwgWyJXcmFwQXJv
dW5kIl0sIFtbMSwgMl0sIFsxMywgMTRdLCBbMTUsIDE2XSwgWzEsIDJdXSk7CisgICAgdGVzdEZp
bmRTdHJpbmcoIkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0IiwgIm8iLCBbIkJhY2t3YXJkcyJd
LCBbWzE1LCAxNl0sIFsxMywgMTRdLCBbMSwgMl0sIFtdXSk7CisgICAgdGVzdEZpbmRTdHJpbmco
IkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0IiwgIm8iLCBbIkJhY2t3YXJkcyIsICJXcmFwQXJv
dW5kIl0sIFtbMTUsIDE2XSwgWzEzLCAxNF0sIFsxLCAyXSwgWzE1LCAxNl1dKTsKKyAgICB0ZXN0
RmluZFN0cmluZygiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQiLCAiTyIsIFtdLCBbW11dKTsK
KyAgICB0ZXN0RmluZFN0cmluZygiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQiLCAiTyIsIFsi
Q2FzZUluc2Vuc2l0aXZlIl0sIFtbMSwgMl0sIFsxMywgMTRdLCBbMTUsIDE2XV0pOworCisgICAg
dGVzdEZpbmRTdHJpbmcoImluc3VybW91bnRhYmxlIG1vdW50YWluIiwgIm1vdW50IiwgW10sIFtb
NSwgMTBdLCBbMTUsIDIwXSwgW11dKTsKKyAgICB0ZXN0RmluZFN0cmluZygiaW5zdXJtb3VudGFi
bGUgbW91bnRhaW4iLCAibW91bnQiLCBbIkF0V29yZFN0YXJ0cyJdLCBbWzE1LCAyMF0sIFtdXSk7
CisKKyAgICB0ZXN0RmluZFN0cmluZygiY29jb2EiLCAiY28iLCBbXSwgW1swLCAyXSwgWzIsIDRd
LCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKCJjb2NvYSIsICJjbyIsIFsiQXRXb3JkU3RhcnRz
Il0sIFtbMCwgMl0sIFtdXSk7CisKKyAgICB0ZXN0RmluZFN0cmluZygid2Via2l0Lm9yZyIsICJv
cmciLCBbIkF0V29yZFN0YXJ0cyJdLCBbW11dKTsKKyAgICB0ZXN0RmluZFN0cmluZygid2Via2l0
Lm9yZyIsICIub3JnIiwgWyJBdFdvcmRTdGFydHMiXSwgW1tdXSk7CisKKyAgICB0ZXN0RmluZFN0
cmluZygid2Via2l0Lm9yZyIsICJyZyIsIFsiQXRXb3JkU3RhcnRzIiwgIlRyZWF0TWVkaWFsQ2Fw
QXNXb3JkU3RhcnQiXSwgW1tdXSk7CisgICAgdGVzdEZpbmRTdHJpbmcoIndlYmtpdC5vcmciLCAi
b3JnIiwgWyJBdFdvcmRTdGFydHMiLCAiVHJlYXRNZWRpYWxDYXBBc1dvcmRTdGFydCJdLCBbWzcs
IDEwXSwgW11dKTsKKyAgICB0ZXN0RmluZFN0cmluZygid2Via2l0Lm9yZyIsICIub3JnIiwgWyJB
dFdvcmRTdGFydHMiLCAiVHJlYXRNZWRpYWxDYXBBc1dvcmRTdGFydCJdLCBbWzYsIDEwXSwgW11d
KTsKKyAgICB0ZXN0RmluZFN0cmluZygid2Via2l0Lm9yZyIsICJ0Lm9yZyIsIFsiQXRXb3JkU3Rh
cnRzIiwgIlRyZWF0TWVkaWFsQ2FwQXNXb3JkU3RhcnQiXSwgW1tdXSk7CisKKyAgICB0ZXN0Rmlu
ZFN0cmluZygiV2ViS2l0IiwgIml0IiwgWyJBdFdvcmRTdGFydHMiLCAiVHJlYXRNZWRpYWxDYXBB
c1dvcmRTdGFydCJdLCBbW11dKTsKKyAgICB0ZXN0RmluZFN0cmluZygiV2ViS2l0IiwgIktpdCIs
IFsiQXRXb3JkU3RhcnRzIiwgIlRyZWF0TWVkaWFsQ2FwQXNXb3JkU3RhcnQiXSwgW1szLCA2XSwg
W11dKTsKKyAgICB0ZXN0RmluZFN0cmluZygiV2ViS2l0IiwgImJLaXQiLCBbIkF0V29yZFN0YXJ0
cyIsICJUcmVhdE1lZGlhbENhcEFzV29yZFN0YXJ0Il0sIFtbXV0pOworCisgICAgdGVzdEZpbmRT
dHJpbmcoIlhNTEhUVFBSZXF1ZXN0IiwgImVxdWVzdCIsIFsiQXRXb3JkU3RhcnRzIiwgIlRyZWF0
TWVkaWFsQ2FwQXNXb3JkU3RhcnQiXSwgW1tdXSk7CisgICAgdGVzdEZpbmRTdHJpbmcoIlhNTEhU
VFBSZXF1ZXN0IiwgIlJlcXVlc3QiLCBbIkF0V29yZFN0YXJ0cyIsICJUcmVhdE1lZGlhbENhcEFz
V29yZFN0YXJ0Il0sIFtbNywgMTRdLCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKCJYTUxIVFRQ
UmVxdWVzdCIsICJQUmVxdWVzdCIsIFsiQXRXb3JkU3RhcnRzIiwgIlRyZWF0TWVkaWFsQ2FwQXNX
b3JkU3RhcnQiXSwgW1tdXSk7CisKKyAgICB0ZXN0RmluZFN0cmluZygiTFA2NCIsICI2NCIsIFsi
QXRXb3JkU3RhcnRzIl0sIFtbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKCJMUDY0IiwgIjQiLCBb
IkF0V29yZFN0YXJ0cyIsICJUcmVhdE1lZGlhbENhcEFzV29yZFN0YXJ0Il0sIFtbXV0pOworICAg
IHRlc3RGaW5kU3RyaW5nKCJMUDY0IiwgIjY0IiwgWyJBdFdvcmRTdGFydHMiLCAiVHJlYXRNZWRp
YWxDYXBBc1dvcmRTdGFydCJdLCBbWzIsIDRdLCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKCJM
UDY0IiwgIlA2NCIsIFsiQXRXb3JkU3RhcnRzIiwgIlRyZWF0TWVkaWFsQ2FwQXNXb3JkU3RhcnQi
XSwgW1tdXSk7CisKKyAgICBjb25zdCBzZWFyY2hCdWZmZXJTaXplID0gODE5MjsKKyAgICBjb25z
dCBzZWFyY2hCdWZmZXJPdmVybGFwU2l6ZSA9IHNlYXJjaEJ1ZmZlclNpemUgLyA0OworICAgIGNv
bnN0IHNlYXJjaEJ1ZmZlclVub3ZlcmxhcHBlZFNpemUgPSBzZWFyY2hCdWZmZXJTaXplIC0gc2Vh
cmNoQnVmZmVyT3ZlcmxhcFNpemU7CisgICAgdmFyIGJ1ZmZlclNpemVkU3RyaW5nID0gIlgiOwor
ICAgIHdoaWxlIChidWZmZXJTaXplZFN0cmluZy5sZW5ndGggPCBzZWFyY2hCdWZmZXJTaXplKQor
ICAgICAgICBidWZmZXJTaXplZFN0cmluZyArPSBidWZmZXJTaXplZFN0cmluZzsKKyAgICBidWZm
ZXJTaXplZFN0cmluZyA9IGJ1ZmZlclNpemVkU3RyaW5nLnN1YnN0cmluZygwLCBzZWFyY2hCdWZm
ZXJTaXplKTsKKworICAgIHRlc3RGaW5kU3RyaW5nKGJ1ZmZlclNpemVkU3RyaW5nLnN1YnN0cmlu
ZygwLCBzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplIC0gMikgKyAiIGJhIGEiICsgYnVmZmVy
U2l6ZWRTdHJpbmcsICJhIiwgWyJBdFdvcmRTdGFydHMiXSwgW1tzZWFyY2hCdWZmZXJVbm92ZXJs
YXBwZWRTaXplICsgMiwgc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6ZSArIDNdLCBbXV0pOwor
CisgICAgdmFyIHRoYWlXb3JkcyA9IFsKKyAgICAgICAgIlx1MGUwMVx1MGUyMyIsCisgICAgICAg
ICJcdTBlMWJcdTBlMzlcdTBlNDBcdTBlMjUiLAorICAgICAgICAiXHUwZTAxXHUwZTBhIiwKKyAg
ICAgICAgIlx1MGUwMVx1MGUwYVx1MGUwMVx1MGUyMyIsIC8vIHRoYWlXb3Jkc1syXSArIHRoYWlX
b3Jkc1swXQorICAgICAgICAiXHUwZTAxXHUwZTIzXHUwZTAxXHUwZTBhIiwgLy8gdGhhaVdvcmRz
WzBdICsgdGhhaVdvcmRzWzJdCisgICAgICAgICJcdTBlMWFcdTBlMDdcdTBlMDFcdTBlMGEiLCAv
LyBlbmRzIHdpdGggdGhhaVdvcmRzWzJdCisgICAgXTsKKworICAgIHRlc3RGaW5kU3RyaW5nKHRo
YWlXb3Jkcy5qb2luKCIiKSwgdGhhaVdvcmRzWzBdLCBbXSwgW1swLCAyXSwgWzEwLCAxMl0sIFsx
MiwgMTRdLCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKHRoYWlXb3Jkcy5qb2luKCIiKSwgdGhh
aVdvcmRzWzBdLCBbIkF0V29yZFN0YXJ0cyJdLCBbWzAsIDJdLCBbMTIsIDE0XSwgW11dKTsKKwor
ICAgIHRlc3RGaW5kU3RyaW5nKHRoYWlXb3Jkcy5qb2luKCIiKSwgdGhhaVdvcmRzWzJdLCBbXSwg
W1s2LCA4XSwgWzgsIDEwXSwgWzE0LCAxNl0sIFsxOCwgMjBdLCBbXV0pOworICAgIHRlc3RGaW5k
U3RyaW5nKHRoYWlXb3Jkcy5qb2luKCIiKSwgdGhhaVdvcmRzWzJdLCBbIkF0V29yZFN0YXJ0cyJd
LCBbWzYsIDhdLCBbOCwgMTBdLCBbXV0pOworCisgICAgdGVzdEZpbmRTdHJpbmcoYnVmZmVyU2l6
ZWRTdHJpbmcuc3Vic3RyaW5nKDAsIHNlYXJjaEJ1ZmZlclVub3ZlcmxhcHBlZFNpemUpICsgdGhh
aVdvcmRzLmpvaW4oIiIpICsgYnVmZmVyU2l6ZWRTdHJpbmcsIHRoYWlXb3Jkc1swXSwgW10sIFtb
c2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6ZSwgc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6
ZSArIDJdLCBbc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6ZSArIDEwLCBzZWFyY2hCdWZmZXJV
bm92ZXJsYXBwZWRTaXplICsgMTJdLCBbc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6ZSArIDEy
LCBzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplICsgMTRdLCBbXV0pOworICAgIHRlc3RGaW5k
U3RyaW5nKGJ1ZmZlclNpemVkU3RyaW5nLnN1YnN0cmluZygwLCBzZWFyY2hCdWZmZXJVbm92ZXJs
YXBwZWRTaXplKSArIHRoYWlXb3Jkcy5qb2luKCIiKSArIGJ1ZmZlclNpemVkU3RyaW5nLCB0aGFp
V29yZHNbMF0sIFsiQXRXb3JkU3RhcnRzIl0sIFtbc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6
ZSArIDEyLCBzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplICsgMTRdLCBbXV0pOworICAgIHRl
c3RGaW5kU3RyaW5nKGJ1ZmZlclNpemVkU3RyaW5nLnN1YnN0cmluZygwLCBzZWFyY2hCdWZmZXJV
bm92ZXJsYXBwZWRTaXplIC0gMSkgKyAiICIgKyB0aGFpV29yZHMuam9pbigiIikgKyBidWZmZXJT
aXplZFN0cmluZywgdGhhaVdvcmRzWzBdLCBbIkF0V29yZFN0YXJ0cyJdLCBbW3NlYXJjaEJ1ZmZl
clVub3ZlcmxhcHBlZFNpemUsIHNlYXJjaEJ1ZmZlclVub3ZlcmxhcHBlZFNpemUgKyAyXSwgW3Nl
YXJjaEJ1ZmZlclVub3ZlcmxhcHBlZFNpemUgKyAxMiwgc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVk
U2l6ZSArIDE0XSwgW11dKTsKKyAgICB0ZXN0RmluZFN0cmluZyhidWZmZXJTaXplZFN0cmluZy5z
dWJzdHJpbmcoMCwgc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6ZSAtIDMpICsgIiAiICsgdGhh
aVdvcmRzWzRdICsgYnVmZmVyU2l6ZWRTdHJpbmcsIHRoYWlXb3Jkc1syXSwgWyJBdFdvcmRTdGFy
dHMiXSwgW1tdXSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLnN0
eWxlLnJlbW92ZVByb3BlcnR5KCJ2aXNpYmlsaXR5Iik7Cis8L3NjcmlwdD4K
</data>
<flag name="review"
          id="65476"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75040</attachid>
            <date>2010-11-29 10:46:14 -0800</date>
            <delta_ts>2010-11-29 14:49:43 -0800</delta_ts>
            <desc>WebCore (ICU code path only) implementation, WebKit/mac WebKit2 API, DumpRenderTree/mac test support and tests</desc>
            <filename>8650085_r7.diff</filename>
            <type>text/plain</type>
            <size>111957</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyODEwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMTEtMjkgIERhbiBCZXJu
c3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXVEYgc3VwcG9ydCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzg2NTAwODU+
IGFkZGluZyB3b3JkLXByZWZpeCBzZWFyY2ggb3B0aW9ucyB0byB0aGUgdGV4dCBzZWFyY2ggQVBJ
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzgK
KworICAgICAgICAqIHd0Zi91bmljb2RlL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmg6IENvcGllZCBh
ZGRpdGlvbmFsIG1hY3JvcyBmcm9tIGljdS91bmljb2RlL3V0ZjE2LmguCisKIDIwMTAtMTEtMjcg
IEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9V
bmljb2RlTWFjcm9zRnJvbUlDVS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91
bmljb2RlL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmgJKHJldmlzaW9uIDcyODAzKQorKysgSmF2YVNj
cmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDQsIEludGVy
bmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxz
dGFpa29zQGtkZS5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YgPGFwQG55cG9wLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTQzLDYgKzQ0LDIyIEBACiAjZGVmaW5lIFUx
Nl9JU19TVVJST0dBVEUoYykgVV9JU19TVVJST0dBVEUoYykKICNkZWZpbmUgVTE2X0lTX1NVUlJP
R0FURV9MRUFEKGMpICgoKGMpJjB4NDAwKT09MCkKIAorI2RlZmluZSBVMTZfR0VUKHMsIHN0YXJ0
LCBpLCBsZW5ndGgsIGMpIHsgXAorICAgIChjKT0ocylbaV07IFwKKyAgICBpZihVMTZfSVNfU1VS
Uk9HQVRFKGMpKSB7IFwKKyAgICAgICAgdWludDE2X3QgX19jMjsgXAorICAgICAgICBpZihVMTZf
SVNfU1VSUk9HQVRFX0xFQUQoYykpIHsgXAorICAgICAgICAgICAgaWYoKGkpKzE8KGxlbmd0aCkg
JiYgVTE2X0lTX1RSQUlMKF9fYzI9KHMpWyhpKSsxXSkpIHsgXAorICAgICAgICAgICAgICAgIChj
KT1VMTZfR0VUX1NVUFBMRU1FTlRBUlkoKGMpLCBfX2MyKTsgXAorICAgICAgICAgICAgfSBcCisg
ICAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgICAgIGlmKChpKS0xPj0oc3RhcnQpICYmIFUxNl9J
U19MRUFEKF9fYzI9KHMpWyhpKS0xXSkpIHsgXAorICAgICAgICAgICAgICAgIChjKT1VMTZfR0VU
X1NVUFBMRU1FTlRBUlkoX19jMiwgKGMpKTsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0g
XAorICAgIH0gXAorfQorCiAjZGVmaW5lIFUxNl9QUkVWKHMsIHN0YXJ0LCBpLCBjKSB7IFwKICAg
ICAoYyk9KHMpWy0tKGkpXTsgXAogICAgIGlmKFUxNl9JU19UUkFJTChjKSkgeyBcCkBAIC01NCw2
ICs3MSwxMiBAQAogICAgIH0gXAogfQogCisjZGVmaW5lIFUxNl9CQUNLXzEocywgc3RhcnQsIGkp
IHsgXAorICAgIGlmKFUxNl9JU19UUkFJTCgocylbLS0oaSldKSAmJiAoaSk+KHN0YXJ0KSAmJiBV
MTZfSVNfTEVBRCgocylbKGkpLTFdKSkgeyBcCisgICAgICAgIC0tKGkpOyBcCisgICAgfSBcCit9
CisKICNkZWZpbmUgVTE2X05FWFQocywgaSwgbGVuZ3RoLCBjKSB7IFwKICAgICAoYyk9KHMpWyhp
KSsrXTsgXAogICAgIGlmKFUxNl9JU19MRUFEKGMpKSB7IFwKQEAgLTY1LDcgKzg4LDEyIEBACiAg
ICAgfSBcCiB9CiAKKyNkZWZpbmUgVTE2X0ZXRF8xKHMsIGksIGxlbmd0aCkgeyBcCisgICAgaWYo
VTE2X0lTX0xFQUQoKHMpWyhpKSsrXSkgJiYgKGkpPChsZW5ndGgpICYmIFUxNl9JU19UUkFJTCgo
cylbaV0pKSB7IFwKKyAgICAgICAgKysoaSk7IFwKKyAgICB9IFwKK30KKwogI2RlZmluZSBVX01B
U0soeCkgKCh1aW50MzJfdCkxPDwoeCkpCiAKICNlbmRpZgotCkluZGV4OiBXZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzI4MTEpCisr
KyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDEw
LTExLTI5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViQ29yZSBwYXJ0IG9mIDxyZGFyOi8v
cHJvYmxlbS84NjUwMDg1PiBhZGRpbmcgd29yZC1wcmVmaXggc2VhcmNoIG9wdGlvbnMgdG8gdGhl
IHRleHQgc2VhcmNoIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUwMDM4CisKKyAgICAgICAgVGVzdDogZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2Zp
bmRTdHJpbmcuaHRtbAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIEZpbmRPcHRp
b25zLmguCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydCB0aGUgbmV3IG1ldGhvZHMg
dGhhdCB0YWtlIEZpbmRPcHRpb25zLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgRmlu
ZE9wdGlvbnMuaC4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgRmluZE9wdGlvbnMuaCBhbmQgVGV4dEJvdW5k
YXJpZXMuY3BwLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Zmlyc3RWaXNpYmxlUmFuZ2UpOiBDaGFuZ2VkIHRvIHVzZSBGaW5kT3B0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGFzdFZpc2libGVSYW5nZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpuZXh0VmlzaWJsZVJhbmdlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6IERpdHRvLgorICAgICAgICAqIGVkaXRp
bmcvRWRpdG9yLmg6IEFkZGVkIGEgdmVyc2lvbiBvZiBmaW5kU3RyaW5nKCkgdGhhdCB0YWtlcyBG
aW5kT3B0aW9ucy4gQ2hhbmdlZAorICAgICAgICBjb3VudE1hdGNoZXNGb3JUZXh0KCkgdG8gdGFr
ZSBGaW5kT3B0aW9ucy4gTWFkZSBuZXh0VmlzaWJsZVJhbmdlKCkgcHJpdmF0ZSBhbmQgY2hhbmdl
ZCBpdAorICAgICAgICBhbmQgZmlyc3RWaXNpYmxlUmFuZ2UoKSBhbmQgbGFzdFZpc2libGVSYW5n
ZSgpIHRvIHRha2UgRmluZE9wdGlvbnMuCisgICAgICAgICogZWRpdGluZy9GaW5kT3B0aW9ucy5o
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIEF1
Z21lbnRlZCBTZWFyY2hCdWZmZXIgd2l0aCBhbiBvcHRpb25hbCBwcmVmaXgsIHdoaWNoIGlzIG5v
dCBzZWFyY2hlZCwgYnV0IHByb3ZpZGVzIGNvbnRleHQKKyAgICAgICAgZm9yIGRldGVybWluaW5n
IHdvcmQgYm91bmRhcmllcy4KKyAgICAgICAgKFdlYkNvcmU6OmlzU2VwYXJhdG9yKTogQWRkZWQu
IElkZW50aWZpZXMgYSBjbGFzcyBvZiBjaGFyYWN0ZXJzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXJl
CisgICAgICAgIOKAnHdvcmRz4oCdIGFyZSBlbWJlZGRlZCBpbiBhIHdvcmQuCisgICAgICAgIChX
ZWJDb3JlOjpTZWFyY2hCdWZmZXI6OlNlYXJjaEJ1ZmZlcik6IENoYW5nZWQgdG8gdGFrZSBGaW5k
T3B0aW9ucy4gQWRkZWQgaW5pdGlhbGl6YXRpb24gb2YKKyAgICAgICAgbV9vcHRpb25zIGFuZCBt
X3ByZWZpeExlbmd0aC4KKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6YXBwZW5kKTog
QWRqdXN0IG1fcHJlZml4TGVuZ3RoIGFzIHBhcnQgb2YgdGhlIHByZWZpeCBnZXRzIHB1c2hlZCBv
dXQKKyAgICAgICAgb2YgdGhlIGJ1ZmZlci4KKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZl
cjo6cHJlcGVuZENvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZl
cjo6aXNXb3JkU3RhcnRNYXRjaCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVm
ZmVyOjpzZWFyY2gpOiBDaGFuZ2VkIHRvIGFjY291bnQgZm9yIHRoZSBjb250ZXh0IHByZWZpeC4g
V2hlbiBzZWFyY2hpbmcKKyAgICAgICAgb25seSBmb3Igd29yZCBwcmVmaXggbWF0Y2hlcywgbWFp
bnRhaW5zIGVub3VnaCBjb250ZXh0IGJlZm9yZSBhIHRlbnRhdGl2ZSBtYXRjaCB3aGVuIG1vdmlu
ZworICAgICAgICBpdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIuIFJlamVjdCBtYXRj
aGVzIHRoYXQgYXJlIG5vdCBhdCB3b3JkIHN0YXJ0cyBpZiByZXF1ZXN0ZWQuCisgICAgICAgIEFk
anVzdCBtX3ByZWZpeExlbmd0aCB3aGVuIHB1c2hpbmcgY2hhcmFjdGVycyBvdXQgb2YgdGhlIGJ1
ZmZlci4KKyAgICAgICAgKFdlYkNvcmU6OmZpbmRQbGFpblRleHQpOiBDaGFuZ2VkIHRvIHdvcmsg
d2l0aCBGaW5kT3B0aW9ucy4gUHJlcGVuZCBjb250ZXh0IGZyb20gYmVmb3JlIHRoZQorICAgICAg
ICBzdGFydGluZyBwb2ludCBhcyBuZWVkZWQgZm9yIHdvcmQgYm91bmRhcnkgc2VhcmNoLgorICAg
ICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6IEFkZGVkIGEgdmVyc2lvbiBvZiBmaW5kUGxh
aW5UZXh0KCkgdGhhdCB0YWtlcyBGaW5kT3B0aW9ucy4KKyAgICAgICAgKiBlZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwOiBNb3ZlZCB7ZW5kLHN0YXJ0fU9me0ZpcnN0LExhc3R9V29yZEJvdW5kYXJ5
IHRvIFRleHRCb3VuZGFyaWVzLmNwcC4KKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZTo6ZmluZFN0cmluZyk6IENoYW5nZWQgdG8gd29yayB3aXRoIEZpbmRP
cHRpb25zLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6bWFya0FsbE1hdGNoZXNGb3JUZXh0KTog
RGl0dG8uCisgICAgICAgICogcGFnZS9QYWdlLmg6IEFkZGVkIEZpbmRPcHRpb25zLWJhc2VkIGZp
bmRTdHJpbmcoKSBhbmQgbWFya0FsbE1hdGNoZXNGb3JUZXh0KCkuCisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmRPZkZpcnN0
V29yZEJvdW5kYXJ5Q29udGV4dCk6IE1vdmVkIGhlcmUgZnJvbSB2aXNpYmxlX3VuaXRzLmNwcC4K
KyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dCk6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuaDoKKwogMjAxMC0xMS0y
OSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3MjgwMykKKysr
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMzEsNiArMTMzMSw3
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9lZGl0aW5nL0VkaXRvckRlbGV0ZUFj
dGlvbi5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggXAogCVdlYkNvcmUvZWRpdGluZy9F
ZGl0b3JJbnNlcnRBY3Rpb24uaCBcCisJV2ViQ29yZS9lZGl0aW5nL0ZpbmRPcHRpb25zLmggXAog
CVdlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwIFwKIAlXZWJDb3JlL2VkaXRp
bmcvRm9ybWF0QmxvY2tDb21tYW5kLmggXAogCVdlYkNvcmUvZWRpdGluZy9ndGsvU2VsZWN0aW9u
Q29udHJvbGxlckd0ay5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA3MjgwMykKKysrIFdlYkNv
cmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU5OSw3ICs1OTksNyBAQCBfX1pO
N1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgogX19aTjdXZWJDb3JlNE5vZGUxN3N0b3BJZ25v
cmluZ0xlYWtzRXYKIF9fWk43V2ViQ29yZTROb2RlMThzdGFydElnbm9yaW5nTGVha3NFdgogX19a
TjdXZWJDb3JlNE5vZGUxOXNldE5lZWRzU3R5bGVSZWNhbGNFTlNfMTVTdHlsZUNoYW5nZVR5cGVF
Ci1fX1pON1dlYkNvcmU0UGFnZTEwZmluZFN0cmluZ0VSS04zV1RGNlN0cmluZ0VOUzFfMTlUZXh0
Q2FzZVNlbnNpdGl2aXR5RU5TXzEzRmluZERpcmVjdGlvbkViCitfX1pON1dlYkNvcmU0UGFnZTEw
ZmluZFN0cmluZ0VSS04zV1RGNlN0cmluZ0VqCiBfX1pON1dlYkNvcmU0UGFnZTExUGFnZUNsaWVu
dHNDMUV2CiBfX1pON1dlYkNvcmU0UGFnZTExUGFnZUNsaWVudHNEMUV2CiBfX1pON1dlYkNvcmU0
UGFnZTEyc2V0R3JvdXBOYW1lRVJLTjNXVEY2U3RyaW5nRQpAQCAtNjE0LDcgKzYxNCw3IEBAIF9f
Wk43V2ViQ29yZTRQYWdlMTd3aWxsTW92ZU9mZnNjcmVlbkV2CiBfX1pON1dlYkNvcmU0UGFnZTE4
cmVtb3ZlU2NoZWR1bGVQYWlyRU4zV1RGMTBQYXNzUmVmUHRySU5TXzEyU2NoZWR1bGVQYWlyRUVF
CiBfX1pON1dlYkNvcmU0UGFnZTE5dmlzaXRlZFN0YXRlQ2hhbmdlZEVQTlNfOVBhZ2VHcm91cEV5
CiBfX1pON1dlYkNvcmU0UGFnZTIwdW5tYXJrQWxsVGV4dE1hdGNoZXNFdgotX19aTjdXZWJDb3Jl
NFBhZ2UyMW1hcmtBbGxNYXRjaGVzRm9yVGV4dEVSS04zV1RGNlN0cmluZ0VOUzFfMTlUZXh0Q2Fz
ZVNlbnNpdGl2aXR5RWJqCitfX1pON1dlYkNvcmU0UGFnZTIxbWFya0FsbE1hdGNoZXNGb3JUZXh0
RVJLTjNXVEY2U3RyaW5nRWpiagogX19aTjdXZWJDb3JlNFBhZ2UyMmFsbFZpc2l0ZWRTdGF0ZUNo
YW5nZWRFUE5TXzlQYWdlR3JvdXBFCiBfX1pON1dlYkNvcmU0UGFnZTIzY2xlYXJVbmRvUmVkb09w
ZXJhdGlvbnNFdgogX19aTjdXZWJDb3JlNFBhZ2UyN3NldEphdmFTY3JpcHRVUkxzQXJlQWxsb3dl
ZEViCkBAIC02NjEsNyArNjYxLDcgQEAgX19aTjdXZWJDb3JlNkN1cnNvcjhmcm9tVHlwZUVOUzBf
NFR5cGVFCiBfX1pON1dlYkNvcmU2Q3Vyc29yRDFFdgogX19aTjdXZWJDb3JlNkN1cnNvcmFTRVJL
UzBfCiBfX1pON1dlYkNvcmU2RWRpdG9yMTBhcHBseVN0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFy
YXRpb25FTlNfMTBFZGl0QWN0aW9uRQotX19aTjdXZWJDb3JlNkVkaXRvcjEwZmluZFN0cmluZ0VS
S04zV1RGNlN0cmluZ0ViYmJiCitfX1pON1dlYkNvcmU2RWRpdG9yMTBmaW5kU3RyaW5nRVJLTjNX
VEY2U3RyaW5nRWoKIF9fWk43V2ViQ29yZTZFZGl0b3IxMGluc2VydFRleHRFUktOM1dURjZTdHJp
bmdFUE5TXzVFdmVudEUKIF9fWk43V2ViQ29yZTZFZGl0b3IxM2NhbkRIVE1MUGFzdGVFdgogX19a
TjdXZWJDb3JlNkVkaXRvcjEzcGVyZm9ybURlbGV0ZUV2CkBAIC02NzMsNyArNjczLDcgQEAgX19a
TjdXZWJDb3JlNkVkaXRvcjE2cGFzdGVBc1BsYWluVGV4dEV2CiBfX1pON1dlYkNvcmU2RWRpdG9y
MTdpbnNlcnRPcmRlcmVkTGlzdEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJtQ29tcG9z
aXRpb25FUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJtQ29tcG9z
aXRpb25FdgotX19aTjdXZWJDb3JlNkVkaXRvcjE5Y291bnRNYXRjaGVzRm9yVGV4dEVSS04zV1RG
NlN0cmluZ0ViamIKK19fWk43V2ViQ29yZTZFZGl0b3IxOWNvdW50TWF0Y2hlc0ZvclRleHRFUktO
M1dURjZTdHJpbmdFampiCiBfX1pON1dlYkNvcmU2RWRpdG9yMTlkZWxldGVXaXRoRGlyZWN0aW9u
RU5TXzE5U2VsZWN0aW9uQ29udHJvbGxlcjEwRURpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0
eUViYgogX19aTjdXZWJDb3JlNkVkaXRvcjE5aW5zZXJ0VW5vcmRlcmVkTGlzdEV2CiBfX1pON1dl
YkNvcmU2RWRpdG9yMjFhcHBseVN0eWxlVG9TZWxlY3Rpb25FUE5TXzE5Q1NTU3R5bGVEZWNsYXJh
dGlvbkVOU18xMEVkaXRBY3Rpb25FCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzI4MDMpCisrKyBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTM5OSw2ICsxMzk5LDcgQEAKICAgICAg
ICAgICAgICdlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5n
L0VkaXRvckRlbGV0ZUFjdGlvbi5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRvckluc2Vy
dEFjdGlvbi5oJywKKyAgICAgICAgICAgICdlZGl0aW5nL0ZpbmRPcHRpb25zLmgnLAogICAgICAg
ICAgICAgJ2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCcsCiAgICAgICAgICAgICAnZWRp
dGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9IVE1MSW50
ZXJjaGFuZ2UuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNzI4MDMpCisrKyBXZWJDb3JlL1dlYkNvcmUu
cHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEyLDYgKzE3MTIsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBlZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oIFwKICAgICBlZGl0aW5nL0VkaXRpbmdCb3VuZGFy
eS5oIFwKICAgICBlZGl0aW5nL0VkaXRvci5oIFwKKyAgICBlZGl0aW5nL0ZpbmRPcHRpb25zLmgg
XAogICAgIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmggXAogICAgIGVkaXRpbmcvaHRtbGVk
aXRpbmcuaCBcCiAgICAgZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuaCBcCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDcyODAzKQorKysgV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY1ODMsNiAr
NDY1ODMsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZWRpdGluZ1xGaW5kT3B0aW9ucy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xGb3JtYXRCbG9ja0NvbW1hbmQu
Y3BwIg0KIAkJCQk+DQogCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3MjgwMykKKysrIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04
NzEsNiArODcxLDggQEAKIAkJMzcxRjUzRTkwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVS
YW5nZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzNzFGNTNFNzBEMjcwNEY5MDBFQ0UwRDUgLyogQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCAqLzsg
fTsKIAkJMzcxRjUzRUEwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY1M0U4
MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAgKi87IH07CiAJCTM3
MjAyMTk5MTA2MjEzQzYwMEYyNUM0QiAvKiBGb250U21vb3RoaW5nTW9kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcyMDIxOTgxMDYyMTNDNjAwRjI1
QzRCIC8qIEZvbnRTbW9vdGhpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMzcyQzAwQzQxMjk2MTFGMTAwNUM5NTc1IC8qIFRleHRCb3Vu
ZGFyaWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDM3MkMwMEMzMTI5NjExRjEwMDVDOTU3NSAvKiBUZXh0Qm91bmRhcmllcy5jcHAgKi87IH07CisJ
CTM3MkMwMEQ5MTI5NjE5RjgwMDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcyQzAwRDgxMjk2MTlGODAwNUM5NTc1
IC8qIEZpbmRPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMzc0NDU3MEYwREIwNUZBNTAwQUUwOTkyIC8qIFNWR0dseXBoTWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzQ0NTcwRTBEQjA1
RkE1MDBBRTA5OTIgLyogU1ZHR2x5cGhNYXAuaCAqLzsgfTsKIAkJMzc1Q0QyMzIxMTlENDNDODAw
QTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCAq
LzsgfTsKIAkJMzc1Q0QyM0IxMTlENDRFQTAwQTJBODU5IC8qIEh5cGhlbmF0aW9uTWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1Q0QyMzkxMTlE
NDRFQTAwQTJBODU5IC8qIEh5cGhlbmF0aW9uTWFjLm1tICovOyB9OwpAQCAtNjk3OCw2ICs2OTgw
LDggQEAKIAkJMzcxRjUzRTcwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1VuaWNvZGVSYW5nZVZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUY1M0U4MEQyNzA0RjkwMEVDRTBE
NSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM3MjAyMTk4MTA2MjEzQzYwMEYyNUM0QiAvKiBGb250U21vb3RoaW5nTW9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250U21vb3RoaW5nTW9kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzNzJDMDBDMzEyOTYxMUYxMDA1Qzk1NzUgLyog
VGV4dEJvdW5kYXJpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGV4dEJvdW5kYXJpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzNzJDMDBE
ODEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmluZE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Mzc0NDU3MEUwREIwNUZBNTAwQUUwOTkyIC8qIFNWR0dseXBoTWFwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0dseXBoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTM3NUNEMjMxMTE5RDQzQzgwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIeXBoZW5hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzNzVDRDIzOTExOUQ0NEVBMDBBMkE4NTkgLyogSHlwaGVuYXRpb25NYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBIeXBoZW5hdGlvbk1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NjEwLDYgKzE0NjE0LDcgQEAK
IAkJCQk5M0EzOEI0QTBEMEU1ODA4MDA2ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5jcHAgKi8sCiAJ
CQkJNEJBRTk1QjAwQjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oICovLAog
CQkJCTkzRkRBRkM5MEIxMTMwNzQwMEUyNzQ2RiAvKiBFZGl0b3JJbnNlcnRBY3Rpb24uaCAqLywK
KwkJCQkzNzJDMDBEODEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCAqLywKIAkJCQlE
MDVDRUQyNzBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCAqLywKIAkJ
CQlEMDVDRUQyODBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmggKi8sCiAJ
CQkJOTMzMDlEOTgwOTlFNjQ5MTAwNTZFNTgxIC8qIGh0bWxlZGl0aW5nLmNwcCAqLywKQEAgLTE2
ODQ5LDYgKzE2ODU0LDcgQEAKIAkJCQlCMkMzRDlGRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVu
dGVkU3RyaW5nLmggKi8sCiAJCQkJQjJDM0RBMDAwRDAwNkMxRDAwRUY2RjI2IC8qIFN0cmluZy5j
cHAgKi8sCiAJCQkJOTdDMDc4NEYxMTY1RDVCRTAwM0EzMkVGIC8qIFN1ZmZpeFRyZWUuaCAqLywK
KwkJCQkzNzJDMDBDMzEyOTYxMUYxMDA1Qzk1NzUgLyogVGV4dEJvdW5kYXJpZXMuY3BwICovLAog
CQkJCUIyQzNEQTA0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oICovLAogCQkJ
CUIyQzNEQTA2MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0QnJlYWtJdGVyYXRvci5oICovLAogCQkJ
CUIyQzNEQTA3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgKi8s
CkBAIC0xOTY5MCw2ICsxOTY5Niw3IEBACiAJCQkJQkM1RUI2OUYwRTgxREFFQjAwQjI1OTY1IC8q
IEZpbGxMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5
IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAwNDgwREVD
IC8qIEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzcyQzAwRDkxMjk2MTlGODAw
NUM5NTc1IC8qIEZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjA0RjBBMTU0
RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk4
Nzg1NjYxMjJDQTA2NDAwM0FBQkRBIC8qIEZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVF
Q0RFNjEwNTAzQzI0MDAwOTlGQUIgLyogRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKQEAg
LTIzNzg3LDYgKzIzNzk0LDcgQEAKIAkJCQlGNTVCM0RENTEyNTFGMTJEMDAzRUYyNjkgLyogVGVs
ZXBob25lSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5ODc3MEVFMTI0MkM1MzUw
MDIyMjZCQSAvKiBUZXhTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU1MEI2QTUwOTlE
RjAyNzAwOTBENzgxIC8qIFRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzcyQzAwQzQxMjk2
MTFGMTAwNUM5NTc1IC8qIFRleHRCb3VuZGFyaWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
QUZGQzk3MEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUIyQzNEQTM3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0QnJlYWtJdGVyYXRvcklDVS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkFGRkM5ODBEMDBBNURGMDAzMDA3NEQgLyogVGV4dEJy
ZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAJKHJldmlzaW9uIDcyODAzKQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4MzQsMzkgKzI4MzQsMzkgQEAgYm9vbCBFZGl0b3I6Omluc2lkZVZp
c2libGVBcmVhKFJhbmdlKiByYQogICAgIHJldHVybiByZWN0SW5GcmFtZUNvb3Jkcy5jb250YWlu
cyhyZXN1bHRSZWN0KTsKIH0KIAotUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpmaXJzdFZpc2li
bGVSYW5nZShjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBjYXNlRmxhZykKK1Bhc3NSZWZQdHI8
UmFuZ2U+IEVkaXRvcjo6Zmlyc3RWaXNpYmxlUmFuZ2UoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMpCiB7CiAgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5n
ZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1lbnQoKSkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmVz
dWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIHRydWUs
IGNhc2VGbGFnKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4
dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBvcHRpb25zICYgfkJhY2t3YXJkcyk7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKICAgICB3aGlsZSAoIWluc2lkZVZpc2libGVBcmVhKHJl
c3VsdFJhbmdlLmdldCgpKSkgewogICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRlcihy
ZXN1bHRSYW5nZS0+ZW5kQ29udGFpbmVyKCksIGVjKTsKICAgICAgICAgaWYgKHNlYXJjaFJhbmdl
LT5zdGFydENvbnRhaW5lcigpID09IHNlYXJjaFJhbmdlLT5lbmRDb250YWluZXIoKSkKICAgICAg
ICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgICAg
ICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwg
dHJ1ZSwgY2FzZUZsYWcpOworICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2Vh
cmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgb3B0aW9ucyAmIH5CYWNrd2FyZHMpOwogICAgIH0KICAg
ICAKICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7CiB9CiAKLVBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRv
cjo6bGFzdFZpc2libGVSYW5nZShjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBjYXNlRmxhZykK
K1Bhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6bGFzdFZpc2libGVSYW5nZShjb25zdCBTdHJpbmcm
IHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBSZWZQdHI8UmFuZ2U+IHNlYXJj
aFJhbmdlKHJhbmdlT2ZDb250ZW50cyhtX2ZyYW1lLT5kb2N1bWVudCgpKSk7Ci0gICAgUmVmUHRy
PFJhbmdlPiByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRh
cmdldCwgZmFsc2UsIGNhc2VGbGFnKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0g
ZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBvcHRpb25zIHwgQmFja3dh
cmRzKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAogICAgIHdoaWxlICghaW5zaWRlVmlz
aWJsZUFyZWEocmVzdWx0UmFuZ2UuZ2V0KCkpKSB7CiAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRF
bmRCZWZvcmUocmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIGVjKTsKICAgICAgICAgaWYg
KHNlYXJjaFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNlYXJjaFJhbmdlLT5lbmRDb250YWlu
ZXIoKSkKICAgICAgICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50
KCkpOwotICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0
KCksIHRhcmdldCwgZmFsc2UsIGNhc2VGbGFnKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5k
UGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIG9wdGlvbnMgfCBCYWNrd2FyZHMp
OwogICAgIH0KICAgICAKICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7CiB9CiAKLVBhc3NSZWZQdHI8
UmFuZ2U+IEVkaXRvcjo6bmV4dFZpc2libGVSYW5nZShSYW5nZSogY3VycmVudFJhbmdlLCBjb25z
dCBTdHJpbmcmIHRhcmdldCwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBG
bGFnKQorUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpuZXh0VmlzaWJsZVJhbmdlKFJhbmdlKiBj
dXJyZW50UmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQog
ewogICAgIGlmIChtX2ZyYW1lLT5leGNsdWRlRnJvbVRleHRTZWFyY2goKSkKICAgICAgICAgcmV0
dXJuIFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CkBAIC0yODc0LDggKzI4NzQs
OCBAQCBQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6Om5leHRWaXNpYmxlUmFuCiAgICAgUmVmUHRy
PFJhbmdlPiByZXN1bHRSYW5nZSA9IGN1cnJlbnRSYW5nZTsKICAgICBSZWZQdHI8UmFuZ2U+IHNl
YXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50cyhtX2ZyYW1lLT5kb2N1bWVudCgpKSk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgCi0gICAgZm9yICggOyAhaW5zaWRlVmlzaWJsZUFyZWEo
cmVzdWx0UmFuZ2UuZ2V0KCkpOyByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFu
Z2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcpKSB7CisgICAgYm9vbCBmb3J3YXJk
ID0gIShvcHRpb25zICYgQmFja3dhcmRzKTsKKyAgICBmb3IgKCA7ICFpbnNpZGVWaXNpYmxlQXJl
YShyZXN1bHRSYW5nZS5nZXQoKSk7IHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hS
YW5nZS5nZXQoKSwgdGFyZ2V0LCBvcHRpb25zKSkgewogICAgICAgICBpZiAocmVzdWx0UmFuZ2Ut
PmNvbGxhcHNlZChlYykpIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0UmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCktPmlzSW5TaGFkb3dUcmVlKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0y
OTA3LDEzICsyOTA3LDEzIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6bmV4dFZpc2libGVS
YW4KICAgICBpZiAoaW5zaWRlVmlzaWJsZUFyZWEocmVzdWx0UmFuZ2UuZ2V0KCkpKQogICAgICAg
ICByZXR1cm4gcmVzdWx0UmFuZ2U7CiAgICAgCi0gICAgaWYgKCF3cmFwRmxhZykKKyAgICBpZiAo
IShvcHRpb25zICYgV3JhcEFyb3VuZCkpCiAgICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKG1f
ZnJhbWUtPmRvY3VtZW50KCkpOwogCi0gICAgaWYgKGZvcndhcmQpCi0gICAgICAgIHJldHVybiBm
aXJzdFZpc2libGVSYW5nZSh0YXJnZXQsIGNhc2VGbGFnKTsKKyAgICBpZiAob3B0aW9ucyAmIEJh
Y2t3YXJkcykKKyAgICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlUmFuZ2UodGFyZ2V0LCBvcHRpb25z
KTsKIAotICAgIHJldHVybiBsYXN0VmlzaWJsZVJhbmdlKHRhcmdldCwgY2FzZUZsYWcpOworICAg
IHJldHVybiBmaXJzdFZpc2libGVSYW5nZSh0YXJnZXQsIG9wdGlvbnMpOwogfQogCiB2b2lkIEVk
aXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG5ld1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKQpA
QCAtMzE4NSw2ICszMTg1LDEyIEBAIFJlbmRlclN0eWxlKiBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0
aW9uU3QKIC8vIFNlYXJjaGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQgaWYg
bm90aGluZyBpcyBzZWxlY3RlZC4KIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBib29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJvb2wgd3JhcEZsYWcsIGJv
b2wgc3RhcnRJblNlbGVjdGlvbikKIHsKKyAgICBGaW5kT3B0aW9ucyBvcHRpb25zID0gKGZvcndh
cmQgPyAwIDogQmFja3dhcmRzKSB8IChjYXNlRmxhZyA/IDAgOiBDYXNlSW5zZW5zaXRpdmUpIHwg
KHdyYXBGbGFnID8gV3JhcEFyb3VuZCA6IDApIHwgKHN0YXJ0SW5TZWxlY3Rpb24gPyBTdGFydElu
U2VsZWN0aW9uIDogMCk7CisgICAgcmV0dXJuIGZpbmRTdHJpbmcodGFyZ2V0LCBvcHRpb25zKTsK
K30KKworYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRP
cHRpb25zIG9wdGlvbnMpCit7CiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMzE5Niw2ICszMjAyLDggQEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJp
bmcoY29uc3QgU3RyaW5nJiB0YQogICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VP
ZkNvbnRlbnRzKG1fZnJhbWUtPmRvY3VtZW50KCkpKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKIAorICAgIGJvb2wg
Zm9yd2FyZCA9ICEob3B0aW9ucyAmIEJhY2t3YXJkcyk7CisgICAgYm9vbCBzdGFydEluU2VsZWN0
aW9uID0gb3B0aW9ucyAmIFN0YXJ0SW5TZWxlY3Rpb247CiAgICAgaWYgKGZvcndhcmQpCiAgICAg
ICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBzdGFydEluU2VsZWN0aW9uID8gc2VsZWN0
aW9uLnZpc2libGVTdGFydCgpIDogc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CiAgICAgZWxzZQpA
QCAtMzIxMCw3ICszMjE4LDcgQEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5n
JiB0YQogICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHNoYWRvd1RyZWVSb290Lmdl
dCgpLCAwLCBlYyk7CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5k
UGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnKSk7
CisgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdl
LmdldCgpLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICAvLyBJZiB3ZSBzdGFydGVkIGluIHRoZSBz
ZWxlY3Rpb24gYW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNoZXMgdGhlIGV4aXN0aW5n
IHNlbGVjdGlvbiwgZmluZCBhZ2Fpbi4KICAgICAvLyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRo
ZSBmb3VuZCByYW5nZSB0byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2UuCiAgICAgLy8gQ29t
cGFyZSByYW5nZXMgaW5zdGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdh
eSB0aGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KQEAgLTMyMjksNyArMzIzNyw3
IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGEKICAgICAgICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDAsIGVjKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hS
YW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZyk7CisgICAgICAgIHJlc3VsdFJh
bmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBvcHRpb25zKTsK
ICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7CkBAIC0zMjQyLDIwICsz
MjUwLDIwIEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGEKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZEJlZm9yZShzaGFkb3dUcmVl
Um9vdC0+c2hhZG93UGFyZW50Tm9kZSgpLCBleGNlcHRpb24pOwogCi0gICAgICAgIHJlc3VsdFJh
bmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBj
YXNlRmxhZyk7CisgICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5n
ZS5nZXQoKSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICB9CiAKICAgICBpZiAoIWluc2lkZVZpc2li
bGVBcmVhKHJlc3VsdFJhbmdlLmdldCgpKSkgewotICAgICAgICByZXN1bHRSYW5nZSA9IG5leHRW
aXNpYmxlUmFuZ2UocmVzdWx0UmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcs
IHdyYXBGbGFnKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UgPSBuZXh0VmlzaWJsZVJhbmdlKHJlc3Vs
dFJhbmdlLmdldCgpLCB0YXJnZXQsIG9wdGlvbnMpOwogICAgICAgICBpZiAoIXJlc3VsdFJhbmdl
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIElmIHdlIGRpZG4n
dCBmaW5kIGFueXRoaW5nIGFuZCB3ZSdyZSB3cmFwcGluZywgc2VhcmNoIGFnYWluIGluIHRoZSBl
bnRpcmUgZG9jdW1lbnQgKHRoaXMgd2lsbAogICAgIC8vIHJlZHVuZGFudGx5IHJlLXNlYXJjaCB0
aGUgYXJlYSBhbHJlYWR5IHNlYXJjaGVkIGluIHNvbWUgY2FzZXMpLgotICAgIGlmIChyZXN1bHRS
YW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikgJiYgd3JhcEZsYWcpIHsKKyAgICBpZiAocmVzdWx0
UmFuZ2UtPmNvbGxhcHNlZChleGNlcHRpb24pICYmIG9wdGlvbnMgJiBXcmFwQXJvdW5kKSB7CiAg
ICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKG1fZnJhbWUtPmRvY3VtZW50KCkp
OwotICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCks
IHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcpOworICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQ
bGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgb3B0aW9ucyk7CiAgICAgICAgIC8v
IFdlIHVzZWQgdG8gcmV0dXJuIGZhbHNlIGhlcmUgaWYgd2UgZW5kZWQgdXAgd2l0aCB0aGUgc2Ft
ZSByYW5nZSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aAogICAgICAgICAvLyAoZS5nLiwgdGhlIHNlbGVj
dGlvbiB3YXMgYWxyZWFkeSB0aGUgb25seSBpbnN0YW5jZSBvZiB0aGlzIHRleHQpLiBCdXQgd2Ug
ZGVjaWRlZCB0aGF0CiAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGEgc3VjY2VzcyBjYXNlIGlu
c3RlYWQsIHNvIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIGluIHRoYXQgY2FzZS4KQEAgLTMyNjks
NyArMzI3Nyw3IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGEKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGNhc2VGbGFnLCB1bnNpZ25lZCBsaW1pdCwgYm9v
bCBtYXJrTWF0Y2hlcykKK3Vuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25z
dCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJv
b2wgbWFya01hdGNoZXMpCiB7CiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMzI3OSw3ICszMjg3LDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNo
ZXNGb3JUZXh0KGNvbgogICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKICAgICB1bnNp
Z25lZCBtYXRjaENvdW50ID0gMDsKICAgICBkbyB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVz
dWx0UmFuZ2UoZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCB0cnVlLCBj
YXNlRmxhZykpOworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRl
eHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgb3B0aW9ucyAmIH5CYWNrd2FyZHMpKTsKICAg
ICAgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSkgewogICAgICAgICAg
ICAgaWYgKCFyZXN1bHRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+aXNJblNoYWRvd1RyZWUoKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDcyODAzKQor
KysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiRWRpdGluZ0JlaGF2aW9yLmgiCiAjaW5jbHVkZSAiRWRpdG9yRGVsZXRl
QWN0aW9uLmgiCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgiCisjaW5jbHVkZSAiRmlu
ZE9wdGlvbnMuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAKICNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKF9fT0JKQ19fKQpAQCAtMzA3LDcgKzMwOCw2IEBAIHB1Ymxp
YzoKICAgICAvLyBXZSBzaG91bGQgbWFrZSB0aGVzZSBmdW5jdGlvbnMgcHJpdmF0ZSB3aGVuIHRo
ZWlyIGNhbGxlcnMgaW4gRnJhbWUgYXJlIG1vdmVkIG92ZXIgaGVyZSB0byBFZGl0b3IKICAgICBi
b29sIGluc2lkZVZpc2libGVBcmVhKGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgYm9vbCBp
bnNpZGVWaXNpYmxlQXJlYShSYW5nZSopIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8UmFuZ2U+IG5l
eHRWaXNpYmxlUmFuZ2UoUmFuZ2UqLCBjb25zdCBTdHJpbmcmLCBib29sIGZvcndhcmQsIGJvb2wg
Y2FzZUZsYWcsIGJvb2wgd3JhcEZsYWcpOwogCiAgICAgdm9pZCBhZGRUb0tpbGxSaW5nKFJhbmdl
KiwgYm9vbCBwcmVwZW5kKTsKIApAQCAtMzI4LDYgKzMyOCw4IEBAIHB1YmxpYzoKICAgICBOb2Rl
KiBmaW5kRXZlbnRUYXJnZXRGcm9tKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikg
Y29uc3Q7CiAKICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7CisgICAgYm9vbCBmaW5k
U3RyaW5nKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKKyAgICAvLyBGSVhNRTogU3dpdGNo
IGNhbGxlcnMgb3ZlciB0byB0aGUgRmluZE9wdGlvbnMgdmVyc2lvbiBhbmQgcmV0aXJlIHRoaXMg
b25lLgogICAgIGJvb2wgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCBib29sIGZvcndhcmQsIGJv
b2wgY2FzZUZsYWcsIGJvb2wgd3JhcEZsYWcsIGJvb2wgc3RhcnRJblNlbGVjdGlvbik7CiAKICAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBtYXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVz
ZWQgYXMgZW1hY3MgdXNlcyBpdC4KQEAgLTM0NCw3ICszNDYsNyBAQCBwdWJsaWM6CiAKICAgICBS
ZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChOb2RlKiYgbm9kZVRvUmVtb3ZlKSBj
b25zdDsKIAotICAgIHVuc2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwg
Ym9vbCBjYXNlRmxhZywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMpOworICAgIHVu
c2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVu
c2lnbmVkIGxpbWl0LCBib29sIG1hcmtNYXRjaGVzKTsKICAgICBib29sIG1hcmtlZFRleHRNYXRj
aGVzQXJlSGlnaGxpZ2h0ZWQoKSBjb25zdDsKICAgICB2b2lkIHNldE1hcmtlZFRleHRNYXRjaGVz
QXJlSGlnaGxpZ2h0ZWQoYm9vbCk7CiAKQEAgLTM5OCw4ICs0MDAsOSBAQCBwcml2YXRlOgogICAg
IHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYsIGJvb2wgcHJlc2VydmVTZWxl
Y3Rpb24pOwogICAgIHZvaWQgc2V0SWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoYm9v
bCBpZ25vcmUpOwogCi0gICAgUGFzc1JlZlB0cjxSYW5nZT4gZmlyc3RWaXNpYmxlUmFuZ2UoY29u
c3QgU3RyaW5nJiwgYm9vbCBjYXNlRmxhZyk7Ci0gICAgUGFzc1JlZlB0cjxSYW5nZT4gbGFzdFZp
c2libGVSYW5nZShjb25zdCBTdHJpbmcmLCBib29sIGNhc2VGbGFnKTsKKyAgICBQYXNzUmVmUHRy
PFJhbmdlPiBmaXJzdFZpc2libGVSYW5nZShjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7Cisg
ICAgUGFzc1JlZlB0cjxSYW5nZT4gbGFzdFZpc2libGVSYW5nZShjb25zdCBTdHJpbmcmLCBGaW5k
T3B0aW9ucyk7CisgICAgUGFzc1JlZlB0cjxSYW5nZT4gbmV4dFZpc2libGVSYW5nZShSYW5nZSos
IGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKIAogICAgIHZvaWQgY2hhbmdlU2VsZWN0aW9u
QWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgYm9vbCBj
bG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKTsKICAgICB2b2lkIGNvcnJlY3Rpb25Q
YW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Zp
bmRPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0ZpbmRPcHRpb25zLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2VkaXRpbmcvRmluZE9wdGlvbnMuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmluZE9wdGlvbnNfaAor
I2RlZmluZSBGaW5kT3B0aW9uc19oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBGaW5k
T3B0aW9uRmxhZyB7CisgICAgQ2FzZUluc2Vuc2l0aXZlID0gMSA8PCAwLAorICAgIEF0V29yZFN0
YXJ0cyA9IDEgPDwgMSwKKyAgICAvLyBXaGVuIGNvbWJpbmVkIHdpdGggQXRXb3JkU3RhcnRzLCBh
Y2NlcHRzIGEgbWF0Y2ggaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQgaWYgdGhlIG1hdGNoIGJlZ2lu
cyB3aXRoCisgICAgLy8gYW4gdXBwZXJjYXNlIGxldHRlciBmb2xsb3dlZCBieSBhIGxvd2VyY2Fz
ZSBvciBub24tbGV0dGVyLiBBY2NlcHRzIHNldmVyYWwgb3RoZXIgaW50cmEtd29yZCBtYXRjaGVz
LgorICAgIFRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0ID0gMSA8PCAyLAorICAgIEJhY2t3
YXJkcyA9IDEgPDwgMywKKyAgICBXcmFwQXJvdW5kID0gMSA8PCA0LAorICAgIFN0YXJ0SW5TZWxl
Y3Rpb24gPSAxIDw8IDUKK307CisKK3R5cGVkZWYgdW5zaWduZWQgRmluZE9wdGlvbnM7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZpbmRPcHRpb25zX2gKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9UZXh0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiA3MjgwMykKKysrIFdlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBACiAjaW5j
bHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgog
I2luY2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgorI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVz
LmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9z
aXRpb24uaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAKQEAgLTU2LDE0ICs1OCwxNyBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogLy8gQnVmZmVyIHRoYXQga25vd3MgaG93IHRv
IGNvbXBhcmUgd2l0aCBhIHNlYXJjaCB0YXJnZXQuCiAvLyBLZWVwcyBlbm91Z2ggb2YgdGhlIHBy
ZXZpb3VzIHRleHQgdG8gYmUgYWJsZSB0byBzZWFyY2ggaW4gdGhlIGZ1dHVyZSwgYnV0IG5vIG1v
cmUuCiAvLyBOb24tYnJlYWtpbmcgc3BhY2VzIGFyZSBhbHdheXMgZXF1YWwgdG8gbm9ybWFsIHNw
YWNlcy4KLS8vIENhc2UgZm9sZGluZyBpcyBhbHNvIGRvbmUgaWYgPGlzQ2FzZVNlbnNpdGl2ZT4g
aXMgZmFsc2UuCisvLyBDYXNlIGZvbGRpbmcgaXMgYWxzbyBkb25lIGlmIHRoZSBDYXNlSW5zZW5z
aXRpdmUgb3B0aW9uIGlzIHNwZWNpZmllZC4KKy8vIE1hdGNoZXMgYXJlIGZ1cnRoZXIgZmlsdGVy
ZWQgaWYgdGhlIEF0V29yZFN0YXJ0cyBvcHRpb24gaXMgc3BlY2lmaWVkLCBhbHRob3VnaCBzb21l
CisvLyBtYXRjaGVzIGluc2lkZSBhIHdvcmQgYXJlIHBlcm1pdHRlZCBpZiBUcmVhdE1lZGlhbENh
cGl0YWxBc1dvcmRTdGFydCBpcyBzcGVjaWZpZWQgYXMgd2VsbC4KIGNsYXNzIFNlYXJjaEJ1ZmZl
ciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgU2VhcmNoQnVmZmVyKGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBib29sIGlzQ2FzZVNlbnNpdGl2ZSk7CisgICAgU2VhcmNoQnVmZmVy
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyk7CiAgICAgflNlYXJjaEJ1ZmZlcigp
OwogCiAgICAgLy8gUmV0dXJucyBudW1iZXIgb2YgY2hhcmFjdGVycyBhcHBlbmRlZDsgZ3VhcmFu
dGVlZCB0byBiZSBpbiB0aGUgcmFuZ2UgWzEsIGxlbmd0aF0uCiAgICAgc2l6ZV90IGFwcGVuZChj
b25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgpOworICAgIHNpemVfdCBwcmVwZW5kQ29udGV4dChj
b25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgpOwogICAgIHZvaWQgcmVhY2hlZEJyZWFrKCk7CiAK
ICAgICAvLyBSZXN1bHQgaXMgdGhlIHNpemUgaW4gY2hhcmFjdGVycyBvZiB3aGF0IHdhcyBmb3Vu
ZC4KQEAgLTc1LDEwICs4MCwxMyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc0Jh
ZE1hdGNoKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCkgY29uc3Q7CisgICAgYm9vbCBpc1dv
cmRTdGFydE1hdGNoKHNpemVfdCBzdGFydCwgc2l6ZV90IGxlbmd0aCkgY29uc3Q7CiAKICAgICBT
dHJpbmcgbV90YXJnZXQ7CisgICAgRmluZE9wdGlvbnMgbV9vcHRpb25zOwogICAgIFZlY3RvcjxV
Q2hhcj4gbV9idWZmZXI7CiAgICAgc2l6ZV90IG1fb3ZlcmxhcDsKKyAgICBzaXplX3QgbV9wcmVm
aXhMZW5ndGg7CiAgICAgYm9vbCBtX2F0QnJlYWs7CiAKICAgICBib29sIG1fdGFyZ2V0UmVxdWly
ZXNLYW5hV29ya2Fyb3VuZDsKQEAgLTkyLDcgKzEwMCw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90
IGxlbmd0aCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIG1fdGFyZ2V0OwotICAgIGJvb2wgbV9pc0Nh
c2VTZW5zaXRpdmU7CisgICAgRmluZE9wdGlvbnMgbV9vcHRpb25zOwogCiAgICAgVmVjdG9yPFVD
aGFyPiBtX2J1ZmZlcjsKICAgICBWZWN0b3I8Ym9vbD4gbV9pc0NoYXJhY3RlclN0YXJ0QnVmZmVy
OwpAQCAtMTgyOCw4ICsxODM2LDQ0IEBAIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMo
Y29uc3QgVUMKICAgICBBU1NFUlQoc3RhdHVzID09IFVfU1RSSU5HX05PVF9URVJNSU5BVEVEX1dB
Uk5JTkcpOwogfQogCi1pbmxpbmUgU2VhcmNoQnVmZmVyOjpTZWFyY2hCdWZmZXIoY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIGJvb2wgaXNDYXNlU2Vuc2l0aXZlKQorc3RhdGljIGJvb2wgaXNOb25MYXRp
bjFTZXBhcmF0b3IoVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgQVNTRVJUX0FSRyhjaGFyYWN0
ZXIsIGNoYXJhY3RlciA+PSAyNTYpOworCisgICAgcmV0dXJuIFVfR0VUX0dDX01BU0soY2hhcmFj
dGVyKSAmIChVX0dDX1NfTUFTSyB8IFVfR0NfUF9NQVNLIHwgVV9HQ19aX01BU0sgfCBVX0dDX0NG
X01BU0spOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTZXBhcmF0b3IoVUNoYXIzMiBjaGFy
YWN0ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgbGF0aW4xU2VwYXJhdG9yVGFibGVbMjU2
XSA9IHsKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwKKyAgICAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMSwgLy8gc3BhY2UgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8KKyAgICAgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgOiA7IDwgPSA+ID8KKyAgICAgICAgMSwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgLy8gICBACisgICAgICAgIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIC8vICAgICAgICAgICAgICAgICAgICAg
ICAgIFsgXCBdIF4gXworICAgICAgICAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAvLyAgIGAKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMSwgMSwgMSwgMSwgMCwgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB7IHwgfSB+
CisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
CisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
CisgICAgICAgIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEs
CisgICAgICAgIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEs
CisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
CisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
CisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
CisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAK
KyAgICB9OworCisgICAgaWYgKGNoYXJhY3RlciA8IDI1NikKKyAgICAgICAgcmV0dXJuIGxhdGlu
MVNlcGFyYXRvclRhYmxlW2NoYXJhY3Rlcl07CisKKyAgICByZXR1cm4gaXNOb25MYXRpbjFTZXBh
cmF0b3IoY2hhcmFjdGVyKTsKK30KKworaW5saW5lIFNlYXJjaEJ1ZmZlcjo6U2VhcmNoQnVmZmVy
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogICAgIDogbV90YXJn
ZXQodGFyZ2V0KQorICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCisgICAgLCBtX3ByZWZpeExlbmd0
aCgwKQogICAgICwgbV9hdEJyZWFrKHRydWUpCiAgICAgLCBtX3RhcmdldFJlcXVpcmVzS2FuYVdv
cmthcm91bmQoY29udGFpbnNLYW5hTGV0dGVycyhtX3RhcmdldCkpCiB7CkBAIC0xODUyLDcgKzE4
OTYsNyBAQCBpbmxpbmUgU2VhcmNoQnVmZmVyOjpTZWFyY2hCdWZmZXIoY29uc3QgCiAgICAgVVN0
cmluZ1NlYXJjaCogc2VhcmNoZXIgPSBXZWJDb3JlOjpzZWFyY2hlcigpOwogICAgIFVDb2xsYXRv
ciogY29sbGF0b3IgPSB1c2VhcmNoX2dldENvbGxhdG9yKHNlYXJjaGVyKTsKIAotICAgIFVDb2xs
YXRpb25TdHJlbmd0aCBzdHJlbmd0aCA9IGlzQ2FzZVNlbnNpdGl2ZSA/IFVDT0xfVEVSVElBUlkg
OiBVQ09MX1BSSU1BUlk7CisgICAgVUNvbGxhdGlvblN0cmVuZ3RoIHN0cmVuZ3RoID0gbV9vcHRp
b25zICYgQ2FzZUluc2Vuc2l0aXZlID8gVUNPTF9QUklNQVJZIDogVUNPTF9URVJUSUFSWTsKICAg
ICBpZiAodWNvbF9nZXRTdHJlbmd0aChjb2xsYXRvcikgIT0gc3RyZW5ndGgpIHsKICAgICAgICAg
dWNvbF9zZXRTdHJlbmd0aChjb2xsYXRvciwgc3RyZW5ndGgpOwogICAgICAgICB1c2VhcmNoX3Jl
c2V0KHNlYXJjaGVyKTsKQEAgLTE4NzgsOSArMTkyMiwxMSBAQCBpbmxpbmUgc2l6ZV90IFNlYXJj
aEJ1ZmZlcjo6YXBwZW5kKGNvbnN0CiAKICAgICBpZiAobV9hdEJyZWFrKSB7CiAgICAgICAgIG1f
YnVmZmVyLnNocmluaygwKTsKKyAgICAgICAgbV9wcmVmaXhMZW5ndGggPSAwOwogICAgICAgICBt
X2F0QnJlYWsgPSBmYWxzZTsKICAgICB9IGVsc2UgaWYgKG1fYnVmZmVyLnNpemUoKSA9PSBtX2J1
ZmZlci5jYXBhY2l0eSgpKSB7CiAgICAgICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCksIG1fYnVm
ZmVyLmRhdGEoKSArIG1fYnVmZmVyLnNpemUoKSAtIG1fb3ZlcmxhcCwgbV9vdmVybGFwICogc2l6
ZW9mKFVDaGFyKSk7CisgICAgICAgIG1fcHJlZml4TGVuZ3RoIC09IG1pbihtX3ByZWZpeExlbmd0
aCwgbV9idWZmZXIuc2l6ZSgpIC0gbV9vdmVybGFwKTsKICAgICAgICAgbV9idWZmZXIuc2hyaW5r
KG1fb3ZlcmxhcCk7CiAgICAgfQogCkBAIC0xODkyLDYgKzE5MzgsMjEgQEAgaW5saW5lIHNpemVf
dCBTZWFyY2hCdWZmZXI6OmFwcGVuZChjb25zdAogICAgIHJldHVybiB1c2FibGVMZW5ndGg7CiB9
CiAKK3NpemVfdCBTZWFyY2hCdWZmZXI6OnByZXBlbmRDb250ZXh0KGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQoreworICAgIEFTU0VSVF9BUkcobGVuZ3RoLCBsZW5ndGgp
OworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChtX3By
ZWZpeExlbmd0aCA9PSBtX2J1ZmZlci5zaXplKCkpOworCisgICAgbV9hdEJyZWFrID0gZmFsc2U7
CisgICAgc2l6ZV90IHVzYWJsZUxlbmd0aCA9IG1pbihtX2J1ZmZlci5jYXBhY2l0eSgpIC0gbV9w
cmVmaXhMZW5ndGgsIGxlbmd0aCk7CisgICAgbV9idWZmZXIucHJlcGVuZChjaGFyYWN0ZXJzICsg
bGVuZ3RoIC0gdXNhYmxlTGVuZ3RoLCB1c2FibGVMZW5ndGgpOworICAgIG1fcHJlZml4TGVuZ3Ro
ICs9IHVzYWJsZUxlbmd0aDsKKyAgICByZXR1cm4gdXNhYmxlTGVuZ3RoOworfQorCiBpbmxpbmUg
Ym9vbCBTZWFyY2hCdWZmZXI6OmF0QnJlYWsoKSBjb25zdAogewogICAgIHJldHVybiBtX2F0QnJl
YWs7CkBAIC0xOTYyLDYgKzIwMjMsNTEgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc0Jh
ZE1hdGNoKGNvbgogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc1dvcmRT
dGFydE1hdGNoKHNpemVfdCBzdGFydCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9vcHRpb25zICYgQXRXb3JkU3RhcnRzKTsKKworICAgIGlmIChtX29wdGlvbnMgJiBUcmVh
dE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCkgeworICAgICAgICBpbnQgc2l6ZSA9IG1fYnVmZmVy
LnNpemUoKTsKKyAgICAgICAgaW50IG9mZnNldCA9IHN0YXJ0OworICAgICAgICBVQ2hhcjMyIGZp
cnN0Q2hhcmFjdGVyOworICAgICAgICBVMTZfR0VUKG1fYnVmZmVyLmRhdGEoKSwgMCwgb2Zmc2V0
LCBzaXplLCBmaXJzdENoYXJhY3Rlcik7CisgICAgICAgIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0
ZXI7CisgICAgICAgIFUxNl9QUkVWKG1fYnVmZmVyLmRhdGEoKSwgMCwgb2Zmc2V0LCBwcmV2aW91
c0NoYXJhY3Rlcik7CisKKyAgICAgICAgaWYgKGlzU2VwYXJhdG9yKGZpcnN0Q2hhcmFjdGVyKSkg
eworICAgICAgICAgICAgLy8gVGhlIHN0YXJ0IG9mIGEgc2VwYXJhdG9yIHJ1biBpcyBhIHdvcmQg
c3RhcnQgKCIub3JnIiBpbiAid2Via2l0Lm9yZyIpLgorICAgICAgICAgICAgaWYgKCFpc1NlcGFy
YXRvcihwcmV2aW91c0NoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaXNBU0NJSVVwcGVyKGZpcnN0Q2hhcmFjdGVyKSkgeworICAgICAg
ICAgICAgLy8gVGhlIHN0YXJ0IG9mIGFuIHVwcGVyY2FzZSBydW4gaXMgYSB3b3JkIHN0YXJ0ICgi
S2l0IiBpbiAiV2ViS2l0IikuCisgICAgICAgICAgICBpZiAoIWlzQVNDSUlVcHBlcihwcmV2aW91
c0NoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAv
LyBUaGUgbGFzdCBjaGFyYWN0ZXIgb2YgYW4gdXBwZXJjYXNlIHJ1biBmb2xsb3dlZCBieSBhIG5v
bi1zZXBhcmF0b3IsIG5vbi1kaWdpdAorICAgICAgICAgICAgLy8gaXMgYSB3b3JkIHN0YXJ0ICgi
UmVxdWVzdCIgaW4gIlhNTEhUVFBSZXF1ZXN0IikuCisgICAgICAgICAgICBvZmZzZXQgPSBzdGFy
dDsKKyAgICAgICAgICAgIFVDaGFyMzIgbmV4dENoYXJhY3RlcjsKKyAgICAgICAgICAgIFUxNl9G
V0RfMShtX2J1ZmZlci5kYXRhKCksIG9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICBVMTZfR0VU
KG1fYnVmZmVyLmRhdGEoKSwgMCwgb2Zmc2V0LCBzaXplLCBuZXh0Q2hhcmFjdGVyKTsKKyAgICAg
ICAgICAgIGlmICghaXNBU0NJSVVwcGVyKG5leHRDaGFyYWN0ZXIpICYmICFpc0FTQ0lJRGlnaXQo
bmV4dENoYXJhY3RlcikgJiYgIWlzU2VwYXJhdG9yKG5leHRDaGFyYWN0ZXIpKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGlzQVNDSUlEaWdpdChmaXJz
dENoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIC8vIFRoZSBzdGFydCBvZiBhIGRpZ2l0IHJ1biBp
cyBhIHdvcmQgc3RhcnQgKCIyIiBpbiAiV2ViS2l0MiIpLgorICAgICAgICAgICAgaWYgKCFpc0FT
Q0lJRGlnaXQocHJldmlvdXNDaGFyYWN0ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9IGVsc2UgaWYgKGlzU2VwYXJhdG9yKHByZXZpb3VzQ2hhcmFjdGVyKSB8fCBp
c0FTQ0lJRGlnaXQocHJldmlvdXNDaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAvLyBUaGUgc3Rh
cnQgb2YgYSBub24tc2VwYXJhdG9yLCBub24tdXBwZXJjYXNlLCBub24tZGlnaXQgcnVuIGlzIGEg
d29yZCBzdGFydCwKKyAgICAgICAgICAgIC8vIGV4Y2VwdCBhZnRlciBhbiB1cHBlcmNhc2UuICgi
b3JnIiBpbiAid2Via2l0Lm9yZyIsIGJ1dCBub3QgIm9yZSIgaW4gIldlYkNvcmUiKS4KKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc2l6ZV90IHdvcmRC
cmVha1NlYXJjaFN0YXJ0ID0gc3RhcnQgKyBsZW5ndGg7CisgICAgd2hpbGUgKHdvcmRCcmVha1Nl
YXJjaFN0YXJ0ID4gc3RhcnQpCisgICAgICAgIHdvcmRCcmVha1NlYXJjaFN0YXJ0ID0gZmluZE5l
eHRXb3JkRnJvbUluZGV4KG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpLCB3b3JkQnJl
YWtTZWFyY2hTdGFydCwgZmFsc2UgLyogYmFja3dhcmRzICovKTsKKyAgICByZXR1cm4gd29yZEJy
ZWFrU2VhcmNoU3RhcnQgPT0gc3RhcnQ7Cit9CisKIGlubGluZSBzaXplX3QgU2VhcmNoQnVmZmVy
OjpzZWFyY2goc2l6ZV90JiBzdGFydCkKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fYnVmZmVyLnNp
emUoKTsKQEAgLTE5NzksNyArMjA4NSwxMCBAQCBpbmxpbmUgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6
c2VhcmNoKHNpemVfCiAgICAgdXNlYXJjaF9zZXRUZXh0KHNlYXJjaGVyLCBtX2J1ZmZlci5kYXRh
KCksIHNpemUsICZzdGF0dXMpOwogICAgIEFTU0VSVChzdGF0dXMgPT0gVV9aRVJPX0VSUk9SKTsK
IAotICAgIGludCBtYXRjaFN0YXJ0ID0gdXNlYXJjaF9maXJzdChzZWFyY2hlciwgJnN0YXR1cyk7
CisgICAgdXNlYXJjaF9zZXRPZmZzZXQoc2VhcmNoZXIsIG1fcHJlZml4TGVuZ3RoLCAmc3RhdHVz
KTsKKyAgICBBU1NFUlQoc3RhdHVzID09IFVfWkVST19FUlJPUik7CisKKyAgICBpbnQgbWF0Y2hT
dGFydCA9IHVzZWFyY2hfbmV4dChzZWFyY2hlciwgJnN0YXR1cyk7CiAgICAgQVNTRVJUKHN0YXR1
cyA9PSBVX1pFUk9fRVJST1IpOwogCiBuZXh0TWF0Y2g6CkBAIC0xOTkyLDggKzIxMDEsMTggQEAg
bmV4dE1hdGNoOgogICAgIC8vIFRoZSBzYW1lIG1hdGNoIG1heSBhcHBlYXIgbGF0ZXIsIG1hdGNo
aW5nIG1vcmUgY2hhcmFjdGVycywKICAgICAvLyBwb3NzaWJseSBpbmNsdWRpbmcgYSBjb21iaW5p
bmcgY2hhcmFjdGVyIHRoYXQncyBub3QgeWV0IGluIHRoZSBidWZmZXIuCiAgICAgaWYgKCFtX2F0
QnJlYWsgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihtYXRjaFN0YXJ0KSA+PSBzaXplIC0gbV9vdmVy
bGFwKSB7Ci0gICAgICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLmRhdGEoKSAr
IHNpemUgLSBtX292ZXJsYXAsIG1fb3ZlcmxhcCAqIHNpemVvZihVQ2hhcikpOwotICAgICAgICBt
X2J1ZmZlci5zaHJpbmsobV9vdmVybGFwKTsKKyAgICAgICAgc2l6ZV90IG92ZXJsYXAgPSBtX292
ZXJsYXA7CisgICAgICAgIGlmIChtX29wdGlvbnMgJiBBdFdvcmRTdGFydHMpIHsKKyAgICAgICAg
ICAgIC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgY29udGV4dCBiZWZvcmUgbWF0
Y2hTdGFydCB0aGUgbmV4dCB0aW1lIGFyb3VuZCBmb3IKKyAgICAgICAgICAgIC8vIGRldGVybWlu
aW5nIGlmIGl0IGlzIGF0IGEgd29yZCBib3VuZGFyeS4KKyAgICAgICAgICAgIGludCB3b3JkQm91
bmRhcnlDb250ZXh0U3RhcnQgPSBtYXRjaFN0YXJ0OworICAgICAgICAgICAgVTE2X0JBQ0tfMSht
X2J1ZmZlci5kYXRhKCksIDAsIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCk7CisgICAgICAgICAg
ICB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRl
eHQobV9idWZmZXIuZGF0YSgpLCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpOworICAgICAgICAg
ICAgb3ZlcmxhcCA9IG1pbihzaXplIC0gMSwgbWF4KG92ZXJsYXAsIHNpemUgLSB3b3JkQm91bmRh
cnlDb250ZXh0U3RhcnQpKTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkobV9idWZmZXIuZGF0
YSgpLCBtX2J1ZmZlci5kYXRhKCkgKyBzaXplIC0gb3ZlcmxhcCwgb3ZlcmxhcCAqIHNpemVvZihV
Q2hhcikpOworICAgICAgICBtX3ByZWZpeExlbmd0aCAtPSBtaW4obV9wcmVmaXhMZW5ndGgsIHNp
emUgLSBvdmVybGFwKTsKKyAgICAgICAgbV9idWZmZXIuc2hyaW5rKG92ZXJsYXApOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTIwMDEsNyArMjEyMCw4IEBAIG5leHRNYXRjaDoKICAg
ICBBU1NFUlQobWF0Y2hTdGFydCArIG1hdGNoZWRMZW5ndGggPD0gc2l6ZSk7CiAKICAgICAvLyBJ
ZiB0aGlzIG1hdGNoIGlzICJiYWQiLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG1hdGNoLgotICAgIGlm
IChpc0JhZE1hdGNoKG1fYnVmZmVyLmRhdGEoKSArIG1hdGNoU3RhcnQsIG1hdGNoZWRMZW5ndGgp
KSB7CisgICAgaWYgKGlzQmFkTWF0Y2gobV9idWZmZXIuZGF0YSgpICsgbWF0Y2hTdGFydCwgbWF0
Y2hlZExlbmd0aCkKKyAgICAgICAgfHwgbV9vcHRpb25zICYgQXRXb3JkU3RhcnRzICYmICFpc1dv
cmRTdGFydE1hdGNoKG1hdGNoU3RhcnQsIG1hdGNoZWRMZW5ndGgpKSB7CiAgICAgICAgIG1hdGNo
U3RhcnQgPSB1c2VhcmNoX25leHQoc2VhcmNoZXIsICZzdGF0dXMpOwogICAgICAgICBBU1NFUlQo
c3RhdHVzID09IFVfWkVST19FUlJPUik7CiAgICAgICAgIGdvdG8gbmV4dE1hdGNoOwpAQCAtMjAw
OSw2ICsyMTI5LDcgQEAgbmV4dE1hdGNoOgogCiAgICAgc2l6ZV90IG5ld1NpemUgPSBzaXplIC0g
KG1hdGNoU3RhcnQgKyAxKTsKICAgICBtZW1tb3ZlKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIu
ZGF0YSgpICsgbWF0Y2hTdGFydCArIDEsIG5ld1NpemUgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBt
X3ByZWZpeExlbmd0aCAtPSBtaW48c2l6ZV90PihtX3ByZWZpeExlbmd0aCwgbWF0Y2hTdGFydCAr
IDEpOwogICAgIG1fYnVmZmVyLnNocmluayhuZXdTaXplKTsKIAogICAgIHN0YXJ0ID0gc2l6ZSAt
IG1hdGNoU3RhcnQ7CkBAIC0yMDE3LDkgKzIxMzgsOSBAQCBuZXh0TWF0Y2g6CiAKICNlbHNlIC8v
ICFJQ1VfVU5JQ09ERQogCi1pbmxpbmUgU2VhcmNoQnVmZmVyOjpTZWFyY2hCdWZmZXIoY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIGJvb2wgaXNDYXNlU2Vuc2l0aXZlKQoraW5saW5lIFNlYXJjaEJ1ZmZl
cjo6U2VhcmNoQnVmZmVyKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25z
KQogICAgIDogbV90YXJnZXQoaXNDYXNlU2Vuc2l0aXZlID8gdGFyZ2V0IDogdGFyZ2V0LmZvbGRD
YXNlKCkpCi0gICAgLCBtX2lzQ2FzZVNlbnNpdGl2ZShpc0Nhc2VTZW5zaXRpdmUpCisgICAgLCBt
X29wdGlvbnMob3B0aW9ucykKICAgICAsIG1fYnVmZmVyKG1fdGFyZ2V0Lmxlbmd0aCgpKQogICAg
ICwgbV9pc0NoYXJhY3RlclN0YXJ0QnVmZmVyKG1fdGFyZ2V0Lmxlbmd0aCgpKQogICAgICwgbV9p
c0J1ZmZlckZ1bGwoZmFsc2UpCkBAIC0yMDU4LDcgKzIxNzksNyBAQCBpbmxpbmUgdm9pZCBTZWFy
Y2hCdWZmZXI6OmFwcGVuZChVQ2hhciBjCiBpbmxpbmUgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6YXBw
ZW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAgIEFTU0VS
VChsZW5ndGgpOwotICAgIGlmIChtX2lzQ2FzZVNlbnNpdGl2ZSkgeworICAgIGlmICghKG1fb3B0
aW9ucyAmIENhc2VJbnNlbnNpdGl2ZSkpIHsKICAgICAgICAgYXBwZW5kKGNoYXJhY3RlcnNbMF0s
IHRydWUpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CkBAIC0yMzMyLDEyICsyNDUzLDI5IEBA
IHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBjb2xsYXBzZWRUb0JvdW4KICAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIHNpemVfdCBmaW5kUGxhaW5UZXh0KENoYXJhY3Rl
ckl0ZXJhdG9yJiBpdCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGJvb2wgZm9yd2FyZCwgYm9vbCBj
YXNlU2Vuc2l0aXZlLCBzaXplX3QmIG1hdGNoU3RhcnQpCitzdGF0aWMgc2l6ZV90IGZpbmRQbGFp
blRleHQoQ2hhcmFjdGVySXRlcmF0b3ImIGl0LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9w
dGlvbnMgb3B0aW9ucywgc2l6ZV90JiBtYXRjaFN0YXJ0KQogewogICAgIG1hdGNoU3RhcnQgPSAw
OwogICAgIHNpemVfdCBtYXRjaExlbmd0aCA9IDA7CiAKLSAgICBTZWFyY2hCdWZmZXIgYnVmZmVy
KHRhcmdldCwgY2FzZVNlbnNpdGl2ZSk7CisgICAgU2VhcmNoQnVmZmVyIGJ1ZmZlcih0YXJnZXQs
IG9wdGlvbnMpOworCisgICAgaWYgKG9wdGlvbnMgJiBBdFdvcmRTdGFydHMpIHsKKyAgICAgICAg
UmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlID0gaXQucmFuZ2UoKTsKKyAgICAgICAgUmVmUHRyPFJh
bmdlPiBiZWZvcmVTdGFydFJhbmdlID0gc3RhcnRSYW5nZS0+b3duZXJEb2N1bWVudCgpLT5jcmVh
dGVSYW5nZSgpOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgYmVmb3Jl
U3RhcnRSYW5nZS0+c2V0RW5kKHN0YXJ0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0UmFu
Z2UtPnN0YXJ0T2Zmc2V0KCksIGVjKTsKKyAgICAgICAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJ
dGVyYXRvciBiYWNrd2FyZHNJdGVyYXRvcihiZWZvcmVTdGFydFJhbmdlLmdldCgpLCBUZXh0SXRl
cmF0b3JEZWZhdWx0QmVoYXZpb3IpOworICAgICAgICB3aGlsZSAoIWJhY2t3YXJkc0l0ZXJhdG9y
LmF0RW5kKCkpIHsKKyAgICAgICAgICAgIGludCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBi
YWNrd2FyZHNJdGVyYXRvci5sZW5ndGgoKTsKKyAgICAgICAgICAgIFUxNl9CQUNLXzEoYmFja3dh
cmRzSXRlcmF0b3IuY2hhcmFjdGVycygpLCAwLCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpOwor
ICAgICAgICAgICAgd29yZEJvdW5kYXJ5Q29udGV4dFN0YXJ0ID0gc3RhcnRPZkxhc3RXb3JkQm91
bmRhcnlDb250ZXh0KGJhY2t3YXJkc0l0ZXJhdG9yLmNoYXJhY3RlcnMoKSwgd29yZEJvdW5kYXJ5
Q29udGV4dFN0YXJ0KTsKKyAgICAgICAgICAgIGludCBjb250ZXh0TGVuZ3RoID0gYmFja3dhcmRz
SXRlcmF0b3IubGVuZ3RoKCkgLSB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQ7CisgICAgICAgICAg
ICBpZiAoIWJ1ZmZlci5wcmVwZW5kQ29udGV4dChiYWNrd2FyZHNJdGVyYXRvci5jaGFyYWN0ZXJz
KCkgKyB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQsIGNvbnRleHRMZW5ndGgpIHx8IHdvcmRCb3Vu
ZGFyeUNvbnRleHRTdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGJh
Y2t3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIHdoaWxl
ICghaXQuYXRFbmQoKSkgewogICAgICAgICBpdC5hZHZhbmNlKGJ1ZmZlci5hcHBlbmQoaXQuY2hh
cmFjdGVycygpLCBpdC5sZW5ndGgoKSkpOwpAQCAtMjM1MSw3ICsyNDg5LDcgQEAgdHJ5QWdhaW46
CiAgICAgICAgICAgICBtYXRjaExlbmd0aCA9IG5ld01hdGNoTGVuZ3RoOwogICAgICAgICAgICAg
Ly8gSWYgc2VhcmNoaW5nIGZvcndhcmQsIHN0b3Agb24gdGhlIGZpcnN0IG1hdGNoLgogICAgICAg
ICAgICAgLy8gSWYgc2VhcmNoaW5nIGJhY2t3YXJkLCBkb24ndCBzdG9wLCBzbyB3ZSBlbmQgdXAg
d2l0aCB0aGUgbGFzdCBtYXRjaC4KLSAgICAgICAgICAgIGlmIChmb3J3YXJkKQorICAgICAgICAg
ICAgaWYgKCEob3B0aW9ucyAmIEJhY2t3YXJkcykpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBnb3RvIHRyeUFnYWluOwogICAgICAgICB9CkBAIC0yMzY2LDE0ICsyNTA0LDE5
IEBAIHRyeUFnYWluOgogCiBQYXNzUmVmUHRyPFJhbmdlPiBmaW5kUGxhaW5UZXh0KGNvbnN0IFJh
bmdlKiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNl
U2Vuc2l0aXZlKQogeworICAgIHJldHVybiBmaW5kUGxhaW5UZXh0KHJhbmdlLCB0YXJnZXQsIChm
b3J3YXJkID8gMCA6IEJhY2t3YXJkcykgfCAoY2FzZVNlbnNpdGl2ZSA/IDAgOiBDYXNlSW5zZW5z
aXRpdmUpKTsKK30KKworUGFzc1JlZlB0cjxSYW5nZT4gZmluZFBsYWluVGV4dChjb25zdCBSYW5n
ZSogcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQorewog
ICAgIC8vIEZpcnN0LCBmaW5kIHRoZSB0ZXh0LgogICAgIHNpemVfdCBtYXRjaFN0YXJ0OwogICAg
IHNpemVfdCBtYXRjaExlbmd0aDsKICAgICB7CiAgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIGZp
bmRJdGVyYXRvcihyYW5nZSwgVGV4dEl0ZXJhdG9yRW50ZXJzVGV4dENvbnRyb2xzKTsKLSAgICAg
ICAgbWF0Y2hMZW5ndGggPSBmaW5kUGxhaW5UZXh0KGZpbmRJdGVyYXRvciwgdGFyZ2V0LCBmb3J3
YXJkLCBjYXNlU2Vuc2l0aXZlLCBtYXRjaFN0YXJ0KTsKKyAgICAgICAgbWF0Y2hMZW5ndGggPSBm
aW5kUGxhaW5UZXh0KGZpbmRJdGVyYXRvciwgdGFyZ2V0LCBvcHRpb25zLCBtYXRjaFN0YXJ0KTsK
ICAgICAgICAgaWYgKCFtYXRjaExlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBjb2xsYXBzZWRU
b0JvdW5kYXJ5KHJhbmdlLCBmb3J3YXJkKTsKKyAgICAgICAgICAgIHJldHVybiBjb2xsYXBzZWRU
b0JvdW5kYXJ5KHJhbmdlLCAhKG9wdGlvbnMgJiBCYWNrd2FyZHMpKTsKICAgICB9CiAKICAgICAv
LyBUaGVuLCBmaW5kIHRoZSBkb2N1bWVudCBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgYW5kIHRoZSBl
bmQgb2YgdGhlIHRleHQuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCShyZXZpc2lvbiA3Mjgw
MykKKysrIFdlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2lmbmRlZiBUZXh0SXRlcmF0b3JfaAogI2RlZmluZSBUZXh0SXRlcmF0
b3JfaAogCisjaW5jbHVkZSAiRmluZE9wdGlvbnMuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94
LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01OCw3
ICs1OSw5IEBAIGlubGluZSBib29sIGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKFVDaGEKIH0KIAog
U3RyaW5nIHBsYWluVGV4dChjb25zdCBSYW5nZSosIFRleHRJdGVyYXRvckJlaGF2aW9yIGRlZmF1
bHRCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7Ci1VQ2hhciogcGxhaW5U
ZXh0VG9NYWxsb2NBbGxvY2F0ZWRCdWZmZXIoY29uc3QgUmFuZ2UqLCB1bnNpZ25lZCYgYnVmZmVy
TGVuZ3RoLCBib29sIGlzRGlzcGxheVN0cmluZywgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgZGVmYXVs
dEJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKK1VDaGFyKiBwbGFpblRl
eHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcihjb25zdCBSYW5nZSosIHVuc2lnbmVkJiBidWZmZXJM
ZW5ndGgsIGJvb2wgaXNEaXNwbGF5U3RyaW5nLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJ
dGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CitQYXNzUmVmUHRyPFJhbmdlPiBmaW5kUGxhaW5UZXh0
KGNvbnN0IFJhbmdlKiwgY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMpOworLy8gRklYTUU6IFN3
aXRjaCBjYWxsZXJzIG92ZXIgdG8gdGhlIEZpbmRPcHRpb25zIHZlcnNpb24gYW5kIHJldGlyZSB0
aGlzIG9uZS4KIFBhc3NSZWZQdHI8UmFuZ2U+IGZpbmRQbGFpblRleHQoY29uc3QgUmFuZ2UqLCBj
b25zdCBTdHJpbmcmLCBib29sIGZvcndhcmQsIGJvb2wgY2FzZVNlbnNpdGl2ZSk7CiAKIGNsYXNz
IEJpdFN0YWNrIHsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHJldmlzaW9uIDcy
ODAzKQorKysgV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwzMCArNDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKIAotc3RhdGljIGludCBl
bmRPZkZpcnN0V29yZEJvdW5kYXJ5Q29udGV4dChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKSB7Ci0gICAgICAg
IGludCBmaXJzdCA9IGk7Ci0gICAgICAgIFVDaGFyMzIgY2g7Ci0gICAgICAgIFUxNl9ORVhUKGNo
YXJhY3RlcnMsIGksIGxlbmd0aCwgY2gpOwotICAgICAgICBpZiAoIXJlcXVpcmVzQ29udGV4dEZv
cldvcmRCb3VuZGFyeShjaCkpCi0gICAgICAgICAgICByZXR1cm4gZmlyc3Q7Ci0gICAgfQotICAg
IHJldHVybiBsZW5ndGg7Ci19Ci0KLXN0YXRpYyBpbnQgc3RhcnRPZkxhc3RXb3JkQm91bmRhcnlD
b250ZXh0KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQotewotICAgIGZvciAo
aW50IGkgPSBsZW5ndGg7IGkgPiAwOyApIHsKLSAgICAgICAgaW50IGxhc3QgPSBpOwotICAgICAg
ICBVQ2hhcjMyIGNoOwotICAgICAgICBVMTZfUFJFVihjaGFyYWN0ZXJzLCAwLCBpLCBjaCk7Ci0g
ICAgICAgIGlmICghcmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGNoKSkKLSAgICAgICAg
ICAgIHJldHVybiBsYXN0OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQogZW51bSBCb3VuZGFy
eVNlYXJjaENvbnRleHRBdmFpbGFiaWxpdHkgeyBEb250SGF2ZU1vcmVDb250ZXh0LCBNYXlIYXZl
TW9yZUNvbnRleHQgfTsKIAogdHlwZWRlZiB1bnNpZ25lZCAoKkJvdW5kYXJ5U2VhcmNoRnVuY3Rp
b24pKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBvZmZzZXQsIEJvdW5k
YXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSwgYm9vbCYgbmVlZE1vcmVDb250ZXh0KTsKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAJKHJldmlzaW9uIDcyODAzKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MDcsMjUgKzUwNywzMSBAQCBzdGF0aWMgRnJhbWUqIGluY3JlbWVudEZyYW1l
KEZyYW1lKiBjdXJyCiAKIGJvb2wgUGFnZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdl
dCwgVGV4dENhc2VTZW5zaXRpdml0eSBjYXNlU2Vuc2l0aXZpdHksIEZpbmREaXJlY3Rpb24gZGly
ZWN0aW9uLCBib29sIHNob3VsZFdyYXApCiB7CisgICAgcmV0dXJuIGZpbmRTdHJpbmcodGFyZ2V0
LCAoY2FzZVNlbnNpdGl2aXR5ID09IFRleHRDYXNlSW5zZW5zaXRpdmUgPyBDYXNlSW5zZW5zaXRp
dmUgOiAwKSB8IChkaXJlY3Rpb24gPT0gRmluZERpcmVjdGlvbkJhY2t3YXJkID8gQmFja3dhcmRz
IDogMCkgfCAoc2hvdWxkV3JhcCA/IFdyYXBBcm91bmQgOiAwKSk7Cit9CisKK2Jvb2wgUGFnZTo6
ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKK3sK
ICAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSB8fCAhbWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAorICAgIGJvb2wgc2hvdWxkV3JhcCA9IG9wdGlvbnMgJiBXcmFwQXJvdW5kOwog
ICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKICAgICBGcmFtZSogc3RhcnRGcmFtZSA9IGZyYW1lOwogICAgIGRvIHsKLSAgICAgICAgaWYg
KGZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyh0YXJnZXQsIGRpcmVjdGlvbiA9PSBGaW5kRGly
ZWN0aW9uRm9yd2FyZCwgY2FzZVNlbnNpdGl2aXR5ID09IFRleHRDYXNlU2Vuc2l0aXZlLCBmYWxz
ZSwgdHJ1ZSkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyh0YXJn
ZXQsIG9wdGlvbnMgJiB+V3JhcEFyb3VuZCB8IFN0YXJ0SW5TZWxlY3Rpb24pKSB7CiAgICAgICAg
ICAgICBpZiAoZnJhbWUgIT0gc3RhcnRGcmFtZSkKICAgICAgICAgICAgICAgICBzdGFydEZyYW1l
LT5zZWxlY3Rpb24oKS0+Y2xlYXIoKTsKICAgICAgICAgICAgIGZvY3VzQ29udHJvbGxlcigpLT5z
ZXRGb2N1c2VkRnJhbWUoZnJhbWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KLSAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwgZGlyZWN0aW9uID09IEZp
bmREaXJlY3Rpb25Gb3J3YXJkLCBzaG91bGRXcmFwKTsKKyAgICAgICAgZnJhbWUgPSBpbmNyZW1l
bnRGcmFtZShmcmFtZSwgIShvcHRpb25zICYgQmFja3dhcmRzKSwgc2hvdWxkV3JhcCk7CiAgICAg
fSB3aGlsZSAoZnJhbWUgJiYgZnJhbWUgIT0gc3RhcnRGcmFtZSk7CiAKICAgICAvLyBTZWFyY2gg
Y29udGVudHMgb2Ygc3RhcnRGcmFtZSwgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIHNlbGVjdGlv
biB0aGF0IHdlIGRpZCBlYXJsaWVyLgogICAgIC8vIFdlIGNoZWF0IGEgYml0IGFuZCBqdXN0IHJl
c2VhcmNoIHdpdGggd3JhcCBvbgogICAgIGlmIChzaG91bGRXcmFwICYmICFzdGFydEZyYW1lLT5z
ZWxlY3Rpb24oKS0+aXNOb25lKCkpIHsKLSAgICAgICAgYm9vbCBmb3VuZCA9IHN0YXJ0RnJhbWUt
PmVkaXRvcigpLT5maW5kU3RyaW5nKHRhcmdldCwgZGlyZWN0aW9uID09IEZpbmREaXJlY3Rpb25G
b3J3YXJkLCBjYXNlU2Vuc2l0aXZpdHkgPT0gVGV4dENhc2VTZW5zaXRpdmUsIHRydWUsIHRydWUp
OworICAgICAgICBib29sIGZvdW5kID0gc3RhcnRGcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmco
dGFyZ2V0LCBvcHRpb25zIHwgV3JhcEFyb3VuZCB8IFN0YXJ0SW5TZWxlY3Rpb24pOwogICAgICAg
ICBmb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKGZyYW1lKTsKICAgICAgICAgcmV0
dXJuIGZvdW5kOwogICAgIH0KQEAgLTUzNSw2ICs1NDEsMTEgQEAgYm9vbCBQYWdlOjpmaW5kU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdGFyZwogCiB1bnNpZ25lZCBpbnQgUGFnZTo6bWFya0FsbE1hdGNo
ZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBUZXh0Q2FzZVNlbnNpdGl2aXR5IGNhc2VT
ZW5zaXRpdml0eSwgYm9vbCBzaG91bGRIaWdobGlnaHQsIHVuc2lnbmVkIGxpbWl0KQogeworICAg
IHJldHVybiBtYXJrQWxsTWF0Y2hlc0ZvclRleHQodGFyZ2V0LCBjYXNlU2Vuc2l0aXZpdHkgPT0g
VGV4dENhc2VJbnNlbnNpdGl2ZSA/IENhc2VJbnNlbnNpdGl2ZSA6IDAsIHNob3VsZEhpZ2hsaWdo
dCwgbGltaXQpOworfQorCit1bnNpZ25lZCBpbnQgUGFnZTo6bWFya0FsbE1hdGNoZXNGb3JUZXh0
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBib29sIHNob3VsZEhp
Z2hsaWdodCwgdW5zaWduZWQgbGltaXQpCit7CiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkgfHwg
IW1haW5GcmFtZSgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNTQzLDcgKzU1NCw3IEBAIHVu
c2lnbmVkIGludCBQYWdlOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQKICAgICBGcmFtZSogZnJhbWUg
PSBtYWluRnJhbWUoKTsKICAgICBkbyB7CiAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+c2V0TWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChzaG91bGRIaWdobGlnaHQpOwotICAgICAgICBt
YXRjaGVzICs9IGZyYW1lLT5lZGl0b3IoKS0+Y291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIGNh
c2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgbGltaXQgPyAobGltaXQgLSBtYXRj
aGVzKSA6IDAsIHRydWUpOworICAgICAgICBtYXRjaGVzICs9IGZyYW1lLT5lZGl0b3IoKS0+Y291
bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIG9wdGlvbnMsIGxpbWl0ID8gKGxpbWl0IC0gbWF0Y2hl
cykgOiAwLCB0cnVlKTsKICAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwgdHJ1
ZSwgZmFsc2UpOwogICAgIH0gd2hpbGUgKGZyYW1lKTsKIApJbmRleDogV2ViQ29yZS9wYWdlL1Bh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiA3MjgwMykK
KysrIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAK
ICNkZWZpbmUgUGFnZV9oCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVk
ZSAiRmluZE9wdGlvbnMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IlZpZXdwb3J0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTE5OCw3
ICsxOTksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFRhYktleUN5
Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGIpIHsgbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHMgPSBiOyB9CiAgICAgICAgIGJvb2wgdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHM7IH0KIAorICAgICAgICBi
b29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMpOworICAgICAgICAvLyBG
SVhNRTogU3dpdGNoIGNhbGxlcnMgb3ZlciB0byB0aGUgRmluZE9wdGlvbnMgdmVyc2lvbiBhbmQg
cmV0aXJlIHRoaXMgb25lLgogICAgICAgICBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwg
VGV4dENhc2VTZW5zaXRpdml0eSwgRmluZERpcmVjdGlvbiwgYm9vbCBzaG91bGRXcmFwKTsKKyAg
ICAgICAgdW5zaWduZWQgaW50IG1hcmtBbGxNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCBG
aW5kT3B0aW9ucywgYm9vbCBzaG91bGRIaWdobGlnaHQsIHVuc2lnbmVkKTsKKyAgICAgICAgLy8g
RklYTUU6IFN3aXRjaCBjYWxsZXJzIG92ZXIgdG8gdGhlIEZpbmRPcHRpb25zIHZlcnNpb24gYW5k
IHJldGlyZSB0aGlzIG9uZS4KICAgICAgICAgdW5zaWduZWQgaW50IG1hcmtBbGxNYXRjaGVzRm9y
VGV4dChjb25zdCBTdHJpbmcmLCBUZXh0Q2FzZVNlbnNpdGl2aXR5LCBib29sIHNob3VsZEhpZ2hs
aWdodCwgdW5zaWduZWQpOwogICAgICAgICB2b2lkIHVubWFya0FsbFRleHRNYXRjaGVzKCk7CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcAkocmV2aXNpb24g
NzI4MDMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw2ICszNiwzMiBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitpbnQgZW5kT2ZGaXJzdFdvcmRCb3VuZGFyeUNvbnRleHQo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCit7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7ICkgeworICAgICAgICBpbnQgZmlyc3QgPSBpOworICAgICAgICBVQ2hh
cjMyIGNoOworICAgICAgICBVMTZfTkVYVChjaGFyYWN0ZXJzLCBpLCBsZW5ndGgsIGNoKTsKKyAg
ICAgICAgaWYgKCFyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2gpKQorICAgICAgICAg
ICAgcmV0dXJuIGZpcnN0OworICAgIH0KKyAgICByZXR1cm4gbGVuZ3RoOworfQorCitpbnQgc3Rh
cnRPZkxhc3RXb3JkQm91bmRhcnlDb250ZXh0KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
bGVuZ3RoKQoreworICAgIGZvciAoaW50IGkgPSBsZW5ndGg7IGkgPiAwOyApIHsKKyAgICAgICAg
aW50IGxhc3QgPSBpOworICAgICAgICBVQ2hhcjMyIGNoOworICAgICAgICBVMTZfUFJFVihjaGFy
YWN0ZXJzLCAwLCBpLCBjaCk7CisgICAgICAgIGlmICghcmVxdWlyZXNDb250ZXh0Rm9yV29yZEJv
dW5kYXJ5KGNoKSkKKyAgICAgICAgICAgIHJldHVybiBsYXN0OworICAgIH0KKyAgICByZXR1cm4g
MDsKK30KKworI2lmICFQTEFURk9STShNQUMpCisKIGludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgo
Y29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkK
IHsKICAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywg
bGVuKTsKQEAgLTc2LDQgKzEwMiw2IEBAIHZvaWQgZmluZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hh
ciogY2hhcnMKICAgICAqc3RhcnQgPSB0ZXh0QnJlYWtQcmV2aW91cyhpdCk7CiB9CiAKKyNlbmRp
ZiAvLyAhUExBVEZPUk0oTUFDKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuaAkocmV2aXNpb24gNzI4MDMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVybiBXVEY6OlVuaWNv
ZGU6Omhhc0xpbmVCcmVha2luZ1Byb3BlcnR5Q29tcGxleENvbnRleHQoY2gpOwogICAgIH0KIAor
ICAgIGludCBlbmRPZkZpcnN0V29yZEJvdW5kYXJ5Q29udGV4dChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgaW50IGxlbmd0aCk7CisgICAgaW50IHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4
dChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCk7CisKICAgICB2b2lkIGZpbmRX
b3JkQm91bmRhcnkoY29uc3QgVUNoYXIqLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogc3Rh
cnQsIGludCogZW5kKTsKICAgICBpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KGNvbnN0IFVDaGFy
KiwgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBib29sIGZvcndhcmQpOwogCkluZGV4OiBXZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNzI4
MDMpCisrKyBXZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDEwLTExLTI5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0MiBwYXJ0IG9mIDxy
ZGFyOi8vcHJvYmxlbS84NjUwMDg1PiBhZGRpbmcgd29yZC1wcmVmaXggc2VhcmNoIG9wdGlvbnMg
dG8gdGhlIHRleHQgc2VhcmNoIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUwMDM4CisgICAgICAgIEJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBEYXJp
biBBZGxlci4KKworICAgICAgICAqIFNoYXJlZC9GaW5kT3B0aW9ucy5oOiBDaGFuZ2VkIHRoZSBo
ZWFkZXIgZ3VhcmQgdG8gYWNjb3VudCBmb3IgV2ViQ29yZeKAmXMgbmV3IHByaXZhdGUKKyAgICAg
ICAgRmluZE9wdGlvbnMuaC4gQWRkZWQgYW5kIHJlb3JkZXJlZCBGaW5kT3B0aW9ucyBhbmQgcm9s
bGVkIEZpbmREaXJlY3Rpb24gaW50byBGaW5kT3B0aW9ucy4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tBUElDYXN0Lmg6IFJlbW92ZWQgdG9GaW5kRGlyZWN0aW9uKCkuCisgICAgICAgIChX
ZWJLaXQ6OnRvRmluZE9wdGlvbnMpOiBVcGRhdGVkIGZvciBuZXcgdmFsdWVzLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdlRmluZFN0cmluZyk6
IFJlbW92ZWQgc2VwYXJhdGUgV0tGaW5kRGlyZWN0aW9uLgorICAgICAgICAoV0tQYWdlQ291bnRT
dHJpbmdNYXRjaGVzKTogUmVwbGFjZXMgY2FzZUluc2Vuc2l0aXZlIGJvb2xlYW4gd2l0aCBXS0Zp
bmRPcHRpb25zLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaDogUmVtb3ZlZCBX
S0ZpbmREaXJlY3Rpb24gYW5kIHVwZGF0ZWQgV0tGaW5kT3B0aW9ucy4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpm
aW5kU3RyaW5nKTogUmVtb3ZlZCBzZXBhcmF0ZSBGaW5kRGlyZWN0aW9uLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmNvdW50U3RyaW5nTWF0Y2hlcyk6IFJlcGxhY2VkIGNhc2VJbnNl
bnNpdGl2ZSBib29sZWFuIHdpdGggRmluZE9wdGlvbnMuCisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OmNvcmUpOiBBZGRlZC4gQ29udmVydHMgV2ViS2l0MiBG
aW5kT3B0aW9ucyB0byBXZWJDb3JlIEZpbmRPcHRpb25zLgorICAgICAgICAoV2ViS2l0OjpGaW5k
Q29udHJvbGxlcjo6Y291bnRTdHJpbmdNYXRjaGVzKTogQ2hhbmdlZCB0byB1c2UgRmluZE9wdGlv
bnMuCisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nKTogRGl0dG8u
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvdW50
U3RyaW5nTWF0Y2hlcyk6IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46
IERpdHRvLgorCiAyMDEwLTExLTI5ICBMYXN6bG8gR29tYm9zICA8bGFzemxvLjEuZ29tYm9zQG5v
a2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNl
bi4KSW5kZXg6IFdlYktpdDIvU2hhcmVkL0ZpbmRPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9TaGFyZWQvRmluZE9wdGlvbnMuaAkocmV2aXNpb24gNzI4MDMpCisrKyBXZWJLaXQyL1No
YXJlZC9GaW5kT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMyArMjMsMjIgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZpbmRPcHRp
b25zX2gKLSNkZWZpbmUgRmluZE9wdGlvbnNfaAorLy8gVGhpcyBub24tc3RhbmRhcmQgaGVhZGVy
IGd1YXJkIGlzIG5lZWRlZCBiZWNhdXNlIFdlYkNvcmUncyBGaW5kT3B0aW9ucy5oIGRlZmluZXMg
RmluZE9wdGlvbnNfaC4KKyNpZm5kZWYgV2ViS2l0Ml9GaW5kT3B0aW9uc19oCisjZGVmaW5lIFdl
YktpdDJfRmluZE9wdGlvbnNfaAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotZW51bSBGaW5kRGly
ZWN0aW9uIHsgCi0gICAgRmluZERpcmVjdGlvbkZvcndhcmQsIAotICAgIEZpbmREaXJlY3Rpb25C
YWNrd2FyZAotfTsKLQogZW51bSBGaW5kT3B0aW9ucyB7CiAgICAgRmluZE9wdGlvbnNDYXNlSW5z
ZW5zaXRpdmUgPSAxIDw8IDAsCi0gICAgRmluZE9wdGlvbnNXcmFwQXJvdW5kID0gMSA8PCAxLAot
ICAgIEZpbmRPcHRpb25zU2hvd092ZXJsYXkgPSAxIDw8IDIsCi0gICAgRmluZE9wdGlvbnNTaG93
RmluZEluZGljYXRvciA9IDEgPDwgMywKKyAgICBGaW5kT3B0aW9uc0F0V29yZFN0YXJ0cyA9IDEg
PDwgMSwKKyAgICBGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0ID0gMSA8
PCAyLAorICAgIEZpbmRPcHRpb25zQmFja3dhcmRzID0gMSA8PCAzLAorICAgIEZpbmRPcHRpb25z
V3JhcEFyb3VuZCA9IDEgPDwgNCwKKyAgICBGaW5kT3B0aW9uc1Nob3dPdmVybGF5ID0gMSA8PCA1
LAorICAgIEZpbmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3IgPSAxIDw8IDYKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gRmluZE9wdGlvbnNfaAorI2VuZGlmIC8vIFdl
YktpdDJfRmluZE9wdGlvbnNfaApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShy
ZXZpc2lvbiA3MjgwMykKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYwNyw5ICs2MDcsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2NhbGVX
ZWJWaWV3KGRvdWJsZSBzCiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpT
Y2FsZVdlYlZpZXcoc2NhbGUsIG9yaWdpbiksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdl
UHJveHk6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZpbmREaXJlY3Rpb24gZmlu
ZERpcmVjdGlvbiwgRmluZE9wdGlvbnMgZmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291
bnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywg
RmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKIHsKLSAgICBwcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZpbmRTdHJpbmcoc3RyaW5nLCBmaW5kRGly
ZWN0aW9uLCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCksIG1fcGFnZUlEKTsKKyAgICBwcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZpbmRTdHJpbmcoc3RyaW5nLCBvcHRpb25z
LCBtYXhNYXRjaENvdW50KSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGlk
ZUZpbmRVSSgpCkBAIC02MTcsOSArNjE3LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhpZGVGaW5k
VUkoKQogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlkZUZpbmRVSSgp
LCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpjb3VudFN0cmluZ01hdGNoZXMo
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgY2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBtYXhN
YXRjaENvdW50KQordm9pZCBXZWJQYWdlUHJveHk6OmNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBT
dHJpbmcmIHN0cmluZywgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3Vu
dCkKIHsKLSAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvdW50U3RyaW5n
TWF0Y2hlcyhzdHJpbmcsIGNhc2VJbnNlbnNpdGl2ZSwgbWF4TWF0Y2hDb3VudCksIG1fcGFnZUlE
KTsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvdW50U3RyaW5nTWF0
Y2hlcyhzdHJpbmcsIG9wdGlvbnMsIG1heE1hdGNoQ291bnQpLCBtX3BhZ2VJRCk7CiB9CiAgICAg
CiB2b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGNvbnN0IFN0cmlu
ZyYgc2NyaXB0LCBQYXNzUmVmUHRyPFNjcmlwdFJldHVyblZhbHVlQ2FsbGJhY2s+IHBycENhbGxi
YWNrKQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDcyODAzKQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw5
ICsyMDgsOSBAQCBwdWJsaWM6CiAgICAgZG91YmxlIHZpZXdTY2FsZUZhY3RvcigpIGNvbnN0IHsg
cmV0dXJuIG1fdmlld1NjYWxlRmFjdG9yOyB9CiAKICAgICAvLyBGaW5kLgotICAgIHZvaWQgZmlu
ZFN0cmluZyhjb25zdCBTdHJpbmcmLCBGaW5kRGlyZWN0aW9uLCBGaW5kT3B0aW9ucywgdW5zaWdu
ZWQgbWF4TWF0Y2hDb3VudCk7CisgICAgdm9pZCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIEZp
bmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKICAgICB2b2lkIGhpZGVGaW5kVUko
KTsKLSAgICB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBib29sIGNhc2VJ
bnNlbnNpdGl2ZSwgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CisgICAgdm9pZCBjb3VudFN0cmlu
Z01hdGNoZXMoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291
bnQpOwogCiAgICAgdm9pZCBydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoY29uc3QgU3RyaW5nJiwg
UGFzc1JlZlB0cjxTY3JpcHRSZXR1cm5WYWx1ZUNhbGxiYWNrPik7CiAgICAgdm9pZCBnZXRSZW5k
ZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihQYXNzUmVmUHRyPFJlbmRlclRyZWVFeHRlcm5h
bFJlcHJlc2VudGF0aW9uQ2FsbGJhY2s+KTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLQVBJQ2FzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJ
Q2FzdC5oCShyZXZpc2lvbiA3MjgwMykKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJ
Q2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMjUgKzEyNCwxOCBAQCBpbmxpbmUgV0tDYWNo
ZU1vZGVsIHRvQVBJKENhY2hlTW9kZWwgY2FjCiAgICAgcmV0dXJuIGtXS0NhY2hlTW9kZWxEb2N1
bWVudFZpZXdlcjsKIH0KIAotaW5saW5lIEZpbmREaXJlY3Rpb24gdG9GaW5kRGlyZWN0aW9uKFdL
RmluZERpcmVjdGlvbiB3a0ZpbmREaXJlY3Rpb24pCi17Ci0gICAgc3dpdGNoICh3a0ZpbmREaXJl
Y3Rpb24pIHsKLSAgICBjYXNlIGtXS0ZpbmREaXJlY3Rpb25Gb3J3YXJkOgotICAgICAgICByZXR1
cm4gRmluZERpcmVjdGlvbkZvcndhcmQ7Ci0gICAgY2FzZSBrV0tGaW5kRGlyZWN0aW9uQmFja3dh
cmQ6Ci0gICAgICAgIHJldHVybiBGaW5kRGlyZWN0aW9uQmFja3dhcmQ7Ci0gICAgfQotCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZpbmREaXJlY3Rpb25Gb3J3YXJkOwot
fQotCiBpbmxpbmUgRmluZE9wdGlvbnMgdG9GaW5kT3B0aW9ucyhXS0ZpbmRPcHRpb25zIHdrRmlu
ZE9wdGlvbnMpCiB7CiAgICAgdW5zaWduZWQgZmluZE9wdGlvbnMgPSAwOwogCiAgICAgaWYgKHdr
RmluZE9wdGlvbnMgJiBrV0tGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkKICAgICAgICAgZmlu
ZE9wdGlvbnMgfD0gRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7CisgICAgaWYgKHdrRmluZE9w
dGlvbnMgJiBrV0tGaW5kT3B0aW9uc0F0V29yZFN0YXJ0cykKKyAgICAgICAgZmluZE9wdGlvbnMg
fD0gRmluZE9wdGlvbnNBdFdvcmRTdGFydHM7CisgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBrV0tG
aW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0KQorICAgICAgICBmaW5kT3B0
aW9ucyB8PSBGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0OworICAgIGlm
ICh3a0ZpbmRPcHRpb25zICYga1dLRmluZE9wdGlvbnNCYWNrd2FyZHMpCisgICAgICAgIGZpbmRP
cHRpb25zIHw9IEZpbmRPcHRpb25zQmFja3dhcmRzOwogICAgIGlmICh3a0ZpbmRPcHRpb25zICYg
a1dLRmluZE9wdGlvbnNXcmFwQXJvdW5kKQogICAgICAgICBmaW5kT3B0aW9ucyB8PSBGaW5kT3B0
aW9uc1dyYXBBcm91bmQ7CiAgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBrV0tGaW5kT3B0aW9uc1No
b3dPdmVybGF5KQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiA3
MjgwMykKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzMCw5ICsyMzAsOSBAQCBkb3VibGUgV0tQYWdlR2V0Vmlld1NjYWxlRmFjdG9yKFdL
UGFnZVJlCiAgICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+dmlld1NjYWxlRmFjdG9yKCk7CiB9
CiAKLXZvaWQgV0tQYWdlRmluZFN0cmluZyhXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYg
c3RyaW5nLCBXS0ZpbmREaXJlY3Rpb24gZmluZERpcmVjdGlvbiwgV0tGaW5kT3B0aW9ucyBmaW5k
T3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKK3ZvaWQgV0tQYWdlRmluZFN0cmluZyhX
S1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgc3RyaW5nLCBXS0ZpbmRPcHRpb25zIG9wdGlv
bnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5maW5k
U3RyaW5nKHRvSW1wbChzdHJpbmcpLT5zdHJpbmcoKSwgdG9GaW5kRGlyZWN0aW9uKGZpbmREaXJl
Y3Rpb24pLCB0b0ZpbmRPcHRpb25zKGZpbmRPcHRpb25zKSwgbWF4TWF0Y2hDb3VudCk7CisgICAg
dG9JbXBsKHBhZ2VSZWYpLT5maW5kU3RyaW5nKHRvSW1wbChzdHJpbmcpLT5zdHJpbmcoKSwgdG9G
aW5kT3B0aW9ucyhvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCk7CiB9CiAKIHZvaWQgV0tQYWdlSGlk
ZUZpbmRVSShXS1BhZ2VSZWYgcGFnZVJlZikKQEAgLTI0MCw5ICsyNDAsOSBAQCB2b2lkIFdLUGFn
ZUhpZGVGaW5kVUkoV0tQYWdlUmVmIHBhZ2VSZWYpCiAgICAgdG9JbXBsKHBhZ2VSZWYpLT5oaWRl
RmluZFVJKCk7CiB9CiAKLXZvaWQgV0tQYWdlQ291bnRTdHJpbmdNYXRjaGVzKFdLUGFnZVJlZiBw
YWdlUmVmLCBXS1N0cmluZ1JlZiBzdHJpbmcsIGJvb2wgY2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25l
ZCBtYXhNYXRjaENvdW50KQordm9pZCBXS1BhZ2VDb3VudFN0cmluZ01hdGNoZXMoV0tQYWdlUmVm
IHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHN0cmluZywgV0tGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNp
Z25lZCBtYXhNYXRjaENvdW50KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+Y291bnRTdHJpbmdN
YXRjaGVzKHRvSW1wbChzdHJpbmcpLT5zdHJpbmcoKSwgY2FzZUluc2Vuc2l0aXZlLCBtYXhNYXRj
aENvdW50KTsKKyAgICB0b0ltcGwocGFnZVJlZiktPmNvdW50U3RyaW5nTWF0Y2hlcyh0b0ltcGwo
c3RyaW5nKS0+c3RyaW5nKCksIHRvRmluZE9wdGlvbnMob3B0aW9ucyksIG1heE1hdGNoQ291bnQp
OwogfQogCiB2b2lkIFdLUGFnZVNldFBhZ2VDb250ZXh0TWVudUNsaWVudChXS1BhZ2VSZWYgcGFn
ZVJlZiwgY29uc3QgV0tQYWdlQ29udGV4dE1lbnVDbGllbnQqIHdrQ2xpZW50KQpJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmgJKHJldmlzaW9uIDcyODAzKQorKysgV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCwyMiArMjc0LDE5IEBAIFdL
X0VYUE9SVCBkb3VibGUgV0tQYWdlR2V0Vmlld1NjYWxlRmFjdG8KIAogLy8gRmluZC4KIGVudW0g
ewotICAgIGtXS0ZpbmREaXJlY3Rpb25Gb3J3YXJkLAotICAgIGtXS0ZpbmREaXJlY3Rpb25CYWNr
d2FyZAotfTsKLXR5cGVkZWYgdWludDMyX3QgV0tGaW5kRGlyZWN0aW9uOwotCi1lbnVtIHsKICAg
ICBrV0tGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSA9IDEgPDwgMCwKLSAgICBrV0tGaW5kT3B0
aW9uc1dyYXBBcm91bmQgPSAxIDw8IDEsCi0gICAga1dLRmluZE9wdGlvbnNTaG93T3ZlcmxheSA9
IDEgPDwgMiwKLSAgICBrV0tGaW5kT3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9yID0gMSA8PCAzCisg
ICAga1dLRmluZE9wdGlvbnNBdFdvcmRTdGFydHMgPSAxIDw8IDEsCisgICAga1dLRmluZE9wdGlv
bnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCA9IDEgPDwgMiwKKyAgICBrV0tGaW5kT3B0
aW9uc0JhY2t3YXJkcyA9IDEgPDwgMywKKyAgICBrV0tGaW5kT3B0aW9uc1dyYXBBcm91bmQgPSAx
IDw8IDQsCisgICAga1dLRmluZE9wdGlvbnNTaG93T3ZlcmxheSA9IDEgPDwgNSwKKyAgICBrV0tG
aW5kT3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9yID0gMSA8PCA2CiB9OwogdHlwZWRlZiB1aW50MzJf
dCBXS0ZpbmRPcHRpb25zOwogCi1XS19FWFBPUlQgdm9pZCBXS1BhZ2VGaW5kU3RyaW5nKFdLUGFn
ZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBzdHJpbmcsIFdLRmluZERpcmVjdGlvbiBmaW5kRGlyZWN0
aW9uLCBXS0ZpbmRPcHRpb25zIGZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsK
K1dLX0VYUE9SVCB2b2lkIFdLUGFnZUZpbmRTdHJpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5n
UmVmIHN0cmluZywgV0tGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hD
b3VudCk7CiBXS19FWFBPUlQgdm9pZCBXS1BhZ2VIaWRlRmluZFVJKFdLUGFnZVJlZiBwYWdlKTsK
LVdLX0VYUE9SVCB2b2lkIFdLUGFnZUNvdW50U3RyaW5nTWF0Y2hlcyhXS1BhZ2VSZWYgcGFnZSwg
V0tTdHJpbmdSZWYgc3RyaW5nLCBib29sIGNhc2VJbnNlbnNpdGl2ZSwgdW5zaWduZWQgbWF4TWF0
Y2hDb3VudCk7CitXS19FWFBPUlQgdm9pZCBXS1BhZ2VDb3VudFN0cmluZ01hdGNoZXMoV0tQYWdl
UmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgV0tGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucywg
dW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CiAKIFdLX0VYUE9SVCB2b2lkIFdLUGFnZVNldFBhZ2VD
b250ZXh0TWVudUNsaWVudChXS1BhZ2VSZWYgcGFnZSwgY29uc3QgV0tQYWdlQ29udGV4dE1lbnVD
bGllbnQqIGNsaWVudCk7CiBXS19FWFBPUlQgdm9pZCBXS1BhZ2VTZXRQYWdlRmluZENsaWVudChX
S1BhZ2VSZWYgcGFnZSwgY29uc3QgV0tQYWdlRmluZENsaWVudCogY2xpZW50KTsKSW5kZXg6IFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDcyODAzKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxNSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyBXZWJDb3JlOjpGaW5kT3B0aW9ucyBj
b3JlKEZpbmRPcHRpb25zIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIChvcHRpb25zICYgRmluZE9w
dGlvbnNDYXNlSW5zZW5zaXRpdmUgPyBDYXNlSW5zZW5zaXRpdmUgOiAwKQorICAgICAgICB8IChv
cHRpb25zICYgRmluZE9wdGlvbnNBdFdvcmRTdGFydHMgPyBBdFdvcmRTdGFydHMgOiAwKQorICAg
ICAgICB8IChvcHRpb25zICYgRmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFy
dCA/IFRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0IDogMCkKKyAgICAgICAgfCAob3B0aW9u
cyAmIEZpbmRPcHRpb25zQmFja3dhcmRzID8gQmFja3dhcmRzIDogMCkKKyAgICAgICAgfCAob3B0
aW9ucyAmIEZpbmRPcHRpb25zV3JhcEFyb3VuZCA/IFdyYXBBcm91bmQgOiAwKTsKK30KKwogRmlu
ZENvbnRyb2xsZXI6OkZpbmRDb250cm9sbGVyKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgOiBtX3dl
YlBhZ2Uod2ViUGFnZSkKICAgICAsIG1fZmluZFBhZ2VPdmVybGF5KDApCkBAIC01MSw5ICs2MCw5
IEBAIEZpbmRDb250cm9sbGVyOjp+RmluZENvbnRyb2xsZXIoKQogewogfQogCi12b2lkIEZpbmRD
b250cm9sbGVyOjpjb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wg
Y2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQordm9pZCBGaW5kQ29udHJv
bGxlcjo6Y291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9u
cyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogewotICAgIHVuc2lnbmVkIG1hdGNo
Q291bnQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1hcmtBbGxNYXRjaGVzRm9yVGV4dChzdHJp
bmcsIGNhc2VJbnNlbnNpdGl2ZSA/IFRleHRDYXNlSW5zZW5zaXRpdmUgOiBUZXh0Q2FzZVNlbnNp
dGl2ZSwgZmFsc2UsIG1heE1hdGNoQ291bnQpOworICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1hcmtBbGxNYXRjaGVzRm9yVGV4dChzdHJpbmcsIGNvcmUo
b3B0aW9ucyksIGZhbHNlLCBtYXhNYXRjaENvdW50KTsKICAgICBtX3dlYlBhZ2UtPmNvcmVQYWdl
KCktPnVubWFya0FsbFRleHRNYXRjaGVzKCk7CiAKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkQ291bnRTdHJpbmdNYXRjaGVzKHN0cmluZywgbWF0Y2hDb3Vu
dCkpOwpAQCAtNjksMTQgKzc4LDExIEBAIHN0YXRpYyBGcmFtZSogZnJhbWVXaXRoU2VsZWN0aW9u
KFBhZ2UqIHAKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgRmluZERpcmVjdGlvbiBmaW5kRGlyZWN0aW9uLCBG
aW5kT3B0aW9ucyBmaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKK3ZvaWQgRmlu
ZENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZpbmRPcHRpb25z
IG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCiB7CiAgICAgbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOwogCi0gICAgVGV4dENhc2VTZW5zaXRpdml0
eSBjYXNlU2Vuc2l0aXZpdHkgPSBmaW5kT3B0aW9ucyAmIEZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0
aXZlID8gVGV4dENhc2VJbnNlbnNpdGl2ZSA6IFRleHRDYXNlU2Vuc2l0aXZlOwotICAgIGJvb2wg
Zm91bmQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRTdHJpbmcoc3RyaW5nLCBjYXNlU2Vu
c2l0aXZpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaW5kRGlyZWN0aW9uID09IEZpbmREaXJlY3Rpb25Gb3J3YXJkID8gV2ViQ29yZTo6Rmlu
ZERpcmVjdGlvbkZvcndhcmQgOiBXZWJDb3JlOjpGaW5kRGlyZWN0aW9uQmFja3dhcmQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kT3B0aW9u
cyAmIEZpbmRPcHRpb25zV3JhcEFyb3VuZCk7CisgICAgYm9vbCBmb3VuZCA9IG1fd2ViUGFnZS0+
Y29yZVBhZ2UoKS0+ZmluZFN0cmluZyhzdHJpbmcsIGNvcmUob3B0aW9ucykpOwogCiAgICAgRnJh
bWUqIHNlbGVjdGVkRnJhbWUgPSBmcmFtZVdpdGhTZWxlY3Rpb24obV93ZWJQYWdlLT5jb3JlUGFn
ZSgpKTsKIApAQCAtOTEsMTAgKzk3LDEwIEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmZpbmRTdHJp
bmcoY29uc3QgU3QKIAogICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkRmFpbFRvRmluZFN0cmluZyhzdHJpbmcpKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBzaG91bGRTaG93T3ZlcmxheSA9IGZpbmRPcHRpb25zICYgRmluZE9wdGlvbnNTaG93T3Zlcmxh
eTsKKyAgICAgICAgc2hvdWxkU2hvd092ZXJsYXkgPSBvcHRpb25zICYgRmluZE9wdGlvbnNTaG93
T3ZlcmxheTsKIAogICAgICAgICBpZiAoc2hvdWxkU2hvd092ZXJsYXkpIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIG1hdGNoQ291bnQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1hcmtBbGxNYXRj
aGVzRm9yVGV4dChzdHJpbmcsIGNhc2VTZW5zaXRpdml0eSwgZmFsc2UsIG1heE1hdGNoQ291bnQg
KyAxKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSBtX3dlYlBhZ2UtPmNvcmVQ
YWdlKCktPm1hcmtBbGxNYXRjaGVzRm9yVGV4dChzdHJpbmcsIGNvcmUob3B0aW9ucyksIGZhbHNl
LCBtYXhNYXRjaENvdW50ICsgMSk7CiAKICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUg
bW9yZSBtYXRjaGVzIHRoYW4gYWxsb3dlZC4KICAgICAgICAgICAgIGlmIChtYXRjaENvdW50ID4g
bWF4TWF0Y2hDb3VudCkgewpAQCAtMTA1LDcgKzExMSw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6
OmZpbmRTdHJpbmcoY29uc3QgU3QKICAgICAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nKHN0cmluZywgbWF0Y2hDb3VudCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKCEoZmluZE9wdGlvbnMgJiBGaW5kT3B0aW9uc1Nob3dGaW5k
SW5kaWNhdG9yKSB8fCAhdXBkYXRlRmluZEluZGljYXRvcihzZWxlY3RlZEZyYW1lLCBzaG91bGRT
aG93T3ZlcmxheSkpIHsKKyAgICAgICAgaWYgKCEob3B0aW9ucyAmIEZpbmRPcHRpb25zU2hvd0Zp
bmRJbmRpY2F0b3IpIHx8ICF1cGRhdGVGaW5kSW5kaWNhdG9yKHNlbGVjdGVkRnJhbWUsIHNob3Vs
ZFNob3dPdmVybGF5KSkgewogICAgICAgICAgICAgLy8gRWl0aGVyIHdlIHNob3VsZG4ndCBzaG93
IHRoZSBmaW5kIGluZGljYXRvciwgb3Igd2UgY291bGRuJ3QgdXBkYXRlIGl0LgogICAgICAgICAg
ICAgaGlkZUZpbmRJbmRpY2F0b3IoKTsKICAgICAgICAgfQpJbmRleDogV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCShyZXZpc2lvbiA3MjgwMykKKysrIFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDkgKzQ4LDkgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IEZpbmRDb250cm9sbGVyKFdlYlBh
Z2UqKTsKICAgICB2aXJ0dWFsIH5GaW5kQ29udHJvbGxlcigpOwogCi0gICAgdm9pZCBmaW5kU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIEZpbmREaXJlY3Rpb24sIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBt
YXhNYXRjaENvdW50KTsKKyAgICB2b2lkIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9w
dGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwogICAgIHZvaWQgaGlkZUZpbmRVSSgpOwot
ICAgIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYsIGJvb2wgY2FzZUluc2Vu
c2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKKyAgICB2b2lkIGNvdW50U3RyaW5nTWF0
Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7
CiAgICAgCiAgICAgdm9pZCBoaWRlRmluZEluZGljYXRvcigpOwogCkluZGV4OiBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNzI4MDMpCisrKyBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTk4LDkgKzk5
OCw5IEBAIHZvaWQgV2ViUGFnZTo6c2V0QWN0aXZlUG9wdXBNZW51KFdlYlBvcHUKICAgICBtX2Fj
dGl2ZVBvcHVwTWVudSA9IG1lbnU7CiB9CiAKLXZvaWQgV2ViUGFnZTo6ZmluZFN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZywgdWludDMyX3QgZmluZERpcmVjdGlvbiwgdWludDMyX3QgZmluZE9w
dGlvbnMsIHVpbnQzMl90IG1heE1hdGNoQ291bnQpCit2b2lkIFdlYlBhZ2U6OmZpbmRTdHJpbmco
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG9wdGlvbnMsIHVpbnQzMl90IG1heE1hdGNo
Q291bnQpCiB7Ci0gICAgbV9maW5kQ29udHJvbGxlci5maW5kU3RyaW5nKHN0cmluZywgc3RhdGlj
X2Nhc3Q8RmluZERpcmVjdGlvbj4oZmluZERpcmVjdGlvbiksIHN0YXRpY19jYXN0PEZpbmRPcHRp
b25zPihmaW5kT3B0aW9ucyksIG1heE1hdGNoQ291bnQpOworICAgIG1fZmluZENvbnRyb2xsZXIu
ZmluZFN0cmluZyhzdHJpbmcsIHN0YXRpY19jYXN0PEZpbmRPcHRpb25zPihvcHRpb25zKSwgbWF4
TWF0Y2hDb3VudCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6aGlkZUZpbmRVSSgpCkBAIC0xMDA4LDkg
KzEwMDgsOSBAQCB2b2lkIFdlYlBhZ2U6OmhpZGVGaW5kVUkoKQogICAgIG1fZmluZENvbnRyb2xs
ZXIuaGlkZUZpbmRVSSgpOwogfQogCi12b2lkIFdlYlBhZ2U6OmNvdW50U3RyaW5nTWF0Y2hlcyhj
b25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBjYXNlSW5zZW5zaXRpdmUsIHVpbnQzMl90IG1heE1h
dGNoQ291bnQpCit2b2lkIFdlYlBhZ2U6OmNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcm
IHN0cmluZywgdWludDMyX3Qgb3B0aW9ucywgdWludDMyX3QgbWF4TWF0Y2hDb3VudCkKIHsKLSAg
ICBtX2ZpbmRDb250cm9sbGVyLmNvdW50U3RyaW5nTWF0Y2hlcyhzdHJpbmcsIGNhc2VJbnNlbnNp
dGl2ZSwgbWF4TWF0Y2hDb3VudCk7CisgICAgbV9maW5kQ29udHJvbGxlci5jb3VudFN0cmluZ01h
dGNoZXMoc3RyaW5nLCBzdGF0aWNfY2FzdDxGaW5kT3B0aW9ucz4ob3B0aW9ucyksIG1heE1hdGNo
Q291bnQpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmRpZENoYW5nZVNlbGVjdGVkSW5kZXhGb3JBY3Rp
dmVQb3B1cE1lbnUoaW50MzJfdCBuZXdJbmRleCkKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgJKHJldmlzaW9uIDcyODAzKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsOSArMjkwLDkgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHJlYXBwbHlFZGl0Q29tbWFuZCh1aW50NjRfdCBjb21tYW5kSUQpOwogICAgIHZv
aWQgZGlkUmVtb3ZlRWRpdENvbW1hbmQodWludDY0X3QgY29tbWFuZElEKTsKIAotICAgIHZvaWQg
ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBmaW5kRGlyZWN0aW9uLCB1aW50MzJf
dCBmaW5kT3B0aW9ucywgdWludDMyX3QgbWF4TWF0Y2hDb3VudCk7CisgICAgdm9pZCBmaW5kU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IGZpbmRPcHRpb25zLCB1aW50MzJfdCBtYXhNYXRj
aENvdW50KTsKICAgICB2b2lkIGhpZGVGaW5kVUkoKTsKLSAgICB2b2lkIGNvdW50U3RyaW5nTWF0
Y2hlcyhjb25zdCBTdHJpbmcmLCBib29sIGNhc2VJbnNlbnNpdGl2ZSwgdWludDMyX3QgbWF4TWF0
Y2hDb3VudCk7CisgICAgdm9pZCBjb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgdWlu
dDMyX3QgZmluZE9wdGlvbnMsIHVpbnQzMl90IG1heE1hdGNoQ291bnQpOwogCiAjaWYgUExBVEZP
Uk0oUVQpCiAgICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVz
c2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gNzI4MDMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC03OCw5ICs3OCw5IEBA
IG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAgIFNjYWxlV2ViVmlldyhkb3VibGUgc2NhbGUsIFdl
YkNvcmU6OkludFBvaW50IG9yaWdpbikKIAogICAgICMgRmluZC4KLSAgICBGaW5kU3RyaW5nKFdU
Rjo6U3RyaW5nIHN0cmluZywgdWludDMyX3QgZmluZERpcmVjdGlvbiwgdWludDMyX3QgZmluZE9w
dGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCisgICAgRmluZFN0cmluZyhXVEY6OlN0cmlu
ZyBzdHJpbmcsIHVpbnQzMl90IGZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQog
ICAgIEhpZGVGaW5kVUkoKQotICAgIENvdW50U3RyaW5nTWF0Y2hlcyhXVEY6OlN0cmluZyBzdHJp
bmcsIGJvb2wgY2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQorICAgIENv
dW50U3RyaW5nTWF0Y2hlcyhXVEY6OlN0cmluZyBzdHJpbmcsIHVpbnQzMl90IGZpbmRPcHRpb25z
LCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogCiAgICAgIyBQb3B1cCBtZW51LgogICAgIERpZENo
YW5nZVNlbGVjdGVkSW5kZXhGb3JBY3RpdmVQb3B1cE1lbnUoaW50MzJfdCBuZXdJbmRleCk7Cklu
ZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwkocmV2aXNpb24gNzI4MDMpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEwLTExLTI5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgV2ViS2l0IE1hYyBwYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS84NjUwMDg1PiBhZGRpbmcgd29y
ZC1wcmVmaXggc2VhcmNoIG9wdGlvbnMgdG8gdGhlIHRleHQgc2VhcmNoIEFQSS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMDM4CisgICAgICAgIEJh
c2VkIG9uIGEgcGF0Y2ggZnJvbSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIFdlYlZpZXcvV2Vi
RG9jdW1lbnRJbnRlcm5hbC5oOiBSZW1vdmVkIC1tYXJrQWxsTWF0Y2hlc0ZvclRleHQ6Y2FzZVNl
bnNpdGl2ZTpsaW1pdDogYW5kCisgICAgICAgIHJlcGxhY2VkIC1jb3VudE1hdGNoZXNGb3JUZXh0
OmNhc2VTZW5zaXRpdmU6bGltaXQ6bWFya01hdGNoZXM6IHdpdGggYSBXZWJGaW5kT3B0aW9ucy1i
YXNlZAorICAgICAgICBtZXRob2QuIERlY2xhcmVkIGEgV2ViRG9jdW1lbnRPcHRpb25zU2VhcmNo
aW5nIHByb3RvY29sIHdpdGggYSBuZXcgLWZpbmRTdHJpbmc6b3B0aW9uczoKKyAgICAgICAgbWV0
aG9kLiBNYWRlIFdlYkhUTUxWaWV3IGNvbmZvcm0gdG8gdGhlIG5ldyBwcm90b2NvbC4KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoY29yZU9wdGlvbnMpOiBBZGRl
ZC4gQ29udmVydHMgV2ViRmluZE9wdGlvbnMgdG8gV2ViQ29yZSBGaW5kT3B0aW9ucy4KKyAgICAg
ICAgKC1bV2ViSFRNTFZpZXcgc2VhcmNoRm9yOmRpcmVjdGlvbjpjYXNlU2Vuc2l0aXZlOndyYXA6
c3RhcnRJblNlbGVjdGlvbjpdKTogQ2hhbmdlZCB0byB1c2UKKyAgICAgICAgLWZpbmRTdHJpbmc6
b3B0aW9uczouCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGNvdW50TWF0Y2hlc0ZvclRleHQ6b3B0
aW9uczpsaW1pdDptYXJrTWF0Y2hlczpdKTogQ2hhbmdlZCB0byB1c2UgV2ViRmluZE9wdGlvbnMu
CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGZpbmRTdHJpbmc6b3B0aW9uczpdKTogQWRkZWQuIENh
bGxzIHRocm91Z2ggdG8gV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5nKCkuCisgICAgICAgICog
V2ViVmlldy9XZWJQREZWaWV3Lm1tOgorICAgICAgICAoLVtXZWJQREZWaWV3IGNvdW50TWF0Y2hl
c0ZvclRleHQ6b3B0aW9uczpsaW1pdDptYXJrTWF0Y2hlczpdKTogQ2hhbmdlZCB0byB1c2UgV2Vi
RmluZE9wdGlvbnMuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtX
ZWJWaWV3IG1hcmtBbGxNYXRjaGVzRm9yVGV4dDpjYXNlU2Vuc2l0aXZlOmhpZ2hsaWdodDpsaW1p
dDpdKTogTm93IGNhbGxzIHRocm91Z2ggdG8KKyAgICAgICAgLWNvdW50TWF0Y2hlc0ZvclRleHQ6
b3B0aW9uczpoaWdobGlnaHQ6bGltaXQ6bWFya01hdGNoZXMuCisgICAgICAgICgtW1dlYlZpZXcg
Y291bnRNYXRjaGVzRm9yVGV4dDpjYXNlU2Vuc2l0aXZlOmhpZ2hsaWdodDpsaW1pdDptYXJrTWF0
Y2hlczpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgc2VhcmNoRm9yOmRpcmVjdGlvbjpj
YXNlU2Vuc2l0aXZlOndyYXA6c3RhcnRJblNlbGVjdGlvbjpdKTogTm93IGNhbGxzIHRocm91Z2gg
dG8KKyAgICAgICAgLWZpbmRTdHJpbmc6b3B0aW9uczouCisgICAgICAgIChpbmNyZW1lbnRGcmFt
ZSk6IENoYW5nZWQgdG8gdXNlIFdlYkZpbmRPcHRpb25zLgorICAgICAgICAoZmluZFN0cmluZyk6
IEFkZGVkIHRoaXMgaGVscGVyIG1ldGhvZCB0aGF0IHBlcmZvcm1zIHRoZSBzZWFyY2ggdXNpbmcg
dGhlIGJlc3Qgc3VwcG9ydGVkCisgICAgICAgIG1ldGhvZCBmb3IgdGhlIGRvY3VtZW50IHZpZXcu
CisgICAgICAgICgtW1dlYlZpZXcgZmluZFN0cmluZzpvcHRpb25zOl0pOiBDaGFuZ2VkIC1zZWFy
Y2hGb3I6Ojo6OiBpbnRvIHRoaXMuCisgICAgICAgICgtW1dlYlZpZXcgY2FuTWFya0FsbFRleHRN
YXRjaGVzXSk6CisgICAgICAgICgtW1dlYlZpZXcgY291bnRNYXRjaGVzRm9yVGV4dDpvcHRpb25z
OmhpZ2hsaWdodDpsaW1pdDptYXJrTWF0Y2hlczpdKTogVXBkYXRlZCB0byB1c2UKKyAgICAgICAg
V2ViRmluZE9wdGlvbnMuCisgICAgICAgICgtW1dlYlZpZXcgdW5tYXJrQWxsVGV4dE1hdGNoZXNd
KTogVXBkYXRlZCBmb3IgY2hhbmdlIHRvIGluY3JlbWVudEZyYW1lLgorICAgICAgICAoLVtXZWJW
aWV3IHJlY3RzRm9yVGV4dE1hdGNoZXNdKTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3UHJpdmF0ZS5oOiBBZGRlZCBXZWJGaW5kT3B0aW9ucywgLWZpbmRTdHJpbmc6b3B0aW9uczos
IGFuZCBXZWJGaW5kT3B0aW9ucyB2ZXJzaW9uCisgICAgICAgIG9mIGNvdW50TWF0Y2hlc0ZvclRl
eHQ6LgorCiAyMDEwLTExLTIyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRG9jdW1lbnRJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJEb2N1bWVudEludGVybmFsLmgJKHJldmlzaW9uIDcyODAzKQorKysgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkRvY3VtZW50SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaW1wb3J0IDxXZWJLaXQvV2ViRG9jdW1lbnRQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV2ViSFRNTFZpZXcuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJWaWV3UHJpdmF0ZS5oPgogCiAj
aWYgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8PSBNQUNfT1NfWF9WRVJTSU9OXzEwXzQK
ICNkZWZpbmUgV2ViTlNVSW50ZWdlciB1bnNpZ25lZCBpbnQKQEAgLTYxLDEyICs2MiwxNCBAQAog
QHByb3RvY29sIFdlYk11bHRpcGxlVGV4dE1hdGNoZXMgPE5TT2JqZWN0PgogLSAodm9pZClzZXRN
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOihCT09MKW5ld1ZhbHVlOwogLSAoQk9PTClt
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOwotLSAoV2ViTlNVSW50ZWdlciltYXJrQWxs
TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2Fz
ZUZsYWcgbGltaXQ6KFdlYk5TVUludGVnZXIpbGltaXQ7Ci0tIChXZWJOU1VJbnRlZ2VyKWNvdW50
TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2Fz
ZUZsYWcgbGltaXQ6KFdlYk5TVUludGVnZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wpbWFya01h
dGNoZXM7CistIChXZWJOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICop
c3RyaW5nIG9wdGlvbnM6KFdlYkZpbmRPcHRpb25zKW9wdGlvbnMgbGltaXQ6KFdlYk5TVUludGVn
ZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wpbWFya01hdGNoZXM7CiAtICh2b2lkKXVubWFya0Fs
bFRleHRNYXRjaGVzOwogLSAoTlNBcnJheSAqKXJlY3RzRm9yVGV4dE1hdGNoZXM7CiBAZW5kCiAK
K0Bwcm90b2NvbCBXZWJEb2N1bWVudE9wdGlvbnNTZWFyY2hpbmcgPE5TT2JqZWN0PgorLSAoQk9P
TClmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBvcHRpb25zOihXZWJGaW5kT3B0aW9ucylv
cHRpb25zOworQGVuZAogCiAvKiBVc2VkIHRvIHNhdmUgYW5kIHJlc3RvcmUgc3RhdGUgaW4gdGhl
IHZpZXcsIHR5cGljYWxseSB3aGVuIGdvaW5nIGJhY2svZm9yd2FyZCAqLwogQHByb3RvY29sIF9X
ZWJEb2N1bWVudFZpZXdTdGF0ZSA8TlNPYmplY3Q+CkBAIC03Niw3ICs3OSw3IEBACiAtICh2b2lk
KXNldFZpZXdTdGF0ZTooaWQpc3RhdGVQTGlzdDsKIEBlbmQKIAotQGludGVyZmFjZSBXZWJIVE1M
VmlldyAoV2ViRG9jdW1lbnRJbnRlcm5hbFByb3RvY29scykgPFdlYkRvY3VtZW50RWxlbWVudCwg
V2ViTXVsdGlwbGVUZXh0TWF0Y2hlcz4KK0BpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYkRvY3Vt
ZW50SW50ZXJuYWxQcm90b2NvbHMpIDxXZWJEb2N1bWVudEVsZW1lbnQsIFdlYk11bHRpcGxlVGV4
dE1hdGNoZXMsIFdlYkRvY3VtZW50T3B0aW9uc1NlYXJjaGluZz4KIEBlbmQKIAogI3VuZGVmIFdl
Yk5TVUludGVnZXIKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDcy
ODAzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC01MjUsNiArNTI1LDE2IEBAIHN0YXRpYyBOU0NlbGxTdGF0ZVZhbHVlIGtpdChUcmlTdGF0
ZSBzdGEKICAgICByZXR1cm4gTlNPZmZTdGF0ZTsKIH0KIAorc3RhdGljIEZpbmRPcHRpb25zIGNv
cmVPcHRpb25zKFdlYkZpbmRPcHRpb25zIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIChvcHRpb25z
ICYgV2ViRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUgPyBDYXNlSW5zZW5zaXRpdmUgOiAwKQor
ICAgICAgICB8IChvcHRpb25zICYgV2ViRmluZE9wdGlvbnNBdFdvcmRTdGFydHMgPyBBdFdvcmRT
dGFydHMgOiAwKQorICAgICAgICB8IChvcHRpb25zICYgV2ViRmluZE9wdGlvbnNUcmVhdE1lZGlh
bENhcGl0YWxBc1dvcmRTdGFydCA/IFRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0IDogMCkK
KyAgICAgICAgfCAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zQmFja3dhcmRzID8gQmFja3dhcmRz
IDogMCkKKyAgICAgICAgfCAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zV3JhcEFyb3VuZCA/IFdy
YXBBcm91bmQgOiAwKQorICAgICAgICB8IChvcHRpb25zICYgV2ViRmluZE9wdGlvbnNTdGFydElu
U2VsZWN0aW9uID8gU3RhcnRJblNlbGVjdGlvbiA6IDApOworfQorCiBAaW1wbGVtZW50YXRpb24g
V2ViSFRNTFZpZXdQcml2YXRlCiAKICsgKHZvaWQpaW5pdGlhbGl6ZQpAQCAtNjE5NiwxMCArNjIw
Niw3IEBAIC0gKEJPT0wpc3VwcG9ydHNUZXh0RW5jb2RpbmcKIAogLSAoQk9PTClzZWFyY2hGb3I6
KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6
KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZyBzdGFydEluU2VsZWN0aW9uOihCT09M
KXN0YXJ0SW5TZWxlY3Rpb24KIHsKLSAgICBpZiAoIVtzdHJpbmcgbGVuZ3RoXSkKLSAgICAgICAg
cmV0dXJuIE5POwotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwot
ICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhz
dHJpbmcsIGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxhZywgc3RhcnRJblNlbGVjdGlvbik7Cisg
ICAgcmV0dXJuIFtzZWxmIGZpbmRTdHJpbmc6c3RyaW5nIG9wdGlvbnM6KGZvcndhcmQgPyAwIDog
V2ViRmluZE9wdGlvbnNCYWNrd2FyZHMpIHwgKGNhc2VGbGFnID8gMCA6IFdlYkZpbmRPcHRpb25z
Q2FzZUluc2Vuc2l0aXZlKSB8IChzdGFydEluU2VsZWN0aW9uID8gV2ViRmluZE9wdGlvbnNTdGFy
dEluU2VsZWN0aW9uIDogMCldOwogfQogCiBAZW5kCkBAIC02MjE5LDE3ICs2MjI2LDEyIEBAIC0g
KE5TRGljdGlvbmFyeSAqKWVsZW1lbnRBdFBvaW50OihOU1BvaW4KICAgICByZXR1cm4gW1tbV2Vi
RWxlbWVudERpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJlc3VsdDpjb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChJbnRQb2ludChwb2ludCksIGFs
bG93KV0gYXV0b3JlbGVhc2VdOwogfQogCi0tIChOU1VJbnRlZ2VyKW1hcmtBbGxNYXRjaGVzRm9y
VGV4dDooTlNTdHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyBsaW1p
dDooTlNVSW50ZWdlcilsaW1pdAotewotICAgIHJldHVybiBbc2VsZiBjb3VudE1hdGNoZXNGb3JU
ZXh0OnN0cmluZyBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIGxpbWl0OmxpbWl0IG1hcmtNYXRjaGVz
OllFU107Ci19Ci0KLS0gKE5TVUludGVnZXIpY291bnRNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcg
KilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyBsaW1pdDooTlNVSW50ZWdlcils
aW1pdCBtYXJrTWF0Y2hlczooQk9PTCltYXJrTWF0Y2hlcworLSAoTlNVSW50ZWdlciljb3VudE1h
dGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBvcHRpb25zOihXZWJGaW5kT3B0aW9ucylv
cHRpb25zIGxpbWl0OihOU1VJbnRlZ2VyKWxpbWl0IG1hcmtNYXRjaGVzOihCT09MKW1hcmtNYXRj
aGVzCiB7CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAg
aWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb3JlRnJhbWUt
PmVkaXRvcigpLT5jb3VudE1hdGNoZXNGb3JUZXh0KHN0cmluZywgY2FzZUZsYWcsIGxpbWl0LCBt
YXJrTWF0Y2hlcyk7CisgICAgcmV0dXJuIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvdW50TWF0Y2hl
c0ZvclRleHQoc3RyaW5nLCBjb3JlT3B0aW9ucyhvcHRpb25zKSwgbGltaXQsIG1hcmtNYXRjaGVz
KTsKIH0KIAogLSAodm9pZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOihCT09M
KW5ld1ZhbHVlCkBAIC02Mjc0LDYgKzYyNzYsMTQgQEAgLSAoTlNBcnJheSAqKXJlY3RzRm9yVGV4
dE1hdGNoZXMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCistIChCT09MKWZpbmRTdHJpbmc6KE5T
U3RyaW5nICopc3RyaW5nIG9wdGlvbnM6KFdlYkZpbmRPcHRpb25zKW9wdGlvbnMKK3sKKyAgICBp
ZiAoIVtzdHJpbmcgbGVuZ3RoXSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29y
ZUZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhzdHJpbmcsIGNvcmVPcHRpb25zKG9wdGlvbnMp
KTsKK30KKwogQGVuZAogCiAvLyBUaGlzIGlzIHVzZWQgYnkgQXBwS2l0IGFuZCBpcyBpbmNsdWRl
ZCBoZXJlIHNvIHRoYXQgV2ViRGF0YVByb3RvY29sU2NoZW1lIGlzIG9ubHkgZGVmaW5lZCBvbmNl
LgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0JKHJldmlzaW9uIDcyODAzKQorKysgV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyNiwxOSAr
NjI2LDEzIEBAIC0gKEJPT0wpbWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZAogICAgIHJl
dHVybiBOTzsKIH0KIAotLSAoTlNVSW50ZWdlciltYXJrQWxsTWF0Y2hlc0ZvclRleHQ6KE5TU3Ry
aW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgbGltaXQ6KE5TVUludGVn
ZXIpbGltaXQKLXsKLSAgICByZXR1cm4gW3NlbGYgY291bnRNYXRjaGVzRm9yVGV4dDpzdHJpbmcg
Y2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyBsaW1pdDpsaW1pdCBtYXJrTWF0Y2hlczpZRVNdOwotfQot
Ci0tIChOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNh
c2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgbGltaXQ6KE5TVUludGVnZXIpbGltaXQgbWFya01h
dGNoZXM6KEJPT0wpbWFya01hdGNoZXMKKy0gKE5TVUludGVnZXIpY291bnRNYXRjaGVzRm9yVGV4
dDooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczooV2ViRmluZE9wdGlvbnMpb3B0aW9ucyBsaW1p
dDooTlNVSW50ZWdlcilsaW1pdCBtYXJrTWF0Y2hlczooQk9PTCltYXJrTWF0Y2hlcwogewogICAg
IFBERlNlbGVjdGlvbiAqcHJldmlvdXNNYXRjaCA9IG5pbDsKLSAgICBQREZTZWxlY3Rpb24gKm5l
eHRNYXRjaCA9IG5pbDsKICAgICBOU011dGFibGVBcnJheSAqbWF0Y2hlcyA9IFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bGltaXRdOwogICAgIAogICAgIGZvciAoOzsp
IHsKLSAgICAgICAgbmV4dE1hdGNoID0gW3NlbGYgX25leHRNYXRjaEZvcjpzdHJpbmcgZGlyZWN0
aW9uOllFUyBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIHdyYXA6Tk8gZnJvbVNlbGVjdGlvbjpwcmV2
aW91c01hdGNoIHN0YXJ0SW5TZWxlY3Rpb246Tk9dOworICAgICAgICBQREZTZWxlY3Rpb24gKm5l
eHRNYXRjaCA9IFtzZWxmIF9uZXh0TWF0Y2hGb3I6c3RyaW5nIGRpcmVjdGlvbjpZRVMgY2FzZVNl
bnNpdGl2ZTohKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkgd3JhcDpO
TyBmcm9tU2VsZWN0aW9uOnByZXZpb3VzTWF0Y2ggc3RhcnRJblNlbGVjdGlvbjpOT107CiAgICAg
ICAgIGlmICghbmV4dE1hdGNoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIApJbmRleDog
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDcyODAzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2NDUsNiArMjY0NSwyMSBAQCAtIChmbG9h
dClfdmlld1NjYWxlRmFjdG9yCiAgICAgcmV0dXJuIGNvcmVGcmFtZS0+cGFnZVNjYWxlRmFjdG9y
KCk7CiB9CiAKKy0gKE5TVUludGVnZXIpbWFya0FsbE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAq
KXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGhpZ2hsaWdodDooQk9PTCloaWdo
bGlnaHQgbGltaXQ6KE5TVUludGVnZXIpbGltaXQKK3sKKyAgICByZXR1cm4gW3NlbGYgY291bnRN
YXRjaGVzRm9yVGV4dDpzdHJpbmcgb3B0aW9uczooY2FzZUZsYWcgPyAwIDogV2ViRmluZE9wdGlv
bnNDYXNlSW5zZW5zaXRpdmUpIGhpZ2hsaWdodDpoaWdobGlnaHQgbGltaXQ6bGltaXQgbWFya01h
dGNoZXM6WUVTXTsKK30KKworLSAoTlNVSW50ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0
cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGhpZ2hsaWdodDooQk9P
TCloaWdobGlnaHQgbGltaXQ6KE5TVUludGVnZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wpbWFy
a01hdGNoZXMKK3sKKyAgICByZXR1cm4gW3NlbGYgY291bnRNYXRjaGVzRm9yVGV4dDpzdHJpbmcg
b3B0aW9uczooY2FzZUZsYWcgPyAwIDogV2ViRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpIGhp
Z2hsaWdodDpoaWdobGlnaHQgbGltaXQ6bGltaXQgbWFya01hdGNoZXM6bWFya01hdGNoZXNdOwor
fQorCistIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihCT09M
KWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBGbGFn
IHN0YXJ0SW5TZWxlY3Rpb246KEJPT0wpc3RhcnRJblNlbGVjdGlvbgoreworICAgIHJldHVybiBb
c2VsZiBmaW5kU3RyaW5nOnN0cmluZyBvcHRpb25zOigoZm9yd2FyZCA/IDAgOiBXZWJGaW5kT3B0
aW9uc0JhY2t3YXJkcykgfCAoY2FzZUZsYWcgPyAwIDogV2ViRmluZE9wdGlvbnNDYXNlSW5zZW5z
aXRpdmUpIHwgKHdyYXBGbGFnID8gV2ViRmluZE9wdGlvbnNXcmFwQXJvdW5kIDogMCkgfCAoc3Rh
cnRJblNlbGVjdGlvbiA/IFdlYkZpbmRPcHRpb25zU3RhcnRJblNlbGVjdGlvbiA6IDApKV07Cit9
CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIF9XZWJTYWZlRm9yd2FyZGVyCkBAIC0zODI0LDEy
ICszODM5LDEyIEBAIC0gKHZvaWQpc2V0TmV4dEtleVZpZXc6KE5TVmlldyAqKXZpZXcKICAgICBb
c3VwZXIgc2V0TmV4dEtleVZpZXc6dmlld107CiB9CiAKLXN0YXRpYyBXZWJGcmFtZSAqaW5jcmVt
ZW50RnJhbWUoV2ViRnJhbWUgKmZyYW1lLCBCT09MIGZvcndhcmQsIEJPT0wgd3JhcEZsYWcpCitz
dGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdlYkZyYW1lICpmcmFtZSwgV2ViRmluZE9w
dGlvbnMgb3B0aW9ucyA9IDApCiB7CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoZnJhbWUp
OwotICAgIHJldHVybiBraXQoZm9yd2FyZAotICAgICAgICA/IGNvcmVGcmFtZS0+dHJlZSgpLT50
cmF2ZXJzZU5leHRXaXRoV3JhcCh3cmFwRmxhZykKLSAgICAgICAgOiBjb3JlRnJhbWUtPnRyZWUo
KS0+dHJhdmVyc2VQcmV2aW91c1dpdGhXcmFwKHdyYXBGbGFnKSk7CisgICAgcmV0dXJuIGtpdCgo
b3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zQmFja3dhcmRzKQorICAgICAgICA/IGNvcmVGcmFtZS0+
dHJlZSgpLT50cmF2ZXJzZVByZXZpb3VzV2l0aFdyYXAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25z
V3JhcEFyb3VuZCkKKyAgICAgICAgOiBjb3JlRnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0V2l0
aFdyYXAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zV3JhcEFyb3VuZCkpOwogfQogCiAtIChCT09M
KXNlYXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihCT09MKWZvcndhcmQgY2Fz
ZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBGbGFnCkBAIC00MjU1LDcg
KzQyNzAsMTYgQEAgLSAodm9pZCl1bnNjaGVkdWxlRnJvbVJ1bkxvb3A6KE5TUnVuTG9vcAogICAg
ICAgICBjb3JlKHNlbGYpLT5yZW1vdmVTY2hlZHVsZVBhaXIoU2NoZWR1bGVQYWlyOjpjcmVhdGUo
cnVuTG9vcCwgKENGU3RyaW5nUmVmKW1vZGUpKTsKIH0KIAotLSAoQk9PTClzZWFyY2hGb3I6KE5T
U3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJP
T0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZyBzdGFydEluU2VsZWN0aW9uOihCT09MKXN0
YXJ0SW5TZWxlY3Rpb24KK3N0YXRpYyBCT09MIGZpbmRTdHJpbmcoTlNWaWV3IDxXZWJEb2N1bWVu
dFNlYXJjaGluZz4gKnNlYXJjaFZpZXcsIE5TU3RyaW5nICpzdHJpbmcsIFdlYkZpbmRPcHRpb25z
IG9wdGlvbnMpCit7CisgICAgaWYgKFtzZWFyY2hWaWV3IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJv
dG9jb2woV2ViRG9jdW1lbnRPcHRpb25zU2VhcmNoaW5nKV0pCisgICAgICAgIHJldHVybiBbKE5T
VmlldyA8V2ViRG9jdW1lbnRPcHRpb25zU2VhcmNoaW5nPiAqKXNlYXJjaFZpZXcgZmluZFN0cmlu
ZzpzdHJpbmcgb3B0aW9uczpvcHRpb25zXTsKKyAgICBpZiAoW3NlYXJjaFZpZXcgY29uZm9ybXNU
b1Byb3RvY29sOkBwcm90b2NvbChXZWJEb2N1bWVudEluY3JlbWVudGFsU2VhcmNoaW5nKV0pCisg
ICAgICAgIHJldHVybiBbKE5TVmlldyA8V2ViRG9jdW1lbnRJbmNyZW1lbnRhbFNlYXJjaGluZz4g
KilzZWFyY2hWaWV3IHNlYXJjaEZvcjpzdHJpbmcgZGlyZWN0aW9uOiEob3B0aW9ucyAmIFdlYkZp
bmRPcHRpb25zQmFja3dhcmRzKSBjYXNlU2Vuc2l0aXZlOiEob3B0aW9ucyAmIFdlYkZpbmRPcHRp
b25zQ2FzZUluc2Vuc2l0aXZlKSB3cmFwOiEhKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc1dyYXBB
cm91bmQpIHN0YXJ0SW5TZWxlY3Rpb246ISEob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zU3RhcnRJ
blNlbGVjdGlvbildOworICAgIHJldHVybiBbc2VhcmNoVmlldyBzZWFyY2hGb3I6c3RyaW5nIGRp
cmVjdGlvbjohKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc0JhY2t3YXJkcykgY2FzZVNlbnNpdGl2
ZTohKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkgd3JhcDohIShvcHRp
b25zICYgV2ViRmluZE9wdGlvbnNXcmFwQXJvdW5kKV07Cit9CisKKy0gKEJPT0wpZmluZFN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczooV2ViRmluZE9wdGlvbnMpb3B0aW9ucwogewog
ICAgIGlmIChfcHJpdmF0ZS0+Y2xvc2VkKQogICAgICAgICByZXR1cm4gTk87CkBAIC00MjY3LDcg
KzQyOTEsNyBAQCAtIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyCiAgICAg
TlNWaWV3IDxXZWJEb2N1bWVudFNlYXJjaGluZz4gKnN0YXJ0U2VhcmNoVmlldyA9IG5pbDsKICAg
ICBXZWJGcmFtZSAqZnJhbWUgPSBzdGFydEZyYW1lOwogICAgIGRvIHsKLSAgICAgICAgV2ViRnJh
bWUgKm5leHRGcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCBmb3J3YXJkLCB3cmFwRmxhZyk7
CisgICAgICAgIFdlYkZyYW1lICpuZXh0RnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwgb3B0
aW9ucyk7CiAgICAgICAgIAogICAgICAgICBCT09MIG9ubHlPbmVGcmFtZSA9IChmcmFtZSA9PSBu
ZXh0RnJhbWUpOwogICAgICAgICBBU1NFUlQoIW9ubHlPbmVGcmFtZSB8fCBmcmFtZSA9PSBzdGFy
dEZyYW1lKTsKQEAgLTQyNzksMTggKzQzMDMsMTMgQEAgLSAoQk9PTClzZWFyY2hGb3I6KE5TU3Ry
aW5nICopc3RyaW5nIGRpcgogICAgICAgICAgICAgaWYgKGZyYW1lID09IHN0YXJ0RnJhbWUpCiAg
ICAgICAgICAgICAgICAgc3RhcnRTZWFyY2hWaWV3ID0gc2VhcmNoVmlldzsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgQk9PTCBmb3VuZFN0cmluZzsKICAgICAgICAgICAgIC8vIEluIHNvbWUg
Y2FzZXMgd2UgaGF2ZSB0byBzZWFyY2ggc29tZSBjb250ZW50IHR3aWNlOyBzZWUgY29tbWVudCBs
YXRlciBpbiB0aGlzIG1ldGhvZC4KLSAgICAgICAgICAgIC8vIFdlIGNhbiBhdm9pZCBldmVyIGRv
aW5nIHRoaXMgaW4gdGhlIGNvbW1vbiBvbmUtZnJhbWUgY2FzZSBieSBwYXNzaW5nIFlFUyBmb3Ig
d3JhcEZsYWcgCisgICAgICAgICAgICAvLyBXZSBjYW4gYXZvaWQgZXZlciBkb2luZyB0aGlzIGlu
IHRoZSBjb21tb24gb25lLWZyYW1lIGNhc2UgYnkgcGFzc2luZyB0aGUgd3JhcCBvcHRpb24gdGhy
b3VnaCAKICAgICAgICAgICAgIC8vIGhlcmUsIGFuZCB0aGVuIGJhaWxpbmcgb3V0IGJlZm9yZSB3
ZSBnZXQgdG8gdGhlIGNvZGUgdGhhdCB3b3VsZCBzZWFyY2ggYWdhaW4gaW4gdGhlCiAgICAgICAg
ICAgICAvLyBzYW1lIGNvbnRlbnQuCi0gICAgICAgICAgICBCT09MIHdyYXBPblRoaXNQYXNzID0g
d3JhcEZsYWcgJiYgb25seU9uZUZyYW1lOwotICAgICAgICAgICAgaWYgKFtzZWFyY2hWaWV3IGNv
bmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViRG9jdW1lbnRJbmNyZW1lbnRhbFNlYXJjaGlu
ZyldKQotICAgICAgICAgICAgICAgIGZvdW5kU3RyaW5nID0gWyhOU1ZpZXcgPFdlYkRvY3VtZW50
SW5jcmVtZW50YWxTZWFyY2hpbmc+ICopc2VhcmNoVmlldyBzZWFyY2hGb3I6c3RyaW5nIGRpcmVj
dGlvbjpmb3J3YXJkIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWcgd3JhcDp3cmFwT25UaGlzUGFzcyBz
dGFydEluU2VsZWN0aW9uOnN0YXJ0SW5TZWxlY3Rpb25dOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGZvdW5kU3RyaW5nID0gW3NlYXJjaFZpZXcgc2VhcmNoRm9yOnN0cmluZyBk
aXJlY3Rpb246Zm9yd2FyZCBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIHdyYXA6d3JhcE9uVGhpc1Bh
c3NdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZm91bmRTdHJpbmcpIHsKKyAgICAg
ICAgICAgIFdlYkZpbmRPcHRpb25zIG9wdGlvbnNGb3JUaGlzUGFzcyA9IG9ubHlPbmVGcmFtZSA/
IG9wdGlvbnMgOiAob3B0aW9ucyAmIH5XZWJGaW5kT3B0aW9uc1dyYXBBcm91bmQpOworCisgICAg
ICAgICAgICBpZiAoZmluZFN0cmluZyhzZWFyY2hWaWV3LCBzdHJpbmcsIG9wdGlvbnNGb3JUaGlz
UGFzcykpIHsKICAgICAgICAgICAgICAgICBpZiAoZnJhbWUgIT0gc3RhcnRGcmFtZSkKICAgICAg
ICAgICAgICAgICAgICAgW3N0YXJ0RnJhbWUgX2NsZWFyU2VsZWN0aW9uXTsKICAgICAgICAgICAg
ICAgICBbW3NlbGYgd2luZG93XSBtYWtlRmlyc3RSZXNwb25kZXI6c2VhcmNoVmlld107CkBAIC00
MzAzLDE4ICs0MzIyLDEzIEBAIC0gKEJPT0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBk
aXIKICAgICAgICAgZnJhbWUgPSBuZXh0RnJhbWU7CiAgICAgfSB3aGlsZSAoZnJhbWUgJiYgZnJh
bWUgIT0gc3RhcnRGcmFtZSk7CiAgICAgCi0gICAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGZy
YW1lcyBhbmQgd3JhcEZsYWcgaXMgdHJ1ZSBhbmQgd2UndmUgdmlzaXRlZCBlYWNoIG9uZSB3aXRo
b3V0IGZpbmRpbmcgYSByZXN1bHQsIHdlIHN0aWxsIG5lZWQgdG8gc2VhcmNoIGluIHRoZSAKKyAg
ICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZnJhbWVzIGFuZCBXZWJGaW5kT3B0aW9uc1dyYXBB
cm91bmQgaXMgc2V0IGFuZCB3ZSd2ZSB2aXNpdGVkIGVhY2ggb25lIHdpdGhvdXQgZmluZGluZyBh
IHJlc3VsdCwgd2Ugc3RpbGwgbmVlZCB0byBzZWFyY2ggaW4gdGhlIAogICAgIC8vIGZpcnN0LXNl
YXJjaGVkIGZyYW1lIHVwIHRvIHRoZSBzZWxlY3Rpb24uIEhvd2V2ZXIsIHRoZSBBUEkgZG9lc24n
dCBwcm92aWRlIGEgd2F5IHRvIHNlYXJjaCBvbmx5IHVwIHRvIGEgcGFydGljdWxhciBwb2ludC4g
VGhlIG9ubHkgCi0gICAgLy8gd2F5IHRvIG1ha2Ugc3VyZSB0aGUgZW50aXJlIGZyYW1lIGlzIHNl
YXJjaGVkIGlzIHRvIHBhc3MgWUVTIGZvciB0aGUgd3JhcEZsYWcuIFdoZW4gdGhlcmUgYXJlIG5v
IG1hdGNoZXMsIHRoaXMgd2lsbCBzZWFyY2ggYWdhaW4KKyAgICAvLyB3YXkgdG8gbWFrZSBzdXJl
IHRoZSBlbnRpcmUgZnJhbWUgaXMgc2VhcmNoZWQgaXMgdG8gcGFzcyBXZWJGaW5kT3B0aW9uc1dy
YXBBcm91bmQuIFdoZW4gdGhlcmUgYXJlIG5vIG1hdGNoZXMsIHRoaXMgd2lsbCBzZWFyY2gKICAg
ICAvLyBzb21lIGNvbnRlbnQgdGhhdCB3ZSBhbHJlYWR5IHNlYXJjaGVkIG9uIHRoZSBmaXJzdCBw
YXNzLiBJbiB0aGUgd29yc3QgY2FzZSwgd2UgY291bGQgc2VhcmNoIHRoZSBlbnRpcmUgY29udGVu
dHMgb2YgdGhpcyBmcmFtZSB0d2ljZS4KICAgICAvLyBUbyBmaXggdGhpcywgd2UnZCBuZWVkIHRv
IGFkZCBhIG1lY2hhbmlzbSB0byBzcGVjaWZ5IGEgcmFuZ2UgaW4gd2hpY2ggdG8gc2VhcmNoLgot
ICAgIGlmICh3cmFwRmxhZyAmJiBzdGFydFNlYXJjaFZpZXcpIHsKLSAgICAgICAgQk9PTCBmb3Vu
ZFN0cmluZzsKLSAgICAgICAgaWYgKFtzdGFydFNlYXJjaFZpZXcgY29uZm9ybXNUb1Byb3RvY29s
OkBwcm90b2NvbChXZWJEb2N1bWVudEluY3JlbWVudGFsU2VhcmNoaW5nKV0pCi0gICAgICAgICAg
ICBmb3VuZFN0cmluZyA9IFsoTlNWaWV3IDxXZWJEb2N1bWVudEluY3JlbWVudGFsU2VhcmNoaW5n
PiAqKXN0YXJ0U2VhcmNoVmlldyBzZWFyY2hGb3I6c3RyaW5nIGRpcmVjdGlvbjpmb3J3YXJkIGNh
c2VTZW5zaXRpdmU6Y2FzZUZsYWcgd3JhcDpZRVMgc3RhcnRJblNlbGVjdGlvbjpzdGFydEluU2Vs
ZWN0aW9uXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm91bmRTdHJpbmcgPSBbc3RhcnRT
ZWFyY2hWaWV3IHNlYXJjaEZvcjpzdHJpbmcgZGlyZWN0aW9uOmZvcndhcmQgY2FzZVNlbnNpdGl2
ZTpjYXNlRmxhZyB3cmFwOllFU107Ci0gICAgICAgIGlmIChmb3VuZFN0cmluZykgeworICAgIGlm
ICgob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zV3JhcEFyb3VuZCkgJiYgc3RhcnRTZWFyY2hWaWV3
KSB7CisgICAgICAgIGlmIChmaW5kU3RyaW5nKHN0YXJ0U2VhcmNoVmlldywgc3RyaW5nLCBvcHRp
b25zKSkgewogICAgICAgICAgICAgW1tzZWxmIHdpbmRvd10gbWFrZUZpcnN0UmVzcG9uZGVyOnN0
YXJ0U2VhcmNoVmlld107CiAgICAgICAgICAgICByZXR1cm4gWUVTOwogICAgICAgICB9CkBAIC00
NDk2LDIxICs0NTEwLDEzIEBAIC0gKEJPT0wpY2FuTWFya0FsbFRleHRNYXRjaGVzCiAgICAgICAg
IGlmICh2aWV3ICYmICFbdmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYk11bHRp
cGxlVGV4dE1hdGNoZXMpXSkKICAgICAgICAgICAgIHJldHVybiBOTzsKICAgICAgICAgCi0gICAg
ICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsIFlFUywgTk8pOworICAgICAgICBmcmFt
ZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lKTsKICAgICB9IHdoaWxlIChmcmFtZSk7CiAgICAgCiAg
ICAgcmV0dXJuIFlFUzsKIH0KIAotLSAoTlNVSW50ZWdlciltYXJrQWxsTWF0Y2hlc0ZvclRleHQ6
KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgaGlnaGxpZ2h0
OihCT09MKWhpZ2hsaWdodCBsaW1pdDooTlNVSW50ZWdlcilsaW1pdAotewotICAgIGlmIChfcHJp
dmF0ZS0+Y2xvc2VkKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBbc2VsZiBjb3Vu
dE1hdGNoZXNGb3JUZXh0OnN0cmluZyBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIGhpZ2hsaWdodDpo
aWdobGlnaHQgbGltaXQ6bGltaXQgbWFya01hdGNoZXM6WUVTXTsKLX0KLQotLSAoTlNVSW50ZWdl
ciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihC
T09MKWNhc2VGbGFnIGhpZ2hsaWdodDooQk9PTCloaWdobGlnaHQgbGltaXQ6KE5TVUludGVnZXIp
bGltaXQgbWFya01hdGNoZXM6KEJPT0wpbWFya01hdGNoZXMKKy0gKE5TVUludGVnZXIpY291bnRN
YXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczooV2ViRmluZE9wdGlvbnMp
b3B0aW9ucyBoaWdobGlnaHQ6KEJPT0wpaGlnaGxpZ2h0IGxpbWl0OihOU1VJbnRlZ2VyKWxpbWl0
IG1hcmtNYXRjaGVzOihCT09MKW1hcmtNYXRjaGVzCiB7CiAgICAgaWYgKF9wcml2YXRlLT5jbG9z
ZWQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDUyNCwxNCArNDUzMCwxNCBAQCAtIChOU1VJbnRl
Z2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3RyCiAgICAgICAgICAgICAgICAgWyhOU1ZpZXcg
PFdlYk11bHRpcGxlVGV4dE1hdGNoZXM+Kil2aWV3IHNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGln
aGxpZ2h0ZWQ6aGlnaGxpZ2h0XTsKICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQobGltaXQg
PT0gMCB8fCBtYXRjaENvdW50IDwgbGltaXQpOwotICAgICAgICAgICAgbWF0Y2hDb3VudCArPSBb
KE5TVmlldyA8V2ViTXVsdGlwbGVUZXh0TWF0Y2hlcz4qKXZpZXcgY291bnRNYXRjaGVzRm9yVGV4
dDpzdHJpbmcgY2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyBsaW1pdDpsaW1pdCA9PSAwID8gMCA6IGxp
bWl0IC0gbWF0Y2hDb3VudCBtYXJrTWF0Y2hlczptYXJrTWF0Y2hlc107CisgICAgICAgICAgICBt
YXRjaENvdW50ICs9IFsoTlNWaWV3IDxXZWJNdWx0aXBsZVRleHRNYXRjaGVzPiopdmlldyBjb3Vu
dE1hdGNoZXNGb3JUZXh0OnN0cmluZyBvcHRpb25zOm9wdGlvbnMgbGltaXQ6KGxpbWl0ID09IDAg
PyAwIDogbGltaXQgLSBtYXRjaENvdW50KSBtYXJrTWF0Y2hlczptYXJrTWF0Y2hlc107CiAKICAg
ICAgICAgICAgIC8vIFN0b3AgbG9va2luZyBpZiB3ZSd2ZSByZWFjaGVkIHRoZSBsaW1pdC4gQSBs
aW1pdCBvZiAwIG1lYW5zIG5vIGxpbWl0LgogICAgICAgICAgICAgaWYgKGxpbWl0ID4gMCAmJiBt
YXRjaENvdW50ID49IGxpbWl0KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCBZRVMsIE5PKTsK
KyAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSk7CiAgICAgfSB3aGlsZSAoZnJh
bWUpOwogICAgIAogICAgIHJldHVybiBtYXRjaENvdW50OwpAQCAtNDU0OCw3ICs0NTU0LDcgQEAg
LSAodm9pZCl1bm1hcmtBbGxUZXh0TWF0Y2hlcwogICAgICAgICBpZiAoW3ZpZXcgY29uZm9ybXNU
b1Byb3RvY29sOkBwcm90b2NvbChXZWJNdWx0aXBsZVRleHRNYXRjaGVzKV0pCiAgICAgICAgICAg
ICBbKE5TVmlldyA8V2ViTXVsdGlwbGVUZXh0TWF0Y2hlcz4qKXZpZXcgdW5tYXJrQWxsVGV4dE1h
dGNoZXNdOwogICAgICAgICAKLSAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwg
WUVTLCBOTyk7CisgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUpOwogICAgIH0g
d2hpbGUgKGZyYW1lKTsKIH0KIApAQCAtNDU4Niw3ICs0NTkyLDcgQEAgLSAoTlNBcnJheSAqKXJl
Y3RzRm9yVGV4dE1hdGNoZXMKICAgICAgICAgICAgIFtwb29sIGRyYWluXTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwgWUVTLCBOTyk7
CisgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUpOwogICAgIH0gd2hpbGUgKGZy
YW1lKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdQcml2YXRlLmgJKHJldmlzaW9uIDcyODAzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgZXh0ZXJuIE5TU3Ry
aW5nICpXZWJFbGVtZW50SXNDb250ZW50RWRpdAogZXh0ZXJuIE5TU3RyaW5nICpXZWJFbGVtZW50
TWVkaWFVUkxLZXk7ICAgICAgICAgIC8vIE5TVVJMIG9mIHRoZSBtZWRpYSBlbGVtZW50CiAKIC8v
IG90aGVyIFdlYkVsZW1lbnREaWN0aW9uYXJ5IGtleXMKLWV4dGVybiBOU1N0cmluZyAqV2ViRWxl
bWVudExpbmtJc0xpdmVLZXk7ICAgICAgICAvLyBOU051bWJlciBvZiBCT09MIGluZGljdGF0aW5n
IHdoZXRoZXIgdGhlIGxpbmsgaXMgbGl2ZSBvciBub3QKK2V4dGVybiBOU1N0cmluZyAqV2ViRWxl
bWVudExpbmtJc0xpdmVLZXk7ICAgICAgICAvLyBOU051bWJlciBvZiBCT09MIGluZGljYXRpbmcg
d2hldGhlciB0aGUgbGluayBpcyBsaXZlIG9yIG5vdAogZXh0ZXJuIE5TU3RyaW5nICpXZWJFbGVt
ZW50SXNJblNjcm9sbEJhcktleTsKIAogLy8gT25lIG9mIHRoZSBzdWJ2aWV3cyBvZiB0aGUgV2Vi
VmlldyBlbnRlcmVkIGNvbXBvc2l0aW5nIG1vZGUuCkBAIC05Niw2ICs5NiwxNiBAQCB0eXBlZGVm
IGVudW0gewogICAgIFdlYkluamVjdEluVG9wRnJhbWVPbmx5CiB9IFdlYlVzZXJDb250ZW50SW5q
ZWN0ZWRGcmFtZXM7CiAKK2VudW0geworICAgIFdlYkZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZl
ID0gMSA8PCAwLAorICAgIFdlYkZpbmRPcHRpb25zQXRXb3JkU3RhcnRzID0gMSA8PCAxLAorICAg
IFdlYkZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQgPSAxIDw8IDIsCisg
ICAgV2ViRmluZE9wdGlvbnNCYWNrd2FyZHMgPSAxIDw8IDMsCisgICAgV2ViRmluZE9wdGlvbnNX
cmFwQXJvdW5kID0gMSA8PCA0LAorICAgIFdlYkZpbmRPcHRpb25zU3RhcnRJblNlbGVjdGlvbiA9
IDEgPDwgNQorfTsKK3R5cGVkZWYgTlNVSW50ZWdlciBXZWJGaW5kT3B0aW9uczsKKwogQGludGVy
ZmFjZSBXZWJDb250cm9sbGVyIDogTlNUcmVlQ29udHJvbGxlciB7CiAgICAgSUJPdXRsZXQgV2Vi
VmlldyAqd2ViVmlldzsKIH0KQEAgLTExNCwxOCArMTI0LDcgQEAgQGludGVyZmFjZSBXZWJWaWV3
IChXZWJQZW5kaW5nUHVibGljKQogLSAodm9pZClzY2hlZHVsZUluUnVuTG9vcDooTlNSdW5Mb29w
ICopcnVuTG9vcCBmb3JNb2RlOihOU1N0cmluZyAqKW1vZGU7CiAtICh2b2lkKXVuc2NoZWR1bGVG
cm9tUnVuTG9vcDooTlNSdW5Mb29wICopcnVuTG9vcCBmb3JNb2RlOihOU1N0cmluZyAqKW1vZGU7
CiAKLS8qIQotQG1ldGhvZCBzZWFyY2hGb3I6ZGlyZWN0aW9uOmNhc2VTZW5zaXRpdmU6d3JhcDpz
dGFydEluU2VsZWN0aW9uOgotIEBhYnN0cmFjdCBTZWFyY2hlcyBhIGRvY3VtZW50IHZpZXcgZm9y
IGEgc3RyaW5nIGFuZCBoaWdobGlnaHRzIHRoZSBzdHJpbmcgaWYgaXQgaXMgZm91bmQuCi0gU3Rh
cnRzIHRoZSBzZWFyY2ggZnJvbSB0aGUgY3VycmVudCBzZWxlY3Rpb24uICBXaWxsIHNlYXJjaCBh
Y3Jvc3MgYWxsIGZyYW1lcy4KLSBAcGFyYW0gc3RyaW5nIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZv
ci4KLSBAcGFyYW0gZm9yd2FyZCBZRVMgdG8gc2VhcmNoIGZvcndhcmQsIE5PIHRvIHNlYWNoIGJh
Y2t3YXJkcy4KLSBAcGFyYW0gY2FzZUZsYWcgWUVTIHRvIGZvciBjYXNlLXNlbnNpdGl2ZSBzZWFy
Y2gsIE5PIGZvciBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4KLSBAcGFyYW0gd3JhcEZsYWcgWUVT
IHRvIHdyYXAgYXJvdW5kLCBOTyB0byBhdm9pZCB3cmFwcGluZy4KLSBAcGFyYW0gc3RhcnRJblNl
bGVjdGlvbiBZRVMgdG8gYmVnaW4gc2VhcmNoIGluIHRoZSBzZWxlY3RlZCB0ZXh0ICh1c2VmdWwg
Zm9yIGluY3JlbWVudGFsIHNlYXJjaGluZyksIE5PIHRvIGJlZ2luIHNlYXJjaCBhZnRlciB0aGUg
c2VsZWN0ZWQgdGV4dC4KLSBAcmVzdWx0IFlFUyBpZiBmb3VuZCwgTk8gaWYgbm90IGZvdW5kLgot
ICovCi0tIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihCT09M
KWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBGbGFn
IHN0YXJ0SW5TZWxlY3Rpb246KEJPT0wpc3RhcnRJblNlbGVjdGlvbjsKKy0gKEJPT0wpZmluZFN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczooV2ViRmluZE9wdGlvbnMpb3B0aW9uczsK
IAogLSAodm9pZClzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5OihCT09MKW1haW5GcmFtZURvY3Vt
ZW50UmVhZHk7CiAKQEAgLTE4Miw4ICsxODEsNyBAQCBAaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlBl
bmRpbmdQdWJsaWMpCiAvLyB3aGV0aGVyIG9yIG5vdCB0aGV5IGltcGxlbWVudCB0aGUgcHJvdG9j
b2wuIEZvciBub3cgd2UnbGwganVzdCBkZWFsIHdpdGggSFRNTC4KIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIHN0aWxsIGluIGZsdXg7IGRvbid0IHJlbHkgb24gdGhlbSB5ZXQuCiAtIChCT09MKWNhbk1h
cmtBbGxUZXh0TWF0Y2hlczsKLS0gKFdlYk5TVUludGVnZXIpbWFya0FsbE1hdGNoZXNGb3JUZXh0
OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGhpZ2hsaWdo
dDooQk9PTCloaWdobGlnaHQgbGltaXQ6KFdlYk5TVUludGVnZXIpbGltaXQ7Ci0tIChXZWJOU1VJ
bnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRp
dmU6KEJPT0wpY2FzZUZsYWcgaGlnaGxpZ2h0OihCT09MKWhpZ2hsaWdodCBsaW1pdDooV2ViTlNV
SW50ZWdlcilsaW1pdCBtYXJrTWF0Y2hlczooQk9PTCltYXJrTWF0Y2hlczsKKy0gKFdlYk5TVUlu
dGVnZXIpY291bnRNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczooV2Vi
RmluZE9wdGlvbnMpb3B0aW9ucyBoaWdobGlnaHQ6KEJPT0wpaGlnaGxpZ2h0IGxpbWl0OihXZWJO
U1VJbnRlZ2VyKWxpbWl0IG1hcmtNYXRjaGVzOihCT09MKW1hcmtNYXRjaGVzOwogLSAodm9pZCl1
bm1hcmtBbGxUZXh0TWF0Y2hlczsKIC0gKE5TQXJyYXkgKilyZWN0c0ZvclRleHRNYXRjaGVzOwog
CkBAIC01NDUsNiArNTQzLDI0IEBAIENvdWxkIGJlIHdvcnRoIGFkZGluZyB0byB0aGUgQVBJLgog
LSAodm9pZClfc2NhbGVXZWJWaWV3OihmbG9hdClzY2FsZSBhdE9yaWdpbjooTlNQb2ludClvcmln
aW47CiAtIChmbG9hdClfdmlld1NjYWxlRmFjdG9yOwogCisvLyBEZXByZWNhdGVkLiBVc2UgdGhl
IG1ldGhvZHMgaW4gcGVuZGluZyBwdWJsaWMgYWJvdmUgaW5zdGVhZC4KKy0gKFdlYk5TVUludGVn
ZXIpbWFya0FsbE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZl
OihCT09MKWNhc2VGbGFnIGhpZ2hsaWdodDooQk9PTCloaWdobGlnaHQgbGltaXQ6KFdlYk5TVUlu
dGVnZXIpbGltaXQ7CistIChXZWJOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3Ry
aW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgaGlnaGxpZ2h0OihCT09M
KWhpZ2hsaWdodCBsaW1pdDooV2ViTlNVSW50ZWdlcilsaW1pdCBtYXJrTWF0Y2hlczooQk9PTClt
YXJrTWF0Y2hlczsKKworLyohCisgQG1ldGhvZCBzZWFyY2hGb3I6ZGlyZWN0aW9uOmNhc2VTZW5z
aXRpdmU6d3JhcDpzdGFydEluU2VsZWN0aW9uOgorIEBhYnN0cmFjdCBTZWFyY2hlcyBhIGRvY3Vt
ZW50IHZpZXcgZm9yIGEgc3RyaW5nIGFuZCBoaWdobGlnaHRzIHRoZSBzdHJpbmcgaWYgaXQgaXMg
Zm91bmQuCisgU3RhcnRzIHRoZSBzZWFyY2ggZnJvbSB0aGUgY3VycmVudCBzZWxlY3Rpb24uICBX
aWxsIHNlYXJjaCBhY3Jvc3MgYWxsIGZyYW1lcy4KKyBAcGFyYW0gc3RyaW5nIFRoZSBzdHJpbmcg
dG8gc2VhcmNoIGZvci4KKyBAcGFyYW0gZm9yd2FyZCBZRVMgdG8gc2VhcmNoIGZvcndhcmQsIE5P
IHRvIHNlYWNoIGJhY2t3YXJkcy4KKyBAcGFyYW0gY2FzZUZsYWcgWUVTIHRvIGZvciBjYXNlLXNl
bnNpdGl2ZSBzZWFyY2gsIE5PIGZvciBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4KKyBAcGFyYW0g
d3JhcEZsYWcgWUVTIHRvIHdyYXAgYXJvdW5kLCBOTyB0byBhdm9pZCB3cmFwcGluZy4KKyBAcGFy
YW0gc3RhcnRJblNlbGVjdGlvbiBZRVMgdG8gYmVnaW4gc2VhcmNoIGluIHRoZSBzZWxlY3RlZCB0
ZXh0ICh1c2VmdWwgZm9yIGluY3JlbWVudGFsIHNlYXJjaGluZyksIE5PIHRvIGJlZ2luIHNlYXJj
aCBhZnRlciB0aGUgc2VsZWN0ZWQgdGV4dC4KKyBAcmVzdWx0IFlFUyBpZiBmb3VuZCwgTk8gaWYg
bm90IGZvdW5kLgorICovCisvLyBEZXByZWNhdGVkLiBVc2UgZmluZFN0cmluZy4KKy0gKEJPT0wp
c2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2FyZCBjYXNl
U2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcgc3RhcnRJblNlbGVj
dGlvbjooQk9PTClzdGFydEluU2VsZWN0aW9uOworCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViVmll
dyAoV2ViVmlld1ByaW50aW5nUHJpdmF0ZSkKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyODAzKQorKysg
V2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTAtMTEtMjkgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEdW1wUmVuZGVyVHJlZSBjaGFuZ2Vz
IGZvciB0ZXN0aW5nIHRoZSB0ZXh0IHNlYXJjaCBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDAzOAorCisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoZmluZFN0cmluZ0NhbGxiYWNr
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcpOgorICAgICAgICAqIE1pbmlCcm93c2Vy
L21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tOgorICAgICAgICAoLVtCcm93c2VyV2luZG93
Q29udHJvbGxlciBmaW5kOl0pOgorCiAyMDEwLTExLTI5ICBMYXN6bG8gR29tYm9zICA8bGFzemxv
LjEuZ29tYm9zQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRl
IENocmlzdGlhbnNlbi4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRl
c3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDcyODAzKQorKysgV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NDIsNiArNDQyLDIyIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGV4ZWNDb21tYW5kQ2FsbGJh
Y2soSlMKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0
YXRpYyBKU1ZhbHVlUmVmIGZpbmRTdHJpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgLy8gSGFzIE1hYyBpbXBsZW1lbnRhdGlvbi4KKyAgICBpZiAoYXJndW1l
bnRDb3VudCA8IDIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0YXJnZXQoQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NF
UlQoISpleGNlcHRpb24pOworCisgICAgSlNPYmplY3RSZWYgb3B0aW9ucyA9IEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhj
ZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+
ZmluZFN0cmluZyhjb250ZXh0LCB0YXJnZXQuZ2V0KCksIG9wdGlvbnMpKTsKK30KKwogc3RhdGlj
IEpTVmFsdWVSZWYgY291bnRlclZhbHVlRm9yRWxlbWVudEJ5SWRDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQpAQCAtMTkx
Niw2ICsxOTMyLDcgQEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6Ogog
ICAgICAgICB7ICJldmFsdWF0ZUluV2ViSW5zcGVjdG9yIiwgZXZhbHVhdGVJbldlYkluc3BlY3Rv
ckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkIiwgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJleGVjQ29tbWFuZCIsIGV4ZWNDb21tYW5kQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAg
ICAgeyAiZmluZFN0cmluZyIsIGZpbmRTdHJpbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJjb3VudGVyVmFsdWVGb3JFbGVtZW50QnlJZCIsIGNvdW50ZXJWYWx1ZUZvckVsZW1lbnRCeUlk
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVy
bWlzc2lvbiIsIGdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LCAKICAgICAgICAgeyAiaGFzU3BlbGxpbmdNYXJrZXIiLCBoYXNTcGVsbGluZ01hcmtlckNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDcyODAzKQorKysgV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTIsMTEgKzUyLDEyIEBAIHB1YmxpYzoKICAgICBib29sIGNhbGxTaG91bGRDbG9zZU9uV2ViVmll
dygpOwogICAgIEpTU3RyaW5nUmVmIGNvcHlEZWNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFt
ZSk7CiAgICAgSlNTdHJpbmdSZWYgY29weUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1l
KTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY291bnRlclZhbHVlRm9yRWxlbWVudEJ5
SWQoSlNTdHJpbmdSZWYgaWQpOwogICAgIHZvaWQgZGlzYWJsZUltYWdlTG9hZGluZygpOwogICAg
IHZvaWQgZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCk7CiAgICAgdm9pZCBkaXNwbGF5KCk7
CiAgICAgdm9pZCBleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1
ZSk7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNvdW50ZXJWYWx1ZUZvckVsZW1lbnRC
eUlkKEpTU3RyaW5nUmVmIGlkKTsKKyAgICBib29sIGZpbmRTdHJpbmcoSlNDb250ZXh0UmVmLCBK
U1N0cmluZ1JlZiwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KTsKICAgICBib29sIGlzQ29tbWFu
ZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSk7CiAgICAgdm9pZCBrZWVwV2ViSGlzdG9yeSgpOwog
ICAgIEpTVmFsdWVSZWYgY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4
dFJlZiwgSlNWYWx1ZVJlZik7CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
TGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiA3Mjgw
MykKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxl
ck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgzLDYgKzU4Myw0MiBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChKCiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gX2V4
ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpuYW1lTlMgdmFsdWU6dmFsdWVOU107CiB9CiAKK2Jvb2wg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
U3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQoreworICAgIFdlYkZp
bmRPcHRpb25zIG9wdGlvbnMgPSAwOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxl
bmd0aFByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxl
bmd0aCIpKTsKKyAgICBKU1ZhbHVlUmVmIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0
eShjb250ZXh0LCBvcHRpb25zQXJyYXksIGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgMCk7Cisg
ICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHRhcmdldENGU3RyaW5n
KEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRhcmdl
dCkpOworCisgICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKKyAgICAgICAg
aWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9wdGlvbk5hbWUoQWRvcHQs
IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKKworICAgICAgICBpZiAo
SlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQ2FzZUluc2Vu
c2l0aXZlIikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkZpbmRPcHRpb25zQ2FzZUluc2Vu
c2l0aXZlOworICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9w
dGlvbk5hbWUuZ2V0KCksICJBdFdvcmRTdGFydHMiKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0g
V2ViRmluZE9wdGlvbnNBdFdvcmRTdGFydHM7CisgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIlRyZWF0TWVkaWFsQ2FwaXRhbEFz
V29yZFN0YXJ0IikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkZpbmRPcHRpb25zVHJlYXRN
ZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7CisgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkJhY2t3YXJkcyIpKQorICAgICAgICAg
ICAgb3B0aW9ucyB8PSBXZWJGaW5kT3B0aW9uc0JhY2t3YXJkczsKKyAgICAgICAgZWxzZSBpZiAo
SlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiV3JhcEFyb3Vu
ZCIpKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJGaW5kT3B0aW9uc1dyYXBBcm91bmQ7Cisg
ICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5n
ZXQoKSwgIlN0YXJ0SW5TZWxlY3Rpb24iKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViRmlu
ZE9wdGlvbnNTdGFydEluU2VsZWN0aW9uOworICAgIH0KKworICAgIHJldHVybiBbW21haW5GcmFt
ZSB3ZWJWaWV3XSBmaW5kU3RyaW5nOihOU1N0cmluZyAqKXRhcmdldENGU3RyaW5nLmdldCgpIG9w
dGlvbnM6b3B0aW9uc107Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hl
TW9kZWwoaW50IGNhY2hlTW9kZWwpCiB7CiAgICAgW1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFBy
ZWZlcmVuY2VzXSBzZXRDYWNoZU1vZGVsOmNhY2hlTW9kZWxdOwpJbmRleDogV2ViS2l0VG9vbHMv
TWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0JKHJl
dmlzaW9uIDcyODAzKQorKysgV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5k
b3dDb250cm9sbGVyLm0JKHdvcmtpbmcgY29weSkKQEAgLTY5MCw4ICs2OTAsNyBAQCAtIChJQkFj
dGlvbilmaW5kOihpZClzZW5kZXIKIHsKICAgICBXS1N0cmluZ1JlZiBzdHJpbmcgPSBXS1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpW3NlbmRlciBzdHJpbmdWYWx1ZV0pOwog
Ci0gICAgV0tQYWdlRmluZFN0cmluZyhfd2ViVmlldy5wYWdlUmVmLCBzdHJpbmcsIGtXS0ZpbmRE
aXJlY3Rpb25Gb3J3YXJkLCAKLSAgICAgICAgICAgICAgICAgICAgIGtXS0ZpbmRPcHRpb25zQ2Fz
ZUluc2Vuc2l0aXZlIHwga1dLRmluZE9wdGlvbnNXcmFwQXJvdW5kIHwga1dLRmluZE9wdGlvbnNT
aG93RmluZEluZGljYXRvciB8IGtXS0ZpbmRPcHRpb25zU2hvd092ZXJsYXksIDEwMCk7CisgICAg
V0tQYWdlRmluZFN0cmluZyhfd2ViVmlldy5wYWdlUmVmLCBzdHJpbmcsIGtXS0ZpbmRPcHRpb25z
Q2FzZUluc2Vuc2l0aXZlIHwga1dLRmluZE9wdGlvbnNXcmFwQXJvdW5kIHwga1dLRmluZE9wdGlv
bnNTaG93RmluZEluZGljYXRvciB8IGtXS0ZpbmRPcHRpb25zU2hvd092ZXJsYXksIDEwMCk7CiB9
CiAKIEBlbmQKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyODAzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTEtMjkgIERhbiBCZXJu
c3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCB0ZXh0IHNlYXJjaCB0ZXN0cywgaW4gcGFydGljdWxhciB0
ZXN0aW5nIHdvcmQtcHJlZml4IHNlYXJjaC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUwMDM4CisKKyAgICAgICAgKiBlZGl0aW5nL3RleHQtaXRlcmF0
b3IvZmluZFN0cmluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvdGV4
dC1pdGVyYXRvci9maW5kU3RyaW5nLmh0bWw6IEFkZGVkLgorCiAyMDEwLTExLTI5ICBBYmhpc2hl
ayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KSW5k
ZXg6IExheW91dFRlc3RzL2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmlu
ZFN0cmluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5n
L3RleHQtaXRlcmF0b3IvZmluZFN0cmluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTQ5IEBACitTZWFyY2hpbmcgZm9yIOKAmG/igJkgaW4g4oCYTG9yZW0gaXBzdW0gZG9s
b3Igc2l0IGFtZXTigJkgd2l0aCBvcHRpb25zIFtdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgMSwy
IGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTMsMTQgYXMgZXhwZWN0ZWQuCitQ
QVNTOiBHb3QgYSBtYXRjaCBhdCAxNSwxNiBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBubyBtYXRj
aCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhv4oCZIGluIOKAmExvcmVtIGlwc3Vt
IGRvbG9yIHNpdCBhbWV04oCZIHdpdGggb3B0aW9ucyBbV3JhcEFyb3VuZF06CitQQVNTOiBHb3Qg
YSBtYXRjaCBhdCAxLDIgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBtYXRjaCBhdCAxMywxNCBh
cyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDE1LDE2IGFzIGV4cGVjdGVkLgorUEFT
UzogR290IGEgbWF0Y2ggYXQgMSwyIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmG/i
gJkgaW4g4oCYTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXTigJkgd2l0aCBvcHRpb25zIFtCYWNr
d2FyZHNdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTUsMTYgYXMgZXhwZWN0ZWQuCitQQVNTOiBH
b3QgYSBtYXRjaCBhdCAxMywxNCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDEs
MiBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNo
aW5nIGZvciDigJhv4oCZIGluIOKAmExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV04oCZIHdpdGgg
b3B0aW9ucyBbQmFja3dhcmRzLCBXcmFwQXJvdW5kXToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDE1
LDE2IGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTMsMTQgYXMgZXhwZWN0ZWQu
CitQQVNTOiBHb3QgYSBtYXRjaCBhdCAxLDIgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBtYXRj
aCBhdCAxNSwxNiBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhP4oCZIGluIOKAmExv
cmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV04oCZIHdpdGggb3B0aW9ucyBbXToKK1BBU1M6IEdvdCBu
byBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhP4oCZIGluIOKAmExvcmVt
IGlwc3VtIGRvbG9yIHNpdCBhbWV04oCZIHdpdGggb3B0aW9ucyBbQ2FzZUluc2Vuc2l0aXZlXToK
K1BBU1M6IEdvdCBhIG1hdGNoIGF0IDEsMiBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNo
IGF0IDEzLDE0IGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTUsMTYgYXMgZXhw
ZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYbW91bnTigJkgaW4g4oCYaW5zdXJtb3VudGFibGUg
bW91bnRhaW7igJkgd2l0aCBvcHRpb25zIFtdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgNSwxMCBh
cyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDE1LDIwIGFzIGV4cGVjdGVkLgorUEFT
UzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmG1vdW504oCZ
IGluIOKAmGluc3VybW91bnRhYmxlIG1vdW50YWlu4oCZIHdpdGggb3B0aW9ucyBbQXRXb3JkU3Rh
cnRzXToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDE1LDIwIGFzIGV4cGVjdGVkLgorUEFTUzogR290
IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmGNv4oCZIGluIOKAmGNv
Y29h4oCZIHdpdGggb3B0aW9ucyBbXToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDAsMiBhcyBleHBl
Y3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDIsNCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBu
byBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhjb+KAmSBpbiDigJhjb2Nv
YeKAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0c106CitQQVNTOiBHb3QgYSBtYXRjaCBhdCAw
LDIgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJj
aGluZyBmb3Ig4oCYb3Jn4oCZIGluIOKAmHdlYmtpdC5vcmfigJkgd2l0aCBvcHRpb25zIFtBdFdv
cmRTdGFydHNdOgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcg
Zm9yIOKAmC5vcmfigJkgaW4g4oCYd2Via2l0Lm9yZ+KAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0
YXJ0c106CitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig
4oCYcmfigJkgaW4g4oCYd2Via2l0Lm9yZ+KAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywg
VHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnRdOgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4
cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmG9yZ+KAmSBpbiDigJh3ZWJraXQub3Jn4oCZIHdp
dGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzLCBUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydF06
CitQQVNTOiBHb3QgYSBtYXRjaCBhdCA3LDEwIGFzIGV4cGVjdGVkLgorUEFTUzogR290IG5vIG1h
dGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmC5vcmfigJkgaW4g4oCYd2Via2l0
Lm9yZ+KAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRNZWRpYWxDYXBpdGFsQXNX
b3JkU3RhcnRdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgNiwxMCBhcyBleHBlY3RlZC4KK1BBU1M6
IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJh0Lm9yZ+KAmSBp
biDigJh3ZWJraXQub3Jn4oCZIHdpdGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzLCBUcmVhdE1lZGlh
bENhcGl0YWxBc1dvcmRTdGFydF06CitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisK
K1NlYXJjaGluZyBmb3Ig4oCYaXTigJkgaW4g4oCYV2ViS2l04oCZIHdpdGggb3B0aW9ucyBbQXRX
b3JkU3RhcnRzLCBUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydF06CitQQVNTOiBHb3Qgbm8g
bWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYS2l04oCZIGluIOKAmFdlYktp
dOKAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3Jk
U3RhcnRdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgMyw2IGFzIGV4cGVjdGVkLgorUEFTUzogR290
IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmGJLaXTigJkgaW4g4oCY
V2ViS2l04oCZIHdpdGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzLCBUcmVhdE1lZGlhbENhcGl0YWxB
c1dvcmRTdGFydF06CitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGlu
ZyBmb3Ig4oCYZXF1ZXN04oCZIGluIOKAmFhNTEhUVFBSZXF1ZXN04oCZIHdpdGggb3B0aW9ucyBb
QXRXb3JkU3RhcnRzLCBUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydF06CitQQVNTOiBHb3Qg
bm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYUmVxdWVzdOKAmSBpbiDi
gJhYTUxIVFRQUmVxdWVzdOKAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRNZWRp
YWxDYXBpdGFsQXNXb3JkU3RhcnRdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgNywxNCBhcyBleHBl
Y3RlZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDi
gJhQUmVxdWVzdOKAmSBpbiDigJhYTUxIVFRQUmVxdWVzdOKAmSB3aXRoIG9wdGlvbnMgW0F0V29y
ZFN0YXJ0cywgVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnRdOgorUEFTUzogR290IG5vIG1h
dGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmDY04oCZIGluIOKAmExQNjTigJkg
d2l0aCBvcHRpb25zIFtBdFdvcmRTdGFydHNdOgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVj
dGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmDTigJkgaW4g4oCYTFA2NOKAmSB3aXRoIG9wdGlvbnMg
W0F0V29yZFN0YXJ0cywgVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnRdOgorUEFTUzogR290
IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmDY04oCZIGluIOKAmExQ
NjTigJkgd2l0aCBvcHRpb25zIFtBdFdvcmRTdGFydHMsIFRyZWF0TWVkaWFsQ2FwaXRhbEFzV29y
ZFN0YXJ0XToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDIsNCBhcyBleHBlY3RlZC4KK1BBU1M6IEdv
dCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhQNjTigJkgaW4g4oCY
TFA2NOKAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRNZWRpYWxDYXBpdGFsQXNX
b3JkU3RhcnRdOgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcg
Zm9yIOKAmGHigJkgaW4gbG9uZyBzdHJpbmcgd2l0aCBvcHRpb25zIFtBdFdvcmRTdGFydHNdOgor
UEFTUzogR290IGEgbWF0Y2ggYXQgNjE0Niw2MTQ3IGFzIGV4cGVjdGVkLgorUEFTUzogR290IG5v
IG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmOC4geC4o+KAmSBpbiDigJjg
uIHguKPguJvguLnguYDguKXguIHguIrguIHguIrguIHguKPguIHguKPguIHguIrguJrguIfguIHg
uIrigJkgd2l0aCBvcHRpb25zIFtdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgMCwyIGFzIGV4cGVj
dGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTAsMTIgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3Qg
YSBtYXRjaCBhdCAxMiwxNCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBl
Y3RlZC4KKworU2VhcmNoaW5nIGZvciDigJjguIHguKPigJkgaW4g4oCY4LiB4Lij4Lib4Li54LmA
4Lil4LiB4LiK4LiB4LiK4LiB4Lij4LiB4Lij4LiB4LiK4Lia4LiH4LiB4LiK4oCZIHdpdGggb3B0
aW9ucyBbQXRXb3JkU3RhcnRzXToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDAsMiBhcyBleHBlY3Rl
ZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDEyLDE0IGFzIGV4cGVjdGVkLgorUEFTUzogR290IG5v
IG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmOC4geC4iuKAmSBpbiDigJjg
uIHguKPguJvguLnguYDguKXguIHguIrguIHguIrguIHguKPguIHguKPguIHguIrguJrguIfguIHg
uIrigJkgd2l0aCBvcHRpb25zIFtdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgNiw4IGFzIGV4cGVj
dGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgOCwxMCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBh
IG1hdGNoIGF0IDE0LDE2IGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTgsMjAg
YXMgZXhwZWN0ZWQuCitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGlu
ZyBmb3Ig4oCY4LiB4LiK4oCZIGluIOKAmOC4geC4o+C4m+C4ueC5gOC4peC4geC4iuC4geC4iuC4
geC4o+C4geC4o+C4geC4iuC4muC4h+C4geC4iuKAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0
c106CitQQVNTOiBHb3QgYSBtYXRjaCBhdCA2LDggYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBt
YXRjaCBhdCA4LDEwIGFzIGV4cGVjdGVkLgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVk
LgorCitTZWFyY2hpbmcgZm9yIOKAmOC4geC4o+KAmSBpbiBsb25nIHN0cmluZyB3aXRoIG9wdGlv
bnMgW106CitQQVNTOiBHb3QgYSBtYXRjaCBhdCA2MTQ0LDYxNDYgYXMgZXhwZWN0ZWQuCitQQVNT
OiBHb3QgYSBtYXRjaCBhdCA2MTU0LDYxNTYgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBtYXRj
aCBhdCA2MTU2LDYxNTggYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0
ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCY4LiB4Lij4oCZIGluIGxvbmcgc3RyaW5nIHdpdGggb3B0
aW9ucyBbQXRXb3JkU3RhcnRzXToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDYxNTYsNjE1OCBhcyBl
eHBlY3RlZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZv
ciDigJjguIHguKPigJkgaW4gbG9uZyBzdHJpbmcgd2l0aCBvcHRpb25zIFtBdFdvcmRTdGFydHNd
OgorUEFTUzogR290IGEgbWF0Y2ggYXQgNjE0NCw2MTQ2IGFzIGV4cGVjdGVkLgorUEFTUzogR290
IGEgbWF0Y2ggYXQgNjE1Niw2MTU4IGFzIGV4cGVjdGVkLgorUEFTUzogR290IG5vIG1hdGNoIGFz
IGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmOC4geC4iuKAmSBpbiBsb25nIHN0cmluZyB3
aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0c106CitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0
ZWQuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmRTdHJp
bmcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3RleHQtaXRlcmF0b3Iv
ZmluZFN0cmluZy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy90ZXh0
LWl0ZXJhdG9yL2ZpbmRTdHJpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDUgQEAK
KzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8cHJl
IGlkPSJjb25zb2xlIiBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuOyI+PC9wcmU+Cis8c2NyaXB0
PgorICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQorICAgIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZShtZXNzYWdlICsgIlxuIikpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RGaW5kU3RyaW5n
KHRleHQsIHRhcmdldCwgb3B0aW9ucywgZXhwZWN0ZWRSYW5nZXMpCisgICAgeworICAgICAgICBs
b2coIlNlYXJjaGluZyBmb3IgXHUyMDE4IiArIHRhcmdldCArICJcdTIwMTkgIiArICh0ZXh0Lmxl
bmd0aCA8PSA2NCA/ICJpbiBcdTIwMTgiICsgdGV4dCArICJcdTIwMTkgIiA6ICJpbiBsb25nIHN0
cmluZyAiKSArICJ3aXRoIG9wdGlvbnMgWyIgKyBvcHRpb25zLmpvaW4oIiwgIikgKyAiXToiKTsK
KworICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRh
aW5lciIpOworICAgICAgICBjb250YWluZXIuaW5uZXJUZXh0ID0gdGV4dDsKKyAgICAgICAgZG9j
dW1lbnQuYm9keS5vZmZzZXRUb3A7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rp
b24oKTsKKyAgICAgICAgc2VsZWN0aW9uLmVtcHR5KCk7CisKKyAgICAgICAgdmFyIGV4cGVjdGVk
UmFuZ2U7CisgICAgICAgIHdoaWxlIChleHBlY3RlZFJhbmdlID0gZXhwZWN0ZWRSYW5nZXMuc2hp
ZnQoKSkgeworICAgICAgICAgICAgdmFyIGZvdW5kID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZmlu
ZFN0cmluZyh0YXJnZXQsIG9wdGlvbnMpOworICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGFjdHVhbFJhbmdlID0gW3NlbGVjdGlvbi5iYXNlT2Zmc2V0LCBzZWxl
Y3Rpb24uZXh0ZW50T2Zmc2V0XTsKKyAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRSYW5nZVsw
XSAhPT0gYWN0dWFsUmFuZ2VbMF0gfHwgZXhwZWN0ZWRSYW5nZVsxXSAhPT0gYWN0dWFsUmFuZ2Vb
MV0pCisgICAgICAgICAgICAgICAgICAgIGxvZygiRkFJTDogRXhwZWN0ZWQgYSBtYXRjaCBhdCAi
ICsgZXhwZWN0ZWRSYW5nZSArICIgYnV0IGdvdCBhIG1hdGNoIGF0ICIgKyBhY3R1YWxSYW5nZSAr
ICIgaW5zdGVhZC4iKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IGxvZygiUEFTUzogR290IGEgbWF0Y2ggYXQgIiArIGV4cGVjdGVkUmFuZ2UgKyAiIGFzIGV4cGVj
dGVkLiIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChleHBlY3RlZFJhbmdlLmxlbmd0aCkKKyAg
ICAgICAgICAgICAgICBsb2coIkZBSUw6IEV4cGVjdGVkICIgKyBleHBlY3RlZFJhbmdlICsgIiBi
dXQgZ290IG5vIG1hdGNoLiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxv
ZygiUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLiIpOworICAgICAgICB9CisgICAgICAg
IGNvbnRhaW5lci5pbm5lclRleHQgPSAiIjsKKyAgICAgICAgbG9nKCIiKTsKKyAgICB9CisKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICB0ZXN0RmluZFN0cmlu
ZygiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQiLCAibyIsIFtdLCBbWzEsIDJdLCBbMTMsIDE0
XSwgWzE1LCAxNl0sIFtdXSk7CisgICAgdGVzdEZpbmRTdHJpbmcoIkxvcmVtIGlwc3VtIGRvbG9y
IHNpdCBhbWV0IiwgIm8iLCBbIldyYXBBcm91bmQiXSwgW1sxLCAyXSwgWzEzLCAxNF0sIFsxNSwg
MTZdLCBbMSwgMl1dKTsKKyAgICB0ZXN0RmluZFN0cmluZygiTG9yZW0gaXBzdW0gZG9sb3Igc2l0
IGFtZXQiLCAibyIsIFsiQmFja3dhcmRzIl0sIFtbMTUsIDE2XSwgWzEzLCAxNF0sIFsxLCAyXSwg
W11dKTsKKyAgICB0ZXN0RmluZFN0cmluZygiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQiLCAi
byIsIFsiQmFja3dhcmRzIiwgIldyYXBBcm91bmQiXSwgW1sxNSwgMTZdLCBbMTMsIDE0XSwgWzEs
IDJdLCBbMTUsIDE2XV0pOworICAgIHRlc3RGaW5kU3RyaW5nKCJMb3JlbSBpcHN1bSBkb2xvciBz
aXQgYW1ldCIsICJPIiwgW10sIFtbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKCJMb3JlbSBpcHN1
bSBkb2xvciBzaXQgYW1ldCIsICJPIiwgWyJDYXNlSW5zZW5zaXRpdmUiXSwgW1sxLCAyXSwgWzEz
LCAxNF0sIFsxNSwgMTZdXSk7CisKKyAgICB0ZXN0RmluZFN0cmluZygiaW5zdXJtb3VudGFibGUg
bW91bnRhaW4iLCAibW91bnQiLCBbXSwgW1s1LCAxMF0sIFsxNSwgMjBdLCBbXV0pOworICAgIHRl
c3RGaW5kU3RyaW5nKCJpbnN1cm1vdW50YWJsZSBtb3VudGFpbiIsICJtb3VudCIsIFsiQXRXb3Jk
U3RhcnRzIl0sIFtbMTUsIDIwXSwgW11dKTsKKworICAgIHRlc3RGaW5kU3RyaW5nKCJjb2NvYSIs
ICJjbyIsIFtdLCBbWzAsIDJdLCBbMiwgNF0sIFtdXSk7CisgICAgdGVzdEZpbmRTdHJpbmcoImNv
Y29hIiwgImNvIiwgWyJBdFdvcmRTdGFydHMiXSwgW1swLCAyXSwgW11dKTsKKworICAgIHRlc3RG
aW5kU3RyaW5nKCJ3ZWJraXQub3JnIiwgIm9yZyIsIFsiQXRXb3JkU3RhcnRzIl0sIFtbXV0pOwor
ICAgIHRlc3RGaW5kU3RyaW5nKCJ3ZWJraXQub3JnIiwgIi5vcmciLCBbIkF0V29yZFN0YXJ0cyJd
LCBbW11dKTsKKworICAgIHRlc3RGaW5kU3RyaW5nKCJ3ZWJraXQub3JnIiwgInJnIiwgWyJBdFdv
cmRTdGFydHMiLCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiXSwgW1tdXSk7CisgICAg
dGVzdEZpbmRTdHJpbmcoIndlYmtpdC5vcmciLCAib3JnIiwgWyJBdFdvcmRTdGFydHMiLCAiVHJl
YXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiXSwgW1s3LCAxMF0sIFtdXSk7CisgICAgdGVzdEZp
bmRTdHJpbmcoIndlYmtpdC5vcmciLCAiLm9yZyIsIFsiQXRXb3JkU3RhcnRzIiwgIlRyZWF0TWVk
aWFsQ2FwaXRhbEFzV29yZFN0YXJ0Il0sIFtbNiwgMTBdLCBbXV0pOworICAgIHRlc3RGaW5kU3Ry
aW5nKCJ3ZWJraXQub3JnIiwgInQub3JnIiwgWyJBdFdvcmRTdGFydHMiLCAiVHJlYXRNZWRpYWxD
YXBpdGFsQXNXb3JkU3RhcnQiXSwgW1tdXSk7CisKKyAgICB0ZXN0RmluZFN0cmluZygiV2ViS2l0
IiwgIml0IiwgWyJBdFdvcmRTdGFydHMiLCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQi
XSwgW1tdXSk7CisgICAgdGVzdEZpbmRTdHJpbmcoIldlYktpdCIsICJLaXQiLCBbIkF0V29yZFN0
YXJ0cyIsICJUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCJdLCBbWzMsIDZdLCBbXV0pOwor
ICAgIHRlc3RGaW5kU3RyaW5nKCJXZWJLaXQiLCAiYktpdCIsIFsiQXRXb3JkU3RhcnRzIiwgIlRy
ZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0Il0sIFtbXV0pOworCisgICAgdGVzdEZpbmRTdHJp
bmcoIlhNTEhUVFBSZXF1ZXN0IiwgImVxdWVzdCIsIFsiQXRXb3JkU3RhcnRzIiwgIlRyZWF0TWVk
aWFsQ2FwaXRhbEFzV29yZFN0YXJ0Il0sIFtbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKCJYTUxI
VFRQUmVxdWVzdCIsICJSZXF1ZXN0IiwgWyJBdFdvcmRTdGFydHMiLCAiVHJlYXRNZWRpYWxDYXBp
dGFsQXNXb3JkU3RhcnQiXSwgW1s3LCAxNF0sIFtdXSk7CisgICAgdGVzdEZpbmRTdHJpbmcoIlhN
TEhUVFBSZXF1ZXN0IiwgIlBSZXF1ZXN0IiwgWyJBdFdvcmRTdGFydHMiLCAiVHJlYXRNZWRpYWxD
YXBpdGFsQXNXb3JkU3RhcnQiXSwgW1tdXSk7CisKKyAgICB0ZXN0RmluZFN0cmluZygiTFA2NCIs
ICI2NCIsIFsiQXRXb3JkU3RhcnRzIl0sIFtbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKCJMUDY0
IiwgIjQiLCBbIkF0V29yZFN0YXJ0cyIsICJUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCJd
LCBbW11dKTsKKyAgICB0ZXN0RmluZFN0cmluZygiTFA2NCIsICI2NCIsIFsiQXRXb3JkU3RhcnRz
IiwgIlRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0Il0sIFtbMiwgNF0sIFtdXSk7CisgICAg
dGVzdEZpbmRTdHJpbmcoIkxQNjQiLCAiUDY0IiwgWyJBdFdvcmRTdGFydHMiLCAiVHJlYXRNZWRp
YWxDYXBpdGFsQXNXb3JkU3RhcnQiXSwgW1tdXSk7CisKKyAgICBjb25zdCBzZWFyY2hCdWZmZXJT
aXplID0gODE5MjsKKyAgICBjb25zdCBzZWFyY2hCdWZmZXJPdmVybGFwU2l6ZSA9IHNlYXJjaEJ1
ZmZlclNpemUgLyA0OworICAgIGNvbnN0IHNlYXJjaEJ1ZmZlclVub3ZlcmxhcHBlZFNpemUgPSBz
ZWFyY2hCdWZmZXJTaXplIC0gc2VhcmNoQnVmZmVyT3ZlcmxhcFNpemU7CisgICAgdmFyIGJ1ZmZl
clNpemVkU3RyaW5nID0gIlgiOworICAgIHdoaWxlIChidWZmZXJTaXplZFN0cmluZy5sZW5ndGgg
PCBzZWFyY2hCdWZmZXJTaXplKQorICAgICAgICBidWZmZXJTaXplZFN0cmluZyArPSBidWZmZXJT
aXplZFN0cmluZzsKKyAgICBidWZmZXJTaXplZFN0cmluZyA9IGJ1ZmZlclNpemVkU3RyaW5nLnN1
YnN0cmluZygwLCBzZWFyY2hCdWZmZXJTaXplKTsKKworICAgIHRlc3RGaW5kU3RyaW5nKGJ1ZmZl
clNpemVkU3RyaW5nLnN1YnN0cmluZygwLCBzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplIC0g
MikgKyAiIGJhIGEiICsgYnVmZmVyU2l6ZWRTdHJpbmcsICJhIiwgWyJBdFdvcmRTdGFydHMiXSwg
W1tzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplICsgMiwgc2VhcmNoQnVmZmVyVW5vdmVybGFw
cGVkU2l6ZSArIDNdLCBbXV0pOworCisgICAgdmFyIHRoYWlXb3JkcyA9IFsKKyAgICAgICAgIlx1
MGUwMVx1MGUyMyIsCisgICAgICAgICJcdTBlMWJcdTBlMzlcdTBlNDBcdTBlMjUiLAorICAgICAg
ICAiXHUwZTAxXHUwZTBhIiwKKyAgICAgICAgIlx1MGUwMVx1MGUwYVx1MGUwMVx1MGUyMyIsIC8v
IHRoYWlXb3Jkc1syXSArIHRoYWlXb3Jkc1swXQorICAgICAgICAiXHUwZTAxXHUwZTIzXHUwZTAx
XHUwZTBhIiwgLy8gdGhhaVdvcmRzWzBdICsgdGhhaVdvcmRzWzJdCisgICAgICAgICJcdTBlMWFc
dTBlMDdcdTBlMDFcdTBlMGEiLCAvLyBlbmRzIHdpdGggdGhhaVdvcmRzWzJdCisgICAgXTsKKwor
ICAgIHRlc3RGaW5kU3RyaW5nKHRoYWlXb3Jkcy5qb2luKCIiKSwgdGhhaVdvcmRzWzBdLCBbXSwg
W1swLCAyXSwgWzEwLCAxMl0sIFsxMiwgMTRdLCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKHRo
YWlXb3Jkcy5qb2luKCIiKSwgdGhhaVdvcmRzWzBdLCBbIkF0V29yZFN0YXJ0cyJdLCBbWzAsIDJd
LCBbMTIsIDE0XSwgW11dKTsKKworICAgIHRlc3RGaW5kU3RyaW5nKHRoYWlXb3Jkcy5qb2luKCIi
KSwgdGhhaVdvcmRzWzJdLCBbXSwgW1s2LCA4XSwgWzgsIDEwXSwgWzE0LCAxNl0sIFsxOCwgMjBd
LCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKHRoYWlXb3Jkcy5qb2luKCIiKSwgdGhhaVdvcmRz
WzJdLCBbIkF0V29yZFN0YXJ0cyJdLCBbWzYsIDhdLCBbOCwgMTBdLCBbXV0pOworCisgICAgdGVz
dEZpbmRTdHJpbmcoYnVmZmVyU2l6ZWRTdHJpbmcuc3Vic3RyaW5nKDAsIHNlYXJjaEJ1ZmZlclVu
b3ZlcmxhcHBlZFNpemUpICsgdGhhaVdvcmRzLmpvaW4oIiIpICsgYnVmZmVyU2l6ZWRTdHJpbmcs
IHRoYWlXb3Jkc1swXSwgW10sIFtbc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6ZSwgc2VhcmNo
QnVmZmVyVW5vdmVybGFwcGVkU2l6ZSArIDJdLCBbc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6
ZSArIDEwLCBzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplICsgMTJdLCBbc2VhcmNoQnVmZmVy
VW5vdmVybGFwcGVkU2l6ZSArIDEyLCBzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplICsgMTRd
LCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKGJ1ZmZlclNpemVkU3RyaW5nLnN1YnN0cmluZygw
LCBzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplKSArIHRoYWlXb3Jkcy5qb2luKCIiKSArIGJ1
ZmZlclNpemVkU3RyaW5nLCB0aGFpV29yZHNbMF0sIFsiQXRXb3JkU3RhcnRzIl0sIFtbc2VhcmNo
QnVmZmVyVW5vdmVybGFwcGVkU2l6ZSArIDEyLCBzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXpl
ICsgMTRdLCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKGJ1ZmZlclNpemVkU3RyaW5nLnN1YnN0
cmluZygwLCBzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplIC0gMSkgKyAiICIgKyB0aGFpV29y
ZHMuam9pbigiIikgKyBidWZmZXJTaXplZFN0cmluZywgdGhhaVdvcmRzWzBdLCBbIkF0V29yZFN0
YXJ0cyJdLCBbW3NlYXJjaEJ1ZmZlclVub3ZlcmxhcHBlZFNpemUsIHNlYXJjaEJ1ZmZlclVub3Zl
cmxhcHBlZFNpemUgKyAyXSwgW3NlYXJjaEJ1ZmZlclVub3ZlcmxhcHBlZFNpemUgKyAxMiwgc2Vh
cmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6ZSArIDE0XSwgW11dKTsKKyAgICB0ZXN0RmluZFN0cmlu
ZyhidWZmZXJTaXplZFN0cmluZy5zdWJzdHJpbmcoMCwgc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVk
U2l6ZSAtIDMpICsgIiAiICsgdGhhaVdvcmRzWzRdICsgYnVmZmVyU2l6ZWRTdHJpbmcsIHRoYWlX
b3Jkc1syXSwgWyJBdFdvcmRTdGFydHMiXSwgW1tdXSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY29uc29sZSIpLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ2aXNpYmlsaXR5Iik7Cis8
L3NjcmlwdD4K
</data>
<flag name="review"
          id="65766"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75080</attachid>
            <date>2010-11-29 16:22:34 -0800</date>
            <delta_ts>2010-11-29 17:36:18 -0800</delta_ts>
            <desc>https://bugs.webkit.org/attachment.cgi?bugid=50038&amp;action=enter</desc>
            <filename>8650085_r9.diff</filename>
            <type>text/plain</type>
            <size>123543</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyODM0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMTEtMjkgIERhbiBCZXJu
c3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXVEYgc3VwcG9ydCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzg2NTAwODU+
IGFkZGluZyB3b3JkLXByZWZpeCBzZWFyY2ggb3B0aW9ucyB0byB0aGUgdGV4dCBzZWFyY2ggQVBJ
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzgK
KworICAgICAgICAqIHd0Zi91bmljb2RlL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmg6IENvcGllZCBh
ZGRpdGlvbmFsIG1hY3JvcyBmcm9tIGljdS91bmljb2RlL3V0ZjE2LmguCisKIDIwMTAtMTEtMjkg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFu
ZHJlYXMgS2xpbmcuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlTWFj
cm9zRnJvbUlDVS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1Vu
aWNvZGVNYWNyb3NGcm9tSUNVLmgJKHJldmlzaW9uIDcyODM0KQorKysgSmF2YVNjcmlwdENvcmUv
d3RmL3VuaWNvZGUvVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0
ICsxLDUgQEAKIC8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDQsIEludGVybmF0aW9uYWwg
QnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtk
ZS5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55
cG9wLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KQEAgLTQzLDYgKzQ0LDIyIEBACiAjZGVmaW5lIFUxNl9JU19TVVJS
T0dBVEUoYykgVV9JU19TVVJST0dBVEUoYykKICNkZWZpbmUgVTE2X0lTX1NVUlJPR0FURV9MRUFE
KGMpICgoKGMpJjB4NDAwKT09MCkKIAorI2RlZmluZSBVMTZfR0VUKHMsIHN0YXJ0LCBpLCBsZW5n
dGgsIGMpIHsgXAorICAgIChjKT0ocylbaV07IFwKKyAgICBpZihVMTZfSVNfU1VSUk9HQVRFKGMp
KSB7IFwKKyAgICAgICAgdWludDE2X3QgX19jMjsgXAorICAgICAgICBpZihVMTZfSVNfU1VSUk9H
QVRFX0xFQUQoYykpIHsgXAorICAgICAgICAgICAgaWYoKGkpKzE8KGxlbmd0aCkgJiYgVTE2X0lT
X1RSQUlMKF9fYzI9KHMpWyhpKSsxXSkpIHsgXAorICAgICAgICAgICAgICAgIChjKT1VMTZfR0VU
X1NVUFBMRU1FTlRBUlkoKGMpLCBfX2MyKTsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0g
ZWxzZSB7IFwKKyAgICAgICAgICAgIGlmKChpKS0xPj0oc3RhcnQpICYmIFUxNl9JU19MRUFEKF9f
YzI9KHMpWyhpKS0xXSkpIHsgXAorICAgICAgICAgICAgICAgIChjKT1VMTZfR0VUX1NVUFBMRU1F
TlRBUlkoX19jMiwgKGMpKTsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0gXAorICAgIH0g
XAorfQorCiAjZGVmaW5lIFUxNl9QUkVWKHMsIHN0YXJ0LCBpLCBjKSB7IFwKICAgICAoYyk9KHMp
Wy0tKGkpXTsgXAogICAgIGlmKFUxNl9JU19UUkFJTChjKSkgeyBcCkBAIC01NCw2ICs3MSwxMiBA
QAogICAgIH0gXAogfQogCisjZGVmaW5lIFUxNl9CQUNLXzEocywgc3RhcnQsIGkpIHsgXAorICAg
IGlmKFUxNl9JU19UUkFJTCgocylbLS0oaSldKSAmJiAoaSk+KHN0YXJ0KSAmJiBVMTZfSVNfTEVB
RCgocylbKGkpLTFdKSkgeyBcCisgICAgICAgIC0tKGkpOyBcCisgICAgfSBcCit9CisKICNkZWZp
bmUgVTE2X05FWFQocywgaSwgbGVuZ3RoLCBjKSB7IFwKICAgICAoYyk9KHMpWyhpKSsrXTsgXAog
ICAgIGlmKFUxNl9JU19MRUFEKGMpKSB7IFwKQEAgLTY1LDcgKzg4LDEyIEBACiAgICAgfSBcCiB9
CiAKKyNkZWZpbmUgVTE2X0ZXRF8xKHMsIGksIGxlbmd0aCkgeyBcCisgICAgaWYoVTE2X0lTX0xF
QUQoKHMpWyhpKSsrXSkgJiYgKGkpPChsZW5ndGgpICYmIFUxNl9JU19UUkFJTCgocylbaV0pKSB7
IFwKKyAgICAgICAgKysoaSk7IFwKKyAgICB9IFwKK30KKwogI2RlZmluZSBVX01BU0soeCkgKCh1
aW50MzJfdCkxPDwoeCkpCiAKICNlbmRpZgotCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzI4NDcpCisrKyBXZWJDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDEwLTExLTI5ICBE
YW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViQ29yZSBwYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS84
NjUwMDg1PiBhZGRpbmcgd29yZC1wcmVmaXggc2VhcmNoIG9wdGlvbnMgdG8gdGhlIHRleHQgc2Vh
cmNoIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUwMDM4CisKKyAgICAgICAgVGVzdDogZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmRTdHJpbmcu
aHRtbAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIEZpbmRPcHRpb25zLmguCisg
ICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydCB0aGUgbmV3IG1ldGhvZHMgdGhhdCB0YWtl
IEZpbmRPcHRpb25zLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgRmluZE9wdGlvbnMu
aC4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogQWRkZWQgRmluZE9wdGlvbnMuaCBhbmQgVGV4dEJv
dW5kYXJpZXMue2NwcCxofS4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajogQWRkZWQgRmluZE9wdGlvbnMuaC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6IEFkZGVkIEZpbmRPcHRpb25zLmggYW5kIFRleHRCb3VuZGFyaWVzLmNwcC4K
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmZpcnN0VmlzaWJsZVJhbmdlKTogQ2hhbmdlZCB0byB1c2UgRmluZE9wdGlvbnMuCisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6Omxhc3RWaXNpYmxlUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6bmV4dFZpc2libGVSYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmNvdW50TWF0Y2hlc0ZvclRleHQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5o
OiBBZGRlZCBhIHZlcnNpb24gb2YgZmluZFN0cmluZygpIHRoYXQgdGFrZXMgRmluZE9wdGlvbnMu
IENoYW5nZWQKKyAgICAgICAgY291bnRNYXRjaGVzRm9yVGV4dCgpIHRvIHRha2UgRmluZE9wdGlv
bnMuIE1hZGUgbmV4dFZpc2libGVSYW5nZSgpIHByaXZhdGUgYW5kIGNoYW5nZWQgaXQKKyAgICAg
ICAgYW5kIGZpcnN0VmlzaWJsZVJhbmdlKCkgYW5kIGxhc3RWaXNpYmxlUmFuZ2UoKSB0byB0YWtl
IEZpbmRPcHRpb25zLgorICAgICAgICAqIGVkaXRpbmcvRmluZE9wdGlvbnMuaDogQWRkZWQuCisg
ICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICBBdWdtZW50ZWQgU2Vh
cmNoQnVmZmVyIHdpdGggYW4gb3B0aW9uYWwgcHJlZml4LCB3aGljaCBpcyBub3Qgc2VhcmNoZWQs
IGJ1dCBwcm92aWRlcyBjb250ZXh0CisgICAgICAgIGZvciBkZXRlcm1pbmluZyB3b3JkIGJvdW5k
YXJpZXMuCisgICAgICAgIChXZWJDb3JlOjppc1NlcGFyYXRvcik6IEFkZGVkLiBJZGVudGlmaWVz
IGEgY2xhc3Mgb2YgY2hhcmFjdGVycyB1c2VkIHRvIGRldGVybWluZSB3aGVyZQorICAgICAgICDi
gJx3b3Jkc+KAnSBhcmUgZW1iZWRkZWQgaW4gYSB3b3JkLgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoQnVmZmVyOjpTZWFyY2hCdWZmZXIpOiBDaGFuZ2VkIHRvIHRha2UgRmluZE9wdGlvbnMuIEFk
ZGVkIGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIG1fb3B0aW9ucywgbV9wcmVmaXhMZW5ndGgg
YW5kIG1fbmVlZHNNb3JlQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6
YXBwZW5kKTogQWRqdXN0IG1fcHJlZml4TGVuZ3RoIGFzIHBhcnQgb2YgdGhlIHByZWZpeCBnZXRz
IHB1c2hlZCBvdXQKKyAgICAgICAgb2YgdGhlIGJ1ZmZlci4KKyAgICAgICAgKFdlYkNvcmU6OlNl
YXJjaEJ1ZmZlcjo6bmVlZHNNb3JlQ29udGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2VhcmNoQnVmZmVyOjpwcmVwZW5kQ29udGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2VhcmNoQnVmZmVyOjppc1dvcmRTdGFydE1hdGNoKTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTZWFyY2hCdWZmZXI6OnNlYXJjaCk6IENoYW5nZWQgdG8gYWNjb3VudCBmb3IgdGhlIGNvbnRl
eHQgcHJlZml4LiBXaGVuIHNlYXJjaGluZworICAgICAgICBvbmx5IGZvciB3b3JkIHByZWZpeCBt
YXRjaGVzLCBtYWludGFpbnMgZW5vdWdoIGNvbnRleHQgYmVmb3JlIGEgdGVudGF0aXZlIG1hdGNo
IHdoZW4gbW92aW5nCisgICAgICAgIGl0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4g
UmVqZWN0IG1hdGNoZXMgdGhhdCBhcmUgbm90IGF0IHdvcmQgc3RhcnRzIGlmIHJlcXVlc3RlZC4K
KyAgICAgICAgQWRqdXN0IG1fcHJlZml4TGVuZ3RoIHdoZW4gcHVzaGluZyBjaGFyYWN0ZXJzIG91
dCBvZiB0aGUgYnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6ZmluZFBsYWluVGV4dCk6IENoYW5n
ZWQgdG8gd29yayB3aXRoIEZpbmRPcHRpb25zLiBGZWVkIHRoZSBzZWFyY2ggYnVmZmVyIHdpdGgg
Y29udGV4dAorICAgICAgICBpZiBhbmQgYXMgbG9uZyBhcyBpdCByZXF1aXJlcyBtb3JlIG9mIGl0
LgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6IEFkZGVkIGEgdmVyc2lvbiBvZiBm
aW5kUGxhaW5UZXh0KCkgdGhhdCB0YWtlcyBGaW5kT3B0aW9ucy4KKyAgICAgICAgKiBlZGl0aW5n
L3Zpc2libGVfdW5pdHMuY3BwOiBNb3ZlZCB7ZW5kLHN0YXJ0fU9me0ZpcnN0LExhc3R9V29yZEJv
dW5kYXJ5IHRvIFRleHRCb3VuZGFyaWVzLmNwcC4KKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZmluZFN0cmluZyk6IENoYW5nZWQgdG8gd29yayB3aXRo
IEZpbmRPcHRpb25zLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6bWFya0FsbE1hdGNoZXNGb3JU
ZXh0KTogRGl0dG8uCisgICAgICAgICogcGFnZS9QYWdlLmg6IEFkZGVkIEZpbmRPcHRpb25zLWJh
c2VkIGZpbmRTdHJpbmcoKSBhbmQgbWFya0FsbE1hdGNoZXNGb3JUZXh0KCkuCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmRP
ZkZpcnN0V29yZEJvdW5kYXJ5Q29udGV4dCk6IE1vdmVkIGhlcmUgZnJvbSB2aXNpYmxlX3VuaXRz
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dCk6
IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuaDoKKwogMjAx
MC0xMS0yOSAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGF2aWQgSHlhdHQuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDcyODM0KQorKysgV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTMzMiw2ICsxMzMyLDcgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2VkaXRpbmcvRWRpdG9yRGVsZXRlQWN0aW9uLmgg
XAogCVdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBcCiAJV2ViQ29yZS9lZGl0aW5nL0VkaXRvcklu
c2VydEFjdGlvbi5oIFwKKwlXZWJDb3JlL2VkaXRpbmcvRmluZE9wdGlvbnMuaCBcCiAJV2ViQ29y
ZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAgXAogCVdlYkNvcmUvZWRpdGluZy9Gb3Jt
YXRCbG9ja0NvbW1hbmQuaCBcCiAJV2ViQ29yZS9lZGl0aW5nL2d0ay9TZWxlY3Rpb25Db250cm9s
bGVyR3RrLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDcyODM0KQorKysgV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNTk5LDcgKzU5OSw3IEBAIF9fWk43V2ViQ29y
ZTROb2RlMTByZW5kZXJSZWN0RVBiCiBfX1pON1dlYkNvcmU0Tm9kZTE3c3RvcElnbm9yaW5nTGVh
a3NFdgogX19aTjdXZWJDb3JlNE5vZGUxOHN0YXJ0SWdub3JpbmdMZWFrc0V2CiBfX1pON1dlYkNv
cmU0Tm9kZTE5c2V0TmVlZHNTdHlsZVJlY2FsY0VOU18xNVN0eWxlQ2hhbmdlVHlwZUUKLV9fWk43
V2ViQ29yZTRQYWdlMTBmaW5kU3RyaW5nRVJLTjNXVEY2U3RyaW5nRU5TMV8xOVRleHRDYXNlU2Vu
c2l0aXZpdHlFTlNfMTNGaW5kRGlyZWN0aW9uRWIKK19fWk43V2ViQ29yZTRQYWdlMTBmaW5kU3Ry
aW5nRVJLTjNXVEY2U3RyaW5nRWoKIF9fWk43V2ViQ29yZTRQYWdlMTFQYWdlQ2xpZW50c0MxRXYK
IF9fWk43V2ViQ29yZTRQYWdlMTFQYWdlQ2xpZW50c0QxRXYKIF9fWk43V2ViQ29yZTRQYWdlMTJz
ZXRHcm91cE5hbWVFUktOM1dURjZTdHJpbmdFCkBAIC02MTQsNyArNjE0LDcgQEAgX19aTjdXZWJD
b3JlNFBhZ2UxN3dpbGxNb3ZlT2Zmc2NyZWVuRXYKIF9fWk43V2ViQ29yZTRQYWdlMThyZW1vdmVT
Y2hlZHVsZVBhaXJFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTJTY2hlZHVsZVBhaXJFRUUKIF9fWk43
V2ViQ29yZTRQYWdlMTl2aXNpdGVkU3RhdGVDaGFuZ2VkRVBOU185UGFnZUdyb3VwRXkKIF9fWk43
V2ViQ29yZTRQYWdlMjB1bm1hcmtBbGxUZXh0TWF0Y2hlc0V2Ci1fX1pON1dlYkNvcmU0UGFnZTIx
bWFya0FsbE1hdGNoZXNGb3JUZXh0RVJLTjNXVEY2U3RyaW5nRU5TMV8xOVRleHRDYXNlU2Vuc2l0
aXZpdHlFYmoKK19fWk43V2ViQ29yZTRQYWdlMjFtYXJrQWxsTWF0Y2hlc0ZvclRleHRFUktOM1dU
RjZTdHJpbmdFamJqCiBfX1pON1dlYkNvcmU0UGFnZTIyYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZEVQ
TlNfOVBhZ2VHcm91cEUKIF9fWk43V2ViQ29yZTRQYWdlMjNjbGVhclVuZG9SZWRvT3BlcmF0aW9u
c0V2CiBfX1pON1dlYkNvcmU0UGFnZTI3c2V0SmF2YVNjcmlwdFVSTHNBcmVBbGxvd2VkRWIKQEAg
LTY2MSw3ICs2NjEsNyBAQCBfX1pON1dlYkNvcmU2Q3Vyc29yOGZyb21UeXBlRU5TMF80VHlwZUUK
IF9fWk43V2ViQ29yZTZDdXJzb3JEMUV2CiBfX1pON1dlYkNvcmU2Q3Vyc29yYVNFUktTMF8KIF9f
Wk43V2ViQ29yZTZFZGl0b3IxMGFwcGx5U3R5bGVFUE5TXzE5Q1NTU3R5bGVEZWNsYXJhdGlvbkVO
U18xMEVkaXRBY3Rpb25FCi1fX1pON1dlYkNvcmU2RWRpdG9yMTBmaW5kU3RyaW5nRVJLTjNXVEY2
U3RyaW5nRWJiYmIKK19fWk43V2ViQ29yZTZFZGl0b3IxMGZpbmRTdHJpbmdFUktOM1dURjZTdHJp
bmdFagogX19aTjdXZWJDb3JlNkVkaXRvcjEwaW5zZXJ0VGV4dEVSS04zV1RGNlN0cmluZ0VQTlNf
NUV2ZW50RQogX19aTjdXZWJDb3JlNkVkaXRvcjEzY2FuREhUTUxQYXN0ZUV2CiBfX1pON1dlYkNv
cmU2RWRpdG9yMTNwZXJmb3JtRGVsZXRlRXYKQEAgLTY3Myw3ICs2NzMsNyBAQCBfX1pON1dlYkNv
cmU2RWRpdG9yMTZwYXN0ZUFzUGxhaW5UZXh0RXYKIF9fWk43V2ViQ29yZTZFZGl0b3IxN2luc2Vy
dE9yZGVyZWRMaXN0RXYKIF9fWk43V2ViQ29yZTZFZGl0b3IxOGNvbmZpcm1Db21wb3NpdGlvbkVS
S04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3IxOGNvbmZpcm1Db21wb3NpdGlvbkV2
Ci1fX1pON1dlYkNvcmU2RWRpdG9yMTljb3VudE1hdGNoZXNGb3JUZXh0RVJLTjNXVEY2U3RyaW5n
RWJqYgorX19aTjdXZWJDb3JlNkVkaXRvcjE5Y291bnRNYXRjaGVzRm9yVGV4dEVSS04zV1RGNlN0
cmluZ0VqamIKIF9fWk43V2ViQ29yZTZFZGl0b3IxOWRlbGV0ZVdpdGhEaXJlY3Rpb25FTlNfMTlT
ZWxlY3Rpb25Db250cm9sbGVyMTBFRGlyZWN0aW9uRU5TXzE1VGV4dEdyYW51bGFyaXR5RWJiCiBf
X1pON1dlYkNvcmU2RWRpdG9yMTlpbnNlcnRVbm9yZGVyZWRMaXN0RXYKIF9fWk43V2ViQ29yZTZF
ZGl0b3IyMWFwcGx5U3R5bGVUb1NlbGVjdGlvbkVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRU5T
XzEwRWRpdEFjdGlvbkUKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MjgzNCkKKysrIFdlYkNvcmUvV2ViQ29y
ZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xMzk5LDYgKzEzOTksNyBAQAogICAgICAgICAgICAg
J2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdG9y
RGVsZXRlQWN0aW9uLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdG9ySW5zZXJ0QWN0aW9u
LmgnLAorICAgICAgICAgICAgJ2VkaXRpbmcvRmluZE9wdGlvbnMuaCcsCiAgICAgICAgICAgICAn
ZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL0Zv
cm1hdEJsb2NrQ29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0hUTUxJbnRlcmNoYW5n
ZS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA3MjgzNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTEyMzEsNiArMTIzMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRm
b3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcCBcCiAgICAgcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwIFwKKyAgICBwbGF0Zm9ybS90ZXh0
L1RleHRCb3VuZGFyaWVzLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwIFwK
ICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAgXAogICAgIHBsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwIFwKQEAgLTE3MTIsNiArMTcxMyw3IEBAIEhFQURF
UlMgKz0gXAogICAgIGVkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmggXAogICAgIGVkaXRpbmcvRWRp
dGluZ0JvdW5kYXJ5LmggXAogICAgIGVkaXRpbmcvRWRpdG9yLmggXAorICAgIGVkaXRpbmcvRmlu
ZE9wdGlvbnMuaCBcCiAgICAgZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaCBcCiAgICAgZWRp
dGluZy9odG1sZWRpdGluZy5oIFwKICAgICBlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5oIFwKQEAg
LTIxNzcsNiArMjE3OSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL3RleHQvcXQvVGV4
dENvZGVjUXQuaCBcCiAgICAgcGxhdGZvcm0vdGV4dC9SZWd1bGFyRXhwcmVzc2lvbi5oIFwKICAg
ICBwbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oIFwKKyAgICBwbGF0Zm9ybS90ZXh0L1Rl
eHRCb3VuZGFyaWVzLmggXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjLmggXAogICAgIHBs
YXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmggXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENv
ZGVjVXNlckRlZmluZWQuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHJldmlzaW9uIDcyODM0KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY1ODMsNiArNDY1ODMsMTAgQEAKIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xGaW5kT3B0
aW9ucy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5cZWRpdGluZ1xGb3JtYXRCbG9ja0NvbW1hbmQuY3BwIg0KIAkJCQk+DQogCQkJCTxGaWxl
Q29uZmlndXJhdGlvbg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiA3MjgzNCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NzEsNiArODcxLDggQEAKIAkJMzcxRjUz
RTkwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFGNTNFNzBEMjcwNEY5MDBFQ0Uw
RDUgLyogQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCAqLzsgfTsKIAkJMzcxRjUzRUEwRDI3MDRGOTAw
RUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY1M0U4MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NV
bmljb2RlUmFuZ2VWYWx1ZS5jcHAgKi87IH07CiAJCTM3MjAyMTk5MTA2MjEzQzYwMEYyNUM0QiAv
KiBGb250U21vb3RoaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzcyMDIxOTgxMDYyMTNDNjAwRjI1QzRCIC8qIEZvbnRTbW9vdGhpbmdNb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMzcy
QzAwQzQxMjk2MTFGMTAwNUM5NTc1IC8qIFRleHRCb3VuZGFyaWVzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MkMwMEMzMTI5NjExRjEwMDVDOTU3
NSAvKiBUZXh0Qm91bmRhcmllcy5jcHAgKi87IH07CisJCTM3MkMwMEQ5MTI5NjE5RjgwMDVDOTU3
NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzcyQzAwRDgxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzc0NDU3MEYwREIw
NUZBNTAwQUUwOTkyIC8qIFNWR0dseXBoTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzNzQ0NTcwRTBEQjA1RkE1MDBBRTA5OTIgLyogU1ZHR2x5cGhN
YXAuaCAqLzsgfTsKIAkJMzc1Q0QyMzIxMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTEx
OUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCAqLzsgfTsKIAkJMzc1Q0QyM0IxMTlENDRF
QTAwQTJBODU5IC8qIEh5cGhlbmF0aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1Q0QyMzkxMTlENDRFQTAwQTJBODU5IC8qIEh5cGhlbmF0
aW9uTWFjLm1tICovOyB9OwpAQCAtNjk3OCw2ICs2OTgwLDggQEAKIAkJMzcxRjUzRTcwRDI3MDRG
OTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENTU1VuaWNvZGVSYW5nZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM3MUY1M0U4MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NVbmljb2RlUmFu
Z2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MjAyMTk4MTA2MjEz
QzYwMEYyNUM0QiAvKiBGb250U21vb3RoaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGb250U21vb3RoaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzNzJDMDBDMzEyOTYxMUYxMDA1Qzk1NzUgLyogVGV4dEJvdW5kYXJpZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dEJvdW5kYXJpZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzNzJDMDBEODEyOTYxOUY4MDA1Qzk1NzUgLyogRmlu
ZE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmluZE9wdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc0NDU3MEUwREIwNUZBNTAwQUUwOTky
IC8qIFNWR0dseXBoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ds
eXBoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUNEMjMxMTE5RDQzQzgw
MEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIeXBoZW5hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzVDRDIzOTEx
OUQ0NEVBMDBBMkE4NTkgLyogSHlwaGVuYXRpb25NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBIeXBoZW5hdGlvbk1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE0NjEwLDYgKzE0NjE0LDcgQEAKIAkJCQk5M0EzOEI0QTBEMEU1ODA4MDA2
ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5jcHAgKi8sCiAJCQkJNEJBRTk1QjAwQjJGQTlDRTAwQUVE
OEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oICovLAogCQkJCTkzRkRBRkM5MEIxMTMwNzQwMEUy
NzQ2RiAvKiBFZGl0b3JJbnNlcnRBY3Rpb24uaCAqLywKKwkJCQkzNzJDMDBEODEyOTYxOUY4MDA1
Qzk1NzUgLyogRmluZE9wdGlvbnMuaCAqLywKIAkJCQlEMDVDRUQyNzBBNDBCQjJDMDBDNUFGMzgg
LyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCAqLywKIAkJCQlEMDVDRUQyODBBNDBCQjJDMDBDNUFG
MzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmggKi8sCiAJCQkJOTMzMDlEOTgwOTlFNjQ5MTAwNTZF
NTgxIC8qIGh0bWxlZGl0aW5nLmNwcCAqLywKQEAgLTE2ODQ5LDYgKzE2ODU0LDcgQEAKIAkJCQlC
MkMzRDlGRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggKi8sCiAJCQkJQjJD
M0RBMDAwRDAwNkMxRDAwRUY2RjI2IC8qIFN0cmluZy5jcHAgKi8sCiAJCQkJOTdDMDc4NEYxMTY1
RDVCRTAwM0EzMkVGIC8qIFN1ZmZpeFRyZWUuaCAqLywKKwkJCQkzNzJDMDBDMzEyOTYxMUYxMDA1
Qzk1NzUgLyogVGV4dEJvdW5kYXJpZXMuY3BwICovLAogCQkJCUIyQzNEQTA0MEQwMDZDMUQwMEVG
NkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oICovLAogCQkJCUIyQzNEQTA2MEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0QnJlYWtJdGVyYXRvci5oICovLAogCQkJCUIyQzNEQTA3MEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgKi8sCkBAIC0xOTY5MCw2ICsxOTY5Niw3IEBA
CiAJCQkJQkM1RUI2OUYwRTgxREFFQjAwQjI1OTY1IC8qIEZpbGxMYXllci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjA0RjBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJs
ZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk4Nzg1NjYxMjJDQTA2NDAwM0FBQkRBIC8q
IEZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVFQ0RFNjEwNTAzQzI0MDAwOTlGQUIgLyog
RmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTIzNzg3LDYgKzIzNzk0LDcgQEAKIAkJ
CQlGNTVCM0RENTEyNTFGMTJEMDAzRUYyNjkgLyogVGVsZXBob25lSW5wdXRUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5ODc3MEVFMTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhTaGFkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNjU1MEI2QTUwOTlERjAyNzAwOTBENzgxIC8qIFRleHQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMzcyQzAwQzQxMjk2MTFGMTAwNUM5NTc1IC8qIFRleHRCb3Vu
ZGFyaWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzk3MEQwMEE1REYwMDMwMDc0RCAv
KiBUZXh0Qm91bmRhcmllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTM3MEQwMDZDMUQw
MEVGNkYyNiAvKiBUZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkFGRkM5ODBEMDBBNURGMDAzMDA3NEQgLyogVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1h
Yy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDcyODM0KQor
KysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MzQsMzkg
KzI4MzQsMzkgQEAgYm9vbCBFZGl0b3I6Omluc2lkZVZpc2libGVBcmVhKFJhbmdlKiByYQogICAg
IHJldHVybiByZWN0SW5GcmFtZUNvb3Jkcy5jb250YWlucyhyZXN1bHRSZWN0KTsKIH0KIAotUGFz
c1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpmaXJzdFZpc2libGVSYW5nZShjb25zdCBTdHJpbmcmIHRh
cmdldCwgYm9vbCBjYXNlRmxhZykKK1Bhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Zmlyc3RWaXNp
YmxlUmFuZ2UoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMpCiB7CiAg
ICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9j
dW1lbnQoKSkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0
KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIHRydWUsIGNhc2VGbGFnKTsKKyAgICBSZWZQdHI8
UmFuZ2U+IHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFy
Z2V0LCBvcHRpb25zICYgfkJhY2t3YXJkcyk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAK
ICAgICB3aGlsZSAoIWluc2lkZVZpc2libGVBcmVhKHJlc3VsdFJhbmdlLmdldCgpKSkgewogICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRlcihyZXN1bHRSYW5nZS0+ZW5kQ29udGFpbmVy
KCksIGVjKTsKICAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNl
YXJjaFJhbmdlLT5lbmRDb250YWluZXIoKSkKICAgICAgICAgICAgIHJldHVybiBSYW5nZTo6Y3Jl
YXRlKG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFp
blRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgdHJ1ZSwgY2FzZUZsYWcpOworICAgICAg
ICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwg
b3B0aW9ucyAmIH5CYWNrd2FyZHMpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gcmVzdWx0UmFu
Z2U7CiB9CiAKLVBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6bGFzdFZpc2libGVSYW5nZShjb25z
dCBTdHJpbmcmIHRhcmdldCwgYm9vbCBjYXNlRmxhZykKK1Bhc3NSZWZQdHI8UmFuZ2U+IEVkaXRv
cjo6bGFzdFZpc2libGVSYW5nZShjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0
aW9ucykKIHsKICAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50cyht
X2ZyYW1lLT5kb2N1bWVudCgpKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IGZp
bmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZmFsc2UsIGNhc2VGbGFnKTsK
KyAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5n
ZS5nZXQoKSwgdGFyZ2V0LCBvcHRpb25zIHwgQmFja3dhcmRzKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKIAogICAgIHdoaWxlICghaW5zaWRlVmlzaWJsZUFyZWEocmVzdWx0UmFuZ2UuZ2V0
KCkpKSB7CiAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmRCZWZvcmUocmVzdWx0UmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCksIGVjKTsKICAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5zdGFydENvbnRh
aW5lcigpID09IHNlYXJjaFJhbmdlLT5lbmRDb250YWluZXIoKSkKICAgICAgICAgICAgIHJldHVy
biBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgICAgICByZXN1bHRSYW5n
ZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZmFsc2UsIGNhc2VG
bGFnKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdl
dCgpLCB0YXJnZXQsIG9wdGlvbnMgfCBCYWNrd2FyZHMpOwogICAgIH0KICAgICAKICAgICByZXR1
cm4gcmVzdWx0UmFuZ2U7CiB9CiAKLVBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6bmV4dFZpc2li
bGVSYW5nZShSYW5nZSogY3VycmVudFJhbmdlLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBm
b3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnKQorUGFzc1JlZlB0cjxSYW5nZT4g
RWRpdG9yOjpuZXh0VmlzaWJsZVJhbmdlKFJhbmdlKiBjdXJyZW50UmFuZ2UsIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewogICAgIGlmIChtX2ZyYW1lLT5leGNs
dWRlRnJvbVRleHRTZWFyY2goKSkKICAgICAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUobV9mcmFt
ZS0+ZG9jdW1lbnQoKSk7CkBAIC0yODc0LDggKzI4NzQsOCBAQCBQYXNzUmVmUHRyPFJhbmdlPiBF
ZGl0b3I6Om5leHRWaXNpYmxlUmFuCiAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IGN1
cnJlbnRSYW5nZTsKICAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50
cyhtX2ZyYW1lLT5kb2N1bWVudCgpKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
Ci0gICAgZm9yICggOyAhaW5zaWRlVmlzaWJsZUFyZWEocmVzdWx0UmFuZ2UuZ2V0KCkpOyByZXN1
bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2Fy
ZCwgY2FzZUZsYWcpKSB7CisgICAgYm9vbCBmb3J3YXJkID0gIShvcHRpb25zICYgQmFja3dhcmRz
KTsKKyAgICBmb3IgKCA7ICFpbnNpZGVWaXNpYmxlQXJlYShyZXN1bHRSYW5nZS5nZXQoKSk7IHJl
c3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBvcHRp
b25zKSkgewogICAgICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChlYykpIHsKICAgICAg
ICAgICAgIGlmICghcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmlzSW5TaGFkb3dUcmVl
KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTA3LDEzICsyOTA3LDEzIEBAIFBhc3NS
ZWZQdHI8UmFuZ2U+IEVkaXRvcjo6bmV4dFZpc2libGVSYW4KICAgICBpZiAoaW5zaWRlVmlzaWJs
ZUFyZWEocmVzdWx0UmFuZ2UuZ2V0KCkpKQogICAgICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7CiAg
ICAgCi0gICAgaWYgKCF3cmFwRmxhZykKKyAgICBpZiAoIShvcHRpb25zICYgV3JhcEFyb3VuZCkp
CiAgICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCkpOwogCi0g
ICAgaWYgKGZvcndhcmQpCi0gICAgICAgIHJldHVybiBmaXJzdFZpc2libGVSYW5nZSh0YXJnZXQs
IGNhc2VGbGFnKTsKKyAgICBpZiAob3B0aW9ucyAmIEJhY2t3YXJkcykKKyAgICAgICAgcmV0dXJu
IGxhc3RWaXNpYmxlUmFuZ2UodGFyZ2V0LCBvcHRpb25zKTsKIAotICAgIHJldHVybiBsYXN0Vmlz
aWJsZVJhbmdlKHRhcmdldCwgY2FzZUZsYWcpOworICAgIHJldHVybiBmaXJzdFZpc2libGVSYW5n
ZSh0YXJnZXQsIG9wdGlvbnMpOwogfQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0
ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgYm9vbCBjbG9z
ZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKQpAQCAtMzE4NSw2ICszMTg1LDEyIEBAIFJl
bmRlclN0eWxlKiBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3QKIC8vIFNlYXJjaGVzIGZyb20g
dGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQgaWYgbm90aGluZyBpcyBzZWxlY3RlZC4KIGJv
b2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGZvcndhcmQs
IGJvb2wgY2FzZUZsYWcsIGJvb2wgd3JhcEZsYWcsIGJvb2wgc3RhcnRJblNlbGVjdGlvbikKIHsK
KyAgICBGaW5kT3B0aW9ucyBvcHRpb25zID0gKGZvcndhcmQgPyAwIDogQmFja3dhcmRzKSB8IChj
YXNlRmxhZyA/IDAgOiBDYXNlSW5zZW5zaXRpdmUpIHwgKHdyYXBGbGFnID8gV3JhcEFyb3VuZCA6
IDApIHwgKHN0YXJ0SW5TZWxlY3Rpb24gPyBTdGFydEluU2VsZWN0aW9uIDogMCk7CisgICAgcmV0
dXJuIGZpbmRTdHJpbmcodGFyZ2V0LCBvcHRpb25zKTsKK30KKworYm9vbCBFZGl0b3I6OmZpbmRT
dHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMpCit7CiAgICAg
aWYgKHRhcmdldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzE5Niw2
ICszMjAyLDggQEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YQogICAg
IFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKG1fZnJhbWUtPmRvY3Vt
ZW50KCkpKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKTsKIAorICAgIGJvb2wgZm9yd2FyZCA9ICEob3B0aW9ucyAmIEJh
Y2t3YXJkcyk7CisgICAgYm9vbCBzdGFydEluU2VsZWN0aW9uID0gb3B0aW9ucyAmIFN0YXJ0SW5T
ZWxlY3Rpb247CiAgICAgaWYgKGZvcndhcmQpCiAgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdl
LmdldCgpLCBzdGFydEluU2VsZWN0aW9uID8gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpIDogc2Vs
ZWN0aW9uLnZpc2libGVFbmQoKSk7CiAgICAgZWxzZQpAQCAtMzIxMCw3ICszMjE4LDcgQEAgYm9v
bCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YQogICAgICAgICAgICAgc2VhcmNo
UmFuZ2UtPnNldFN0YXJ0KHNoYWRvd1RyZWVSb290LmdldCgpLCAwLCBlYyk7CiAgICAgfQogCi0g
ICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdl
dCgpLCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnKSk7CisgICAgUmVmUHRyPFJhbmdlPiByZXN1
bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIG9wdGlvbnMp
KTsKICAgICAvLyBJZiB3ZSBzdGFydGVkIGluIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBmb3VuZCBy
YW5nZSBleGFjdGx5IG1hdGNoZXMgdGhlIGV4aXN0aW5nIHNlbGVjdGlvbiwgZmluZCBhZ2Fpbi4K
ICAgICAvLyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRoZSBmb3VuZCByYW5nZSB0byByZW1vdmUg
Y29sbGFwc2VkIHdoaXRlc3BhY2UuCiAgICAgLy8gQ29tcGFyZSByYW5nZXMgaW5zdGVhZCBvZiBz
ZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdheSB0aGF0IHRoZSBjdXJyZW50IHNlbGVj
dGlvbiB3YXMgbWFkZS4KQEAgLTMyMjksNyArMzIzNyw3IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdGEKICAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3Rh
cnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDAsIGVjKTsKICAgICAgICAgfQogCi0gICAgICAgIHJl
c3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3
YXJkLCBjYXNlRmxhZyk7CisgICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFy
Y2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICB9CiAKICAgICBFeGNlcHRpb25D
b2RlIGV4Y2VwdGlvbiA9IDA7CkBAIC0zMjQyLDIwICszMjUwLDIwIEBAIGJvb2wgRWRpdG9yOjpm
aW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGEKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2Vh
cmNoUmFuZ2UtPnNldEVuZEJlZm9yZShzaGFkb3dUcmVlUm9vdC0+c2hhZG93UGFyZW50Tm9kZSgp
LCBleGNlcHRpb24pOwogCi0gICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFy
Y2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZyk7CisgICAgICAgIHJlc3Vs
dFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBvcHRpb25z
KTsKICAgICB9CiAKICAgICBpZiAoIWluc2lkZVZpc2libGVBcmVhKHJlc3VsdFJhbmdlLmdldCgp
KSkgewotICAgICAgICByZXN1bHRSYW5nZSA9IG5leHRWaXNpYmxlUmFuZ2UocmVzdWx0UmFuZ2Uu
Z2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcsIHdyYXBGbGFnKTsKKyAgICAgICAgcmVz
dWx0UmFuZ2UgPSBuZXh0VmlzaWJsZVJhbmdlKHJlc3VsdFJhbmdlLmdldCgpLCB0YXJnZXQsIG9w
dGlvbnMpOwogICAgICAgICBpZiAoIXJlc3VsdFJhbmdlKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAogICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nIGFuZCB3ZSdy
ZSB3cmFwcGluZywgc2VhcmNoIGFnYWluIGluIHRoZSBlbnRpcmUgZG9jdW1lbnQgKHRoaXMgd2ls
bAogICAgIC8vIHJlZHVuZGFudGx5IHJlLXNlYXJjaCB0aGUgYXJlYSBhbHJlYWR5IHNlYXJjaGVk
IGluIHNvbWUgY2FzZXMpLgotICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlv
bikgJiYgd3JhcEZsYWcpIHsKKyAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChleGNlcHRp
b24pICYmIG9wdGlvbnMgJiBXcmFwQXJvdW5kKSB7CiAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFu
Z2VPZkNvbnRlbnRzKG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgICAgICByZXN1bHRSYW5nZSA9
IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZs
YWcpOworICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0
KCksIHRhcmdldCwgb3B0aW9ucyk7CiAgICAgICAgIC8vIFdlIHVzZWQgdG8gcmV0dXJuIGZhbHNl
IGhlcmUgaWYgd2UgZW5kZWQgdXAgd2l0aCB0aGUgc2FtZSByYW5nZSB0aGF0IHdlIHN0YXJ0ZWQg
d2l0aAogICAgICAgICAvLyAoZS5nLiwgdGhlIHNlbGVjdGlvbiB3YXMgYWxyZWFkeSB0aGUgb25s
eSBpbnN0YW5jZSBvZiB0aGlzIHRleHQpLiBCdXQgd2UgZGVjaWRlZCB0aGF0CiAgICAgICAgIC8v
IHRoaXMgc2hvdWxkIGJlIGEgc3VjY2VzcyBjYXNlIGluc3RlYWQsIHNvIHdlJ2xsIGp1c3QgZmFs
bCB0aHJvdWdoIGluIHRoYXQgY2FzZS4KQEAgLTMyNjksNyArMzI3Nyw3IEBAIGJvb2wgRWRpdG9y
OjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdW5z
aWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBi
b29sIGNhc2VGbGFnLCB1bnNpZ25lZCBsaW1pdCwgYm9vbCBtYXJrTWF0Y2hlcykKK3Vuc2lnbmVk
IEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9w
dGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMpCiB7CiAgICAg
aWYgKHRhcmdldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzI3OSw3ICszMjg3
LDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbgogICAgIEV4Y2Vw
dGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKICAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKICAg
ICBkbyB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UoZmluZFBsYWluVGV4dChz
ZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCB0cnVlLCBjYXNlRmxhZykpOworICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRh
cmdldCwgb3B0aW9ucyAmIH5CYWNrd2FyZHMpKTsKICAgICAgICAgaWYgKHJlc3VsdFJhbmdlLT5j
b2xsYXBzZWQoZXhjZXB0aW9uKSkgewogICAgICAgICAgICAgaWYgKCFyZXN1bHRSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS0+aXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAgICAgICAgICBicmVhazsK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDcyODM0KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ0Jl
aGF2aW9yLmgiCiAjaW5jbHVkZSAiRWRpdG9yRGVsZXRlQWN0aW9uLmgiCiAjaW5jbHVkZSAiRWRp
dG9ySW5zZXJ0QWN0aW9uLmgiCisjaW5jbHVkZSAiRmluZE9wdGlvbnMuaCIKICNpbmNsdWRlICJT
ZWxlY3Rpb25Db250cm9sbGVyLmgiCiAKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKF9f
T0JKQ19fKQpAQCAtMzA3LDcgKzMwOCw2IEBAIHB1YmxpYzoKICAgICAvLyBXZSBzaG91bGQgbWFr
ZSB0aGVzZSBmdW5jdGlvbnMgcHJpdmF0ZSB3aGVuIHRoZWlyIGNhbGxlcnMgaW4gRnJhbWUgYXJl
IG1vdmVkIG92ZXIgaGVyZSB0byBFZGl0b3IKICAgICBib29sIGluc2lkZVZpc2libGVBcmVhKGNv
bnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgYm9vbCBpbnNpZGVWaXNpYmxlQXJlYShSYW5nZSop
IGNvbnN0OwotICAgIFBhc3NSZWZQdHI8UmFuZ2U+IG5leHRWaXNpYmxlUmFuZ2UoUmFuZ2UqLCBj
b25zdCBTdHJpbmcmLCBib29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJvb2wgd3JhcEZsYWcp
OwogCiAgICAgdm9pZCBhZGRUb0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBwcmVwZW5kKTsKIApAQCAt
MzI4LDYgKzMyOCw4IEBAIHB1YmxpYzoKICAgICBOb2RlKiBmaW5kRXZlbnRUYXJnZXRGcm9tKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3Q7CiAKICAgICBTdHJpbmcgc2Vs
ZWN0ZWRUZXh0KCkgY29uc3Q7CisgICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIEZp
bmRPcHRpb25zKTsKKyAgICAvLyBGSVhNRTogU3dpdGNoIGNhbGxlcnMgb3ZlciB0byB0aGUgRmlu
ZE9wdGlvbnMgdmVyc2lvbiBhbmQgcmV0aXJlIHRoaXMgb25lLgogICAgIGJvb2wgZmluZFN0cmlu
Zyhjb25zdCBTdHJpbmcmLCBib29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJvb2wgd3JhcEZs
YWcsIGJvb2wgc3RhcnRJblNlbGVjdGlvbik7CiAKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBtYXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVzZWQgYXMgZW1hY3MgdXNlcyBpdC4KQEAg
LTM0NCw3ICszNDYsNyBAQCBwdWJsaWM6CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxl
Y3Rpb25TdGFydChOb2RlKiYgbm9kZVRvUmVtb3ZlKSBjb25zdDsKIAotICAgIHVuc2lnbmVkIGNv
dW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBjYXNlRmxhZywgdW5zaWduZWQg
bGltaXQsIGJvb2wgbWFya01hdGNoZXMpOworICAgIHVuc2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRl
eHQoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0LCBib29sIG1hcmtN
YXRjaGVzKTsKICAgICBib29sIG1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSBjb25z
dDsKICAgICB2b2lkIHNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCk7CiAK
QEAgLTM5OCw4ICs0MDAsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9u
KGNvbnN0IFN0cmluZyYsIGJvb2wgcHJlc2VydmVTZWxlY3Rpb24pOwogICAgIHZvaWQgc2V0SWdu
b3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoYm9vbCBpZ25vcmUpOwogCi0gICAgUGFzc1Jl
ZlB0cjxSYW5nZT4gZmlyc3RWaXNpYmxlUmFuZ2UoY29uc3QgU3RyaW5nJiwgYm9vbCBjYXNlRmxh
Zyk7Ci0gICAgUGFzc1JlZlB0cjxSYW5nZT4gbGFzdFZpc2libGVSYW5nZShjb25zdCBTdHJpbmcm
LCBib29sIGNhc2VGbGFnKTsKKyAgICBQYXNzUmVmUHRyPFJhbmdlPiBmaXJzdFZpc2libGVSYW5n
ZShjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CisgICAgUGFzc1JlZlB0cjxSYW5nZT4gbGFz
dFZpc2libGVSYW5nZShjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CisgICAgUGFzc1JlZlB0
cjxSYW5nZT4gbmV4dFZpc2libGVSYW5nZShSYW5nZSosIGNvbnN0IFN0cmluZyYsIEZpbmRPcHRp
b25zKTsKIAogICAgIHZvaWQgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5
cGluZ1N0eWxlKTsKICAgICB2b2lkIGNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRp
dG9yPiopOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0ZpbmRPcHRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0ZpbmRPcHRpb25zLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2VkaXRpbmcvRmluZE9wdGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRmluZE9wdGlvbnNfaAorI2RlZmluZSBGaW5kT3B0aW9uc19oCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBGaW5kT3B0aW9uRmxhZyB7CisgICAgQ2FzZUlu
c2Vuc2l0aXZlID0gMSA8PCAwLAorICAgIEF0V29yZFN0YXJ0cyA9IDEgPDwgMSwKKyAgICAvLyBX
aGVuIGNvbWJpbmVkIHdpdGggQXRXb3JkU3RhcnRzLCBhY2NlcHRzIGEgbWF0Y2ggaW4gdGhlIG1p
ZGRsZSBvZiBhIHdvcmQgaWYgdGhlIG1hdGNoIGJlZ2lucyB3aXRoCisgICAgLy8gYW4gdXBwZXJj
YXNlIGxldHRlciBmb2xsb3dlZCBieSBhIGxvd2VyY2FzZSBvciBub24tbGV0dGVyLiBBY2NlcHRz
IHNldmVyYWwgb3RoZXIgaW50cmEtd29yZCBtYXRjaGVzLgorICAgIFRyZWF0TWVkaWFsQ2FwaXRh
bEFzV29yZFN0YXJ0ID0gMSA8PCAyLAorICAgIEJhY2t3YXJkcyA9IDEgPDwgMywKKyAgICBXcmFw
QXJvdW5kID0gMSA8PCA0LAorICAgIFN0YXJ0SW5TZWxlY3Rpb24gPSAxIDw8IDUKK307CisKK3R5
cGVkZWYgdW5zaWduZWQgRmluZE9wdGlvbnM7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEZpbmRPcHRpb25zX2gKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCShy
ZXZpc2lvbiA3MjgzNCkKKysrIFdlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRGcmFn
bWVudC5oIgorI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCisjaW5jbHVkZSAiVGV4dEJyZWFr
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJ2aXNp
YmxlX3VuaXRzLmgiCiAKQEAgLTU2LDE0ICs1OCwxOCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogLy8gQnVmZmVyIHRoYXQga25vd3MgaG93IHRvIGNvbXBhcmUgd2l0aCBhIHNlYXJjaCB0
YXJnZXQuCiAvLyBLZWVwcyBlbm91Z2ggb2YgdGhlIHByZXZpb3VzIHRleHQgdG8gYmUgYWJsZSB0
byBzZWFyY2ggaW4gdGhlIGZ1dHVyZSwgYnV0IG5vIG1vcmUuCiAvLyBOb24tYnJlYWtpbmcgc3Bh
Y2VzIGFyZSBhbHdheXMgZXF1YWwgdG8gbm9ybWFsIHNwYWNlcy4KLS8vIENhc2UgZm9sZGluZyBp
cyBhbHNvIGRvbmUgaWYgPGlzQ2FzZVNlbnNpdGl2ZT4gaXMgZmFsc2UuCisvLyBDYXNlIGZvbGRp
bmcgaXMgYWxzbyBkb25lIGlmIHRoZSBDYXNlSW5zZW5zaXRpdmUgb3B0aW9uIGlzIHNwZWNpZmll
ZC4KKy8vIE1hdGNoZXMgYXJlIGZ1cnRoZXIgZmlsdGVyZWQgaWYgdGhlIEF0V29yZFN0YXJ0cyBv
cHRpb24gaXMgc3BlY2lmaWVkLCBhbHRob3VnaCBzb21lCisvLyBtYXRjaGVzIGluc2lkZSBhIHdv
cmQgYXJlIHBlcm1pdHRlZCBpZiBUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCBpcyBzcGVj
aWZpZWQgYXMgd2VsbC4KIGNsYXNzIFNlYXJjaEJ1ZmZlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
CiBwdWJsaWM6Ci0gICAgU2VhcmNoQnVmZmVyKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGlz
Q2FzZVNlbnNpdGl2ZSk7CisgICAgU2VhcmNoQnVmZmVyKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBG
aW5kT3B0aW9ucyk7CiAgICAgflNlYXJjaEJ1ZmZlcigpOwogCiAgICAgLy8gUmV0dXJucyBudW1i
ZXIgb2YgY2hhcmFjdGVycyBhcHBlbmRlZDsgZ3VhcmFudGVlZCB0byBiZSBpbiB0aGUgcmFuZ2Ug
WzEsIGxlbmd0aF0uCiAgICAgc2l6ZV90IGFwcGVuZChjb25zdCBVQ2hhciosIHNpemVfdCBsZW5n
dGgpOworICAgIGJvb2wgbmVlZHNNb3JlQ29udGV4dCgpIGNvbnN0OworICAgIHZvaWQgcHJlcGVu
ZENvbnRleHQoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoKTsKICAgICB2b2lkIHJlYWNoZWRC
cmVhaygpOwogCiAgICAgLy8gUmVzdWx0IGlzIHRoZSBzaXplIGluIGNoYXJhY3RlcnMgb2Ygd2hh
dCB3YXMgZm91bmQuCkBAIC03NSwxMSArODEsMTYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IGJvb2wgaXNCYWRNYXRjaChjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgpIGNvbnN0OworICAg
IGJvb2wgaXNXb3JkU3RhcnRNYXRjaChzaXplX3Qgc3RhcnQsIHNpemVfdCBsZW5ndGgpIGNvbnN0
OwogCiAgICAgU3RyaW5nIG1fdGFyZ2V0OworICAgIEZpbmRPcHRpb25zIG1fb3B0aW9uczsKKwog
ICAgIFZlY3RvcjxVQ2hhcj4gbV9idWZmZXI7CiAgICAgc2l6ZV90IG1fb3ZlcmxhcDsKKyAgICBz
aXplX3QgbV9wcmVmaXhMZW5ndGg7CiAgICAgYm9vbCBtX2F0QnJlYWs7CisgICAgYm9vbCBtX25l
ZWRzTW9yZUNvbnRleHQ7CiAKICAgICBib29sIG1fdGFyZ2V0UmVxdWlyZXNLYW5hV29ya2Fyb3Vu
ZDsKICAgICBWZWN0b3I8VUNoYXI+IG1fbm9ybWFsaXplZFRhcmdldDsKQEAgLTkyLDcgKzEwMyw3
IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIG1f
dGFyZ2V0OwotICAgIGJvb2wgbV9pc0Nhc2VTZW5zaXRpdmU7CisgICAgRmluZE9wdGlvbnMgbV9v
cHRpb25zOwogCiAgICAgVmVjdG9yPFVDaGFyPiBtX2J1ZmZlcjsKICAgICBWZWN0b3I8Ym9vbD4g
bV9pc0NoYXJhY3RlclN0YXJ0QnVmZmVyOwpAQCAtMTgyOCw5ICsxODM5LDQ2IEBAIHN0YXRpYyB2
b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVUMKICAgICBBU1NFUlQoc3RhdHVzID09IFVf
U1RSSU5HX05PVF9URVJNSU5BVEVEX1dBUk5JTkcpOwogfQogCi1pbmxpbmUgU2VhcmNoQnVmZmVy
OjpTZWFyY2hCdWZmZXIoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGJvb2wgaXNDYXNlU2Vuc2l0aXZl
KQorc3RhdGljIGJvb2wgaXNOb25MYXRpbjFTZXBhcmF0b3IoVUNoYXIzMiBjaGFyYWN0ZXIpCit7
CisgICAgQVNTRVJUX0FSRyhjaGFyYWN0ZXIsIGNoYXJhY3RlciA+PSAyNTYpOworCisgICAgcmV0
dXJuIFVfR0VUX0dDX01BU0soY2hhcmFjdGVyKSAmIChVX0dDX1NfTUFTSyB8IFVfR0NfUF9NQVNL
IHwgVV9HQ19aX01BU0sgfCBVX0dDX0NGX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNTZXBhcmF0b3IoVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
bGF0aW4xU2VwYXJhdG9yVGFibGVbMjU2XSA9IHsKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgLy8gc3BhY2UgISAiICMgJCAlICYgJyAoICkg
KiArICwgLSAuIC8KKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwg
MSwgMSwgMSwgMSwgLy8gICAgICAgICAgICAgICAgICAgICAgICAgOiA7IDwgPSA+ID8KKyAgICAg
ICAgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgLy8gICBA
CisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEs
IC8vICAgICAgICAgICAgICAgICAgICAgICAgIFsgXCBdIF4gXworICAgICAgICAxLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAvLyAgIGAKKyAgICAgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICB7IHwgfSB+CisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEs
IDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsCisgICAgICAgIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEs
IDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKyAgICB9OworCisgICAgaWYgKGNoYXJhY3RlciA8IDI1
NikKKyAgICAgICAgcmV0dXJuIGxhdGluMVNlcGFyYXRvclRhYmxlW2NoYXJhY3Rlcl07CisKKyAg
ICByZXR1cm4gaXNOb25MYXRpbjFTZXBhcmF0b3IoY2hhcmFjdGVyKTsKK30KKworaW5saW5lIFNl
YXJjaEJ1ZmZlcjo6U2VhcmNoQnVmZmVyKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9u
cyBvcHRpb25zKQogICAgIDogbV90YXJnZXQodGFyZ2V0KQorICAgICwgbV9vcHRpb25zKG9wdGlv
bnMpCisgICAgLCBtX3ByZWZpeExlbmd0aCgwKQogICAgICwgbV9hdEJyZWFrKHRydWUpCisgICAg
LCBtX25lZWRzTW9yZUNvbnRleHQob3B0aW9ucyAmIEF0V29yZFN0YXJ0cykKICAgICAsIG1fdGFy
Z2V0UmVxdWlyZXNLYW5hV29ya2Fyb3VuZChjb250YWluc0thbmFMZXR0ZXJzKG1fdGFyZ2V0KSkK
IHsKICAgICBBU1NFUlQoIW1fdGFyZ2V0LmlzRW1wdHkoKSk7CkBAIC0xODUyLDcgKzE5MDAsNyBA
QCBpbmxpbmUgU2VhcmNoQnVmZmVyOjpTZWFyY2hCdWZmZXIoY29uc3QgCiAgICAgVVN0cmluZ1Nl
YXJjaCogc2VhcmNoZXIgPSBXZWJDb3JlOjpzZWFyY2hlcigpOwogICAgIFVDb2xsYXRvciogY29s
bGF0b3IgPSB1c2VhcmNoX2dldENvbGxhdG9yKHNlYXJjaGVyKTsKIAotICAgIFVDb2xsYXRpb25T
dHJlbmd0aCBzdHJlbmd0aCA9IGlzQ2FzZVNlbnNpdGl2ZSA/IFVDT0xfVEVSVElBUlkgOiBVQ09M
X1BSSU1BUlk7CisgICAgVUNvbGxhdGlvblN0cmVuZ3RoIHN0cmVuZ3RoID0gbV9vcHRpb25zICYg
Q2FzZUluc2Vuc2l0aXZlID8gVUNPTF9QUklNQVJZIDogVUNPTF9URVJUSUFSWTsKICAgICBpZiAo
dWNvbF9nZXRTdHJlbmd0aChjb2xsYXRvcikgIT0gc3RyZW5ndGgpIHsKICAgICAgICAgdWNvbF9z
ZXRTdHJlbmd0aChjb2xsYXRvciwgc3RyZW5ndGgpOwogICAgICAgICB1c2VhcmNoX3Jlc2V0KHNl
YXJjaGVyKTsKQEAgLTE4NzgsOSArMTkyNiwxMSBAQCBpbmxpbmUgc2l6ZV90IFNlYXJjaEJ1ZmZl
cjo6YXBwZW5kKGNvbnN0CiAKICAgICBpZiAobV9hdEJyZWFrKSB7CiAgICAgICAgIG1fYnVmZmVy
LnNocmluaygwKTsKKyAgICAgICAgbV9wcmVmaXhMZW5ndGggPSAwOwogICAgICAgICBtX2F0QnJl
YWsgPSBmYWxzZTsKICAgICB9IGVsc2UgaWYgKG1fYnVmZmVyLnNpemUoKSA9PSBtX2J1ZmZlci5j
YXBhY2l0eSgpKSB7CiAgICAgICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLmRh
dGEoKSArIG1fYnVmZmVyLnNpemUoKSAtIG1fb3ZlcmxhcCwgbV9vdmVybGFwICogc2l6ZW9mKFVD
aGFyKSk7CisgICAgICAgIG1fcHJlZml4TGVuZ3RoIC09IG1pbihtX3ByZWZpeExlbmd0aCwgbV9i
dWZmZXIuc2l6ZSgpIC0gbV9vdmVybGFwKTsKICAgICAgICAgbV9idWZmZXIuc2hyaW5rKG1fb3Zl
cmxhcCk7CiAgICAgfQogCkBAIC0xODkyLDYgKzE5NDIsMzUgQEAgaW5saW5lIHNpemVfdCBTZWFy
Y2hCdWZmZXI6OmFwcGVuZChjb25zdAogICAgIHJldHVybiB1c2FibGVMZW5ndGg7CiB9CiAKK2lu
bGluZSBib29sIFNlYXJjaEJ1ZmZlcjo6bmVlZHNNb3JlQ29udGV4dCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbmVlZHNNb3JlQ29udGV4dDsKK30KKworaW5saW5lIHZvaWQgU2VhcmNoQnVmZmVy
OjpwcmVwZW5kQ29udGV4dChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkK
K3sKKyAgICBBU1NFUlQobV9uZWVkc01vcmVDb250ZXh0KTsKKyAgICBBU1NFUlQobV9wcmVmaXhM
ZW5ndGggPT0gbV9idWZmZXIuc2l6ZSgpKTsKKworICAgIGlmICghbGVuZ3RoKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2F0QnJlYWsgPSBmYWxzZTsKKworICAgIHNpemVfdCB3b3JkQm91bmRh
cnlDb250ZXh0U3RhcnQgPSBsZW5ndGg7CisgICAgaWYgKHdvcmRCb3VuZGFyeUNvbnRleHRTdGFy
dCkgeworICAgICAgICBVMTZfQkFDS18xKGNoYXJhY3RlcnMsIDAsIHdvcmRCb3VuZGFyeUNvbnRl
eHRTdGFydCk7CisgICAgICAgIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCA9IHN0YXJ0T2ZMYXN0
V29yZEJvdW5kYXJ5Q29udGV4dChjaGFyYWN0ZXJzLCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQp
OworICAgIH0KKworICAgIHNpemVfdCB1c2FibGVMZW5ndGggPSBtaW4obV9idWZmZXIuY2FwYWNp
dHkoKSAtIG1fcHJlZml4TGVuZ3RoLCBsZW5ndGggLSB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQp
OworICAgIG1fYnVmZmVyLnByZXBlbmQoY2hhcmFjdGVycyArIGxlbmd0aCAtIHVzYWJsZUxlbmd0
aCwgdXNhYmxlTGVuZ3RoKTsKKyAgICBtX3ByZWZpeExlbmd0aCArPSB1c2FibGVMZW5ndGg7CisK
KyAgICBpZiAod29yZEJvdW5kYXJ5Q29udGV4dFN0YXJ0IHx8IG1fcHJlZml4TGVuZ3RoID09IG1f
YnVmZmVyLmNhcGFjaXR5KCkpCisgICAgICAgIG1fbmVlZHNNb3JlQ29udGV4dCA9IGZhbHNlOwor
fQorCiBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmF0QnJlYWsoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2F0QnJlYWs7CkBAIC0xOTYyLDYgKzIwNDEsNTUgQEAgaW5saW5lIGJvb2wgU2VhcmNo
QnVmZmVyOjppc0JhZE1hdGNoKGNvbgogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgU2VhcmNoQnVm
ZmVyOjppc1dvcmRTdGFydE1hdGNoKHNpemVfdCBzdGFydCwgc2l6ZV90IGxlbmd0aCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9vcHRpb25zICYgQXRXb3JkU3RhcnRzKTsKKworICAgIGlmICghc3Rh
cnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKG1fb3B0aW9ucyAmIFRyZWF0TWVk
aWFsQ2FwaXRhbEFzV29yZFN0YXJ0KSB7CisgICAgICAgIGludCBzaXplID0gbV9idWZmZXIuc2l6
ZSgpOworICAgICAgICBpbnQgb2Zmc2V0ID0gc3RhcnQ7CisgICAgICAgIFVDaGFyMzIgZmlyc3RD
aGFyYWN0ZXI7CisgICAgICAgIFUxNl9HRVQobV9idWZmZXIuZGF0YSgpLCAwLCBvZmZzZXQsIHNp
emUsIGZpcnN0Q2hhcmFjdGVyKTsKKyAgICAgICAgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlcjsK
KyAgICAgICAgVTE2X1BSRVYobV9idWZmZXIuZGF0YSgpLCAwLCBvZmZzZXQsIHByZXZpb3VzQ2hh
cmFjdGVyKTsKKworICAgICAgICBpZiAoaXNTZXBhcmF0b3IoZmlyc3RDaGFyYWN0ZXIpKSB7Cisg
ICAgICAgICAgICAvLyBUaGUgc3RhcnQgb2YgYSBzZXBhcmF0b3IgcnVuIGlzIGEgd29yZCBzdGFy
dCAoIi5vcmciIGluICJ3ZWJraXQub3JnIikuCisgICAgICAgICAgICBpZiAoIWlzU2VwYXJhdG9y
KHByZXZpb3VzQ2hhcmFjdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfSBlbHNlIGlmIChpc0FTQ0lJVXBwZXIoZmlyc3RDaGFyYWN0ZXIpKSB7CisgICAgICAgICAg
ICAvLyBUaGUgc3RhcnQgb2YgYW4gdXBwZXJjYXNlIHJ1biBpcyBhIHdvcmQgc3RhcnQgKCJLaXQi
IGluICJXZWJLaXQiKS4KKyAgICAgICAgICAgIGlmICghaXNBU0NJSVVwcGVyKHByZXZpb3VzQ2hh
cmFjdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFRo
ZSBsYXN0IGNoYXJhY3RlciBvZiBhbiB1cHBlcmNhc2UgcnVuIGZvbGxvd2VkIGJ5IGEgbm9uLXNl
cGFyYXRvciwgbm9uLWRpZ2l0CisgICAgICAgICAgICAvLyBpcyBhIHdvcmQgc3RhcnQgKCJSZXF1
ZXN0IiBpbiAiWE1MSFRUUFJlcXVlc3QiKS4KKyAgICAgICAgICAgIG9mZnNldCA9IHN0YXJ0Owor
ICAgICAgICAgICAgVTE2X0ZXRF8xKG1fYnVmZmVyLmRhdGEoKSwgb2Zmc2V0LCBzaXplKTsKKyAg
ICAgICAgICAgIFVDaGFyMzIgbmV4dENoYXJhY3RlciA9IDA7CisgICAgICAgICAgICBpZiAob2Zm
c2V0IDwgc2l6ZSkKKyAgICAgICAgICAgICAgICBVMTZfR0VUKG1fYnVmZmVyLmRhdGEoKSwgMCwg
b2Zmc2V0LCBzaXplLCBuZXh0Q2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGlmICghaXNBU0NJSVVw
cGVyKG5leHRDaGFyYWN0ZXIpICYmICFpc0FTQ0lJRGlnaXQobmV4dENoYXJhY3RlcikgJiYgIWlz
U2VwYXJhdG9yKG5leHRDaGFyYWN0ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9IGVsc2UgaWYgKGlzQVNDSUlEaWdpdChmaXJzdENoYXJhY3RlcikpIHsKKyAgICAg
ICAgICAgIC8vIFRoZSBzdGFydCBvZiBhIGRpZ2l0IHJ1biBpcyBhIHdvcmQgc3RhcnQgKCIyIiBp
biAiV2ViS2l0MiIpLgorICAgICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQocHJldmlvdXNDaGFy
YWN0ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGVsc2UgaWYg
KGlzU2VwYXJhdG9yKHByZXZpb3VzQ2hhcmFjdGVyKSB8fCBpc0FTQ0lJRGlnaXQocHJldmlvdXND
aGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAvLyBUaGUgc3RhcnQgb2YgYSBub24tc2VwYXJhdG9y
LCBub24tdXBwZXJjYXNlLCBub24tZGlnaXQgcnVuIGlzIGEgd29yZCBzdGFydCwKKyAgICAgICAg
ICAgIC8vIGV4Y2VwdCBhZnRlciBhbiB1cHBlcmNhc2UuICgib3JnIiBpbiAid2Via2l0Lm9yZyIs
IGJ1dCBub3QgIm9yZSIgaW4gIldlYkNvcmUiKS4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc2l6ZV90IHdvcmRCcmVha1NlYXJjaFN0YXJ0ID0gc3Rh
cnQgKyBsZW5ndGg7CisgICAgd2hpbGUgKHdvcmRCcmVha1NlYXJjaFN0YXJ0ID4gc3RhcnQpCisg
ICAgICAgIHdvcmRCcmVha1NlYXJjaFN0YXJ0ID0gZmluZE5leHRXb3JkRnJvbUluZGV4KG1fYnVm
ZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpLCB3b3JkQnJlYWtTZWFyY2hTdGFydCwgZmFsc2Ug
LyogYmFja3dhcmRzICovKTsKKyAgICByZXR1cm4gd29yZEJyZWFrU2VhcmNoU3RhcnQgPT0gc3Rh
cnQ7Cit9CisKIGlubGluZSBzaXplX3QgU2VhcmNoQnVmZmVyOjpzZWFyY2goc2l6ZV90JiBzdGFy
dCkKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKQEAgLTE5NzksNyArMjEw
NywxMCBAQCBpbmxpbmUgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6c2VhcmNoKHNpemVfCiAgICAgdXNl
YXJjaF9zZXRUZXh0KHNlYXJjaGVyLCBtX2J1ZmZlci5kYXRhKCksIHNpemUsICZzdGF0dXMpOwog
ICAgIEFTU0VSVChzdGF0dXMgPT0gVV9aRVJPX0VSUk9SKTsKIAotICAgIGludCBtYXRjaFN0YXJ0
ID0gdXNlYXJjaF9maXJzdChzZWFyY2hlciwgJnN0YXR1cyk7CisgICAgdXNlYXJjaF9zZXRPZmZz
ZXQoc2VhcmNoZXIsIG1fcHJlZml4TGVuZ3RoLCAmc3RhdHVzKTsKKyAgICBBU1NFUlQoc3RhdHVz
ID09IFVfWkVST19FUlJPUik7CisKKyAgICBpbnQgbWF0Y2hTdGFydCA9IHVzZWFyY2hfbmV4dChz
ZWFyY2hlciwgJnN0YXR1cyk7CiAgICAgQVNTRVJUKHN0YXR1cyA9PSBVX1pFUk9fRVJST1IpOwog
CiBuZXh0TWF0Y2g6CkBAIC0xOTkyLDggKzIxMjMsMTggQEAgbmV4dE1hdGNoOgogICAgIC8vIFRo
ZSBzYW1lIG1hdGNoIG1heSBhcHBlYXIgbGF0ZXIsIG1hdGNoaW5nIG1vcmUgY2hhcmFjdGVycywK
ICAgICAvLyBwb3NzaWJseSBpbmNsdWRpbmcgYSBjb21iaW5pbmcgY2hhcmFjdGVyIHRoYXQncyBu
b3QgeWV0IGluIHRoZSBidWZmZXIuCiAgICAgaWYgKCFtX2F0QnJlYWsgJiYgc3RhdGljX2Nhc3Q8
c2l6ZV90PihtYXRjaFN0YXJ0KSA+PSBzaXplIC0gbV9vdmVybGFwKSB7Ci0gICAgICAgIG1lbWNw
eShtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLmRhdGEoKSArIHNpemUgLSBtX292ZXJsYXAsIG1f
b3ZlcmxhcCAqIHNpemVvZihVQ2hhcikpOwotICAgICAgICBtX2J1ZmZlci5zaHJpbmsobV9vdmVy
bGFwKTsKKyAgICAgICAgc2l6ZV90IG92ZXJsYXAgPSBtX292ZXJsYXA7CisgICAgICAgIGlmICht
X29wdGlvbnMgJiBBdFdvcmRTdGFydHMpIHsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRo
ZXJlIGlzIHN1ZmZpY2llbnQgY29udGV4dCBiZWZvcmUgbWF0Y2hTdGFydCB0aGUgbmV4dCB0aW1l
IGFyb3VuZCBmb3IKKyAgICAgICAgICAgIC8vIGRldGVybWluaW5nIGlmIGl0IGlzIGF0IGEgd29y
ZCBib3VuZGFyeS4KKyAgICAgICAgICAgIGludCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBt
YXRjaFN0YXJ0OworICAgICAgICAgICAgVTE2X0JBQ0tfMShtX2J1ZmZlci5kYXRhKCksIDAsIHdv
cmRCb3VuZGFyeUNvbnRleHRTdGFydCk7CisgICAgICAgICAgICB3b3JkQm91bmRhcnlDb250ZXh0
U3RhcnQgPSBzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQobV9idWZmZXIuZGF0YSgpLCB3
b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpOworICAgICAgICAgICAgb3ZlcmxhcCA9IG1pbihzaXpl
IC0gMSwgbWF4KG92ZXJsYXAsIHNpemUgLSB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpKTsKKyAg
ICAgICAgfQorICAgICAgICBtZW1jcHkobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5kYXRhKCkg
KyBzaXplIC0gb3ZlcmxhcCwgb3ZlcmxhcCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBtX3By
ZWZpeExlbmd0aCAtPSBtaW4obV9wcmVmaXhMZW5ndGgsIHNpemUgLSBvdmVybGFwKTsKKyAgICAg
ICAgbV9idWZmZXIuc2hyaW5rKG92ZXJsYXApOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
QEAgLTIwMDEsNyArMjE0Miw3IEBAIG5leHRNYXRjaDoKICAgICBBU1NFUlQobWF0Y2hTdGFydCAr
IG1hdGNoZWRMZW5ndGggPD0gc2l6ZSk7CiAKICAgICAvLyBJZiB0aGlzIG1hdGNoIGlzICJiYWQi
LCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG1hdGNoLgotICAgIGlmIChpc0JhZE1hdGNoKG1fYnVmZmVy
LmRhdGEoKSArIG1hdGNoU3RhcnQsIG1hdGNoZWRMZW5ndGgpKSB7CisgICAgaWYgKGlzQmFkTWF0
Y2gobV9idWZmZXIuZGF0YSgpICsgbWF0Y2hTdGFydCwgbWF0Y2hlZExlbmd0aCkgfHwgbV9vcHRp
b25zICYgQXRXb3JkU3RhcnRzICYmICFpc1dvcmRTdGFydE1hdGNoKG1hdGNoU3RhcnQsIG1hdGNo
ZWRMZW5ndGgpKSB7CiAgICAgICAgIG1hdGNoU3RhcnQgPSB1c2VhcmNoX25leHQoc2VhcmNoZXIs
ICZzdGF0dXMpOwogICAgICAgICBBU1NFUlQoc3RhdHVzID09IFVfWkVST19FUlJPUik7CiAgICAg
ICAgIGdvdG8gbmV4dE1hdGNoOwpAQCAtMjAwOSw2ICsyMTUwLDcgQEAgbmV4dE1hdGNoOgogCiAg
ICAgc2l6ZV90IG5ld1NpemUgPSBzaXplIC0gKG1hdGNoU3RhcnQgKyAxKTsKICAgICBtZW1tb3Zl
KG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuZGF0YSgpICsgbWF0Y2hTdGFydCArIDEsIG5ld1Np
emUgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtX3ByZWZpeExlbmd0aCAtPSBtaW48c2l6ZV90Piht
X3ByZWZpeExlbmd0aCwgbWF0Y2hTdGFydCArIDEpOwogICAgIG1fYnVmZmVyLnNocmluayhuZXdT
aXplKTsKIAogICAgIHN0YXJ0ID0gc2l6ZSAtIG1hdGNoU3RhcnQ7CkBAIC0yMDE3LDkgKzIxNTks
OSBAQCBuZXh0TWF0Y2g6CiAKICNlbHNlIC8vICFJQ1VfVU5JQ09ERQogCi1pbmxpbmUgU2VhcmNo
QnVmZmVyOjpTZWFyY2hCdWZmZXIoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGJvb2wgaXNDYXNlU2Vu
c2l0aXZlKQotICAgIDogbV90YXJnZXQoaXNDYXNlU2Vuc2l0aXZlID8gdGFyZ2V0IDogdGFyZ2V0
LmZvbGRDYXNlKCkpCi0gICAgLCBtX2lzQ2FzZVNlbnNpdGl2ZShpc0Nhc2VTZW5zaXRpdmUpCitp
bmxpbmUgU2VhcmNoQnVmZmVyOjpTZWFyY2hCdWZmZXIoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMpCisgICAgOiBtX3RhcmdldChvcHRpb25zICYgQ2FzZUluc2Vuc2l0
aXZlID8gdGFyZ2V0LmZvbGRDYXNlKCkgOiB0YXJnZXQpCisgICAgLCBtX29wdGlvbnMob3B0aW9u
cykKICAgICAsIG1fYnVmZmVyKG1fdGFyZ2V0Lmxlbmd0aCgpKQogICAgICwgbV9pc0NoYXJhY3Rl
clN0YXJ0QnVmZmVyKG1fdGFyZ2V0Lmxlbmd0aCgpKQogICAgICwgbV9pc0J1ZmZlckZ1bGwoZmFs
c2UpCkBAIC0yMDU4LDcgKzIyMDAsNyBAQCBpbmxpbmUgdm9pZCBTZWFyY2hCdWZmZXI6OmFwcGVu
ZChVQ2hhciBjCiBpbmxpbmUgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGgpOwotICAg
IGlmIChtX2lzQ2FzZVNlbnNpdGl2ZSkgeworICAgIGlmICghKG1fb3B0aW9ucyAmIENhc2VJbnNl
bnNpdGl2ZSkpIHsKICAgICAgICAgYXBwZW5kKGNoYXJhY3RlcnNbMF0sIHRydWUpOwogICAgICAg
ICByZXR1cm4gMTsKICAgICB9CkBAIC0yMDc4LDYgKzIyMjAsMTYgQEAgaW5saW5lIHNpemVfdCBT
ZWFyY2hCdWZmZXI6OmFwcGVuZChjb25zdAogICAgIHJldHVybiAxOwogfQogCitpbmxpbmUgYm9v
bCBTZWFyY2hCdWZmZXI6Om5lZWRzTW9yZUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBwcmVwZW5kQ29udGV4dChjb25zdCBVQ2hhciosIHNpemVfdCkKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogaW5saW5lIHNpemVfdCBTZWFyY2hCdWZm
ZXI6OnNlYXJjaChzaXplX3QmIHN0YXJ0KQogewogICAgIGlmICghbV9pc0J1ZmZlckZ1bGwpCkBA
IC0yMzMyLDEyICsyNDg0LDI0IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBjb2xsYXBzZWRU
b0JvdW4KICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIHNpemVfdCBm
aW5kUGxhaW5UZXh0KENoYXJhY3Rlckl0ZXJhdG9yJiBpdCwgY29uc3QgU3RyaW5nJiB0YXJnZXQs
IGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBzaXplX3QmIG1hdGNoU3RhcnQpCitz
dGF0aWMgc2l6ZV90IGZpbmRQbGFpblRleHQoQ2hhcmFjdGVySXRlcmF0b3ImIGl0LCBjb25zdCBT
dHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgc2l6ZV90JiBtYXRjaFN0YXJ0KQog
ewogICAgIG1hdGNoU3RhcnQgPSAwOwogICAgIHNpemVfdCBtYXRjaExlbmd0aCA9IDA7CiAKLSAg
ICBTZWFyY2hCdWZmZXIgYnVmZmVyKHRhcmdldCwgY2FzZVNlbnNpdGl2ZSk7CisgICAgU2VhcmNo
QnVmZmVyIGJ1ZmZlcih0YXJnZXQsIG9wdGlvbnMpOworCisgICAgaWYgKGJ1ZmZlci5uZWVkc01v
cmVDb250ZXh0KCkpIHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlID0gaXQucmFu
Z2UoKTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBiZWZvcmVTdGFydFJhbmdlID0gc3RhcnRSYW5n
ZS0+b3duZXJEb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOworICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICAgICAgYmVmb3JlU3RhcnRSYW5nZS0+c2V0RW5kKHN0YXJ0UmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCksIHN0YXJ0UmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIGVjKTsKKyAgICAgICAg
Zm9yIChTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGJl
Zm9yZVN0YXJ0UmFuZ2UuZ2V0KCkpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dh
cmRzSXRlcmF0b3IuYWR2YW5jZSgpKSB7CisgICAgICAgICAgICBidWZmZXIucHJlcGVuZENvbnRl
eHQoYmFja3dhcmRzSXRlcmF0b3IuY2hhcmFjdGVycygpLCBiYWNrd2FyZHNJdGVyYXRvci5sZW5n
dGgoKSk7CisgICAgICAgICAgICBpZiAoIWJ1ZmZlci5uZWVkc01vcmVDb250ZXh0KCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAKICAgICB3aGlsZSAoIWl0LmF0
RW5kKCkpIHsKICAgICAgICAgaXQuYWR2YW5jZShidWZmZXIuYXBwZW5kKGl0LmNoYXJhY3RlcnMo
KSwgaXQubGVuZ3RoKCkpKTsKQEAgLTIzNTEsNyArMjUxNSw3IEBAIHRyeUFnYWluOgogICAgICAg
ICAgICAgbWF0Y2hMZW5ndGggPSBuZXdNYXRjaExlbmd0aDsKICAgICAgICAgICAgIC8vIElmIHNl
YXJjaGluZyBmb3J3YXJkLCBzdG9wIG9uIHRoZSBmaXJzdCBtYXRjaC4KICAgICAgICAgICAgIC8v
IElmIHNlYXJjaGluZyBiYWNrd2FyZCwgZG9uJ3Qgc3RvcCwgc28gd2UgZW5kIHVwIHdpdGggdGhl
IGxhc3QgbWF0Y2guCi0gICAgICAgICAgICBpZiAoZm9yd2FyZCkKKyAgICAgICAgICAgIGlmICgh
KG9wdGlvbnMgJiBCYWNrd2FyZHMpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZ290byB0cnlBZ2FpbjsKICAgICAgICAgfQpAQCAtMjM2NiwxNCArMjUzMCwxOSBAQCB0cnlB
Z2FpbjoKIAogUGFzc1JlZlB0cjxSYW5nZT4gZmluZFBsYWluVGV4dChjb25zdCBSYW5nZSogcmFu
Z2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGZvcndhcmQsIGJvb2wgY2FzZVNlbnNpdGl2
ZSkKIHsKKyAgICByZXR1cm4gZmluZFBsYWluVGV4dChyYW5nZSwgdGFyZ2V0LCAoZm9yd2FyZCA/
IDAgOiBCYWNrd2FyZHMpIHwgKGNhc2VTZW5zaXRpdmUgPyAwIDogQ2FzZUluc2Vuc2l0aXZlKSk7
Cit9CisKK1Bhc3NSZWZQdHI8UmFuZ2U+IGZpbmRQbGFpblRleHQoY29uc3QgUmFuZ2UqIHJhbmdl
LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKK3sKICAgICAvLyBG
aXJzdCwgZmluZCB0aGUgdGV4dC4KICAgICBzaXplX3QgbWF0Y2hTdGFydDsKICAgICBzaXplX3Qg
bWF0Y2hMZW5ndGg7CiAgICAgewogICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBmaW5kSXRlcmF0
b3IocmFuZ2UsIFRleHRJdGVyYXRvckVudGVyc1RleHRDb250cm9scyk7Ci0gICAgICAgIG1hdGNo
TGVuZ3RoID0gZmluZFBsYWluVGV4dChmaW5kSXRlcmF0b3IsIHRhcmdldCwgZm9yd2FyZCwgY2Fz
ZVNlbnNpdGl2ZSwgbWF0Y2hTdGFydCk7CisgICAgICAgIG1hdGNoTGVuZ3RoID0gZmluZFBsYWlu
VGV4dChmaW5kSXRlcmF0b3IsIHRhcmdldCwgb3B0aW9ucywgbWF0Y2hTdGFydCk7CiAgICAgICAg
IGlmICghbWF0Y2hMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gY29sbGFwc2VkVG9Cb3VuZGFy
eShyYW5nZSwgZm9yd2FyZCk7CisgICAgICAgICAgICByZXR1cm4gY29sbGFwc2VkVG9Cb3VuZGFy
eShyYW5nZSwgIShvcHRpb25zICYgQmFja3dhcmRzKSk7CiAgICAgfQogCiAgICAgLy8gVGhlbiwg
ZmluZCB0aGUgZG9jdW1lbnQgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IGFuZCB0aGUgZW5kIG9mIHRo
ZSB0ZXh0LgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAkocmV2aXNpb24gNzI4MzQpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpZm5kZWYgVGV4dEl0ZXJhdG9yX2gKICNkZWZpbmUgVGV4dEl0ZXJhdG9yX2gKIAor
I2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNTgsNyArNTksOSBA
QCBpbmxpbmUgYm9vbCBpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShVQ2hhCiB9CiAKIFN0cmluZyBw
bGFpblRleHQoY29uc3QgUmFuZ2UqLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBkZWZhdWx0QmVoYXZp
b3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwotVUNoYXIqIHBsYWluVGV4dFRvTWFs
bG9jQWxsb2NhdGVkQnVmZmVyKGNvbnN0IFJhbmdlKiwgdW5zaWduZWQmIGJ1ZmZlckxlbmd0aCwg
Ym9vbCBpc0Rpc3BsYXlTdHJpbmcsIFRleHRJdGVyYXRvckJlaGF2aW9yIGRlZmF1bHRCZWhhdmlv
ciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CitVQ2hhciogcGxhaW5UZXh0VG9NYWxs
b2NBbGxvY2F0ZWRCdWZmZXIoY29uc3QgUmFuZ2UqLCB1bnNpZ25lZCYgYnVmZmVyTGVuZ3RoLCBi
b29sIGlzRGlzcGxheVN0cmluZywgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JE
ZWZhdWx0QmVoYXZpb3IpOworUGFzc1JlZlB0cjxSYW5nZT4gZmluZFBsYWluVGV4dChjb25zdCBS
YW5nZSosIGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKKy8vIEZJWE1FOiBTd2l0Y2ggY2Fs
bGVycyBvdmVyIHRvIHRoZSBGaW5kT3B0aW9ucyB2ZXJzaW9uIGFuZCByZXRpcmUgdGhpcyBvbmUu
CiBQYXNzUmVmUHRyPFJhbmdlPiBmaW5kUGxhaW5UZXh0KGNvbnN0IFJhbmdlKiwgY29uc3QgU3Ry
aW5nJiwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VTZW5zaXRpdmUpOwogCiBjbGFzcyBCaXRTdGFj
ayB7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA3MjgzNCkKKysr
IFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
MzAgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7CiAKLXN0YXRpYyBpbnQgZW5kT2ZGaXJz
dFdvcmRCb3VuZGFyeUNvbnRleHQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgp
Ci17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICkgewotICAgICAgICBpbnQgZmly
c3QgPSBpOwotICAgICAgICBVQ2hhcjMyIGNoOwotICAgICAgICBVMTZfTkVYVChjaGFyYWN0ZXJz
LCBpLCBsZW5ndGgsIGNoKTsKLSAgICAgICAgaWYgKCFyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91
bmRhcnkoY2gpKQotICAgICAgICAgICAgcmV0dXJuIGZpcnN0OwotICAgIH0KLSAgICByZXR1cm4g
bGVuZ3RoOwotfQotCi1zdGF0aWMgaW50IHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKLXsKLSAgICBmb3IgKGludCBpID0g
bGVuZ3RoOyBpID4gMDsgKSB7Ci0gICAgICAgIGludCBsYXN0ID0gaTsKLSAgICAgICAgVUNoYXIz
MiBjaDsKLSAgICAgICAgVTE2X1BSRVYoY2hhcmFjdGVycywgMCwgaSwgY2gpOwotICAgICAgICBp
ZiAoIXJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjaCkpCi0gICAgICAgICAgICByZXR1
cm4gbGFzdDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIGVudW0gQm91bmRhcnlTZWFyY2hD
b250ZXh0QXZhaWxhYmlsaXR5IHsgRG9udEhhdmVNb3JlQ29udGV4dCwgTWF5SGF2ZU1vcmVDb250
ZXh0IH07CiAKIHR5cGVkZWYgdW5zaWduZWQgKCpCb3VuZGFyeVNlYXJjaEZ1bmN0aW9uKShjb25z
dCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0LCBCb3VuZGFyeVNlYXJj
aENvbnRleHRBdmFpbGFiaWxpdHksIGJvb2wmIG5lZWRNb3JlQ29udGV4dCk7CkluZGV4OiBXZWJD
b3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShy
ZXZpc2lvbiA3MjgzNCkKKysrIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTA3LDI1ICs1MDcsMzEgQEAgc3RhdGljIEZyYW1lKiBpbmNyZW1lbnRGcmFtZShGcmFtZSog
Y3VycgogCiBib29sIFBhZ2U6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFRleHRD
YXNlU2Vuc2l0aXZpdHkgY2FzZVNlbnNpdGl2aXR5LCBGaW5kRGlyZWN0aW9uIGRpcmVjdGlvbiwg
Ym9vbCBzaG91bGRXcmFwKQogeworICAgIHJldHVybiBmaW5kU3RyaW5nKHRhcmdldCwgKGNhc2VT
ZW5zaXRpdml0eSA9PSBUZXh0Q2FzZUluc2Vuc2l0aXZlID8gQ2FzZUluc2Vuc2l0aXZlIDogMCkg
fCAoZGlyZWN0aW9uID09IEZpbmREaXJlY3Rpb25CYWNrd2FyZCA/IEJhY2t3YXJkcyA6IDApIHwg
KHNob3VsZFdyYXAgPyBXcmFwQXJvdW5kIDogMCkpOworfQorCitib29sIFBhZ2U6OmZpbmRTdHJp
bmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMpCit7CiAgICAgaWYg
KHRhcmdldC5pc0VtcHR5KCkgfHwgIW1haW5GcmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICBib29sIHNob3VsZFdyYXAgPSBvcHRpb25zICYgV3JhcEFyb3VuZDsKICAgICBGcmFt
ZSogZnJhbWUgPSBmb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAg
RnJhbWUqIHN0YXJ0RnJhbWUgPSBmcmFtZTsKICAgICBkbyB7Ci0gICAgICAgIGlmIChmcmFtZS0+
ZWRpdG9yKCktPmZpbmRTdHJpbmcodGFyZ2V0LCBkaXJlY3Rpb24gPT0gRmluZERpcmVjdGlvbkZv
cndhcmQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgZmFsc2UsIHRydWUp
KSB7CisgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcodGFyZ2V0LCAob3B0
aW9ucyAmIH5XcmFwQXJvdW5kKSB8IFN0YXJ0SW5TZWxlY3Rpb24pKSB7CiAgICAgICAgICAgICBp
ZiAoZnJhbWUgIT0gc3RhcnRGcmFtZSkKICAgICAgICAgICAgICAgICBzdGFydEZyYW1lLT5zZWxl
Y3Rpb24oKS0+Y2xlYXIoKTsKICAgICAgICAgICAgIGZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1
c2VkRnJhbWUoZnJhbWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAg
ICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwgZGlyZWN0aW9uID09IEZpbmREaXJl
Y3Rpb25Gb3J3YXJkLCBzaG91bGRXcmFwKTsKKyAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFt
ZShmcmFtZSwgIShvcHRpb25zICYgQmFja3dhcmRzKSwgc2hvdWxkV3JhcCk7CiAgICAgfSB3aGls
ZSAoZnJhbWUgJiYgZnJhbWUgIT0gc3RhcnRGcmFtZSk7CiAKICAgICAvLyBTZWFyY2ggY29udGVu
dHMgb2Ygc3RhcnRGcmFtZSwgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIHNlbGVjdGlvbiB0aGF0
IHdlIGRpZCBlYXJsaWVyLgogICAgIC8vIFdlIGNoZWF0IGEgYml0IGFuZCBqdXN0IHJlc2VhcmNo
IHdpdGggd3JhcCBvbgogICAgIGlmIChzaG91bGRXcmFwICYmICFzdGFydEZyYW1lLT5zZWxlY3Rp
b24oKS0+aXNOb25lKCkpIHsKLSAgICAgICAgYm9vbCBmb3VuZCA9IHN0YXJ0RnJhbWUtPmVkaXRv
cigpLT5maW5kU3RyaW5nKHRhcmdldCwgZGlyZWN0aW9uID09IEZpbmREaXJlY3Rpb25Gb3J3YXJk
LCBjYXNlU2Vuc2l0aXZpdHkgPT0gVGV4dENhc2VTZW5zaXRpdmUsIHRydWUsIHRydWUpOworICAg
ICAgICBib29sIGZvdW5kID0gc3RhcnRGcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcodGFyZ2V0
LCBvcHRpb25zIHwgV3JhcEFyb3VuZCB8IFN0YXJ0SW5TZWxlY3Rpb24pOwogICAgICAgICBmb2N1
c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKGZyYW1lKTsKICAgICAgICAgcmV0dXJuIGZv
dW5kOwogICAgIH0KQEAgLTUzNSw2ICs1NDEsMTEgQEAgYm9vbCBQYWdlOjpmaW5kU3RyaW5nKGNv
bnN0IFN0cmluZyYgdGFyZwogCiB1bnNpZ25lZCBpbnQgUGFnZTo6bWFya0FsbE1hdGNoZXNGb3JU
ZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBUZXh0Q2FzZVNlbnNpdGl2aXR5IGNhc2VTZW5zaXRp
dml0eSwgYm9vbCBzaG91bGRIaWdobGlnaHQsIHVuc2lnbmVkIGxpbWl0KQogeworICAgIHJldHVy
biBtYXJrQWxsTWF0Y2hlc0ZvclRleHQodGFyZ2V0LCBjYXNlU2Vuc2l0aXZpdHkgPT0gVGV4dENh
c2VJbnNlbnNpdGl2ZSA/IENhc2VJbnNlbnNpdGl2ZSA6IDAsIHNob3VsZEhpZ2hsaWdodCwgbGlt
aXQpOworfQorCit1bnNpZ25lZCBpbnQgUGFnZTo6bWFya0FsbE1hdGNoZXNGb3JUZXh0KGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBib29sIHNob3VsZEhpZ2hsaWdo
dCwgdW5zaWduZWQgbGltaXQpCit7CiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkgfHwgIW1haW5G
cmFtZSgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNTQzLDcgKzU1NCw3IEBAIHVuc2lnbmVk
IGludCBQYWdlOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQKICAgICBGcmFtZSogZnJhbWUgPSBtYWlu
RnJhbWUoKTsKICAgICBkbyB7CiAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4
dE1hdGNoZXNBcmVIaWdobGlnaHRlZChzaG91bGRIaWdobGlnaHQpOwotICAgICAgICBtYXRjaGVz
ICs9IGZyYW1lLT5lZGl0b3IoKS0+Y291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIGNhc2VTZW5z
aXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgbGltaXQgPyAobGltaXQgLSBtYXRjaGVzKSA6
IDAsIHRydWUpOworICAgICAgICBtYXRjaGVzICs9IGZyYW1lLT5lZGl0b3IoKS0+Y291bnRNYXRj
aGVzRm9yVGV4dCh0YXJnZXQsIG9wdGlvbnMsIGxpbWl0ID8gKGxpbWl0IC0gbWF0Y2hlcykgOiAw
LCB0cnVlKTsKICAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwgdHJ1ZSwgZmFs
c2UpOwogICAgIH0gd2hpbGUgKGZyYW1lKTsKIApJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiA3MjgzNCkKKysrIFdl
YkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZp
bmUgUGFnZV9oCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiRmlu
ZE9wdGlvbnMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlZpZXdw
b3J0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTE5OCw3ICsxOTks
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyhib29sIGIpIHsgbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMgPSBi
OyB9CiAgICAgICAgIGJvb2wgdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHM7IH0KIAorICAgICAgICBib29sIGZp
bmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMpOworICAgICAgICAvLyBGSVhNRTog
U3dpdGNoIGNhbGxlcnMgb3ZlciB0byB0aGUgRmluZE9wdGlvbnMgdmVyc2lvbiBhbmQgcmV0aXJl
IHRoaXMgb25lLgogICAgICAgICBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgVGV4dENh
c2VTZW5zaXRpdml0eSwgRmluZERpcmVjdGlvbiwgYm9vbCBzaG91bGRXcmFwKTsKKyAgICAgICAg
dW5zaWduZWQgaW50IG1hcmtBbGxNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCBGaW5kT3B0
aW9ucywgYm9vbCBzaG91bGRIaWdobGlnaHQsIHVuc2lnbmVkKTsKKyAgICAgICAgLy8gRklYTUU6
IFN3aXRjaCBjYWxsZXJzIG92ZXIgdG8gdGhlIEZpbmRPcHRpb25zIHZlcnNpb24gYW5kIHJldGly
ZSB0aGlzIG9uZS4KICAgICAgICAgdW5zaWduZWQgaW50IG1hcmtBbGxNYXRjaGVzRm9yVGV4dChj
b25zdCBTdHJpbmcmLCBUZXh0Q2FzZVNlbnNpdGl2aXR5LCBib29sIHNob3VsZEhpZ2hsaWdodCwg
dW5zaWduZWQpOwogICAgICAgICB2b2lkIHVubWFya0FsbFRleHRNYXRjaGVzKCk7CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcAkocmV2aXNpb24gNzI4MzQp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw2ICszNiwzMiBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitpbnQgZW5kT2ZGaXJzdFdvcmRCb3VuZGFyeUNvbnRleHQoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBsZW5ndGg7ICkgeworICAgICAgICBpbnQgZmlyc3QgPSBpOworICAgICAgICBVQ2hhcjMyIGNo
OworICAgICAgICBVMTZfTkVYVChjaGFyYWN0ZXJzLCBpLCBsZW5ndGgsIGNoKTsKKyAgICAgICAg
aWYgKCFyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2gpKQorICAgICAgICAgICAgcmV0
dXJuIGZpcnN0OworICAgIH0KKyAgICByZXR1cm4gbGVuZ3RoOworfQorCitpbnQgc3RhcnRPZkxh
c3RXb3JkQm91bmRhcnlDb250ZXh0KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KQoreworICAgIGZvciAoaW50IGkgPSBsZW5ndGg7IGkgPiAwOyApIHsKKyAgICAgICAgaW50IGxh
c3QgPSBpOworICAgICAgICBVQ2hhcjMyIGNoOworICAgICAgICBVMTZfUFJFVihjaGFyYWN0ZXJz
LCAwLCBpLCBjaCk7CisgICAgICAgIGlmICghcmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5
KGNoKSkKKyAgICAgICAgICAgIHJldHVybiBsYXN0OworICAgIH0KKyAgICByZXR1cm4gMDsKK30K
KworI2lmICFQTEFURk9STShCUkVXTVApICYmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShR
VCkKKwogaW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25zdCBVQ2hhciogY2hhcnMsIGludCBs
ZW4sIGludCBwb3NpdGlvbiwgYm9vbCBmb3J3YXJkKQogewogICAgIFRleHRCcmVha0l0ZXJhdG9y
KiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4pOwpAQCAtNzYsNCArMTAyLDYgQEAg
dm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycwogICAgICpzdGFydCA9IHRl
eHRCcmVha1ByZXZpb3VzKGl0KTsKIH0KIAorI2VuZGlmIC8vICFQTEFURk9STShCUkVXTVApICYm
ICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShRVCkKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmgJKHJldmlzaW9uIDcy
ODM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1
cm4gV1RGOjpVbmljb2RlOjpoYXNMaW5lQnJlYWtpbmdQcm9wZXJ0eUNvbXBsZXhDb250ZXh0KGNo
KTsKICAgICB9CiAKKyAgICBpbnQgZW5kT2ZGaXJzdFdvcmRCb3VuZGFyeUNvbnRleHQoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpOworICAgIGludCBzdGFydE9mTGFzdFdvcmRC
b3VuZGFyeUNvbnRleHQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpOworCiAg
ICAgdm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiwgaW50IGxlbiwgaW50IHBvc2l0
aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCk7CiAgICAgaW50IGZpbmROZXh0V29yZEZyb21JbmRl
eChjb25zdCBVQ2hhciosIGludCBsZW4sIGludCBwb3NpdGlvbiwgYm9vbCBmb3J3YXJkKTsKIApJ
bmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDcyODM0KQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwzNSBAQAorMjAxMC0xMS0yOSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktp
dDIgcGFydCBvZiA8cmRhcjovL3Byb2JsZW0vODY1MDA4NT4gYWRkaW5nIHdvcmQtcHJlZml4IHNl
YXJjaCBvcHRpb25zIHRvIHRoZSB0ZXh0IHNlYXJjaCBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDAzOAorICAgICAgICBCYXNlZCBvbiBhIHBh
dGNoIGZyb20gRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViRmluZE9wdGlvbnMu
aDogUmVuYW1lZCBGaW5kT3B0aW9ucy5oIHRvIHRoaXMgdG8gYWNjb3VudCBmb3IgV2ViQ29yZeKA
mXMgbmV3IHByaXZhdGUKKyAgICAgICAgRmluZE9wdGlvbnMuaC4gQWRkZWQgYW5kIHJlb3JkZXJl
ZCBGaW5kT3B0aW9ucyBhbmQgcm9sbGVkIEZpbmREaXJlY3Rpb24gaW50byBGaW5kT3B0aW9ucy4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0Lmg6IFJlbW92ZWQgdG9GaW5kRGly
ZWN0aW9uKCkuCisgICAgICAgIChXZWJLaXQ6OnRvRmluZE9wdGlvbnMpOiBVcGRhdGVkIGZvciBu
ZXcgdmFsdWVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAg
ICAoV0tQYWdlRmluZFN0cmluZyk6IFJlbW92ZWQgc2VwYXJhdGUgV0tGaW5kRGlyZWN0aW9uLgor
ICAgICAgICAoV0tQYWdlQ291bnRTdHJpbmdNYXRjaGVzKTogUmVwbGFjZXMgY2FzZUluc2Vuc2l0
aXZlIGJvb2xlYW4gd2l0aCBXS0ZpbmRPcHRpb25zLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuaDogUmVtb3ZlZCBXS0ZpbmREaXJlY3Rpb24gYW5kIHVwZGF0ZWQgV0tGaW5kT3B0
aW9ucy4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpmaW5kU3RyaW5nKTogUmVtb3ZlZCBzZXBhcmF0ZSBGaW5kRGly
ZWN0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNvdW50U3RyaW5nTWF0Y2hl
cyk6IFJlcGxhY2VkIGNhc2VJbnNlbnNpdGl2ZSBib29sZWFuIHdpdGggRmluZE9wdGlvbnMuCisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFdlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajogVXBkYXRlZCBmb3IgdGhlIGhlYWRlciByZW5hbWUuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Y29yZSk6IEFkZGVkLiBDb252ZXJ0cyBXZWJLaXQyIEZpbmRPcHRpb25zIHRvIFdl
YkNvcmUgRmluZE9wdGlvbnMuCisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpjb3Vu
dFN0cmluZ01hdGNoZXMpOiBDaGFuZ2VkIHRvIHVzZSBGaW5kT3B0aW9ucy4KKyAgICAgICAgKFdl
YktpdDo6RmluZENvbnRyb2xsZXI6OmZpbmRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZpbmRTdHJpbmcp
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y291bnRTdHJpbmdNYXRjaGVzKTog
RGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjogRGl0dG8uCisKIDIwMTAt
MTEtMjkgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBXZWJLaXQyL1dlYktpdDIucHJvCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHJldmlzaW9uIDcyODM0KQorKysgV2ViS2l0Mi9X
ZWJLaXQyLnBybwkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSw3IEBAIEhFQURFUlMgKz0g
XAogICAgIFNoYXJlZC9XZWJFcnJvci5oIFwKICAgICBTaGFyZWQvV2ViRXZlbnQuaCBcCiAgICAg
U2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5oIFwKKyAgICBTaGFyZWQvV2ViRmluZE9wdGlvbnMu
aCBcCiAgICAgU2hhcmVkL1dlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCBcCiAgICAgU2hhcmVkL1dl
Yk51bWJlci5oIFwKICAgICBTaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIFwKSW5k
ZXg6IFdlYktpdDIvU2hhcmVkL0ZpbmRPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9T
aGFyZWQvRmluZE9wdGlvbnMuaAkocmV2aXNpb24gNzI4MzQpCisrKyBXZWJLaXQyL1NoYXJlZC9G
aW5kT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIEZpbmRPcHRpb25zX2gKLSNkZWZpbmUgRmluZE9wdGlvbnNfaAotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotZW51bSBGaW5kRGlyZWN0aW9uIHsgCi0gICAgRmluZERpcmVjdGlvbkZv
cndhcmQsIAotICAgIEZpbmREaXJlY3Rpb25CYWNrd2FyZAotfTsKLQotZW51bSBGaW5kT3B0aW9u
cyB7Ci0gICAgRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUgPSAxIDw8IDAsCi0gICAgRmluZE9w
dGlvbnNXcmFwQXJvdW5kID0gMSA8PCAxLAotICAgIEZpbmRPcHRpb25zU2hvd092ZXJsYXkgPSAx
IDw8IDIsCi0gICAgRmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvciA9IDEgPDwgMywKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRmluZE9wdGlvbnNfaApJbmRleDog
V2ViS2l0Mi9TaGFyZWQvV2ViRmluZE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1No
YXJlZC9XZWJGaW5kT3B0aW9ucy5oCShyZXZpc2lvbiA3MjgwMykJKGZyb20gV2ViS2l0Mi9TaGFy
ZWQvRmluZE9wdGlvbnMuaDo3MjgwMykKKysrIFdlYktpdDIvU2hhcmVkL1dlYkZpbmRPcHRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RmluZE9wdGlvbnNfaAorI2RlZmluZSBGaW5kT3B0aW9uc19oCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitlbnVtIEZpbmREaXJlY3Rpb24geyAKKyAgICBGaW5kRGlyZWN0aW9uRm9yd2FyZCwgCisg
ICAgRmluZERpcmVjdGlvbkJhY2t3YXJkCit9OworCitlbnVtIEZpbmRPcHRpb25zIHsKKyAgICBG
aW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSA9IDEgPDwgMCwKKyAgICBGaW5kT3B0aW9uc1dyYXBB
cm91bmQgPSAxIDw8IDEsCisgICAgRmluZE9wdGlvbnNTaG93T3ZlcmxheSA9IDEgPDwgMiwKKyAg
ICBGaW5kT3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9yID0gMSA8PCAzLAorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBGaW5kT3B0aW9uc19oCkluZGV4OiBXZWJLaXQyL1No
YXJlZC9XZWJGaW5kT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dlYkZp
bmRPcHRpb25zLmgJKHJldmlzaW9uIDcyODAzKQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViRmluZE9w
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjMgKzIzLDIxIEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBGaW5kT3B0aW9uc19oCi0jZGVm
aW5lIEZpbmRPcHRpb25zX2gKKyNpZm5kZWYgV2ViRmluZE9wdGlvbnNfaAorI2RlZmluZSBXZWJG
aW5kT3B0aW9uc19oCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1lbnVtIEZpbmREaXJlY3Rpb24g
eyAKLSAgICBGaW5kRGlyZWN0aW9uRm9yd2FyZCwgCi0gICAgRmluZERpcmVjdGlvbkJhY2t3YXJk
Ci19OwotCiBlbnVtIEZpbmRPcHRpb25zIHsKICAgICBGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2
ZSA9IDEgPDwgMCwKLSAgICBGaW5kT3B0aW9uc1dyYXBBcm91bmQgPSAxIDw8IDEsCi0gICAgRmlu
ZE9wdGlvbnNTaG93T3ZlcmxheSA9IDEgPDwgMiwKLSAgICBGaW5kT3B0aW9uc1Nob3dGaW5kSW5k
aWNhdG9yID0gMSA8PCAzLAorICAgIEZpbmRPcHRpb25zQXRXb3JkU3RhcnRzID0gMSA8PCAxLAor
ICAgIEZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQgPSAxIDw8IDIsCisg
ICAgRmluZE9wdGlvbnNCYWNrd2FyZHMgPSAxIDw8IDMsCisgICAgRmluZE9wdGlvbnNXcmFwQXJv
dW5kID0gMSA8PCA0LAorICAgIEZpbmRPcHRpb25zU2hvd092ZXJsYXkgPSAxIDw8IDUsCisgICAg
RmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvciA9IDEgPDwgNgogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CiAKLSNlbmRpZiAvLyBGaW5kT3B0aW9uc19oCisjZW5kaWYgLy8gV2ViRmluZE9w
dGlvbnNfaApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA3Mjgz
NCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYwNyw5ICs2MDcsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2NhbGVXZWJWaWV3KGRvdWJs
ZSBzCiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY2FsZVdlYlZpZXco
c2NhbGUsIG9yaWdpbiksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmZpbmRT
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZpbmREaXJlY3Rpb24gZmluZERpcmVjdGlvbiwg
RmluZE9wdGlvbnMgZmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCit2b2lkIFdl
YlBhZ2VQcm94eTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgRmluZE9wdGlvbnMg
b3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKIHsKLSAgICBwcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkZpbmRTdHJpbmcoc3RyaW5nLCBmaW5kRGlyZWN0aW9uLCBmaW5k
T3B0aW9ucywgbWF4TWF0Y2hDb3VudCksIG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkZpbmRTdHJpbmcoc3RyaW5nLCBvcHRpb25zLCBtYXhNYXRjaENv
dW50KSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGlkZUZpbmRVSSgpCkBA
IC02MTcsOSArNjE3LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhpZGVGaW5kVUkoKQogICAgIHBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlkZUZpbmRVSSgpLCBtX3BhZ2VJRCk7
CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpjb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGJvb2wgY2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQor
dm9pZCBXZWJQYWdlUHJveHk6OmNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmlu
ZywgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKIHsKLSAgICBw
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvdW50U3RyaW5nTWF0Y2hlcyhzdHJp
bmcsIGNhc2VJbnNlbnNpdGl2ZSwgbWF4TWF0Y2hDb3VudCksIG1fcGFnZUlEKTsKKyAgICBwcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvdW50U3RyaW5nTWF0Y2hlcyhzdHJpbmcs
IG9wdGlvbnMsIG1heE1hdGNoQ291bnQpLCBtX3BhZ2VJRCk7CiB9CiAgICAgCiB2b2lkIFdlYlBh
Z2VQcm94eTo6cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBQ
YXNzUmVmUHRyPFNjcmlwdFJldHVyblZhbHVlQ2FsbGJhY2s+IHBycENhbGxiYWNrKQpJbmRleDog
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDcyODM0KQorKysgV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAog
I2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNp
bmNsdWRlICJGaW5kT3B0aW9ucy5oIgogI2luY2x1ZGUgIkdlbmVyaWNDYWxsYmFjay5oIgogI2lu
Y2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldLQmFzZS5oIgpAQCAtMzYsNiArMzUs
NyBAQAogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51SXRlbURhdGEuaCIKICNpbmNsdWRlICJXZWJF
dmVudC5oIgogI2luY2x1ZGUgIldlYkZpbmRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJGaW5kT3B0
aW9ucy5oIgogI2luY2x1ZGUgIldlYkZvcm1DbGllbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZVBy
b3h5LmgiCiAjaW5jbHVkZSAiV2ViSGlzdG9yeUNsaWVudC5oIgpAQCAtMjA4LDkgKzIwOCw5IEBA
IHB1YmxpYzoKICAgICBkb3VibGUgdmlld1NjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92
aWV3U2NhbGVGYWN0b3I7IH0KIAogICAgIC8vIEZpbmQuCi0gICAgdm9pZCBmaW5kU3RyaW5nKGNv
bnN0IFN0cmluZyYsIEZpbmREaXJlY3Rpb24sIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRj
aENvdW50KTsKKyAgICB2b2lkIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMs
IHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwogICAgIHZvaWQgaGlkZUZpbmRVSSgpOwotICAgIHZv
aWQgY291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYsIGJvb2wgY2FzZUluc2Vuc2l0aXZl
LCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKKyAgICB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlcyhj
b25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CiAKICAg
ICB2b2lkIHJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRy
PFNjcmlwdFJldHVyblZhbHVlQ2FsbGJhY2s+KTsKICAgICB2b2lkIGdldFJlbmRlclRyZWVFeHRl
cm5hbFJlcHJlc2VudGF0aW9uKFBhc3NSZWZQdHI8UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50
YXRpb25DYWxsYmFjaz4pOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHJl
dmlzaW9uIDcyODM0KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDEyICsyNywxMiBAQAogI2RlZmluZSBXS0FQSUNhc3RfaAogCiAj
aW5jbHVkZSAiQ2FjaGVNb2RlbC5oIgotI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCiAjaW5jbHVk
ZSAiRm9udFNtb290aGluZ0xldmVsLmgiCiAjaW5jbHVkZSAiV0tDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiV0tQYWdlLmgiCiAjaW5jbHVkZSAiV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCIKICNpbmNsdWRl
ICJXS1NoYXJlZEFQSUNhc3QuaCIKKyNpbmNsdWRlICJXZWJGaW5kT3B0aW9ucy5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAg
LTEyNCwyNSArMTI0LDE4IEBAIGlubGluZSBXS0NhY2hlTW9kZWwgdG9BUEkoQ2FjaGVNb2RlbCBj
YWMKICAgICByZXR1cm4ga1dLQ2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOwogfQogCi1pbmxpbmUg
RmluZERpcmVjdGlvbiB0b0ZpbmREaXJlY3Rpb24oV0tGaW5kRGlyZWN0aW9uIHdrRmluZERpcmVj
dGlvbikKLXsKLSAgICBzd2l0Y2ggKHdrRmluZERpcmVjdGlvbikgewotICAgIGNhc2Uga1dLRmlu
ZERpcmVjdGlvbkZvcndhcmQ6Ci0gICAgICAgIHJldHVybiBGaW5kRGlyZWN0aW9uRm9yd2FyZDsK
LSAgICBjYXNlIGtXS0ZpbmREaXJlY3Rpb25CYWNrd2FyZDoKLSAgICAgICAgcmV0dXJuIEZpbmRE
aXJlY3Rpb25CYWNrd2FyZDsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gRmluZERpcmVjdGlvbkZvcndhcmQ7Ci19Ci0KIGlubGluZSBGaW5kT3B0aW9ucyB0
b0ZpbmRPcHRpb25zKFdLRmluZE9wdGlvbnMgd2tGaW5kT3B0aW9ucykKIHsKICAgICB1bnNpZ25l
ZCBmaW5kT3B0aW9ucyA9IDA7CiAKICAgICBpZiAod2tGaW5kT3B0aW9ucyAmIGtXS0ZpbmRPcHRp
b25zQ2FzZUluc2Vuc2l0aXZlKQogICAgICAgICBmaW5kT3B0aW9ucyB8PSBGaW5kT3B0aW9uc0Nh
c2VJbnNlbnNpdGl2ZTsKKyAgICBpZiAod2tGaW5kT3B0aW9ucyAmIGtXS0ZpbmRPcHRpb25zQXRX
b3JkU3RhcnRzKQorICAgICAgICBmaW5kT3B0aW9ucyB8PSBGaW5kT3B0aW9uc0F0V29yZFN0YXJ0
czsKKyAgICBpZiAod2tGaW5kT3B0aW9ucyAmIGtXS0ZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBp
dGFsQXNXb3JkU3RhcnQpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IEZpbmRPcHRpb25zVHJlYXRN
ZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7CisgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBrV0tGaW5k
T3B0aW9uc0JhY2t3YXJkcykKKyAgICAgICAgZmluZE9wdGlvbnMgfD0gRmluZE9wdGlvbnNCYWNr
d2FyZHM7CiAgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBrV0tGaW5kT3B0aW9uc1dyYXBBcm91bmQp
CiAgICAgICAgIGZpbmRPcHRpb25zIHw9IEZpbmRPcHRpb25zV3JhcEFyb3VuZDsKICAgICBpZiAo
d2tGaW5kT3B0aW9ucyAmIGtXS0ZpbmRPcHRpb25zU2hvd092ZXJsYXkpCkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDcyODM0KQorKysgV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDkgKzIzMCw5IEBAIGRv
dWJsZSBXS1BhZ2VHZXRWaWV3U2NhbGVGYWN0b3IoV0tQYWdlUmUKICAgICByZXR1cm4gdG9JbXBs
KHBhZ2VSZWYpLT52aWV3U2NhbGVGYWN0b3IoKTsKIH0KIAotdm9pZCBXS1BhZ2VGaW5kU3RyaW5n
KFdLUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBzdHJpbmcsIFdLRmluZERpcmVjdGlvbiBm
aW5kRGlyZWN0aW9uLCBXS0ZpbmRPcHRpb25zIGZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRj
aENvdW50KQordm9pZCBXS1BhZ2VGaW5kU3RyaW5nKFdLUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmlu
Z1JlZiBzdHJpbmcsIFdLRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3Vu
dCkKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmZpbmRTdHJpbmcodG9JbXBsKHN0cmluZyktPnN0
cmluZygpLCB0b0ZpbmREaXJlY3Rpb24oZmluZERpcmVjdGlvbiksIHRvRmluZE9wdGlvbnMoZmlu
ZE9wdGlvbnMpLCBtYXhNYXRjaENvdW50KTsKKyAgICB0b0ltcGwocGFnZVJlZiktPmZpbmRTdHJp
bmcodG9JbXBsKHN0cmluZyktPnN0cmluZygpLCB0b0ZpbmRPcHRpb25zKG9wdGlvbnMpLCBtYXhN
YXRjaENvdW50KTsKIH0KIAogdm9pZCBXS1BhZ2VIaWRlRmluZFVJKFdLUGFnZVJlZiBwYWdlUmVm
KQpAQCAtMjQwLDkgKzI0MCw5IEBAIHZvaWQgV0tQYWdlSGlkZUZpbmRVSShXS1BhZ2VSZWYgcGFn
ZVJlZikKICAgICB0b0ltcGwocGFnZVJlZiktPmhpZGVGaW5kVUkoKTsKIH0KIAotdm9pZCBXS1Bh
Z2VDb3VudFN0cmluZ01hdGNoZXMoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHN0cmlu
ZywgYm9vbCBjYXNlSW5zZW5zaXRpdmUsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCit2b2lkIFdL
UGFnZUNvdW50U3RyaW5nTWF0Y2hlcyhXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgc3Ry
aW5nLCBXS0ZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCiB7Ci0g
ICAgdG9JbXBsKHBhZ2VSZWYpLT5jb3VudFN0cmluZ01hdGNoZXModG9JbXBsKHN0cmluZyktPnN0
cmluZygpLCBjYXNlSW5zZW5zaXRpdmUsIG1heE1hdGNoQ291bnQpOworICAgIHRvSW1wbChwYWdl
UmVmKS0+Y291bnRTdHJpbmdNYXRjaGVzKHRvSW1wbChzdHJpbmcpLT5zdHJpbmcoKSwgdG9GaW5k
T3B0aW9ucyhvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCk7CiB9CiAKIHZvaWQgV0tQYWdlU2V0UGFn
ZUNvbnRleHRNZW51Q2xpZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBjb25zdCBXS1BhZ2VDb250ZXh0
TWVudUNsaWVudCogd2tDbGllbnQpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Bh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAkocmV2
aXNpb24gNzI4MzQpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjc0LDIyICsyNzQsMTkgQEAgV0tfRVhQT1JUIGRvdWJsZSBXS1BhZ2VHZXRW
aWV3U2NhbGVGYWN0bwogCiAvLyBGaW5kLgogZW51bSB7Ci0gICAga1dLRmluZERpcmVjdGlvbkZv
cndhcmQsCi0gICAga1dLRmluZERpcmVjdGlvbkJhY2t3YXJkCi19OwotdHlwZWRlZiB1aW50MzJf
dCBXS0ZpbmREaXJlY3Rpb247Ci0KLWVudW0gewogICAgIGtXS0ZpbmRPcHRpb25zQ2FzZUluc2Vu
c2l0aXZlID0gMSA8PCAwLAotICAgIGtXS0ZpbmRPcHRpb25zV3JhcEFyb3VuZCA9IDEgPDwgMSwK
LSAgICBrV0tGaW5kT3B0aW9uc1Nob3dPdmVybGF5ID0gMSA8PCAyLAotICAgIGtXS0ZpbmRPcHRp
b25zU2hvd0ZpbmRJbmRpY2F0b3IgPSAxIDw8IDMKKyAgICBrV0tGaW5kT3B0aW9uc0F0V29yZFN0
YXJ0cyA9IDEgPDwgMSwKKyAgICBrV0tGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRhbEFzV29y
ZFN0YXJ0ID0gMSA8PCAyLAorICAgIGtXS0ZpbmRPcHRpb25zQmFja3dhcmRzID0gMSA8PCAzLAor
ICAgIGtXS0ZpbmRPcHRpb25zV3JhcEFyb3VuZCA9IDEgPDwgNCwKKyAgICBrV0tGaW5kT3B0aW9u
c1Nob3dPdmVybGF5ID0gMSA8PCA1LAorICAgIGtXS0ZpbmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0
b3IgPSAxIDw8IDYKIH07CiB0eXBlZGVmIHVpbnQzMl90IFdLRmluZE9wdGlvbnM7CiAKLVdLX0VY
UE9SVCB2b2lkIFdLUGFnZUZpbmRTdHJpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0
cmluZywgV0tGaW5kRGlyZWN0aW9uIGZpbmREaXJlY3Rpb24sIFdLRmluZE9wdGlvbnMgZmluZE9w
dGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOworV0tfRVhQT1JUIHZvaWQgV0tQYWdlRmlu
ZFN0cmluZyhXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgc3RyaW5nLCBXS0ZpbmRPcHRpb25z
IGZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKIFdLX0VYUE9SVCB2b2lkIFdL
UGFnZUhpZGVGaW5kVUkoV0tQYWdlUmVmIHBhZ2UpOwotV0tfRVhQT1JUIHZvaWQgV0tQYWdlQ291
bnRTdHJpbmdNYXRjaGVzKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBzdHJpbmcsIGJvb2wg
Y2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKK1dLX0VYUE9SVCB2b2lk
IFdLUGFnZUNvdW50U3RyaW5nTWF0Y2hlcyhXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgc3Ry
aW5nLCBXS0ZpbmRPcHRpb25zIGZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsK
IAogV0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KFdLUGFnZVJl
ZiBwYWdlLCBjb25zdCBXS1BhZ2VDb250ZXh0TWVudUNsaWVudCogY2xpZW50KTsKIFdLX0VYUE9S
VCB2b2lkIFdLUGFnZVNldFBhZ2VGaW5kQ2xpZW50KFdLUGFnZVJlZiBwYWdlLCBjb25zdCBXS1Bh
Z2VGaW5kQ2xpZW50KiBjbGllbnQpOwpJbmRleDogV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDcyODM0KQorKysgV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQAog
CQkxQThFRkE3MTEyNTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4RUZBNkYxMjUyQjg0
MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJMUE4RUZERkExMjUz
Q0FBMjAwRjcwNjdGIC8qIERhdGFSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEVGREY5MTI1M0NBQTIwMEY3MDY3RiAvKiBEYXRhUmVm
ZXJlbmNlLmggKi87IH07CiAJCTFBOEVGREZFMTI1M0NCNkUwMEY3MDY3RiAvKiBEYXRhUmVmZXJl
bmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
OEVGREZEMTI1M0NCNkUwMEY3MDY3RiAvKiBEYXRhUmVmZXJlbmNlLmNwcCAqLzsgfTsKLQkJMUE5
MEMxRUUxMjY0RkQ1MDAwM0U0NEQ0IC8qIEZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyog
RmluZE9wdGlvbnMuaCAqLzsgfTsKKwkJMUE5MEMxRUUxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZp
bmRPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTkwQzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCAqLzsgfTsKIAkJ
MUE5MEMxRjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0
RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMUE5MEMxRjUxMjY0RkQ3MTAwM0U0NEQ0
IC8qIEZpbmRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBOTBDMUYzMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5j
cHAgKi87IH07CiAJCTFBOTBDMjM3MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMyMzUxMjY1
MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi87IH07CkBAIC03MDAsNyArNzAwLDcgQEAK
IAkJMUE4RUZBNkYxMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luUHJveHlNZXNzYWdlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQThFRkRGOTEyNTNDQUEyMDBGNzA2N0YgLyogRGF0
YVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhUmVmZXJl
bmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOEVGREZEMTI1M0NCNkUwMEY3
MDY3RiAvKiBEYXRhUmVmZXJlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERhdGFSZWZlcmVuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
QTkwQzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogRmluZE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmluZE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUE5MEMxRUQxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZpbmRPcHRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kQ29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkwQzFGMzEyNjRGRDcxMDAzRTQ0RDQg
LyogRmluZENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRmluZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkw
QzIzNTEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEzODUsNyArMTM4NSw2IEBACiAJCQkJMUEyRDk1NkQxMjg0ODU2NDAwMUVCOTYyIC8qIENo
aWxkUHJvY2Vzcy5oICovLAogCQkJCTFBNkY5RjhFMTFFMTNFRkMwMERCMTM3MSAvKiBDb21tYW5k
TGluZS5oICovLAogCQkJCTBGQjY1OTIyMTIwOEI0REIwMDQ0ODE2QyAvKiBEcmF3aW5nQXJlYUJh
c2UuaCAqLywKLQkJCQkxQTkwQzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogRmluZE9wdGlvbnMuaCAq
LywKIAkJCQk3NjJCNzQ4MTEyMEJCQTAxMDA4MTkzMzkgLyogRm9udFNtb290aGluZ0xldmVsLmgg
Ki8sCiAJCQkJQkM2NDY5NkQxMURCRTYwMzAwNjQ1NUIwIC8qIEltbXV0YWJsZUFycmF5LmNwcCAq
LywKIAkJCQlCQzY0Njk2RTExREJFNjAzMDA2NDU1QjAgLyogSW1tdXRhYmxlQXJyYXkuaCAqLywK
QEAgLTE0MTcsNiArMTQxNiw3IEBACiAJCQkJQkMwMzJEQUYxMEY0MzgwRjAwNThDMTVBIC8qIFdl
YkV2ZW50LmggKi8sCiAJCQkJQkMwMzJEQjAxMEY0MzgwRjAwNThDMTVBIC8qIFdlYkV2ZW50Q29u
dmVyc2lvbi5jcHAgKi8sCiAJCQkJQkMwMzJEQjExMEY0MzgwRjAwNThDMTVBIC8qIFdlYkV2ZW50
Q29udmVyc2lvbi5oICovLAorCQkJCTFBOTBDMUVEMTI2NEZENTAwMDNFNDRENCAvKiBXZWJGaW5k
T3B0aW9ucy5oICovLAogCQkJCUMwMzM3REQyMTI3QTJBMEUwMDhGRjRGNCAvKiBXZWJLZXlib2Fy
ZEV2ZW50LmNwcCAqLywKIAkJCQlDMDMzN0RBRjEyN0EyOEQwMDA4RkY0RjQgLyogV2ViTW91c2VF
dmVudC5jcHAgKi8sCiAJCQkJQkNGNjlGOTgxMTc2Q0VENjAwNDcxQTUyIC8qIFdlYk5hdmlnYXRp
b25EYXRhU3RvcmUuaCAqLywKQEAgLTIzNzgsNyArMjM3OCw3IEBACiAJCQkJQkM1NzQ0RjAxMjYz
OEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1NzQ1
MEMxMjYzQjE1NTAwNkYwRjEyIC8qIFdLQnVuZGxlTm9kZUhhbmRsZVByaXZhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBQzQxQUM3MTI2M0M4ODMwMDA1NEU5NCAvKiBCaW5hcnlTZW1hcGhvcmUu
aCBpbiBIZWFkZXJzICovLAotCQkJCTFBOTBDMUVFMTI2NEZENTAwMDNFNDRENCAvKiBGaW5kT3B0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE5MEMxRUUxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdl
YkZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTkwQzFGNDEyNjRGRDcxMDAzRTQ0
RDQgLyogRmluZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOTBDMjM3MTI2NTA3
MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1NzRFNjMx
MjY3RDA4MDAwNkYwRjEyIC8qIFdlYlBvcHVwTWVudVByb3h5LmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDcyODM0KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxNSBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyBXZWJDb3JlOjpGaW5kT3B0
aW9ucyBjb3JlKEZpbmRPcHRpb25zIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIChvcHRpb25zICYg
RmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUgPyBDYXNlSW5zZW5zaXRpdmUgOiAwKQorICAgICAg
ICB8IChvcHRpb25zICYgRmluZE9wdGlvbnNBdFdvcmRTdGFydHMgPyBBdFdvcmRTdGFydHMgOiAw
KQorICAgICAgICB8IChvcHRpb25zICYgRmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dv
cmRTdGFydCA/IFRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0IDogMCkKKyAgICAgICAgfCAo
b3B0aW9ucyAmIEZpbmRPcHRpb25zQmFja3dhcmRzID8gQmFja3dhcmRzIDogMCkKKyAgICAgICAg
fCAob3B0aW9ucyAmIEZpbmRPcHRpb25zV3JhcEFyb3VuZCA/IFdyYXBBcm91bmQgOiAwKTsKK30K
KwogRmluZENvbnRyb2xsZXI6OkZpbmRDb250cm9sbGVyKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAg
OiBtX3dlYlBhZ2Uod2ViUGFnZSkKICAgICAsIG1fZmluZFBhZ2VPdmVybGF5KDApCkBAIC01MSw5
ICs2MCw5IEBAIEZpbmRDb250cm9sbGVyOjp+RmluZENvbnRyb2xsZXIoKQogewogfQogCi12b2lk
IEZpbmRDb250cm9sbGVyOjpjb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGJvb2wgY2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQordm9pZCBGaW5k
Q29udHJvbGxlcjo6Y291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5k
T3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogewotICAgIHVuc2lnbmVk
IG1hdGNoQ291bnQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1hcmtBbGxNYXRjaGVzRm9yVGV4
dChzdHJpbmcsIGNhc2VJbnNlbnNpdGl2ZSA/IFRleHRDYXNlSW5zZW5zaXRpdmUgOiBUZXh0Q2Fz
ZVNlbnNpdGl2ZSwgZmFsc2UsIG1heE1hdGNoQ291bnQpOworICAgIHVuc2lnbmVkIG1hdGNoQ291
bnQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1hcmtBbGxNYXRjaGVzRm9yVGV4dChzdHJpbmcs
IGNvcmUob3B0aW9ucyksIGZhbHNlLCBtYXhNYXRjaENvdW50KTsKICAgICBtX3dlYlBhZ2UtPmNv
cmVQYWdlKCktPnVubWFya0FsbFRleHRNYXRjaGVzKCk7CiAKICAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ291bnRTdHJpbmdNYXRjaGVzKHN0cmluZywgbWF0
Y2hDb3VudCkpOwpAQCAtNjksMTQgKzc4LDExIEBAIHN0YXRpYyBGcmFtZSogZnJhbWVXaXRoU2Vs
ZWN0aW9uKFBhZ2UqIHAKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBGaW5kQ29udHJvbGxlcjo6
ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgRmluZERpcmVjdGlvbiBmaW5kRGlyZWN0
aW9uLCBGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKK3Zv
aWQgRmluZENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZpbmRP
cHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCiB7CiAgICAgbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOwogCi0gICAgVGV4dENhc2VTZW5z
aXRpdml0eSBjYXNlU2Vuc2l0aXZpdHkgPSBmaW5kT3B0aW9ucyAmIEZpbmRPcHRpb25zQ2FzZUlu
c2Vuc2l0aXZlID8gVGV4dENhc2VJbnNlbnNpdGl2ZSA6IFRleHRDYXNlU2Vuc2l0aXZlOwotICAg
IGJvb2wgZm91bmQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRTdHJpbmcoc3RyaW5nLCBj
YXNlU2Vuc2l0aXZpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaW5kRGlyZWN0aW9uID09IEZpbmREaXJlY3Rpb25Gb3J3YXJkID8gV2ViQ29y
ZTo6RmluZERpcmVjdGlvbkZvcndhcmQgOiBXZWJDb3JlOjpGaW5kRGlyZWN0aW9uQmFja3dhcmQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5k
T3B0aW9ucyAmIEZpbmRPcHRpb25zV3JhcEFyb3VuZCk7CisgICAgYm9vbCBmb3VuZCA9IG1fd2Vi
UGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFN0cmluZyhzdHJpbmcsIGNvcmUob3B0aW9ucykpOwogCiAg
ICAgRnJhbWUqIHNlbGVjdGVkRnJhbWUgPSBmcmFtZVdpdGhTZWxlY3Rpb24obV93ZWJQYWdlLT5j
b3JlUGFnZSgpKTsKIApAQCAtOTEsMTAgKzk3LDEwIEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmZp
bmRTdHJpbmcoY29uc3QgU3QKIAogICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGlkRmFpbFRvRmluZFN0cmluZyhzdHJpbmcpKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBzaG91bGRTaG93T3ZlcmxheSA9IGZpbmRPcHRpb25zICYgRmluZE9wdGlvbnNTaG93
T3ZlcmxheTsKKyAgICAgICAgc2hvdWxkU2hvd092ZXJsYXkgPSBvcHRpb25zICYgRmluZE9wdGlv
bnNTaG93T3ZlcmxheTsKIAogICAgICAgICBpZiAoc2hvdWxkU2hvd092ZXJsYXkpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1hcmtB
bGxNYXRjaGVzRm9yVGV4dChzdHJpbmcsIGNhc2VTZW5zaXRpdml0eSwgZmFsc2UsIG1heE1hdGNo
Q291bnQgKyAxKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSBtX3dlYlBhZ2Ut
PmNvcmVQYWdlKCktPm1hcmtBbGxNYXRjaGVzRm9yVGV4dChzdHJpbmcsIGNvcmUob3B0aW9ucyks
IGZhbHNlLCBtYXhNYXRjaENvdW50ICsgMSk7CiAKICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdl
IGhhdmUgbW9yZSBtYXRjaGVzIHRoYW4gYWxsb3dlZC4KICAgICAgICAgICAgIGlmIChtYXRjaENv
dW50ID4gbWF4TWF0Y2hDb3VudCkgewpAQCAtMTA1LDcgKzExMSw3IEBAIHZvaWQgRmluZENvbnRy
b2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgU3QKICAgICAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nKHN0cmluZywgbWF0Y2hDb3VudCkp
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCEoZmluZE9wdGlvbnMgJiBGaW5kT3B0aW9uc1No
b3dGaW5kSW5kaWNhdG9yKSB8fCAhdXBkYXRlRmluZEluZGljYXRvcihzZWxlY3RlZEZyYW1lLCBz
aG91bGRTaG93T3ZlcmxheSkpIHsKKyAgICAgICAgaWYgKCEob3B0aW9ucyAmIEZpbmRPcHRpb25z
U2hvd0ZpbmRJbmRpY2F0b3IpIHx8ICF1cGRhdGVGaW5kSW5kaWNhdG9yKHNlbGVjdGVkRnJhbWUs
IHNob3VsZFNob3dPdmVybGF5KSkgewogICAgICAgICAgICAgLy8gRWl0aGVyIHdlIHNob3VsZG4n
dCBzaG93IHRoZSBmaW5kIGluZGljYXRvciwgb3Igd2UgY291bGRuJ3QgdXBkYXRlIGl0LgogICAg
ICAgICAgICAgaGlkZUZpbmRJbmRpY2F0b3IoKTsKICAgICAgICAgfQpJbmRleDogV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCShyZXZpc2lvbiA3MjgzNCkKKysr
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgRmluZENvbnRyb2xsZXJfaAogI2RlZmluZSBG
aW5kQ29udHJvbGxlcl9oCiAKLSNpbmNsdWRlICJGaW5kT3B0aW9ucy5oIgogI2luY2x1ZGUgIlBh
Z2VPdmVybGF5LmgiCisjaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IEZpbmRDb250
cm9sbGVyKFdlYlBhZ2UqKTsKICAgICB2aXJ0dWFsIH5GaW5kQ29udHJvbGxlcigpOwogCi0gICAg
dm9pZCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIEZpbmREaXJlY3Rpb24sIEZpbmRPcHRpb25z
LCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKKyAgICB2b2lkIGZpbmRTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwogICAgIHZvaWQgaGlk
ZUZpbmRVSSgpOwotICAgIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYsIGJv
b2wgY2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKKyAgICB2b2lkIGNv
dW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4
TWF0Y2hDb3VudCk7CiAgICAgCiAgICAgdm9pZCBoaWRlRmluZEluZGljYXRvcigpOwogCkluZGV4
OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNzI4MzQpCisr
KyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTk4LDkgKzk5OCw5IEBAIHZvaWQgV2ViUGFnZTo6c2V0QWN0aXZlUG9wdXBNZW51KFdlYlBv
cHUKICAgICBtX2FjdGl2ZVBvcHVwTWVudSA9IG1lbnU7CiB9CiAKLXZvaWQgV2ViUGFnZTo6Zmlu
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgdWludDMyX3QgZmluZERpcmVjdGlvbiwgdWlu
dDMyX3QgZmluZE9wdGlvbnMsIHVpbnQzMl90IG1heE1hdGNoQ291bnQpCit2b2lkIFdlYlBhZ2U6
OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG9wdGlvbnMsIHVpbnQz
Ml90IG1heE1hdGNoQ291bnQpCiB7Ci0gICAgbV9maW5kQ29udHJvbGxlci5maW5kU3RyaW5nKHN0
cmluZywgc3RhdGljX2Nhc3Q8RmluZERpcmVjdGlvbj4oZmluZERpcmVjdGlvbiksIHN0YXRpY19j
YXN0PEZpbmRPcHRpb25zPihmaW5kT3B0aW9ucyksIG1heE1hdGNoQ291bnQpOworICAgIG1fZmlu
ZENvbnRyb2xsZXIuZmluZFN0cmluZyhzdHJpbmcsIHN0YXRpY19jYXN0PEZpbmRPcHRpb25zPihv
cHRpb25zKSwgbWF4TWF0Y2hDb3VudCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6aGlkZUZpbmRVSSgp
CkBAIC0xMDA4LDkgKzEwMDgsOSBAQCB2b2lkIFdlYlBhZ2U6OmhpZGVGaW5kVUkoKQogICAgIG1f
ZmluZENvbnRyb2xsZXIuaGlkZUZpbmRVSSgpOwogfQogCi12b2lkIFdlYlBhZ2U6OmNvdW50U3Ry
aW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBjYXNlSW5zZW5zaXRpdmUsIHVp
bnQzMl90IG1heE1hdGNoQ291bnQpCit2b2lkIFdlYlBhZ2U6OmNvdW50U3RyaW5nTWF0Y2hlcyhj
b25zdCBTdHJpbmcmIHN0cmluZywgdWludDMyX3Qgb3B0aW9ucywgdWludDMyX3QgbWF4TWF0Y2hD
b3VudCkKIHsKLSAgICBtX2ZpbmRDb250cm9sbGVyLmNvdW50U3RyaW5nTWF0Y2hlcyhzdHJpbmcs
IGNhc2VJbnNlbnNpdGl2ZSwgbWF4TWF0Y2hDb3VudCk7CisgICAgbV9maW5kQ29udHJvbGxlci5j
b3VudFN0cmluZ01hdGNoZXMoc3RyaW5nLCBzdGF0aWNfY2FzdDxGaW5kT3B0aW9ucz4ob3B0aW9u
cyksIG1heE1hdGNoQ291bnQpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmRpZENoYW5nZVNlbGVjdGVk
SW5kZXhGb3JBY3RpdmVQb3B1cE1lbnUoaW50MzJfdCBuZXdJbmRleCkKSW5kZXg6IFdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDcyODM0KQorKysgV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsOSArMjkwLDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHJlYXBwbHlFZGl0Q29tbWFuZCh1aW50NjRfdCBjb21tYW5k
SUQpOwogICAgIHZvaWQgZGlkUmVtb3ZlRWRpdENvbW1hbmQodWludDY0X3QgY29tbWFuZElEKTsK
IAotICAgIHZvaWQgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBmaW5kRGlyZWN0
aW9uLCB1aW50MzJfdCBmaW5kT3B0aW9ucywgdWludDMyX3QgbWF4TWF0Y2hDb3VudCk7CisgICAg
dm9pZCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IGZpbmRPcHRpb25zLCB1aW50
MzJfdCBtYXhNYXRjaENvdW50KTsKICAgICB2b2lkIGhpZGVGaW5kVUkoKTsKLSAgICB2b2lkIGNv
dW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBib29sIGNhc2VJbnNlbnNpdGl2ZSwgdWlu
dDMyX3QgbWF4TWF0Y2hDb3VudCk7CisgICAgdm9pZCBjb3VudFN0cmluZ01hdGNoZXMoY29uc3Qg
U3RyaW5nJiwgdWludDMyX3QgZmluZE9wdGlvbnMsIHVpbnQzMl90IG1heE1hdGNoQ291bnQpOwog
CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gNzI4MzQpCisrKyBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw5ICs3OCw5IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAgIFNjYWxlV2ViVmlldyhkb3Vi
bGUgc2NhbGUsIFdlYkNvcmU6OkludFBvaW50IG9yaWdpbikKIAogICAgICMgRmluZC4KLSAgICBG
aW5kU3RyaW5nKFdURjo6U3RyaW5nIHN0cmluZywgdWludDMyX3QgZmluZERpcmVjdGlvbiwgdWlu
dDMyX3QgZmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCisgICAgRmluZFN0cmlu
ZyhXVEY6OlN0cmluZyBzdHJpbmcsIHVpbnQzMl90IGZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhN
YXRjaENvdW50KQogICAgIEhpZGVGaW5kVUkoKQotICAgIENvdW50U3RyaW5nTWF0Y2hlcyhXVEY6
OlN0cmluZyBzdHJpbmcsIGJvb2wgY2FzZUluc2Vuc2l0aXZlLCB1bnNpZ25lZCBtYXhNYXRjaENv
dW50KQorICAgIENvdW50U3RyaW5nTWF0Y2hlcyhXVEY6OlN0cmluZyBzdHJpbmcsIHVpbnQzMl90
IGZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogCiAgICAgIyBQb3B1cCBtZW51
LgogICAgIERpZENoYW5nZVNlbGVjdGVkSW5kZXhGb3JBY3RpdmVQb3B1cE1lbnUoaW50MzJfdCBu
ZXdJbmRleCk7CkluZGV4OiBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkocmV2aXNpb24gNzI4MzQpCisrKyBXZWJLaXQy
L3dpbi9XZWJLaXQyLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTUyLDYgKzU1MiwxMCBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxTaGFy
ZWRcV2ViRmluZE9wdGlvbnMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxXZWJLZXlib2FyZEV2ZW50LmNwcCINCiAJCQkJPg0K
IAkJCTwvRmlsZT4NCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzI4MzQpCisrKyBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEwLTExLTI5ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2ViS2l0IE1hYyBwYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS84NjUw
MDg1PiBhZGRpbmcgd29yZC1wcmVmaXggc2VhcmNoIG9wdGlvbnMgdG8gdGhlIHRleHQgc2VhcmNo
IEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUw
MDM4CisgICAgICAgIEJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBEYXJpbiBBZGxlci4KKworICAgICAg
ICAqIFdlYlZpZXcvV2ViRG9jdW1lbnRJbnRlcm5hbC5oOiBSZW1vdmVkIC1tYXJrQWxsTWF0Y2hl
c0ZvclRleHQ6Y2FzZVNlbnNpdGl2ZTpsaW1pdDogYW5kCisgICAgICAgIHJlcGxhY2VkIC1jb3Vu
dE1hdGNoZXNGb3JUZXh0OmNhc2VTZW5zaXRpdmU6bGltaXQ6bWFya01hdGNoZXM6IHdpdGggYSBX
ZWJGaW5kT3B0aW9ucy1iYXNlZAorICAgICAgICBtZXRob2QuIERlY2xhcmVkIGEgV2ViRG9jdW1l
bnRPcHRpb25zU2VhcmNoaW5nIHByb3RvY29sIHdpdGggYSBuZXcgLWZpbmRTdHJpbmc6b3B0aW9u
czoKKyAgICAgICAgbWV0aG9kLiBNYWRlIFdlYkhUTUxWaWV3IGNvbmZvcm0gdG8gdGhlIG5ldyBw
cm90b2NvbC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoY29y
ZU9wdGlvbnMpOiBBZGRlZC4gQ29udmVydHMgV2ViRmluZE9wdGlvbnMgdG8gV2ViQ29yZSBGaW5k
T3B0aW9ucy4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2VhcmNoRm9yOmRpcmVjdGlvbjpjYXNl
U2Vuc2l0aXZlOndyYXA6c3RhcnRJblNlbGVjdGlvbjpdKTogQ2hhbmdlZCB0byB1c2UKKyAgICAg
ICAgLWZpbmRTdHJpbmc6b3B0aW9uczouCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGNvdW50TWF0
Y2hlc0ZvclRleHQ6b3B0aW9uczpsaW1pdDptYXJrTWF0Y2hlczpdKTogQ2hhbmdlZCB0byB1c2Ug
V2ViRmluZE9wdGlvbnMuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGZpbmRTdHJpbmc6b3B0aW9u
czpdKTogQWRkZWQuIENhbGxzIHRocm91Z2ggdG8gV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5n
KCkuCisgICAgICAgICogV2ViVmlldy9XZWJQREZWaWV3Lm1tOgorICAgICAgICAoLVtXZWJQREZW
aWV3IGNvdW50TWF0Y2hlc0ZvclRleHQ6b3B0aW9uczpsaW1pdDptYXJrTWF0Y2hlczpdKTogQ2hh
bmdlZCB0byB1c2UgV2ViRmluZE9wdGlvbnMuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1t
OgorICAgICAgICAoLVtXZWJWaWV3IG1hcmtBbGxNYXRjaGVzRm9yVGV4dDpjYXNlU2Vuc2l0aXZl
OmhpZ2hsaWdodDpsaW1pdDpdKTogTm93IGNhbGxzIHRocm91Z2ggdG8KKyAgICAgICAgLWNvdW50
TWF0Y2hlc0ZvclRleHQ6b3B0aW9uczpoaWdobGlnaHQ6bGltaXQ6bWFya01hdGNoZXMuCisgICAg
ICAgICgtW1dlYlZpZXcgY291bnRNYXRjaGVzRm9yVGV4dDpjYXNlU2Vuc2l0aXZlOmhpZ2hsaWdo
dDpsaW1pdDptYXJrTWF0Y2hlczpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgc2VhcmNo
Rm9yOmRpcmVjdGlvbjpjYXNlU2Vuc2l0aXZlOndyYXA6c3RhcnRJblNlbGVjdGlvbjpdKTogTm93
IGNhbGxzIHRocm91Z2ggdG8KKyAgICAgICAgLWZpbmRTdHJpbmc6b3B0aW9uczouCisgICAgICAg
IChpbmNyZW1lbnRGcmFtZSk6IENoYW5nZWQgdG8gdXNlIFdlYkZpbmRPcHRpb25zLgorICAgICAg
ICAoZmluZFN0cmluZyk6IEFkZGVkIHRoaXMgaGVscGVyIG1ldGhvZCB0aGF0IHBlcmZvcm1zIHRo
ZSBzZWFyY2ggdXNpbmcgdGhlIGJlc3Qgc3VwcG9ydGVkCisgICAgICAgIG1ldGhvZCBmb3IgdGhl
IGRvY3VtZW50IHZpZXcuCisgICAgICAgICgtW1dlYlZpZXcgZmluZFN0cmluZzpvcHRpb25zOl0p
OiBDaGFuZ2VkIC1zZWFyY2hGb3I6Ojo6OiBpbnRvIHRoaXMuCisgICAgICAgICgtW1dlYlZpZXcg
Y2FuTWFya0FsbFRleHRNYXRjaGVzXSk6CisgICAgICAgICgtW1dlYlZpZXcgY291bnRNYXRjaGVz
Rm9yVGV4dDpvcHRpb25zOmhpZ2hsaWdodDpsaW1pdDptYXJrTWF0Y2hlczpdKTogVXBkYXRlZCB0
byB1c2UKKyAgICAgICAgV2ViRmluZE9wdGlvbnMuCisgICAgICAgICgtW1dlYlZpZXcgdW5tYXJr
QWxsVGV4dE1hdGNoZXNdKTogVXBkYXRlZCBmb3IgY2hhbmdlIHRvIGluY3JlbWVudEZyYW1lLgor
ICAgICAgICAoLVtXZWJWaWV3IHJlY3RzRm9yVGV4dE1hdGNoZXNdKTogRGl0dG8uCisgICAgICAg
ICogV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oOiBBZGRlZCBXZWJGaW5kT3B0aW9ucywgLWZpbmRT
dHJpbmc6b3B0aW9uczosIGFuZCBXZWJGaW5kT3B0aW9ucyB2ZXJzaW9uCisgICAgICAgIG9mIGNv
dW50TWF0Y2hlc0ZvclRleHQ6LgorCiAyMDEwLTExLTIyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCkluZGV4OiBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRG9jdW1lbnRJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJEb2N1bWVudEludGVybmFsLmgJKHJldmlzaW9uIDcyODM0KQorKysg
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkRvY3VtZW50SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW1wb3J0IDxXZWJLaXQvV2ViRG9jdW1lbnRQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViSFRNTFZpZXcuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJWaWV3
UHJpdmF0ZS5oPgogCiAjaWYgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8PSBNQUNfT1Nf
WF9WRVJTSU9OXzEwXzQKICNkZWZpbmUgV2ViTlNVSW50ZWdlciB1bnNpZ25lZCBpbnQKQEAgLTYx
LDEyICs2MiwxNCBAQAogQHByb3RvY29sIFdlYk11bHRpcGxlVGV4dE1hdGNoZXMgPE5TT2JqZWN0
PgogLSAodm9pZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOihCT09MKW5ld1Zh
bHVlOwogLSAoQk9PTCltYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOwotLSAoV2ViTlNV
SW50ZWdlciltYXJrQWxsTWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5z
aXRpdmU6KEJPT0wpY2FzZUZsYWcgbGltaXQ6KFdlYk5TVUludGVnZXIpbGltaXQ7Ci0tIChXZWJO
U1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5z
aXRpdmU6KEJPT0wpY2FzZUZsYWcgbGltaXQ6KFdlYk5TVUludGVnZXIpbGltaXQgbWFya01hdGNo
ZXM6KEJPT0wpbWFya01hdGNoZXM7CistIChXZWJOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRl
eHQ6KE5TU3RyaW5nICopc3RyaW5nIG9wdGlvbnM6KFdlYkZpbmRPcHRpb25zKW9wdGlvbnMgbGlt
aXQ6KFdlYk5TVUludGVnZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wpbWFya01hdGNoZXM7CiAt
ICh2b2lkKXVubWFya0FsbFRleHRNYXRjaGVzOwogLSAoTlNBcnJheSAqKXJlY3RzRm9yVGV4dE1h
dGNoZXM7CiBAZW5kCiAKK0Bwcm90b2NvbCBXZWJEb2N1bWVudE9wdGlvbnNTZWFyY2hpbmcgPE5T
T2JqZWN0PgorLSAoQk9PTClmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBvcHRpb25zOihX
ZWJGaW5kT3B0aW9ucylvcHRpb25zOworQGVuZAogCiAvKiBVc2VkIHRvIHNhdmUgYW5kIHJlc3Rv
cmUgc3RhdGUgaW4gdGhlIHZpZXcsIHR5cGljYWxseSB3aGVuIGdvaW5nIGJhY2svZm9yd2FyZCAq
LwogQHByb3RvY29sIF9XZWJEb2N1bWVudFZpZXdTdGF0ZSA8TlNPYmplY3Q+CkBAIC03Niw3ICs3
OSw3IEBACiAtICh2b2lkKXNldFZpZXdTdGF0ZTooaWQpc3RhdGVQTGlzdDsKIEBlbmQKIAotQGlu
dGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViRG9jdW1lbnRJbnRlcm5hbFByb3RvY29scykgPFdlYkRv
Y3VtZW50RWxlbWVudCwgV2ViTXVsdGlwbGVUZXh0TWF0Y2hlcz4KK0BpbnRlcmZhY2UgV2ViSFRN
TFZpZXcgKFdlYkRvY3VtZW50SW50ZXJuYWxQcm90b2NvbHMpIDxXZWJEb2N1bWVudEVsZW1lbnQs
IFdlYk11bHRpcGxlVGV4dE1hdGNoZXMsIFdlYkRvY3VtZW50T3B0aW9uc1NlYXJjaGluZz4KIEBl
bmQKIAogI3VuZGVmIFdlYk5TVUludGVnZXIKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0JKHJldmlzaW9uIDcyODM0KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC01MjUsNiArNTI1LDE2IEBAIHN0YXRpYyBOU0NlbGxTdGF0ZVZh
bHVlIGtpdChUcmlTdGF0ZSBzdGEKICAgICByZXR1cm4gTlNPZmZTdGF0ZTsKIH0KIAorc3RhdGlj
IEZpbmRPcHRpb25zIGNvcmVPcHRpb25zKFdlYkZpbmRPcHRpb25zIG9wdGlvbnMpCit7CisgICAg
cmV0dXJuIChvcHRpb25zICYgV2ViRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUgPyBDYXNlSW5z
ZW5zaXRpdmUgOiAwKQorICAgICAgICB8IChvcHRpb25zICYgV2ViRmluZE9wdGlvbnNBdFdvcmRT
dGFydHMgPyBBdFdvcmRTdGFydHMgOiAwKQorICAgICAgICB8IChvcHRpb25zICYgV2ViRmluZE9w
dGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCA/IFRyZWF0TWVkaWFsQ2FwaXRhbEFz
V29yZFN0YXJ0IDogMCkKKyAgICAgICAgfCAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zQmFja3dh
cmRzID8gQmFja3dhcmRzIDogMCkKKyAgICAgICAgfCAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25z
V3JhcEFyb3VuZCA/IFdyYXBBcm91bmQgOiAwKQorICAgICAgICB8IChvcHRpb25zICYgV2ViRmlu
ZE9wdGlvbnNTdGFydEluU2VsZWN0aW9uID8gU3RhcnRJblNlbGVjdGlvbiA6IDApOworfQorCiBA
aW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXdQcml2YXRlCiAKICsgKHZvaWQpaW5pdGlhbGl6ZQpA
QCAtNjE5NiwxMCArNjIwNiw3IEBAIC0gKEJPT0wpc3VwcG9ydHNUZXh0RW5jb2RpbmcKIAogLSAo
Qk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3YXJk
IGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZyBzdGFydElu
U2VsZWN0aW9uOihCT09MKXN0YXJ0SW5TZWxlY3Rpb24KIHsKLSAgICBpZiAoIVtzdHJpbmcgbGVu
Z3RoXSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3Io
KS0+ZmluZFN0cmluZyhzdHJpbmcsIGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxhZywgc3RhcnRJ
blNlbGVjdGlvbik7CisgICAgcmV0dXJuIFtzZWxmIGZpbmRTdHJpbmc6c3RyaW5nIG9wdGlvbnM6
KGZvcndhcmQgPyAwIDogV2ViRmluZE9wdGlvbnNCYWNrd2FyZHMpIHwgKGNhc2VGbGFnID8gMCA6
IFdlYkZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlKSB8IChzdGFydEluU2VsZWN0aW9uID8gV2Vi
RmluZE9wdGlvbnNTdGFydEluU2VsZWN0aW9uIDogMCldOwogfQogCiBAZW5kCkBAIC02MjE5LDE3
ICs2MjI2LDEyIEBAIC0gKE5TRGljdGlvbmFyeSAqKWVsZW1lbnRBdFBvaW50OihOU1BvaW4KICAg
ICByZXR1cm4gW1tbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJl
c3VsdDpjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChJbnRQ
b2ludChwb2ludCksIGFsbG93KV0gYXV0b3JlbGVhc2VdOwogfQogCi0tIChOU1VJbnRlZ2VyKW1h
cmtBbGxNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9P
TCljYXNlRmxhZyBsaW1pdDooTlNVSW50ZWdlcilsaW1pdAotewotICAgIHJldHVybiBbc2VsZiBj
b3VudE1hdGNoZXNGb3JUZXh0OnN0cmluZyBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIGxpbWl0Omxp
bWl0IG1hcmtNYXRjaGVzOllFU107Ci19Ci0KLS0gKE5TVUludGVnZXIpY291bnRNYXRjaGVzRm9y
VGV4dDooTlNTdHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyBsaW1p
dDooTlNVSW50ZWdlcilsaW1pdCBtYXJrTWF0Y2hlczooQk9PTCltYXJrTWF0Y2hlcworLSAoTlNV
SW50ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBvcHRpb25zOihX
ZWJGaW5kT3B0aW9ucylvcHRpb25zIGxpbWl0OihOU1VJbnRlZ2VyKWxpbWl0IG1hcmtNYXRjaGVz
OihCT09MKW1hcmtNYXRjaGVzCiB7CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNoZXNGb3JUZXh0KHN0cmluZywgY2Fz
ZUZsYWcsIGxpbWl0LCBtYXJrTWF0Y2hlcyk7CisgICAgcmV0dXJuIGNvcmVGcmFtZS0+ZWRpdG9y
KCktPmNvdW50TWF0Y2hlc0ZvclRleHQoc3RyaW5nLCBjb3JlT3B0aW9ucyhvcHRpb25zKSwgbGlt
aXQsIG1hcmtNYXRjaGVzKTsKIH0KIAogLSAodm9pZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhp
Z2hsaWdodGVkOihCT09MKW5ld1ZhbHVlCkBAIC02Mjc0LDYgKzYyNzYsMTQgQEAgLSAoTlNBcnJh
eSAqKXJlY3RzRm9yVGV4dE1hdGNoZXMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCistIChCT09M
KWZpbmRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG9wdGlvbnM6KFdlYkZpbmRPcHRpb25zKW9w
dGlvbnMKK3sKKyAgICBpZiAoIVtzdHJpbmcgbGVuZ3RoXSkKKyAgICAgICAgcmV0dXJuIE5POwor
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBj
b3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhzdHJpbmcsIGNvcmVP
cHRpb25zKG9wdGlvbnMpKTsKK30KKwogQGVuZAogCiAvLyBUaGlzIGlzIHVzZWQgYnkgQXBwS2l0
IGFuZCBpcyBpbmNsdWRlZCBoZXJlIHNvIHRoYXQgV2ViRGF0YVByb3RvY29sU2NoZW1lIGlzIG9u
bHkgZGVmaW5lZCBvbmNlLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0JKHJldmlzaW9u
IDcyODM0KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTYyNiwxOSArNjI2LDEzIEBAIC0gKEJPT0wpbWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
bGlnaHRlZAogICAgIHJldHVybiBOTzsKIH0KIAotLSAoTlNVSW50ZWdlciltYXJrQWxsTWF0Y2hl
c0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcg
bGltaXQ6KE5TVUludGVnZXIpbGltaXQKLXsKLSAgICByZXR1cm4gW3NlbGYgY291bnRNYXRjaGVz
Rm9yVGV4dDpzdHJpbmcgY2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyBsaW1pdDpsaW1pdCBtYXJrTWF0
Y2hlczpZRVNdOwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3Ry
aW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgbGltaXQ6KE5TVUludGVn
ZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wpbWFya01hdGNoZXMKKy0gKE5TVUludGVnZXIpY291
bnRNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczooV2ViRmluZE9wdGlv
bnMpb3B0aW9ucyBsaW1pdDooTlNVSW50ZWdlcilsaW1pdCBtYXJrTWF0Y2hlczooQk9PTCltYXJr
TWF0Y2hlcwogewogICAgIFBERlNlbGVjdGlvbiAqcHJldmlvdXNNYXRjaCA9IG5pbDsKLSAgICBQ
REZTZWxlY3Rpb24gKm5leHRNYXRjaCA9IG5pbDsKICAgICBOU011dGFibGVBcnJheSAqbWF0Y2hl
cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bGltaXRdOwogICAg
IAogICAgIGZvciAoOzspIHsKLSAgICAgICAgbmV4dE1hdGNoID0gW3NlbGYgX25leHRNYXRjaEZv
cjpzdHJpbmcgZGlyZWN0aW9uOllFUyBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIHdyYXA6Tk8gZnJv
bVNlbGVjdGlvbjpwcmV2aW91c01hdGNoIHN0YXJ0SW5TZWxlY3Rpb246Tk9dOworICAgICAgICBQ
REZTZWxlY3Rpb24gKm5leHRNYXRjaCA9IFtzZWxmIF9uZXh0TWF0Y2hGb3I6c3RyaW5nIGRpcmVj
dGlvbjpZRVMgY2FzZVNlbnNpdGl2ZTohKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc0Nhc2VJbnNl
bnNpdGl2ZSkgd3JhcDpOTyBmcm9tU2VsZWN0aW9uOnByZXZpb3VzTWF0Y2ggc3RhcnRJblNlbGVj
dGlvbjpOT107CiAgICAgICAgIGlmICghbmV4dE1hdGNoKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDcyODM0KQorKysgV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2NDUsNiArMjY0
NSwyMSBAQCAtIChmbG9hdClfdmlld1NjYWxlRmFjdG9yCiAgICAgcmV0dXJuIGNvcmVGcmFtZS0+
cGFnZVNjYWxlRmFjdG9yKCk7CiB9CiAKKy0gKE5TVUludGVnZXIpbWFya0FsbE1hdGNoZXNGb3JU
ZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGhpZ2hs
aWdodDooQk9PTCloaWdobGlnaHQgbGltaXQ6KE5TVUludGVnZXIpbGltaXQKK3sKKyAgICByZXR1
cm4gW3NlbGYgY291bnRNYXRjaGVzRm9yVGV4dDpzdHJpbmcgb3B0aW9uczooY2FzZUZsYWcgPyAw
IDogV2ViRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpIGhpZ2hsaWdodDpoaWdobGlnaHQgbGlt
aXQ6bGltaXQgbWFya01hdGNoZXM6WUVTXTsKK30KKworLSAoTlNVSW50ZWdlciljb3VudE1hdGNo
ZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFn
IGhpZ2hsaWdodDooQk9PTCloaWdobGlnaHQgbGltaXQ6KE5TVUludGVnZXIpbGltaXQgbWFya01h
dGNoZXM6KEJPT0wpbWFya01hdGNoZXMKK3sKKyAgICByZXR1cm4gW3NlbGYgY291bnRNYXRjaGVz
Rm9yVGV4dDpzdHJpbmcgb3B0aW9uczooY2FzZUZsYWcgPyAwIDogV2ViRmluZE9wdGlvbnNDYXNl
SW5zZW5zaXRpdmUpIGhpZ2hsaWdodDpoaWdobGlnaHQgbGltaXQ6bGltaXQgbWFya01hdGNoZXM6
bWFya01hdGNoZXNdOworfQorCistIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcg
ZGlyZWN0aW9uOihCT09MKWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFw
OihCT09MKXdyYXBGbGFnIHN0YXJ0SW5TZWxlY3Rpb246KEJPT0wpc3RhcnRJblNlbGVjdGlvbgor
eworICAgIHJldHVybiBbc2VsZiBmaW5kU3RyaW5nOnN0cmluZyBvcHRpb25zOigoZm9yd2FyZCA/
IDAgOiBXZWJGaW5kT3B0aW9uc0JhY2t3YXJkcykgfCAoY2FzZUZsYWcgPyAwIDogV2ViRmluZE9w
dGlvbnNDYXNlSW5zZW5zaXRpdmUpIHwgKHdyYXBGbGFnID8gV2ViRmluZE9wdGlvbnNXcmFwQXJv
dW5kIDogMCkgfCAoc3RhcnRJblNlbGVjdGlvbiA/IFdlYkZpbmRPcHRpb25zU3RhcnRJblNlbGVj
dGlvbiA6IDApKV07Cit9CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIF9XZWJTYWZlRm9yd2Fy
ZGVyCkBAIC0zODI0LDEyICszODM5LDEyIEBAIC0gKHZvaWQpc2V0TmV4dEtleVZpZXc6KE5TVmll
dyAqKXZpZXcKICAgICBbc3VwZXIgc2V0TmV4dEtleVZpZXc6dmlld107CiB9CiAKLXN0YXRpYyBX
ZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJhbWUgKmZyYW1lLCBCT09MIGZvcndhcmQsIEJP
T0wgd3JhcEZsYWcpCitzdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdlYkZyYW1lICpm
cmFtZSwgV2ViRmluZE9wdGlvbnMgb3B0aW9ucyA9IDApCiB7CiAgICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoZnJhbWUpOwotICAgIHJldHVybiBraXQoZm9yd2FyZAotICAgICAgICA/IGNvcmVG
cmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHRXaXRoV3JhcCh3cmFwRmxhZykKLSAgICAgICAgOiBj
b3JlRnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VQcmV2aW91c1dpdGhXcmFwKHdyYXBGbGFnKSk7Cisg
ICAgcmV0dXJuIGtpdCgob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zQmFja3dhcmRzKQorICAgICAg
ICA/IGNvcmVGcmFtZS0+dHJlZSgpLT50cmF2ZXJzZVByZXZpb3VzV2l0aFdyYXAob3B0aW9ucyAm
IFdlYkZpbmRPcHRpb25zV3JhcEFyb3VuZCkKKyAgICAgICAgOiBjb3JlRnJhbWUtPnRyZWUoKS0+
dHJhdmVyc2VOZXh0V2l0aFdyYXAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zV3JhcEFyb3VuZCkp
OwogfQogCiAtIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihC
T09MKWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBG
bGFnCkBAIC00MjU1LDcgKzQyNzAsMTYgQEAgLSAodm9pZCl1bnNjaGVkdWxlRnJvbVJ1bkxvb3A6
KE5TUnVuTG9vcAogICAgICAgICBjb3JlKHNlbGYpLT5yZW1vdmVTY2hlZHVsZVBhaXIoU2NoZWR1
bGVQYWlyOjpjcmVhdGUocnVuTG9vcCwgKENGU3RyaW5nUmVmKW1vZGUpKTsKIH0KIAotLSAoQk9P
TClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3YXJkIGNh
c2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZyBzdGFydEluU2Vs
ZWN0aW9uOihCT09MKXN0YXJ0SW5TZWxlY3Rpb24KK3N0YXRpYyBCT09MIGZpbmRTdHJpbmcoTlNW
aWV3IDxXZWJEb2N1bWVudFNlYXJjaGluZz4gKnNlYXJjaFZpZXcsIE5TU3RyaW5nICpzdHJpbmcs
IFdlYkZpbmRPcHRpb25zIG9wdGlvbnMpCit7CisgICAgaWYgKFtzZWFyY2hWaWV3IGNvbmZvcm1z
VG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViRG9jdW1lbnRPcHRpb25zU2VhcmNoaW5nKV0pCisgICAg
ICAgIHJldHVybiBbKE5TVmlldyA8V2ViRG9jdW1lbnRPcHRpb25zU2VhcmNoaW5nPiAqKXNlYXJj
aFZpZXcgZmluZFN0cmluZzpzdHJpbmcgb3B0aW9uczpvcHRpb25zXTsKKyAgICBpZiAoW3NlYXJj
aFZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJEb2N1bWVudEluY3JlbWVudGFs
U2VhcmNoaW5nKV0pCisgICAgICAgIHJldHVybiBbKE5TVmlldyA8V2ViRG9jdW1lbnRJbmNyZW1l
bnRhbFNlYXJjaGluZz4gKilzZWFyY2hWaWV3IHNlYXJjaEZvcjpzdHJpbmcgZGlyZWN0aW9uOiEo
b3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zQmFja3dhcmRzKSBjYXNlU2Vuc2l0aXZlOiEob3B0aW9u
cyAmIFdlYkZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlKSB3cmFwOiEhKG9wdGlvbnMgJiBXZWJG
aW5kT3B0aW9uc1dyYXBBcm91bmQpIHN0YXJ0SW5TZWxlY3Rpb246ISEob3B0aW9ucyAmIFdlYkZp
bmRPcHRpb25zU3RhcnRJblNlbGVjdGlvbildOworICAgIHJldHVybiBbc2VhcmNoVmlldyBzZWFy
Y2hGb3I6c3RyaW5nIGRpcmVjdGlvbjohKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc0JhY2t3YXJk
cykgY2FzZVNlbnNpdGl2ZTohKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2
ZSkgd3JhcDohIShvcHRpb25zICYgV2ViRmluZE9wdGlvbnNXcmFwQXJvdW5kKV07Cit9CisKKy0g
KEJPT0wpZmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczooV2ViRmluZE9wdGlv
bnMpb3B0aW9ucwogewogICAgIGlmIChfcHJpdmF0ZS0+Y2xvc2VkKQogICAgICAgICByZXR1cm4g
Tk87CkBAIC00MjY3LDcgKzQyOTEsNyBAQCAtIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilz
dHJpbmcgZGlyCiAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFNlYXJjaGluZz4gKnN0YXJ0U2VhcmNo
VmlldyA9IG5pbDsKICAgICBXZWJGcmFtZSAqZnJhbWUgPSBzdGFydEZyYW1lOwogICAgIGRvIHsK
LSAgICAgICAgV2ViRnJhbWUgKm5leHRGcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCBmb3J3
YXJkLCB3cmFwRmxhZyk7CisgICAgICAgIFdlYkZyYW1lICpuZXh0RnJhbWUgPSBpbmNyZW1lbnRG
cmFtZShmcmFtZSwgb3B0aW9ucyk7CiAgICAgICAgIAogICAgICAgICBCT09MIG9ubHlPbmVGcmFt
ZSA9IChmcmFtZSA9PSBuZXh0RnJhbWUpOwogICAgICAgICBBU1NFUlQoIW9ubHlPbmVGcmFtZSB8
fCBmcmFtZSA9PSBzdGFydEZyYW1lKTsKQEAgLTQyNzksMTggKzQzMDMsMTMgQEAgLSAoQk9PTClz
ZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcgogICAgICAgICAgICAgaWYgKGZyYW1lID09
IHN0YXJ0RnJhbWUpCiAgICAgICAgICAgICAgICAgc3RhcnRTZWFyY2hWaWV3ID0gc2VhcmNoVmll
dzsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQk9PTCBmb3VuZFN0cmluZzsKICAgICAgICAg
ICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgaGF2ZSB0byBzZWFyY2ggc29tZSBjb250ZW50IHR3aWNl
OyBzZWUgY29tbWVudCBsYXRlciBpbiB0aGlzIG1ldGhvZC4KLSAgICAgICAgICAgIC8vIFdlIGNh
biBhdm9pZCBldmVyIGRvaW5nIHRoaXMgaW4gdGhlIGNvbW1vbiBvbmUtZnJhbWUgY2FzZSBieSBw
YXNzaW5nIFlFUyBmb3Igd3JhcEZsYWcgCisgICAgICAgICAgICAvLyBXZSBjYW4gYXZvaWQgZXZl
ciBkb2luZyB0aGlzIGluIHRoZSBjb21tb24gb25lLWZyYW1lIGNhc2UgYnkgcGFzc2luZyB0aGUg
d3JhcCBvcHRpb24gdGhyb3VnaCAKICAgICAgICAgICAgIC8vIGhlcmUsIGFuZCB0aGVuIGJhaWxp
bmcgb3V0IGJlZm9yZSB3ZSBnZXQgdG8gdGhlIGNvZGUgdGhhdCB3b3VsZCBzZWFyY2ggYWdhaW4g
aW4gdGhlCiAgICAgICAgICAgICAvLyBzYW1lIGNvbnRlbnQuCi0gICAgICAgICAgICBCT09MIHdy
YXBPblRoaXNQYXNzID0gd3JhcEZsYWcgJiYgb25seU9uZUZyYW1lOwotICAgICAgICAgICAgaWYg
KFtzZWFyY2hWaWV3IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViRG9jdW1lbnRJbmNy
ZW1lbnRhbFNlYXJjaGluZyldKQotICAgICAgICAgICAgICAgIGZvdW5kU3RyaW5nID0gWyhOU1Zp
ZXcgPFdlYkRvY3VtZW50SW5jcmVtZW50YWxTZWFyY2hpbmc+ICopc2VhcmNoVmlldyBzZWFyY2hG
b3I6c3RyaW5nIGRpcmVjdGlvbjpmb3J3YXJkIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWcgd3JhcDp3
cmFwT25UaGlzUGFzcyBzdGFydEluU2VsZWN0aW9uOnN0YXJ0SW5TZWxlY3Rpb25dOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvdW5kU3RyaW5nID0gW3NlYXJjaFZpZXcgc2Vh
cmNoRm9yOnN0cmluZyBkaXJlY3Rpb246Zm9yd2FyZCBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIHdy
YXA6d3JhcE9uVGhpc1Bhc3NdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZm91bmRT
dHJpbmcpIHsKKyAgICAgICAgICAgIFdlYkZpbmRPcHRpb25zIG9wdGlvbnNGb3JUaGlzUGFzcyA9
IG9ubHlPbmVGcmFtZSA/IG9wdGlvbnMgOiAob3B0aW9ucyAmIH5XZWJGaW5kT3B0aW9uc1dyYXBB
cm91bmQpOworCisgICAgICAgICAgICBpZiAoZmluZFN0cmluZyhzZWFyY2hWaWV3LCBzdHJpbmcs
IG9wdGlvbnNGb3JUaGlzUGFzcykpIHsKICAgICAgICAgICAgICAgICBpZiAoZnJhbWUgIT0gc3Rh
cnRGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgW3N0YXJ0RnJhbWUgX2NsZWFyU2VsZWN0aW9u
XTsKICAgICAgICAgICAgICAgICBbW3NlbGYgd2luZG93XSBtYWtlRmlyc3RSZXNwb25kZXI6c2Vh
cmNoVmlld107CkBAIC00MzAzLDE4ICs0MzIyLDEzIEBAIC0gKEJPT0wpc2VhcmNoRm9yOihOU1N0
cmluZyAqKXN0cmluZyBkaXIKICAgICAgICAgZnJhbWUgPSBuZXh0RnJhbWU7CiAgICAgfSB3aGls
ZSAoZnJhbWUgJiYgZnJhbWUgIT0gc3RhcnRGcmFtZSk7CiAgICAgCi0gICAgLy8gSWYgdGhlcmUg
YXJlIG11bHRpcGxlIGZyYW1lcyBhbmQgd3JhcEZsYWcgaXMgdHJ1ZSBhbmQgd2UndmUgdmlzaXRl
ZCBlYWNoIG9uZSB3aXRob3V0IGZpbmRpbmcgYSByZXN1bHQsIHdlIHN0aWxsIG5lZWQgdG8gc2Vh
cmNoIGluIHRoZSAKKyAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZnJhbWVzIGFuZCBXZWJG
aW5kT3B0aW9uc1dyYXBBcm91bmQgaXMgc2V0IGFuZCB3ZSd2ZSB2aXNpdGVkIGVhY2ggb25lIHdp
dGhvdXQgZmluZGluZyBhIHJlc3VsdCwgd2Ugc3RpbGwgbmVlZCB0byBzZWFyY2ggaW4gdGhlIAog
ICAgIC8vIGZpcnN0LXNlYXJjaGVkIGZyYW1lIHVwIHRvIHRoZSBzZWxlY3Rpb24uIEhvd2V2ZXIs
IHRoZSBBUEkgZG9lc24ndCBwcm92aWRlIGEgd2F5IHRvIHNlYXJjaCBvbmx5IHVwIHRvIGEgcGFy
dGljdWxhciBwb2ludC4gVGhlIG9ubHkgCi0gICAgLy8gd2F5IHRvIG1ha2Ugc3VyZSB0aGUgZW50
aXJlIGZyYW1lIGlzIHNlYXJjaGVkIGlzIHRvIHBhc3MgWUVTIGZvciB0aGUgd3JhcEZsYWcuIFdo
ZW4gdGhlcmUgYXJlIG5vIG1hdGNoZXMsIHRoaXMgd2lsbCBzZWFyY2ggYWdhaW4KKyAgICAvLyB3
YXkgdG8gbWFrZSBzdXJlIHRoZSBlbnRpcmUgZnJhbWUgaXMgc2VhcmNoZWQgaXMgdG8gcGFzcyBX
ZWJGaW5kT3B0aW9uc1dyYXBBcm91bmQuIFdoZW4gdGhlcmUgYXJlIG5vIG1hdGNoZXMsIHRoaXMg
d2lsbCBzZWFyY2gKICAgICAvLyBzb21lIGNvbnRlbnQgdGhhdCB3ZSBhbHJlYWR5IHNlYXJjaGVk
IG9uIHRoZSBmaXJzdCBwYXNzLiBJbiB0aGUgd29yc3QgY2FzZSwgd2UgY291bGQgc2VhcmNoIHRo
ZSBlbnRpcmUgY29udGVudHMgb2YgdGhpcyBmcmFtZSB0d2ljZS4KICAgICAvLyBUbyBmaXggdGhp
cywgd2UnZCBuZWVkIHRvIGFkZCBhIG1lY2hhbmlzbSB0byBzcGVjaWZ5IGEgcmFuZ2UgaW4gd2hp
Y2ggdG8gc2VhcmNoLgotICAgIGlmICh3cmFwRmxhZyAmJiBzdGFydFNlYXJjaFZpZXcpIHsKLSAg
ICAgICAgQk9PTCBmb3VuZFN0cmluZzsKLSAgICAgICAgaWYgKFtzdGFydFNlYXJjaFZpZXcgY29u
Zm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJEb2N1bWVudEluY3JlbWVudGFsU2VhcmNoaW5n
KV0pCi0gICAgICAgICAgICBmb3VuZFN0cmluZyA9IFsoTlNWaWV3IDxXZWJEb2N1bWVudEluY3Jl
bWVudGFsU2VhcmNoaW5nPiAqKXN0YXJ0U2VhcmNoVmlldyBzZWFyY2hGb3I6c3RyaW5nIGRpcmVj
dGlvbjpmb3J3YXJkIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWcgd3JhcDpZRVMgc3RhcnRJblNlbGVj
dGlvbjpzdGFydEluU2VsZWN0aW9uXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm91bmRT
dHJpbmcgPSBbc3RhcnRTZWFyY2hWaWV3IHNlYXJjaEZvcjpzdHJpbmcgZGlyZWN0aW9uOmZvcndh
cmQgY2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyB3cmFwOllFU107Ci0gICAgICAgIGlmIChmb3VuZFN0
cmluZykgeworICAgIGlmICgob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zV3JhcEFyb3VuZCkgJiYg
c3RhcnRTZWFyY2hWaWV3KSB7CisgICAgICAgIGlmIChmaW5kU3RyaW5nKHN0YXJ0U2VhcmNoVmll
dywgc3RyaW5nLCBvcHRpb25zKSkgewogICAgICAgICAgICAgW1tzZWxmIHdpbmRvd10gbWFrZUZp
cnN0UmVzcG9uZGVyOnN0YXJ0U2VhcmNoVmlld107CiAgICAgICAgICAgICByZXR1cm4gWUVTOwog
ICAgICAgICB9CkBAIC00NDk2LDIxICs0NTEwLDEzIEBAIC0gKEJPT0wpY2FuTWFya0FsbFRleHRN
YXRjaGVzCiAgICAgICAgIGlmICh2aWV3ICYmICFbdmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHBy
b3RvY29sKFdlYk11bHRpcGxlVGV4dE1hdGNoZXMpXSkKICAgICAgICAgICAgIHJldHVybiBOTzsK
ICAgICAgICAgCi0gICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsIFlFUywgTk8p
OworICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lKTsKICAgICB9IHdoaWxlIChm
cmFtZSk7CiAgICAgCiAgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAoTlNVSW50ZWdlciltYXJrQWxs
TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2Fz
ZUZsYWcgaGlnaGxpZ2h0OihCT09MKWhpZ2hsaWdodCBsaW1pdDooTlNVSW50ZWdlcilsaW1pdAot
ewotICAgIGlmIChfcHJpdmF0ZS0+Y2xvc2VkKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiBbc2VsZiBjb3VudE1hdGNoZXNGb3JUZXh0OnN0cmluZyBjYXNlU2Vuc2l0aXZlOmNhc2VG
bGFnIGhpZ2hsaWdodDpoaWdobGlnaHQgbGltaXQ6bGltaXQgbWFya01hdGNoZXM6WUVTXTsKLX0K
LQotLSAoTlNVSW50ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBj
YXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGhpZ2hsaWdodDooQk9PTCloaWdobGlnaHQgbGlt
aXQ6KE5TVUludGVnZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wpbWFya01hdGNoZXMKKy0gKE5T
VUludGVnZXIpY291bnRNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczoo
V2ViRmluZE9wdGlvbnMpb3B0aW9ucyBoaWdobGlnaHQ6KEJPT0wpaGlnaGxpZ2h0IGxpbWl0OihO
U1VJbnRlZ2VyKWxpbWl0IG1hcmtNYXRjaGVzOihCT09MKW1hcmtNYXRjaGVzCiB7CiAgICAgaWYg
KF9wcml2YXRlLT5jbG9zZWQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDUyNCwxNCArNDUzMCwx
NCBAQCAtIChOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3RyCiAgICAgICAgICAg
ICAgICAgWyhOU1ZpZXcgPFdlYk11bHRpcGxlVGV4dE1hdGNoZXM+Kil2aWV3IHNldE1hcmtlZFRl
eHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQ6aGlnaGxpZ2h0XTsKICAgICAgICAgCiAgICAgICAgICAg
ICBBU1NFUlQobGltaXQgPT0gMCB8fCBtYXRjaENvdW50IDwgbGltaXQpOwotICAgICAgICAgICAg
bWF0Y2hDb3VudCArPSBbKE5TVmlldyA8V2ViTXVsdGlwbGVUZXh0TWF0Y2hlcz4qKXZpZXcgY291
bnRNYXRjaGVzRm9yVGV4dDpzdHJpbmcgY2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyBsaW1pdDpsaW1p
dCA9PSAwID8gMCA6IGxpbWl0IC0gbWF0Y2hDb3VudCBtYXJrTWF0Y2hlczptYXJrTWF0Y2hlc107
CisgICAgICAgICAgICBtYXRjaENvdW50ICs9IFsoTlNWaWV3IDxXZWJNdWx0aXBsZVRleHRNYXRj
aGVzPiopdmlldyBjb3VudE1hdGNoZXNGb3JUZXh0OnN0cmluZyBvcHRpb25zOm9wdGlvbnMgbGlt
aXQ6KGxpbWl0ID09IDAgPyAwIDogbGltaXQgLSBtYXRjaENvdW50KSBtYXJrTWF0Y2hlczptYXJr
TWF0Y2hlc107CiAKICAgICAgICAgICAgIC8vIFN0b3AgbG9va2luZyBpZiB3ZSd2ZSByZWFjaGVk
IHRoZSBsaW1pdC4gQSBsaW1pdCBvZiAwIG1lYW5zIG5vIGxpbWl0LgogICAgICAgICAgICAgaWYg
KGxpbWl0ID4gMCAmJiBtYXRjaENvdW50ID49IGxpbWl0KQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZy
YW1lLCBZRVMsIE5PKTsKKyAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSk7CiAg
ICAgfSB3aGlsZSAoZnJhbWUpOwogICAgIAogICAgIHJldHVybiBtYXRjaENvdW50OwpAQCAtNDU0
OCw3ICs0NTU0LDcgQEAgLSAodm9pZCl1bm1hcmtBbGxUZXh0TWF0Y2hlcwogICAgICAgICBpZiAo
W3ZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJNdWx0aXBsZVRleHRNYXRjaGVz
KV0pCiAgICAgICAgICAgICBbKE5TVmlldyA8V2ViTXVsdGlwbGVUZXh0TWF0Y2hlcz4qKXZpZXcg
dW5tYXJrQWxsVGV4dE1hdGNoZXNdOwogICAgICAgICAKLSAgICAgICAgZnJhbWUgPSBpbmNyZW1l
bnRGcmFtZShmcmFtZSwgWUVTLCBOTyk7CisgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUo
ZnJhbWUpOwogICAgIH0gd2hpbGUgKGZyYW1lKTsKIH0KIApAQCAtNDU4Niw3ICs0NTkyLDcgQEAg
LSAoTlNBcnJheSAqKXJlY3RzRm9yVGV4dE1hdGNoZXMKICAgICAgICAgICAgIFtwb29sIGRyYWlu
XTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShm
cmFtZSwgWUVTLCBOTyk7CisgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUpOwog
ICAgIH0gd2hpbGUgKGZyYW1lKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDcyODM0KQorKysgV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcg
QEAgZXh0ZXJuIE5TU3RyaW5nICpXZWJFbGVtZW50SXNDb250ZW50RWRpdAogZXh0ZXJuIE5TU3Ry
aW5nICpXZWJFbGVtZW50TWVkaWFVUkxLZXk7ICAgICAgICAgIC8vIE5TVVJMIG9mIHRoZSBtZWRp
YSBlbGVtZW50CiAKIC8vIG90aGVyIFdlYkVsZW1lbnREaWN0aW9uYXJ5IGtleXMKLWV4dGVybiBO
U1N0cmluZyAqV2ViRWxlbWVudExpbmtJc0xpdmVLZXk7ICAgICAgICAvLyBOU051bWJlciBvZiBC
T09MIGluZGljdGF0aW5nIHdoZXRoZXIgdGhlIGxpbmsgaXMgbGl2ZSBvciBub3QKK2V4dGVybiBO
U1N0cmluZyAqV2ViRWxlbWVudExpbmtJc0xpdmVLZXk7ICAgICAgICAvLyBOU051bWJlciBvZiBC
T09MIGluZGljYXRpbmcgd2hldGhlciB0aGUgbGluayBpcyBsaXZlIG9yIG5vdAogZXh0ZXJuIE5T
U3RyaW5nICpXZWJFbGVtZW50SXNJblNjcm9sbEJhcktleTsKIAogLy8gT25lIG9mIHRoZSBzdWJ2
aWV3cyBvZiB0aGUgV2ViVmlldyBlbnRlcmVkIGNvbXBvc2l0aW5nIG1vZGUuCkBAIC05Niw2ICs5
NiwxNiBAQCB0eXBlZGVmIGVudW0gewogICAgIFdlYkluamVjdEluVG9wRnJhbWVPbmx5CiB9IFdl
YlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXM7CiAKK2VudW0geworICAgIFdlYkZpbmRPcHRpb25z
Q2FzZUluc2Vuc2l0aXZlID0gMSA8PCAwLAorICAgIFdlYkZpbmRPcHRpb25zQXRXb3JkU3RhcnRz
ID0gMSA8PCAxLAorICAgIFdlYkZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3Rh
cnQgPSAxIDw8IDIsCisgICAgV2ViRmluZE9wdGlvbnNCYWNrd2FyZHMgPSAxIDw8IDMsCisgICAg
V2ViRmluZE9wdGlvbnNXcmFwQXJvdW5kID0gMSA8PCA0LAorICAgIFdlYkZpbmRPcHRpb25zU3Rh
cnRJblNlbGVjdGlvbiA9IDEgPDwgNQorfTsKK3R5cGVkZWYgTlNVSW50ZWdlciBXZWJGaW5kT3B0
aW9uczsKKwogQGludGVyZmFjZSBXZWJDb250cm9sbGVyIDogTlNUcmVlQ29udHJvbGxlciB7CiAg
ICAgSUJPdXRsZXQgV2ViVmlldyAqd2ViVmlldzsKIH0KQEAgLTExNCwxOCArMTI0LDcgQEAgQGlu
dGVyZmFjZSBXZWJWaWV3IChXZWJQZW5kaW5nUHVibGljKQogLSAodm9pZClzY2hlZHVsZUluUnVu
TG9vcDooTlNSdW5Mb29wICopcnVuTG9vcCBmb3JNb2RlOihOU1N0cmluZyAqKW1vZGU7CiAtICh2
b2lkKXVuc2NoZWR1bGVGcm9tUnVuTG9vcDooTlNSdW5Mb29wICopcnVuTG9vcCBmb3JNb2RlOihO
U1N0cmluZyAqKW1vZGU7CiAKLS8qIQotQG1ldGhvZCBzZWFyY2hGb3I6ZGlyZWN0aW9uOmNhc2VT
ZW5zaXRpdmU6d3JhcDpzdGFydEluU2VsZWN0aW9uOgotIEBhYnN0cmFjdCBTZWFyY2hlcyBhIGRv
Y3VtZW50IHZpZXcgZm9yIGEgc3RyaW5nIGFuZCBoaWdobGlnaHRzIHRoZSBzdHJpbmcgaWYgaXQg
aXMgZm91bmQuCi0gU3RhcnRzIHRoZSBzZWFyY2ggZnJvbSB0aGUgY3VycmVudCBzZWxlY3Rpb24u
ICBXaWxsIHNlYXJjaCBhY3Jvc3MgYWxsIGZyYW1lcy4KLSBAcGFyYW0gc3RyaW5nIFRoZSBzdHJp
bmcgdG8gc2VhcmNoIGZvci4KLSBAcGFyYW0gZm9yd2FyZCBZRVMgdG8gc2VhcmNoIGZvcndhcmQs
IE5PIHRvIHNlYWNoIGJhY2t3YXJkcy4KLSBAcGFyYW0gY2FzZUZsYWcgWUVTIHRvIGZvciBjYXNl
LXNlbnNpdGl2ZSBzZWFyY2gsIE5PIGZvciBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4KLSBAcGFy
YW0gd3JhcEZsYWcgWUVTIHRvIHdyYXAgYXJvdW5kLCBOTyB0byBhdm9pZCB3cmFwcGluZy4KLSBA
cGFyYW0gc3RhcnRJblNlbGVjdGlvbiBZRVMgdG8gYmVnaW4gc2VhcmNoIGluIHRoZSBzZWxlY3Rl
ZCB0ZXh0ICh1c2VmdWwgZm9yIGluY3JlbWVudGFsIHNlYXJjaGluZyksIE5PIHRvIGJlZ2luIHNl
YXJjaCBhZnRlciB0aGUgc2VsZWN0ZWQgdGV4dC4KLSBAcmVzdWx0IFlFUyBpZiBmb3VuZCwgTk8g
aWYgbm90IGZvdW5kLgotICovCi0tIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcg
ZGlyZWN0aW9uOihCT09MKWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFw
OihCT09MKXdyYXBGbGFnIHN0YXJ0SW5TZWxlY3Rpb246KEJPT0wpc3RhcnRJblNlbGVjdGlvbjsK
Ky0gKEJPT0wpZmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczooV2ViRmluZE9w
dGlvbnMpb3B0aW9uczsKIAogLSAodm9pZClzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5OihCT09M
KW1haW5GcmFtZURvY3VtZW50UmVhZHk7CiAKQEAgLTE4Miw4ICsxODEsNyBAQCBAaW50ZXJmYWNl
IFdlYlZpZXcgKFdlYlBlbmRpbmdQdWJsaWMpCiAvLyB3aGV0aGVyIG9yIG5vdCB0aGV5IGltcGxl
bWVudCB0aGUgcHJvdG9jb2wuIEZvciBub3cgd2UnbGwganVzdCBkZWFsIHdpdGggSFRNTC4KIC8v
IFRoZXNlIG1ldGhvZHMgYXJlIHN0aWxsIGluIGZsdXg7IGRvbid0IHJlbHkgb24gdGhlbSB5ZXQu
CiAtIChCT09MKWNhbk1hcmtBbGxUZXh0TWF0Y2hlczsKLS0gKFdlYk5TVUludGVnZXIpbWFya0Fs
bE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNh
c2VGbGFnIGhpZ2hsaWdodDooQk9PTCloaWdobGlnaHQgbGltaXQ6KFdlYk5TVUludGVnZXIpbGlt
aXQ7Ci0tIChXZWJOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3Ry
aW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgaGlnaGxpZ2h0OihCT09MKWhpZ2hsaWdo
dCBsaW1pdDooV2ViTlNVSW50ZWdlcilsaW1pdCBtYXJrTWF0Y2hlczooQk9PTCltYXJrTWF0Y2hl
czsKKy0gKFdlYk5TVUludGVnZXIpY291bnRNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJp
bmcgb3B0aW9uczooV2ViRmluZE9wdGlvbnMpb3B0aW9ucyBoaWdobGlnaHQ6KEJPT0wpaGlnaGxp
Z2h0IGxpbWl0OihXZWJOU1VJbnRlZ2VyKWxpbWl0IG1hcmtNYXRjaGVzOihCT09MKW1hcmtNYXRj
aGVzOwogLSAodm9pZCl1bm1hcmtBbGxUZXh0TWF0Y2hlczsKIC0gKE5TQXJyYXkgKilyZWN0c0Zv
clRleHRNYXRjaGVzOwogCkBAIC01NDUsNiArNTQzLDI0IEBAIENvdWxkIGJlIHdvcnRoIGFkZGlu
ZyB0byB0aGUgQVBJLgogLSAodm9pZClfc2NhbGVXZWJWaWV3OihmbG9hdClzY2FsZSBhdE9yaWdp
bjooTlNQb2ludClvcmlnaW47CiAtIChmbG9hdClfdmlld1NjYWxlRmFjdG9yOwogCisvLyBEZXBy
ZWNhdGVkLiBVc2UgdGhlIG1ldGhvZHMgaW4gcGVuZGluZyBwdWJsaWMgYWJvdmUgaW5zdGVhZC4K
Ky0gKFdlYk5TVUludGVnZXIpbWFya0FsbE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmlu
ZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGhpZ2hsaWdodDooQk9PTCloaWdobGlnaHQg
bGltaXQ6KFdlYk5TVUludGVnZXIpbGltaXQ7CistIChXZWJOU1VJbnRlZ2VyKWNvdW50TWF0Y2hl
c0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcg
aGlnaGxpZ2h0OihCT09MKWhpZ2hsaWdodCBsaW1pdDooV2ViTlNVSW50ZWdlcilsaW1pdCBtYXJr
TWF0Y2hlczooQk9PTCltYXJrTWF0Y2hlczsKKworLyohCisgQG1ldGhvZCBzZWFyY2hGb3I6ZGly
ZWN0aW9uOmNhc2VTZW5zaXRpdmU6d3JhcDpzdGFydEluU2VsZWN0aW9uOgorIEBhYnN0cmFjdCBT
ZWFyY2hlcyBhIGRvY3VtZW50IHZpZXcgZm9yIGEgc3RyaW5nIGFuZCBoaWdobGlnaHRzIHRoZSBz
dHJpbmcgaWYgaXQgaXMgZm91bmQuCisgU3RhcnRzIHRoZSBzZWFyY2ggZnJvbSB0aGUgY3VycmVu
dCBzZWxlY3Rpb24uICBXaWxsIHNlYXJjaCBhY3Jvc3MgYWxsIGZyYW1lcy4KKyBAcGFyYW0gc3Ry
aW5nIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci4KKyBAcGFyYW0gZm9yd2FyZCBZRVMgdG8gc2Vh
cmNoIGZvcndhcmQsIE5PIHRvIHNlYWNoIGJhY2t3YXJkcy4KKyBAcGFyYW0gY2FzZUZsYWcgWUVT
IHRvIGZvciBjYXNlLXNlbnNpdGl2ZSBzZWFyY2gsIE5PIGZvciBjYXNlLWluc2Vuc2l0aXZlIHNl
YXJjaC4KKyBAcGFyYW0gd3JhcEZsYWcgWUVTIHRvIHdyYXAgYXJvdW5kLCBOTyB0byBhdm9pZCB3
cmFwcGluZy4KKyBAcGFyYW0gc3RhcnRJblNlbGVjdGlvbiBZRVMgdG8gYmVnaW4gc2VhcmNoIGlu
IHRoZSBzZWxlY3RlZCB0ZXh0ICh1c2VmdWwgZm9yIGluY3JlbWVudGFsIHNlYXJjaGluZyksIE5P
IHRvIGJlZ2luIHNlYXJjaCBhZnRlciB0aGUgc2VsZWN0ZWQgdGV4dC4KKyBAcmVzdWx0IFlFUyBp
ZiBmb3VuZCwgTk8gaWYgbm90IGZvdW5kLgorICovCisvLyBEZXByZWNhdGVkLiBVc2UgZmluZFN0
cmluZy4KKy0gKEJPT0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJP
T0wpZm9yd2FyZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZs
YWcgc3RhcnRJblNlbGVjdGlvbjooQk9PTClzdGFydEluU2VsZWN0aW9uOworCiBAZW5kCiAKIEBp
bnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld1ByaW50aW5nUHJpdmF0ZSkKSW5kZXg6IFdlYktpdFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDcyODM0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTAtMTEtMjkgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEdW1wUmVu
ZGVyVHJlZSBjaGFuZ2VzIGZvciB0ZXN0aW5nIHRoZSB0ZXh0IHNlYXJjaCBBUEkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDAzOAorCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoZmlu
ZFN0cmluZ0NhbGxiYWNrKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNG
dW5jdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVy
Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFj
Lm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcpOgorICAgICAg
ICAqIE1pbmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tOgorICAgICAgICAo
LVtCcm93c2VyV2luZG93Q29udHJvbGxlciBmaW5kOl0pOgorCiAyMDEwLTExLTI5ICBNYXJpbyBT
YW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3MjgzNCkKKysrIFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQyLDYgKzQ0MiwyMiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBleGVjQ29tbWFuZENh
bGxiYWNrKEpTCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQog
CitzdGF0aWMgSlNWYWx1ZVJlZiBmaW5kU3RyaW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBNYWMgaW1wbGVtZW50YXRpb24uCisgICAgaWYgKGFy
Z3VtZW50Q291bnQgPCAyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdGFyZ2V0KEFkb3B0LCBKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIEpTT2JqZWN0UmVmIG9wdGlvbnMgPSBKU1ZhbHVl
VG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xs
ZXItPmZpbmRTdHJpbmcoY29udGV4dCwgdGFyZ2V0LmdldCgpLCBvcHRpb25zKSk7Cit9CisKIHN0
YXRpYyBKU1ZhbHVlUmVmIGNvdW50ZXJWYWx1ZUZvckVsZW1lbnRCeUlkQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKQEAg
LTE5MTYsNiArMTkzMiw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVy
OjoKICAgICAgICAgeyAiZXZhbHVhdGVJbldlYkluc3BlY3RvciIsIGV2YWx1YXRlSW5XZWJJbnNw
ZWN0b3JDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZCIsIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
ICAgICAgICAgeyAiZXhlY0NvbW1hbmQiLCBleGVjQ29tbWFuZENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgImZpbmRTdHJpbmciLCBmaW5kU3RyaW5nQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAg
ICAgeyAiY291bnRlclZhbHVlRm9yRWxlbWVudEJ5SWQiLCBjb3VudGVyVmFsdWVGb3JFbGVtZW50
QnlJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImdyYW50RGVza3RvcE5vdGlmaWNhdGlv
blBlcm1pc3Npb24iLCBncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwgCiAgICAgICAgIHsgImhhc1NwZWxsaW5nTWFya2VyIiwgaGFzU3BlbGxpbmdNYXJr
ZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LApJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiA3MjgzNCkKKysrIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDExICs1MiwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYWxsU2hvdWxkQ2xvc2VPbldl
YlZpZXcoKTsKICAgICBKU1N0cmluZ1JlZiBjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVm
IG5hbWUpOwogICAgIEpTU3RyaW5nUmVmIGNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYg
bmFtZSk7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNvdW50ZXJWYWx1ZUZvckVsZW1l
bnRCeUlkKEpTU3RyaW5nUmVmIGlkKTsKICAgICB2b2lkIGRpc2FibGVJbWFnZUxvYWRpbmcoKTsK
ICAgICB2b2lkIGRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpOwogICAgIHZvaWQgZGlzcGxh
eSgpOwogICAgIHZvaWQgZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYg
dmFsdWUpOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb3VudGVyVmFsdWVGb3JFbGVt
ZW50QnlJZChKU1N0cmluZ1JlZiBpZCk7CisgICAgYm9vbCBmaW5kU3RyaW5nKEpTQ29udGV4dFJl
ZiwgSlNTdHJpbmdSZWYsIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSk7CiAgICAgYm9vbCBpc0Nv
bW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpOwogICAgIHZvaWQga2VlcFdlYkhpc3Rvcnko
KTsKICAgICBKU1ZhbHVlUmVmIGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU0Nv
bnRleHRSZWYsIEpTVmFsdWVSZWYpOwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24g
NzI4MzQpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRy
b2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4Myw2ICs1ODMsNDIgQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQoSgogICAgIFtbbWFpbkZyYW1lIHdlYlZpZXdd
IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6bmFtZU5TIHZhbHVlOnZhbHVlTlNdOwogfQogCiti
b29sIExheW91dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1N0cmluZ1JlZiB0YXJnZXQsIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSkKK3sKKyAgICBX
ZWJGaW5kT3B0aW9ucyBvcHRpb25zID0gMDsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBsZW5ndGhQcm9wZXJ0eU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJsZW5ndGgiKSk7CisgICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCksIDAp
OworICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB0YXJnZXRDRlN0
cmluZyhBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0
YXJnZXQpKTsKKworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCk7CisgICAg
ICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcHRpb25OYW1lKEFk
b3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7CisKKyAgICAgICAg
aWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkNhc2VJ
bnNlbnNpdGl2ZSIpKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJGaW5kT3B0aW9uc0Nhc2VJ
bnNlbnNpdGl2ZTsKKyAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhvcHRpb25OYW1lLmdldCgpLCAiQXRXb3JkU3RhcnRzIikpCisgICAgICAgICAgICBvcHRpb25z
IHw9IFdlYkZpbmRPcHRpb25zQXRXb3JkU3RhcnRzOworICAgICAgICBlbHNlIGlmIChKU1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJUcmVhdE1lZGlhbENhcGl0
YWxBc1dvcmRTdGFydCIpKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJGaW5kT3B0aW9uc1Ry
ZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0OworICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJCYWNrd2FyZHMiKSkKKyAgICAg
ICAgICAgIG9wdGlvbnMgfD0gV2ViRmluZE9wdGlvbnNCYWNrd2FyZHM7CisgICAgICAgIGVsc2Ug
aWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIldyYXBB
cm91bmQiKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViRmluZE9wdGlvbnNXcmFwQXJvdW5k
OworICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5h
bWUuZ2V0KCksICJTdGFydEluU2VsZWN0aW9uIikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdl
YkZpbmRPcHRpb25zU3RhcnRJblNlbGVjdGlvbjsKKyAgICB9CisKKyAgICByZXR1cm4gW1ttYWlu
RnJhbWUgd2ViVmlld10gZmluZFN0cmluZzooTlNTdHJpbmcgKil0YXJnZXRDRlN0cmluZy5nZXQo
KSBvcHRpb25zOm9wdGlvbnNdOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRD
YWNoZU1vZGVsKGludCBjYWNoZU1vZGVsKQogewogICAgIFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRh
cmRQcmVmZXJlbmNlc10gc2V0Q2FjaGVNb2RlbDpjYWNoZU1vZGVsXTsKSW5kZXg6IFdlYktpdFRv
b2xzL01pbmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL01pbmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5t
CShyZXZpc2lvbiA3MjgzNCkKKysrIFdlYktpdFRvb2xzL01pbmlCcm93c2VyL21hYy9Ccm93c2Vy
V2luZG93Q29udHJvbGxlci5tCSh3b3JraW5nIGNvcHkpCkBAIC02OTAsOCArNjkwLDcgQEAgLSAo
SUJBY3Rpb24pZmluZDooaWQpc2VuZGVyCiB7CiAgICAgV0tTdHJpbmdSZWYgc3RyaW5nID0gV0tT
dHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKVtzZW5kZXIgc3RyaW5nVmFsdWVd
KTsKIAotICAgIFdLUGFnZUZpbmRTdHJpbmcoX3dlYlZpZXcucGFnZVJlZiwgc3RyaW5nLCBrV0tG
aW5kRGlyZWN0aW9uRm9yd2FyZCwgCi0gICAgICAgICAgICAgICAgICAgICBrV0tGaW5kT3B0aW9u
c0Nhc2VJbnNlbnNpdGl2ZSB8IGtXS0ZpbmRPcHRpb25zV3JhcEFyb3VuZCB8IGtXS0ZpbmRPcHRp
b25zU2hvd0ZpbmRJbmRpY2F0b3IgfCBrV0tGaW5kT3B0aW9uc1Nob3dPdmVybGF5LCAxMDApOwor
ICAgIFdLUGFnZUZpbmRTdHJpbmcoX3dlYlZpZXcucGFnZVJlZiwgc3RyaW5nLCBrV0tGaW5kT3B0
aW9uc0Nhc2VJbnNlbnNpdGl2ZSB8IGtXS0ZpbmRPcHRpb25zV3JhcEFyb3VuZCB8IGtXS0ZpbmRP
cHRpb25zU2hvd0ZpbmRJbmRpY2F0b3IgfCBrV0tGaW5kT3B0aW9uc1Nob3dPdmVybGF5LCAxMDAp
OwogfQogCiBAZW5kCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MjgzNCkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTExLTI5ICBEYW4g
QmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGV4dCBzZWFyY2ggdGVzdHMsIGluIHBhcnRpY3Vs
YXIgdGVzdGluZyB3b3JkLXByZWZpeCBzZWFyY2guCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDAzOAorCisgICAgICAgICogZWRpdGluZy90ZXh0LWl0
ZXJhdG9yL2ZpbmRTdHJpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5n
L3RleHQtaXRlcmF0b3IvZmluZFN0cmluZy5odG1sOiBBZGRlZC4KKwogMjAxMC0xMS0yOSAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5k
U3RyaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Rl
eHQtaXRlcmF0b3IvZmluZFN0cmluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZFN0cmluZy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ5IEBACitTZWFyY2hpbmcgZm9yIOKAmG/igJkgaW4g4oCY
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXTigJkgd2l0aCBvcHRpb25zIFtdOgorUEFTUzogR290
IGEgbWF0Y2ggYXQgMSwyIGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTMsMTQg
YXMgZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBtYXRjaCBhdCAxNSwxNiBhcyBleHBlY3RlZC4KK1BB
U1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhv4oCZIGlu
IOKAmExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV04oCZIHdpdGggb3B0aW9ucyBbV3JhcEFyb3Vu
ZF06CitQQVNTOiBHb3QgYSBtYXRjaCBhdCAxLDIgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBt
YXRjaCBhdCAxMywxNCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDE1LDE2IGFz
IGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgMSwyIGFzIGV4cGVjdGVkLgorCitTZWFy
Y2hpbmcgZm9yIOKAmG/igJkgaW4g4oCYTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXTigJkgd2l0
aCBvcHRpb25zIFtCYWNrd2FyZHNdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTUsMTYgYXMgZXhw
ZWN0ZWQuCitQQVNTOiBHb3QgYSBtYXRjaCBhdCAxMywxNCBhcyBleHBlY3RlZC4KK1BBU1M6IEdv
dCBhIG1hdGNoIGF0IDEsMiBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBl
Y3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhv4oCZIGluIOKAmExvcmVtIGlwc3VtIGRvbG9yIHNp
dCBhbWV04oCZIHdpdGggb3B0aW9ucyBbQmFja3dhcmRzLCBXcmFwQXJvdW5kXToKK1BBU1M6IEdv
dCBhIG1hdGNoIGF0IDE1LDE2IGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTMs
MTQgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBtYXRjaCBhdCAxLDIgYXMgZXhwZWN0ZWQuCitQ
QVNTOiBHb3QgYSBtYXRjaCBhdCAxNSwxNiBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDi
gJhP4oCZIGluIOKAmExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV04oCZIHdpdGggb3B0aW9ucyBb
XToKK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhP
4oCZIGluIOKAmExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV04oCZIHdpdGggb3B0aW9ucyBbQ2Fz
ZUluc2Vuc2l0aXZlXToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDEsMiBhcyBleHBlY3RlZC4KK1BB
U1M6IEdvdCBhIG1hdGNoIGF0IDEzLDE0IGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2gg
YXQgMTUsMTYgYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYbW91bnTigJkgaW4g4oCY
aW5zdXJtb3VudGFibGUgbW91bnRhaW7igJkgd2l0aCBvcHRpb25zIFtdOgorUEFTUzogR290IGEg
bWF0Y2ggYXQgNSwxMCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDE1LDIwIGFz
IGV4cGVjdGVkLgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcg
Zm9yIOKAmG1vdW504oCZIGluIOKAmGluc3VybW91bnRhYmxlIG1vdW50YWlu4oCZIHdpdGggb3B0
aW9ucyBbQXRXb3JkU3RhcnRzXToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDE1LDIwIGFzIGV4cGVj
dGVkLgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKA
mGNv4oCZIGluIOKAmGNvY29h4oCZIHdpdGggb3B0aW9ucyBbXToKK1BBU1M6IEdvdCBhIG1hdGNo
IGF0IDAsMiBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDIsNCBhcyBleHBlY3Rl
ZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJhj
b+KAmSBpbiDigJhjb2NvYeKAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0c106CitQQVNTOiBH
b3QgYSBtYXRjaCBhdCAwLDIgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhw
ZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYb3Jn4oCZIGluIOKAmHdlYmtpdC5vcmfigJkgd2l0
aCBvcHRpb25zIFtBdFdvcmRTdGFydHNdOgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVk
LgorCitTZWFyY2hpbmcgZm9yIOKAmC5vcmfigJkgaW4g4oCYd2Via2l0Lm9yZ+KAmSB3aXRoIG9w
dGlvbnMgW0F0V29yZFN0YXJ0c106CitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisK
K1NlYXJjaGluZyBmb3Ig4oCYcmfigJkgaW4g4oCYd2Via2l0Lm9yZ+KAmSB3aXRoIG9wdGlvbnMg
W0F0V29yZFN0YXJ0cywgVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnRdOgorUEFTUzogR290
IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmG9yZ+KAmSBpbiDigJh3
ZWJraXQub3Jn4oCZIHdpdGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzLCBUcmVhdE1lZGlhbENhcGl0
YWxBc1dvcmRTdGFydF06CitQQVNTOiBHb3QgYSBtYXRjaCBhdCA3LDEwIGFzIGV4cGVjdGVkLgor
UEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmC5vcmfi
gJkgaW4g4oCYd2Via2l0Lm9yZ+KAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRN
ZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnRdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgNiwxMCBhcyBl
eHBlY3RlZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZv
ciDigJh0Lm9yZ+KAmSBpbiDigJh3ZWJraXQub3Jn4oCZIHdpdGggb3B0aW9ucyBbQXRXb3JkU3Rh
cnRzLCBUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydF06CitQQVNTOiBHb3Qgbm8gbWF0Y2gg
YXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYaXTigJkgaW4g4oCYV2ViS2l04oCZIHdp
dGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzLCBUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydF06
CitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYS2l0
4oCZIGluIOKAmFdlYktpdOKAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRNZWRp
YWxDYXBpdGFsQXNXb3JkU3RhcnRdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgMyw2IGFzIGV4cGVj
dGVkLgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKA
mGJLaXTigJkgaW4g4oCYV2ViS2l04oCZIHdpdGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzLCBUcmVh
dE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydF06CitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0
ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCYZXF1ZXN04oCZIGluIOKAmFhNTEhUVFBSZXF1ZXN04oCZ
IHdpdGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzLCBUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFy
dF06CitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCY
UmVxdWVzdOKAmSBpbiDigJhYTUxIVFRQUmVxdWVzdOKAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0
YXJ0cywgVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnRdOgorUEFTUzogR290IGEgbWF0Y2gg
YXQgNywxNCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKwor
U2VhcmNoaW5nIGZvciDigJhQUmVxdWVzdOKAmSBpbiDigJhYTUxIVFRQUmVxdWVzdOKAmSB3aXRo
IG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnRdOgor
UEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmDY04oCZ
IGluIOKAmExQNjTigJkgd2l0aCBvcHRpb25zIFtBdFdvcmRTdGFydHNdOgorUEFTUzogR290IG5v
IG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmDTigJkgaW4g4oCYTFA2NOKA
mSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3Rh
cnRdOgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKA
mDY04oCZIGluIOKAmExQNjTigJkgd2l0aCBvcHRpb25zIFtBdFdvcmRTdGFydHMsIFRyZWF0TWVk
aWFsQ2FwaXRhbEFzV29yZFN0YXJ0XToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDIsNCBhcyBleHBl
Y3RlZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDi
gJhQNjTigJkgaW4g4oCYTFA2NOKAmSB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0cywgVHJlYXRN
ZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnRdOgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVk
LgorCitTZWFyY2hpbmcgZm9yIOKAmGHigJkgaW4gbG9uZyBzdHJpbmcgd2l0aCBvcHRpb25zIFtB
dFdvcmRTdGFydHNdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgNjE0Niw2MTQ3IGFzIGV4cGVjdGVk
LgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmOC4
geC4o+KAmSBpbiDigJjguIHguKPguJvguLnguYDguKXguIHguIrguIHguIrguIHguKPguIHguKPg
uIHguIrguJrguIfguIHguIrigJkgd2l0aCBvcHRpb25zIFtdOgorUEFTUzogR290IGEgbWF0Y2gg
YXQgMCwyIGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgMTAsMTIgYXMgZXhwZWN0
ZWQuCitQQVNTOiBHb3QgYSBtYXRjaCBhdCAxMiwxNCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBu
byBtYXRjaCBhcyBleHBlY3RlZC4KKworU2VhcmNoaW5nIGZvciDigJjguIHguKPigJkgaW4g4oCY
4LiB4Lij4Lib4Li54LmA4Lil4LiB4LiK4LiB4LiK4LiB4Lij4LiB4Lij4LiB4LiK4Lia4LiH4LiB
4LiK4oCZIHdpdGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzXToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0
IDAsMiBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDEyLDE0IGFzIGV4cGVjdGVk
LgorUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmOC4
geC4iuKAmSBpbiDigJjguIHguKPguJvguLnguYDguKXguIHguIrguIHguIrguIHguKPguIHguKPg
uIHguIrguJrguIfguIHguIrigJkgd2l0aCBvcHRpb25zIFtdOgorUEFTUzogR290IGEgbWF0Y2gg
YXQgNiw4IGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgOCwxMCBhcyBleHBlY3Rl
ZC4KK1BBU1M6IEdvdCBhIG1hdGNoIGF0IDE0LDE2IGFzIGV4cGVjdGVkLgorUEFTUzogR290IGEg
bWF0Y2ggYXQgMTgsMjAgYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3Qgbm8gbWF0Y2ggYXMgZXhwZWN0
ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCY4LiB4LiK4oCZIGluIOKAmOC4geC4o+C4m+C4ueC5gOC4
peC4geC4iuC4geC4iuC4geC4o+C4geC4o+C4geC4iuC4muC4h+C4geC4iuKAmSB3aXRoIG9wdGlv
bnMgW0F0V29yZFN0YXJ0c106CitQQVNTOiBHb3QgYSBtYXRjaCBhdCA2LDggYXMgZXhwZWN0ZWQu
CitQQVNTOiBHb3QgYSBtYXRjaCBhdCA4LDEwIGFzIGV4cGVjdGVkLgorUEFTUzogR290IG5vIG1h
dGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmOC4geC4o+KAmSBpbiBsb25nIHN0
cmluZyB3aXRoIG9wdGlvbnMgW106CitQQVNTOiBHb3QgYSBtYXRjaCBhdCA2MTQ0LDYxNDYgYXMg
ZXhwZWN0ZWQuCitQQVNTOiBHb3QgYSBtYXRjaCBhdCA2MTU0LDYxNTYgYXMgZXhwZWN0ZWQuCitQ
QVNTOiBHb3QgYSBtYXRjaCBhdCA2MTU2LDYxNTggYXMgZXhwZWN0ZWQuCitQQVNTOiBHb3Qgbm8g
bWF0Y2ggYXMgZXhwZWN0ZWQuCisKK1NlYXJjaGluZyBmb3Ig4oCY4LiB4Lij4oCZIGluIGxvbmcg
c3RyaW5nIHdpdGggb3B0aW9ucyBbQXRXb3JkU3RhcnRzXToKK1BBU1M6IEdvdCBhIG1hdGNoIGF0
IDYxNTYsNjE1OCBhcyBleHBlY3RlZC4KK1BBU1M6IEdvdCBubyBtYXRjaCBhcyBleHBlY3RlZC4K
KworU2VhcmNoaW5nIGZvciDigJjguIHguKPigJkgaW4gbG9uZyBzdHJpbmcgd2l0aCBvcHRpb25z
IFtBdFdvcmRTdGFydHNdOgorUEFTUzogR290IGEgbWF0Y2ggYXQgNjE0NCw2MTQ2IGFzIGV4cGVj
dGVkLgorUEFTUzogR290IGEgbWF0Y2ggYXQgNjE1Niw2MTU4IGFzIGV4cGVjdGVkLgorUEFTUzog
R290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLgorCitTZWFyY2hpbmcgZm9yIOKAmOC4geC4iuKAmSBp
biBsb25nIHN0cmluZyB3aXRoIG9wdGlvbnMgW0F0V29yZFN0YXJ0c106CitQQVNTOiBHb3Qgbm8g
bWF0Y2ggYXMgZXhwZWN0ZWQuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy90ZXh0LWl0
ZXJhdG9yL2ZpbmRTdHJpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5n
L3RleHQtaXRlcmF0b3IvZmluZFN0cmluZy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmRTdHJpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMDUgQEAKKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxkaXYgaWQ9ImNvbnRhaW5l
ciI+PC9kaXY+Cis8cHJlIGlkPSJjb25zb2xlIiBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuOyI+
PC9wcmU+Cis8c2NyaXB0PgorICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQorICAgIHsKKyAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlICsgIlxuIikpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHRlc3RGaW5kU3RyaW5nKHRleHQsIHRhcmdldCwgb3B0aW9ucywgZXhwZWN0ZWRSYW5nZXMpCisg
ICAgeworICAgICAgICBsb2coIlNlYXJjaGluZyBmb3IgXHUyMDE4IiArIHRhcmdldCArICJcdTIw
MTkgIiArICh0ZXh0Lmxlbmd0aCA8PSA2NCA/ICJpbiBcdTIwMTgiICsgdGV4dCArICJcdTIwMTkg
IiA6ICJpbiBsb25nIHN0cmluZyAiKSArICJ3aXRoIG9wdGlvbnMgWyIgKyBvcHRpb25zLmpvaW4o
IiwgIikgKyAiXToiKTsKKworICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNvbnRhaW5lciIpOworICAgICAgICBjb250YWluZXIuaW5uZXJUZXh0ID0gdGV4
dDsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisgICAgICAgIHZhciBzZWxlY3Rp
b24gPSBnZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgc2VsZWN0aW9uLmVtcHR5KCk7CisKKyAgICAg
ICAgdmFyIGV4cGVjdGVkUmFuZ2U7CisgICAgICAgIHdoaWxlIChleHBlY3RlZFJhbmdlID0gZXhw
ZWN0ZWRSYW5nZXMuc2hpZnQoKSkgeworICAgICAgICAgICAgdmFyIGZvdW5kID0gbGF5b3V0VGVz
dENvbnRyb2xsZXIuZmluZFN0cmluZyh0YXJnZXQsIG9wdGlvbnMpOworICAgICAgICAgICAgaWYg
KGZvdW5kKSB7CisgICAgICAgICAgICAgICAgdmFyIGFjdHVhbFJhbmdlID0gW3NlbGVjdGlvbi5i
YXNlT2Zmc2V0LCBzZWxlY3Rpb24uZXh0ZW50T2Zmc2V0XTsKKyAgICAgICAgICAgICAgICBpZiAo
ZXhwZWN0ZWRSYW5nZVswXSAhPT0gYWN0dWFsUmFuZ2VbMF0gfHwgZXhwZWN0ZWRSYW5nZVsxXSAh
PT0gYWN0dWFsUmFuZ2VbMV0pCisgICAgICAgICAgICAgICAgICAgIGxvZygiRkFJTDogRXhwZWN0
ZWQgYSBtYXRjaCBhdCAiICsgZXhwZWN0ZWRSYW5nZSArICIgYnV0IGdvdCBhIG1hdGNoIGF0ICIg
KyBhY3R1YWxSYW5nZSArICIgaW5zdGVhZC4iKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIGxvZygiUEFTUzogR290IGEgbWF0Y2ggYXQgIiArIGV4cGVjdGVkUmFu
Z2UgKyAiIGFzIGV4cGVjdGVkLiIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChleHBlY3RlZFJh
bmdlLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBsb2coIkZBSUw6IEV4cGVjdGVkICIgKyBleHBl
Y3RlZFJhbmdlICsgIiBidXQgZ290IG5vIG1hdGNoLiIpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGxvZygiUEFTUzogR290IG5vIG1hdGNoIGFzIGV4cGVjdGVkLiIpOworICAg
ICAgICB9CisgICAgICAgIGNvbnRhaW5lci5pbm5lclRleHQgPSAiIjsKKyAgICAgICAgbG9nKCIi
KTsKKyAgICB9CisKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAg
ICB0ZXN0RmluZFN0cmluZygiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQiLCAibyIsIFtdLCBb
WzEsIDJdLCBbMTMsIDE0XSwgWzE1LCAxNl0sIFtdXSk7CisgICAgdGVzdEZpbmRTdHJpbmcoIkxv
cmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0IiwgIm8iLCBbIldyYXBBcm91bmQiXSwgW1sxLCAyXSwg
WzEzLCAxNF0sIFsxNSwgMTZdLCBbMSwgMl1dKTsKKyAgICB0ZXN0RmluZFN0cmluZygiTG9yZW0g
aXBzdW0gZG9sb3Igc2l0IGFtZXQiLCAibyIsIFsiQmFja3dhcmRzIl0sIFtbMTUsIDE2XSwgWzEz
LCAxNF0sIFsxLCAyXSwgW11dKTsKKyAgICB0ZXN0RmluZFN0cmluZygiTG9yZW0gaXBzdW0gZG9s
b3Igc2l0IGFtZXQiLCAibyIsIFsiQmFja3dhcmRzIiwgIldyYXBBcm91bmQiXSwgW1sxNSwgMTZd
LCBbMTMsIDE0XSwgWzEsIDJdLCBbMTUsIDE2XV0pOworICAgIHRlc3RGaW5kU3RyaW5nKCJMb3Jl
bSBpcHN1bSBkb2xvciBzaXQgYW1ldCIsICJPIiwgW10sIFtbXV0pOworICAgIHRlc3RGaW5kU3Ry
aW5nKCJMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCIsICJPIiwgWyJDYXNlSW5zZW5zaXRpdmUi
XSwgW1sxLCAyXSwgWzEzLCAxNF0sIFsxNSwgMTZdXSk7CisKKyAgICB0ZXN0RmluZFN0cmluZygi
aW5zdXJtb3VudGFibGUgbW91bnRhaW4iLCAibW91bnQiLCBbXSwgW1s1LCAxMF0sIFsxNSwgMjBd
LCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKCJpbnN1cm1vdW50YWJsZSBtb3VudGFpbiIsICJt
b3VudCIsIFsiQXRXb3JkU3RhcnRzIl0sIFtbMTUsIDIwXSwgW11dKTsKKworICAgIHRlc3RGaW5k
U3RyaW5nKCJjb2NvYSIsICJjbyIsIFtdLCBbWzAsIDJdLCBbMiwgNF0sIFtdXSk7CisgICAgdGVz
dEZpbmRTdHJpbmcoImNvY29hIiwgImNvIiwgWyJBdFdvcmRTdGFydHMiXSwgW1swLCAyXSwgW11d
KTsKKworICAgIHRlc3RGaW5kU3RyaW5nKCJ3ZWJraXQub3JnIiwgIm9yZyIsIFsiQXRXb3JkU3Rh
cnRzIl0sIFtbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKCJ3ZWJraXQub3JnIiwgIi5vcmciLCBb
IkF0V29yZFN0YXJ0cyJdLCBbW11dKTsKKworICAgIHRlc3RGaW5kU3RyaW5nKCJ3ZWJraXQub3Jn
IiwgInJnIiwgWyJBdFdvcmRTdGFydHMiLCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQi
XSwgW1tdXSk7CisgICAgdGVzdEZpbmRTdHJpbmcoIndlYmtpdC5vcmciLCAib3JnIiwgWyJBdFdv
cmRTdGFydHMiLCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiXSwgW1s3LCAxMF0sIFtd
XSk7CisgICAgdGVzdEZpbmRTdHJpbmcoIndlYmtpdC5vcmciLCAiLm9yZyIsIFsiQXRXb3JkU3Rh
cnRzIiwgIlRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0Il0sIFtbNiwgMTBdLCBbXV0pOwor
ICAgIHRlc3RGaW5kU3RyaW5nKCJ3ZWJraXQub3JnIiwgInQub3JnIiwgWyJBdFdvcmRTdGFydHMi
LCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiXSwgW1tdXSk7CisKKyAgICB0ZXN0Rmlu
ZFN0cmluZygiV2ViS2l0IiwgIml0IiwgWyJBdFdvcmRTdGFydHMiLCAiVHJlYXRNZWRpYWxDYXBp
dGFsQXNXb3JkU3RhcnQiXSwgW1tdXSk7CisgICAgdGVzdEZpbmRTdHJpbmcoIldlYktpdCIsICJL
aXQiLCBbIkF0V29yZFN0YXJ0cyIsICJUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCJdLCBb
WzMsIDZdLCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKCJXZWJLaXQiLCAiYktpdCIsIFsiQXRX
b3JkU3RhcnRzIiwgIlRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0Il0sIFtbXV0pOworCisg
ICAgdGVzdEZpbmRTdHJpbmcoIlhNTEhUVFBSZXF1ZXN0IiwgImVxdWVzdCIsIFsiQXRXb3JkU3Rh
cnRzIiwgIlRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0Il0sIFtbXV0pOworICAgIHRlc3RG
aW5kU3RyaW5nKCJYTUxIVFRQUmVxdWVzdCIsICJSZXF1ZXN0IiwgWyJBdFdvcmRTdGFydHMiLCAi
VHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiXSwgW1s3LCAxNF0sIFtdXSk7CisgICAgdGVz
dEZpbmRTdHJpbmcoIlhNTEhUVFBSZXF1ZXN0IiwgIlBSZXF1ZXN0IiwgWyJBdFdvcmRTdGFydHMi
LCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiXSwgW1tdXSk7CisKKyAgICB0ZXN0Rmlu
ZFN0cmluZygiTFA2NCIsICI2NCIsIFsiQXRXb3JkU3RhcnRzIl0sIFtbXV0pOworICAgIHRlc3RG
aW5kU3RyaW5nKCJMUDY0IiwgIjQiLCBbIkF0V29yZFN0YXJ0cyIsICJUcmVhdE1lZGlhbENhcGl0
YWxBc1dvcmRTdGFydCJdLCBbW11dKTsKKyAgICB0ZXN0RmluZFN0cmluZygiTFA2NCIsICI2NCIs
IFsiQXRXb3JkU3RhcnRzIiwgIlRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0Il0sIFtbMiwg
NF0sIFtdXSk7CisgICAgdGVzdEZpbmRTdHJpbmcoIkxQNjQiLCAiUDY0IiwgWyJBdFdvcmRTdGFy
dHMiLCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiXSwgW1tdXSk7CisKKyAgICBjb25z
dCBzZWFyY2hCdWZmZXJTaXplID0gODE5MjsKKyAgICBjb25zdCBzZWFyY2hCdWZmZXJPdmVybGFw
U2l6ZSA9IHNlYXJjaEJ1ZmZlclNpemUgLyA0OworICAgIGNvbnN0IHNlYXJjaEJ1ZmZlclVub3Zl
cmxhcHBlZFNpemUgPSBzZWFyY2hCdWZmZXJTaXplIC0gc2VhcmNoQnVmZmVyT3ZlcmxhcFNpemU7
CisgICAgdmFyIGJ1ZmZlclNpemVkU3RyaW5nID0gIlgiOworICAgIHdoaWxlIChidWZmZXJTaXpl
ZFN0cmluZy5sZW5ndGggPCBzZWFyY2hCdWZmZXJTaXplKQorICAgICAgICBidWZmZXJTaXplZFN0
cmluZyArPSBidWZmZXJTaXplZFN0cmluZzsKKyAgICBidWZmZXJTaXplZFN0cmluZyA9IGJ1ZmZl
clNpemVkU3RyaW5nLnN1YnN0cmluZygwLCBzZWFyY2hCdWZmZXJTaXplKTsKKworICAgIHRlc3RG
aW5kU3RyaW5nKGJ1ZmZlclNpemVkU3RyaW5nLnN1YnN0cmluZygwLCBzZWFyY2hCdWZmZXJVbm92
ZXJsYXBwZWRTaXplIC0gMikgKyAiIGJhIGEiICsgYnVmZmVyU2l6ZWRTdHJpbmcsICJhIiwgWyJB
dFdvcmRTdGFydHMiXSwgW1tzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplICsgMiwgc2VhcmNo
QnVmZmVyVW5vdmVybGFwcGVkU2l6ZSArIDNdLCBbXV0pOworCisgICAgdmFyIHRoYWlXb3JkcyA9
IFsKKyAgICAgICAgIlx1MGUwMVx1MGUyMyIsCisgICAgICAgICJcdTBlMWJcdTBlMzlcdTBlNDBc
dTBlMjUiLAorICAgICAgICAiXHUwZTAxXHUwZTBhIiwKKyAgICAgICAgIlx1MGUwMVx1MGUwYVx1
MGUwMVx1MGUyMyIsIC8vIHRoYWlXb3Jkc1syXSArIHRoYWlXb3Jkc1swXQorICAgICAgICAiXHUw
ZTAxXHUwZTIzXHUwZTAxXHUwZTBhIiwgLy8gdGhhaVdvcmRzWzBdICsgdGhhaVdvcmRzWzJdCisg
ICAgICAgICJcdTBlMWFcdTBlMDdcdTBlMDFcdTBlMGEiLCAvLyBlbmRzIHdpdGggdGhhaVdvcmRz
WzJdCisgICAgXTsKKworICAgIHRlc3RGaW5kU3RyaW5nKHRoYWlXb3Jkcy5qb2luKCIiKSwgdGhh
aVdvcmRzWzBdLCBbXSwgW1swLCAyXSwgWzEwLCAxMl0sIFsxMiwgMTRdLCBbXV0pOworICAgIHRl
c3RGaW5kU3RyaW5nKHRoYWlXb3Jkcy5qb2luKCIiKSwgdGhhaVdvcmRzWzBdLCBbIkF0V29yZFN0
YXJ0cyJdLCBbWzAsIDJdLCBbMTIsIDE0XSwgW11dKTsKKworICAgIHRlc3RGaW5kU3RyaW5nKHRo
YWlXb3Jkcy5qb2luKCIiKSwgdGhhaVdvcmRzWzJdLCBbXSwgW1s2LCA4XSwgWzgsIDEwXSwgWzE0
LCAxNl0sIFsxOCwgMjBdLCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKHRoYWlXb3Jkcy5qb2lu
KCIiKSwgdGhhaVdvcmRzWzJdLCBbIkF0V29yZFN0YXJ0cyJdLCBbWzYsIDhdLCBbOCwgMTBdLCBb
XV0pOworCisgICAgdGVzdEZpbmRTdHJpbmcoYnVmZmVyU2l6ZWRTdHJpbmcuc3Vic3RyaW5nKDAs
IHNlYXJjaEJ1ZmZlclVub3ZlcmxhcHBlZFNpemUpICsgdGhhaVdvcmRzLmpvaW4oIiIpICsgYnVm
ZmVyU2l6ZWRTdHJpbmcsIHRoYWlXb3Jkc1swXSwgW10sIFtbc2VhcmNoQnVmZmVyVW5vdmVybGFw
cGVkU2l6ZSwgc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6ZSArIDJdLCBbc2VhcmNoQnVmZmVy
VW5vdmVybGFwcGVkU2l6ZSArIDEwLCBzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplICsgMTJd
LCBbc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6ZSArIDEyLCBzZWFyY2hCdWZmZXJVbm92ZXJs
YXBwZWRTaXplICsgMTRdLCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKGJ1ZmZlclNpemVkU3Ry
aW5nLnN1YnN0cmluZygwLCBzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplKSArIHRoYWlXb3Jk
cy5qb2luKCIiKSArIGJ1ZmZlclNpemVkU3RyaW5nLCB0aGFpV29yZHNbMF0sIFsiQXRXb3JkU3Rh
cnRzIl0sIFtbc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6ZSArIDEyLCBzZWFyY2hCdWZmZXJV
bm92ZXJsYXBwZWRTaXplICsgMTRdLCBbXV0pOworICAgIHRlc3RGaW5kU3RyaW5nKGJ1ZmZlclNp
emVkU3RyaW5nLnN1YnN0cmluZygwLCBzZWFyY2hCdWZmZXJVbm92ZXJsYXBwZWRTaXplIC0gMSkg
KyAiICIgKyB0aGFpV29yZHMuam9pbigiIikgKyBidWZmZXJTaXplZFN0cmluZywgdGhhaVdvcmRz
WzBdLCBbIkF0V29yZFN0YXJ0cyJdLCBbW3NlYXJjaEJ1ZmZlclVub3ZlcmxhcHBlZFNpemUsIHNl
YXJjaEJ1ZmZlclVub3ZlcmxhcHBlZFNpemUgKyAyXSwgW3NlYXJjaEJ1ZmZlclVub3ZlcmxhcHBl
ZFNpemUgKyAxMiwgc2VhcmNoQnVmZmVyVW5vdmVybGFwcGVkU2l6ZSArIDE0XSwgW11dKTsKKyAg
ICB0ZXN0RmluZFN0cmluZyhidWZmZXJTaXplZFN0cmluZy5zdWJzdHJpbmcoMCwgc2VhcmNoQnVm
ZmVyVW5vdmVybGFwcGVkU2l6ZSAtIDMpICsgIiAiICsgdGhhaVdvcmRzWzRdICsgYnVmZmVyU2l6
ZWRTdHJpbmcsIHRoYWlXb3Jkc1syXSwgWyJBdFdvcmRTdGFydHMiXSwgW1tdXSk7CisKKyAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ2
aXNpYmlsaXR5Iik7Cis8L3NjcmlwdD4K
</data>
<flag name="review"
          id="65810"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>