<?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>213460</bug_id>
          
          <creation_ts>2020-06-22 07:17:54 -0700</creation_ts>
          <short_desc>Replace unnecessary up-conversion of Strings</short_desc>
          <delta_ts>2022-04-19 10:37:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>213588</dependson>
    
    <dependson>213631</dependson>
    
    <dependson>213633</dependson>
    
    <dependson>213635</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>mkwst</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1665009</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-22 07:17:54 -0700</bug_when>
    <thetext>Replace unnecessary upconversion of Strings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665010</commentid>
    <comment_count>1</comment_count>
      <attachid>402468</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-22 07:20:11 -0700</bug_when>
    <thetext>Created attachment 402468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665029</commentid>
    <comment_count>2</comment_count>
      <attachid>402473</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-22 08:02:58 -0700</bug_when>
    <thetext>Created attachment 402473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665051</commentid>
    <comment_count>3</comment_count>
      <attachid>402479</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-22 08:56:34 -0700</bug_when>
    <thetext>Created attachment 402479
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665060</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-22 09:19:52 -0700</bug_when>
    <thetext>This change introduces a new WTF helper function to access the character buffer of a String like type, regardless of whether it is 8bit or 16bit via a generic lambda (or any type of function overloaded for both LChar* and UChar*. The function, currently named WTF::getCharacters(...), looks like this:

template&lt;typename StringType, typename Function&gt; decltype(auto) getCharacters(const StringType&amp; string, Function&amp;&amp; functor)
{
    if (string.is8Bit()) {
        auto* ptr = string.characters8();
        return functor(ptr, ptr + string.length());
    }
    auto* ptr = string.characters16();
    return functor(ptr, ptr + string.length());
}

and is used like this:

{
    ....
    return WTF::getCharacters(string, [](auto charactersBegin, auto charactersEnd) {
        /* do work with characters here */
    });
}


This can replace code that currently looks like this:


{
    if (string.is8Bit()) {
        /* do work on string.characters8() */
    } else {
        /* do exactly the same work on string.characters16() */
    });
}


and more importantly, can help remove code that does unnecessary up conversion and looks like this:

{
     auto characters = StringView(string).upconvertedCharacters();
     const UChar* begin = characters;
     const UChar* end = begin + value.length();

     /* do work on characters */
}



---

A few problems:

1) I am not sold on the name WTF::getCharacters(...). Some alternatives I thought of are:
    - WTF::accessCharacters(...)
    - WTF::characters(...)
  I am sure there are more.

2) I am not sold on this being a global function. It could also make sense to make it a member of the string classes:
    - e.g. 
        return string.getCharacters([] (...) {
            ...
        });

3) It&apos;s a bit annoying that you don&apos;t have easy access to the character type in the lambda. Currently, the idiom I used to get it was:
    using CharacterType = std::remove_pointer_t&lt;decltype(charactersBegin)&gt;;


4) I am not sure passing the beginning and end pointers to the lambda is the best interface for all. Other interfaces might be:
    - Just the beginning pointer. Let the caller construct the end via begin + string.length().
    - The beginning pointer and length.
    - A struct with the characters and length. This would have the benefit of somewhere to put the CharacterType without requiring a std::remove_pointer_t e.g.:
        return getCharacters(string, [] (auto characters) {
            using CharacterType = decltype(characters)::CharacterType;
            auto being = characters.begin();
            auto end = characters.end();
            auto length = characters.length();
            ...
        });</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665066</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-22 09:29:10 -0700</bug_when>
    <thetext>I like the struct idea. It could be helpful outside the getCharacters function. It’s sort of a CharacterRange. Could even have begin/end functions so it can be used to iterate code units.

It’s like a compile time character type version of StringView. Almost wish it had all the same operations as StringView.

The verb to me seems sort of like “read” as opposed to “get”.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665109</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-22 12:23:25 -0700</bug_when>
    <thetext>OK, on your 4 comments:

1) I like readCharacters for this, although tastes may differ. accessCharacters sounds read/write to me.

2) Global function is better for generic programming. I think we may want to implement this for NSString and CFStringRef for example; sadly not sure when we can efficiently make them use the 8-bit path; if we knew they were all ASCII and stored as 8-bit.

3) Not that annoying.

4) Like the struct better than the separate arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665252</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-22 18:39:39 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #6)
&gt; OK, on your 4 comments:
&gt; 
&gt; 1) I like readCharacters for this, although tastes may differ.
&gt; accessCharacters sounds read/write to me.
&gt; 
&gt; 2) Global function is better for generic programming. I think we may want to
&gt; implement this for NSString and CFStringRef for example; sadly not sure when
&gt; we can efficiently make them use the 8-bit path; if we knew they were all
&gt; ASCII and stored as 8-bit.
&gt; 
&gt; 3) Not that annoying.
&gt; 
&gt; 4) Like the struct better than the separate arguments.

I prototyped using a relatively plain class on its own. Something like this:

    template&lt;typename CharacterType&gt;
    class StringRange {
    public:
        constexpr const CharacterType* begin() const;
        constexpr const CharacterType* end() const;

        constexpr unsigned length() const;

        ... rest of StingView API

    private:
        CharacterType* m_begin;
        CharacterType* m_end;
    };

And it is kind of annoying to use in practice for these parsing routines, because you end up just pulling out the begin and end pointers. For instance, from SVGStringList.h:

    bool parse(const String&amp; data, UChar delimiter)
    {
        clearItems();

        return WTF::readCharacters(data, [&amp;](auto characters) {
            auto ptr = characters.begin();
            while (ptr &lt; characters.end()) {
                auto* start = ptr;
                while (ptr &lt; end &amp;&amp; *ptr != delimiter &amp;&amp; !isSVGSpace(*ptr))
                    ptr++;
                if (ptr == start)
                    break;
                m_items.append(String(start, ptr - start));
                skipOptionalSVGSpacesOrDelimiter(ptr, end, delimiter);
            }

            return ptr == characters.end();
        });
    }

It&apos;s not horrible, but it&apos;s also not that much of an improvement over just passing the two pointers. It&apos;s actuall one line longer.

Another option would be a class that acted more stream like:

    template&lt;typename CharacterType&gt;
    class StringParsingBuffer {
    public:
        constexpr const CharacterType* currentPosition() const;
        constexpr const CharacterType* end() const;

        constexpr CharacterType current() const { return *m_currentPosition; }

        constexpr unsigned charactersRemaining() const;

        constexpr bool hasCharactersRemaining() const { return m_currentPosition &lt; m_end; }
        constexpr bool atEnd() const { return m_currentPosition == m_end; } 

        constexpr bool advancePosition()
        constexpr bool advancePositionBy(unsigned);

        ... rest of StingView API

    private:
        CharacterType* m_currentPosition;
        CharacterType* m_end;
    };

Again, with that same SVGStringList.h example:

    bool parse(const String&amp; data, UChar delimiter)
    {
        clearItems();

        return WTF::readCharacters(data, [&amp;](auto characters) {
            while (characters.hasCharactersRemaining()) {
                auto start = characters.currentPosition();
                while (characters.hasCharactersRemaining() &amp;&amp; characters.current() != delimiter &amp;&amp; !isSVGSpace(characters.current()))
                    characters.advance(); /* or could add StringParsingBuffer::operator++ */
                if (characters.currentPosition() == start)
                    break;
                m_items.append(String(start, characters.currentPosition() - start));
                skipOptionalSVGSpacesOrDelimiter(characters, delimiter); /* This imagines a world where skipOptionalSVGSpacesOrDelimiter was updated to take a StringParsingBuffer */
            }

            return characters.atEnd();
        });
    }

We would want to make that inner while loop a skipUntil() by making those helpers a little more generic, but you get the idea. I would want to make the line:

   m_items.append(String(start, characters.currentPosition() - start));

easier to read as well, but I haven&apos;t fully thought of a good way. Maybe just making a String() constructor that takes two pointers:

   m_items.append(String { start, characters.currentPosition() });


Whay are your thoughts on this type of data structure / approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665615</commentid>
    <comment_count>8</comment_count>
      <attachid>402614</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-23 18:38:28 -0700</bug_when>
    <thetext>Created attachment 402614
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665629</commentid>
    <comment_count>9</comment_count>
      <attachid>402619</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-23 19:56:10 -0700</bug_when>
    <thetext>Created attachment 402619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665764</commentid>
    <comment_count>10</comment_count>
      <attachid>402658</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-24 09:38:02 -0700</bug_when>
    <thetext>Created attachment 402658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665807</commentid>
    <comment_count>11</comment_count>
      <attachid>402665</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-24 11:38:34 -0700</bug_when>
    <thetext>Created attachment 402665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665817</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-24 12:08:47 -0700</bug_when>
    <thetext>Not a direct answers at all, but with the approach of calling it StringParsingBuffer, I think we can do all sorts of tricks to try to make it easy to use:

1) maybe the whole struct kind of acts like a smart pointer that just knows where the end is? works with styles where we advance the pointer as we parse

2) overload various parsing functions to use it directly, one at a time?

3) pull out the pointers and drop the buffer entirely for functions that are really full of things only pointers can do?

4) add lifetime checking like what we have in StringView if you use the buffer directly, so it’s not easy to accidentally keep it; just making it nonmovable and noncopyable would be sufficient for the getCharacters style, but if we ever use it as a return value, then this could be helpful

5) be willing to do other clever/tricky things to make it integrate really well with code that thinks it’s dealing with pointers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665818</commentid>
    <comment_count>13</comment_count>
      <attachid>402670</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-24 12:09:37 -0700</bug_when>
    <thetext>Created attachment 402670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665858</commentid>
    <comment_count>14</comment_count>
      <attachid>402682</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-24 13:56:58 -0700</bug_when>
    <thetext>Created attachment 402682
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665862</commentid>
    <comment_count>15</comment_count>
      <attachid>402682</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-24 14:07:05 -0700</bug_when>
    <thetext>Comment on attachment 402682
Patch

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

&gt; Source/WebCore/loader/appcache/ManifestParser.cpp:76
&gt; +    return WTF::readCharactersForParsing(manifestAfterSignature, [&amp;](auto parsingBuffer) {

The WTF:: should not be needed here since manifestAfterSignature is a WTF::StringView.

&gt; Source/WebCore/page/csp/ContentSecurityPolicySourceList.cpp:87
&gt; +    skipWhile&lt;CharacterType, isASCIISpace&gt;(parsingBuffer);

We don’t need to pass CharacterType here, since it’s baked into the type of parsingBuffer. Should rearrange things so that can happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665881</commentid>
    <comment_count>16</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-24 15:00:12 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #15)
&gt; Comment on attachment 402682 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=402682&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/appcache/ManifestParser.cpp:76
&gt; &gt; +    return WTF::readCharactersForParsing(manifestAfterSignature, [&amp;](auto parsingBuffer) {
&gt; 
&gt; The WTF:: should not be needed here since manifestAfterSignature is a
&gt; WTF::StringView.

Nice. Will fix.

&gt; 
&gt; &gt; Source/WebCore/page/csp/ContentSecurityPolicySourceList.cpp:87
&gt; &gt; +    skipWhile&lt;CharacterType, isASCIISpace&gt;(parsingBuffer);
&gt; 
&gt; We don’t need to pass CharacterType here, since it’s baked into the type of
&gt; parsingBuffer. Should rearrange things so that can happen.

Yeah, this is an artifact of passing the predicate, which is a template function itself, as a template parameter. I think if we switched this to take the predicate as a normal argument, and trusted that inlining will do its thing, we would have a nicer interface. e.g. replace:

    skipWhile&lt;CharacterType, isASCIISpace&gt;(parsingBuffer);

with:

    skipWhile(parsingBuffer, isASCIISpace);

This would have the added benefit of allowing one-off predicates:

    skipWhile(parsingBuffer, [](auto character) { return character != &apos;s&apos; || character != &apos;v&apos; });

I think the patch has gotten too big, so I am going to split it up into more reviewable pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665912</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-24 17:09:36 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #16)
&gt; Yeah, this is an artifact of passing the predicate, which is a template
&gt; function itself, as a template parameter. I think if we switched this to
&gt; take the predicate as a normal argument, and trusted that inlining will do
&gt; its thing, we would have a nicer interface.

I was sort of going the opposite direction. I was suggesting that we pass predicates as template parameters because some kinds of optimization might require that and I figured we can always &quot;convert&quot; from a template parameter to a function parameter, but not vice versa. I had a few places where I could choose, and I chose template parameters over function parameters.

But I guess what you’re saying is that we can’t get the type for the predicate template parameter right without a character type template parameter.

Maybe this turned the tide on that decision?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667654</commentid>
    <comment_count>18</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-30 12:03:28 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #17)
&gt; (In reply to Sam Weinig from comment #16)
&gt; &gt; Yeah, this is an artifact of passing the predicate, which is a template
&gt; &gt; function itself, as a template parameter. I think if we switched this to
&gt; &gt; take the predicate as a normal argument, and trusted that inlining will do
&gt; &gt; its thing, we would have a nicer interface.
&gt; 
&gt; I was sort of going the opposite direction. I was suggesting that we pass
&gt; predicates as template parameters because some kinds of optimization might
&gt; require that and I figured we can always &quot;convert&quot; from a template parameter
&gt; to a function parameter, but not vice versa. I had a few places where I
&gt; could choose, and I chose template parameters over function parameters.
&gt; 
&gt; But I guess what you’re saying is that we can’t get the type for the
&gt; predicate template parameter right without a character type template
&gt; parameter.
&gt; 
&gt; Maybe this turned the tide on that decision?

Hm, I bet we could use function objects (struct with operator()(Character)), but I also think a function parameter is the way to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667693</commentid>
    <comment_count>19</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-30 12:57:20 -0700</bug_when>
    <thetext>Remaining uses of StringView::upconvertedCharacters() / StringView::getCharactersWithUpconvert() in WebCore by file:


DataDetection.m
YES. This seems addressable.


Editor.cpp
Needed for TelephoneNumberDetector. Probably not removable at the moment as the SPI requires a UChar*, but we should move the up-convert to TelephoneNumberDetectorCocoa.mm.


TextIterator.cpp
This is the SearchBuffer constructor. Needs more investigation, as the characters are passed to usearch_setPattern which seems to want the pattern as UChar*, but there might be other ways to set the pattern as well.


HTMLTreeBuilder.cpp
Same as Editor.cpp, Needed for TelephoneNumberDetector. Probably not removable at the moment as the SPI requires a UChar*, but we should move the up-convert to TelephoneNumberDetectorCocoa.mm.


MediaPlayerPrivateAVFoundationObjC.mm
Seems to be required. Passes the utf-16 string to the user as Uint16Array.


StringTruncator.cpp
YES. This seems addressable. At least for most cases. When an ellipse is inserted, up-conversion is required.


CanvasRenderingContext2D.cpp
YES. This seems addressable.


WHLSLMangledNames.h
Nothing to do here. This up-conversion only happens when writing into a StringBuilder (or makeString) that is using a 16 bit buffer, and no extra allocations occur. 


ThreadableWebSocketChannelClientWrapper.cpp
YES. This seems addressable.


SQLiteStatement.cpp
Unclear. Needs more investigation. Used by SQLiteStatement::bindBlob(int, const String&amp;) and SQLiteStatement::bindText(int, const String&amp;);


TextCodecICU.cpp
This is likely needed, passed to ucnv_fromUnicode, though there may be ucnv API that works with latin input.


Length.cpp
YES. This seems addressable.


SharedStringHash.cpp
Probably nothing to do here. Only doing up-conversion in the case that the base url is 16-bit. It seems plausible the computation of the hash could be done without the intermediate buffer, in which case, it would probably be possible to remove the up-conversion. There are definitely some optimization opportunity even without that, such as delaying the up-conversion, but since most URLs are likely to be 8-bit still, seems unnecessary at this time.


SVGTextLayoutEngine.cpp
YES. This seems addressable.


XMLDocumentParserLibxml2.cpp
This already has the following fixme:
        // FIXME: Can we parse 8-bit strings directly as Latin-1 instead of upconverting to UTF-16?
I guess we should answer that question.


XSLStyleSheetLibxslt.cpp
Potentially addressable. Need to find out if xmlCtxtReadMemory support latin1 as an encoding. Generally, it seems like libxml/libxslt are latin1 aware, so just needs a bit of digging.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402468</attachid>
            <date>2020-06-22 07:20:11 -0700</date>
            <delta_ts>2020-06-22 08:02:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213460-20200622072010.patch</filename>
            <type>text/plain</type>
            <size>106452</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzM0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAyMC0wNi0yMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSB1bm5lY2Vzc2FyeSB1
cGNvbnZlcnNpb24gb2YgU3RyaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjEzNDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIGh0bWwvQmFzZURhdGVBbmRUaW1lSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6
dHlwZU1pc21hdGNoRm9yIGNvbnN0KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9QYXJzaW5nVXRp
bGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjppc05vdEFTQ0lJU3BhY2UpOgorICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
YXJzZU1hbmlmZXN0KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3ku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpkaWRSZWNlaXZl
SGVhZGVyKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcik6
CisgICAgICAgIChXZWJDb3JlOjppc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNl
RGlyZWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZUxpc3Q6OnBhcnNlUmVwb3J0VVJJKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Lmg6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
TWVkaWFUeXBlQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBv
bGljeU1lZGlhTGlzdERpcmVjdGl2ZTo6cGFyc2UpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTb3Vy
Y2VDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNIb3N0Q2hhcmFjdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzUGF0aENvbXBvbmVudENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3Jl
Ojppc1NjaGVtZUNvbnRpbnVhdGlvbkNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc05v
dENvbG9uT3JTbGFzaCk6CisgICAgICAgIChXZWJDb3JlOjppc1NvdXJjZUxpc3ROb25lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNl
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3Q6OnBhcnNlU2NoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3Q6OnBhcnNlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OmlzTm9uY2VDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGFyc2VOb25jZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhhc2hTb3VyY2UpOgorICAgICAgICAq
IHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdNb250aCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdEYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ1dlZWspOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdEYXRlVGltZUxvY2FsKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGVUaW1lKToKKyAgICAgICAgKiBz
dmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUtleVNwbGlu
ZXMpOgorICAgICAgICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Rml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3hHZW5lcmljKToKKyAgICAgICAgKiBzdmcvU1ZHRml0
VG9WaWV3Qm94Lmg6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aExpc3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0xlbmd0aExpc3Q6OnBhcnNlKToKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoVmFs
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMZW5ndGhUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhW
YWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoVmFsdWU6OlNWR0xlbmd0aFZhbHVl
KToKKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TnVtYmVyTGlzdDo6cGFyc2UpOgorICAgICAgICAqIHN2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVBvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUds
eXBoTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVVuaWNvZGVSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZH
UGFyc2VyVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpza2lwU3RyaW5nKToKKyAgICAg
ICAgKiBzdmcvU1ZHUG9pbnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExpc3Q6
OnBhcnNlKToKKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZTo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlOjpwYXJzZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZTo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgICogc3ZnL1NW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oOgorICAgICAgICAqIHN2Zy9TVkdTdHJpbmdMaXN0
Lmg6CisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaDoKKyAgICAgICAgKiBzdmcvU1ZH
VHJhbnNmb3JtYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVBhcmFt
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUpOiBEZWxldGVkLgor
ICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICogc3ZnL1NWR1ZpZXdT
cGVjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKToK
KyAgICAgICAgKiBzdmcvU1ZHVmlld1NwZWMuaDoKKyAgICAgICAgKiBzdmcvU1ZHWm9vbUFuZFBh
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVpvb21BbmRQYW5HZW5lcmljKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbik6CisgICAgICAgICog
c3ZnL1NWR1pvb21BbmRQYW4uaDoKKwogMjAyMC0wNi0xMCAgU2VyZ2lvIFZpbGxhciBTZW5pbiAg
PHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV2ViWFJdIEFkZCBhIHByZWxpbWluYXJ5
IGltcGxlbWVudGF0aW9uIG9mIFhSV2ViR0xMYXllcgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjYzMzM1KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEJhc2VEYXRlQW5k
VGltZUlucHV0VHkKIAogYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnR5cGVNaXNtYXRj
aEZvcihjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIHJldHVybiAhdmFsdWUuaXNF
bXB0eSgpICYmIHBhcnNlVG9EYXRlQ29tcG9uZW50cyh2YWx1ZSkgPT0gV1RGOjpudWxsb3B0Owor
ICAgIHJldHVybiAhdmFsdWUuaXNFbXB0eSgpICYmICFwYXJzZVRvRGF0ZUNvbXBvbmVudHModmFs
dWUpOwogfQogCiBib29sIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6dHlwZU1pc21hdGNoKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0
aWVzLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1Bh
cnNpbmdVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBib29sIGlzTm90QVNDSUlTcGFjZShVQ2hhciBjKQor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+CitpbmxpbmUgYm9vbCBpc05vdEFTQ0lJU3BhY2Uo
Q2hhclR5cGUgYykKIHsKICAgICByZXR1cm4gIWlzQVNDSUlTcGFjZShjKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL01hbmlmZXN0UGFyc2VyLmNwcAko
cmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL01hbmlm
ZXN0UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTM3ICs2NywxMzcgQEAgYm9vbCBw
YXJzZU1hbmlmZXN0KGNvbnN0IFVSTCYgbWFuaWZlc3RVUgogICAgIGlmICghbWFuaWZlc3RTdHJp
bmcuc3RhcnRzV2l0aChtYW5pZmVzdFNpZ25hdHVyZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICBTdHJpbmdWaWV3IG1hbmlmZXN0QWZ0ZXJTaWduYXR1cmUgPSBTdHJpbmdWaWV3
KG1hbmlmZXN0U3RyaW5nKS5zdWJzdHJpbmcoc2l6ZW9mKG1hbmlmZXN0U2lnbmF0dXJlKSAtIDEp
OwotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gbWFuaWZlc3RBZnRlclNpZ25hdHVy
ZS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcCA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcCArIG1hbmlmZXN0QWZ0ZXJT
aWduYXR1cmUubGVuZ3RoKCk7CisgICAgYXV0byBtYW5pZmVzdEFmdGVyU2lnbmF0dXJlID0gU3Ry
aW5nVmlldyhtYW5pZmVzdFN0cmluZykuc3Vic3RyaW5nKHNpemVvZihtYW5pZmVzdFNpZ25hdHVy
ZSkgLSAxKTsKIAotICAgIGlmIChwIDwgZW5kICYmICpwICE9ICcgJyAmJiAqcCAhPSAnXHQnICYm
ICpwICE9ICdcbicgJiYgKnAgIT0gJ1xyJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8v
IEZJWE1FOiBUaGlzIHBhcnNlciBjb3VsZCBiZSBtdWNoIGNsZWFyZXIgaWYgaXQgYWRvcHRlZCBz
b21lIG9mIHRoZSBjb21tb24gcGFyc2luZyB1dGlsaXRpZXMKKyAgICAvLyBmb3Igc2tpcHBpbmcg
YW5kIGNvbXBhcmluZy4KIAotICAgIC8vIFNraXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KLSAg
ICB3aGlsZSAocCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCi0gICAgICAgIHAr
KzsKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZQotICAgICAg
ICB3aGlsZSAocCA8IGVuZCAmJiAoKnAgPT0gJ1xuJyB8fCAqcCA9PSAnXHInIHx8ICpwID09ICcg
JyB8fCAqcCA9PSAnXHQnKSkKLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgCi0gICAgICAgIGlm
IChwID09IGVuZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgY29uc3Qg
VUNoYXIqIGxpbmVTdGFydCA9IHA7Ci0gICAgICAgIAotICAgICAgICAvLyBGaW5kIHRoZSBlbmQg
b2YgdGhlIGxpbmUKKyAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKG1hbmlmZXN0QWZ0ZXJT
aWduYXR1cmUsIFsmXShhdXRvIHAsIGF1dG8gZW5kKSB7CisgICAgICAgIGlmIChwIDwgZW5kICYm
ICpwICE9ICcgJyAmJiAqcCAhPSAnXHQnICYmICpwICE9ICdcbicgJiYgKnAgIT0gJ1xyJykKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBTa2lwIHRvIHRoZSBlbmQgb2Yg
dGhlIGxpbmUuCiAgICAgICAgIHdoaWxlIChwIDwgZW5kICYmICpwICE9ICdccicgJiYgKnAgIT0g
J1xuJykKICAgICAgICAgICAgIHArKzsKLSAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIGlmIHdl
IGhhdmUgYSBjb21tZW50Ci0gICAgICAgIGlmICgqbGluZVN0YXJ0ID09ICcjJykKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgLy8gR2V0IHJpZCBvZiB0cmFpbGluZyB3
aGl0ZXNwYWNlCi0gICAgICAgIGNvbnN0IFVDaGFyKiB0bXAgPSBwIC0gMTsKLSAgICAgICAgd2hp
bGUgKHRtcCA+IGxpbmVTdGFydCAmJiAoKnRtcCA9PSAnICcgfHwgKnRtcCA9PSAnXHQnKSkKLSAg
ICAgICAgICAgIHRtcC0tOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGxpbmUobGluZVN0YXJ0
LCB0bXAgLSBsaW5lU3RhcnQgKyAxKTsKLQotICAgICAgICBpZiAobGluZSA9PSAiQ0FDSEU6Iikg
Ci0gICAgICAgICAgICBtb2RlID0gRXhwbGljaXQ7Ci0gICAgICAgIGVsc2UgaWYgKGxpbmUgPT0g
IkZBTExCQUNLOiIpCi0gICAgICAgICAgICBtb2RlID0gRmFsbGJhY2s7Ci0gICAgICAgIGVsc2Ug
aWYgKGxpbmUgPT0gIk5FVFdPUks6IikKLSAgICAgICAgICAgIG1vZGUgPSBPbmxpbmVBbGxvd2xp
c3Q7Ci0gICAgICAgIGVsc2UgaWYgKGxpbmUuZW5kc1dpdGgoJzonKSkKLSAgICAgICAgICAgIG1v
ZGUgPSBVbmtub3duOwotICAgICAgICBlbHNlIGlmIChtb2RlID09IFVua25vd24pCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBFeHBsaWNpdCB8fCBtb2Rl
ID09IE9ubGluZUFsbG93bGlzdCkgewotICAgICAgICAgICAgYXV0byB1cGNvbnZlcnRlZExpbmVD
aGFyYWN0ZXJzID0gU3RyaW5nVmlldyhsaW5lKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiBwID0gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVyczsKLSAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiBsaW5lRW5kID0gcCArIGxpbmUubGVuZ3RoKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0
aGUgVVJMIGZyb20gc3Vic2VxdWVudCBpZ25vcmVkIHRva2Vucy4KLSAgICAgICAgICAgIHdoaWxl
IChwIDwgbGluZUVuZCAmJiAqcCAhPSAnXHQnICYmICpwICE9ICcgJykgCi0gICAgICAgICAgICAg
ICAgcCsrOwotCi0gICAgICAgICAgICBpZiAobW9kZSA9PSBPbmxpbmVBbGxvd2xpc3QgJiYgcCAt
IHVwY29udmVydGVkTGluZUNoYXJhY3RlcnMgPT0gMSAmJiBsaW5lWzBdID09ICcqJykgewotICAg
ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHdhcyBmb3VuZC4KLSAgICAgICAgICAgICAgICBtYW5p
ZmVzdC5hbGxvd0FsbE5ldHdvcmtSZXF1ZXN0cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFVSTCB1cmwobWFuaWZlc3RVUkws
IGxpbmUuc3Vic3RyaW5nKDAsIHAgLSB1cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
dXJsLnByb3RvY29sKCksIG1hbmlmZXN0VVJMLnByb3RvY29sKCkpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgLy8gU2tpcCB3aGl0
ZXNwYWNlCisgICAgICAgICAgICB3aGlsZSAocCA8IGVuZCAmJiAoKnAgPT0gJ1xuJyB8fCAqcCA9
PSAnXHInIHx8ICpwID09ICcgJyB8fCAqcCA9PSAnXHQnKSkKKyAgICAgICAgICAgICAgICBwKys7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtb2RlID09IEV4cGxpY2l0ICYmIG1hbmlm
ZXN0VVJMLnByb3RvY29sSXMoImh0dHBzIikgJiYgIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVh
bChtYW5pZmVzdFVSTCwgdXJsKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGlmIChwID09IGVuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG1vZGUgPT0gRXhwbGljaXQpCi0gICAgICAgICAgICAgICAgbWFuaWZl
c3QuZXhwbGljaXRVUkxzLmFkZCh1cmwuc3RyaW5nKCkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG1hbmlmZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVuZCh1cmwpOwotICAg
ICAgICAgICAgCi0gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBGYWxsYmFjaykgewotICAgICAg
ICAgICAgYXV0byB1cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhsaW5lKS51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBwID0gdXBj
b252ZXJ0ZWRMaW5lQ2hhcmFjdGVyczsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBsaW5lRW5k
ID0gcCArIGxpbmUubGVuZ3RoKCk7CisgICAgICAgICAgICBhdXRvIGxpbmVTdGFydCA9IHA7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2Ugc2VwYXJhdGlu
ZyB0aGUgdHdvIFVSTHMKLSAgICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAqcCAhPSAn
XHQnICYmICpwICE9ICcgJykgCisgICAgICAgICAgICAvLyBGaW5kIHRoZSBlbmQgb2YgdGhlIGxp
bmUKKyAgICAgICAgICAgIHdoaWxlIChwIDwgZW5kICYmICpwICE9ICdccicgJiYgKnAgIT0gJ1xu
JykKICAgICAgICAgICAgICAgICBwKys7Ci0KLSAgICAgICAgICAgIGlmIChwID09IGxpbmVFbmQp
IHsKLSAgICAgICAgICAgICAgICAvLyBUaGVyZSB3YXMgbm8gd2hpdGVzcGFjZSBzZXBhcmF0aW5n
IHRoZSBVUkxzLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBVUkwgbmFtZXNwYWNlVVJMKG1hbmlmZXN0VVJMLCBsaW5l
LnN1YnN0cmluZygwLCBwIC0gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVycykpOwotICAgICAgICAg
ICAgaWYgKCFuYW1lc3BhY2VVUkwuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgbmFtZXNwYWNlVVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwot
Ci0gICAgICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVS
TCwgbmFtZXNwYWNlVVJMKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAg
ICAgLy8gQWx0aG91Z2ggPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29m
ZmxpbmUuaHRtbCNwYXJzaW5nLWNhY2hlLW1hbmlmZXN0cz4gKDA3LzA2LzIwMTcpIHNhaWRzCi0g
ICAgICAgICAgICAvLyB0aGF0IHdlIHNob3VsZCBhbHdheXMgcHJlZml4IG1hdGNoIHRoZSBtYW5p
ZmVzdCBwYXRoIHdlIG9ubHkgZG8gc28gaWYgdGhlIG1hbmlmZXN0IHdhcyBzZXJ2ZWQgd2l0aCBh
IG5vbi0KLSAgICAgICAgICAgIC8vIHN0YW5kYXJkIEhUVFAgQ29udGVudC1UeXBlIGhlYWRlciBm
b3Igd2ViIGNvbXBhdGliaWxpdHkuCi0gICAgICAgICAgICBpZiAoIWFsbG93RmFsbGJhY2tOYW1l
c3BhY2VPdXRzaWRlTWFuZmVzdFBhdGggJiYgIW5hbWVzcGFjZVVSTC5wYXRoKCkuc3RhcnRzV2l0
aChtYW5pZmVzdFBhdGgpKQorICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNvbW1l
bnQKKyAgICAgICAgICAgIGlmICgqbGluZVN0YXJ0ID09ICcjJykKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gR2V0IHJpZCBvZiB0cmFpbGlu
ZyB3aGl0ZXNwYWNlCisgICAgICAgICAgICBhdXRvIHRtcCA9IHAgLSAxOworICAgICAgICAgICAg
d2hpbGUgKHRtcCA+IGxpbmVTdGFydCAmJiAoKnRtcCA9PSAnICcgfHwgKnRtcCA9PSAnXHQnKSkK
KyAgICAgICAgICAgICAgICB0bXAtLTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5n
VmlldyBsaW5lKGxpbmVTdGFydCwgdG1wIC0gbGluZVN0YXJ0ICsgMSk7CisKKyAgICAgICAgICAg
IGlmIChsaW5lID09ICJDQUNIRToiKQorICAgICAgICAgICAgICAgIG1vZGUgPSBFeHBsaWNpdDsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGxpbmUgPT0gIkZBTExCQUNLOiIpCisgICAgICAgICAgICAg
ICAgbW9kZSA9IEZhbGxiYWNrOworICAgICAgICAgICAgZWxzZSBpZiAobGluZSA9PSAiTkVUV09S
SzoiKQorICAgICAgICAgICAgICAgIG1vZGUgPSBPbmxpbmVBbGxvd2xpc3Q7CisgICAgICAgICAg
ICBlbHNlIGlmIChsaW5lLmVuZHNXaXRoKCc6JykpCisgICAgICAgICAgICAgICAgbW9kZSA9IFVu
a25vd247CisgICAgICAgICAgICBlbHNlIGlmIChtb2RlID09IFVua25vd24pCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbHNlIGlmIChtb2RlID09IEV4cGxpY2l0IHx8
IG1vZGUgPT0gT25saW5lQWxsb3dsaXN0KSB7CisgICAgICAgICAgICAgICAgYXV0byBwID0gbGlu
ZVN0YXJ0OworICAgICAgICAgICAgICAgIGF1dG8gbGluZUVuZCA9IHAgKyBsaW5lLmxlbmd0aCgp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3Bh
Y2Ugc2VwYXJhdGluZyB0aGUgVVJMIGZyb20gc3Vic2VxdWVudCBpZ25vcmVkIHRva2Vucy4KKyAg
ICAgICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAn
ICcpCisgICAgICAgICAgICAgICAgICAgIHArKzsKKworICAgICAgICAgICAgICAgIGlmIChtb2Rl
ID09IE9ubGluZUFsbG93bGlzdCAmJiBwIC0gbGluZVN0YXJ0ID09IDEgJiYgbGluZVswXSA9PSAn
KicpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgd2FzIGZvdW5kLgorICAgICAg
ICAgICAgICAgICAgICBtYW5pZmVzdC5hbGxvd0FsbE5ldHdvcmtSZXF1ZXN0cyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIFVSTCB1cmwobWFuaWZlc3RVUkwsIGxpbmUuc3Vic3RyaW5nKDAsIHAgLSBsaW5l
U3RhcnQpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
ICghdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHVybC5wcm90
b2NvbCgpLCBtYW5pZmVzdFVSTC5wcm90b2NvbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gRXhw
bGljaXQgJiYgbWFuaWZlc3RVUkwucHJvdG9jb2xJcygiaHR0cHMiKSAmJiAhcHJvdG9jb2xIb3N0
QW5kUG9ydEFyZUVxdWFsKG1hbmlmZXN0VVJMLCB1cmwpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBF
eHBsaWNpdCkKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3QuZXhwbGljaXRVUkxzLmFkZCh1
cmwuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
bWFuaWZlc3Qub25saW5lQWxsb3dlZFVSTHMuYXBwZW5kKHVybCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gRmFsbGJhY2spIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHAgPSBsaW5lU3RhcnQ7CisgICAgICAgICAgICAgICAgYXV0byBsaW5lRW5kID0g
cCArIGxpbmUubGVuZ3RoKCk7CisKKyAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNw
YWNlIHNlcGFyYXRpbmcgdGhlIHR3byBVUkxzCisgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBs
aW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKQorICAgICAgICAgICAgICAgICAgICBw
Kys7CisKKyAgICAgICAgICAgICAgICBpZiAocCA9PSBsaW5lRW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFRoZXJlIHdhcyBubyB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTHMuCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBVUkwgbmFtZXNwYWNlVVJMKG1hbmlmZXN0VVJMLCBs
aW5lLnN1YnN0cmluZygwLCBwIC0gbGluZVN0YXJ0KS50b1N0cmluZygpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW5hbWVzcGFjZVVSTC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIG5hbWVzcGFjZVVSTC5yZW1vdmVGcmFnbWVudElkZW50
aWZpZXIoKTsKKworICAgICAgICAgICAgICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVx
dWFsKG1hbmlmZXN0VVJMLCBuYW1lc3BhY2VVUkwpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgICAgIC8vIEFsdGhvdWdoIDxodHRwczovL2h0bWwuc3BlYy53
aGF0d2cub3JnL211bHRpcGFnZS9vZmZsaW5lLmh0bWwjcGFyc2luZy1jYWNoZS1tYW5pZmVzdHM+
ICgwNy8wNi8yMDE3KSBzYWlkcworICAgICAgICAgICAgICAgIC8vIHRoYXQgd2Ugc2hvdWxkIGFs
d2F5cyBwcmVmaXggbWF0Y2ggdGhlIG1hbmlmZXN0IHBhdGggd2Ugb25seSBkbyBzbyBpZiB0aGUg
bWFuaWZlc3Qgd2FzIHNlcnZlZCB3aXRoIGEgbm9uLQorICAgICAgICAgICAgICAgIC8vIHN0YW5k
YXJkIEhUVFAgQ29udGVudC1UeXBlIGhlYWRlciBmb3Igd2ViIGNvbXBhdGliaWxpdHkuCisgICAg
ICAgICAgICAgICAgaWYgKCFhbGxvd0ZhbGxiYWNrTmFtZXNwYWNlT3V0c2lkZU1hbmZlc3RQYXRo
ICYmICFuYW1lc3BhY2VVUkwucGF0aCgpLnN0YXJ0c1dpdGgobWFuaWZlc3RQYXRoKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAvLyBTa2lwIHdoaXRl
c3BhY2Ugc2VwYXJhdGluZyBmYWxsYmFjayBuYW1lc3BhY2UgZnJvbSBVUkwuCisgICAgICAgICAg
ICAgICAgd2hpbGUgKHAgPCBsaW5lRW5kICYmICgqcCA9PSAnXHQnIHx8ICpwID09ICcgJykpCisg
ICAgICAgICAgICAgICAgICAgIHArKzsKKworICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIHdo
aXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUgVVJMIGZyb20gc3Vic2VxdWVudCBpZ25vcmVkIHRva2Vu
cy4KKyAgICAgICAgICAgICAgICBhdXRvIGZhbGxiYWNrU3RhcnQgPSBwOworICAgICAgICAgICAg
ICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAqcCAhPSAnXHQnICYmICpwICE9ICcgJykKKyAgICAg
ICAgICAgICAgICAgICAgcCsrOworCisgICAgICAgICAgICAgICAgVVJMIGZhbGxiYWNrVVJMKG1h
bmlmZXN0VVJMLCBTdHJpbmcoZmFsbGJhY2tTdGFydCwgcCAtIGZhbGxiYWNrU3RhcnQpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWZhbGxiYWNrVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tVUkwucmVtb3ZlRnJhZ21l
bnRJZGVudGlmaWVyKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBv
cnRBcmVFcXVhbChtYW5pZmVzdFVSTCwgZmFsbGJhY2tVUkwpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIG1hbmlmZXN0LmZhbGxiYWNrVVJMcy5hcHBl
bmQoc3RkOjptYWtlX3BhaXIobmFtZXNwYWNlVVJMLCBmYWxsYmFja1VSTCkpOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KIAotICAgICAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgZmFsbGJhY2sg
bmFtZXNwYWNlIGZyb20gVVJMLgotICAgICAgICAgICAgd2hpbGUgKHAgPCBsaW5lRW5kICYmICgq
cCA9PSAnXHQnIHx8ICpwID09ICcgJykpCi0gICAgICAgICAgICAgICAgcCsrOwotCi0gICAgICAg
ICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTCBmcm9tIHN1YnNl
cXVlbnQgaWdub3JlZCB0b2tlbnMuCi0gICAgICAgICAgICBjb25zdCBVQ2hhciogZmFsbGJhY2tT
dGFydCA9IHA7Ci0gICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAm
JiAqcCAhPSAnICcpIAotICAgICAgICAgICAgICAgIHArKzsKLQotICAgICAgICAgICAgVVJMIGZh
bGxiYWNrVVJMKG1hbmlmZXN0VVJMLCBTdHJpbmcoZmFsbGJhY2tTdGFydCwgcCAtIGZhbGxiYWNr
U3RhcnQpKTsKLSAgICAgICAgICAgIGlmICghZmFsbGJhY2tVUkwuaXNWYWxpZCgpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZmFsbGJhY2tVUkwucmVtb3ZlRnJhZ21l
bnRJZGVudGlmaWVyKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFy
ZUVxdWFsKG1hbmlmZXN0VVJMLCBmYWxsYmFja1VSTCkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgIG1hbmlmZXN0LmZhbGxiYWNrVVJMcy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIobmFtZXNwYWNlVVJMLCBmYWxsYmFja1VSTCkpOyAgICAgICAgICAgIAotICAgICAgICB9
IGVsc2UgCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CiB9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNw
cAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDIyICsyMTIsMjQgQEAgdm9p
ZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRpZFJlY2VpdmVIZQogICAgIC8vIFJGQzI2MTYsIHNl
Y3Rpb24gNC4yIHNwZWNpZmllcyB0aGF0IGhlYWRlcnMgYXBwZWFyaW5nIG11bHRpcGxlIHRpbWVz
IGNhbgogICAgIC8vIGJlIGNvbWJpbmVkIHdpdGggYSBjb21tYS4gV2FsayB0aGUgaGVhZGVyIHN0
cmluZywgYW5kIHBhcnNlIGVhY2ggY29tbWEKICAgICAvLyBzZXBhcmF0ZWQgY2h1bmsgYXMgYSBz
ZXBhcmF0ZSBoZWFkZXIuCi0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhoZWFkZXIp
LnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9IGNoYXJh
Y3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgY29uc3QgVUNo
YXIqIGVuZCA9IGJlZ2luICsgaGVhZGVyLmxlbmd0aCgpOwotICAgIHdoaWxlIChwb3NpdGlvbiA8
IGVuZCkgewotICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcsJyk7Ci0K
LSAgICAgICAgLy8gaGVhZGVyMSxoZWFkZXIyIE9SIGhlYWRlcjEKLSAgICAgICAgLy8gICAgICAg
IF4gICAgICAgICAgICAgICAgICBeCi0gICAgICAgIG1fcG9saWNpZXMuYXBwZW5kKENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmNyZWF0ZSgqdGhpcywgU3RyaW5nKGJlZ2luLCBw
b3NpdGlvbiAtIGJlZ2luKSwgdHlwZSwgcG9saWN5RnJvbSkpOwotCi0gICAgICAgIC8vIFNraXAg
dGhlIGNvbW1hLCBhbmQgYmVnaW4gdGhlIG5leHQgaGVhZGVyIGZyb20gdGhlIGN1cnJlbnQgcG9z
aXRpb24uCi0gICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgKnBvc2l0aW9uID09ICcs
Jyk7Ci0gICAgICAgIHNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLCcpOwotICAg
ICAgICBiZWdpbiA9IHBvc2l0aW9uOwotICAgIH0KKyAgICBXVEY6OmdldENoYXJhY3RlcnMoaGVh
ZGVyLCBbJl0oYXV0byBwb3NpdGlvbiwgYXV0byBlbmQpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFj
dGVyVHlwZSA9IHN0ZDo6cmVtb3ZlX3BvaW50ZXJfdDxkZWNsdHlwZShwb3NpdGlvbik+OworCisg
ICAgICAgIGF1dG8gYmVnaW4gPSBwb3NpdGlvbjsKKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwg
ZW5kKSB7CisgICAgICAgICAgICBza2lwVW50aWw8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVu
ZCwgJywnKTsKKworICAgICAgICAgICAgLy8gaGVhZGVyMSxoZWFkZXIyIE9SIGhlYWRlcjEKKyAg
ICAgICAgICAgIC8vICAgICAgICBeICAgICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgbV9w
b2xpY2llcy5hcHBlbmQoQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y3JlYXRl
KCp0aGlzLCBTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pLCB0eXBlLCBwb2xpY3lGcm9t
KSk7CisKKyAgICAgICAgICAgIC8vIFNraXAgdGhlIGNvbW1hLCBhbmQgYmVnaW4gdGhlIG5leHQg
aGVhZGVyIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgICAgICBBU1NFUlQocG9z
aXRpb24gPT0gZW5kIHx8ICpwb3NpdGlvbiA9PSAnLCcpOworICAgICAgICAgICAgc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJywnKTsKKyAgICAgICAgICAgIGJlZ2lu
ID0gcG9zaXRpb247CisgICAgICAgIH0KKyAgICB9KTsKKyAgICAKIAogICAgIGlmIChtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIGFwcGx5UG9saWN5VG9TY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcAkocmV2aXNpb24gMjYz
MzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3RlcihV
Q2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNE
aXJlY3RpdmVOYW1lQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNB
U0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICctJzsKIH0KIAotc3RhdGljIGJvb2wgaXNEaXJl
Y3RpdmVWYWx1ZUNoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gc3RhdGljIGJvb2wgaXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBl
IGMpCiB7CiAgICAgcmV0dXJuIGlzQVNDSUlTcGFjZShjKSB8fCAoYyA+PSAweDIxICYmIGMgPD0g
MHg3ZSk7IC8vIFdoaXRlc3BhY2UgKyBWQ0hBUgogfQpAQCAtMzMzLDYyICszMzMsNjEgQEAgdm9p
ZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OgogICAgIGlmIChwb2xpY3kuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdW
aWV3KHBvbGljeSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHBv
c2l0aW9uID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcG9zaXRpb24gKyBw
b2xpY3kubGVuZ3RoKCk7Ci0KLSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAg
Y29uc3QgVUNoYXIqIGRpcmVjdGl2ZUJlZ2luID0gcG9zaXRpb247Ci0gICAgICAgIHNraXBVbnRp
bDxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJzsnKTsKLQotICAgICAgICBTdHJpbmcgbmFtZSwgdmFs
dWU7Ci0gICAgICAgIGlmIChwYXJzZURpcmVjdGl2ZShkaXJlY3RpdmVCZWdpbiwgcG9zaXRpb24s
IG5hbWUsIHZhbHVlKSkgewotICAgICAgICAgICAgQVNTRVJUKCFuYW1lLmlzRW1wdHkoKSk7Ci0g
ICAgICAgICAgICBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGlj
eUZyb206OkluaGVyaXRlZCkgewotICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVND
SUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjp1cGdyYWRl
SW5zZWN1cmVSZXF1ZXN0cykpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChwb2xpY3lGcm9tID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9s
aWN5RnJvbTo6SFRUUEVxdWl2TWV0YSkgewotICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpz
YW5kYm94KQotICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpyZXBvcnRVUkkpCi0gICAg
ICAgICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1lQW5jZXN0b3JzKSkgewotICAgICAgICAg
ICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5IVFRQRXF1aXZNZXRh
KG5hbWUpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICBXVEY6OmdldENoYXJh
Y3RlcnMocG9saWN5LCBbJl0oYXV0byBwb3NpdGlvbiwgYXV0byBlbmQpIHsKKyAgICAgICAgdXNp
bmcgQ2hhcmFjdGVyVHlwZSA9IHN0ZDo6cmVtb3ZlX3BvaW50ZXJfdDxkZWNsdHlwZShwb3NpdGlv
bik+OworICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKKyAgICAgICAgICAgIGF1dG8g
ZGlyZWN0aXZlQmVnaW4gPSBwb3NpdGlvbjsKKyAgICAgICAgICAgIHNraXBVbnRpbDxDaGFyYWN0
ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnOycpOworCisgICAgICAgICAgICBTdHJpbmcgbmFtZSwg
dmFsdWU7CisgICAgICAgICAgICBpZiAocGFyc2VEaXJlY3RpdmUoZGlyZWN0aXZlQmVnaW4sIHBv
c2l0aW9uLCBuYW1lLCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW5hbWUuaXNF
bXB0eSgpKTsKKyAgICAgICAgICAgICAgICBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJp
dHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwb2xpY3lGcm9tID09
IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SFRUUEVxdWl2TWV0YSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2FuZGJveCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8
IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTmFtZXM6OmZyYW1lQW5jZXN0b3JzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9w
b2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluSFRUUEVxdWl2TWV0YShuYW1lKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChwb2xpY3lGcm9tID09IENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6UG9saWN5RnJvbTo6SW5oZXJpdGVkRm9yUGx1Z2luRG9jdW1lbnQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICYmICFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjpyZXBvcnRVUkkpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChwb2xpY3lG
cm9tID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SW5oZXJpdGVkRm9yUGx1
Z2luRG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNh
c2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnBsdWdpblR5cGVz
KQotICAgICAgICAgICAgICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYWRkRGlyZWN0aXZlKG5hbWUs
IHZhbHVlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFkZERpcmVjdGl2ZShuYW1lLCB2
YWx1ZSk7Ci0gICAgICAgIH0KIAotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8ICpw
b3NpdGlvbiA9PSAnOycpOwotICAgICAgICBza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVu
ZCwgJzsnKTsKLSAgICB9CisgICAgICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8ICpw
b3NpdGlvbiA9PSAnOycpOworICAgICAgICAgICAgc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4o
cG9zaXRpb24sIGVuZCwgJzsnKTsKKyAgICAgICAgfQorICAgIH0pOwogfQogCiAvLyBkaXJlY3Rp
dmUgICAgICAgICA9ICpXU1AgWyBkaXJlY3RpdmUtbmFtZSBbIFdTUCBkaXJlY3RpdmUtdmFsdWUg
XSBdCiAvLyBkaXJlY3RpdmUtbmFtZSAgICA9IDEqKCBBTFBIQSAvIERJR0lUIC8gIi0iICkKIC8v
IGRpcmVjdGl2ZS12YWx1ZSAgID0gKiggV1NQIC8gPFZDSEFSIGV4Y2VwdCAiOyI+ICkKIC8vCi1i
b29sIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKGNv
bnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBuYW1lLCBTdHJpbmcm
IHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZURpcmVjdGl2ZShjb25zdCBDaGFyYWN0ZXJU
eXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBTdHJpbmcmIG5hbWUsIFN0cmlu
ZyYgdmFsdWUpCiB7CiAgICAgQVNTRVJUKG5hbWUuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQodmFs
dWUuaXNFbXB0eSgpKTsKIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAg
IHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRv
IHBvc2l0aW9uID0gYmVnaW47CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlT
cGFjZT4ocG9zaXRpb24sIGVuZCk7CiAKICAgICAvLyBFbXB0eSBkaXJlY3RpdmUgKGUuZy4gIjs7
OyIpLiBFeGl0IGVhcmx5LgogICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGNvbnN0IFVDaGFyKiBuYW1lQmVnaW4gPSBwb3NpdGlvbjsKLSAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7
CisgICAgYXV0byBuYW1lQmVnaW4gPSBwb3NpdGlvbjsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKIAogICAgIC8v
IFRoZSBkaXJlY3RpdmUtbmFtZSBtdXN0IGJlIG5vbi1lbXB0eS4KICAgICBpZiAobmFtZUJlZ2lu
ID09IHBvc2l0aW9uKSB7Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNl
Pihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90
QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CiAgICAgICAgIG1fcG9saWN5LnJlcG9ydFVuc3Vw
cG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJlZ2luKSk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0zOTgsMTYgKzM5NywxNiBAQCBib29s
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6CiAgICAgaWYgKHBvc2l0aW9uID09
IGVuZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFy
LCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hh
ciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICBpZiAoIXNraXBFeGFjdGx5
PENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCkpIHsKKyAgICAgICAg
c2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
CiAgICAgICAgIG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1l
QmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJlZ2luKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVu
ZCk7CiAKLSAgICBjb25zdCBVQ2hhciogdmFsdWVCZWdpbiA9IHBvc2l0aW9uOwotICAgIHNraXBX
aGlsZTxVQ2hhciwgaXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Cisg
ICAgYXV0byB2YWx1ZUJlZ2luID0gcG9zaXRpb247CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5
cGUsIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwogCiAgICAgaWYg
KHBvc2l0aW9uICE9IGVuZCkgewogICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0
aXZlVmFsdWVDaGFyYWN0ZXIobmFtZSwgU3RyaW5nKHZhbHVlQmVnaW4sIGVuZCAtIHZhbHVlQmVn
aW4pKTsKQEAgLTQyOSwxOSArNDI4LDIwIEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdDoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2hhcmFjdGVy
cyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0
IFVDaGFyKiBwb3NpdGlvbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBv
c2l0aW9uICsgdmFsdWUubGVuZ3RoKCk7CisgICAgV1RGOjpnZXRDaGFyYWN0ZXJzKHZhbHVlLCBb
Jl0oYXV0byBwb3NpdGlvbiwgYXV0byBlbmQpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlw
ZSA9IHN0ZDo6cmVtb3ZlX3BvaW50ZXJfdDxkZWNsdHlwZShwb3NpdGlvbik+OwogCi0gICAgd2hp
bGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSVNw
YWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXJzID0gcG9zaXRpb247
CisgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgeworICAgICAgICAgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CiAKLSAgICAgICAg
Y29uc3QgVUNoYXIqIHVybEJlZ2luID0gcG9zaXRpb247Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hh
ciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgIGF1dG8gdXJs
QmVnaW4gPSBwb3NpdGlvbjsKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBp
c05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwogCi0gICAgICAgIGlmICh1cmxCZWdpbiA8
IHBvc2l0aW9uKQotICAgICAgICAgICAgbV9yZXBvcnRVUklzLmFwcGVuZCh2YWx1ZS5zdWJzdHJp
bmcodXJsQmVnaW4gLSBjaGFyYWN0ZXJzLCBwb3NpdGlvbiAtIHVybEJlZ2luKSk7Ci0gICAgfQor
ICAgICAgICAgICAgaWYgKHVybEJlZ2luIDwgcG9zaXRpb24pCisgICAgICAgICAgICAgICAgbV9y
ZXBvcnRVUklzLmFwcGVuZCh2YWx1ZS5zdWJzdHJpbmcodXJsQmVnaW4gLSBjaGFyYWN0ZXJzLCBw
b3NpdGlvbiAtIHVybEJlZ2luKSk7CisgICAgICAgIH0KKyAgICB9KTsKIH0KIAogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHBhcnNl
KGNvbnN0IFN0cmluZyYsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbSk7CiAKLSAg
ICBib29sIHBhcnNlRGlyZWN0aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVu
ZCwgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIHZhbHVlKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlRGlyZWN0aXZlKGNvbnN0IENoYXJhY3RlclR5cGUqIGJl
Z2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN0cmluZyYgbmFtZSwgU3RyaW5nJiB2YWx1
ZSk7CiAgICAgdm9pZCBwYXJzZVJlcG9ydFVSSShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpOwogICAgIHZvaWQgcGFyc2VQbHVnaW5UeXBlcyhjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIHZvaWQgYWRkRGlyZWN0aXZlKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeU1l
ZGlhTGlzdERpcmVjdGl2ZS5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dGF0aWMgYm9vbCBpc01lZGlhVHlwZUNoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBib29sIGlzTWVkaWFUeXBlQ2hhcmFjdGVyKENoYXJh
Y3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gIWlzQVNDSUlTcGFjZShjKSAmJiBjICE9ICcvJzsK
IH0KQEAgLTUyLDYyICs1Myw2MSBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlz
dERpcmVjCiAKIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlOjpw
YXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmlu
Z1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBi
ZWdpbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0g
ICAgY29uc3QgVUNoYXIqIGVuZCA9IGJlZ2luICsgdmFsdWUubGVuZ3RoKCk7Ci0KICAgICAvLyAn
cGx1Z2luLXR5cGVzIF9fX187JyBPUiAncGx1Z2luLXR5cGVzOycKICAgICBpZiAodmFsdWUuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlk
UGx1Z2luVHlwZXModmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgd2hpbGUg
KHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIC8vIF9fX19fIE9SIF9fX19fbWltZTEvbWltZTEK
LSAgICAgICAgLy8gXiAgICAgICAgXgotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlT
cGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAg
ICAgICAgLy8gXgotICAgICAgICBiZWdpbiA9IHBvc2l0aW9uOwotICAgICAgICBpZiAoIXNraXBF
eGFjdGx5PFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKLSAg
ICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5k
KTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1
Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTWVkaWFUeXBl
Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBXVEY6OmdldENoYXJhY3RlcnModmFsdWUs
IFsmXShhdXRvIHBvc2l0aW9uLCBhdXRvIGVuZCkgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJU
eXBlID0gc3RkOjpyZW1vdmVfcG9pbnRlcl90PGRlY2x0eXBlKHBvc2l0aW9uKT47CiAKLSAgICAg
ICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8gICAgICBeCi0gICAgICAg
IGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJykpIHsKLSAgICAgICAg
ICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAg
ICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlw
ZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQorICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKKyAgICAgICAg
ICAgIC8vIF9fX19fIE9SIF9fX19fbWltZTEvbWltZTEKKyAgICAgICAgICAgIC8vIF4gICAgICAg
IF4KKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBv
c2l0aW9uLCBlbmQpOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUy
CisgICAgICAgICAgICAvLyBeCisgICAgICAgICAgICBhdXRvIGJlZ2luID0gcG9zaXRpb247Cisg
ICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGUsIGlzTWVkaWFUeXBlQ2hh
cmFjdGVyPihwb3NpdGlvbiwgZW5kKSkgeworICAgICAgICAgICAgICAgIHNraXBXaGlsZTxDaGFy
YWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOworICAgICAgICAgICAg
ICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3Ry
aW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNN
ZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworCisgICAgICAgICAgICAvLyBtaW1l
MS9taW1lMSBtaW1lMi9taW1lMgorICAgICAgICAgICAgLy8gICAgICBeCisgICAgICAgICAgICBp
ZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICcvJykpIHsKKyAg
ICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihw
b3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCku
cmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMgorICAgICAgICAgICAgLy8gICAgICAgXgorICAg
ICAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNoYXJh
Y3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKKyAgICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFj
dGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgICAg
ICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmlu
ZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTWVk
aWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKworICAgICAgICAgICAgLy8gbWltZTEv
bWltZTEgbWltZTIvbWltZTIgT1IgbWltZTEvbWltZTEgIE9SIG1pbWUxL21pbWUxL2Vycm9yCisg
ICAgICAgICAgICAvLyAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAg
ICAgICAgICAgICBeCisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgaXNOb3RBU0NJ
SVNwYWNlKCpwb3NpdGlvbikpIHsKKyAgICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgICAgICBk
aXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhi
ZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbV9wbHVnaW5UeXBlcy5hZGQoU3RyaW5nKGJlZ2luLCBw
b3NpdGlvbiAtIGJlZ2luKSk7CiAKLSAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIK
LSAgICAgICAgLy8gICAgICAgXgotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc01l
ZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKLSAgICAgICAgICAgIHNraXBXaGls
ZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRp
cmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJl
Z2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNwYWNlKCpwb3NpdGlvbikpOwog
ICAgICAgICB9Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+
KHBvc2l0aW9uLCBlbmQpOwotCi0gICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyIE9S
IG1pbWUxL21pbWUxICBPUiBtaW1lMS9taW1lMS9lcnJvcgotICAgICAgICAvLyAgICAgICAgICAg
IF4gICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICBeCi0gICAgICAgIGlm
IChwb3NpdGlvbiA8IGVuZCAmJiBpc05vdEFTQ0lJU3BhY2UoKnBvc2l0aW9uKSkgewotICAgICAg
ICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwot
ICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5U
eXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0gICAgICAgIG1fcGx1Z2luVHlwZXMuYWRkKFN0cmluZyhiZWdpbiwg
cG9zaXRpb24gLSBiZWdpbikpOwotCi0gICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwg
aXNBU0NJSVNwYWNlKCpwb3NpdGlvbikpOwotICAgIH0KKyAgICB9KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5U291cmNlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAJKHJldmlzaW9uIDI2MzMz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw0NCArNTYsNDEgQEAgc3RhdGljIGJvb2wg
aXNDU1BEaXJlY3RpdmVOYW1lKGNvbnN0IFN0cgogICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVND
SUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNy
Yyk7CiB9CiAKLXN0YXRpYyBib29sIGlzU291cmNlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1NvdXJjZUNoYXJhY3RlcihD
aGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7CiB9CiAKLXN0
YXRpYyBib29sIGlzSG9zdENoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNIb3N0Q2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykK
IHsKICAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICctJzsKIH0KIAot
c3RhdGljIGJvb2wgaXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1BhdGhDb21wb25lbnRDaGFyYWN0
ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBjICE9ICc/JyAmJiBjICE9ICcjJzsK
IH0KIAotc3RhdGljIGJvb2wgaXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXIoVUNoYXIgYykK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzU2NoZW1lQ29u
dGludWF0aW9uQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJ
SUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICcrJyB8fCBjID09ICctJyB8fCBjID09ICcuJzsKIH0K
IAotc3RhdGljIGJvb2wgaXNOb3RDb2xvbk9yU2xhc2goVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzTm90Q29sb25PclNsYXNoKENoYXJhY3Rl
clR5cGUgYykKIHsKICAgICByZXR1cm4gYyAhPSAnOicgJiYgYyAhPSAnLyc7CiB9CiAKLXN0YXRp
YyBib29sIGlzU291cmNlTGlzdE5vbmUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzU291cmNlTGlzdE5vbmUoY29uc3Qg
Q2hhcmFjdGVyVHlwZSogYmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKLSAgICBh
dXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKLSAgICBjb25zdCBVQ2hhciogYmVnaW4gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFy
KiBlbmQgPSBjaGFyYWN0ZXJzICsgdmFsdWUubGVuZ3RoKCk7Ci0gICAgc2tpcFdoaWxlPFVDaGFy
LCBpc0FTQ0lJU3BhY2U+KGJlZ2luLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc0FTQ0lJU3BhY2U+KGJlZ2luLCBlbmQpOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9u
ID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc1NvdXJjZUNoYXJhY3Rlcj4ocG9zaXRp
b24sIGVuZCk7CisgICAgYXV0byBwb3NpdGlvbiA9IGJlZ2luOworICAgIHNraXBXaGlsZTxDaGFy
YWN0ZXJUeXBlLCBpc1NvdXJjZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CiAgICAgaWYgKCFl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShiZWdpbiwgcG9zaXRpb24gLSBiZWdpbiwgIidu
b25lJyIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlz
QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CiAgICAgaWYgKHBvc2l0aW9uICE9IGVuZCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApAQCAtMTA4LDEyICsxMDUsMTQgQEAgQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6Q29udGVudAogCiB2b2lkIENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYg
KGlzU291cmNlTGlzdE5vbmUodmFsdWUpKSB7Ci0gICAgICAgIG1faXNOb25lID0gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZh
bHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBwYXJzZShjaGFyYWN0ZXJzLCBjaGFy
YWN0ZXJzICsgdmFsdWUubGVuZ3RoKCkpOworICAgIFdURjo6Z2V0Q2hhcmFjdGVycyh2YWx1ZSwg
WyZdKGF1dG8gY2hhcmFjdGVycywgYXV0byBlbmQpIHsKKyAgICAgICAgaWYgKGlzU291cmNlTGlz
dE5vbmUoY2hhcmFjdGVycywgZW5kKSkgeworICAgICAgICAgICAgbV9pc05vbmUgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcGFyc2UoY2hhcmFjdGVy
cywgZW5kKTsKKyAgICB9KTsKIH0KIAogYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0Ojppc1Byb3RvY29sQWxsb3dlZEJ5U3Rhcihjb25zdCBVUkwmIHVybCkgY29uc3QKQEAgLTE2
MCwxNyArMTU5LDE3IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6bWEK
IC8vIHNvdXJjZS1saXN0ICAgICAgID0gKldTUCBbIHNvdXJjZSAqKCAxKldTUCBzb3VyY2UgKSAq
V1NQIF0KIC8vICAgICAgICAgICAgICAgICAgIC8gKldTUCAiJ25vbmUnIiAqV1NQCiAvLwotdm9p
ZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZShjb25zdCBVQ2hhciogYmVn
aW4sIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2
b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlKGNvbnN0IENoYXJhY3Rl
clR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiB7Ci0gICAgY29uc3QgVUNo
YXIqIHBvc2l0aW9uID0gYmVnaW47CisgICAgYXV0byBwb3NpdGlvbiA9IGJlZ2luOwogCiAgICAg
d2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJ
SVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CiAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBl
bmQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgY29uc3QgVUNoYXIqIGJlZ2luU291
cmNlID0gcG9zaXRpb247Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNTb3VyY2VDaGFyYWN0
ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgICAgICBhdXRvIGJlZ2luU291cmNlID0gcG9zaXRpb247
CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1NvdXJjZUNoYXJhY3Rlcj4ocG9z
aXRpb24sIGVuZCk7CiAKICAgICAgICAgU3RyaW5nIHNjaGVtZSwgaG9zdCwgcGF0aDsKICAgICAg
ICAgT3B0aW9uYWw8dWludDE2X3Q+IHBvcnQ7CkBAIC0yMDUsNyArMjA0LDcgQEAgdm9pZCBDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogLy8gICAgICAgICAgICAgICAgICAgLyAo
IFsgc2NoZW1lICI6Ly8iIF0gaG9zdCBbIHBvcnQgXSBbIHBhdGggXSApCiAvLyAgICAgICAgICAg
ICAgICAgICAvICInc2VsZiciCiAvLwotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYXJzZVNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0
cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgU3Ry
aW5nJiBwYXRoLCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGFyc2VTb3VyY2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW4sIGNv
bnN0IENoYXJhY3RlclR5cGUqIGVuZCwgU3RyaW5nJiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0
aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2Fy
ZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKQogewogICAgIGlmIChiZWdpbiA9PSBlbmQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTIzMywxMiArMjMyLDEyIEBAIGJvb2wgQ29udGVudFNlY3Vy
aXR5UG9saWN5U291cmNlTGlzdDo6cGEKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2lu
SG9zdCA9IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpblBhdGggPSBlbmQ7Ci0gICAgY29u
c3QgVUNoYXIqIGJlZ2luUG9ydCA9IG51bGxwdHI7CisgICAgYXV0byBwb3NpdGlvbiA9IGJlZ2lu
OworICAgIGF1dG8gYmVnaW5Ib3N0ID0gYmVnaW47CisgICAgYXV0byBiZWdpblBhdGggPSBlbmQ7
CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW5Qb3J0ID0gbnVsbHB0cjsKIAotICAgIHNr
aXBXaGlsZTxVQ2hhciwgaXNOb3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBlbmQpOworICAgIHNr
aXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdENvbG9uT3JTbGFzaD4ocG9zaXRpb24sIGVuZCk7
CiAKICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSB7CiAgICAgICAgIC8vIGhvc3QKQEAgLTI2Mywy
MSArMjYyLDIxIEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEKICAg
ICAgICAgICAgIC8vIHNjaGVtZTovL2hvc3QgfHwgc2NoZW1lOi8vCiAgICAgICAgICAgICAvLyAg
ICAgICBeICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgIGlmICghcGFyc2VTY2hlbWUoYmVn
aW4sIHBvc2l0aW9uLCBzY2hlbWUpCi0gICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5PFVD
aGFyPihwb3NpdGlvbiwgZW5kLCAnOicpCi0gICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5
PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpCi0gICAgICAgICAgICAgICAgfHwgIXNraXBFeGFj
dGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpKQorICAgICAgICAgICAgICAgIHx8ICFza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnOicpCisgICAgICAgICAgICAg
ICAgfHwgIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICcvJykKKyAg
ICAgICAgICAgICAgICB8fCAhc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVu
ZCwgJy8nKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAo
cG9zaXRpb24gPT0gZW5kKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIGJlZ2luSG9zdCA9IHBvc2l0aW9uOwotICAgICAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBp
c05vdENvbG9uT3JTbGFzaD4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgICAgICBza2lwV2hpbGU8
Q2hhcmFjdGVyVHlwZSwgaXNOb3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBlbmQpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSAnOicpIHsK
ICAgICAgICAgICAgIC8vIGhvc3Q6cG9ydCB8fCBzY2hlbWU6Ly9ob3N0OnBvcnQKICAgICAgICAg
ICAgIC8vICAgICBeICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgICAgICAgYmVnaW5Qb3J0
ID0gcG9zaXRpb247Ci0gICAgICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQs
ICcvJyk7CisgICAgICAgICAgICBza2lwVW50aWw8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVu
ZCwgJy8nKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzExLDcgKzMxMCw3IEBAIGJvb2wgQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEKIC8vICAgICAgICAgICAgICAgICAgICAg
OyA8c2NoZW1lPiBwcm9kdWN0aW9uIGZyb20gUkZDIDM5ODYKIC8vIHNjaGVtZSAgICAgID0gQUxQ
SEEgKiggQUxQSEEgLyBESUdJVCAvICIrIiAvICItIiAvICIuIiApCiAvLwotYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNjaGVtZShjb25zdCBVQ2hhciogYmVnaW4s
IGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgc2NoZW1lKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNj
aGVtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5k
LCBTdHJpbmcmIHNjaGVtZSkKIHsKICAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKICAgICBBU1NF
UlQoc2NoZW1lLmlzRW1wdHkoKSk7CkBAIC0zMTksMTIgKzMxOCwxMiBAQCBib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAgICAgaWYgKGJlZ2luID09IGVuZCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Cisg
ICAgYXV0byBwb3NpdGlvbiA9IGJlZ2luOwogCi0gICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwg
aXNBU0NJSUFscGhhPihwb3NpdGlvbiwgZW5kKSkKKyAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJh
Y3RlclR5cGUsIGlzQVNDSUlBbHBoYT4ocG9zaXRpb24sIGVuZCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0
ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1NjaGVt
ZUNvbnRpbnVhdGlvbkNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CiAKICAgICBpZiAocG9zaXRp
b24gIT0gZW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMzcsNyArMzM2LDcgQEAgYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogLy8gICAgICAgICAgICAgICAg
ICAgLyAiKiIKIC8vIGhvc3QtY2hhciAgICAgICAgID0gQUxQSEEgLyBESUdJVCAvICItIgogLy8K
LWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VIb3N0KGNvbnN0IFVD
aGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFz
V2lsZGNhcmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSG9zdChjb25zdCBDaGFyYWN0ZXJUeXBlKiBi
ZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RI
YXNXaWxkY2FyZCkKIHsKICAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKICAgICBBU1NFUlQoaG9z
dC5pc0VtcHR5KCkpOwpAQCAtMzQ2LDI3ICszNDUsMjcgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0OjpwYQogICAgIGlmIChiZWdpbiA9PSBlbmQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOworICAgIGF1dG8g
cG9zaXRpb24gPSBiZWdpbjsKIAotICAgIGlmIChza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24s
IGVuZCwgJyonKSkgeworICAgIGlmIChza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlv
biwgZW5kLCAnKicpKSB7CiAgICAgICAgIGhvc3RIYXNXaWxkY2FyZCA9IHRydWU7CiAKICAgICAg
ICAgaWYgKHBvc2l0aW9uID09IGVuZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
ICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcuJykpCisgICAgICAg
IGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJy4nKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjb25zdCBVQ2hhciogaG9zdEJl
Z2luID0gcG9zaXRpb247CisgICAgYXV0byBob3N0QmVnaW4gPSBwb3NpdGlvbjsKIAogICAgIHdo
aWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBp
c0hvc3RDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKQorICAgICAgICBpZiAoIXNraXBFeGFjdGx5
PENoYXJhY3RlclR5cGUsIGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc0hvc3RDaGFy
YWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKIAotICAgICAgICBpZiAocG9zaXRpb24g
PCBlbmQgJiYgIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLicpKQorICAgICAg
ICBpZiAocG9zaXRpb24gPCBlbmQgJiYgIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0
aW9uLCBlbmQsICcuJykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0z
NzUsMTMgKzM3NCwxMyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBh
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdDo6cGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3Ry
aW5nJiBwYXRoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBhdGgoY29uc3QgQ2hhcmFjdGVyVHlwZSog
YmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgU3RyaW5nJiBwYXRoKQogewogICAgIEFT
U0VSVChiZWdpbiA8PSBlbmQpOwogICAgIEFTU0VSVChwYXRoLmlzRW1wdHkoKSk7CiAgICAgCi0g
ICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBp
c1BhdGhDb21wb25lbnRDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgIGF1dG8gcG9zaXRp
b24gPSBiZWdpbjsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNQYXRoQ29tcG9uZW50
Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKICAgICAvLyBwYXRoL3RvL2ZpbGUuanM/cXVlcnk9
c3RyaW5nIHx8IHBhdGgvdG8vZmlsZS5qcyNhbmNob3IKICAgICAvLyAgICAgICAgICAgICAgICBe
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICBpZiAocG9zaXRpb24gPCBlbmQp
CkBAIC0zOTYsMTMgKzM5NSwxMyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3Q6OnBhCiAKIC8vIHBvcnQgICAgICAgICAgICAgID0gIjoiICggMSpESUdJVCAvICIqIiApCiAv
LwotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBvcnQoY29uc3Qg
VUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQs
IGJvb2wmIHBvcnRIYXNXaWxkY2FyZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQb3J0KGNvbnN0IENo
YXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIE9wdGlvbmFsPHVp
bnQxNl90PiYgcG9ydCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKQogewogICAgIEFTU0VSVChiZWdp
biA8PSBlbmQpOwogICAgIEFTU0VSVCghcG9ydCk7CiAgICAgQVNTRVJUKCFwb3J0SGFzV2lsZGNh
cmQpOwogICAgIAotICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KGJlZ2luLCBlbmQsICc6Jykp
CisgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihiZWdpbiwgZW5kLCAnOicpKQog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAKICAgICBpZiAoYmVnaW4gPT0gZW5k
KQpAQCAtNDE0LDggKzQxMyw4IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dDo6cGEKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIGNvbnN0IFVDaGFy
KiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSURpZ2l0Pihw
b3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIHBvc2l0aW9uID0gYmVnaW47CisgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzQVNDSUlEaWdpdD4ocG9zaXRpb24sIGVuZCk7CiAgICAgCiAgICAg
aWYgKHBvc2l0aW9uICE9IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDMxLDIxICs0
MzAsMjEgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogLy8gTWF0
Y2ggQmxpbmsncyBiZWhhdmlvciBvZiBhbGxvd2luZyBhbiBlcXVhbCBzaWduIHRvIGFwcGVhciBh
bnl3aGVyZSBpbiB0aGUgdmFsdWUgb2YgdGhlIG5vbmNlCiAvLyBldmVuIHRob3VnaCB0aGlzIGRv
ZXMgbm90IG1hdGNoIHRoZSBiZWhhdmlvciBvZiBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBMZXZl
bCAzIHNwZWMuLAogLy8gPGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtY3NwLz4gKDI5
IEZlYnJ1YXJ5IDIwMTYpLgotc3RhdGljIGJvb2wgaXNOb25jZUNoYXJhY3RlcihVQ2hhciBjKQor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNOb25jZUNoYXJh
Y3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGlzQmFzZTY0T3JCYXNlNjRVUkxD
aGFyYWN0ZXIoYykgfHwgYyA9PSAnPSc7CiB9CiAKIC8vIG5vbmNlLXNvdXJjZSAgICA9ICInbm9u
Y2UtIiBub25jZS12YWx1ZSAiJyIKIC8vIG5vbmNlLXZhbHVlICAgICA9IGJhc2U2NC12YWx1ZQot
Ym9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZU5vbmNlU291cmNlKGNv
bnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VO
b25jZVNvdXJjZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogZW5kKQogewogICAgIGNvbnN0IHVuc2lnbmVkIG5vbmNlUHJlZml4TGVuZ3RoID0gNzsKICAg
ICBpZiAoIVN0cmluZ1ZpZXcoYmVnaW4sIGVuZCAtIGJlZ2luKS5zdGFydHNXaXRoSWdub3JpbmdB
U0NJSUNhc2UoIidub25jZS0iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFVD
aGFyKiBwb3NpdGlvbiA9IGJlZ2luICsgbm9uY2VQcmVmaXhMZW5ndGg7Ci0gICAgY29uc3QgVUNo
YXIqIGJlZ2luTm9uY2VWYWx1ZSA9IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNO
b25jZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBwb3NpdGlvbiA9IGJlZ2lu
ICsgbm9uY2VQcmVmaXhMZW5ndGg7CisgICAgYXV0byBiZWdpbk5vbmNlVmFsdWUgPSBwb3NpdGlv
bjsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb25jZUNoYXJhY3Rlcj4ocG9zaXRp
b24sIGVuZCk7CiAgICAgaWYgKHBvc2l0aW9uID49IGVuZCB8fCBwb3NpdGlvbiA9PSBiZWdpbk5v
bmNlVmFsdWUgfHwgKnBvc2l0aW9uICE9ICdcJycpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBtX25vbmNlcy5hZGQoU3RyaW5nKGJlZ2luTm9uY2VWYWx1ZSwgcG9zaXRpb24gLSBiZWdpbk5v
bmNlVmFsdWUpKTsKQEAgLTQ1NSwxMyArNDU0LDEzIEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGEKIC8vIGhhc2gtc291cmNlICAgID0gIiciIGhhc2gtYWxnb3JpdGht
ICItIiBiYXNlNjQtdmFsdWUgIiciCiAvLyBoYXNoLWFsZ29yaXRobSA9ICJzaGEyNTYiIC8gInNo
YTM4NCIgLyAic2hhNTEyIgogLy8gYmFzZTY0LXZhbHVlICA9IDEqKCBBTFBIQSAvIERJR0lUIC8g
IisiIC8gIi8iIC8gIi0iIC8gIl8iICkqMiggIj0iICkKLWJvb2wgQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGFyc2VIYXNoU291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3Qg
VUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VIYXNoU291cmNlKGNvbnN0IENoYXJhY3Rl
clR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiB7CiAgICAgaWYgKGJlZ2lu
ID09IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0
aW9uID0gYmVnaW47Ci0gICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwg
J1wnJykpCisgICAgYXV0byBwb3NpdGlvbiA9IGJlZ2luOworICAgIGlmICghc2tpcEV4YWN0bHk8
Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJ1wnJykpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGF1dG8gZGlnZXN0ID0gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KHBvc2l0aW9u
LCBlbmQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSwxOSArNTUsMTkgQEAgcHVibGljOgogICAgIGJvb2wgaXNOb25l
KCkgY29uc3QgeyByZXR1cm4gbV9pc05vbmU7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIHBhcnNl
KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCBwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdp
biwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKTsKIAotICAgIGJvb2wgcGFyc2VTb3VyY2UoY29u
c3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNjaGVtZSwgU3RyaW5n
JiBob3N0LCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIFN0cmluZyYgcGF0aCwgYm9vbCYgaG9z
dEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNhcmQpOwotICAgIGJvb2wgcGFyc2VTY2hl
bWUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNjaGVtZSk7
Ci0gICAgYm9vbCBwYXJzZUhvc3QoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
LCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCk7Ci0gICAgYm9vbCBwYXJzZVBv
cnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBPcHRpb25hbDx1aW50MTZf
dD4mIHBvcnQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7Ci0gICAgYm9vbCBwYXJzZVBhdGgoY29u
c3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHBhdGgpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VTb3VyY2UoY29uc3QgQ2hh
cmFjdGVyVHlwZSogYmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgU3RyaW5nJiBzY2hl
bWUsIFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBTdHJpbmcmIHBhdGgs
IGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlU2NoZW1lKGNvbnN0IENoYXJh
Y3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN0cmluZyYgc2NoZW1l
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlSG9zdChj
b25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBTdHJp
bmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVBvcnQoY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW4s
IGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29s
JiBwb3J0SGFzV2lsZGNhcmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGJvb2wgcGFyc2VQYXRoKGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0
ZXJUeXBlKiBlbmQsIFN0cmluZyYgcGF0aCk7CiAKLSAgICBib29sIHBhcnNlTm9uY2VTb3VyY2Uo
Y29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlTm9uY2VTb3VyY2UoY29uc3QgQ2hhcmFjdGVy
VHlwZSogYmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCk7CiAKICAgICBib29sIGlzUHJv
dG9jb2xBbGxvd2VkQnlTdGFyKGNvbnN0IFVSTCYpIGNvbnN0OwogCi0gICAgYm9vbCBwYXJzZUhh
c2hTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlSGFzaFNvdXJjZShjb25zdCBD
aGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKTsKIAogICAgIGNv
bnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgbV9wb2xpY3k7CiAgICAgVmVjdG9yPENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZT4gbV9saXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRGF0ZUNvbXBvbmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RhdGVDb21wb25lbnRzLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOSAr
MTExLDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyAKIHsKICAg
ICBpZiAocGFyc2VTdGFydCArIHBhcnNlTGVuZ3RoID4gbGVuZ3RoIHx8IHBhcnNlTGVuZ3RoIDw9
IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGludCB2YWx1ZSA9IDA7Ci0gICAgY29u
c3QgQ2hhcmFjdGVyVHlwZSogY3VycmVudCA9IHNyYyArIHBhcnNlU3RhcnQ7Ci0gICAgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogZW5kID0gY3VycmVudCArIHBhcnNlTGVuZ3RoOworICAgIGF1dG8gY3Vy
cmVudCA9IHNyYyArIHBhcnNlU3RhcnQ7CisgICAgYXV0byBlbmQgPSBjdXJyZW50ICsgcGFyc2VM
ZW5ndGg7CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBuZWdhdGl2ZSBudW1iZXJz
IGZvciBJU08gODYwMS4KICAgICBmb3IgKDsgY3VycmVudCA8IGVuZDsgKytjdXJyZW50KSB7CkBA
IC0xOTgsNDMgKzE5OSw0MyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGPiBzdGF0aWMgT3B0aW9uYWw8
RGF0CiAKIE9wdGlvbmFsPERhdGVDb21wb25lbnRzPiBEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNp
bmdNb250aChjb25zdCBTdHJpbmdWaWV3JiBzb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZy
b21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0ZSwgY29uc3QgYXV0byogc3JjLCBhdXRvIGxl
bmd0aCwgYXV0byYgZW5kKSB7Ci0gICAgICAgIHJldHVybiBkYXRlLnBhcnNlTW9udGgoc3JjLCBs
ZW5ndGgsIDAsIGVuZCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAo
YXV0byYgZGF0ZSwgYXV0byBjaGFyYWN0ZXJzLCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7Cisg
ICAgICAgIHJldHVybiBkYXRlLnBhcnNlTW9udGgoY2hhcmFjdGVycywgbGVuZ3RoLCAwLCBlbmQp
OwogICAgIH0pOwogfQogCiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4gRGF0ZUNvbXBvbmVudHM6
OmZyb21QYXJzaW5nRGF0ZShjb25zdCBTdHJpbmdWaWV3JiBzb3VyY2UpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0ZSwgY29uc3QgYXV0byogc3Jj
LCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7Ci0gICAgICAgIHJldHVybiBkYXRlLnBhcnNlRGF0
ZShzcmMsIGxlbmd0aCwgMCwgZW5kKTsKKyAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhzb3Vy
Y2UsIFtdIChhdXRvJiBkYXRlLCBhdXRvIGNoYXJhY3RlcnMsIGF1dG8gbGVuZ3RoLCBhdXRvJiBl
bmQpIHsKKyAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VEYXRlKGNoYXJhY3RlcnMsIGxlbmd0aCwg
MCwgZW5kKTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8RGF0ZUNvbXBvbmVudHM+IERhdGVDb21w
b25lbnRzOjpmcm9tUGFyc2luZ1dlZWsoY29uc3QgU3RyaW5nVmlldyYgc291cmNlKQogewotICAg
IHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10gKGF1dG8mIGRhdGUsIGNvbnN0IGF1
dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkgewotICAgICAgICByZXR1cm4gZGF0ZS5w
YXJzZVdlZWsoc3JjLCBsZW5ndGgsIDAsIGVuZCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJp
bmcoc291cmNlLCBbXSAoYXV0byYgZGF0ZSwgYXV0byBjaGFyYWN0ZXJzLCBhdXRvIGxlbmd0aCwg
YXV0byYgZW5kKSB7CisgICAgICAgIHJldHVybiBkYXRlLnBhcnNlV2VlayhjaGFyYWN0ZXJzLCBs
ZW5ndGgsIDAsIGVuZCk7CiAgICAgfSk7CiB9CiAKIE9wdGlvbmFsPERhdGVDb21wb25lbnRzPiBE
YXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdUaW1lKGNvbnN0IFN0cmluZ1ZpZXcmIHNvdXJjZSkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBj
b25zdCBhdXRvKiBzcmMsIGF1dG8gbGVuZ3RoLCBhdXRvJiBlbmQpIHsKLSAgICAgICAgcmV0dXJu
IGRhdGUucGFyc2VUaW1lKHNyYywgbGVuZ3RoLCAwLCBlbmQpOworICAgIHJldHVybiBjcmVhdGVG
cm9tU3RyaW5nKHNvdXJjZSwgW10gKGF1dG8mIGRhdGUsIGF1dG8gY2hhcmFjdGVycywgYXV0byBs
ZW5ndGgsIGF1dG8mIGVuZCkgeworICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZVRpbWUoY2hhcmFj
dGVycywgbGVuZ3RoLCAwLCBlbmQpOwogICAgIH0pOwogfQogCiBPcHRpb25hbDxEYXRlQ29tcG9u
ZW50cz4gRGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nRGF0ZVRpbWVMb2NhbChjb25zdCBTdHJp
bmdWaWV3JiBzb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBb
XSAoYXV0byYgZGF0ZSwgY29uc3QgYXV0byogc3JjLCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7
Ci0gICAgICAgIHJldHVybiBkYXRlLnBhcnNlRGF0ZVRpbWVMb2NhbChzcmMsIGxlbmd0aCwgMCwg
ZW5kKTsKKyAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRl
LCBhdXRvIGNoYXJhY3RlcnMsIGF1dG8gbGVuZ3RoLCBhdXRvJiBlbmQpIHsKKyAgICAgICAgcmV0
dXJuIGRhdGUucGFyc2VEYXRlVGltZUxvY2FsKGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgZW5kKTsK
ICAgICB9KTsKIH0KIAogT3B0aW9uYWw8RGF0ZUNvbXBvbmVudHM+IERhdGVDb21wb25lbnRzOjpm
cm9tUGFyc2luZ0RhdGVUaW1lKGNvbnN0IFN0cmluZ1ZpZXcmIHNvdXJjZSkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBjb25zdCBhdXRvKiBz
cmMsIGF1dG8gbGVuZ3RoLCBhdXRvJiBlbmQpIHsKLSAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VE
YXRlVGltZShzcmMsIGxlbmd0aCwgMCwgZW5kKTsKKyAgICByZXR1cm4gY3JlYXRlRnJvbVN0cmlu
Zyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBhdXRvIGNoYXJhY3RlcnMsIGF1dG8gbGVuZ3RoLCBh
dXRvJiBlbmQpIHsKKyAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VEYXRlVGltZShjaGFyYWN0ZXJz
LCBsZW5ndGgsIDAsIGVuZCk7CiAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMzM1
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50OjpoYXNWYWxpCiB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1
ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKLSAgICAgICAgbV90
eXBlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKHZhbHVlKTsKKyAgICAg
ICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKHZhbHVlKS52
YWx1ZU9yKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV04pOwogICAgICAg
ICBpZiAobV90eXBlID09IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX01BVFJJWCkK
ICAgICAgICAgICAgIG1fdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VO
S05PV047CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNTQgKzc3LDUy
IEBAIGZhaWw6CiAgICAgcmVzdWx0LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0
b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmdWaWV3JiBwYXJzZSkK
K3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25z
dCBTdHJpbmdWaWV3JiBzdHJpbmcpCiB7Ci0gICAgaWYgKHBhcnNlLmlzRW1wdHkoKSkKKyAgICBp
ZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gcGFyc2UudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBj
b25zdCBVQ2hhciogZW5kID0gY3VyICsgcGFyc2UubGVuZ3RoKCk7Ci0KLSAgICBza2lwT3B0aW9u
YWxTVkdTcGFjZXMoY3VyLCBlbmQpOwotCi0gICAgVmVjdG9yPFVuaXRCZXppZXI+IHJlc3VsdDsK
LQotICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICB3aGlsZSAoY3VyIDwgZW5kKSB7
Ci0gICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIGF1dG8gcG9zQSA9IHBhcnNl
TnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NBKQotICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHN0cmluZywgWyZd
KGF1dG8gY3VyLCBhdXRvIGVuZCkgLT4gT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiB7Cisg
ICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKLSAgICAgICAgYXV0byBw
b3NCID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgICAgICBpZiAoIXBvc0IpCi0gICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBWZWN0b3I8VW5pdEJlemllcj4gcmVz
dWx0OwogCi0gICAgICAgIGF1dG8gcG9zQyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAg
ICAgaWYgKCFwb3NDKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
Ym9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7Cisg
ICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICAgICAgYXV0byBwb3NBID0g
cGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICAgICAgaWYgKCFwb3NBKQorICAgICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgYXV0byBwb3NEID0gcGFyc2VO
dW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Ci0gICAgICAg
IGlmICghcG9zRCkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAg
ICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7CisgICAgICAgICAgICBpZiAoIXBv
c0IpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOworICAgICAgICAgICAgYXV0byBwb3NDID0gcGFy
c2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICAgICAgaWYgKCFwb3NDKQorICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgaWYgKGN1ciA8IGVuZCAmJiAqY3Vy
ID09ICc7JykgewotICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwotICAgICAgICAgICAg
Y3VyKys7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVyKGN1
ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICAgICAgaWYg
KCFwb3NEKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKKyAgICAgICAgICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKLSAgICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6aWVy
IHsgKnBvc0EsICpwb3NCLCAqcG9zQywgKnBvc0QgfSk7Ci0gICAgfQorICAgICAgICAgICAgaWYg
KGN1ciA8IGVuZCAmJiAqY3VyID09ICc7JykgeworICAgICAgICAgICAgICAgIGRlbGltUGFyc2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjdXIrKzsKKyAgICAgICAgICAgIH0KIAotICAgIGlm
ICghKGN1ciA9PSBlbmQgJiYgIWRlbGltUGFyc2VkKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CisKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoVW5pdEJlemllciB7ICpwb3NBLCAqcG9zQiwgKnBvc0Ms
ICpwb3NEIH0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoY3VyID09IGVuZCAmJiAhZGVs
aW1QYXJzZWQpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSk7CiB9CiAKIGJvb2wgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAko
cmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDEyICs4NiwyMiBAQCBib29sIFNWR0ZpdFRvVmlld0Jv
eDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAKIE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3
Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCiB7Ci0gICAgYXV0byB1
cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB2YWx1ZS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBy
ZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5ndGgo
KSk7CisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyh2YWx1ZSwgWyZdKGF1dG8gcHRyLCBh
dXRvIGVuZCkgeworICAgICAgICByZXR1cm4gcGFyc2VWaWV3Qm94R2VuZXJpYyhwdHIsIGVuZCk7
CisgICAgfSk7CiB9CiAKLU9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJz
ZVZpZXdCb3goY29uc3QgVUNoYXIqJiBjLCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRl
KQorT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25z
dCBMQ2hhciomIHN0YXJ0LCBjb25zdCBMQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKQoreworICAg
IHJldHVybiBwYXJzZVZpZXdCb3hHZW5lcmljKHN0YXJ0LCBlbmQsIHZhbGlkYXRlKTsKK30KKwor
T3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBV
Q2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKQoreworICAgIHJl
dHVybiBwYXJzZVZpZXdCb3hHZW5lcmljKHN0YXJ0LCBlbmQsIHZhbGlkYXRlKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRU
b1ZpZXdCb3g6OnBhcnNlVmlld0JveEdlbmVyaWMoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGMsIGNv
bnN0IENoYXJhY3RlclR5cGUqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKIHsKICAgICBTdHJpbmdWaWV3
IHN0cihjLCBlbmQgLSBjKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmll
d0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3gu
aAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0Jv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw5ICs2NiwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCByZXNldCgpOwogICAgIGJvb2wgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IGNvbnN0IEF0b21TdHJpbmcmKTsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0Jv
eChjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJz
ZVZpZXdCb3goY29uc3QgTENoYXIqJiBzdGFydCwgY29uc3QgTENoYXIqIGVuZCwgYm9vbCB2YWxp
ZGF0ZSA9IHRydWUpOwogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VWaWV3Qm94KGNvbnN0
IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsK
IAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25h
bDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveEdlbmVyaWMoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHN0
YXJ0LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKwog
ICAgIFJlZjxTVkdBbmltYXRlZFJlY3Q+IG1fdmlld0JveDsKICAgICBSZWY8U1ZHQW5pbWF0ZWRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvPiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CiAgICAgYm9vbCBtX2lz
Vmlld0JveFZhbGlkIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5n
dGhMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3Qu
aAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNTcsMjYgKzU3LDI0IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIGNsZWFySXRlbXMoKTsKIAotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9
IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25z
dCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgICAgICBjb25zdCBVQ2hh
ciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQp
IHsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IHB0cjsKLSAgICAgICAgICAgIHdo
aWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnLCcgJiYgIWlzU1ZHU3BhY2UoKnB0cikpCi0gICAg
ICAgICAgICAgICAgcHRyKys7Ci0gICAgICAgICAgICBpZiAocHRyID09IHN0YXJ0KQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmcoc3RhcnQs
IHB0ciAtIHN0YXJ0KTsKLSAgICAgICAgICAgIFNWR0xlbmd0aFZhbHVlIHZhbHVlKG1fbGVuZ3Ro
TW9kZSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUuc2V0VmFsdWVBc1N0cmluZyh2YWx1ZVN0cmlu
ZykuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBXVEY6OmdldENoYXJhY3RlcnModmFsdWUsIFsmXShhdXRvIHB0ciwgYXV0byBlbmQpIHsKKyAg
ICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAgICAgICAgICAgICBhdXRvKiBzdGFy
dCA9IHB0cjsKKyAgICAgICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gJywn
ICYmICFpc1NWR1NwYWNlKCpwdHIpKQorICAgICAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAg
ICAgICAgICAgICBpZiAocHRyID09IHN0YXJ0KQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0
KG1fbGVuZ3RoTW9kZSwgU3RyaW5nVmlldyhzdGFydCwgcHRyIC0gc3RhcnQpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgIGFwcGVuZChTVkdMZW5ndGg6OmNyZWF0ZShXVEZNb3ZlKCp2YWx1ZSkpKTsKKyAg
ICAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGFwcGVuZChTVkdMZW5ndGg6OmNyZWF0ZSh2
YWx1ZSkpOwotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRy
LCBlbmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHB0ciA9PSBlbmQ7CisgICAgICAg
ICAgICByZXR1cm4gcHRyID09IGVuZDsKKyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgU3RyaW5n
IHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TGVuZ3RoVmFsdWUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTGVuZ3RoVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxNyArNjEsMTcgQEAgc3Rh
dGljIGlubGluZSBjb25zdCBjaGFyKiBsZW5ndGhUeXBlVG9TdAogICAgIHJldHVybiAiIjsKIH0K
IAotc3RhdGljIGlubGluZSBTVkdMZW5ndGhUeXBlIHBhcnNlTGVuZ3RoVHlwZShjb25zdCBVQ2hh
ciogcHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gc3RhdGljIGlubGluZSBTVkdMZW5ndGhUeXBlIHBhcnNlTGVuZ3RoVHlwZShjb25zdCBDaGFy
YWN0ZXJUeXBlKiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAgICBpZiAocHRy
ID09IGVuZCkKICAgICAgICAgcmV0dXJuIFNWR0xlbmd0aFR5cGU6Ok51bWJlcjsKIAotICAgIGNv
bnN0IFVDaGFyIGZpcnN0Q2hhciA9ICpwdHI7CisgICAgYXV0byBmaXJzdENoYXIgPSAqcHRyOwog
CiAgICAgaWYgKCsrcHRyID09IGVuZCkKICAgICAgICAgcmV0dXJuIGZpcnN0Q2hhciA9PSAnJScg
PyBTVkdMZW5ndGhUeXBlOjpQZXJjZW50YWdlIDogU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bjsKIAot
ICAgIGNvbnN0IFVDaGFyIHNlY29uZENoYXIgPSAqcHRyOworICAgIGF1dG8gc2Vjb25kQ2hhciA9
ICpwdHI7CiAKICAgICBpZiAoKytwdHIgIT0gZW5kKQogICAgICAgICByZXR1cm4gU1ZHTGVuZ3Ro
VHlwZTo6VW5rbm93bjsKQEAgLTE4MCw3ICsxODAsMTUgQEAgU1ZHTGVuZ3RoVmFsdWU6OlNWR0xl
bmd0aFZhbHVlKGNvbnN0IFNWRwogICAgIHNldFZhbHVlKGNvbnRleHQsIHZhbHVlKTsKIH0KIAot
U1ZHTGVuZ3RoVmFsdWUgU1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVjdChTVkdMZW5ndGhNb2RlIGxl
bmd0aE1vZGUsIGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZywgU1ZHUGFyc2luZ0Vycm9yJiBw
YXJzZUVycm9yLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgbmVnYXRpdmVWYWx1ZXNNb2Rl
KQorT3B0aW9uYWw8U1ZHTGVuZ3RoVmFsdWU+IFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QoU1ZH
TGVuZ3RoTW9kZSBsZW5ndGhNb2RlLCBjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFzU3RyaW5nKQor
eworICAgIFNWR0xlbmd0aFZhbHVlIGxlbmd0aCB7IGxlbmd0aE1vZGUgfTsKKyAgICBpZiAobGVu
Z3RoLnNldFZhbHVlQXNTdHJpbmcodmFsdWVBc1N0cmluZykuaGFzRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKworU1ZHTGVu
Z3RoVmFsdWUgU1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVjdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1v
ZGUsIGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlQXNTdHJpbmcsIFNWR1BhcnNpbmdFcnJvciYgcGFy
c2VFcnJvciwgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlIG5lZ2F0aXZlVmFsdWVzTW9kZSkK
IHsKICAgICBTVkdMZW5ndGhWYWx1ZSBsZW5ndGgobGVuZ3RoTW9kZSk7CiAKQEAgLTIzOSw3ICsy
NDcsNyBAQCBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IFNWR0xlbmd0aFZhbHVlOjp0CiAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobGVuZ3RoLnZhbHVlSW5TcGVjaWZpZWRVbml0
cygpLCBsZW5ndGhUeXBlVG9QcmltaXRpdmVUeXBlKGxlbmd0aC5sZW5ndGhUeXBlKCkpKTsKIH0K
IAotRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nLCBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCitFeGNl
cHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJp
bmdWaWV3JiB2YWx1ZUFzU3RyaW5nLCBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCiB7CiAgICAg
bV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAwOwogICAgIG1fbGVuZ3RoTW9kZSA9IGxlbmd0aE1v
ZGU7CkBAIC0yODYsMjYgKzI5NCwyNCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1
ZTo6c2V0VmFsCiAgICAgcmV0dXJuIHNldFZhbHVlKGNvbnRleHQsIHZhbHVlKTsKIH0KIAotRXhj
ZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCitFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVB
c1N0cmluZyhjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCiB7CiAgICAgaWYgKHN0cmluZy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBj
b25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFy
KiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBhdXRvIGNvbnZlcnRlZE51bWJl
ciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OwotICAgIGlmICghY29udmVydGVkTnVtYmVyKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U3ludGF4RXJyb3IgfTsKLQotICAgIGF1dG8gbGVuZ3RoVHlwZSA9IHBhcnNlTGVuZ3RoVHlwZShw
dHIsIGVuZCk7Ci0gICAgaWYgKGxlbmd0aFR5cGUgPT0gU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bikK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CisgICAgcmV0dXJuIFdU
Rjo6Z2V0Q2hhcmFjdGVycyhzdHJpbmcsIFsmXShhdXRvIHB0ciwgYXV0byBlbmQpIC0+IEV4Y2Vw
dGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJzZU51bWJl
cihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgaWYg
KCFjb252ZXJ0ZWROdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4
RXJyb3IgfTsKKworICAgICAgICBhdXRvIGxlbmd0aFR5cGUgPSBwYXJzZUxlbmd0aFR5cGUocHRy
LCBlbmQpOworICAgICAgICBpZiAobGVuZ3RoVHlwZSA9PSBTVkdMZW5ndGhUeXBlOjpVbmtub3du
KQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBt
X2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwotICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0g
KmNvbnZlcnRlZE51bWJlcjsKLSAgICByZXR1cm4geyB9OworICAgICAgICBtX2xlbmd0aFR5cGUg
PSBsZW5ndGhUeXBlOworICAgICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9ICpjb252ZXJ0
ZWROdW1iZXI7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfSk7CiB9CiAKIEV4Y2VwdGlvbk9y
PHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhjb25zdCBTVkdM
ZW5ndGhDb250ZXh0JiBjb250ZXh0LCBTVkdMZW5ndGhUeXBlIGxlbmd0aFR5cGUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDEzICs1
OCwxNCBAQCBlbnVtIGNsYXNzIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA6CiBjbGFzcyBT
VkdMZW5ndGhWYWx1ZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgU1ZHTGVuZ3RoVmFsdWUoU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVyLCBj
b25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcgPSBTdHJpbmcoKSk7CisgICAgU1ZHTGVuZ3RoVmFs
dWUoU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVyLCBjb25zdCBTdHJpbmcmIHZh
bHVlQXNTdHJpbmcgPSB7IH0pOwogICAgIFNWR0xlbmd0aFZhbHVlKGZsb2F0IHZhbHVlSW5TcGVj
aWZpZWRVbml0cywgU1ZHTGVuZ3RoVHlwZSwgU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6
Ok90aGVyKTsKICAgICBTVkdMZW5ndGhWYWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0JiwgZmxv
YXQsIFNWR0xlbmd0aFR5cGUgPSBTVkdMZW5ndGhUeXBlOjpOdW1iZXIsIFNWR0xlbmd0aE1vZGUg
PSBTVkdMZW5ndGhNb2RlOjpPdGhlcik7CiAKLSAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFsdWUgY29u
c3RydWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZyYsIFNWR1BhcnNpbmdFcnJvciYsIFNW
R0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA9IFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZTo6
QWxsb3cpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdMZW5ndGhWYWx1ZT4gY29uc3RydWN0KFNW
R0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFs
dWUgY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1ZpZXcmLCBTVkdQYXJzaW5n
RXJyb3ImLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgPSBTVkdMZW5ndGhOZWdhdGl2ZVZh
bHVlc01vZGU6OkFsbG93KTsKICAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFsdWUgYmxlbmQoY29uc3Qg
U1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0bywgZmxvYXQgcHJv
Z3Jlc3MpOwotICAgIAorCiAgICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGZyb21DU1NQcmltaXRp
dmVWYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYpOwogICAgIHN0YXRpYyBSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+IHRvQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgU1ZHTGVuZ3RoVmFsdWUmKTsK
IApAQCAtODUsOCArODYsOCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFs
dWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZsb2F0KTsKICAgICBFeGNlcHRpb25Pcjx2b2lk
PiBzZXRWYWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0JiwgZmxvYXQsIFNWR0xlbmd0aFR5cGUs
IFNWR0xlbmd0aE1vZGUpOwogCi0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVBc1N0cmlu
Zyhjb25zdCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFzU3RyaW5n
KGNvbnN0IFN0cmluZyYsIFNWR0xlbmd0aE1vZGUpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNl
dFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+
IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYsIFNWR0xlbmd0aE1vZGUpOwogCiAg
ICAgRXhjZXB0aW9uT3I8dm9pZD4gY29udmVydFRvU3BlY2lmaWVkVW5pdHMoY29uc3QgU1ZHTGVu
Z3RoQ29udGV4dCYsIFNWR0xlbmd0aFR5cGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1i
ZXJMaXN0LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1i
ZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDIwICs1NCwxOCBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBjbGVhckl0ZW1zKCk7CiAKLSAgICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJh
Y3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAg
ICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29u
c3QgVUNoYXIqIGVuZCA9IHB0ciArIHZhbHVlLmxlbmd0aCgpOwotCi0gICAgICAgIC8vIFRoZSBz
cGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNuJ3QgYWxsb3cgbGVhZGluZyB3aGl0ZXNw
YWNlLgotICAgICAgICAvLyBXZSBtaWdodCBjaG9vc2UgdG8gdmlvbGF0ZSB0aGF0IGludGVudGlv
bmFsbHkuCi0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGF1dG8gbnVt
YmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAgICAgICAgICAgaWYgKCFudW1iZXIpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVyOjpjcmVh
dGUoKm51bWJlcikpOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBXVEY6OmdldENoYXJhY3Rl
cnModmFsdWUsIFsmXShhdXRvIHB0ciwgYXV0byBlbmQpIHsKKyAgICAgICAgICAgIC8vIFRoZSBz
cGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNuJ3QgYWxsb3cgbGVhZGluZyB3aGl0ZXNw
YWNlLgorICAgICAgICAgICAgLy8gV2UgbWlnaHQgY2hvb3NlIHRvIHZpb2xhdGUgdGhhdCBpbnRl
bnRpb25hbGx5LgorICAgICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgeworICAgICAgICAgICAg
ICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOworICAgICAgICAgICAgICAg
IGlmICghbnVtYmVyKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBhcHBlbmQoU1ZHTnVtYmVyOjpjcmVhdGUoKm51bWJlcikpOworICAgICAgICAgICAgfQogCi0g
ICAgICAgIHJldHVybiBwdHIgPT0gZW5kOworICAgICAgICAgICAgcmV0dXJuIHB0ciA9PSBlbmQ7
CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qg
b3ZlcnJpZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDEzICsxNDksMTIgQEAgT3B0aW9uYWw8Zmxv
YXQ+IHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFyKgogCiBPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1i
ZXIoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQog
ewotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7
Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKLSAgICBhdXRv
IHJlc3VsdCA9IGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7Ci0gICAgaWYgKHB0
ciAhPSBlbmQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHN0cmluZywgW3NraXBdKGF1dG8gcHRy
LCBhdXRvIGVuZCkgLT4gT3B0aW9uYWw8ZmxvYXQ+IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBn
ZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIHNraXApOworICAgICAgICBpZiAocHRyICE9IGVu
ZCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfSk7CiB9CiAKIC8vIG9ubHkgdXNlZCB0byBwYXJzZSBsYXJnZUFyY0ZsYWcgYW5k
IHN3ZWVwRmxhZyB3aGljaCBtdXN0IGJlIGEgIjAiIG9yICIxIgpAQCAtMTk1LDI1ICsxOTQsMjMg
QEAgT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTgogICAgIGlmIChzdHJp
bmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byB1
cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0g
ICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBV
Q2hhciogZW5kID0gY3VyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgYXV0byB4ID0gcGFyc2VO
dW1iZXIoY3VyLCBlbmQpOwotICAgIGlmICgheCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHN0cmluZywgW10oYXV0byBwdHIsIGF1
dG8gZW5kKSAtPiBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4geworICAgICAgICBh
dXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7CisgICAgICAgIGlmICgheCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoY3VyID09IGVuZCkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4LCAqeCk7CisgICAgICAgIGlmIChwdHIgPT0gZW5kKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4LCAqeCk7CiAKLSAgICBhdXRvIHkg
PSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsK
LSAgICBpZiAoIXkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8g
eSA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OworICAgICAgICBpZiAoIXkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgaWYgKGN1ciAhPSBlbmQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IGlmIChwdHIgIT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwgKnkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIoKngsICp5KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQ
b2ludChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCkBAIC0yMjEsODAgKzIxOCw3NSBAQCBPcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZVBvaW50KGNvbnN0IFN0CiAgICAgaWYgKHN0cmluZy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25z
dCBVQ2hhciogY3VyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBl
bmQgPSBjdXIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBpZiAoIXNraXBPcHRpb25hbFNWR1Nw
YWNlcyhjdXIsIGVuZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJu
IFdURjo6Z2V0Q2hhcmFjdGVycyhzdHJpbmcsIFtdKGF1dG8gcHRyLCBhdXRvIGVuZCkgLT4gT3B0
aW9uYWw8RmxvYXRQb2ludD4geworICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhw
dHIsIGVuZCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBw
b2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXIsIGVuZCk7Ci0gICAgaWYgKCFwb2ludCkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQ
b2ludChwdHIsIGVuZCk7CisgICAgICAgIGlmICghcG9pbnQpCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgLy8gRGlzYWxsb3cgYW55dGhpbmcgZXhjZXB0IHNwYWNlcyBh
dCB0aGUgZW5kLgotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0gICAgCi0g
ICAgcmV0dXJuIHBvaW50OworICAgICAgICAvLyBEaXNhbGxvdyBhbnl0aGluZyBleGNlcHQgc3Bh
Y2VzIGF0IHRoZSBlbmQuCisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFs
PEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKIHsKLSAgICBh
dXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgCi0gICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKLSAgICAKLSAgICBhdXRvIHggPSBwYXJzZU51bWJl
cihwdHIsIGVuZCk7Ci0gICAgaWYgKCF4KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
ICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKLSAgICBpZiAoIXkpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKHB0ciwg
ZW5kKTsKLSAgICBpZiAoIXdpZHRoKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAg
IGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpEb250U2tpcCk7Ci0gICAgaWYgKCFoZWlnaHQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyhzdHJpbmcsIFtdKGF1dG8gcHRyLCBh
dXRvIGVuZCkgLT4gT3B0aW9uYWw8RmxvYXRSZWN0PiB7CisgICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlcyhwdHIsIGVuZCk7CisgICAgICAgIAorICAgICAgICBhdXRvIHggPSBwYXJzZU51bWJl
cihwdHIsIGVuZCk7CisgICAgICAgIGlmICgheCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICAgICAg
aWYgKCF5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byB3
aWR0aCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICAgICAgaWYgKCF3aWR0aCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VO
dW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAg
IGlmICghaGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiBGbG9hdFJlY3QgeyAqeCwgKnksICp3aWR0aCwgKmhlaWdodCB9OworICAgICAgICByZXR1
cm4gRmxvYXRSZWN0IHsgKngsICp5LCAqd2lkdGgsICpoZWlnaHQgfTsKKyAgICB9KTsKIH0KIAog
T3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmdWaWV3
JiBzdHJpbmcpCiB7CiAgICAgLy8gRklYTUU6IFBhcnNpbmcgZXJyb3IgZGV0ZWN0aW9uIGlzIG1p
c3NpbmcuCiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0g
ICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKKyAgICByZXR1cm4gV1RGOjpnZXRD
aGFyYWN0ZXJzKHN0cmluZywgW10oYXV0byBwdHIsIGF1dG8gZW5kKSAtPiBPcHRpb25hbDxIYXNo
U2V0PFN0cmluZz4+IHsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsK
IAotICAgIEhhc2hTZXQ8U3RyaW5nPiB2YWx1ZXM7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiB2
YWx1ZXM7CiAKLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIC8vIExlYWRpbmcgYW5k
IHRyYWlsaW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2UgYmVmb3JlIGFuZCBhZnRlciBz
ZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dFN0
YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gJywnKQotICAg
ICAgICAgICAgKytwdHI7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAgICAgICAg
IC8vIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2UgYmVm
b3JlIGFuZCBhZnRlciBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCisgICAgICAgICAgICBh
dXRvKiBpbnB1dFN0YXJ0ID0gcHRyOworICAgICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAq
cHRyICE9ICcsJykKKyAgICAgICAgICAgICAgICArK3B0cjsKIAotICAgICAgICBpZiAocHRyID09
IGlucHV0U3RhcnQpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChwdHIgPT0g
aW5wdXRTdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAvLyB3YWxrIGJh
Y2t3YXJkcyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBhbnkgd2hpdGVzcGFjZQotICAgICAgICBjb25z
dCBVQ2hhciogaW5wdXRFbmQgPSBwdHIgLSAxOwotICAgICAgICB3aGlsZSAoaW5wdXRTdGFydCA8
IGlucHV0RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5kKSkKLSAgICAgICAgICAgIC0taW5wdXRF
bmQ7CisgICAgICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBh
bnkgd2hpdGVzcGFjZQorICAgICAgICAgICAgYXV0byogaW5wdXRFbmQgPSBwdHIgLSAxOworICAg
ICAgICAgICAgd2hpbGUgKGlucHV0U3RhcnQgPCBpbnB1dEVuZCAmJiBpc1NWR1NwYWNlKCppbnB1
dEVuZCkpCisgICAgICAgICAgICAgICAgLS1pbnB1dEVuZDsKIAotICAgICAgICB2YWx1ZXMuYWRk
KFN0cmluZyhpbnB1dFN0YXJ0LCBpbnB1dEVuZCAtIGlucHV0U3RhcnQgKyAxKSk7Ci0gICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnLCcpOwotICAgIH0K
KyAgICAgICAgICAgIHZhbHVlcy5hZGQoU3RyaW5nKGlucHV0U3RhcnQsIGlucHV0RW5kIC0gaW5w
dXRTdGFydCArIDEpKTsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1p
dGVyKHB0ciwgZW5kLCAnLCcpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZXM7Cisg
ICAgfSk7CiAKLSAgICByZXR1cm4gdmFsdWVzOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8VW5pY29k
ZVJhbmdlPiBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlv
bmFsPFVuaWNvZGVSYW5nZT4gcGFyc2VVbmljb2RlUmFuZ2UoY29uc3QgQ2hhcmFjdGVyVHlwZSog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmIChsZW5ndGggPCAyIHx8IGNo
YXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJhY3RlcnNbMV0gIT0gJysnKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwpAQCAtMzAzLDggKzI5NSw4IEBAIHN0YXRpYyBPcHRpb25hbDxVbmlj
b2RlUmFuZ2U+IHBhcnNlVW5pY28KICAgICB1bnNpZ25lZCBzdGFydFJhbmdlID0gMDsKICAgICB1
bnNpZ25lZCBzdGFydExlbmd0aCA9IDA7CiAKLSAgICBjb25zdCBVQ2hhciogcHRyID0gY2hhcmFj
dGVycyArIDI7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Cisg
ICAgYXV0byogcHRyID0gY2hhcmFjdGVycyArIDI7CisgICAgYXV0byogZW5kID0gY2hhcmFjdGVy
cyArIGxlbmd0aDsKICAgICB3aGlsZSAocHRyIDwgZW5kKSB7CiAgICAgICAgIGlmICghaXNBU0NJ
SUhleERpZ2l0KCpwdHIpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0zNjksMzAgKzM2MSwyOCBA
QCBPcHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNlCiB7CiAgICAgLy8gRklY
TUU6IFBhcnNpbmcgZXJyb3IgZGV0ZWN0aW9uIGlzIG1pc3NpbmcuCiAKLSAgICBhdXRvIHVwY29u
dmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBj
b25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFy
KiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBVbmljb2RlUmFuZ2VzIHJhbmdl
TGlzdDsKLSAgICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nTGlzdDsKKyAgICByZXR1cm4gV1RGOjpn
ZXRDaGFyYWN0ZXJzKHN0cmluZywgW10oYXV0byBwdHIsIGF1dG8gZW5kKSAtPiBPcHRpb25hbDxz
dGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNldDxTdHJpbmc+Pj4geworICAgICAgICBVbmlj
b2RlUmFuZ2VzIHJhbmdlTGlzdDsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IHN0cmluZ0xpc3Q7
CiAKLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dFN0
YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gJywnKQotICAg
ICAgICAgICAgKytwdHI7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAgICAgICAg
IGF1dG8qIGlucHV0U3RhcnQgPSBwdHI7CisgICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYm
ICpwdHIgIT0gJywnKQorICAgICAgICAgICAgICAgICsrcHRyOwogCi0gICAgICAgIGlmIChwdHIg
PT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKHB0ciA9
PSBpbnB1dFN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIC8vIFRyeSB0
byBwYXJzZSB1bmljb2RlIHJhbmdlIGZpcnN0Ci0gICAgICAgIGlmIChhdXRvIHJhbmdlID0gcGFy
c2VVbmljb2RlUmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFydCkpCi0gICAgICAgICAg
ICByYW5nZUxpc3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHN0cmluZ0xpc3QuYWRkKFN0cmluZyhpbnB1dFN0YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0
KSk7Ci0gICAgICAgICsrcHRyOwotICAgIH0KKyAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSB1
bmljb2RlIHJhbmdlIGZpcnN0CisgICAgICAgICAgICBpZiAoYXV0byByYW5nZSA9IHBhcnNlVW5p
Y29kZVJhbmdlKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQpKQorICAgICAgICAgICAgICAg
IHJhbmdlTGlzdC5hcHBlbmQoV1RGTW92ZSgqcmFuZ2UpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBzdHJpbmdMaXN0LmFkZChTdHJpbmcoaW5wdXRTdGFydCwgcHRyIC0gaW5w
dXRTdGFydCkpOworICAgICAgICAgICAgKytwdHI7CisgICAgICAgIH0KIAotICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihyYW5nZUxpc3QsIHN0cmluZ0xpc3QpOworICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIocmFuZ2VMaXN0LCBzdHJpbmdMaXN0KTsKKyAgICB9KTsKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxGbG9hdFBvaW50PiBn
ZW5lcmljUGFyc2VGbG9hdFBvaW50KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25z
dCBDaGFyYWN0ZXJUeXBlKiBlbmQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2Vy
VXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0
aWxpdGllcy5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFy
c2VyVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiB0eXBlZGVmIHN0ZDo6cGFpcjxVQ2hhcjMyLCBVQ2hhcjMy
PiBVbmljb2RlUmFuZ2U7CiB0eXBlZGVmIFZlY3RvcjxVbmljb2RlUmFuZ2U+IFVuaWNvZGVSYW5n
ZXM7CkBAIC04NCwyNyArODMsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Y29uc3RleAogICAgIHJldHVybiBwdHIgPCBlbmQ7CiB9CiAKLWNvbnN0ZXhwciBib29sIHNraXBT
dHJpbmcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiBu
YW1lLCBpbnQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWdu
ZWQgY2hhcmFjdGVyQ291bnQ+IGNvbnN0ZXhwciBib29sIHNraXBTdHJpbmcoY29uc3QgQ2hhcmFj
dGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKCZzdHIpW2NoYXJhY3RlckNvdW50XSkKIHsKLSAgICBpZiAoZW5kIC0gcHRyIDwgbGVuZ3Ro
KQorICAgIGlmIChlbmQgLSBwdHIgPCBjaGFyYWN0ZXJDb3VudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChtZW1jbXAobmFtZSwgcHRyLCBzaXplb2YoVUNoYXIpICogbGVuZ3RoKSkK
KyAgICBpZiAobWVtY21wKHN0ciwgcHRyLCBzaXplb2YoQ2hhcmFjdGVyVHlwZSkgKiBjaGFyYWN0
ZXJDb3VudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwdHIgKz0gbGVuZ3RoOwotICAg
IHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KLWlu
bGluZSBib29sIHNraXBTdHJpbmcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQs
IGNvbnN0IGNoYXIgKCZzdHIpW2NoYXJhY3RlckNvdW50XSkKLXsKLSAgICBpbnQgbGVuZ3RoID0g
Y2hhcmFjdGVyQ291bnQgLSAxOwotICAgIGlmIChlbmQgLSBwdHIgPCBsZW5ndGgpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIGlmIChwdHJbaV0gIT0gc3RyW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBwdHIgKz0gbGVuZ3RoOworICAgIHB0ciArPSBjaGFyYWN0ZXJDb3VudDsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAkocmV2
aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCwzNiArNTQsMzQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgY2xl
YXJJdGVtcygpOwogCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5n
Vmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFy
KiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBlbmQg
PSBjdXIgKyB2YWx1ZS5sZW5ndGgoKTsKLQotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
Y3VyLCBlbmQpOwotCi0gICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICAgICAg
d2hpbGUgKGN1ciA8IGVuZCkgewotICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLQot
ICAgICAgICAgICAgYXV0byB4UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgICAgICAg
ICAgaWYgKCF4UG9zKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAg
ICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpEb250U2tpcCk7Ci0gICAgICAgICAgICBpZiAoIXlQb3MpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCisgICAgICAgIHJldHVybiBXVEY6OmdldENoYXJhY3RlcnModmFsdWUsIFsm
XShhdXRvIGN1ciwgYXV0byBlbmQpIHsKICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjdXIsIGVuZCk7CiAKLSAgICAgICAgICAgIGlmIChjdXIgPCBlbmQgJiYgKmN1ciA9PSAnLCcp
IHsKLSAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
Y3VyKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
Y3VyLCBlbmQpOworICAgICAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAg
ICAgICAgd2hpbGUgKGN1ciA8IGVuZCkgeworICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0g
ZmFsc2U7CisKKyAgICAgICAgICAgICAgICBhdXRvIHhQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVu
ZCk7CisgICAgICAgICAgICAgICAgaWYgKCF4UG9zKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBhdXRvIHlQb3MgPSBwYXJzZU51bWJlcihjdXIs
IGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXlQb3MpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAg
ICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoY3VyIDwgZW5kICYmICpjdXIgPT0gJywnKSB7CisgICAgICAgICAgICAgICAgICAgIGRl
bGltUGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY3VyKys7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7
CiAKLSAgICAgICAgICAgIGFwcGVuZChTVkdQb2ludDo6Y3JlYXRlKHsgKnhQb3MsICp5UG9zIH0p
KTsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIGFwcGVuZChTVkdQb2ludDo6Y3JlYXRlKHsg
KnhQb3MsICp5UG9zIH0pKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gIWRlbGlt
UGFyc2VkOworICAgICAgICAgICAgcmV0dXJuICFkZWxpbVBhcnNlZDsKKyAgICAgICAgfSk7CiAg
ICAgfQogCiAgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5j
cHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmUKIHsKIH0KIAotU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlKGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKQogewogICAgIHBhcnNlKHZhbHVlKTsK
IH0KQEAgLTU5LDE5ICs1OSwzMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWU6OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZTo6cGFyc2UoY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCiB7Ci0gICAgYXV0byB1
cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJh
Y3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogYmVnaW4gPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7
Ci0gICAgcGFyc2VJbnRlcm5hbChiZWdpbiwgYmVnaW4gKyB2YWx1ZS5sZW5ndGgoKSwgdHJ1ZSk7
CisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyh2YWx1ZSwgWyZdKGF1dG8gcHRyLCBhdXRv
IGVuZCkgeworICAgICAgICBwYXJzZUludGVybmFsKHB0ciwgZW5kLCB0cnVlKTsKKyAgICB9KTsK
IH0KIAotYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlKGNvbnN0IFVDaGFy
KiYgY3VyclBhcmFtLCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKQorYm9vbCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBM
Q2hhciogZW5kLCBib29sIHZhbGlkYXRlKQogewotICAgIHJldHVybiBwYXJzZUludGVybmFsKGN1
cnJQYXJhbSwgZW5kLCB2YWxpZGF0ZSk7CisgICAgcmV0dXJuIHBhcnNlSW50ZXJuYWwocHRyLCBl
bmQsIHZhbGlkYXRlKTsKIH0KIAotYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBh
cnNlSW50ZXJuYWwoY29uc3QgVUNoYXIqJiBjdXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJv
b2wgdmFsaWRhdGUpCitib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoY29u
c3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCit7CisgICAg
cmV0dXJuIHBhcnNlSW50ZXJuYWwocHRyLCBlbmQsIHZhbGlkYXRlKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgZGVmZXJEZXNj
W10gPSAgeydkJywgJ2UnLCAnZicsICdlJywgJ3InfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG5vbmVEZXNjW10gPSAgeyduJywgJ28n
LCAnbicsICdlJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIg
Q2hhcmFjdGVyVHlwZSBtZWV0RGVzY1tdID0gIHsnbScsICdlJywgJ2UnLCAndCd9OwordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgc2xpY2VE
ZXNjW10gPSAgeydzJywgJ2wnLCAnaScsICdjJywgJ2UnfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZUlu
dGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyUGFyYW0sIGNvbnN0IENoYXJhY3RlclR5
cGUqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKIHsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlw
ZSBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOwogICAgIFNWR01lZXRP
clNsaWNlVHlwZSBtZWV0T3JTbGljZSA9IFNWR19NRUVUT1JTTElDRV9NRUVUOwpAQCAtODMsNyAr
OTQsNyBAQCBib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmICgqY3VyclBhcmFtID09ICdkJykgewotICAgICAgICBp
ZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJkZWZlciIpKSB7CisgICAgICAgIGlmICgh
c2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgZGVmZXJEZXNjPENoYXJhY3RlclR5cGU+KSkgewog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJTa2lwcGVkIHRvIHBhcnNlIGV4Y2VwdCBmb3IgKmRlZmVy
KiB2YWx1ZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtOTcs
NyArMTA4LDcgQEAgYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSQogICAg
IH0KIAogICAgIGlmICgqY3VyclBhcmFtID09ICduJykgewotICAgICAgICBpZiAoIXNraXBTdHJp
bmcoY3VyclBhcmFtLCBlbmQsICJub25lIikpIHsKKyAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1
cnJQYXJhbSwgZW5kLCBub25lRGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiU2tpcHBlZCB0byBwYXJzZSBleGNlcHQgZm9yICpub25lKiB2YWx1ZS4iKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTU2LDEzICsxNjcsMTMgQEAg
Ym9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSQogCiAgICAgaWYgKGN1cnJQ
YXJhbSA8IGVuZCkgewogICAgICAgICBpZiAoKmN1cnJQYXJhbSA9PSAnbScpIHsKLSAgICAgICAg
ICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgIm1lZXQiKSkgeworICAgICAgICAg
ICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCBtZWV0RGVzYzxDaGFyYWN0ZXJUeXBl
PikpIHsKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8gcGFyc2UgZXhjZXB0
IGZvciAqbWVldCogb3IgKnNsaWNlKiB2YWx1ZS4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
Y3VyclBhcmFtLCBlbmQpOwogICAgICAgICB9IGVsc2UgaWYgKCpjdXJyUGFyYW0gPT0gJ3MnKSB7
Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJzbGljZSIpKSB7
CisgICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsIHNsaWNlRGVzYzxD
aGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8g
cGFyc2UgZXhjZXB0IGZvciAqbWVldCogb3IgKnNsaWNlKiB2YWx1ZS4iKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC0zMjgsNyArMzM5LDcgQEAgQWZm
aW5lVHJhbnNmb3JtIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYQogCiBTdHJpbmcgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlOjp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKIHsKLSAgICBTdHJpbmcg
YWxpZ25UeXBlOworICAgIGNvbnN0IGNoYXIqIGFsaWduVHlwZTsKIAogICAgIHN3aXRjaCAobV9h
bGlnbikgewogICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORToKQEAgLTM3MSw5
ICszODIsOSBAQCBTdHJpbmcgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjp2YWx1CiAgICAg
Y2FzZSBTVkdfTUVFVE9SU0xJQ0VfVU5LTk9XTjoKICAgICAgICAgcmV0dXJuIGFsaWduVHlwZTsK
ICAgICBjYXNlIFNWR19NRUVUT1JTTElDRV9NRUVUOgotICAgICAgICByZXR1cm4gYWxpZ25UeXBl
ICsgIiBtZWV0IjsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYWxpZ25UeXBlLCAiIG1lZXQi
KTsKICAgICBjYXNlIFNWR19NRUVUT1JTTElDRV9TTElDRToKLSAgICAgICAgcmV0dXJuIGFsaWdu
VHlwZSArICIgc2xpY2UiOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhhbGlnblR5cGUsICIg
c2xpY2UiKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSgpOwotICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShjb25zdCBTdHJp
bmcmKTsKKyAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nVmlldyYp
OwogCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0QWxpZ24odW5zaWduZWQgc2hvcnQpOwogICAg
IHVuc2lnbmVkIHNob3J0IGFsaWduKCkgY29uc3QgeyByZXR1cm4gbV9hbGlnbjsgfQpAQCAtNjQs
NyArNjQsOCBAQCBwdWJsaWM6CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKGZsb2F0IGxv
Z2ljYWxYLCBmbG9hdCBsb2dpY2FsWSwgZmxvYXQgbG9naWNhbFdpZHRoLCBmbG9hdCBsb2dpY2Fs
SGVpZ2h0LCBmbG9hdCBwaHlzaWNhbFdpZHRoLCBmbG9hdCBwaHlzaWNhbEhlaWdodCkgY29uc3Q7
CiAKLSAgICB2b2lkIHBhcnNlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcGFyc2UoY29uc3Qg
U3RyaW5nVmlldyYpOworICAgIGJvb2wgcGFyc2UoY29uc3QgTENoYXIqJiBjdXJyUGFyYW0sIGNv
bnN0IExDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpOwogICAgIGJvb2wgcGFyc2UoY29uc3QgVUNo
YXIqJiBjdXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpOwogCiAgICAg
U3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKQEAgLTczLDcgKzc0LDggQEAgcHJpdmF0ZToK
ICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBtX2FsaWduOwogICAgIFNWR01lZXRPclNs
aWNlVHlwZSBtX21lZXRPclNsaWNlOwogCi0gICAgYm9vbCBwYXJzZUludGVybmFsKGNvbnN0IFVD
aGFyKiYgY3VyclBhcmFtLCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorICAgIGJvb2wgcGFyc2VJbnRlcm5hbChj
b25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGJvb2wg
dmFsaWRhdGUpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U3RyaW5nTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdM
aXN0LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDIwICs1NSwxOSBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBjbGVhckl0ZW1zKCk7CiAKLSAgICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3Rl
cnMgPSBTdHJpbmdWaWV3KGRhdGEpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBj
b25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgICAgICBjb25zdCBV
Q2hhciogZW5kID0gcHRyICsgZGF0YS5sZW5ndGgoKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVu
ZCkgewotICAgICAgICAgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gcHRyOwotICAgICAgICAgICAg
d2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9IGRlbGltaXRlciAmJiAhaXNTVkdTcGFjZSgqcHRy
KSkKLSAgICAgICAgICAgICAgICBwdHIrKzsKLSAgICAgICAgICAgIGlmIChwdHIgPT0gc3RhcnQp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2l0ZW1zLmFwcGVuZChTdHJp
bmcoc3RhcnQsIHB0ciAtIHN0YXJ0KSk7Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXNPckRlbGltaXRlcihwdHIsIGVuZCwgZGVsaW1pdGVyKTsKLSAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKGRhdGEsIFsmXShhdXRvIHB0ciwgYXV0byBlbmQpIHsK
KyAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAgICAgICAgICAgICBhdXRvKiBz
dGFydCA9IHB0cjsKKyAgICAgICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0g
ZGVsaW1pdGVyICYmICFpc1NWR1NwYWNlKCpwdHIpKQorICAgICAgICAgICAgICAgICAgICBwdHIr
KzsKKyAgICAgICAgICAgICAgICBpZiAocHRyID09IHN0YXJ0KQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBtX2l0ZW1zLmFwcGVuZChTdHJpbmcoc3RhcnQsIHB0
ciAtIHN0YXJ0KSk7CisgICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxp
bWl0ZXIocHRyLCBlbmQsIGRlbGltaXRlcik7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgcmV0
dXJuIHB0ciA9PSBlbmQ7CisgICAgICAgICAgICByZXR1cm4gcHRyID09IGVuZDsKKyAgICAgICAg
fSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCShyZXZpc2lvbiAyNjMzMzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04MiwxMCArODIsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgY2xlYXJJdGVtcygp
OwogCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1
ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9
IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgaWYgKCFwYXJzZShzdGFydCwgc3RhcnQg
KyB2YWx1ZS5sZW5ndGgoKSkpCi0gICAgICAgICAgICBjbGVhckl0ZW1zKCk7CisgICAgICAgIHJl
dHVybiBXVEY6OmdldENoYXJhY3RlcnModmFsdWUsIFsmXShhdXRvIHB0ciwgYXV0byBlbmQpIHsK
KyAgICAgICAgICAgIGlmICghcGFyc2UocHRyLCBlbmQpKQorICAgICAgICAgICAgICAgIGNsZWFy
SXRlbXMoKTsKKyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbmNh
dGVuYXRlKCkgY29uc3QKQEAgLTEwOSwzMCArMTA5LDMxIEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgYm9vbCBwYXJzZShjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciog
ZW5kKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CisgICAgYm9vbCBwYXJz
ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiAg
ICAgewogICAgICAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlIChz
dGFydCA8IGVuZCkgeworICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7CiAgICAgICAgICAgICBk
ZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0
YXJ0LCBlbmQpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byB0eXBlID0gU1ZHVHJhbnNmb3JtYWJsZTo6
cGFyc2VBbmRTa2lwVHlwZShzdGFydCwgZW5kKTsKLSAgICAgICAgICAgIGlmICghdHlwZSkKKyAg
ICAgICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3JtVHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBh
cnNlVHJhbnNmb3JtVHlwZShwdHIsIGVuZCk7CisgICAgICAgICAgICBpZiAoIXBhcnNlZFRyYW5z
Zm9ybVR5cGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBh
dXRvIHBhcnNlZFRyYW5zZm9ybVZhbHVlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zv
cm1WYWx1ZSgqdHlwZSwgc3RhcnQsIGVuZCk7CisgICAgICAgICAgICBhdXRvIHBhcnNlZFRyYW5z
Zm9ybVZhbHVlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSgqcGFyc2Vk
VHJhbnNmb3JtVHlwZSwgcHRyLCBlbmQpOwogICAgICAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zv
cm1WYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGFw
cGVuZChTVkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKIAotICAg
ICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAg
aWYgKHN0YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnLCcpIHsKKyAgICAgICAgICAgIHNraXBPcHRp
b25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7CisgICAgICAgICAgICBpZiAocHRyIDwgZW5kICYmICpw
dHIgPT0gJywnKSB7CiAgICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICsrc3RhcnQ7CisgICAgICAgICAgICAgICAgKytwdHI7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhzdGFydCwgZW5kKTsKKyAgICAg
ICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuICFkZWxpbVBhcnNlZDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVHJhbnNmb3JtYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RyYW5zZm9ybWFibGUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDEwIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGludCBwYXJzZVRyYW5zZm9ybVBhcmFt
TGlzdChjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgZmxvYXQqIHZhbHVlcywg
aW50IHJlcXVpcmVkLCBpbnQgb3B0aW9uYWwpCisvLyBUaGlzIGRlc3RydWN0b3IgaXMgbmVlZGVk
IGluIG9yZGVyIHRvIGxpbmsgY29ycmVjdGx5IHdpdGggSW50ZWwgSUNDLgorU1ZHVHJhbnNmb3Jt
YWJsZTo6flNWR1RyYW5zZm9ybWFibGUoKSA9IGRlZmF1bHQ7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoY29uc3Qg
Q2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBmbG9hdCogdmFs
dWVzLCBpbnQgcmVxdWlyZWQsIGludCBvcHRpb25hbCkKIHsKICAgICBpbnQgb3B0aW9uYWxQYXJh
bXMgPSAwLCByZXF1aXJlZFBhcmFtcyA9IDA7CiAgICAgCkBAIC05MiwxMyArOTUsMTAgQEAgc3Rh
dGljIGludCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdAogfQogCiAvLyBUaGVzZSBzaG91
bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggZW51bSBTVkdUcmFuc2Zvcm1UeXBlCi1zdGF0aWMgY29u
c3QgaW50IHJlcXVpcmVkVmFsdWVzRm9yVHlwZVtdID0gIHswLCA2LCAxLCAxLCAxLCAxLCAxfTsK
LXN0YXRpYyBjb25zdCBpbnQgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW10gPSAgezAsIDAsIDEsIDEs
IDIsIDAsIDB9OworY29uc3RleHByIGludCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbXSA9ICB7MCwg
NiwgMSwgMSwgMSwgMSwgMX07Citjb25zdGV4cHIgaW50IG9wdGlvbmFsVmFsdWVzRm9yVHlwZVtd
ID0gIHswLCAwLCAxLCAxLCAyLCAwLCAwfTsKIAotLy8gVGhpcyBkZXN0cnVjdG9yIGlzIG5lZWRl
ZCBpbiBvcmRlciB0byBsaW5rIGNvcnJlY3RseSB3aXRoIEludGVsIElDQy4KLVNWR1RyYW5zZm9y
bWFibGU6On5TVkdUcmFuc2Zvcm1hYmxlKCkgPSBkZWZhdWx0OwotCi1PcHRpb25hbDxTVkdUcmFu
c2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlLCBjb25zdCBVQ2hhciomIHB0ciwgY29u
c3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBP
cHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZUdlbmVyaWMoU1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIGlmICh0eXBlID09IFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV04pCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CkBAIC0xNDUsNDIgKzE0NSw2MyBAQCBPcHRpb25hbDxTVkdUcmFuc2Zvcm1W
YWx1ZT4gU1ZHVHJhbnNmb3JtCiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotc3RhdGljIGNv
bnN0IFVDaGFyIHNrZXdYRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycsICdYJ307Ci1zdGF0
aWMgY29uc3QgVUNoYXIgc2tld1lEZXNjW10gPSAgeydzJywgJ2snLCAnZScsICd3JywgJ1knfTsK
LXN0YXRpYyBjb25zdCBVQ2hhciBzY2FsZURlc2NbXSA9ICB7J3MnLCAnYycsICdhJywgJ2wnLCAn
ZSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zbGF0ZURlc2NbXSA9ICB7J3QnLCAncicsICdh
JywgJ24nLCAncycsICdsJywgJ2EnLCAndCcsICdlJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgcm90
YXRlRGVzY1tdID0gIHsncicsICdvJywgJ3QnLCAnYScsICd0JywgJ2UnfTsKLXN0YXRpYyBjb25z
dCBVQ2hhciBtYXRyaXhEZXNjW10gPSAgeydtJywgJ2EnLCAndCcsICdyJywgJ2knLCAneCd9Owor
T3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3Qg
TENoYXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQpCit7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNm
b3JtVmFsdWVHZW5lcmljKHR5cGUsIHB0ciwgZW5kKTsKK30KIAotT3B0aW9uYWw8U1ZHVHJhbnNm
b3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tp
cFR5cGUoY29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kKQorT3B0
aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3Jt
VmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgVUNo
YXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCiB7Ci0gICAgaWYgKGN1cnJUcmFuc2Zvcm0gPj0g
ZW5kKQorICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyh0eXBlLCBwdHIsIGVu
ZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFy
YWN0ZXJUeXBlIHNrZXdYRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycsICdYJ307Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBza2V3
WURlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWSd9OwordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgc2NhbGVEZXNjW10gPSAgeydz
JywgJ2MnLCAnYScsICdsJywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHRyYW5zbGF0ZURlc2NbXSA9ICB7J3QnLCAncicsICdh
JywgJ24nLCAncycsICdsJywgJ2EnLCAndCcsICdlJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSByb3RhdGVEZXNjW10gPSAgeydyJywg
J28nLCAndCcsICdhJywgJ3QnLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3Qn
LCAncicsICdpJywgJ3gnfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3Rh
dGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZVRy
YW5zZm9ybVR5cGVHZW5lcmljKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGVuZCkKK3sKKyAgICBpZiAocHRyID49IGVuZCkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIGlmICgqY3VyclRyYW5zZm9ybSA9PSAncycpIHsKLSAgICAgICAg
aWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBza2V3WERlc2MsIFdURl9BUlJBWV9M
RU5HVEgoc2tld1hEZXNjKSkpCisgICAgaWYgKCpwdHIgPT0gJ3MnKSB7CisgICAgICAgIGlmIChz
a2lwU3RyaW5nKHB0ciwgZW5kLCBza2V3WERlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICAg
ICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwotICAgICAg
ICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1lEZXNjLCBXVEZf
QVJSQVlfTEVOR1RIKHNrZXdZRGVzYykpKQorICAgICAgICBpZiAoc2tpcFN0cmluZyhwdHIsIGVu
ZCwgc2tld1lEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgICAgIHJldHVybiBTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TS0VXWTsKLSAgICAgICAgZWxzZSBpZiAoc2tpcFN0
cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHNjYWxlRGVzYywgV1RGX0FSUkFZX0xFTkdUSChzY2Fs
ZURlc2MpKSkKKyAgICAgICAgaWYgKHNraXBTdHJpbmcocHRyLCBlbmQsIHNjYWxlRGVzYzxDaGFy
YWN0ZXJUeXBlPikpCiAgICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19U
UkFOU0ZPUk1fU0NBTEU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgfSBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgdHJh
bnNsYXRlRGVzYywgV1RGX0FSUkFZX0xFTkdUSCh0cmFuc2xhdGVEZXNjKSkpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKHNraXBTdHJpbmcocHRyLCBlbmQs
IHRyYW5zbGF0ZURlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICByZXR1cm4gU1ZHVHJhbnNm
b3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwotICAgIGVsc2UgaWYgKHNraXBTdHJp
bmcoY3VyclRyYW5zZm9ybSwgZW5kLCByb3RhdGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHJvdGF0
ZURlc2MpKSkKKyAgICBpZiAoc2tpcFN0cmluZyhwdHIsIGVuZCwgcm90YXRlRGVzYzxDaGFyYWN0
ZXJUeXBlPikpCiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9S
TV9ST1RBVEU7Ci0gICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIG1h
dHJpeERlc2MsIFdURl9BUlJBWV9MRU5HVEgobWF0cml4RGVzYykpKQorICAgIGlmIChza2lwU3Ry
aW5nKHB0ciwgZW5kLCBtYXRyaXhEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX01BVFJJWDsKIAogICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiB9CiAKLVNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIFNW
R1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBTdHJpbmcmIHR5cGVTdHJp
bmcpCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJh
bnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykK
K3sKKyAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHN0cmluZywgW10oYXV0byBwdHIsIGF1
dG8gZW5kKSB7CisgICAgICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVR5cGUocHRyLCBlbmQpOwor
ICAgIH0pOworfQorCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlw
ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IExDaGFyKiYgcHRy
LCBjb25zdCBMQ2hhciogZW5kKQoreworICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVR5cGVHZW5l
cmljKHB0ciwgZW5kKTsKK30KKworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5z
Zm9ybVR5cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBVQ2hh
ciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcodHlwZVN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0g
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAg
cmV0dXJuIHBhcnNlQW5kU2tpcFR5cGUoY2hhcmFjdGVycywgY2hhcmFjdGVycyArIHR5cGVTdHJp
bmcubGVuZ3RoKCkpLnZhbHVlT3IoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5L
Tk9XTik7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMocHRyLCBlbmQpOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHJldmlzaW9u
IDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUgIlNWR0xvY2F0YWJsZS5oIgog
I2luY2x1ZGUgIlNWR1RyYW5zZm9ybVZhbHVlLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKQEAgLTMyLDkgKzMxLDEyIEBAIGNs
YXNzIFNWR1RyYW5zZm9ybWFibGUgOiBwdWJsaWMgU1ZHTG9jYXQKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5TVkdUcmFuc2Zvcm1hYmxlKCk7CiAKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNm
b3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5z
Zm9ybVR5cGUsIGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kKTsKICAgICBzdGF0
aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBV
Q2hhciogZW5kKTsKLSAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5
cGUgcGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBPcHRpb25h
bDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VBbmRTa2lwVHlwZShj
b25zdCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpOworCisgICAgc3Rh
dGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZVRy
YW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nVmlldyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdU
cmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0
IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IHBhcnNlVHJhbnNmb3JtVHlwZShjb25z
dCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0g
bG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOyB9CiAgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0ID0gMDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
OTkgKzYwLDEwMiBAQCB2b2lkIFNWR1ZpZXdTcGVjOjpyZXNldCgpCiAgICAgU1ZHWm9vbUFuZFBh
bjo6cmVzZXQoKTsKIH0KIAotc3RhdGljIGNvbnN0IFVDaGFyIHN2Z1ZpZXdTcGVjW10gPSB7J3Mn
LCAndicsICdnJywgJ1YnLCAnaScsICdlJywgJ3cnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB2aWV3
Qm94U3BlY1tdID0geyd2JywgJ2knLCAnZScsICd3JywgJ0InLCAnbycsICd4J307Ci1zdGF0aWMg
Y29uc3QgVUNoYXIgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWNbXSA9IHsncCcsICdyJywgJ2UnLCAn
cycsICdlJywgJ3InLCAndicsICdlJywgJ0EnLCAncycsICdwJywgJ2UnLCAnYycsICd0JywgJ1In
LCAnYScsICd0JywgJ2knLCAnbyd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zZm9ybVNwZWNb
XSA9IHsndCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2YnLCAnbycsICdyJywgJ20nfTsKLXN0YXRp
YyBjb25zdCBVQ2hhciB6b29tQW5kUGFuU3BlY1tdID0geyd6JywgJ28nLCAnbycsICdtJywgJ0En
LCAnbicsICdkJywgJ1AnLCAnYScsICduJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgdmlld1Rhcmdl
dFNwZWNbXSA9ICB7J3YnLCAnaScsICdlJywgJ3cnLCAnVCcsICdhJywgJ3InLCAnZycsICdlJywg
J3QnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0
ZXJUeXBlIHN2Z1ZpZXdTcGVjW10gPSB7J3MnLCAndicsICdnJywgJ1YnLCAnaScsICdlJywgJ3cn
fTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJU
eXBlIHZpZXdCb3hTcGVjW10gPSB7J3YnLCAnaScsICdlJywgJ3cnLCAnQicsICdvJywgJ3gnfTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBl
IHByZXNlcnZlQXNwZWN0UmF0aW9TcGVjW10gPSB7J3AnLCAncicsICdlJywgJ3MnLCAnZScsICdy
JywgJ3YnLCAnZScsICdBJywgJ3MnLCAncCcsICdlJywgJ2MnLCAndCcsICdSJywgJ2EnLCAndCcs
ICdpJywgJ28nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBD
aGFyYWN0ZXJUeXBlIHRyYW5zZm9ybVNwZWNbXSA9IHsndCcsICdyJywgJ2EnLCAnbicsICdzJywg
J2YnLCAnbycsICdyJywgJ20nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNv
bnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHpvb21BbmRQYW5TcGVjW10gPSB7J3onLCAnbycsICdvJywg
J20nLCAnQScsICduJywgJ2QnLCAnUCcsICdhJywgJ24nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHZpZXdUYXJnZXRTcGVjW10gPSAg
eyd2JywgJ2knLCAnZScsICd3JywgJ1QnLCAnYScsICdyJywgJ2cnLCAnZScsICd0J307CiAKLWJv
b2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nJiB2aWV3U3BlYykKK2Jv
b2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQog
ewotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2aWV3U3BlYyku
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1cnJWaWV3U3BlYyA9
IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyclZpZXdT
cGVjICsgdmlld1NwZWMubGVuZ3RoKCk7Ci0KLSAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8
fCAhbV9jb250ZXh0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFz
a2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCBzdmdWaWV3U3BlYywgV1RGX0FSUkFZX0xFTkdU
SChzdmdWaWV3U3BlYykpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY3VyclZp
ZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGN1cnJWaWV3U3BlYysrOwotCi0gICAgd2hpbGUgKGN1cnJWaWV3U3BlYyA8IGVu
ZCAmJiAqY3VyclZpZXdTcGVjICE9ICcpJykgewotICAgICAgICBpZiAoKmN1cnJWaWV3U3BlYyA9
PSAndicpIHsKLSAgICAgICAgICAgIGlmIChza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCB2
aWV3Qm94U3BlYywgV1RGX0FSUkFZX0xFTkdUSCh2aWV3Qm94U3BlYykpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBjdXJyVmll
d1NwZWMrKzsKLSAgICAgICAgICAgICAgICBhdXRvIHZpZXdCb3ggPSBTVkdGaXRUb1ZpZXdCb3g6
OnBhcnNlVmlld0JveChjdXJyVmlld1NwZWMsIGVuZCwgZmFsc2UpOwotICAgICAgICAgICAgICAg
IGlmICghdmlld0JveCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIHNldFZpZXdCb3goV1RGTW92ZSgqdmlld0JveCkpOwotICAgICAgICAgICAgICAg
IGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgY3VyclZpZXdTcGVj
Kys7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQs
IHZpZXdUYXJnZXRTcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHZpZXdUYXJnZXRTcGVjKSkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9
ICcoJykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IGNvbnN0IFVDaGFyKiB2aWV3VGFyZ2V0U3RhcnQgPSArK2N1cnJWaWV3U3BlYzsKLSAgICAgICAg
ICAgICAgICB3aGlsZSAoY3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJyVmlld1NwZWMgIT0gJykn
KQotICAgICAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBp
ZiAoY3VyclZpZXdTcGVjID49IGVuZCkKKyAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHN0
cmluZywgWyZdKGF1dG8gcHRyLCBhdXRvIGVuZCkgLT4gYm9vbCB7CisgICAgICAgIHVzaW5nIENo
YXJhY3RlclR5cGUgPSBzdGQ6OnJlbW92ZV9wb2ludGVyX3Q8ZGVjbHR5cGUocHRyKT47CisKKyAg
ICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgIW1fY29udGV4dEVsZW1lbnQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFza2lwU3RyaW5nKHB0ciwgZW5kLCBzdmdWaWV3
U3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgaWYgKHB0ciA+PSBlbmQgfHwgKnB0ciAhPSAnKCcpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgcHRyKys7CisKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRy
ICE9ICcpJykgeworICAgICAgICAgICAgaWYgKCpwdHIgPT0gJ3YnKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHNraXBTdHJpbmcocHRyLCBlbmQsIHZpZXdCb3hTcGVjPENoYXJhY3RlclR5cGU+KSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAocHRyID49IGVuZCB8fCAqcHRyICE9ICcoJykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
cHRyKys7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdmlld0JveCA9IFNWR0ZpdFRvVmlld0Jv
eDo6cGFyc2VWaWV3Qm94KHB0ciwgZW5kLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghdmlld0JveCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgc2V0Vmlld0JveChXVEZNb3ZlKCp2aWV3Qm94KSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICpwdHIgIT0gJyknKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBTdHJpbmcocHRyLCBlbmQsIHZpZXdUYXJnZXRTcGVj
PENoYXJhY3RlclR5cGU+KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocHRyID49IGVuZCB8
fCAqcHRyICE9ICcoJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byogdmlld1RhcmdldFN0YXJ0ID0gKytwdHI7CisgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnKScpCisgICAgICAgICAg
ICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIG1fdmlld1RhcmdldFN0cmluZyA9IFN0cmluZyh2aWV3VGFyZ2V0U3RhcnQsIHB0ciAtIHZp
ZXdUYXJnZXRTdGFydCk7CisgICAgICAgICAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCpwdHIgPT0gJ3onKSB7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwU3Ry
aW5nKHB0ciwgZW5kLCB6b29tQW5kUGFuU3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAocHRyID49IGVuZCB8
fCAqcHRyICE9ICcoJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgICAgIGF1dG8gem9vbUFuZFBhbiA9IFNWR1pv
b21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbihwdHIsIGVuZCk7CisgICAgICAgICAgICAgICAgaWYg
KCF6b29tQW5kUGFuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgc2V0Wm9vbUFuZFBhbigqem9vbUFuZFBhbik7CisgICAgICAgICAgICAgICAgaWYg
KHB0ciA+PSBlbmQgfHwgKnB0ciAhPSAnKScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKnB0
ciA9PSAncCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcocHRyLCBlbmQsIHBy
ZXNlcnZlQXNwZWN0UmF0aW9TcGVjPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICpwdHIg
IT0gJygnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgcHRyKys7CisgICAgICAgICAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHBy
ZXNlcnZlQXNwZWN0UmF0aW87CisgICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFzcGVjdFJh
dGlvLnBhcnNlKHB0ciwgZW5kLCBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNw
ZWN0UmF0aW8pOworICAgICAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICpwdHIgIT0gJykn
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgbV92
aWV3VGFyZ2V0U3RyaW5nID0gU3RyaW5nKHZpZXdUYXJnZXRTdGFydCwgY3VyclZpZXdTcGVjIC0g
dmlld1RhcmdldFN0YXJ0KTsKLSAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKKyAgICAg
ICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKnB0ciA9PSAndCcpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcocHRyLCBlbmQsIHRyYW5zZm9ybVNwZWM8
Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgKnB0ciAhPSAnKCcpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAg
ICAgICBtX3RyYW5zZm9ybS0+cGFyc2UocHRyLCBlbmQpOworICAgICAgICAgICAgICAgIGlmIChw
dHIgPj0gZW5kIHx8ICpwdHIgIT0gJyknKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgcHRyKys7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJWaWV3U3BlYyA9
PSAneicpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwg
em9vbUFuZFBhblNwZWMsIFdURl9BUlJBWV9MRU5HVEgoem9vbUFuZFBhblNwZWMpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49
IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgIGlmICghU1ZHWm9v
bUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKGN1cnJWaWV3U3BlYywgZW5kKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8
fCAqY3VyclZpZXdTcGVjICE9ICcpJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgfSBlbHNlIGlmICgqY3VyclZpZXdT
cGVjID09ICdwJykgewotICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywg
ZW5kLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlYywgV1RGX0FSUkFZX0xFTkdUSChwcmVzZXJ2ZUFz
cGVjdFJhdGlvU3BlYykpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwot
ICAgICAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0UmF0
aW87Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UoY3VyclZpZXdT
cGVjLCBlbmQsIGZhbHNlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOwotICAgICAg
ICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7
Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJWaWV3U3BlYyA9PSAndCcpIHsKLSAgICAgICAgICAg
IGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgdHJhbnNmb3JtU3BlYywgV1RGX0FS
UkFZX0xFTkdUSCh0cmFuc2Zvcm1TcGVjKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAh
PSAnKCcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZp
ZXdTcGVjKys7Ci0gICAgICAgICAgICBtX3RyYW5zZm9ybS0+cGFyc2UoY3VyclZpZXdTcGVjLCBl
bmQpOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3Bl
YyAhPSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3Vy
clZpZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIGlmIChjdXJyVmlld1NwZWMgPCBlbmQgJiYgKmN1cnJWaWV3U3BlYyA9PSAnOycp
Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGN1cnJW
aWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnOycpCisgICAgICAg
ICAgICAgICAgcHRyKys7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChwdHIgPj0g
ZW5kIHx8ICpwdHIgIT0gJyknKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVmlld1NwZWMuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1ZpZXdTcGVjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdWaWV3U3BlYyhjb250ZXh0RWxl
bWVudCkpOwogICAgIH0KIAotICAgIGJvb2wgcGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmcmKTsK
KyAgICBib29sIHBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nVmlldyYpOwogICAgIHZvaWQgcmVz
ZXQoKTsKICAgICB2b2lkIHJlc2V0Q29udGV4dEVsZW1lbnQoKSB7IG1fY29udGV4dEVsZW1lbnQg
PSBudWxscHRyOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAJKHJl
dmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsMjUgKzIyLDMwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiU1ZHWm9vbUFuZFBhbi5oIgogCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGVOdW1iZXJzLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBTVkdab29t
QW5kUGFuOjpwYXJzZVpvb21BbmRQYW4oY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIq
IGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0
ZXJUeXBlIGRpc2FibGVbXSA9IHsgJ2QnLCAnaScsICdzJywgJ2EnLCAnYicsICdsJywgJ2UnIH07
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlw
ZSBtYWduaWZ5W10gPSB7ICdtJywgJ2EnLCAnZycsICduJywgJ2knLCAnZicsICd5JyB9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFjYXRlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdab29tQW5k
UGFuVHlwZT4gcGFyc2Vab29tQW5kUGFuR2VuZXJpYyhjb25zdCBDaGFjYXRlclR5cGUqJiBzdGFy
dCwgY29uc3QgQ2hhY2F0ZXJUeXBlKiBlbmQpCiB7Ci0gICAgc3RhdGljIGNvbnN0IFVDaGFyIGRp
c2FibGVbXSA9IHsgJ2QnLCAnaScsICdzJywgJ2EnLCAnYicsICdsJywgJ2UnIH07Ci0gICAgaWYg
KHNraXBTdHJpbmcoc3RhcnQsIGVuZCwgZGlzYWJsZSwgV1RGX0FSUkFZX0xFTkdUSChkaXNhYmxl
KSkpIHsKLSAgICAgICAgbV96b29tQW5kUGFuID0gU1ZHWm9vbUFuZFBhbkRpc2FibGU7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBtYWduaWZ5
W10gPSB7ICdtJywgJ2EnLCAnZycsICduJywgJ2knLCAnZicsICd5JyB9OwotICAgIGlmIChza2lw
U3RyaW5nKHN0YXJ0LCBlbmQsIG1hZ25pZnksIFdURl9BUlJBWV9MRU5HVEgobWFnbmlmeSkpKSB7
Ci0gICAgICAgIG1fem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW5NYWduaWZ5OwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKHNraXBTdHJpbmcoc3RhcnQsIGVuZCwgZGlzYWJs
ZTxDaGFjYXRlclR5cGU+KSkKKyAgICAgICAgcmV0dXJuIFNWR1pvb21BbmRQYW5EaXNhYmxlOwor
CisgICAgaWYgKHNraXBTdHJpbmcoc3RhcnQsIGVuZCwgbWFnbmlmeTxDaGFjYXRlclR5cGU+KSkK
KyAgICAgICAgcmV0dXJuIFNWR1pvb21BbmRQYW5NYWduaWZ5OworCisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KIAotICAgIHJldHVybiBmYWxzZTsKK09wdGlvbmFsPFNWR1pvb21BbmRQYW5U
eXBlPiBTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4oY29uc3QgTENoYXIqJiBwdHIsIGNv
bnN0IExDaGFyKiBlbmQpCit7CisgICAgcmV0dXJuIHBhcnNlWm9vbUFuZFBhbkdlbmVyaWMocHRy
LCBlbmQpOworfQorCitPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gU1ZHWm9vbUFuZFBhbjo6
cGFyc2Vab29tQW5kUGFuKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kKQorewor
ICAgIHJldHVybiBwYXJzZVpvb21BbmRQYW5HZW5lcmljKHB0ciwgZW5kKTsKIH0KIAogdm9pZCBT
Vkdab29tQW5kUGFuOjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGVOYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdab29tQW5kUGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pv
b21BbmRQYW4uaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pv
b21BbmRQYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsOCBAQCBwdWJsaWM6CiBwcm90
ZWN0ZWQ6CiAgICAgU1ZHWm9vbUFuZFBhbigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgcGFyc2Va
b29tQW5kUGFuKGNvbnN0IFVDaGFyKiYsIGNvbnN0IFVDaGFyKik7CisgICAgc3RhdGljIE9wdGlv
bmFsPFNWR1pvb21BbmRQYW5UeXBlPiBwYXJzZVpvb21BbmRQYW4oY29uc3QgTENoYXIqJiwgY29u
c3QgTENoYXIqKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IHBhcnNl
Wm9vbUFuZFBhbihjb25zdCBVQ2hhciomLCBjb25zdCBVQ2hhciopOwogCiBwcml2YXRlOgogICAg
IFNWR1pvb21BbmRQYW5UeXBlIG1fem9vbUFuZFBhbiB7IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1pv
b21BbmRQYW5UeXBlPjo6aW5pdGlhbFZhbHVlKCkgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402473</attachid>
            <date>2020-06-22 08:02:58 -0700</date>
            <delta_ts>2020-06-22 08:56:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213460-20200622080257.patch</filename>
            <type>text/plain</type>
            <size>107821</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjMzNDcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA2LTIyICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIHVubmVjZXNzYXJ5IHVwY29udmVyc2lvbiBv
ZiBTdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTM0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHd0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oOgorICAgICAgICAoV1RGOjpnZXRDaGFyYWN0ZXJz
KToKKwogMjAyMC0wNi0yMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXVEZdIEVuc3VyZSBBU0NJSUxpdGVyYWwgaXMgQVNDSUkgY2hhcmFjdGVycyBhdCBj
b21waWxlIHRpbWUKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29tbW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaAkocmV2aXNpb24g
MjYzMzM1KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNjY5LDYgKzY2OSwxNiBAQCB0ZW1wbGF0ZTx1bnNpZ25lZCBsb3dlcmNhc2VMZXR0
ZXJzTGVuZ3RoCiAgICAgcmV0dXJuIHN0cmxlbihzdHJpbmcpID09IGxlbmd0aCAmJiBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMsIGxlbmd0aCk7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uPiBk
ZWNsdHlwZShhdXRvKSBnZXRDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZ1R5cGUmIHN0cmluZywgRnVu
Y3Rpb24mJiBmdW5jdG9yKQoreworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpIHsKKyAgICAgICAg
YXV0byogcHRyID0gc3RyaW5nLmNoYXJhY3RlcnM4KCk7CisgICAgICAgIHJldHVybiBmdW5jdG9y
KHB0ciwgcHRyICsgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICB9CisgICAgYXV0byogcHRyID0gc3Ry
aW5nLmNoYXJhY3RlcnMxNigpOworICAgIHJldHVybiBmdW5jdG9yKHB0ciwgcHRyICsgc3RyaW5n
Lmxlbmd0aCgpKTsKK30KKwogfQogCiB1c2luZyBXVEY6OmVxdWFsSWdub3JpbmdBU0NJSUNhc2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjMzNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMDkgQEAKKzIwMjAtMDYtMjIgIFNhbSBX
ZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgdW5uZWNlc3Nhcnkg
dXBjb252ZXJzaW9uIG9mIFN0cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMzQ2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBodG1sL0Jhc2VEYXRlQW5kVGltZUlu
cHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6
OnR5cGVNaXNtYXRjaEZvciBjb25zdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvUGFyc2luZ1V0
aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RBU0NJSVNwYWNlKToKKyAgICAgICAg
KiBsb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VNYW5pZmVzdCk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6ZGlkUmVjZWl2
ZUhlYWRlcik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6aXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJz
ZURpcmVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0OjpwYXJzZVJlcG9ydFVSSSk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
c01lZGlhVHlwZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQ
b2xpY3lNZWRpYUxpc3REaXJlY3RpdmU6OnBhcnNlKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU291
cmNlQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzSG9zdENoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjppc1BhdGhDb21wb25lbnRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNO
b3RDb2xvbk9yU2xhc2gpOgorICAgICAgICAoV2ViQ29yZTo6aXNTb3VyY2VMaXN0Tm9uZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJz
ZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYXJzZVNjaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VMaXN0OjpwYXJzZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3Vy
aXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUG9ydCk6CisgICAgICAgIChXZWJDb3Jl
Ojppc05vbmNlQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhcnNlTm9uY2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VIYXNoU291cmNlKToKKyAgICAgICAg
KiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmg6CisgICAgICAgICog
cGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nTW9udGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nRGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdXZWVrKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ1RpbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nRGF0ZVRpbWVMb2NhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6ZnJvbVBhcnNpbmdEYXRlVGltZSk6CisgICAgICAgICog
c3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3Zn
L1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXlTcGxp
bmVzKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94R2VuZXJpYyk6CisgICAgICAgICogc3ZnL1NWR0Zp
dFRvVmlld0JveC5oOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhMaXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdMZW5ndGhMaXN0OjpwYXJzZSk6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aFZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGVuZ3RoVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3Ro
VmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpTVkdMZW5ndGhWYWx1
ZSk6CisgICAgICAgICogc3ZnL1NWR051bWJlckxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R051bWJlckxpc3Q6OnBhcnNlKToKKyAgICAgICAgKiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VH
bHlwaE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2RlUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyk6CisgICAgICAgICogc3ZnL1NW
R1BhcnNlclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6c2tpcFN0cmluZyk6CisgICAg
ICAgICogc3ZnL1NWR1BvaW50TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRMaXN0
OjpwYXJzZSk6CisgICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWU6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZTo6cGFyc2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWU6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaDoKKyAgICAgICAgKiBzdmcvU1ZHU3RyaW5nTGlz
dC5oOgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1MaXN0Lmg6CisgICAgICAgICogc3ZnL1NW
R1RyYW5zZm9ybWFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VUcmFuc2Zvcm1QYXJh
bUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZUdlbmVyaWMpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVR5cGVHZW5lcmljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3
U3BlYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6
CisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmg6CisgICAgICAgICogc3ZnL1NWR1pvb21BbmRQ
YW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2Vab29tQW5kUGFuR2VuZXJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4pOgorICAgICAgICAq
IHN2Zy9TVkdab29tQW5kUGFuLmg6CisKIDIwMjAtMDYtMTAgIFNlcmdpbyBWaWxsYXIgU2VuaW4g
IDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dlYlhSXSBBZGQgYSBwcmVsaW1pbmFy
eSBpbXBsZW1lbnRhdGlvbiBvZiBYUldlYkdMTGF5ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDI2MzMzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBCYXNlRGF0ZUFu
ZFRpbWVJbnB1dFR5CiAKIGJvb2wgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjp0eXBlTWlzbWF0
Y2hGb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gIXZhbHVlLmlz
RW1wdHkoKSAmJiBwYXJzZVRvRGF0ZUNvbXBvbmVudHModmFsdWUpID09IFdURjo6bnVsbG9wdDsK
KyAgICByZXR1cm4gIXZhbHVlLmlzRW1wdHkoKSAmJiAhcGFyc2VUb0RhdGVDb21wb25lbnRzKHZh
bHVlKTsKIH0KIAogYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaCgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxp
dGllcy5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9Q
YXJzaW5nVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgYm9vbCBpc05vdEFTQ0lJU3BhY2UoVUNoYXIgYykK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgoraW5saW5lIGJvb2wgaXNOb3RBU0NJSVNwYWNl
KENoYXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHAJ
KHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9NYW5p
ZmVzdFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEzNyArNjcsMTM3IEBAIGJvb2wg
cGFyc2VNYW5pZmVzdChjb25zdCBVUkwmIG1hbmlmZXN0VVIKICAgICBpZiAoIW1hbmlmZXN0U3Ry
aW5nLnN0YXJ0c1dpdGgobWFuaWZlc3RTaWduYXR1cmUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgU3RyaW5nVmlldyBtYW5pZmVzdEFmdGVyU2lnbmF0dXJlID0gU3RyaW5nVmll
dyhtYW5pZmVzdFN0cmluZykuc3Vic3RyaW5nKHNpemVvZihtYW5pZmVzdFNpZ25hdHVyZSkgLSAx
KTsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IG1hbmlmZXN0QWZ0ZXJTaWduYXR1
cmUudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHAgPSB1cGNvbnZl
cnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHAgKyBtYW5pZmVzdEFmdGVy
U2lnbmF0dXJlLmxlbmd0aCgpOworICAgIGF1dG8gbWFuaWZlc3RBZnRlclNpZ25hdHVyZSA9IFN0
cmluZ1ZpZXcobWFuaWZlc3RTdHJpbmcpLnN1YnN0cmluZyhzaXplb2YobWFuaWZlc3RTaWduYXR1
cmUpIC0gMSk7CiAKLSAgICBpZiAocCA8IGVuZCAmJiAqcCAhPSAnICcgJiYgKnAgIT0gJ1x0JyAm
JiAqcCAhPSAnXG4nICYmICpwICE9ICdccicpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAv
LyBGSVhNRTogVGhpcyBwYXJzZXIgY291bGQgYmUgbXVjaCBjbGVhcmVyIGlmIGl0IGFkb3B0ZWQg
c29tZSBvZiB0aGUgY29tbW9uIHBhcnNpbmcgdXRpbGl0aWVzCisgICAgLy8gZm9yIHNraXBwaW5n
IGFuZCBjb21wYXJpbmcuCiAKLSAgICAvLyBTa2lwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCi0g
ICAgd2hpbGUgKHAgPCBlbmQgJiYgKnAgIT0gJ1xyJyAmJiAqcCAhPSAnXG4nKQotICAgICAgICBw
Kys7Ci0KLSAgICB3aGlsZSAoMSkgewotICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2UKLSAgICAg
ICAgd2hpbGUgKHAgPCBlbmQgJiYgKCpwID09ICdcbicgfHwgKnAgPT0gJ1xyJyB8fCAqcCA9PSAn
ICcgfHwgKnAgPT0gJ1x0JykpCi0gICAgICAgICAgICBwKys7Ci0gICAgICAgIAotICAgICAgICBp
ZiAocCA9PSBlbmQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0
IFVDaGFyKiBsaW5lU3RhcnQgPSBwOwotICAgICAgICAKLSAgICAgICAgLy8gRmluZCB0aGUgZW5k
IG9mIHRoZSBsaW5lCisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyhtYW5pZmVzdEFmdGVy
U2lnbmF0dXJlLCBbJl0oYXV0byBwLCBhdXRvIGVuZCkgeworICAgICAgICBpZiAocCA8IGVuZCAm
JiAqcCAhPSAnICcgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnXG4nICYmICpwICE9ICdccicpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU2tpcCB0byB0aGUgZW5kIG9m
IHRoZSBsaW5lLgogICAgICAgICB3aGlsZSAocCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9
ICdcbicpCiAgICAgICAgICAgICBwKys7Ci0gICAgICAgIAotICAgICAgICAvLyBDaGVjayBpZiB3
ZSBoYXZlIGEgY29tbWVudAotICAgICAgICBpZiAoKmxpbmVTdGFydCA9PSAnIycpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEdldCByaWQgb2YgdHJhaWxpbmcg
d2hpdGVzcGFjZQotICAgICAgICBjb25zdCBVQ2hhciogdG1wID0gcCAtIDE7Ci0gICAgICAgIHdo
aWxlICh0bXAgPiBsaW5lU3RhcnQgJiYgKCp0bXAgPT0gJyAnIHx8ICp0bXAgPT0gJ1x0JykpCi0g
ICAgICAgICAgICB0bXAtLTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBsaW5lKGxpbmVTdGFy
dCwgdG1wIC0gbGluZVN0YXJ0ICsgMSk7Ci0KLSAgICAgICAgaWYgKGxpbmUgPT0gIkNBQ0hFOiIp
IAotICAgICAgICAgICAgbW9kZSA9IEV4cGxpY2l0OwotICAgICAgICBlbHNlIGlmIChsaW5lID09
ICJGQUxMQkFDSzoiKQotICAgICAgICAgICAgbW9kZSA9IEZhbGxiYWNrOwotICAgICAgICBlbHNl
IGlmIChsaW5lID09ICJORVRXT1JLOiIpCi0gICAgICAgICAgICBtb2RlID0gT25saW5lQWxsb3ds
aXN0OwotICAgICAgICBlbHNlIGlmIChsaW5lLmVuZHNXaXRoKCc6JykpCi0gICAgICAgICAgICBt
b2RlID0gVW5rbm93bjsKLSAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBVbmtub3duKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gRXhwbGljaXQgfHwgbW9k
ZSA9PSBPbmxpbmVBbGxvd2xpc3QpIHsKLSAgICAgICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRMaW5l
Q2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcobGluZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0g
ICAgICAgICAgICBjb25zdCBVQ2hhciogcCA9IHVwY29udmVydGVkTGluZUNoYXJhY3RlcnM7Ci0g
ICAgICAgICAgICBjb25zdCBVQ2hhciogbGluZUVuZCA9IHAgKyBsaW5lLmxlbmd0aCgpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcg
dGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCi0gICAgICAgICAgICB3aGls
ZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnICcpIAotICAgICAgICAgICAg
ICAgIHArKzsKLQotICAgICAgICAgICAgaWYgKG1vZGUgPT0gT25saW5lQWxsb3dsaXN0ICYmIHAg
LSB1cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzID09IDEgJiYgbGluZVswXSA9PSAnKicpIHsKLSAg
ICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB3YXMgZm91bmQuCi0gICAgICAgICAgICAgICAgbWFu
aWZlc3QuYWxsb3dBbGxOZXR3b3JrUmVxdWVzdHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBVUkwgdXJsKG1hbmlmZXN0VVJM
LCBsaW5lLnN1YnN0cmluZygwLCBwIC0gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVycykpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KHVybC5wcm90b2NvbCgpLCBtYW5pZmVzdFVSTC5wcm90b2NvbCgpKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIC8vIFNraXAgd2hp
dGVzcGFjZQorICAgICAgICAgICAgd2hpbGUgKHAgPCBlbmQgJiYgKCpwID09ICdcbicgfHwgKnAg
PT0gJ1xyJyB8fCAqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JykpCisgICAgICAgICAgICAgICAgcCsr
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobW9kZSA9PSBFeHBsaWNpdCAmJiBtYW5p
ZmVzdFVSTC5wcm90b2NvbElzKCJodHRwcyIpICYmICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1
YWwobWFuaWZlc3RVUkwsIHVybCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBpZiAocCA9PSBlbmQpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChtb2RlID09IEV4cGxpY2l0KQotICAgICAgICAgICAgICAgIG1hbmlm
ZXN0LmV4cGxpY2l0VVJMcy5hZGQodXJsLnN0cmluZygpKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBtYW5pZmVzdC5vbmxpbmVBbGxvd2VkVVJMcy5hcHBlbmQodXJsKTsKLSAg
ICAgICAgICAgIAotICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gRmFsbGJhY2spIHsKLSAgICAg
ICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcobGluZSku
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogcCA9IHVw
Y29udmVydGVkTGluZUNoYXJhY3RlcnM7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogbGluZUVu
ZCA9IHAgKyBsaW5lLmxlbmd0aCgpOworICAgICAgICAgICAgYXV0byBsaW5lU3RhcnQgPSBwOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRp
bmcgdGhlIHR3byBVUkxzCi0gICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0g
J1x0JyAmJiAqcCAhPSAnICcpIAorICAgICAgICAgICAgLy8gRmluZCB0aGUgZW5kIG9mIHRoZSBs
aW5lCisgICAgICAgICAgICB3aGlsZSAocCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdc
bicpCiAgICAgICAgICAgICAgICAgcCsrOwotCi0gICAgICAgICAgICBpZiAocCA9PSBsaW5lRW5k
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUgd2FzIG5vIHdoaXRlc3BhY2Ugc2VwYXJhdGlu
ZyB0aGUgVVJMcy4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgVVJMIG5hbWVzcGFjZVVSTChtYW5pZmVzdFVSTCwgbGlu
ZS5zdWJzdHJpbmcoMCwgcCAtIHVwY29udmVydGVkTGluZUNoYXJhY3RlcnMpKTsKLSAgICAgICAg
ICAgIGlmICghbmFtZXNwYWNlVVJMLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIG5hbWVzcGFjZVVSTC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsK
LQotICAgICAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RV
UkwsIG5hbWVzcGFjZVVSTCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgIC8vIEFsdGhvdWdoIDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9v
ZmZsaW5lLmh0bWwjcGFyc2luZy1jYWNoZS1tYW5pZmVzdHM+ICgwNy8wNi8yMDE3KSBzYWlkcwot
ICAgICAgICAgICAgLy8gdGhhdCB3ZSBzaG91bGQgYWx3YXlzIHByZWZpeCBtYXRjaCB0aGUgbWFu
aWZlc3QgcGF0aCB3ZSBvbmx5IGRvIHNvIGlmIHRoZSBtYW5pZmVzdCB3YXMgc2VydmVkIHdpdGgg
YSBub24tCi0gICAgICAgICAgICAvLyBzdGFuZGFyZCBIVFRQIENvbnRlbnQtVHlwZSBoZWFkZXIg
Zm9yIHdlYiBjb21wYXRpYmlsaXR5LgotICAgICAgICAgICAgaWYgKCFhbGxvd0ZhbGxiYWNrTmFt
ZXNwYWNlT3V0c2lkZU1hbmZlc3RQYXRoICYmICFuYW1lc3BhY2VVUkwucGF0aCgpLnN0YXJ0c1dp
dGgobWFuaWZlc3RQYXRoKSkKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBjb21t
ZW50CisgICAgICAgICAgICBpZiAoKmxpbmVTdGFydCA9PSAnIycpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdldCByaWQgb2YgdHJhaWxp
bmcgd2hpdGVzcGFjZQorICAgICAgICAgICAgYXV0byB0bXAgPSBwIC0gMTsKKyAgICAgICAgICAg
IHdoaWxlICh0bXAgPiBsaW5lU3RhcnQgJiYgKCp0bXAgPT0gJyAnIHx8ICp0bXAgPT0gJ1x0Jykp
CisgICAgICAgICAgICAgICAgdG1wLS07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmlu
Z1ZpZXcgbGluZShsaW5lU3RhcnQsIHRtcCAtIGxpbmVTdGFydCArIDEpOworCisgICAgICAgICAg
ICBpZiAobGluZSA9PSAiQ0FDSEU6IikKKyAgICAgICAgICAgICAgICBtb2RlID0gRXhwbGljaXQ7
CisgICAgICAgICAgICBlbHNlIGlmIChsaW5lID09ICJGQUxMQkFDSzoiKQorICAgICAgICAgICAg
ICAgIG1vZGUgPSBGYWxsYmFjazsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxpbmUgPT0gIk5FVFdP
Uks6IikKKyAgICAgICAgICAgICAgICBtb2RlID0gT25saW5lQWxsb3dsaXN0OworICAgICAgICAg
ICAgZWxzZSBpZiAobGluZS5lbmRzV2l0aCgnOicpKQorICAgICAgICAgICAgICAgIG1vZGUgPSBV
bmtub3duOworICAgICAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBVbmtub3duKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBFeHBsaWNpdCB8
fCBtb2RlID09IE9ubGluZUFsbG93bGlzdCkgeworICAgICAgICAgICAgICAgIGF1dG8gcCA9IGxp
bmVTdGFydDsKKyAgICAgICAgICAgICAgICBhdXRvIGxpbmVFbmQgPSBwICsgbGluZS5sZW5ndGgo
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNw
YWNlIHNlcGFyYXRpbmcgdGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCisg
ICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBsaW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0g
JyAnKQorICAgICAgICAgICAgICAgICAgICBwKys7CisKKyAgICAgICAgICAgICAgICBpZiAobW9k
ZSA9PSBPbmxpbmVBbGxvd2xpc3QgJiYgcCAtIGxpbmVTdGFydCA9PSAxICYmIGxpbmVbMF0gPT0g
JyonKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHdhcyBmb3VuZC4KKyAgICAg
ICAgICAgICAgICAgICAgbWFuaWZlc3QuYWxsb3dBbGxOZXR3b3JrUmVxdWVzdHMgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBVUkwgdXJsKG1hbmlmZXN0VVJMLCBsaW5lLnN1YnN0cmluZygwLCBwIC0gbGlu
ZVN0YXJ0KS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoIXVybC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJv
dG9jb2woKSwgbWFuaWZlc3RVUkwucHJvdG9jb2woKSkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEV4
cGxpY2l0ICYmIG1hbmlmZXN0VVJMLnByb3RvY29sSXMoImh0dHBzIikgJiYgIXByb3RvY29sSG9z
dEFuZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVSTCwgdXJsKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0g
RXhwbGljaXQpCisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0LmV4cGxpY2l0VVJMcy5hZGQo
dXJsLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IG1hbmlmZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVuZCh1cmwpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IEZhbGxiYWNrKSB7CisgICAgICAgICAg
ICAgICAgYXV0byBwID0gbGluZVN0YXJ0OworICAgICAgICAgICAgICAgIGF1dG8gbGluZUVuZCA9
IHAgKyBsaW5lLmxlbmd0aCgpOworCisgICAgICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVz
cGFjZSBzZXBhcmF0aW5nIHRoZSB0d28gVVJMcworICAgICAgICAgICAgICAgIHdoaWxlIChwIDwg
bGluZUVuZCAmJiAqcCAhPSAnXHQnICYmICpwICE9ICcgJykKKyAgICAgICAgICAgICAgICAgICAg
cCsrOworCisgICAgICAgICAgICAgICAgaWYgKHAgPT0gbGluZUVuZCkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBUaGVyZSB3YXMgbm8gd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSBVUkxzLgor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgVVJMIG5hbWVzcGFjZVVSTChtYW5pZmVzdFVSTCwg
bGluZS5zdWJzdHJpbmcoMCwgcCAtIGxpbmVTdGFydCkudG9TdHJpbmcoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFuYW1lc3BhY2VVUkwuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBuYW1lc3BhY2VVUkwucmVtb3ZlRnJhZ21lbnRJZGVu
dGlmaWVyKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVF
cXVhbChtYW5pZmVzdFVSTCwgbmFtZXNwYWNlVVJMKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgICAgICAvLyBBbHRob3VnaCA8aHR0cHM6Ly9odG1sLnNwZWMu
d2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb2ZmbGluZS5odG1sI3BhcnNpbmctY2FjaGUtbWFuaWZlc3Rz
PiAoMDcvMDYvMjAxNykgc2FpZHMKKyAgICAgICAgICAgICAgICAvLyB0aGF0IHdlIHNob3VsZCBh
bHdheXMgcHJlZml4IG1hdGNoIHRoZSBtYW5pZmVzdCBwYXRoIHdlIG9ubHkgZG8gc28gaWYgdGhl
IG1hbmlmZXN0IHdhcyBzZXJ2ZWQgd2l0aCBhIG5vbi0KKyAgICAgICAgICAgICAgICAvLyBzdGFu
ZGFyZCBIVFRQIENvbnRlbnQtVHlwZSBoZWFkZXIgZm9yIHdlYiBjb21wYXRpYmlsaXR5LgorICAg
ICAgICAgICAgICAgIGlmICghYWxsb3dGYWxsYmFja05hbWVzcGFjZU91dHNpZGVNYW5mZXN0UGF0
aCAmJiAhbmFtZXNwYWNlVVJMLnBhdGgoKS5zdGFydHNXaXRoKG1hbmlmZXN0UGF0aCkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gU2tpcCB3aGl0
ZXNwYWNlIHNlcGFyYXRpbmcgZmFsbGJhY2sgbmFtZXNwYWNlIGZyb20gVVJMLgorICAgICAgICAg
ICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAoKnAgPT0gJ1x0JyB8fCAqcCA9PSAnICcpKQor
ICAgICAgICAgICAgICAgICAgICBwKys7CisKKyAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB3
aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tl
bnMuCisgICAgICAgICAgICAgICAgYXV0byBmYWxsYmFja1N0YXJ0ID0gcDsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnICcpCisgICAg
ICAgICAgICAgICAgICAgIHArKzsKKworICAgICAgICAgICAgICAgIFVSTCBmYWxsYmFja1VSTCht
YW5pZmVzdFVSTCwgU3RyaW5nKGZhbGxiYWNrU3RhcnQsIHAgLSBmYWxsYmFja1N0YXJ0KSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFmYWxsYmFja1VSTC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGZhbGxiYWNrVVJMLnJlbW92ZUZyYWdt
ZW50SWRlbnRpZmllcigpOworCisgICAgICAgICAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQ
b3J0QXJlRXF1YWwobWFuaWZlc3RVUkwsIGZhbGxiYWNrVVJMKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBtYW5pZmVzdC5mYWxsYmFja1VSTHMuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKG5hbWVzcGFjZVVSTCwgZmFsbGJhY2tVUkwpKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CiAKLSAgICAgICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZSBzZXBhcmF0aW5nIGZhbGxiYWNr
IG5hbWVzcGFjZSBmcm9tIFVSTC4KLSAgICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAo
KnAgPT0gJ1x0JyB8fCAqcCA9PSAnICcpKQotICAgICAgICAgICAgICAgIHArKzsKLQotICAgICAg
ICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSBVUkwgZnJvbSBzdWJz
ZXF1ZW50IGlnbm9yZWQgdG9rZW5zLgotICAgICAgICAgICAgY29uc3QgVUNoYXIqIGZhbGxiYWNr
U3RhcnQgPSBwOwotICAgICAgICAgICAgd2hpbGUgKHAgPCBsaW5lRW5kICYmICpwICE9ICdcdCcg
JiYgKnAgIT0gJyAnKSAKLSAgICAgICAgICAgICAgICBwKys7Ci0KLSAgICAgICAgICAgIFVSTCBm
YWxsYmFja1VSTChtYW5pZmVzdFVSTCwgU3RyaW5nKGZhbGxiYWNrU3RhcnQsIHAgLSBmYWxsYmFj
a1N0YXJ0KSk7Ci0gICAgICAgICAgICBpZiAoIWZhbGxiYWNrVVJMLmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZhbGxiYWNrVVJMLnJlbW92ZUZyYWdt
ZW50SWRlbnRpZmllcigpOwotCi0gICAgICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRB
cmVFcXVhbChtYW5pZmVzdFVSTCwgZmFsbGJhY2tVUkwpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICBtYW5pZmVzdC5mYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKG5hbWVzcGFjZVVSTCwgZmFsbGJhY2tVUkwpKTsgICAgICAgICAgICAKLSAgICAgICAg
fSBlbHNlIAotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5j
cHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiwyMiArMjEyLDI0IEBAIHZv
aWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpkaWRSZWNlaXZlSGUKICAgICAvLyBSRkMyNjE2LCBz
ZWN0aW9uIDQuMiBzcGVjaWZpZXMgdGhhdCBoZWFkZXJzIGFwcGVhcmluZyBtdWx0aXBsZSB0aW1l
cyBjYW4KICAgICAvLyBiZSBjb21iaW5lZCB3aXRoIGEgY29tbWEuIFdhbGsgdGhlIGhlYWRlciBz
dHJpbmcsIGFuZCBwYXJzZSBlYWNoIGNvbW1hCiAgICAgLy8gc2VwYXJhdGVkIGNodW5rIGFzIGEg
c2VwYXJhdGUgaGVhZGVyLgotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoaGVhZGVy
KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogYmVnaW4gPSBjaGFy
YWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIGNvbnN0IFVD
aGFyKiBlbmQgPSBiZWdpbiArIGhlYWRlci5sZW5ndGgoKTsKLSAgICB3aGlsZSAocG9zaXRpb24g
PCBlbmQpIHsKLSAgICAgICAgc2tpcFVudGlsPFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLCcpOwot
Ci0gICAgICAgIC8vIGhlYWRlcjEsaGVhZGVyMiBPUiBoZWFkZXIxCi0gICAgICAgIC8vICAgICAg
ICBeICAgICAgICAgICAgICAgICAgXgotICAgICAgICBtX3BvbGljaWVzLmFwcGVuZChDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpjcmVhdGUoKnRoaXMsIFN0cmluZyhiZWdpbiwg
cG9zaXRpb24gLSBiZWdpbiksIHR5cGUsIHBvbGljeUZyb20pKTsKLQotICAgICAgICAvLyBTa2lw
IHRoZSBjb21tYSwgYW5kIGJlZ2luIHRoZSBuZXh0IGhlYWRlciBmcm9tIHRoZSBjdXJyZW50IHBv
c2l0aW9uLgotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8ICpwb3NpdGlvbiA9PSAn
LCcpOwotICAgICAgICBza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJywnKTsKLSAg
ICAgICAgYmVnaW4gPSBwb3NpdGlvbjsKLSAgICB9CisgICAgV1RGOjpnZXRDaGFyYWN0ZXJzKGhl
YWRlciwgWyZdKGF1dG8gcG9zaXRpb24sIGF1dG8gZW5kKSB7CisgICAgICAgIHVzaW5nIENoYXJh
Y3RlclR5cGUgPSBzdGQ6OnJlbW92ZV9wb2ludGVyX3Q8ZGVjbHR5cGUocG9zaXRpb24pPjsKKwor
ICAgICAgICBhdXRvIGJlZ2luID0gcG9zaXRpb247CisgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8
IGVuZCkgeworICAgICAgICAgICAgc2tpcFVudGlsPENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBl
bmQsICcsJyk7CisKKyAgICAgICAgICAgIC8vIGhlYWRlcjEsaGVhZGVyMiBPUiBoZWFkZXIxCisg
ICAgICAgICAgICAvLyAgICAgICAgXiAgICAgICAgICAgICAgICAgIF4KKyAgICAgICAgICAgIG1f
cG9saWNpZXMuYXBwZW5kKENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmNyZWF0
ZSgqdGhpcywgU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSwgdHlwZSwgcG9saWN5RnJv
bSkpOworCisgICAgICAgICAgICAvLyBTa2lwIHRoZSBjb21tYSwgYW5kIGJlZ2luIHRoZSBuZXh0
IGhlYWRlciBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICAgICAgQVNTRVJUKHBv
c2l0aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJywnKTsKKyAgICAgICAgICAgIHNraXBFeGFj
dGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICcsJyk7CisgICAgICAgICAgICBiZWdp
biA9IHBvc2l0aW9uOworICAgICAgICB9CisgICAgfSk7CisgICAgCiAKICAgICBpZiAobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICBhcHBseVBvbGljeVRvU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAJKHJldmlzaW9uIDI2
MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIo
VUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlz
RGlyZWN0aXZlTmFtZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGlz
QVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnLSc7CiB9CiAKLXN0YXRpYyBib29sIGlzRGly
ZWN0aXZlVmFsdWVDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyBib29sIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlw
ZSBjKQogewogICAgIHJldHVybiBpc0FTQ0lJU3BhY2UoYykgfHwgKGMgPj0gMHgyMSAmJiBjIDw9
IDB4N2UpOyAvLyBXaGl0ZXNwYWNlICsgVkNIQVIKIH0KQEAgLTMzMyw2MiArMzMzLDYxIEBAIHZv
aWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDoKICAgICBpZiAocG9saWN5Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5n
Vmlldyhwb2xpY3kpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBw
b3NpdGlvbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9uICsg
cG9saWN5Lmxlbmd0aCgpOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAg
IGNvbnN0IFVDaGFyKiBkaXJlY3RpdmVCZWdpbiA9IHBvc2l0aW9uOwotICAgICAgICBza2lwVW50
aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUsIHZh
bHVlOwotICAgICAgICBpZiAocGFyc2VEaXJlY3RpdmUoZGlyZWN0aXZlQmVnaW4sIHBvc2l0aW9u
LCBuYW1lLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbmFtZS5pc0VtcHR5KCkpOwot
ICAgICAgICAgICAgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xp
Y3lGcm9tOjpJbmhlcml0ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6dXBncmFk
ZUluc2VjdXJlUmVxdWVzdHMpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBv
bGljeUZyb206OkhUVFBFcXVpdk1ldGEpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
c2FuZGJveCkKLSAgICAgICAgICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShu
YW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKQotICAg
ICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluSFRUUEVxdWl2TWV0
YShuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgV1RGOjpnZXRDaGFy
YWN0ZXJzKHBvbGljeSwgWyZdKGF1dG8gcG9zaXRpb24sIGF1dG8gZW5kKSB7CisgICAgICAgIHVz
aW5nIENoYXJhY3RlclR5cGUgPSBzdGQ6OnJlbW92ZV9wb2ludGVyX3Q8ZGVjbHR5cGUocG9zaXRp
b24pPjsKKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CisgICAgICAgICAgICBhdXRv
IGRpcmVjdGl2ZUJlZ2luID0gcG9zaXRpb247CisgICAgICAgICAgICBza2lwVW50aWw8Q2hhcmFj
dGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJzsnKTsKKworICAgICAgICAgICAgU3RyaW5nIG5hbWUs
IHZhbHVlOworICAgICAgICAgICAgaWYgKHBhcnNlRGlyZWN0aXZlKGRpcmVjdGl2ZUJlZ2luLCBw
b3NpdGlvbiwgbmFtZSwgdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFuYW1lLmlz
RW1wdHkoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpQb2xpY3lGcm9tOjpJbmhlcml0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9
PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkhUVFBFcXVpdk1ldGEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRib3gpCisgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZU5hbWVzOjpyZXBvcnRVUkkpCisgICAgICAgICAgICAgICAgICAgICAgICB8
fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
cG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJbkhUVFBFcXVpdk1ldGEobmFtZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OlBvbGljeUZyb206OkluaGVyaXRlZEZvclBsdWdpbkRvY3VtZW50KSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cGx1Z2luVHlwZXMpCisgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAhZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5
RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZEZvclBs
dWdpbkRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBl
cykKLSAgICAgICAgICAgICAgICAgICAgJiYgIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGFkZERpcmVjdGl2ZShuYW1l
LCB2YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhZGREaXJlY3RpdmUobmFtZSwg
dmFsdWUpOwotICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCAq
cG9zaXRpb24gPT0gJzsnKTsKLSAgICAgICAgc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBl
bmQsICc7Jyk7Ci0gICAgfQorICAgICAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCAq
cG9zaXRpb24gPT0gJzsnKTsKKyAgICAgICAgICAgIHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+
KHBvc2l0aW9uLCBlbmQsICc7Jyk7CisgICAgICAgIH0KKyAgICB9KTsKIH0KIAogLy8gZGlyZWN0
aXZlICAgICAgICAgPSAqV1NQIFsgZGlyZWN0aXZlLW5hbWUgWyBXU1AgZGlyZWN0aXZlLXZhbHVl
IF0gXQogLy8gZGlyZWN0aXZlLW5hbWUgICAgPSAxKiggQUxQSEEgLyBESUdJVCAvICItIiApCiAv
LyBkaXJlY3RpdmUtdmFsdWUgICA9ICooIFdTUCAvIDxWQ0hBUiBleGNlcHQgIjsiPiApCiAvLwot
Ym9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZURpcmVjdGl2ZShj
b25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgbmFtZSwgU3RyaW5n
JiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VEaXJlY3RpdmUoY29uc3QgQ2hhcmFjdGVy
VHlwZSogYmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgU3RyaW5nJiBuYW1lLCBTdHJp
bmcmIHZhbHVlKQogewogICAgIEFTU0VSVChuYW1lLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKHZh
bHVlLmlzRW1wdHkoKSk7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAg
ICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0
byBwb3NpdGlvbiA9IGJlZ2luOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJ
U3BhY2U+KHBvc2l0aW9uLCBlbmQpOwogCiAgICAgLy8gRW1wdHkgZGlyZWN0aXZlIChlLmcuICI7
OzsiKS4gRXhpdCBlYXJseS4KICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBjb25zdCBVQ2hhciogbmFtZUJlZ2luID0gcG9zaXRpb247Ci0gICAg
c2tpcFdoaWxlPFVDaGFyLCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQp
OworICAgIGF1dG8gbmFtZUJlZ2luID0gcG9zaXRpb247CisgICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CiAKICAgICAv
LyBUaGUgZGlyZWN0aXZlLW5hbWUgbXVzdCBiZSBub24tZW1wdHkuCiAgICAgaWYgKG5hbWVCZWdp
biA9PSBwb3NpdGlvbikgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFj
ZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05v
dEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwogICAgICAgICBtX3BvbGljeS5yZXBvcnRVbnN1
cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVCZWdpbikp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzk4LDE2ICszOTcsMTYgQEAgYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OgogICAgIGlmIChwb3NpdGlvbiA9
PSBlbmQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFza2lwRXhhY3RseTxVQ2hh
ciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKSkgewotICAgICAgICBza2lwV2hpbGU8VUNo
YXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgaWYgKCFza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpKSB7CisgICAgICAg
IHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQp
OwogICAgICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFt
ZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVCZWdpbikpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQp
OworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBl
bmQpOwogCi0gICAgY29uc3QgVUNoYXIqIHZhbHVlQmVnaW4gPSBwb3NpdGlvbjsKLSAgICBza2lw
V2hpbGU8VUNoYXIsIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwor
ICAgIGF1dG8gdmFsdWVCZWdpbiA9IHBvc2l0aW9uOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJU
eXBlLCBpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKIAogICAgIGlm
IChwb3NpdGlvbiAhPSBlbmQpIHsKICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVj
dGl2ZVZhbHVlQ2hhcmFjdGVyKG5hbWUsIFN0cmluZyh2YWx1ZUJlZ2luLCBlbmQgLSB2YWx1ZUJl
Z2luKSk7CkBAIC00MjksMTkgKzQyOCwyMCBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3Q6CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNoYXJhY3Rl
cnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25z
dCBVQ2hhciogcG9zaXRpb24gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBw
b3NpdGlvbiArIHZhbHVlLmxlbmd0aCgpOworICAgIFdURjo6Z2V0Q2hhcmFjdGVycyh2YWx1ZSwg
WyZdKGF1dG8gcG9zaXRpb24sIGF1dG8gZW5kKSB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5
cGUgPSBzdGQ6OnJlbW92ZV9wb2ludGVyX3Q8ZGVjbHR5cGUocG9zaXRpb24pPjsKIAotICAgIHdo
aWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlT
cGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIGF1dG8gY2hhcmFjdGVycyA9IHBvc2l0aW9u
OworICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKKyAgICAgICAgICAgIHNraXBXaGls
ZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwogCi0gICAgICAg
IGNvbnN0IFVDaGFyKiB1cmxCZWdpbiA9IHBvc2l0aW9uOwotICAgICAgICBza2lwV2hpbGU8VUNo
YXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgICAgICBhdXRvIHVy
bEJlZ2luID0gcG9zaXRpb247CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKIAotICAgICAgICBpZiAodXJsQmVnaW4g
PCBwb3NpdGlvbikKLSAgICAgICAgICAgIG1fcmVwb3J0VVJJcy5hcHBlbmQodmFsdWUuc3Vic3Ry
aW5nKHVybEJlZ2luIC0gY2hhcmFjdGVycywgcG9zaXRpb24gLSB1cmxCZWdpbikpOwotICAgIH0K
KyAgICAgICAgICAgIGlmICh1cmxCZWdpbiA8IHBvc2l0aW9uKQorICAgICAgICAgICAgICAgIG1f
cmVwb3J0VVJJcy5hcHBlbmQodmFsdWUuc3Vic3RyaW5nKHVybEJlZ2luIC0gY2hhcmFjdGVycywg
cG9zaXRpb24gLSB1cmxCZWdpbikpOworICAgICAgICB9CisgICAgfSk7CiB9CiAKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBwYXJz
ZShjb25zdCBTdHJpbmcmLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb20pOwogCi0g
ICAgYm9vbCBwYXJzZURpcmVjdGl2ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBl
bmQsIFN0cmluZyYgbmFtZSwgU3RyaW5nJiB2YWx1ZSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZURpcmVjdGl2ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBi
ZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgdmFs
dWUpOwogICAgIHZvaWQgcGFyc2VSZXBvcnRVUkkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIHBhcnNlUGx1Z2luVHlwZXMoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIGFkZERpcmVjdGl2ZShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lN
ZWRpYUxpc3REaXJlY3RpdmUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIGJvb2wgaXNNZWRpYVR5cGVDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgYm9vbCBpc01lZGlhVHlwZUNoYXJhY3RlcihDaGFy
YWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYykgJiYgYyAhPSAnLyc7
CiB9CkBAIC01Miw2MiArNTMsNjEgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxp
c3REaXJlYwogCiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZTo6
cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJp
bmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciog
YmVnaW4gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwot
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBiZWdpbiArIHZhbHVlLmxlbmd0aCgpOwotCiAgICAgLy8g
J3BsdWdpbi10eXBlcyBfX19fOycgT1IgJ3BsdWdpbi10eXBlczsnCiAgICAgaWYgKHZhbHVlLmlz
RW1wdHkoKSkgewogICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxp
ZFBsdWdpblR5cGVzKHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdoaWxl
IChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICAvLyBfX19fXyBPUiBfX19fX21pbWUxL21pbWUx
Ci0gICAgICAgIC8vIF4gICAgICAgIF4KLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJ
U3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCi0g
ICAgICAgIC8vIF4KLSAgICAgICAgYmVnaW4gPSBwb3NpdGlvbjsKLSAgICAgICAgaWYgKCFza2lw
RXhhY3RseTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKSB7Ci0g
ICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVu
ZCk7Ci0gICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBs
dWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc01lZGlhVHlw
ZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgV1RGOjpnZXRDaGFyYWN0ZXJzKHZhbHVl
LCBbJl0oYXV0byBwb3NpdGlvbiwgYXV0byBlbmQpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVy
VHlwZSA9IHN0ZDo6cmVtb3ZlX3BvaW50ZXJfdDxkZWNsdHlwZShwb3NpdGlvbik+OwogCi0gICAg
ICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vICAgICAgXgotICAgICAg
ICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpKSB7Ci0gICAgICAg
ICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0g
ICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5
cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CisgICAgICAg
ICAgICAvLyBfX19fXyBPUiBfX19fX21pbWUxL21pbWUxCisgICAgICAgICAgICAvLyBeICAgICAg
ICBeCisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSVNwYWNlPihw
b3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1l
MgorICAgICAgICAgICAgLy8gXgorICAgICAgICAgICAgYXV0byBiZWdpbiA9IHBvc2l0aW9uOwor
ICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNo
YXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKKyAgICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hh
cmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAg
ICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0
cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlz
TWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKworICAgICAgICAgICAgLy8gbWlt
ZTEvbWltZTEgbWltZTIvbWltZTIKKyAgICAgICAgICAgIC8vICAgICAgXgorICAgICAgICAgICAg
aWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnLycpKSB7Cisg
ICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4o
cG9zaXRpb24sIGVuZCk7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgp
LnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4p
KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKKyAgICAgICAgICAgIC8vICAgICAgIF4KKyAg
ICAgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFy
YWN0ZXI+KHBvc2l0aW9uLCBlbmQpKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJh
Y3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgICAgICAg
ICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJp
bmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc01l
ZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisKKyAgICAgICAgICAgIC8vIG1pbWUx
L21pbWUxIG1pbWUyL21pbWUyIE9SIG1pbWUxL21pbWUxICBPUiBtaW1lMS9taW1lMS9lcnJvcgor
ICAgICAgICAgICAgLy8gICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICBeICAg
ICAgICAgICAgICAgXgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmIGlzTm90QVND
SUlTcGFjZSgqcG9zaXRpb24pKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgICAgICAgICAg
ZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmco
YmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcGx1Z2luVHlwZXMuYWRkKFN0cmluZyhiZWdpbiwg
cG9zaXRpb24gLSBiZWdpbikpOwogCi0gICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUy
Ci0gICAgICAgIC8vICAgICAgIF4KLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNN
ZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAgICAgICBza2lwV2hp
bGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBk
aXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhi
ZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8IGlzQVNDSUlTcGFjZSgqcG9zaXRpb24pKTsK
ICAgICAgICAgfQotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTWVkaWFUeXBlQ2hhcmFjdGVy
Pihwb3NpdGlvbiwgZW5kKTsKLQotICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMiBP
UiBtaW1lMS9taW1lMSAgT1IgbWltZTEvbWltZTEvZXJyb3IKLSAgICAgICAgLy8gICAgICAgICAg
ICBeICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgXgotICAgICAgICBp
ZiAocG9zaXRpb24gPCBlbmQgJiYgaXNOb3RBU0NJSVNwYWNlKCpwb3NpdGlvbikpIHsKLSAgICAg
ICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsK
LSAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2lu
VHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotICAgICAgICBtX3BsdWdpblR5cGVzLmFkZChTdHJpbmcoYmVnaW4s
IHBvc2l0aW9uIC0gYmVnaW4pKTsKLQotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8
IGlzQVNDSUlTcGFjZSgqcG9zaXRpb24pKTsKLSAgICB9CisgICAgfSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwCShyZXZpc2lvbiAyNjMz
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNDQgKzU2LDQxIEBAIHN0YXRpYyBib29s
IGlzQ1NQRGlyZWN0aXZlTmFtZShjb25zdCBTdHIKICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c3R5bGVT
cmMpOwogfQogCi1zdGF0aWMgYm9vbCBpc1NvdXJjZUNoYXJhY3RlcihVQ2hhciBjKQordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNTb3VyY2VDaGFyYWN0ZXIo
Q2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiAhaXNBU0NJSVNwYWNlKGMpOwogfQogCi1z
dGF0aWMgYm9vbCBpc0hvc3RDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzSG9zdENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMp
CiB7CiAgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnLSc7CiB9CiAK
LXN0YXRpYyBib29sIGlzUGF0aENvbXBvbmVudENoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNQYXRoQ29tcG9uZW50Q2hhcmFj
dGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gYyAhPSAnPycgJiYgYyAhPSAnIyc7
CiB9CiAKLXN0YXRpYyBib29sIGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyKFVDaGFyIGMp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1NjaGVtZUNv
bnRpbnVhdGlvbkNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGlzQVND
SUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLScgfHwgYyA9PSAnLic7CiB9
CiAKLXN0YXRpYyBib29sIGlzTm90Q29sb25PclNsYXNoKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc05vdENvbG9uT3JTbGFzaChDaGFyYWN0
ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGMgIT0gJzonICYmIGMgIT0gJy8nOwogfQogCi1zdGF0
aWMgYm9vbCBpc1NvdXJjZUxpc3ROb25lKGNvbnN0IFN0cmluZyYgdmFsdWUpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1NvdXJjZUxpc3ROb25lKGNvbnN0
IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiB7Ci0gICAg
YXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hh
ciogZW5kID0gY2hhcmFjdGVycyArIHZhbHVlLmxlbmd0aCgpOwotICAgIHNraXBXaGlsZTxVQ2hh
ciwgaXNBU0NJSVNwYWNlPihiZWdpbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlw
ZSwgaXNBU0NJSVNwYWNlPihiZWdpbiwgZW5kKTsKIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlv
biA9IGJlZ2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0
aW9uLCBlbmQpOworICAgIGF1dG8gcG9zaXRpb24gPSBiZWdpbjsKKyAgICBza2lwV2hpbGU8Q2hh
cmFjdGVyVHlwZSwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwogICAgIGlmICgh
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4sICIn
bm9uZSciKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2tpcFdoaWxlPFVDaGFyLCBp
c0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwogICAgIGlmIChwb3NpdGlvbiAhPSBlbmQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTEwOCwxMiArMTA1LDE0IEBAIENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OkNvbnRlbnQKIAogdm9pZCBDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlm
IChpc1NvdXJjZUxpc3ROb25lKHZhbHVlKSkgewotICAgICAgICBtX2lzTm9uZSA9IHRydWU7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2
YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgcGFyc2UoY2hhcmFjdGVycywgY2hh
cmFjdGVycyArIHZhbHVlLmxlbmd0aCgpKTsKKyAgICBXVEY6OmdldENoYXJhY3RlcnModmFsdWUs
IFsmXShhdXRvIGNoYXJhY3RlcnMsIGF1dG8gZW5kKSB7CisgICAgICAgIGlmIChpc1NvdXJjZUxp
c3ROb25lKGNoYXJhY3RlcnMsIGVuZCkpIHsKKyAgICAgICAgICAgIG1faXNOb25lID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHBhcnNlKGNoYXJhY3Rl
cnMsIGVuZCk7CisgICAgfSk7CiB9CiAKIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdDo6aXNQcm90b2NvbEFsbG93ZWRCeVN0YXIoY29uc3QgVVJMJiB1cmwpIGNvbnN0CkBAIC0x
NjAsMTcgKzE1OSwxNyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6Om1h
CiAvLyBzb3VyY2UtbGlzdCAgICAgICA9ICpXU1AgWyBzb3VyY2UgKiggMSpXU1Agc291cmNlICkg
KldTUCBdCiAvLyAgICAgICAgICAgICAgICAgICAvICpXU1AgIidub25lJyIgKldTUAogLy8KLXZv
aWQgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2UoY29uc3QgVUNoYXIqIGJl
Z2luLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
dm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZShjb25zdCBDaGFyYWN0
ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewotICAgIGNvbnN0IFVD
aGFyKiBwb3NpdGlvbiA9IGJlZ2luOworICAgIGF1dG8gcG9zaXRpb24gPSBiZWdpbjsKIAogICAg
IHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVND
SUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwogICAgICAgICBpZiAocG9zaXRpb24gPT0g
ZW5kKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvbnN0IFVDaGFyKiBiZWdpblNv
dXJjZSA9IHBvc2l0aW9uOwotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzU291cmNlQ2hhcmFj
dGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgYXV0byBiZWdpblNvdXJjZSA9IHBvc2l0aW9u
OworICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBv
c2l0aW9uLCBlbmQpOwogCiAgICAgICAgIFN0cmluZyBzY2hlbWUsIGhvc3QsIHBhdGg7CiAgICAg
ICAgIE9wdGlvbmFsPHVpbnQxNl90PiBwb3J0OwpAQCAtMjA1LDcgKzIwNCw3IEBAIHZvaWQgQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEKIC8vICAgICAgICAgICAgICAgICAgIC8g
KCBbIHNjaGVtZSAiOi8vIiBdIGhvc3QgWyBwb3J0IF0gWyBwYXRoIF0gKQogLy8gICAgICAgICAg
ICAgICAgICAgLyAiJ3NlbGYnIgogLy8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdDo6cGFyc2VTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBT
dHJpbmcmIHNjaGVtZSwgU3RyaW5nJiBob3N0LCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIFN0
cmluZyYgcGF0aCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNhcmQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhcnNlU291cmNlKGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN0cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIE9w
dGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgU3RyaW5nJiBwYXRoLCBib29sJiBob3N0SGFzV2lsZGNh
cmQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCkKIHsKICAgICBpZiAoYmVnaW4gPT0gZW5kKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzMsMTIgKzIzMiwxMiBAQCBib29sIENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBiZWdp
bkhvc3QgPSBiZWdpbjsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5QYXRoID0gZW5kOwotICAgIGNv
bnN0IFVDaGFyKiBiZWdpblBvcnQgPSBudWxscHRyOworICAgIGF1dG8gcG9zaXRpb24gPSBiZWdp
bjsKKyAgICBhdXRvIGJlZ2luSG9zdCA9IGJlZ2luOworICAgIGF1dG8gYmVnaW5QYXRoID0gZW5k
OworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luUG9ydCA9IG51bGxwdHI7CiAKLSAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzTm90Q29sb25PclNsYXNoPihwb3NpdGlvbiwgZW5kKTsKKyAgICBz
a2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBlbmQp
OwogCiAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgewogICAgICAgICAvLyBob3N0CkBAIC0yNjMs
MjEgKzI2MiwyMSBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAg
ICAgICAgICAgICAvLyBzY2hlbWU6Ly9ob3N0IHx8IHNjaGVtZTovLwogICAgICAgICAgICAgLy8g
ICAgICAgXiAgICAgICAgICAgICAgICBeCiAgICAgICAgICAgICBpZiAoIXBhcnNlU2NoZW1lKGJl
Z2luLCBwb3NpdGlvbiwgc2NoZW1lKQotICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseTxV
Q2hhcj4ocG9zaXRpb24sIGVuZCwgJzonKQotICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3Rs
eTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKQotICAgICAgICAgICAgICAgIHx8ICFza2lwRXhh
Y3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKSkKKyAgICAgICAgICAgICAgICB8fCAhc2tp
cEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJzonKQorICAgICAgICAgICAg
ICAgIHx8ICFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnLycpCisg
ICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBl
bmQsICcvJykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYg
KHBvc2l0aW9uID09IGVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICBiZWdpbkhvc3QgPSBwb3NpdGlvbjsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNOb3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBlbmQpOworICAgICAgICAgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzTm90Q29sb25PclNsYXNoPihwb3NpdGlvbiwgZW5kKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gJzonKSB7
CiAgICAgICAgICAgICAvLyBob3N0OnBvcnQgfHwgc2NoZW1lOi8vaG9zdDpwb3J0CiAgICAgICAg
ICAgICAvLyAgICAgXiAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgIGJlZ2luUG9y
dCA9IHBvc2l0aW9uOwotICAgICAgICAgICAgc2tpcFVudGlsPFVDaGFyPihwb3NpdGlvbiwgZW5k
LCAnLycpOworICAgICAgICAgICAgc2tpcFVudGlsPENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBl
bmQsICcvJyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMxMSw3ICszMTAsNyBAQCBib29sIENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAvLyAgICAgICAgICAgICAgICAgICAg
IDsgPHNjaGVtZT4gcHJvZHVjdGlvbiBmcm9tIFJGQyAzOTg2CiAvLyBzY2hlbWUgICAgICA9IEFM
UEhBICooIEFMUEhBIC8gRElHSVQgLyAiKyIgLyAiLSIgLyAiLiIgKQogLy8KLWJvb2wgQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTY2hlbWUoY29uc3QgVUNoYXIqIGJlZ2lu
LCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNjaGVtZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VT
Y2hlbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgU3RyaW5nJiBzY2hlbWUpCiB7CiAgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CiAgICAgQVNT
RVJUKHNjaGVtZS5pc0VtcHR5KCkpOwpAQCAtMzE5LDEyICszMTgsMTIgQEAgYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogICAgIGlmIChiZWdpbiA9PSBlbmQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwor
ICAgIGF1dG8gcG9zaXRpb24gPSBiZWdpbjsKIAotICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXIs
IGlzQVNDSUlBbHBoYT4ocG9zaXRpb24sIGVuZCkpCisgICAgaWYgKCFza2lwRXhhY3RseTxDaGFy
YWN0ZXJUeXBlLCBpc0FTQ0lJQWxwaGE+KHBvc2l0aW9uLCBlbmQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFj
dGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNTY2hl
bWVDb250aW51YXRpb25DaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwogCiAgICAgaWYgKHBvc2l0
aW9uICE9IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzM3LDcgKzMzNiw3IEBAIGJv
b2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEKIC8vICAgICAgICAgICAgICAg
ICAgIC8gIioiCiAvLyBob3N0LWNoYXIgICAgICAgICA9IEFMUEhBIC8gRElHSVQgLyAiLSIKIC8v
Ci1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSG9zdChjb25zdCBV
Q2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhh
c1dpbGRjYXJkKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhvc3QoY29uc3QgQ2hhcmFjdGVyVHlwZSog
YmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0
SGFzV2lsZGNhcmQpCiB7CiAgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CiAgICAgQVNTRVJUKGhv
c3QuaXNFbXB0eSgpKTsKQEAgLTM0NiwyNyArMzQ1LDI3IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdDo6cGEKICAgICBpZiAoYmVnaW4gPT0gZW5kKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKKyAgICBhdXRv
IHBvc2l0aW9uID0gYmVnaW47CiAKLSAgICBpZiAoc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9u
LCBlbmQsICcqJykpIHsKKyAgICBpZiAoc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRp
b24sIGVuZCwgJyonKSkgewogICAgICAgICBob3N0SGFzV2lsZGNhcmQgPSB0cnVlOwogCiAgICAg
ICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
ICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLicpKQorICAgICAg
ICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICcuJykpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29uc3QgVUNoYXIqIGhvc3RC
ZWdpbiA9IHBvc2l0aW9uOworICAgIGF1dG8gaG9zdEJlZ2luID0gcG9zaXRpb247CiAKICAgICB3
aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwg
aXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKSkKKyAgICAgICAgaWYgKCFza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlLCBpc0hvc3RDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNIb3N0Q2hh
cmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CiAKLSAgICAgICAgaWYgKHBvc2l0aW9u
IDwgZW5kICYmICFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy4nKSkKKyAgICAg
ICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3Np
dGlvbiwgZW5kLCAnLicpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAt
Mzc1LDEzICszNzQsMTMgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Ojpw
YQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3Q6OnBhcnNlUGF0aChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0
cmluZyYgcGF0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQYXRoKGNvbnN0IENoYXJhY3RlclR5cGUq
IGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN0cmluZyYgcGF0aCkKIHsKICAgICBB
U1NFUlQoYmVnaW4gPD0gZW5kKTsKICAgICBBU1NFUlQocGF0aC5pc0VtcHR5KCkpOwogICAgIAot
ICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIHBvc2l0
aW9uID0gYmVnaW47CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzUGF0aENvbXBvbmVu
dENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CiAgICAgLy8gcGF0aC90by9maWxlLmpzP3F1ZXJ5
PXN0cmluZyB8fCBwYXRoL3RvL2ZpbGUuanMjYW5jaG9yCiAgICAgLy8gICAgICAgICAgICAgICAg
XiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgaWYgKHBvc2l0aW9uIDwgZW5k
KQpAQCAtMzk2LDEzICszOTUsMTMgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYQogCiAvLyBwb3J0ICAgICAgICAgICAgICA9ICI6IiAoIDEqRElHSVQgLyAiKiIgKQog
Ly8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQb3J0KGNvbnN0
IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0
LCBib29sJiBwb3J0SGFzV2lsZGNhcmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUG9ydChjb25zdCBD
aGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBPcHRpb25hbDx1
aW50MTZfdD4mIHBvcnQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCkKIHsKICAgICBBU1NFUlQoYmVn
aW4gPD0gZW5kKTsKICAgICBBU1NFUlQoIXBvcnQpOwogICAgIEFTU0VSVCghcG9ydEhhc1dpbGRj
YXJkKTsKICAgICAKLSAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihiZWdpbiwgZW5kLCAnOicp
KQorICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4oYmVnaW4sIGVuZCwgJzonKSkK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgCiAgICAgaWYgKGJlZ2luID09IGVu
ZCkKQEAgLTQxNCw4ICs0MTMsOCBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3Q6OnBhCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBjb25zdCBVQ2hh
ciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlEaWdpdD4o
cG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBwb3NpdGlvbiA9IGJlZ2luOworICAgIHNraXBXaGls
ZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJRGlnaXQ+KHBvc2l0aW9uLCBlbmQpOwogICAgIAogICAg
IGlmIChwb3NpdGlvbiAhPSBlbmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQzMSwyMSAr
NDMwLDIxIEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEKIC8vIE1h
dGNoIEJsaW5rJ3MgYmVoYXZpb3Igb2YgYWxsb3dpbmcgYW4gZXF1YWwgc2lnbiB0byBhcHBlYXIg
YW55d2hlcmUgaW4gdGhlIHZhbHVlIG9mIHRoZSBub25jZQogLy8gZXZlbiB0aG91Z2ggdGhpcyBk
b2VzIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgTGV2
ZWwgMyBzcGVjLiwKIC8vIDxodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWNzcC8+ICgy
OSBGZWJydWFyeSAyMDE2KS4KLXN0YXRpYyBib29sIGlzTm9uY2VDaGFyYWN0ZXIoVUNoYXIgYykK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzTm9uY2VDaGFy
YWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBpc0Jhc2U2NE9yQmFzZTY0VVJM
Q2hhcmFjdGVyKGMpIHx8IGMgPT0gJz0nOwogfQogCiAvLyBub25jZS1zb3VyY2UgICAgPSAiJ25v
bmNlLSIgbm9uY2UtdmFsdWUgIiciCiAvLyBub25jZS12YWx1ZSAgICAgPSBiYXNlNjQtdmFsdWUK
LWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VOb25jZVNvdXJjZShj
b25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNl
Tm9uY2VTb3VyY2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW4sIGNvbnN0IENoYXJhY3RlclR5
cGUqIGVuZCkKIHsKICAgICBjb25zdCB1bnNpZ25lZCBub25jZVByZWZpeExlbmd0aCA9IDc7CiAg
ICAgaWYgKCFTdHJpbmdWaWV3KGJlZ2luLCBlbmQgLSBiZWdpbikuc3RhcnRzV2l0aElnbm9yaW5n
QVNDSUlDYXNlKCInbm9uY2UtIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBV
Q2hhciogcG9zaXRpb24gPSBiZWdpbiArIG5vbmNlUHJlZml4TGVuZ3RoOwotICAgIGNvbnN0IFVD
aGFyKiBiZWdpbk5vbmNlVmFsdWUgPSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlz
Tm9uY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgIGF1dG8gcG9zaXRpb24gPSBiZWdp
biArIG5vbmNlUHJlZml4TGVuZ3RoOworICAgIGF1dG8gYmVnaW5Ob25jZVZhbHVlID0gcG9zaXRp
b247CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm9uY2VDaGFyYWN0ZXI+KHBvc2l0
aW9uLCBlbmQpOwogICAgIGlmIChwb3NpdGlvbiA+PSBlbmQgfHwgcG9zaXRpb24gPT0gYmVnaW5O
b25jZVZhbHVlIHx8ICpwb3NpdGlvbiAhPSAnXCcnKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgbV9ub25jZXMuYWRkKFN0cmluZyhiZWdpbk5vbmNlVmFsdWUsIHBvc2l0aW9uIC0gYmVnaW5O
b25jZVZhbHVlKSk7CkBAIC00NTUsMTMgKzQ1NCwxMyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhCiAvLyBoYXNoLXNvdXJjZSAgICA9ICInIiBoYXNoLWFsZ29yaXRo
bSAiLSIgYmFzZTY0LXZhbHVlICInIgogLy8gaGFzaC1hbGdvcml0aG0gPSAic2hhMjU2IiAvICJz
aGEzODQiIC8gInNoYTUxMiIKIC8vIGJhc2U2NC12YWx1ZSAgPSAxKiggQUxQSEEgLyBESUdJVCAv
ICIrIiAvICIvIiAvICItIiAvICJfIiApKjIoICI9IiApCi1ib29sIENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0
IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZShjb25zdCBDaGFyYWN0
ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIGlmIChiZWdp
biA9PSBlbmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFVDaGFyKiBwb3Np
dGlvbiA9IGJlZ2luOwotICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQs
ICdcJycpKQorICAgIGF1dG8gcG9zaXRpb24gPSBiZWdpbjsKKyAgICBpZiAoIXNraXBFeGFjdGx5
PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICdcJycpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChwb3NpdGlv
biwgZW5kKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNTUsMTkgKzU1LDE5IEBAIHB1YmxpYzoKICAgICBib29sIGlzTm9u
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOb25lOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBwYXJz
ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVn
aW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCk7CiAKLSAgICBib29sIHBhcnNlU291cmNlKGNv
bnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUsIFN0cmlu
ZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhv
c3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKLSAgICBib29sIHBhcnNlU2No
ZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUp
OwotICAgIGJvb2wgcGFyc2VIb3N0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVu
ZCwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFzV2lsZGNhcmQpOwotICAgIGJvb2wgcGFyc2VQ
b3J0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgT3B0aW9uYWw8dWludDE2
X3Q+JiBwb3J0LCBib29sJiBwb3J0SGFzV2lsZGNhcmQpOwotICAgIGJvb2wgcGFyc2VQYXRoKGNv
bnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBwYXRoKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlU291cmNlKGNvbnN0IENo
YXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN0cmluZyYgc2No
ZW1lLCBTdHJpbmcmIGhvc3QsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgU3RyaW5nJiBwYXRo
LCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVNjaGVtZShjb25zdCBDaGFy
YWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBTdHJpbmcmIHNjaGVt
ZSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZUhvc3Qo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgU3Ry
aW5nJiBob3N0LCBib29sJiBob3N0SGFzV2lsZGNhcmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VQb3J0KGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2lu
LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgYm9v
bCYgcG9ydEhhc1dpbGRjYXJkKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIHBhcnNlUGF0aChjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFj
dGVyVHlwZSogZW5kLCBTdHJpbmcmIHBhdGgpOwogCi0gICAgYm9vbCBwYXJzZU5vbmNlU291cmNl
KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZU5vbmNlU291cmNlKGNvbnN0IENoYXJhY3Rl
clR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpOwogCiAgICAgYm9vbCBpc1By
b3RvY29sQWxsb3dlZEJ5U3Rhcihjb25zdCBVUkwmKSBjb25zdDsKIAotICAgIGJvb2wgcGFyc2VI
YXNoU291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZUhhc2hTb3VyY2UoY29uc3Qg
Q2hhcmFjdGVyVHlwZSogYmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCk7CiAKICAgICBj
b25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIG1fcG9saWN5OwogICAgIFZlY3RvcjxDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2U+IG1fbGlzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RhdGVDb21wb25lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9EYXRlQ29tcG9uZW50cy5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDkg
KzExMSwxMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiB7CiAg
ICAgaWYgKHBhcnNlU3RhcnQgKyBwYXJzZUxlbmd0aCA+IGxlbmd0aCB8fCBwYXJzZUxlbmd0aCA8
PSAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpbnQgdmFsdWUgPSAwOwotICAgIGNv
bnN0IENoYXJhY3RlclR5cGUqIGN1cnJlbnQgPSBzcmMgKyBwYXJzZVN0YXJ0OwotICAgIGNvbnN0
IENoYXJhY3RlclR5cGUqIGVuZCA9IGN1cnJlbnQgKyBwYXJzZUxlbmd0aDsKKyAgICBhdXRvIGN1
cnJlbnQgPSBzcmMgKyBwYXJzZVN0YXJ0OworICAgIGF1dG8gZW5kID0gY3VycmVudCArIHBhcnNl
TGVuZ3RoOwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgbmVnYXRpdmUgbnVtYmVy
cyBmb3IgSVNPIDg2MDEuCiAgICAgZm9yICg7IGN1cnJlbnQgPCBlbmQ7ICsrY3VycmVudCkgewpA
QCAtMTk4LDQzICsxOTksNDMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRj4gc3RhdGljIE9wdGlvbmFs
PERhdAogCiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4gRGF0ZUNvbXBvbmVudHM6OmZyb21QYXJz
aW5nTW9udGgoY29uc3QgU3RyaW5nVmlldyYgc291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVG
cm9tU3RyaW5nKHNvdXJjZSwgW10gKGF1dG8mIGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBs
ZW5ndGgsIGF1dG8mIGVuZCkgewotICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZU1vbnRoKHNyYywg
bGVuZ3RoLCAwLCBlbmQpOworICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10g
KGF1dG8mIGRhdGUsIGF1dG8gY2hhcmFjdGVycywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkgewor
ICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZU1vbnRoKGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgZW5k
KTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8RGF0ZUNvbXBvbmVudHM+IERhdGVDb21wb25lbnRz
Ojpmcm9tUGFyc2luZ0RhdGUoY29uc3QgU3RyaW5nVmlldyYgc291cmNlKQogewotICAgIHJldHVy
biBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwgW10gKGF1dG8mIGRhdGUsIGNvbnN0IGF1dG8qIHNy
YywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkgewotICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZURh
dGUoc3JjLCBsZW5ndGgsIDAsIGVuZCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291
cmNlLCBbXSAoYXV0byYgZGF0ZSwgYXV0byBjaGFyYWN0ZXJzLCBhdXRvIGxlbmd0aCwgYXV0byYg
ZW5kKSB7CisgICAgICAgIHJldHVybiBkYXRlLnBhcnNlRGF0ZShjaGFyYWN0ZXJzLCBsZW5ndGgs
IDAsIGVuZCk7CiAgICAgfSk7CiB9CiAKIE9wdGlvbmFsPERhdGVDb21wb25lbnRzPiBEYXRlQ29t
cG9uZW50czo6ZnJvbVBhcnNpbmdXZWVrKGNvbnN0IFN0cmluZ1ZpZXcmIHNvdXJjZSkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBjb25zdCBh
dXRvKiBzcmMsIGF1dG8gbGVuZ3RoLCBhdXRvJiBlbmQpIHsKLSAgICAgICAgcmV0dXJuIGRhdGUu
cGFyc2VXZWVrKHNyYywgbGVuZ3RoLCAwLCBlbmQpOworICAgIHJldHVybiBjcmVhdGVGcm9tU3Ry
aW5nKHNvdXJjZSwgW10gKGF1dG8mIGRhdGUsIGF1dG8gY2hhcmFjdGVycywgYXV0byBsZW5ndGgs
IGF1dG8mIGVuZCkgeworICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZVdlZWsoY2hhcmFjdGVycywg
bGVuZ3RoLCAwLCBlbmQpOwogICAgIH0pOwogfQogCiBPcHRpb25hbDxEYXRlQ29tcG9uZW50cz4g
RGF0ZUNvbXBvbmVudHM6OmZyb21QYXJzaW5nVGltZShjb25zdCBTdHJpbmdWaWV3JiBzb3VyY2Up
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0ZSwg
Y29uc3QgYXV0byogc3JjLCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7Ci0gICAgICAgIHJldHVy
biBkYXRlLnBhcnNlVGltZShzcmMsIGxlbmd0aCwgMCwgZW5kKTsKKyAgICByZXR1cm4gY3JlYXRl
RnJvbVN0cmluZyhzb3VyY2UsIFtdIChhdXRvJiBkYXRlLCBhdXRvIGNoYXJhY3RlcnMsIGF1dG8g
bGVuZ3RoLCBhdXRvJiBlbmQpIHsKKyAgICAgICAgcmV0dXJuIGRhdGUucGFyc2VUaW1lKGNoYXJh
Y3RlcnMsIGxlbmd0aCwgMCwgZW5kKTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8RGF0ZUNvbXBv
bmVudHM+IERhdGVDb21wb25lbnRzOjpmcm9tUGFyc2luZ0RhdGVUaW1lTG9jYWwoY29uc3QgU3Ry
aW5nVmlldyYgc291cmNlKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZSwg
W10gKGF1dG8mIGRhdGUsIGNvbnN0IGF1dG8qIHNyYywgYXV0byBsZW5ndGgsIGF1dG8mIGVuZCkg
ewotICAgICAgICByZXR1cm4gZGF0ZS5wYXJzZURhdGVUaW1lTG9jYWwoc3JjLCBsZW5ndGgsIDAs
IGVuZCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0
ZSwgYXV0byBjaGFyYWN0ZXJzLCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7CisgICAgICAgIHJl
dHVybiBkYXRlLnBhcnNlRGF0ZVRpbWVMb2NhbChjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIGVuZCk7
CiAgICAgfSk7CiB9CiAKIE9wdGlvbmFsPERhdGVDb21wb25lbnRzPiBEYXRlQ29tcG9uZW50czo6
ZnJvbVBhcnNpbmdEYXRlVGltZShjb25zdCBTdHJpbmdWaWV3JiBzb3VyY2UpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUZyb21TdHJpbmcoc291cmNlLCBbXSAoYXV0byYgZGF0ZSwgY29uc3QgYXV0byog
c3JjLCBhdXRvIGxlbmd0aCwgYXV0byYgZW5kKSB7Ci0gICAgICAgIHJldHVybiBkYXRlLnBhcnNl
RGF0ZVRpbWUoc3JjLCBsZW5ndGgsIDAsIGVuZCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21TdHJp
bmcoc291cmNlLCBbXSAoYXV0byYgZGF0ZSwgYXV0byBjaGFyYWN0ZXJzLCBhdXRvIGxlbmd0aCwg
YXV0byYgZW5kKSB7CisgICAgICAgIHJldHVybiBkYXRlLnBhcnNlRGF0ZVRpbWUoY2hhcmFjdGVy
cywgbGVuZ3RoLCAwLCBlbmQpOwogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzMz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgYm9vbCBTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6aGFzVmFsaQogdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFs
dWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKSB7Ci0gICAgICAgIG1f
dHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSk7CisgICAg
ICAgIG1fdHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSku
dmFsdWVPcihTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKTsKICAgICAg
ICAgaWYgKG1fdHlwZSA9PSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVgp
CiAgICAgICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9V
TktOT1dOOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDU0ICs3Nyw1
MiBAQCBmYWlsOgogICAgIHJlc3VsdC5jbGVhcigpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8VmVj
dG9yPFVuaXRCZXppZXI+PiBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nVmlldyYgcGFyc2Up
CitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiBwYXJzZUtleVNwbGluZXMoY29u
c3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewotICAgIGlmIChwYXJzZS5pc0VtcHR5KCkpCisgICAg
aWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHBhcnNlLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAg
Y29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHBhcnNlLmxlbmd0aCgpOwotCi0gICAgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKLQotICAgIFZlY3RvcjxVbml0QmV6aWVyPiByZXN1bHQ7
Ci0KLSAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgd2hpbGUgKGN1ciA8IGVuZCkg
ewotICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICBhdXRvIHBvc0EgPSBwYXJz
ZU51bWJlcihjdXIsIGVuZCk7Ci0gICAgICAgIGlmICghcG9zQSkKLSAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyhzdHJpbmcsIFsm
XShhdXRvIGN1ciwgYXV0byBlbmQpIC0+IE9wdGlvbmFsPFZlY3RvcjxVbml0QmV6aWVyPj4gewor
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCi0gICAgICAgIGF1dG8g
cG9zQiA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NCKQotICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgVmVjdG9yPFVuaXRCZXppZXI+IHJl
c3VsdDsKIAotICAgICAgICBhdXRvIHBvc0MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAg
ICAgIGlmICghcG9zQykKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKGN1ciA8IGVuZCkgewor
ICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8gcG9zQSA9
IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAgICAgICAgICAgIGlmICghcG9zQSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8gcG9zRCA9IHBhcnNl
TnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwotICAgICAg
ICBpZiAoIXBvc0QpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAg
ICAgYXV0byBwb3NCID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICAgICAgaWYgKCFw
b3NCKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKKyAgICAgICAgICAgIGF1dG8gcG9zQyA9IHBh
cnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAgICAgICAgICAgIGlmICghcG9zQykKKyAgICAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGlmIChjdXIgPCBlbmQgJiYgKmN1
ciA9PSAnOycpIHsKLSAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKLSAgICAgICAgICAg
IGN1cisrOwotICAgICAgICB9CisgICAgICAgICAgICBhdXRvIHBvc0QgPSBwYXJzZU51bWJlcihj
dXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlm
ICghcG9zRCkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CisgICAgICAgICAgICBza2lwT3B0aW9u
YWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoVW5pdEJlemll
ciB7ICpwb3NBLCAqcG9zQiwgKnBvc0MsICpwb3NEIH0pOwotICAgIH0KKyAgICAgICAgICAgIGlm
IChjdXIgPCBlbmQgJiYgKmN1ciA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICBkZWxpbVBhcnNl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY3VyKys7CisgICAgICAgICAgICB9CiAKLSAgICBp
ZiAoIShjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOworCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpwb3ND
LCAqcG9zRCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKGN1ciA9PSBlbmQgJiYgIWRl
bGltUGFyc2VkKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0pOwogfQogCiBib29sIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJ
KHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMiArODYsMjIgQEAgYm9vbCBTVkdGaXRUb1ZpZXdC
b3g6OnBhcnNlQXR0cmlidXRlKGNvbgogCiBPcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmll
d0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKQogewotICAgIGF1dG8g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gdmFsdWUudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0g
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAg
cmV0dXJuIHBhcnNlVmlld0JveChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVuZ3Ro
KCkpOworICAgIHJldHVybiBXVEY6OmdldENoYXJhY3RlcnModmFsdWUsIFsmXShhdXRvIHB0ciwg
YXV0byBlbmQpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlVmlld0JveEdlbmVyaWMocHRyLCBlbmQp
OworICAgIH0pOwogfQogCi1PcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFy
c2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0
ZSkKK09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29u
c3QgTENoYXIqJiBzdGFydCwgY29uc3QgTENoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKK3sKKyAg
ICByZXR1cm4gcGFyc2VWaWV3Qm94R2VuZXJpYyhzdGFydCwgZW5kLCB2YWxpZGF0ZSk7Cit9CisK
K09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3Qg
VUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKK3sKKyAgICBy
ZXR1cm4gcGFyc2VWaWV3Qm94R2VuZXJpYyhzdGFydCwgZW5kLCB2YWxpZGF0ZSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0
VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3hHZW5lcmljKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjLCBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGJvb2wgdmFsaWRhdGUpCiB7CiAgICAgU3RyaW5nVmll
dyBzdHIoYywgZW5kIC0gYyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1Zp
ZXdCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94
LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOSArNjYsMTIgQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgcmVzZXQoKTsKICAgICBib29sIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9tU3RyaW5nJik7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdC
b3goY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFy
c2VWaWV3Qm94KGNvbnN0IExDaGFyKiYgc3RhcnQsIGNvbnN0IExDaGFyKiBlbmQsIGJvb2wgdmFs
aWRhdGUgPSB0cnVlKTsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChjb25z
dCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7
CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9u
YWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3hHZW5lcmljKGNvbnN0IENoYXJhY3RlclR5cGUqJiBz
dGFydCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CisK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRSZWN0PiBtX3ZpZXdCb3g7CiAgICAgUmVmPFNWR0FuaW1hdGVk
UHJlc2VydmVBc3BlY3RSYXRpbz4gbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvOwogICAgIGJvb2wgbV9p
c1ZpZXdCb3hWYWxpZCB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVu
Z3RoTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0
LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDI2ICs1NywyNCBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBjbGVhckl0ZW1zKCk7CiAKLSAgICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMg
PSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29u
c3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNo
YXIqIGVuZCA9IHB0ciArIHZhbHVlLmxlbmd0aCgpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5k
KSB7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBwdHI7Ci0gICAgICAgICAgICB3
aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gJywnICYmICFpc1NWR1NwYWNlKCpwdHIpKQotICAg
ICAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgICAgaWYgKHB0ciA9PSBzdGFydCkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nKHN0YXJ0
LCBwdHIgLSBzdGFydCk7Ci0gICAgICAgICAgICBTVkdMZW5ndGhWYWx1ZSB2YWx1ZShtX2xlbmd0
aE1vZGUpOwotICAgICAgICAgICAgaWYgKHZhbHVlLnNldFZhbHVlQXNTdHJpbmcodmFsdWVTdHJp
bmcpLmhhc0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHZhbHVlLCBbJl0oYXV0byBwdHIsIGF1dG8gZW5kKSB7Cisg
ICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgICAgICAgICAgYXV0byogc3Rh
cnQgPSBwdHI7CisgICAgICAgICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICcs
JyAmJiAhaXNTVkdTcGFjZSgqcHRyKSkKKyAgICAgICAgICAgICAgICAgICAgcHRyKys7CisgICAg
ICAgICAgICAgICAgaWYgKHB0ciA9PSBzdGFydCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgICBhdXRvIHZhbHVlID0gU1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVj
dChtX2xlbmd0aE1vZGUsIFN0cmluZ1ZpZXcoc3RhcnQsIHB0ciAtIHN0YXJ0KSk7CisgICAgICAg
ICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgICAgICBhcHBlbmQoU1ZHTGVuZ3RoOjpjcmVhdGUoV1RGTW92ZSgqdmFsdWUpKSk7Cisg
ICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQp
OworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhcHBlbmQoU1ZHTGVuZ3RoOjpjcmVhdGUo
dmFsdWUpKTsKLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0
ciwgZW5kKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBwdHIgPT0gZW5kOworICAgICAg
ICAgICAgcmV0dXJuIHB0ciA9PSBlbmQ7CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIFN0cmlu
ZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMZW5ndGhWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xlbmd0aFZhbHVlLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTcgKzYxLDE3IEBAIHN0
YXRpYyBpbmxpbmUgY29uc3QgY2hhciogbGVuZ3RoVHlwZVRvU3QKICAgICByZXR1cm4gIiI7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgU1ZHTGVuZ3RoVHlwZSBwYXJzZUxlbmd0aFR5cGUoY29uc3QgVUNo
YXIqIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyBpbmxpbmUgU1ZHTGVuZ3RoVHlwZSBwYXJzZUxlbmd0aFR5cGUoY29uc3QgQ2hh
cmFjdGVyVHlwZSogcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiB7CiAgICAgaWYgKHB0
ciA9PSBlbmQpCiAgICAgICAgIHJldHVybiBTVkdMZW5ndGhUeXBlOjpOdW1iZXI7CiAKLSAgICBj
b25zdCBVQ2hhciBmaXJzdENoYXIgPSAqcHRyOworICAgIGF1dG8gZmlyc3RDaGFyID0gKnB0cjsK
IAogICAgIGlmICgrK3B0ciA9PSBlbmQpCiAgICAgICAgIHJldHVybiBmaXJzdENoYXIgPT0gJyUn
ID8gU1ZHTGVuZ3RoVHlwZTo6UGVyY2VudGFnZSA6IFNWR0xlbmd0aFR5cGU6OlVua25vd247CiAK
LSAgICBjb25zdCBVQ2hhciBzZWNvbmRDaGFyID0gKnB0cjsKKyAgICBhdXRvIHNlY29uZENoYXIg
PSAqcHRyOwogCiAgICAgaWYgKCsrcHRyICE9IGVuZCkKICAgICAgICAgcmV0dXJuIFNWR0xlbmd0
aFR5cGU6OlVua25vd247CkBAIC0xODAsNyArMTgwLDE1IEBAIFNWR0xlbmd0aFZhbHVlOjpTVkdM
ZW5ndGhWYWx1ZShjb25zdCBTVkcKICAgICBzZXRWYWx1ZShjb250ZXh0LCB2YWx1ZSk7CiB9CiAK
LVNWR0xlbmd0aFZhbHVlIFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBs
ZW5ndGhNb2RlLCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcsIFNWR1BhcnNpbmdFcnJvciYg
cGFyc2VFcnJvciwgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlIG5lZ2F0aXZlVmFsdWVzTW9k
ZSkKK09wdGlvbmFsPFNWR0xlbmd0aFZhbHVlPiBTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0KFNW
R0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSwgY29uc3QgU3RyaW5nVmlldyYgdmFsdWVBc1N0cmluZykK
K3sKKyAgICBTVkdMZW5ndGhWYWx1ZSBsZW5ndGggeyBsZW5ndGhNb2RlIH07CisgICAgaWYgKGxl
bmd0aC5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlQXNTdHJpbmcpLmhhc0V4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBsZW5ndGg7Cit9CisKK1NWR0xl
bmd0aFZhbHVlIFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5ndGhN
b2RlLCBjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFzU3RyaW5nLCBTVkdQYXJzaW5nRXJyb3ImIHBh
cnNlRXJyb3IsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSBuZWdhdGl2ZVZhbHVlc01vZGUp
CiB7CiAgICAgU1ZHTGVuZ3RoVmFsdWUgbGVuZ3RoKGxlbmd0aE1vZGUpOwogCkBAIC0yMzksNyAr
MjQ3LDcgQEAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBTVkdMZW5ndGhWYWx1ZTo6dAogICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGxlbmd0aC52YWx1ZUluU3BlY2lmaWVkVW5p
dHMoKSwgbGVuZ3RoVHlwZVRvUHJpbWl0aXZlVHlwZShsZW5ndGgubGVuZ3RoVHlwZSgpKSk7CiB9
CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZywgU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlKQorRXhj
ZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3Ry
aW5nVmlldyYgdmFsdWVBc1N0cmluZywgU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlKQogewogICAg
IG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gMDsKICAgICBtX2xlbmd0aE1vZGUgPSBsZW5ndGhN
b2RlOwpAQCAtMjg2LDI2ICsyOTQsMjQgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFs
dWU6OnNldFZhbAogICAgIHJldHVybiBzZXRWYWx1ZShjb250ZXh0LCB2YWx1ZSk7CiB9CiAKLUV4
Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQorRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVl
QXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewogICAgIGlmIChzdHJpbmcuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJh
Y3RlcnMgPSBTdHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hh
ciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgYXV0byBjb252ZXJ0ZWROdW1i
ZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lw
KTsKLSAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFN5bnRheEVycm9yIH07Ci0KLSAgICBhdXRvIGxlbmd0aFR5cGUgPSBwYXJzZUxlbmd0aFR5cGUo
cHRyLCBlbmQpOwotICAgIGlmIChsZW5ndGhUeXBlID09IFNWR0xlbmd0aFR5cGU6OlVua25vd24p
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OworICAgIHJldHVybiBX
VEY6OmdldENoYXJhY3RlcnMoc3RyaW5nLCBbJl0oYXV0byBwdHIsIGF1dG8gZW5kKSAtPiBFeGNl
cHRpb25Pcjx2b2lkPiB7CisgICAgICAgIGF1dG8gY29udmVydGVkTnVtYmVyID0gcGFyc2VOdW1i
ZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlm
ICghY29udmVydGVkTnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CisKKyAgICAgICAgYXV0byBsZW5ndGhUeXBlID0gcGFyc2VMZW5ndGhUeXBlKHB0
ciwgZW5kKTsKKyAgICAgICAgaWYgKGxlbmd0aFR5cGUgPT0gU1ZHTGVuZ3RoVHlwZTo6VW5rbm93
bikKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCi0gICAg
bV9sZW5ndGhUeXBlID0gbGVuZ3RoVHlwZTsKLSAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9
ICpjb252ZXJ0ZWROdW1iZXI7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICAgICAgbV9sZW5ndGhUeXBl
ID0gbGVuZ3RoVHlwZTsKKyAgICAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAqY29udmVy
dGVkTnVtYmVyOworICAgICAgICByZXR1cm4geyB9OworICAgIH0pOwogfQogCiBFeGNlcHRpb25P
cjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMoY29uc3QgU1ZH
TGVuZ3RoQ29udGV4dCYgY29udGV4dCwgU1ZHTGVuZ3RoVHlwZSBsZW5ndGhUeXBlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMyAr
NTgsMTQgQEAgZW51bSBjbGFzcyBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgOgogY2xhc3Mg
U1ZHTGVuZ3RoVmFsdWUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIFNWR0xlbmd0aFZhbHVlKFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlciwg
Y29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nID0gU3RyaW5nKCkpOworICAgIFNWR0xlbmd0aFZh
bHVlKFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlciwgY29uc3QgU3RyaW5nJiB2
YWx1ZUFzU3RyaW5nID0geyB9KTsKICAgICBTVkdMZW5ndGhWYWx1ZShmbG9hdCB2YWx1ZUluU3Bl
Y2lmaWVkVW5pdHMsIFNWR0xlbmd0aFR5cGUsIFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2Rl
OjpPdGhlcik7CiAgICAgU1ZHTGVuZ3RoVmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZs
b2F0LCBTVkdMZW5ndGhUeXBlID0gU1ZHTGVuZ3RoVHlwZTo6TnVtYmVyLCBTVkdMZW5ndGhNb2Rl
ID0gU1ZHTGVuZ3RoTW9kZTo6T3RoZXIpOwogCi0gICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGNv
bnN0cnVjdChTVkdMZW5ndGhNb2RlLCBjb25zdCBTdHJpbmcmLCBTVkdQYXJzaW5nRXJyb3ImLCBT
VkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgPSBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGU6
OkFsbG93KTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHTGVuZ3RoVmFsdWU+IGNvbnN0cnVjdChT
VkdMZW5ndGhNb2RlLCBjb25zdCBTdHJpbmdWaWV3Jik7CisgICAgc3RhdGljIFNWR0xlbmd0aFZh
bHVlIGNvbnN0cnVjdChTVkdMZW5ndGhNb2RlLCBjb25zdCBTdHJpbmdWaWV3JiwgU1ZHUGFyc2lu
Z0Vycm9yJiwgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlID0gU1ZHTGVuZ3RoTmVnYXRpdmVW
YWx1ZXNNb2RlOjpBbGxvdyk7CiAgICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGJsZW5kKGNvbnN0
IFNWR0xlbmd0aFZhbHVlJiBmcm9tLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgdG8sIGZsb2F0IHBy
b2dyZXNzKTsKLSAgICAKKwogICAgIHN0YXRpYyBTVkdMZW5ndGhWYWx1ZSBmcm9tQ1NTUHJpbWl0
aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKICAgICBzdGF0aWMgUmVmPENTU1By
aW1pdGl2ZVZhbHVlPiB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFNWR0xlbmd0aFZhbHVlJik7
CiAKQEAgLTg1LDggKzg2LDggQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZh
bHVlKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBmbG9hdCk7CiAgICAgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0VmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZsb2F0LCBTVkdMZW5ndGhUeXBl
LCBTVkdMZW5ndGhNb2RlKTsKIAotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlQXNTdHJp
bmcoY29uc3QgU3RyaW5nJik7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVBc1N0cmlu
Zyhjb25zdCBTdHJpbmcmLCBTVkdMZW5ndGhNb2RlKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lk
PiBzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmLCBTVkdMZW5ndGhNb2RlKTsKIAog
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKGNvbnN0IFNWR0xl
bmd0aENvbnRleHQmLCBTVkdMZW5ndGhUeXBlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR051bWJlckxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVt
YmVyTGlzdC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVt
YmVyTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyMCArNTQsMTggQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgY2xlYXJJdGVtcygpOwogCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAg
ICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKLQotICAgICAgICAvLyBUaGUg
c3BlYyAoc2VjdGlvbiA0LjEpIHN0cmFuZ2VseSBkb2Vzbid0IGFsbG93IGxlYWRpbmcgd2hpdGVz
cGFjZS4KLSAgICAgICAgLy8gV2UgbWlnaHQgY2hvb3NlIHRvIHZpb2xhdGUgdGhhdCBpbnRlbnRp
b25hbGx5LgotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgICAgICBhdXRvIG51
bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKLSAgICAgICAgICAgIGlmICghbnVtYmVyKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgYXBwZW5kKFNWR051bWJlcjo6Y3Jl
YXRlKCpudW1iZXIpKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0
ZXJzKHZhbHVlLCBbJl0oYXV0byBwdHIsIGF1dG8gZW5kKSB7CisgICAgICAgICAgICAvLyBUaGUg
c3BlYyAoc2VjdGlvbiA0LjEpIHN0cmFuZ2VseSBkb2Vzbid0IGFsbG93IGxlYWRpbmcgd2hpdGVz
cGFjZS4KKyAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0byB2aW9sYXRlIHRoYXQgaW50
ZW50aW9uYWxseS4KKyAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIG51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgYXBwZW5kKFNWR051bWJlcjo6Y3JlYXRlKCpudW1iZXIpKTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICByZXR1cm4gcHRyID09IGVuZDsKKyAgICAgICAgICAgIHJldHVybiBwdHIgPT0gZW5k
OworICAgICAgICB9KTsKICAgICB9CiAKICAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0
IG92ZXJyaWRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNw
cAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwxMyArMTQ5LDEyIEBAIE9wdGlvbmFsPGZs
b2F0PiBwYXJzZU51bWJlcihjb25zdCBVQ2hhcioKIAogT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVt
YmVyKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZywgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkK
IHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
OwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgYXV0
byByZXN1bHQgPSBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIHNraXApOwotICAgIGlmIChw
dHIgIT0gZW5kKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyhzdHJpbmcsIFtza2lwXShhdXRvIHB0
ciwgYXV0byBlbmQpIC0+IE9wdGlvbmFsPGZsb2F0PiB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
Z2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKKyAgICAgICAgaWYgKHB0ciAhPSBl
bmQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0pOwogfQogCiAvLyBvbmx5IHVzZWQgdG8gcGFyc2UgbGFyZ2VBcmNGbGFnIGFu
ZCBzd2VlcEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAiMSIKQEAgLTE5NSwyNSArMTk0LDIz
IEBAIE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZU4KICAgICBpZiAoc3Ry
aW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwot
ICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3Qg
VUNoYXIqIGVuZCA9IGN1ciArIHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGF1dG8geCA9IHBhcnNl
TnVtYmVyKGN1ciwgZW5kKTsKLSAgICBpZiAoIXgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyhzdHJpbmcsIFtdKGF1dG8gcHRyLCBh
dXRvIGVuZCkgLT4gT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHsKKyAgICAgICAg
YXV0byB4ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOworICAgICAgICBpZiAoIXgpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKGN1ciA9PSBlbmQpCi0gICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwgKngpOworICAgICAgICBpZiAocHRyID09IGVuZCkK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwgKngpOwogCi0gICAgYXV0byB5
ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7
Ci0gICAgaWYgKCF5KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRv
IHkgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lw
KTsKKyAgICAgICAgaWYgKCF5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIGlmIChjdXIgIT0gZW5kKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICBpZiAocHRyICE9IGVuZCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp5KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKCp4LCAqeSk7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNl
UG9pbnQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQpAQCAtMjIxLDgwICsyMTgsNzUgQEAgT3B0
aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdAogICAgIGlmIChzdHJpbmcuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byB1cGNvbnZl
cnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29u
c3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciog
ZW5kID0gY3VyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgaWYgKCFza2lwT3B0aW9uYWxTVkdT
cGFjZXMoY3VyLCBlbmQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVy
biBXVEY6OmdldENoYXJhY3RlcnMoc3RyaW5nLCBbXShhdXRvIHB0ciwgYXV0byBlbmQpIC0+IE9w
dGlvbmFsPEZsb2F0UG9pbnQ+IHsKKyAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMo
cHRyLCBlbmQpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8g
cG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VyLCBlbmQpOwotICAgIGlmICghcG9pbnQpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gcG9pbnQgPSBwYXJzZUZsb2F0
UG9pbnQocHRyLCBlbmQpOworICAgICAgICBpZiAoIXBvaW50KQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIC8vIERpc2FsbG93IGFueXRoaW5nIGV4Y2VwdCBzcGFjZXMg
YXQgdGhlIGVuZC4KLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwotICAgIAot
ICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgLy8gRGlzYWxsb3cgYW55dGhpbmcgZXhjZXB0IHNw
YWNlcyBhdCB0aGUgZW5kLgorICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQp
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHBvaW50OworICAgIH0pOwogfQogCiBPcHRpb25h
bDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCiB7Ci0gICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBj
b25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwotICAgIAotICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7Ci0gICAgCi0gICAgYXV0byB4ID0gcGFyc2VOdW1i
ZXIocHRyLCBlbmQpOwotICAgIGlmICgheCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7Ci0gICAgaWYgKCF5KQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gd2lkdGggPSBwYXJzZU51bWJlcihwdHIs
IGVuZCk7Ci0gICAgaWYgKCF3aWR0aCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGlj
eTo6RG9udFNraXApOwotICAgIGlmICghaGVpZ2h0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIHJldHVybiBXVEY6OmdldENoYXJhY3RlcnMoc3RyaW5nLCBbXShhdXRvIHB0ciwg
YXV0byBlbmQpIC0+IE9wdGlvbmFsPEZsb2F0UmVjdD4geworICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMocHRyLCBlbmQpOworICAgICAgICAKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1i
ZXIocHRyLCBlbmQpOworICAgICAgICBpZiAoIXgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7CisgICAgICAg
IGlmICgheSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8g
d2lkdGggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7CisgICAgICAgIGlmICghd2lkdGgpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIGhlaWdodCA9IHBhcnNl
TnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAg
ICBpZiAoIWhlaWdodCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0IHsgKngsICp5LCAqd2lkdGgsICpoZWlnaHQgfTsKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCB7ICp4LCAqeSwgKndpZHRoLCAqaGVpZ2h0IH07CisgICAgfSk7CiB9CiAK
IE9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nVmll
dyYgc3RyaW5nKQogewogICAgIC8vIEZJWE1FOiBQYXJzaW5nIGVycm9yIGRldGVjdGlvbiBpcyBt
aXNzaW5nLgogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwot
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7CisgICAgcmV0dXJuIFdURjo6Z2V0
Q2hhcmFjdGVycyhzdHJpbmcsIFtdKGF1dG8gcHRyLCBhdXRvIGVuZCkgLT4gT3B0aW9uYWw8SGFz
aFNldDxTdHJpbmc+PiB7CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7
CiAKLSAgICBIYXNoU2V0PFN0cmluZz4gdmFsdWVzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4g
dmFsdWVzOwogCi0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICAvLyBMZWFkaW5nIGFu
ZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRlIHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIg
c2VwYXJhdG9ycywgd2lsbCBiZSBpZ25vcmVkLgotICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRT
dGFydCA9IHB0cjsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJykKLSAg
ICAgICAgICAgICsrcHRyOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgICAg
ICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRlIHNwYWNlIGJl
Zm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdG9ycywgd2lsbCBiZSBpZ25vcmVkLgorICAgICAgICAgICAg
YXV0byogaW5wdXRTdGFydCA9IHB0cjsKKyAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYg
KnB0ciAhPSAnLCcpCisgICAgICAgICAgICAgICAgKytwdHI7CiAKLSAgICAgICAgaWYgKHB0ciA9
PSBpbnB1dFN0YXJ0KQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAocHRyID09
IGlucHV0U3RhcnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgLy8gd2FsayBi
YWNrd2FyZHMgZnJvbSB0aGUgOyB0byBpZ25vcmUgYW55IHdoaXRlc3BhY2UKLSAgICAgICAgY29u
c3QgVUNoYXIqIGlucHV0RW5kID0gcHRyIC0gMTsKLSAgICAgICAgd2hpbGUgKGlucHV0U3RhcnQg
PCBpbnB1dEVuZCAmJiBpc1NWR1NwYWNlKCppbnB1dEVuZCkpCi0gICAgICAgICAgICAtLWlucHV0
RW5kOworICAgICAgICAgICAgLy8gd2FsayBiYWNrd2FyZHMgZnJvbSB0aGUgOyB0byBpZ25vcmUg
YW55IHdoaXRlc3BhY2UKKyAgICAgICAgICAgIGF1dG8qIGlucHV0RW5kID0gcHRyIC0gMTsKKyAg
ICAgICAgICAgIHdoaWxlIChpbnB1dFN0YXJ0IDwgaW5wdXRFbmQgJiYgaXNTVkdTcGFjZSgqaW5w
dXRFbmQpKQorICAgICAgICAgICAgICAgIC0taW5wdXRFbmQ7CiAKLSAgICAgICAgdmFsdWVzLmFk
ZChTdHJpbmcoaW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1dFN0YXJ0ICsgMSkpOwotICAgICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCwgJywnKTsKLSAgICB9
CisgICAgICAgICAgICB2YWx1ZXMuYWRkKFN0cmluZyhpbnB1dFN0YXJ0LCBpbnB1dEVuZCAtIGlu
cHV0U3RhcnQgKyAxKSk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGlt
aXRlcihwdHIsIGVuZCwgJywnKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWVzOwor
ICAgIH0pOwogCi0gICAgcmV0dXJuIHZhbHVlczsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFVuaWNv
ZGVSYW5nZT4gcGFyc2VVbmljb2RlUmFuZ2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRp
b25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IENoYXJhY3RlclR5cGUq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3RoIDwgMiB8fCBj
aGFyYWN0ZXJzWzBdICE9ICdVJyB8fCBjaGFyYWN0ZXJzWzFdICE9ICcrJykKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKQEAgLTMwMyw4ICsyOTUsOCBAQCBzdGF0aWMgT3B0aW9uYWw8VW5p
Y29kZVJhbmdlPiBwYXJzZVVuaWNvCiAgICAgdW5zaWduZWQgc3RhcnRSYW5nZSA9IDA7CiAgICAg
dW5zaWduZWQgc3RhcnRMZW5ndGggPSAwOwogCi0gICAgY29uc3QgVUNoYXIqIHB0ciA9IGNoYXJh
Y3RlcnMgKyAyOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwor
ICAgIGF1dG8qIHB0ciA9IGNoYXJhY3RlcnMgKyAyOworICAgIGF1dG8qIGVuZCA9IGNoYXJhY3Rl
cnMgKyBsZW5ndGg7CiAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewogICAgICAgICBpZiAoIWlzQVND
SUlIZXhEaWdpdCgqcHRyKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzY5LDMwICszNjEsMjgg
QEAgT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZQogewogICAgIC8vIEZJ
WE1FOiBQYXJzaW5nIGVycm9yIGRldGVjdGlvbiBpcyBtaXNzaW5nLgogCi0gICAgYXV0byB1cGNv
bnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hh
ciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgVW5pY29kZVJhbmdlcyByYW5n
ZUxpc3Q7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHN0cmluZ0xpc3Q7CisgICAgcmV0dXJuIFdURjo6
Z2V0Q2hhcmFjdGVycyhzdHJpbmcsIFtdKGF1dG8gcHRyLCBhdXRvIGVuZCkgLT4gT3B0aW9uYWw8
c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8U3RyaW5nPj4+IHsKKyAgICAgICAgVW5p
Y29kZVJhbmdlcyByYW5nZUxpc3Q7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdMaXN0
OwogCi0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRT
dGFydCA9IHB0cjsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJykKLSAg
ICAgICAgICAgICsrcHRyOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgICAg
ICBhdXRvKiBpbnB1dFN0YXJ0ID0gcHRyOworICAgICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAm
JiAqcHRyICE9ICcsJykKKyAgICAgICAgICAgICAgICArK3B0cjsKIAotICAgICAgICBpZiAocHRy
ID09IGlucHV0U3RhcnQpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChwdHIg
PT0gaW5wdXRTdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAvLyBUcnkg
dG8gcGFyc2UgdW5pY29kZSByYW5nZSBmaXJzdAotICAgICAgICBpZiAoYXV0byByYW5nZSA9IHBh
cnNlVW5pY29kZVJhbmdlKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQpKQotICAgICAgICAg
ICAgcmFuZ2VMaXN0LmFwcGVuZChXVEZNb3ZlKCpyYW5nZSkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzdHJpbmdMaXN0LmFkZChTdHJpbmcoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFy
dCkpOwotICAgICAgICArK3B0cjsKLSAgICB9CisgICAgICAgICAgICAvLyBUcnkgdG8gcGFyc2Ug
dW5pY29kZSByYW5nZSBmaXJzdAorICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBwYXJzZVVu
aWNvZGVSYW5nZShpbnB1dFN0YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSkKKyAgICAgICAgICAgICAg
ICByYW5nZUxpc3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgc3RyaW5nTGlzdC5hZGQoU3RyaW5nKGlucHV0U3RhcnQsIHB0ciAtIGlu
cHV0U3RhcnQpKTsKKyAgICAgICAgICAgICsrcHRyOworICAgICAgICB9CiAKLSAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIocmFuZ2VMaXN0LCBzdHJpbmdMaXN0KTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKHJhbmdlTGlzdCwgc3RyaW5nTGlzdCk7CisgICAgfSk7CiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4g
Z2VuZXJpY1BhcnNlRmxvYXRQb2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29u
c3QgQ2hhcmFjdGVyVHlwZSogZW5kKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNl
clV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJV
dGlsaXRpZXMuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
cnNlclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAKICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdHlwZWRlZiBzdGQ6OnBhaXI8VUNoYXIzMiwgVUNoYXIz
Mj4gVW5pY29kZVJhbmdlOwogdHlwZWRlZiBWZWN0b3I8VW5pY29kZVJhbmdlPiBVbmljb2RlUmFu
Z2VzOwpAQCAtODQsMjcgKzgzLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGNvbnN0ZXgKICAgICByZXR1cm4gcHRyIDwgZW5kOwogfQogCi1jb25zdGV4cHIgYm9vbCBza2lw
U3RyaW5nKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhciog
bmFtZSwgaW50IGxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2ln
bmVkIGNoYXJhY3RlckNvdW50PiBjb25zdGV4cHIgYm9vbCBza2lwU3RyaW5nKGNvbnN0IENoYXJh
Y3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgQ2hhcmFjdGVy
VHlwZSgmc3RyKVtjaGFyYWN0ZXJDb3VudF0pCiB7Ci0gICAgaWYgKGVuZCAtIHB0ciA8IGxlbmd0
aCkKKyAgICBpZiAoZW5kIC0gcHRyIDwgY2hhcmFjdGVyQ291bnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAobWVtY21wKG5hbWUsIHB0ciwgc2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCkp
CisgICAgaWYgKG1lbWNtcChzdHIsIHB0ciwgc2l6ZW9mKENoYXJhY3RlclR5cGUpICogY2hhcmFj
dGVyQ291bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcHRyICs9IGxlbmd0aDsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+Ci1p
bmxpbmUgYm9vbCBza2lwU3RyaW5nKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5k
LCBjb25zdCBjaGFyICgmc3RyKVtjaGFyYWN0ZXJDb3VudF0pCi17Ci0gICAgaW50IGxlbmd0aCA9
IGNoYXJhY3RlckNvdW50IC0gMTsKLSAgICBpZiAoZW5kIC0gcHRyIDwgbGVuZ3RoKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewot
ICAgICAgICBpZiAocHRyW2ldICE9IHN0cltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcHRyICs9IGxlbmd0aDsKKyAgICBwdHIgKz0gY2hhcmFjdGVyQ291bnQ7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHJl
dmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsMzYgKzU0LDM0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGNs
ZWFySXRlbXMoKTsKIAotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmlu
Z1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25zdCBVQ2hh
ciogY3VyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgICAgICBjb25zdCBVQ2hhciogZW5k
ID0gY3VyICsgdmFsdWUubGVuZ3RoKCk7Ci0KLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGN1ciwgZW5kKTsKLQotICAgICAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAg
IHdoaWxlIChjdXIgPCBlbmQpIHsKLSAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0K
LSAgICAgICAgICAgIGF1dG8geFBvcyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAg
ICAgIGlmICgheFBvcykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIGF1dG8geVBvcyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGlj
eTo6RG9udFNraXApOwotICAgICAgICAgICAgaWYgKCF5UG9zKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQorICAgICAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHZhbHVlLCBb
Jl0oYXV0byBjdXIsIGF1dG8gZW5kKSB7CiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXMoY3VyLCBlbmQpOwogCi0gICAgICAgICAgICBpZiAoY3VyIDwgZW5kICYmICpjdXIgPT0gJywn
KSB7Ci0gICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGN1cisrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGN1ciwgZW5kKTsKKyAgICAgICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHdoaWxlIChjdXIgPCBlbmQpIHsKKyAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9
IGZhbHNlOworCisgICAgICAgICAgICAgICAgYXV0byB4UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBl
bmQpOworICAgICAgICAgICAgICAgIGlmICgheFBvcykKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIoY3Vy
LCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgICAgICAgICAg
aWYgKCF5UG9zKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOworCisgICAgICAgICAgICAg
ICAgaWYgKGN1ciA8IGVuZCAmJiAqY3VyID09ICcsJykgeworICAgICAgICAgICAgICAgICAgICBk
ZWxpbVBhcnNlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGN1cisrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQp
OwogCi0gICAgICAgICAgICBhcHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7ICp4UG9zLCAqeVBvcyB9
KSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICBhcHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7
ICp4UG9zLCAqeVBvcyB9KSk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuICFkZWxp
bVBhcnNlZDsKKyAgICAgICAgICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7CisgICAgICAgIH0pOwog
ICAgIH0KIAogICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUu
Y3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlCiB7CiB9CiAKLVNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCitTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZShjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSkKIHsKICAgICBwYXJzZSh2YWx1ZSk7
CiB9CkBAIC01OSwxOSArNTksMzAgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpbwogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlOjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWU6OnBhcnNlKGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKQogewotICAgIGF1dG8g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
OwotICAgIHBhcnNlSW50ZXJuYWwoYmVnaW4sIGJlZ2luICsgdmFsdWUubGVuZ3RoKCksIHRydWUp
OworICAgIHJldHVybiBXVEY6OmdldENoYXJhY3RlcnModmFsdWUsIFsmXShhdXRvIHB0ciwgYXV0
byBlbmQpIHsKKyAgICAgICAgcGFyc2VJbnRlcm5hbChwdHIsIGVuZCwgdHJ1ZSk7CisgICAgfSk7
CiB9CiAKLWJvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShjb25zdCBVQ2hh
ciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKK2Jvb2wgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShjb25zdCBMQ2hhciomIHB0ciwgY29uc3Qg
TENoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKIHsKLSAgICByZXR1cm4gcGFyc2VJbnRlcm5hbChj
dXJyUGFyYW0sIGVuZCwgdmFsaWRhdGUpOworICAgIHJldHVybiBwYXJzZUludGVybmFsKHB0ciwg
ZW5kLCB2YWxpZGF0ZSk7CiB9CiAKLWJvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpw
YXJzZUludGVybmFsKGNvbnN0IFVDaGFyKiYgY3VyclBhcmFtLCBjb25zdCBVQ2hhciogZW5kLCBi
b29sIHZhbGlkYXRlKQorYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlKGNv
bnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKQoreworICAg
IHJldHVybiBwYXJzZUludGVybmFsKHB0ciwgZW5kLCB2YWxpZGF0ZSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIGRlZmVyRGVz
Y1tdID0gIHsnZCcsICdlJywgJ2YnLCAnZScsICdyJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBub25lRGVzY1tdID0gIHsnbicsICdv
JywgJ24nLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHBy
IENoYXJhY3RlclR5cGUgbWVldERlc2NbXSA9ICB7J20nLCAnZScsICdlJywgJ3QnfTsKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHNsaWNl
RGVzY1tdID0gIHsncycsICdsJywgJ2knLCAnYycsICdlJ307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Citib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJ
bnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VyclBhcmFtLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBlbmQsIGJvb2wgdmFsaWRhdGUpCiB7CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5
cGUgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1JRDsKICAgICBTVkdNZWV0
T3JTbGljZVR5cGUgbWVldE9yU2xpY2UgPSBTVkdfTUVFVE9SU0xJQ0VfTUVFVDsKQEAgLTgzLDcg
Kzk0LDcgQEAgYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoKmN1cnJQYXJhbSA9PSAnZCcpIHsKLSAgICAgICAg
aWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAiZGVmZXIiKSkgeworICAgICAgICBpZiAo
IXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsIGRlZmVyRGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJzZSBleGNlcHQgZm9yICpkZWZl
ciogdmFsdWUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3
LDcgKzEwOCw3IEBAIGJvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZUkKICAg
ICB9CiAKICAgICBpZiAoKmN1cnJQYXJhbSA9PSAnbicpIHsKLSAgICAgICAgaWYgKCFza2lwU3Ry
aW5nKGN1cnJQYXJhbSwgZW5kLCAibm9uZSIpKSB7CisgICAgICAgIGlmICghc2tpcFN0cmluZyhj
dXJyUGFyYW0sIGVuZCwgbm9uZURlc2M8Q2hhcmFjdGVyVHlwZT4pKSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIlNraXBwZWQgdG8gcGFyc2UgZXhjZXB0IGZvciAqbm9uZSogdmFsdWUuIik7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTE1NiwxMyArMTY3LDEzIEBA
IGJvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZUkKIAogICAgIGlmIChjdXJy
UGFyYW0gPCBlbmQpIHsKICAgICAgICAgaWYgKCpjdXJyUGFyYW0gPT0gJ20nKSB7Ci0gICAgICAg
ICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJtZWV0IikpIHsKKyAgICAgICAg
ICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgbWVldERlc2M8Q2hhcmFjdGVyVHlw
ZT4pKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJTa2lwcGVkIHRvIHBhcnNlIGV4Y2Vw
dCBmb3IgKm1lZXQqIG9yICpzbGljZSogdmFsdWUuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGN1cnJQYXJhbSwgZW5kKTsKICAgICAgICAgfSBlbHNlIGlmICgqY3VyclBhcmFtID09ICdzJykg
ewotICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAic2xpY2UiKSkg
eworICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCBzbGljZURlc2M8
Q2hhcmFjdGVyVHlwZT4pKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJTa2lwcGVkIHRv
IHBhcnNlIGV4Y2VwdCBmb3IgKm1lZXQqIG9yICpzbGljZSogdmFsdWUuIik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtMzI4LDcgKzMzOSw3IEBAIEFm
ZmluZVRyYW5zZm9ybSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmEKIAogU3RyaW5nIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZTo6dmFsdWVBc1N0cmluZygpIGNvbnN0CiB7Ci0gICAgU3RyaW5n
IGFsaWduVHlwZTsKKyAgICBjb25zdCBjaGFyKiBhbGlnblR5cGU7CiAKICAgICBzd2l0Y2ggKG1f
YWxpZ24pIHsKICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkU6CkBAIC0zNzEs
OSArMzgyLDkgQEAgU3RyaW5nIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6dmFsdQogICAg
IGNhc2UgU1ZHX01FRVRPUlNMSUNFX1VOS05PV046CiAgICAgICAgIHJldHVybiBhbGlnblR5cGU7
CiAgICAgY2FzZSBTVkdfTUVFVE9SU0xJQ0VfTUVFVDoKLSAgICAgICAgcmV0dXJuIGFsaWduVHlw
ZSArICIgbWVldCI7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGFsaWduVHlwZSwgIiBtZWV0
Iik7CiAgICAgY2FzZSBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0U6Ci0gICAgICAgIHJldHVybiBhbGln
blR5cGUgKyAiIHNsaWNlIjsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYWxpZ25UeXBlLCAi
IHNsaWNlIik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUoKTsKLSAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3Ry
aW5nJik7CisgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0cmluZ1ZpZXcm
KTsKIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEFsaWduKHVuc2lnbmVkIHNob3J0KTsKICAg
ICB1bnNpZ25lZCBzaG9ydCBhbGlnbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ247IH0KQEAgLTY0
LDcgKzY0LDggQEAgcHVibGljOgogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShmbG9hdCBs
b2dpY2FsWCwgZmxvYXQgbG9naWNhbFksIGZsb2F0IGxvZ2ljYWxXaWR0aCwgZmxvYXQgbG9naWNh
bEhlaWdodCwgZmxvYXQgcGh5c2ljYWxXaWR0aCwgZmxvYXQgcGh5c2ljYWxIZWlnaHQpIGNvbnN0
OwogCi0gICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHBhcnNlKGNvbnN0
IFN0cmluZ1ZpZXcmKTsKKyAgICBib29sIHBhcnNlKGNvbnN0IExDaGFyKiYgY3VyclBhcmFtLCBj
b25zdCBMQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKTsKICAgICBib29sIHBhcnNlKGNvbnN0IFVD
aGFyKiYgY3VyclBhcmFtLCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKTsKIAogICAg
IFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CkBAIC03Myw3ICs3NCw4IEBAIHByaXZhdGU6
CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGUgbV9hbGlnbjsKICAgICBTVkdNZWV0T3JT
bGljZVR5cGUgbV9tZWV0T3JTbGljZTsKIAotICAgIGJvb2wgcGFyc2VJbnRlcm5hbChjb25zdCBV
Q2hhciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSk7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBib29sIHBhcnNlSW50ZXJuYWwo
Y29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBib29s
IHZhbGlkYXRlKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1N0cmluZ0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5n
TGlzdC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5n
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwyMCArNTUsMTkgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgY2xlYXJJdGVtcygpOwogCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzID0gU3RyaW5nVmlldyhkYXRhKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAg
Y29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3Qg
VUNoYXIqIGVuZCA9IHB0ciArIGRhdGEubGVuZ3RoKCk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBl
bmQpIHsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IHB0cjsKLSAgICAgICAgICAg
IHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSBkZWxpbWl0ZXIgJiYgIWlzU1ZHU3BhY2UoKnB0
cikpCi0gICAgICAgICAgICAgICAgcHRyKys7Ci0gICAgICAgICAgICBpZiAocHRyID09IHN0YXJ0
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoU3Ry
aW5nKHN0YXJ0LCBwdHIgLSBzdGFydCkpOwotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQsIGRlbGltaXRlcik7Ci0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyhkYXRhLCBbJl0oYXV0byBwdHIsIGF1dG8gZW5kKSB7
CisgICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgICAgICAgICAgYXV0byog
c3RhcnQgPSBwdHI7CisgICAgICAgICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9
IGRlbGltaXRlciAmJiAhaXNTVkdTcGFjZSgqcHRyKSkKKyAgICAgICAgICAgICAgICAgICAgcHRy
Kys7CisgICAgICAgICAgICAgICAgaWYgKHB0ciA9PSBzdGFydCkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5nKHN0YXJ0LCBw
dHIgLSBzdGFydCkpOworICAgICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVs
aW1pdGVyKHB0ciwgZW5kLCBkZWxpbWl0ZXIpOworICAgICAgICAgICAgfQogCi0gICAgICAgIHJl
dHVybiBwdHIgPT0gZW5kOworICAgICAgICAgICAgcmV0dXJuIHB0ciA9PSBlbmQ7CisgICAgICAg
IH0pOwogICAgIH0KIAogICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkocmV2aXNpb24gMjYzMzM1
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtODIsMTAgKzgyLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGNsZWFySXRlbXMo
KTsKIAotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFs
dWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQg
PSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGlmICghcGFyc2Uoc3RhcnQsIHN0YXJ0
ICsgdmFsdWUubGVuZ3RoKCkpKQotICAgICAgICAgICAgY2xlYXJJdGVtcygpOworICAgICAgICBy
ZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHZhbHVlLCBbJl0oYXV0byBwdHIsIGF1dG8gZW5kKSB7
CisgICAgICAgICAgICBpZiAoIXBhcnNlKHB0ciwgZW5kKSkKKyAgICAgICAgICAgICAgICBjbGVh
ckl0ZW1zKCk7CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIEFmZmluZVRyYW5zZm9ybSBjb25j
YXRlbmF0ZSgpIGNvbnN0CkBAIC0xMDksMzAgKzEwOSwzMSBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotICAgIGJvb2wgcGFyc2UoY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIq
IGVuZCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorICAgIGJvb2wgcGFy
c2UoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQog
ICAgIHsKICAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICB3aGlsZSAo
c3RhcnQgPCBlbmQpIHsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewogICAgICAgICAgICAg
ZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhz
dGFydCwgZW5kKTsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gdHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6
OnBhcnNlQW5kU2tpcFR5cGUoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoIXR5cGUpCisg
ICAgICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9ybVR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpw
YXJzZVRyYW5zZm9ybVR5cGUocHRyLCBlbmQpOworICAgICAgICAgICAgaWYgKCFwYXJzZWRUcmFu
c2Zvcm1UeXBlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAg
YXV0byBwYXJzZWRUcmFuc2Zvcm1WYWx1ZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtVmFsdWUoKnR5cGUsIHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgYXV0byBwYXJzZWRUcmFu
c2Zvcm1WYWx1ZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoKnBhcnNl
ZFRyYW5zZm9ybVR5cGUsIHB0ciwgZW5kKTsKICAgICAgICAgICAgIGlmICghcGFyc2VkVHJhbnNm
b3JtVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBh
cHBlbmQoU1ZHVHJhbnNmb3JtOjpjcmVhdGUoKnBhcnNlZFRyYW5zZm9ybVZhbHVlKSk7CiAKLSAg
ICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhzdGFydCwgZW5kKTsKLSAgICAgICAgICAg
IGlmIChzdGFydCA8IGVuZCAmJiAqc3RhcnQgPT0gJywnKSB7CisgICAgICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOworICAgICAgICAgICAgaWYgKHB0ciA8IGVuZCAmJiAq
cHRyID09ICcsJykgewogICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICArK3N0YXJ0OworICAgICAgICAgICAgICAgICsrcHRyOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7CisgICAg
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RyYW5zZm9ybWFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSwxMCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJh
bUxpc3QoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0KiB2YWx1ZXMs
IGludCByZXF1aXJlZCwgaW50IG9wdGlvbmFsKQorLy8gVGhpcyBkZXN0cnVjdG9yIGlzIG5lZWRl
ZCBpbiBvcmRlciB0byBsaW5rIGNvcnJlY3RseSB3aXRoIEludGVsIElDQy4KK1NWR1RyYW5zZm9y
bWFibGU6On5TVkdUcmFuc2Zvcm1hYmxlKCkgPSBkZWZhdWx0OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW50IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KGNvbnN0
IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgZmxvYXQqIHZh
bHVlcywgaW50IHJlcXVpcmVkLCBpbnQgb3B0aW9uYWwpCiB7CiAgICAgaW50IG9wdGlvbmFsUGFy
YW1zID0gMCwgcmVxdWlyZWRQYXJhbXMgPSAwOwogICAgIApAQCAtOTIsMTMgKzk1LDEwIEBAIHN0
YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoY29uc3QKIH0KIAogLy8gVGhlc2Ugc2hv
dWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIGVudW0gU1ZHVHJhbnNmb3JtVHlwZQotc3RhdGljIGNv
bnN0IGludCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbXSA9ICB7MCwgNiwgMSwgMSwgMSwgMSwgMX07
Ci1zdGF0aWMgY29uc3QgaW50IG9wdGlvbmFsVmFsdWVzRm9yVHlwZVtdID0gIHswLCAwLCAxLCAx
LCAyLCAwLCAwfTsKK2NvbnN0ZXhwciBpbnQgcmVxdWlyZWRWYWx1ZXNGb3JUeXBlW10gPSAgezAs
IDYsIDEsIDEsIDEsIDEsIDF9OworY29uc3RleHByIGludCBvcHRpb25hbFZhbHVlc0ZvclR5cGVb
XSA9ICB7MCwgMCwgMSwgMSwgMiwgMCwgMH07CiAKLS8vIFRoaXMgZGVzdHJ1Y3RvciBpcyBuZWVk
ZWQgaW4gb3JkZXIgdG8gbGluayBjb3JyZWN0bHkgd2l0aCBJbnRlbCBJQ0MuCi1TVkdUcmFuc2Zv
cm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpID0gZGVmYXVsdDsKLQotT3B0aW9uYWw8U1ZHVHJh
bnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNv
bnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMg
T3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWVHZW5lcmljKFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIGNvbnN0IENoYXJhY3RlclR5
cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAgICBpZiAodHlwZSA9PSBT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwpAQCAtMTQ1LDQyICsxNDUsNjMgQEAgT3B0aW9uYWw8U1ZHVHJhbnNmb3Jt
VmFsdWU+IFNWR1RyYW5zZm9ybQogICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKLXN0YXRpYyBj
b25zdCBVQ2hhciBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9Owotc3Rh
dGljIGNvbnN0IFVDaGFyIHNrZXdZRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycsICdZJ307
Ci1zdGF0aWMgY29uc3QgVUNoYXIgc2NhbGVEZXNjW10gPSAgeydzJywgJ2MnLCAnYScsICdsJywg
J2UnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB0cmFuc2xhdGVEZXNjW10gPSAgeyd0JywgJ3InLCAn
YScsICduJywgJ3MnLCAnbCcsICdhJywgJ3QnLCAnZSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHJv
dGF0ZURlc2NbXSA9ICB7J3InLCAnbycsICd0JywgJ2EnLCAndCcsICdlJ307Ci1zdGF0aWMgY29u
c3QgVUNoYXIgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3QnLCAncicsICdpJywgJ3gnfTsK
K09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5z
Zm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIGNvbnN0
IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kKQoreworICAgIHJldHVybiBwYXJzZVRyYW5z
Zm9ybVZhbHVlR2VuZXJpYyh0eXBlLCBwdHIsIGVuZCk7Cit9CiAKLU9wdGlvbmFsPFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNr
aXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCkKK09w
dGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9y
bVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIGNvbnN0IFVD
aGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kKQogewotICAgIGlmIChjdXJyVHJhbnNmb3JtID49
IGVuZCkKKyAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1WYWx1ZUdlbmVyaWModHlwZSwgcHRyLCBl
bmQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hh
cmFjdGVyVHlwZSBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9OwordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgc2tl
d1lEZXNjW10gPSAgeydzJywgJ2snLCAnZScsICd3JywgJ1knfTsKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHNjYWxlRGVzY1tdID0gIHsn
cycsICdjJywgJ2EnLCAnbCcsICdlJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSB0cmFuc2xhdGVEZXNjW10gPSAgeyd0JywgJ3InLCAn
YScsICduJywgJ3MnLCAnbCcsICdhJywgJ3QnLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgcm90YXRlRGVzY1tdID0gIHsncics
ICdvJywgJ3QnLCAnYScsICd0JywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG1hdHJpeERlc2NbXSA9ICB7J20nLCAnYScsICd0
JywgJ3InLCAnaScsICd4J307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0
YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VU
cmFuc2Zvcm1UeXBlR2VuZXJpYyhjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFy
YWN0ZXJUeXBlKiBlbmQpCit7CisgICAgaWYgKHB0ciA+PSBlbmQpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoKmN1cnJUcmFuc2Zvcm0gPT0gJ3MnKSB7Ci0gICAgICAg
IGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1hEZXNjLCBXVEZfQVJSQVlf
TEVOR1RIKHNrZXdYRGVzYykpKQorICAgIGlmICgqcHRyID09ICdzJykgeworICAgICAgICBpZiAo
c2tpcFN0cmluZyhwdHIsIGVuZCwgc2tld1hEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAg
ICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TS0VXWDsKLSAgICAg
ICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHNrZXdZRGVzYywgV1RG
X0FSUkFZX0xFTkdUSChza2V3WURlc2MpKSkKKyAgICAgICAgaWYgKHNraXBTdHJpbmcocHRyLCBl
bmQsIHNrZXdZRGVzYzxDaGFyYWN0ZXJUeXBlPikpCiAgICAgICAgICAgICByZXR1cm4gU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0tFV1k7Ci0gICAgICAgIGVsc2UgaWYgKHNraXBT
dHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBzY2FsZURlc2MsIFdURl9BUlJBWV9MRU5HVEgoc2Nh
bGVEZXNjKSkpCisgICAgICAgIGlmIChza2lwU3RyaW5nKHB0ciwgZW5kLCBzY2FsZURlc2M8Q2hh
cmFjdGVyVHlwZT4pKQogICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdf
VFJBTlNGT1JNX1NDQUxFOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIH0gZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHRy
YW5zbGF0ZURlc2MsIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlRGVzYykpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChza2lwU3RyaW5nKHB0ciwgZW5k
LCB0cmFuc2xhdGVEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURTsKLSAgICBlbHNlIGlmIChza2lwU3Ry
aW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgcm90YXRlRGVzYywgV1RGX0FSUkFZX0xFTkdUSChyb3Rh
dGVEZXNjKSkpCisgICAgaWYgKHNraXBTdHJpbmcocHRyLCBlbmQsIHJvdGF0ZURlc2M8Q2hhcmFj
dGVyVHlwZT4pKQogICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZP
Uk1fUk9UQVRFOwotICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBt
YXRyaXhEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKG1hdHJpeERlc2MpKSkKKyAgICBpZiAoc2tpcFN0
cmluZyhwdHIsIGVuZCwgbWF0cml4RGVzYzxDaGFyYWN0ZXJUeXBlPikpCiAgICAgICAgIHJldHVy
biBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg7CiAKICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQogCi1TVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBT
VkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlU3Ry
aW5nKQorT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IFNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcp
Cit7CisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyhzdHJpbmcsIFtdKGF1dG8gcHRyLCBh
dXRvIGVuZCkgeworICAgICAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlKHB0ciwgZW5kKTsK
KyAgICB9KTsKK30KKworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5
cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBMQ2hhciomIHB0
ciwgY29uc3QgTENoYXIqIGVuZCkKK3sKKyAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlR2Vu
ZXJpYyhwdHIsIGVuZCk7Cit9CisKK09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFu
c2Zvcm1UeXBlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgVUNo
YXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJh
Y3RlcnMgPSBTdHJpbmdWaWV3KHR5cGVTdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwot
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAg
IHJldHVybiBwYXJzZUFuZFNraXBUeXBlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB0eXBlU3Ry
aW5nLmxlbmd0aCgpKS52YWx1ZU9yKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VO
S05PV04pOworICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVR5cGVHZW5lcmljKHB0ciwgZW5kKTsK
IH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCShyZXZpc2lv
biAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRlICJTVkdMb2NhdGFibGUuaCIK
ICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1WYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCkBAIC0zMiw5ICszMSwxMiBAQCBj
bGFzcyBTVkdUcmFuc2Zvcm1hYmxlIDogcHVibGljIFNWR0xvY2F0CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+U1ZHVHJhbnNmb3JtYWJsZSgpOwogCisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5z
Zm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFu
c2Zvcm1UeXBlLCBjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCk7CiAgICAgc3Rh
dGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1Ry
YW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBjb25zdCBVQ2hhciomIHB0ciwgY29uc3Qg
VUNoYXIqIGVuZCk7Ci0gICAgc3RhdGljIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1U
eXBlIHBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgT3B0aW9u
YWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IHBhcnNlQW5kU2tpcFR5cGUo
Y29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kKTsKKworICAgIHN0
YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VU
cmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IHBhcnNlVHJhbnNmb3JtVHlwZShjb25z
dCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCk7CisgICAgc3RhdGljIE9wdGlvbmFsPFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZVRyYW5zZm9ybVR5cGUoY29u
c3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpOwogCiAgICAgQWZmaW5lVHJhbnNmb3Jt
IGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsgfQogICAgIHZp
cnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdCA9IDA7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDk5ICs2MCwxMDIgQEAgdm9pZCBTVkdWaWV3U3BlYzo6cmVzZXQoKQogICAgIFNWR1pvb21BbmRQ
YW46OnJlc2V0KCk7CiB9CiAKLXN0YXRpYyBjb25zdCBVQ2hhciBzdmdWaWV3U3BlY1tdID0geydz
JywgJ3YnLCAnZycsICdWJywgJ2knLCAnZScsICd3J307Ci1zdGF0aWMgY29uc3QgVUNoYXIgdmll
d0JveFNwZWNbXSA9IHsndicsICdpJywgJ2UnLCAndycsICdCJywgJ28nLCAneCd9Owotc3RhdGlj
IGNvbnN0IFVDaGFyIHByZXNlcnZlQXNwZWN0UmF0aW9TcGVjW10gPSB7J3AnLCAncicsICdlJywg
J3MnLCAnZScsICdyJywgJ3YnLCAnZScsICdBJywgJ3MnLCAncCcsICdlJywgJ2MnLCAndCcsICdS
JywgJ2EnLCAndCcsICdpJywgJ28nfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB0cmFuc2Zvcm1TcGVj
W10gPSB7J3QnLCAncicsICdhJywgJ24nLCAncycsICdmJywgJ28nLCAncicsICdtJ307Ci1zdGF0
aWMgY29uc3QgVUNoYXIgem9vbUFuZFBhblNwZWNbXSA9IHsneicsICdvJywgJ28nLCAnbScsICdB
JywgJ24nLCAnZCcsICdQJywgJ2EnLCAnbid9Owotc3RhdGljIGNvbnN0IFVDaGFyIHZpZXdUYXJn
ZXRTcGVjW10gPSAgeyd2JywgJ2knLCAnZScsICd3JywgJ1QnLCAnYScsICdyJywgJ2cnLCAnZScs
ICd0J307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFj
dGVyVHlwZSBzdmdWaWV3U3BlY1tdID0geydzJywgJ3YnLCAnZycsICdWJywgJ2knLCAnZScsICd3
J307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVy
VHlwZSB2aWV3Qm94U3BlY1tdID0geyd2JywgJ2knLCAnZScsICd3JywgJ0InLCAnbycsICd4J307
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlw
ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlY1tdID0geydwJywgJ3InLCAnZScsICdzJywgJ2UnLCAn
cicsICd2JywgJ2UnLCAnQScsICdzJywgJ3AnLCAnZScsICdjJywgJ3QnLCAnUicsICdhJywgJ3Qn
LCAnaScsICdvJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIg
Q2hhcmFjdGVyVHlwZSB0cmFuc2Zvcm1TcGVjW10gPSB7J3QnLCAncicsICdhJywgJ24nLCAncycs
ICdmJywgJ28nLCAncicsICdtJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBj
b25zdGV4cHIgQ2hhcmFjdGVyVHlwZSB6b29tQW5kUGFuU3BlY1tdID0geyd6JywgJ28nLCAnbycs
ICdtJywgJ0EnLCAnbicsICdkJywgJ1AnLCAnYScsICduJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSB2aWV3VGFyZ2V0U3BlY1tdID0g
IHsndicsICdpJywgJ2UnLCAndycsICdUJywgJ2EnLCAncicsICdnJywgJ2UnLCAndCd9OwogCi1i
b29sIFNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZyYgdmlld1NwZWMpCiti
b29sIFNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykK
IHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmlld1NwZWMp
LnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBjdXJyVmlld1NwZWMg
PSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1cnJWaWV3
U3BlYyArIHZpZXdTcGVjLmxlbmd0aCgpOwotCi0gICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQg
fHwgIW1fY29udGV4dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
c2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgc3ZnVmlld1NwZWMsIFdURl9BUlJBWV9MRU5H
VEgoc3ZnVmlld1NwZWMpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGN1cnJW
aWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBjdXJyVmlld1NwZWMrKzsKLQotICAgIHdoaWxlIChjdXJyVmlld1NwZWMgPCBl
bmQgJiYgKmN1cnJWaWV3U3BlYyAhPSAnKScpIHsKLSAgICAgICAgaWYgKCpjdXJyVmlld1NwZWMg
PT0gJ3YnKSB7Ci0gICAgICAgICAgICBpZiAoc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwg
dmlld0JveFNwZWMsIFdURl9BUlJBWV9MRU5HVEgodmlld0JveFNwZWMpKSkgewotICAgICAgICAg
ICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgY3VyclZp
ZXdTcGVjKys7Ci0gICAgICAgICAgICAgICAgYXV0byB2aWV3Qm94ID0gU1ZHRml0VG9WaWV3Qm94
OjpwYXJzZVZpZXdCb3goY3VyclZpZXdTcGVjLCBlbmQsIGZhbHNlKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIXZpZXdCb3gpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICBzZXRWaWV3Qm94KFdURk1vdmUoKnZpZXdCb3gpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcpJykKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGN1cnJWaWV3U3Bl
YysrOwotICAgICAgICAgICAgfSBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5k
LCB2aWV3VGFyZ2V0U3BlYywgV1RGX0FSUkFZX0xFTkdUSCh2aWV3VGFyZ2V0U3BlYykpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAh
PSAnKCcpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICBjb25zdCBVQ2hhciogdmlld1RhcmdldFN0YXJ0ID0gKytjdXJyVmlld1NwZWM7Ci0gICAgICAg
ICAgICAgICAgd2hpbGUgKGN1cnJWaWV3U3BlYyA8IGVuZCAmJiAqY3VyclZpZXdTcGVjICE9ICcp
JykKLSAgICAgICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICAgICAg
aWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQpCisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyhz
dHJpbmcsIFsmXShhdXRvIHB0ciwgYXV0byBlbmQpIC0+IGJvb2wgeworICAgICAgICB1c2luZyBD
aGFyYWN0ZXJUeXBlID0gc3RkOjpyZW1vdmVfcG9pbnRlcl90PGRlY2x0eXBlKHB0cik+OworCisg
ICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICFtX2NvbnRleHRFbGVtZW50KQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghc2tpcFN0cmluZyhwdHIsIGVuZCwgc3ZnVmll
d1NwZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmIChwdHIgPj0gZW5kIHx8ICpwdHIgIT0gJygnKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHB0cisrOworCisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0
ciAhPSAnKScpIHsKKyAgICAgICAgICAgIGlmICgqcHRyID09ICd2JykgeworICAgICAgICAgICAg
ICAgIGlmIChza2lwU3RyaW5nKHB0ciwgZW5kLCB2aWV3Qm94U3BlYzxDaGFyYWN0ZXJUeXBlPikp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgKnB0ciAhPSAnKCcpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IHB0cisrOworICAgICAgICAgICAgICAgICAgICBhdXRvIHZpZXdCb3ggPSBTVkdGaXRUb1ZpZXdC
b3g6OnBhcnNlVmlld0JveChwdHIsIGVuZCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXZpZXdCb3gpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIHNldFZpZXdCb3goV1RGTW92ZSgqdmlld0JveCkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAocHRyID49IGVuZCB8fCAqcHRyICE9ICcpJykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcHRyKys7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChza2lwU3RyaW5nKHB0ciwgZW5kLCB2aWV3VGFyZ2V0U3Bl
YzxDaGFyYWN0ZXJUeXBlPikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQg
fHwgKnB0ciAhPSAnKCcpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8qIHZpZXdUYXJnZXRTdGFydCA9ICsrcHRyOworICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gJyknKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChwdHIgPj0gZW5k
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBtX3ZpZXdUYXJnZXRTdHJpbmcgPSBTdHJpbmcodmlld1RhcmdldFN0YXJ0LCBwdHIgLSB2
aWV3VGFyZ2V0U3RhcnQpOworICAgICAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfSBlbHNlIGlmICgqcHRyID09ICd6JykgeworICAgICAgICAgICAgICAgIGlmICghc2tpcFN0
cmluZyhwdHIsIGVuZCwgem9vbUFuZFBhblNwZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQg
fHwgKnB0ciAhPSAnKCcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgICAgICBhdXRvIHpvb21BbmRQYW4gPSBTVkda
b29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4ocHRyLCBlbmQpOworICAgICAgICAgICAgICAgIGlm
ICghem9vbUFuZFBhbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIHNldFpvb21BbmRQYW4oKnpvb21BbmRQYW4pOworICAgICAgICAgICAgICAgIGlm
IChwdHIgPj0gZW5kIHx8ICpwdHIgIT0gJyknKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpw
dHIgPT0gJ3AnKSB7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKHB0ciwgZW5kLCBw
cmVzZXJ2ZUFzcGVjdFJhdGlvU3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAocHRyID49IGVuZCB8fCAqcHRy
ICE9ICcoJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIHB0cisrOworICAgICAgICAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBw
cmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBc3BlY3RS
YXRpby5wYXJzZShwdHIsIGVuZCwgZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgc2V0UHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFz
cGVjdFJhdGlvKTsKKyAgICAgICAgICAgICAgICBpZiAocHRyID49IGVuZCB8fCAqcHRyICE9ICcp
JykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIG1f
dmlld1RhcmdldFN0cmluZyA9IFN0cmluZyh2aWV3VGFyZ2V0U3RhcnQsIGN1cnJWaWV3U3BlYyAt
IHZpZXdUYXJnZXRTdGFydCk7Ci0gICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7CisgICAg
ICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpwdHIgPT0gJ3QnKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKHB0ciwgZW5kLCB0cmFuc2Zvcm1TcGVj
PENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICpwdHIgIT0gJygnKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAg
ICAgICAgbV90cmFuc2Zvcm0tPnBhcnNlKHB0ciwgZW5kKTsKKyAgICAgICAgICAgICAgICBpZiAo
cHRyID49IGVuZCB8fCAqcHRyICE9ICcpJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIHB0cisrOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKCpjdXJyVmlld1NwZWMg
PT0gJ3onKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQs
IHpvb21BbmRQYW5TcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHpvb21BbmRQYW5TcGVjKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+
PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICBpZiAoIVNWR1pv
b21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbihjdXJyVmlld1NwZWMsIGVuZCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQg
fHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJWaWV3
U3BlYyA9PSAncCcpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMs
IGVuZCwgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWMsIFdURl9BUlJBWV9MRU5HVEgocHJlc2VydmVB
c3BlY3RSYXRpb1NwZWMpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsK
LSAgICAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2ZUFzcGVjdFJh
dGlvOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKGN1cnJWaWV3
U3BlYywgZW5kLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgc2V0UHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKLSAgICAg
ICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysr
OwotICAgICAgICB9IGVsc2UgaWYgKCpjdXJyVmlld1NwZWMgPT0gJ3QnKSB7Ci0gICAgICAgICAg
ICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHRyYW5zZm9ybVNwZWMsIFdURl9B
UlJBWV9MRU5HVEgodHJhbnNmb3JtU3BlYykpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMg
IT0gJygnKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJW
aWV3U3BlYysrOwotICAgICAgICAgICAgbV90cmFuc2Zvcm0tPnBhcnNlKGN1cnJWaWV3U3BlYywg
ZW5kKTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1Nw
ZWMgIT0gJyknKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1
cnJWaWV3U3BlYysrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICBpZiAoY3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJyVmlld1NwZWMgPT0gJzsn
KQotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgfQotICAgIAotICAgIGlmIChjdXJy
Vmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBpZiAocHRyIDwgZW5kICYmICpwdHIgPT0gJzsnKQorICAgICAg
ICAgICAgICAgIHB0cisrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocHRyID49
IGVuZCB8fCAqcHRyICE9ICcpJykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdWaWV3U3BlYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVmlld1NwZWMoY29udGV4dEVs
ZW1lbnQpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nJik7
CisgICAgYm9vbCBwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZ1ZpZXcmKTsKICAgICB2b2lkIHJl
c2V0KCk7CiAgICAgdm9pZCByZXNldENvbnRleHRFbGVtZW50KCkgeyBtX2NvbnRleHRFbGVtZW50
ID0gbnVsbHB0cjsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCShy
ZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDI1ICsyMiwzMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNWR1pvb21BbmRQYW4uaCIKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlTnVtYmVycy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgU1ZHWm9v
bUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFy
KiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFj
dGVyVHlwZSBkaXNhYmxlW10gPSB7ICdkJywgJ2knLCAncycsICdhJywgJ2InLCAnbCcsICdlJyB9
OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5
cGUgbWFnbmlmeVtdID0geyAnbScsICdhJywgJ2cnLCAnbicsICdpJywgJ2YnLCAneScgfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhY2F0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHWm9vbUFu
ZFBhblR5cGU+IHBhcnNlWm9vbUFuZFBhbkdlbmVyaWMoY29uc3QgQ2hhY2F0ZXJUeXBlKiYgc3Rh
cnQsIGNvbnN0IENoYWNhdGVyVHlwZSogZW5kKQogewotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBk
aXNhYmxlW10gPSB7ICdkJywgJ2knLCAncycsICdhJywgJ2InLCAnbCcsICdlJyB9OwotICAgIGlm
IChza2lwU3RyaW5nKHN0YXJ0LCBlbmQsIGRpc2FibGUsIFdURl9BUlJBWV9MRU5HVEgoZGlzYWJs
ZSkpKSB7Ci0gICAgICAgIG1fem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW5EaXNhYmxlOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgVUNoYXIgbWFnbmlm
eVtdID0geyAnbScsICdhJywgJ2cnLCAnbicsICdpJywgJ2YnLCAneScgfTsKLSAgICBpZiAoc2tp
cFN0cmluZyhzdGFydCwgZW5kLCBtYWduaWZ5LCBXVEZfQVJSQVlfTEVOR1RIKG1hZ25pZnkpKSkg
ewotICAgICAgICBtX3pvb21BbmRQYW4gPSBTVkdab29tQW5kUGFuTWFnbmlmeTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChza2lwU3RyaW5nKHN0YXJ0LCBlbmQsIGRpc2Fi
bGU8Q2hhY2F0ZXJUeXBlPikpCisgICAgICAgIHJldHVybiBTVkdab29tQW5kUGFuRGlzYWJsZTsK
KworICAgIGlmIChza2lwU3RyaW5nKHN0YXJ0LCBlbmQsIG1hZ25pZnk8Q2hhY2F0ZXJUeXBlPikp
CisgICAgICAgIHJldHVybiBTVkdab29tQW5kUGFuTWFnbmlmeTsKKworICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Cit9CiAKLSAgICByZXR1cm4gZmFsc2U7CitPcHRpb25hbDxTVkdab29tQW5kUGFu
VHlwZT4gU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKGNvbnN0IExDaGFyKiYgcHRyLCBj
b25zdCBMQ2hhciogZW5kKQoreworICAgIHJldHVybiBwYXJzZVpvb21BbmRQYW5HZW5lcmljKHB0
ciwgZW5kKTsKK30KKworT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IFNWR1pvb21BbmRQYW46
OnBhcnNlWm9vbUFuZFBhbihjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKK3sK
KyAgICByZXR1cm4gcGFyc2Vab29tQW5kUGFuR2VuZXJpYyhwdHIsIGVuZCk7CiB9CiAKIHZvaWQg
U1ZHWm9vbUFuZFBhbjo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmli
dXRlTmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHWm9vbUFuZFBhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkda
b29tQW5kUGFuLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkda
b29tQW5kUGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDggQEAgcHVibGljOgogcHJv
dGVjdGVkOgogICAgIFNWR1pvb21BbmRQYW4oKSA9IGRlZmF1bHQ7CiAKLSAgICBib29sIHBhcnNl
Wm9vbUFuZFBhbihjb25zdCBVQ2hhciomLCBjb25zdCBVQ2hhciopOworICAgIHN0YXRpYyBPcHRp
b25hbDxTVkdab29tQW5kUGFuVHlwZT4gcGFyc2Vab29tQW5kUGFuKGNvbnN0IExDaGFyKiYsIGNv
bnN0IExDaGFyKik7CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1pvb21BbmRQYW5UeXBlPiBwYXJz
ZVpvb21BbmRQYW4oY29uc3QgVUNoYXIqJiwgY29uc3QgVUNoYXIqKTsKIAogcHJpdmF0ZToKICAg
ICBTVkdab29tQW5kUGFuVHlwZSBtX3pvb21BbmRQYW4geyBTVkdQcm9wZXJ0eVRyYWl0czxTVkda
b29tQW5kUGFuVHlwZT46OmluaXRpYWxWYWx1ZSgpIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402479</attachid>
            <date>2020-06-22 08:56:34 -0700</date>
            <delta_ts>2020-06-23 18:38:24 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-213460-20200622085632.patch</filename>
            <type>text/plain</type>
            <size>105423</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjMzNDcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA2LTIyICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIHVubmVjZXNzYXJ5IHVwY29udmVyc2lvbiBv
ZiBTdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTM0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHd0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oOgorICAgICAgICAoV1RGOjpnZXRDaGFyYWN0ZXJz
KToKKwogMjAyMC0wNi0yMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXVEZdIEVuc3VyZSBBU0NJSUxpdGVyYWwgaXMgQVNDSUkgY2hhcmFjdGVycyBhdCBj
b21waWxlIHRpbWUKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29tbW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaAkocmV2aXNpb24g
MjYzMzM1KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNjY5LDYgKzY2OSwxNiBAQCB0ZW1wbGF0ZTx1bnNpZ25lZCBsb3dlcmNhc2VMZXR0
ZXJzTGVuZ3RoCiAgICAgcmV0dXJuIHN0cmxlbihzdHJpbmcpID09IGxlbmd0aCAmJiBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMsIGxlbmd0aCk7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uPiBk
ZWNsdHlwZShhdXRvKSBnZXRDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZ1R5cGUmIHN0cmluZywgRnVu
Y3Rpb24mJiBmdW5jdG9yKQoreworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpIHsKKyAgICAgICAg
YXV0byogcHRyID0gc3RyaW5nLmNoYXJhY3RlcnM4KCk7CisgICAgICAgIHJldHVybiBmdW5jdG9y
KHB0ciwgcHRyICsgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICB9CisgICAgYXV0byogcHRyID0gc3Ry
aW5nLmNoYXJhY3RlcnMxNigpOworICAgIHJldHVybiBmdW5jdG9yKHB0ciwgcHRyICsgc3RyaW5n
Lmxlbmd0aCgpKTsKK30KKwogfQogCiB1c2luZyBXVEY6OmVxdWFsSWdub3JpbmdBU0NJSUNhc2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjMzNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5OSBAQAorMjAyMC0wNi0yMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSB1bm5lY2Vzc2FyeSB1
cGNvbnZlcnNpb24gb2YgU3RyaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjEzNDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIGh0bWwvcGFyc2VyL1BhcnNpbmdVdGls
aXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTm90QVNDSUlTcGFjZSk6CisgICAgICAgICog
bG9hZGVyL2FwcGNhY2hlL01hbmlmZXN0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlTWFuaWZlc3QpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRpZFJlY2VpdmVI
ZWFkZXIpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VE
aXJlY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdDo6cGFyc2VSZXBvcnRVUkkpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaDoKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNN
ZWRpYVR5cGVDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9s
aWN5TWVkaWFMaXN0RGlyZWN0aXZlOjpwYXJzZSk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1NvdXJj
ZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc0hvc3RDaGFyYWN0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm90
Q29sb25PclNsYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU291cmNlTGlzdE5vbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VT
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dDo6cGFyc2VTY2hlbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdDo6cGFyc2VIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
aXNOb25jZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VMaXN0OjpwYXJzZU5vbmNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZSk6CisgICAgICAgICog
cGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oOgorICAgICAgICAqIHN2
Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlS2V5U3BsaW5l
cyk6CisgICAgICAgICogc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveEdlbmVyaWMpOgorICAgICAgICAqIHN2Zy9TVkdGaXRU
b1ZpZXdCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoTGlzdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTGVuZ3RoTGlzdDo6cGFyc2UpOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxlbmd0aFR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdM
ZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aFZh
bHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhWYWx1ZTo6U1ZHTGVuZ3RoVmFsdWUp
OgorICAgICAgICAqIHN2Zy9TVkdOdW1iZXJMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdO
dW1iZXJMaXN0OjpwYXJzZSk6CisgICAgICAgICogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZU51bWJlck9wdGlvbmFsTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlUG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlR2x5
cGhOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVW5pY29kZVJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcpOgorICAgICAgICAqIHN2Zy9TVkdQ
YXJzZXJVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OnNraXBTdHJpbmcpOgorICAgICAg
ICAqIHN2Zy9TVkdQb2ludExpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvaW50TGlzdDo6
cGFyc2UpOgorICAgICAgICAqIHN2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlOjp2YWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmg6CisgICAgICAgICogc3ZnL1NWR1N0cmluZ0xpc3Qu
aDoKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdC5oOgorICAgICAgICAqIHN2Zy9TVkdU
cmFuc2Zvcm1hYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtUGFyYW1M
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtVmFsdWVHZW5lcmljKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VUcmFuc2Zvcm1UeXBlR2VuZXJpYyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRTa2lwVHlwZSk6IERlbGV0ZWQuCisg
ICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAgICAgKiBzdmcvU1ZHVmlld1Nw
ZWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMpOgor
ICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5oOgorICAgICAgICAqIHN2Zy9TVkdab29tQW5kUGFu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlWm9vbUFuZFBhbkdlbmVyaWMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKToKKyAgICAgICAgKiBz
dmcvU1ZHWm9vbUFuZFBhbi5oOgorCiAyMDIwLTA2LTEwICBTZXJnaW8gVmlsbGFyIFNlbmluICA8
c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXZWJYUl0gQWRkIGEgcHJlbGltaW5hcnkg
aW1wbGVtZW50YXRpb24gb2YgWFJXZWJHTExheWVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9QYXJzaW5nVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgYm9vbCBp
c05vdEFTQ0lJU3BhY2UoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgoraW5s
aW5lIGJvb2wgaXNOb3RBU0NJSVNwYWNlKENoYXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FT
Q0lJU3BhY2UoYyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvTWFu
aWZlc3RQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9NYW5pZmVzdFBhcnNlci5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDEzNyArNjcsMTM3IEBAIGJvb2wgcGFyc2VNYW5pZmVzdChjb25zdCBVUkwmIG1hbmlmZXN0
VVIKICAgICBpZiAoIW1hbmlmZXN0U3RyaW5nLnN0YXJ0c1dpdGgobWFuaWZlc3RTaWduYXR1cmUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgU3RyaW5nVmlldyBtYW5pZmVzdEFm
dGVyU2lnbmF0dXJlID0gU3RyaW5nVmlldyhtYW5pZmVzdFN0cmluZykuc3Vic3RyaW5nKHNpemVv
ZihtYW5pZmVzdFNpZ25hdHVyZSkgLSAxKTsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVy
cyA9IG1hbmlmZXN0QWZ0ZXJTaWduYXR1cmUudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIHAgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIq
IGVuZCA9IHAgKyBtYW5pZmVzdEFmdGVyU2lnbmF0dXJlLmxlbmd0aCgpOworICAgIGF1dG8gbWFu
aWZlc3RBZnRlclNpZ25hdHVyZSA9IFN0cmluZ1ZpZXcobWFuaWZlc3RTdHJpbmcpLnN1YnN0cmlu
ZyhzaXplb2YobWFuaWZlc3RTaWduYXR1cmUpIC0gMSk7CiAKLSAgICBpZiAocCA8IGVuZCAmJiAq
cCAhPSAnICcgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnXG4nICYmICpwICE9ICdccicpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBGSVhNRTogVGhpcyBwYXJzZXIgY291bGQgYmUgbXVj
aCBjbGVhcmVyIGlmIGl0IGFkb3B0ZWQgc29tZSBvZiB0aGUgY29tbW9uIHBhcnNpbmcgdXRpbGl0
aWVzCisgICAgLy8gZm9yIHNraXBwaW5nIGFuZCBjb21wYXJpbmcuCiAKLSAgICAvLyBTa2lwIHRv
IHRoZSBlbmQgb2YgdGhlIGxpbmUuCi0gICAgd2hpbGUgKHAgPCBlbmQgJiYgKnAgIT0gJ1xyJyAm
JiAqcCAhPSAnXG4nKQotICAgICAgICBwKys7Ci0KLSAgICB3aGlsZSAoMSkgewotICAgICAgICAv
LyBTa2lwIHdoaXRlc3BhY2UKLSAgICAgICAgd2hpbGUgKHAgPCBlbmQgJiYgKCpwID09ICdcbicg
fHwgKnAgPT0gJ1xyJyB8fCAqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JykpCi0gICAgICAgICAgICBw
Kys7Ci0gICAgICAgIAotICAgICAgICBpZiAocCA9PSBlbmQpCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgCi0gICAgICAgIGNvbnN0IFVDaGFyKiBsaW5lU3RhcnQgPSBwOwotICAgICAgICAK
LSAgICAgICAgLy8gRmluZCB0aGUgZW5kIG9mIHRoZSBsaW5lCisgICAgcmV0dXJuIFdURjo6Z2V0
Q2hhcmFjdGVycyhtYW5pZmVzdEFmdGVyU2lnbmF0dXJlLCBbJl0oYXV0byBwLCBhdXRvIGVuZCkg
eworICAgICAgICBpZiAocCA8IGVuZCAmJiAqcCAhPSAnICcgJiYgKnAgIT0gJ1x0JyAmJiAqcCAh
PSAnXG4nICYmICpwICE9ICdccicpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgLy8gU2tpcCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgogICAgICAgICB3aGlsZSAocCA8IGVu
ZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCiAgICAgICAgICAgICBwKys7Ci0gICAgICAg
IAotICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgY29tbWVudAotICAgICAgICBpZiAoKmxp
bmVTdGFydCA9PSAnIycpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAg
IC8vIEdldCByaWQgb2YgdHJhaWxpbmcgd2hpdGVzcGFjZQotICAgICAgICBjb25zdCBVQ2hhciog
dG1wID0gcCAtIDE7Ci0gICAgICAgIHdoaWxlICh0bXAgPiBsaW5lU3RhcnQgJiYgKCp0bXAgPT0g
JyAnIHx8ICp0bXAgPT0gJ1x0JykpCi0gICAgICAgICAgICB0bXAtLTsKLSAgICAgICAgCi0gICAg
ICAgIFN0cmluZyBsaW5lKGxpbmVTdGFydCwgdG1wIC0gbGluZVN0YXJ0ICsgMSk7Ci0KLSAgICAg
ICAgaWYgKGxpbmUgPT0gIkNBQ0hFOiIpIAotICAgICAgICAgICAgbW9kZSA9IEV4cGxpY2l0Owot
ICAgICAgICBlbHNlIGlmIChsaW5lID09ICJGQUxMQkFDSzoiKQotICAgICAgICAgICAgbW9kZSA9
IEZhbGxiYWNrOwotICAgICAgICBlbHNlIGlmIChsaW5lID09ICJORVRXT1JLOiIpCi0gICAgICAg
ICAgICBtb2RlID0gT25saW5lQWxsb3dsaXN0OwotICAgICAgICBlbHNlIGlmIChsaW5lLmVuZHNX
aXRoKCc6JykpCi0gICAgICAgICAgICBtb2RlID0gVW5rbm93bjsKLSAgICAgICAgZWxzZSBpZiAo
bW9kZSA9PSBVbmtub3duKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGVsc2UgaWYg
KG1vZGUgPT0gRXhwbGljaXQgfHwgbW9kZSA9PSBPbmxpbmVBbGxvd2xpc3QpIHsKLSAgICAgICAg
ICAgIGF1dG8gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcobGluZSkudXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogcCA9IHVwY29u
dmVydGVkTGluZUNoYXJhY3RlcnM7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogbGluZUVuZCA9
IHAgKyBsaW5lLmxlbmd0aCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBMb29rIGZv
ciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0
b2tlbnMuCi0gICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAq
cCAhPSAnICcpIAotICAgICAgICAgICAgICAgIHArKzsKLQotICAgICAgICAgICAgaWYgKG1vZGUg
PT0gT25saW5lQWxsb3dsaXN0ICYmIHAgLSB1cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzID09IDEg
JiYgbGluZVswXSA9PSAnKicpIHsKLSAgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB3YXMgZm91
bmQuCi0gICAgICAgICAgICAgICAgbWFuaWZlc3QuYWxsb3dBbGxOZXR3b3JrUmVxdWVzdHMgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBVUkwgdXJsKG1hbmlmZXN0VVJMLCBsaW5lLnN1YnN0cmluZygwLCBwIC0gdXBjb252ZXJ0
ZWRMaW5lQ2hhcmFjdGVycykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXVybC5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHVybC5y
ZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHVybC5wcm90b2NvbCgpLCBtYW5pZmVzdFVSTC5wcm90
b2NvbCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZQorICAgICAgICAgICAgd2hpbGUgKHAgPCBl
bmQgJiYgKCpwID09ICdcbicgfHwgKnAgPT0gJ1xyJyB8fCAqcCA9PSAnICcgfHwgKnAgPT0gJ1x0
JykpCisgICAgICAgICAgICAgICAgcCsrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bW9kZSA9PSBFeHBsaWNpdCAmJiBtYW5pZmVzdFVSTC5wcm90b2NvbElzKCJodHRwcyIpICYmICFw
cm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RVUkwsIHVybCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocCA9PSBlbmQpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtb2RlID09IEV4cGxpY2l0
KQotICAgICAgICAgICAgICAgIG1hbmlmZXN0LmV4cGxpY2l0VVJMcy5hZGQodXJsLnN0cmluZygp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtYW5pZmVzdC5vbmxpbmVBbGxv
d2VkVVJMcy5hcHBlbmQodXJsKTsKLSAgICAgICAgICAgIAotICAgICAgICB9IGVsc2UgaWYgKG1v
ZGUgPT0gRmFsbGJhY2spIHsKLSAgICAgICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcobGluZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAg
ICAgICBjb25zdCBVQ2hhciogcCA9IHVwY29udmVydGVkTGluZUNoYXJhY3RlcnM7Ci0gICAgICAg
ICAgICBjb25zdCBVQ2hhciogbGluZUVuZCA9IHAgKyBsaW5lLmxlbmd0aCgpOworICAgICAgICAg
ICAgYXV0byBsaW5lU3RhcnQgPSBwOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBMb29r
IGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIHR3byBVUkxzCi0gICAgICAgICAgICB3aGls
ZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnICcpIAorICAgICAgICAgICAg
Ly8gRmluZCB0aGUgZW5kIG9mIHRoZSBsaW5lCisgICAgICAgICAgICB3aGlsZSAocCA8IGVuZCAm
JiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCiAgICAgICAgICAgICAgICAgcCsrOwotCi0gICAg
ICAgICAgICBpZiAocCA9PSBsaW5lRW5kKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUgd2Fz
IG5vIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUgVVJMcy4KLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgVVJMIG5hbWVz
cGFjZVVSTChtYW5pZmVzdFVSTCwgbGluZS5zdWJzdHJpbmcoMCwgcCAtIHVwY29udmVydGVkTGlu
ZUNoYXJhY3RlcnMpKTsKLSAgICAgICAgICAgIGlmICghbmFtZXNwYWNlVVJMLmlzVmFsaWQoKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG5hbWVzcGFjZVVSTC5yZW1v
dmVGcmFnbWVudElkZW50aWZpZXIoKTsKLQotICAgICAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RB
bmRQb3J0QXJlRXF1YWwobWFuaWZlc3RVUkwsIG5hbWVzcGFjZVVSTCkpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIEFsdGhvdWdoIDxodHRwczovL2h0bWwuc3Bl
Yy53aGF0d2cub3JnL211bHRpcGFnZS9vZmZsaW5lLmh0bWwjcGFyc2luZy1jYWNoZS1tYW5pZmVz
dHM+ICgwNy8wNi8yMDE3KSBzYWlkcwotICAgICAgICAgICAgLy8gdGhhdCB3ZSBzaG91bGQgYWx3
YXlzIHByZWZpeCBtYXRjaCB0aGUgbWFuaWZlc3QgcGF0aCB3ZSBvbmx5IGRvIHNvIGlmIHRoZSBt
YW5pZmVzdCB3YXMgc2VydmVkIHdpdGggYSBub24tCi0gICAgICAgICAgICAvLyBzdGFuZGFyZCBI
VFRQIENvbnRlbnQtVHlwZSBoZWFkZXIgZm9yIHdlYiBjb21wYXRpYmlsaXR5LgotICAgICAgICAg
ICAgaWYgKCFhbGxvd0ZhbGxiYWNrTmFtZXNwYWNlT3V0c2lkZU1hbmZlc3RQYXRoICYmICFuYW1l
c3BhY2VVUkwucGF0aCgpLnN0YXJ0c1dpdGgobWFuaWZlc3RQYXRoKSkKKyAgICAgICAgICAgIC8v
IENoZWNrIGlmIHdlIGhhdmUgYSBjb21tZW50CisgICAgICAgICAgICBpZiAoKmxpbmVTdGFydCA9
PSAnIycpCiAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIEdldCByaWQgb2YgdHJhaWxpbmcgd2hpdGVzcGFjZQorICAgICAgICAgICAgYXV0byB0
bXAgPSBwIC0gMTsKKyAgICAgICAgICAgIHdoaWxlICh0bXAgPiBsaW5lU3RhcnQgJiYgKCp0bXAg
PT0gJyAnIHx8ICp0bXAgPT0gJ1x0JykpCisgICAgICAgICAgICAgICAgdG1wLS07CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFN0cmluZ1ZpZXcgbGluZShsaW5lU3RhcnQsIHRtcCAtIGxpbmVT
dGFydCArIDEpOworCisgICAgICAgICAgICBpZiAobGluZSA9PSAiQ0FDSEU6IikKKyAgICAgICAg
ICAgICAgICBtb2RlID0gRXhwbGljaXQ7CisgICAgICAgICAgICBlbHNlIGlmIChsaW5lID09ICJG
QUxMQkFDSzoiKQorICAgICAgICAgICAgICAgIG1vZGUgPSBGYWxsYmFjazsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGxpbmUgPT0gIk5FVFdPUks6IikKKyAgICAgICAgICAgICAgICBtb2RlID0gT25s
aW5lQWxsb3dsaXN0OworICAgICAgICAgICAgZWxzZSBpZiAobGluZS5lbmRzV2l0aCgnOicpKQor
ICAgICAgICAgICAgICAgIG1vZGUgPSBVbmtub3duOworICAgICAgICAgICAgZWxzZSBpZiAobW9k
ZSA9PSBVbmtub3duKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZWxz
ZSBpZiAobW9kZSA9PSBFeHBsaWNpdCB8fCBtb2RlID09IE9ubGluZUFsbG93bGlzdCkgeworICAg
ICAgICAgICAgICAgIGF1dG8gcCA9IGxpbmVTdGFydDsKKyAgICAgICAgICAgICAgICBhdXRvIGxp
bmVFbmQgPSBwICsgbGluZS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTCBmcm9tIHN1YnNl
cXVlbnQgaWdub3JlZCB0b2tlbnMuCisgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBsaW5lRW5k
ICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKQorICAgICAgICAgICAgICAgICAgICBwKys7CisK
KyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBPbmxpbmVBbGxvd2xpc3QgJiYgcCAtIGxpbmVT
dGFydCA9PSAxICYmIGxpbmVbMF0gPT0gJyonKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdp
bGRjYXJkIHdhcyBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3QuYWxsb3dBbGxO
ZXR3b3JrUmVxdWVzdHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBVUkwgdXJsKG1hbmlmZXN0VVJMLCBs
aW5lLnN1YnN0cmluZygwLCBwIC0gbGluZVN0YXJ0KS50b1N0cmluZygpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRl
bnRpZmllcigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2woKSwgbWFuaWZlc3RVUkwucHJvdG9jb2woKSkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChtb2RlID09IEV4cGxpY2l0ICYmIG1hbmlmZXN0VVJMLnByb3RvY29sSXMo
Imh0dHBzIikgJiYgIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVSTCwgdXJs
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKG1vZGUgPT0gRXhwbGljaXQpCisgICAgICAgICAgICAgICAgICAgIG1h
bmlmZXN0LmV4cGxpY2l0VVJMcy5hZGQodXJsLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVu
ZCh1cmwpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09
IEZhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgYXV0byBwID0gbGluZVN0YXJ0OworICAgICAg
ICAgICAgICAgIGF1dG8gbGluZUVuZCA9IHAgKyBsaW5lLmxlbmd0aCgpOworCisgICAgICAgICAg
ICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSB0d28gVVJMcworICAg
ICAgICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAqcCAhPSAnXHQnICYmICpwICE9ICcg
JykKKyAgICAgICAgICAgICAgICAgICAgcCsrOworCisgICAgICAgICAgICAgICAgaWYgKHAgPT0g
bGluZUVuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSB3YXMgbm8gd2hpdGVzcGFj
ZSBzZXBhcmF0aW5nIHRoZSBVUkxzLgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVVJMIG5h
bWVzcGFjZVVSTChtYW5pZmVzdFVSTCwgbGluZS5zdWJzdHJpbmcoMCwgcCAtIGxpbmVTdGFydCku
dG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFuYW1lc3BhY2VVUkwuaXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBuYW1lc3Bh
Y2VVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
IXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVSTCwgbmFtZXNwYWNlVVJMKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAvLyBBbHRo
b3VnaCA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb2ZmbGluZS5odG1s
I3BhcnNpbmctY2FjaGUtbWFuaWZlc3RzPiAoMDcvMDYvMjAxNykgc2FpZHMKKyAgICAgICAgICAg
ICAgICAvLyB0aGF0IHdlIHNob3VsZCBhbHdheXMgcHJlZml4IG1hdGNoIHRoZSBtYW5pZmVzdCBw
YXRoIHdlIG9ubHkgZG8gc28gaWYgdGhlIG1hbmlmZXN0IHdhcyBzZXJ2ZWQgd2l0aCBhIG5vbi0K
KyAgICAgICAgICAgICAgICAvLyBzdGFuZGFyZCBIVFRQIENvbnRlbnQtVHlwZSBoZWFkZXIgZm9y
IHdlYiBjb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgIGlmICghYWxsb3dGYWxsYmFja05h
bWVzcGFjZU91dHNpZGVNYW5mZXN0UGF0aCAmJiAhbmFtZXNwYWNlVVJMLnBhdGgoKS5zdGFydHNX
aXRoKG1hbmlmZXN0UGF0aCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgZmFsbGJhY2sgbmFtZXNw
YWNlIGZyb20gVVJMLgorICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAoKnAg
PT0gJ1x0JyB8fCAqcCA9PSAnICcpKQorICAgICAgICAgICAgICAgICAgICBwKys7CisKKyAgICAg
ICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTCBmcm9t
IHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCisgICAgICAgICAgICAgICAgYXV0byBmYWxsYmFj
a1N0YXJ0ID0gcDsKKyAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0g
J1x0JyAmJiAqcCAhPSAnICcpCisgICAgICAgICAgICAgICAgICAgIHArKzsKKworICAgICAgICAg
ICAgICAgIFVSTCBmYWxsYmFja1VSTChtYW5pZmVzdFVSTCwgU3RyaW5nKGZhbGxiYWNrU3RhcnQs
IHAgLSBmYWxsYmFja1N0YXJ0KSk7CisgICAgICAgICAgICAgICAgaWYgKCFmYWxsYmFja1VSTC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGZhbGxiYWNrVVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOworCisgICAgICAgICAgICAg
ICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RVUkwsIGZhbGxiYWNr
VVJMKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBt
YW5pZmVzdC5mYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5hbWVzcGFjZVVSTCwg
ZmFsbGJhY2tVUkwpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFNraXAgd2hpdGVz
cGFjZSBzZXBhcmF0aW5nIGZhbGxiYWNrIG5hbWVzcGFjZSBmcm9tIFVSTC4KLSAgICAgICAgICAg
IHdoaWxlIChwIDwgbGluZUVuZCAmJiAoKnAgPT0gJ1x0JyB8fCAqcCA9PSAnICcpKQotICAgICAg
ICAgICAgICAgIHArKzsKLQotICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBh
cmF0aW5nIHRoZSBVUkwgZnJvbSBzdWJzZXF1ZW50IGlnbm9yZWQgdG9rZW5zLgotICAgICAgICAg
ICAgY29uc3QgVUNoYXIqIGZhbGxiYWNrU3RhcnQgPSBwOwotICAgICAgICAgICAgd2hpbGUgKHAg
PCBsaW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKSAKLSAgICAgICAgICAgICAgICBw
Kys7Ci0KLSAgICAgICAgICAgIFVSTCBmYWxsYmFja1VSTChtYW5pZmVzdFVSTCwgU3RyaW5nKGZh
bGxiYWNrU3RhcnQsIHAgLSBmYWxsYmFja1N0YXJ0KSk7Ci0gICAgICAgICAgICBpZiAoIWZhbGxi
YWNrVVJMLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGZhbGxiYWNrVVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotCi0gICAgICAgICAgICBp
ZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVSTCwgZmFsbGJhY2tVUkwp
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBtYW5pZmVzdC5mYWxs
YmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5hbWVzcGFjZVVSTCwgZmFsbGJhY2tVUkwp
KTsgICAgICAgICAgICAKLSAgICAgICAgfSBlbHNlIAotICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3Nw
L0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxMiwyMiArMjEyLDI0IEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpkaWRSZWNl
aXZlSGUKICAgICAvLyBSRkMyNjE2LCBzZWN0aW9uIDQuMiBzcGVjaWZpZXMgdGhhdCBoZWFkZXJz
IGFwcGVhcmluZyBtdWx0aXBsZSB0aW1lcyBjYW4KICAgICAvLyBiZSBjb21iaW5lZCB3aXRoIGEg
Y29tbWEuIFdhbGsgdGhlIGhlYWRlciBzdHJpbmcsIGFuZCBwYXJzZSBlYWNoIGNvbW1hCiAgICAg
Ly8gc2VwYXJhdGVkIGNodW5rIGFzIGEgc2VwYXJhdGUgaGVhZGVyLgotICAgIGF1dG8gY2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcoaGVhZGVyKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBj
b25zdCBVQ2hhciogYmVnaW4gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlv
biA9IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBiZWdpbiArIGhlYWRlci5sZW5ndGgo
KTsKLSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgc2tpcFVudGlsPFVDaGFy
Pihwb3NpdGlvbiwgZW5kLCAnLCcpOwotCi0gICAgICAgIC8vIGhlYWRlcjEsaGVhZGVyMiBPUiBo
ZWFkZXIxCi0gICAgICAgIC8vICAgICAgICBeICAgICAgICAgICAgICAgICAgXgotICAgICAgICBt
X3BvbGljaWVzLmFwcGVuZChDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpjcmVh
dGUoKnRoaXMsIFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbiksIHR5cGUsIHBvbGljeUZy
b20pKTsKLQotICAgICAgICAvLyBTa2lwIHRoZSBjb21tYSwgYW5kIGJlZ2luIHRoZSBuZXh0IGhl
YWRlciBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICAgICAgICBBU1NFUlQocG9zaXRpb24g
PT0gZW5kIHx8ICpwb3NpdGlvbiA9PSAnLCcpOwotICAgICAgICBza2lwRXhhY3RseTxVQ2hhcj4o
cG9zaXRpb24sIGVuZCwgJywnKTsKLSAgICAgICAgYmVnaW4gPSBwb3NpdGlvbjsKLSAgICB9Cisg
ICAgV1RGOjpnZXRDaGFyYWN0ZXJzKGhlYWRlciwgWyZdKGF1dG8gcG9zaXRpb24sIGF1dG8gZW5k
KSB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSBzdGQ6OnJlbW92ZV9wb2ludGVyX3Q8
ZGVjbHR5cGUocG9zaXRpb24pPjsKKworICAgICAgICBhdXRvIGJlZ2luID0gcG9zaXRpb247Cisg
ICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgeworICAgICAgICAgICAgc2tpcFVudGlsPENo
YXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICcsJyk7CisKKyAgICAgICAgICAgIC8vIGhlYWRl
cjEsaGVhZGVyMiBPUiBoZWFkZXIxCisgICAgICAgICAgICAvLyAgICAgICAgXiAgICAgICAgICAg
ICAgICAgIF4KKyAgICAgICAgICAgIG1fcG9saWNpZXMuYXBwZW5kKENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZUxpc3Q6OmNyZWF0ZSgqdGhpcywgU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAt
IGJlZ2luKSwgdHlwZSwgcG9saWN5RnJvbSkpOworCisgICAgICAgICAgICAvLyBTa2lwIHRoZSBj
b21tYSwgYW5kIGJlZ2luIHRoZSBuZXh0IGhlYWRlciBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9u
LgorICAgICAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJywn
KTsKKyAgICAgICAgICAgIHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQs
ICcsJyk7CisgICAgICAgICAgICBiZWdpbiA9IHBvc2l0aW9uOworICAgICAgICB9CisgICAgfSk7
CisgICAgCiAKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICBhcHBs
eVBvbGljeVRvU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdC5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3Nw
L0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSwxMiArMzUsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBp
c0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBib29sIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3RlcihDaGFyYWN0ZXJU
eXBlIGMpCiB7CiAgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnLSc7
CiB9CiAKLXN0YXRpYyBib29sIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIoVUNoYXIgYykKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzRGlyZWN0aXZlVmFs
dWVDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBpc0FTQ0lJU3BhY2Uo
YykgfHwgKGMgPj0gMHgyMSAmJiBjIDw9IDB4N2UpOyAvLyBXaGl0ZXNwYWNlICsgVkNIQVIKIH0K
QEAgLTMzMyw2MiArMzMzLDYxIEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDoKICAgICBpZiAocG9saWN5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhwb2xpY3kpLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3Qg
VUNoYXIqIGVuZCA9IHBvc2l0aW9uICsgcG9saWN5Lmxlbmd0aCgpOwotCi0gICAgd2hpbGUgKHBv
c2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBkaXJlY3RpdmVCZWdpbiA9IHBv
c2l0aW9uOwotICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0K
LSAgICAgICAgU3RyaW5nIG5hbWUsIHZhbHVlOwotICAgICAgICBpZiAocGFyc2VEaXJlY3RpdmUo
ZGlyZWN0aXZlQmVnaW4sIHBvc2l0aW9uLCBuYW1lLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgIEFT
U0VSVCghbmFtZS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgaWYgKHBvbGljeUZyb20gPT0gQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpJbmhlcml0ZWQpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkhUVFBFcXVpdk1ldGEpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2FuZGJveCkKLSAgICAgICAgICAgICAgICAgICAgfHwg
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6cmVwb3J0VVJJKQotICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFt
ZUFuY2VzdG9ycykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxp
ZERpcmVjdGl2ZUluSFRUUEVxdWl2TWV0YShuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgV1RGOjpnZXRDaGFyYWN0ZXJzKHBvbGljeSwgWyZdKGF1dG8gcG9zaXRpb24s
IGF1dG8gZW5kKSB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSBzdGQ6OnJlbW92ZV9w
b2ludGVyX3Q8ZGVjbHR5cGUocG9zaXRpb24pPjsKKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwg
ZW5kKSB7CisgICAgICAgICAgICBhdXRvIGRpcmVjdGl2ZUJlZ2luID0gcG9zaXRpb247CisgICAg
ICAgICAgICBza2lwVW50aWw8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJzsnKTsKKwor
ICAgICAgICAgICAgU3RyaW5nIG5hbWUsIHZhbHVlOworICAgICAgICAgICAgaWYgKHBhcnNlRGly
ZWN0aXZlKGRpcmVjdGl2ZUJlZ2luLCBwb3NpdGlvbiwgbmFtZSwgdmFsdWUpKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKCFuYW1lLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBv
bGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpJbmhlcml0ZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnVwZ3JhZGVJbnNlY3VyZVJlcXVl
c3RzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZy
b206OkhUVFBFcXVpdk1ldGEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNh
bmRib3gpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpyZXBvcnRVUkkpCisg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJbkhU
VFBFcXVpdk1ldGEobmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJv
bSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZEZvclBsdWdp
bkRvY3VtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cGx1Z2luVHlw
ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShu
YW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBv
bGljeUZyb206OkluaGVyaXRlZEZvclBsdWdpbkRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykKLSAgICAgICAgICAgICAgICAgICAgJiYgIWVxdWFs
SWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6OnJlcG9ydFVSSSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGFkZERpcmVjdGl2ZShuYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBhZGREaXJlY3RpdmUobmFtZSwgdmFsdWUpOwotICAgICAgICB9CiAKLSAgICAgICAgQVNT
RVJUKHBvc2l0aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJzsnKTsKLSAgICAgICAgc2tpcEV4
YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0gICAgfQorICAgICAgICAgICAgQVNT
RVJUKHBvc2l0aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJzsnKTsKKyAgICAgICAgICAgIHNr
aXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICc7Jyk7CisgICAgICAgIH0K
KyAgICB9KTsKIH0KIAogLy8gZGlyZWN0aXZlICAgICAgICAgPSAqV1NQIFsgZGlyZWN0aXZlLW5h
bWUgWyBXU1AgZGlyZWN0aXZlLXZhbHVlIF0gXQogLy8gZGlyZWN0aXZlLW5hbWUgICAgPSAxKigg
QUxQSEEgLyBESUdJVCAvICItIiApCiAvLyBkaXJlY3RpdmUtdmFsdWUgICA9ICooIFdTUCAvIDxW
Q0hBUiBleGNlcHQgIjsiPiApCiAvLwotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0OjpwYXJzZURpcmVjdGl2ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBl
bmQsIFN0cmluZyYgbmFtZSwgU3RyaW5nJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VE
aXJlY3RpdmUoY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUq
IGVuZCwgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIHZhbHVlKQogewogICAgIEFTU0VSVChuYW1lLmlz
RW1wdHkoKSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzRW1wdHkoKSk7CiAKLSAgICBjb25zdCBVQ2hh
ciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4o
cG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBwb3NpdGlvbiA9IGJlZ2luOworICAgIHNraXBXaGls
ZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwogCiAgICAgLy8g
RW1wdHkgZGlyZWN0aXZlIChlLmcuICI7OzsiKS4gRXhpdCBlYXJseS4KICAgICBpZiAocG9zaXRp
b24gPT0gZW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBVQ2hhciogbmFt
ZUJlZ2luID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0RpcmVjdGl2ZU5hbWVD
aGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgIGF1dG8gbmFtZUJlZ2luID0gcG9zaXRpb247
CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4o
cG9zaXRpb24sIGVuZCk7CiAKICAgICAvLyBUaGUgZGlyZWN0aXZlLW5hbWUgbXVzdCBiZSBub24t
ZW1wdHkuCiAgICAgaWYgKG5hbWVCZWdpbiA9PSBwb3NpdGlvbikgewotICAgICAgICBza2lwV2hp
bGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIHNraXBX
aGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwogICAg
ICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2lu
LCBwb3NpdGlvbiAtIG5hbWVCZWdpbikpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpA
QCAtMzk4LDE2ICszOTcsMTYgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVM
aXN0OgogICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKSkg
ewotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVu
ZCk7CisgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBv
c2l0aW9uLCBlbmQpKSB7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFT
Q0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwogICAgICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBv
cnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVCZWdpbikpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FT
Q0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBp
c0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwogCi0gICAgY29uc3QgVUNoYXIqIHZhbHVlQmVn
aW4gPSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzRGlyZWN0aXZlVmFsdWVDaGFy
YWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgIGF1dG8gdmFsdWVCZWdpbiA9IHBvc2l0aW9uOwor
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyPihw
b3NpdGlvbiwgZW5kKTsKIAogICAgIGlmIChwb3NpdGlvbiAhPSBlbmQpIHsKICAgICAgICAgbV9w
b2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKG5hbWUsIFN0cmluZyh2
YWx1ZUJlZ2luLCBlbmQgLSB2YWx1ZUJlZ2luKSk7CkBAIC00MjksMTkgKzQyOCwyMCBAQCB2b2lk
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRl
ZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBjaGFyYWN0ZXJzOwot
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIHZhbHVlLmxlbmd0aCgpOworICAgIFdU
Rjo6Z2V0Q2hhcmFjdGVycyh2YWx1ZSwgWyZdKGF1dG8gcG9zaXRpb24sIGF1dG8gZW5kKSB7Cisg
ICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSBzdGQ6OnJlbW92ZV9wb2ludGVyX3Q8ZGVjbHR5
cGUocG9zaXRpb24pPjsKIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIGF1
dG8gY2hhcmFjdGVycyA9IHBvc2l0aW9uOworICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQp
IHsKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBv
c2l0aW9uLCBlbmQpOwogCi0gICAgICAgIGNvbnN0IFVDaGFyKiB1cmxCZWdpbiA9IHBvc2l0aW9u
OwotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVu
ZCk7CisgICAgICAgICAgICBhdXRvIHVybEJlZ2luID0gcG9zaXRpb247CisgICAgICAgICAgICBz
a2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsK
IAotICAgICAgICBpZiAodXJsQmVnaW4gPCBwb3NpdGlvbikKLSAgICAgICAgICAgIG1fcmVwb3J0
VVJJcy5hcHBlbmQodmFsdWUuc3Vic3RyaW5nKHVybEJlZ2luIC0gY2hhcmFjdGVycywgcG9zaXRp
b24gLSB1cmxCZWdpbikpOwotICAgIH0KKyAgICAgICAgICAgIGlmICh1cmxCZWdpbiA8IHBvc2l0
aW9uKQorICAgICAgICAgICAgICAgIG1fcmVwb3J0VVJJcy5hcHBlbmQodmFsdWUuc3Vic3RyaW5n
KHVybEJlZ2luIC0gY2hhcmFjdGVycywgcG9zaXRpb24gLSB1cmxCZWdpbikpOworICAgICAgICB9
CisgICAgfSk7CiB9CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaAkocmV2aXNpb24g
MjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OlBvbGljeUZyb20pOwogCi0gICAgYm9vbCBwYXJzZURpcmVjdGl2ZShjb25zdCBVQ2hh
ciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgbmFtZSwgU3RyaW5nJiB2YWx1ZSk7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZURpcmVjdGl2
ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBT
dHJpbmcmIG5hbWUsIFN0cmluZyYgdmFsdWUpOwogICAgIHZvaWQgcGFyc2VSZXBvcnRVUkkoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIHBhcnNlUGx1
Z2luVHlwZXMoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICB2
b2lkIGFkZERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5TWVk
aWFMaXN0RGlyZWN0aXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nz
cC9Db250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwCShyZXZpc2lvbiAy
NjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lN
ZWRpYUxpc3REaXJlY3RpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNNZWRpYVR5cGVDaGFyYWN0ZXIo
VUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgYm9vbCBp
c01lZGlhVHlwZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FT
Q0lJU3BhY2UoYykgJiYgYyAhPSAnLyc7CiB9CkBAIC01Miw2MiArNTMsNjEgQEAgYm9vbCBDb250
ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlYwogCiB2b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeU1lZGlhTGlzdERpcmVjdGl2ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAg
ICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3Rl
cnMoKTsKLSAgICBjb25zdCBVQ2hhciogYmVnaW4gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVD
aGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBiZWdpbiArIHZh
bHVlLmxlbmd0aCgpOwotCiAgICAgLy8gJ3BsdWdpbi10eXBlcyBfX19fOycgT1IgJ3BsdWdpbi10
eXBlczsnCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBkaXJlY3RpdmVMaXN0
KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKHZhbHVlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICAvLyBf
X19fXyBPUiBfX19fX21pbWUxL21pbWUxCi0gICAgICAgIC8vIF4gICAgICAgIF4KLSAgICAgICAg
c2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICBp
ZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIG1p
bWUxL21pbWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vIF4KLSAgICAgICAgYmVnaW4gPSBwb3Np
dGlvbjsKLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0
ZXI+KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90
QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCku
cG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24g
LSBiZWdpbikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgc2tp
cFdoaWxlPFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAg
V1RGOjpnZXRDaGFyYWN0ZXJzKHZhbHVlLCBbJl0oYXV0byBwb3NpdGlvbiwgYXV0byBlbmQpIHsK
KyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHN0ZDo6cmVtb3ZlX3BvaW50ZXJfdDxkZWNs
dHlwZShwb3NpdGlvbik+OwogCi0gICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCi0g
ICAgICAgIC8vICAgICAgXgotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlv
biwgZW5kLCAnLycpKSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlT
cGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5
KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdp
bikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHBv
c2l0aW9uIDwgZW5kKSB7CisgICAgICAgICAgICAvLyBfX19fXyBPUiBfX19fX21pbWUxL21pbWUx
CisgICAgICAgICAgICAvLyBeICAgICAgICBeCisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFj
dGVyVHlwZSwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgIGlmIChw
b3NpdGlvbiA9PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAv
LyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMgorICAgICAgICAgICAgLy8gXgorICAgICAgICAgICAg
YXV0byBiZWdpbiA9IHBvc2l0aW9uOworICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFy
YWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKKyAgICAg
ICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwb3Np
dGlvbiwgZW5kKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVw
b3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2tp
cFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5k
KTsKKworICAgICAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKKyAgICAgICAgICAg
IC8vICAgICAgXgorICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihw
b3NpdGlvbiwgZW5kLCAnLycpKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgICAgICAgICAg
ZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmco
YmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKKyAg
ICAgICAgICAgIC8vICAgICAgIF4KKyAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFj
dGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKSB7CisgICAgICAg
ICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRp
b24sIGVuZCk7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9y
dEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNraXBX
aGlsZTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7
CisKKyAgICAgICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyIE9SIG1pbWUxL21pbWUx
ICBPUiBtaW1lMS9taW1lMS9lcnJvcgorICAgICAgICAgICAgLy8gICAgICAgICAgICBeICAgICAg
ICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgaWYgKHBv
c2l0aW9uIDwgZW5kICYmIGlzTm90QVNDSUlTcGFjZSgqcG9zaXRpb24pKSB7CisgICAgICAgICAg
ICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24s
IGVuZCk7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydElu
dmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcGx1Z2lu
VHlwZXMuYWRkKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwogCi0gICAgICAgIC8v
IG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vICAgICAgIF4KLSAgICAgICAgaWYg
KCFza2lwRXhhY3RseTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQp
KSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRp
b24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52
YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwotICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8IGlz
QVNDSUlTcGFjZSgqcG9zaXRpb24pKTsKICAgICAgICAgfQotICAgICAgICBza2lwV2hpbGU8VUNo
YXIsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLQotICAgICAgICAvLyBt
aW1lMS9taW1lMSBtaW1lMi9taW1lMiBPUiBtaW1lMS9taW1lMSAgT1IgbWltZTEvbWltZTEvZXJy
b3IKLSAgICAgICAgLy8gICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICBeICAg
ICAgICAgICAgICAgXgotICAgICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgaXNOb3RBU0NJSVNw
YWNlKCpwb3NpdGlvbikpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJ
SVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xp
Y3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJl
Z2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBtX3BsdWdp
blR5cGVzLmFkZChTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKLQotICAgICAgICBB
U1NFUlQocG9zaXRpb24gPT0gZW5kIHx8IGlzQVNDSUlTcGFjZSgqcG9zaXRpb24pKTsKLSAgICB9
CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3QuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NDQgKzU2LDQxIEBAIHN0YXRpYyBib29sIGlzQ1NQRGlyZWN0aXZlTmFtZShjb25zdCBTdHIKICAg
ICAgICAgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6c3R5bGVTcmMpOwogfQogCi1zdGF0aWMgYm9vbCBpc1NvdXJjZUNo
YXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IGJvb2wgaXNTb3VyY2VDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiAh
aXNBU0NJSVNwYWNlKGMpOwogfQogCi1zdGF0aWMgYm9vbCBpc0hvc3RDaGFyYWN0ZXIoVUNoYXIg
YykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzSG9zdENo
YXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVy
aWMoYykgfHwgYyA9PSAnLSc7CiB9CiAKLXN0YXRpYyBib29sIGlzUGF0aENvbXBvbmVudENoYXJh
Y3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJv
b2wgaXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1
cm4gYyAhPSAnPycgJiYgYyAhPSAnIyc7CiB9CiAKLXN0YXRpYyBib29sIGlzU2NoZW1lQ29udGlu
dWF0aW9uQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBzdGF0aWMgYm9vbCBpc1NjaGVtZUNvbnRpbnVhdGlvbkNoYXJhY3RlcihDaGFyYWN0ZXJUeXBl
IGMpCiB7CiAgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwg
YyA9PSAnLScgfHwgYyA9PSAnLic7CiB9CiAKLXN0YXRpYyBib29sIGlzTm90Q29sb25PclNsYXNo
KFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBp
c05vdENvbG9uT3JTbGFzaChDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGMgIT0gJzon
ICYmIGMgIT0gJy8nOwogfQogCi1zdGF0aWMgYm9vbCBpc1NvdXJjZUxpc3ROb25lKGNvbnN0IFN0
cmluZyYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9v
bCBpc1NvdXJjZUxpc3ROb25lKGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFy
YWN0ZXJUeXBlKiBlbmQpCiB7Ci0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1
ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luID0gY2hh
cmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY2hhcmFjdGVycyArIHZhbHVlLmxlbmd0
aCgpOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSVNwYWNlPihiZWdpbiwgZW5kKTsKKyAg
ICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSVNwYWNlPihiZWdpbiwgZW5kKTsKIAot
ICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgIGF1dG8gcG9zaXRpb24gPSBi
ZWdpbjsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBv
c2l0aW9uLCBlbmQpOwogICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVn
aW4sIHBvc2l0aW9uIC0gYmVnaW4sICInbm9uZSciKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOworICAg
IHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwog
ICAgIGlmIChwb3NpdGlvbiAhPSBlbmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAg
LTEwOCwxMiArMTA1LDE0IEBAIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OkNvbnRl
bnQKIAogdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZShjb25zdCBT
dHJpbmcmIHZhbHVlKQogewotICAgIGlmIChpc1NvdXJjZUxpc3ROb25lKHZhbHVlKSkgewotICAg
ICAgICBtX2lzTm9uZSA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byBj
aGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0g
ICAgcGFyc2UoY2hhcmFjdGVycywgY2hhcmFjdGVycyArIHZhbHVlLmxlbmd0aCgpKTsKKyAgICBX
VEY6OmdldENoYXJhY3RlcnModmFsdWUsIFsmXShhdXRvIGNoYXJhY3RlcnMsIGF1dG8gZW5kKSB7
CisgICAgICAgIGlmIChpc1NvdXJjZUxpc3ROb25lKGNoYXJhY3RlcnMsIGVuZCkpIHsKKyAgICAg
ICAgICAgIG1faXNOb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIHBhcnNlKGNoYXJhY3RlcnMsIGVuZCk7CisgICAgfSk7CiB9CiAKIGJvb2wgQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6aXNQcm90b2NvbEFsbG93ZWRCeVN0YXIoY29u
c3QgVVJMJiB1cmwpIGNvbnN0CkBAIC0xNjAsMTcgKzE1OSwxNyBAQCBib29sIENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3Q6Om1hCiAvLyBzb3VyY2UtbGlzdCAgICAgICA9ICpXU1AgWyBz
b3VyY2UgKiggMSpXU1Agc291cmNlICkgKldTUCBdCiAvLyAgICAgICAgICAgICAgICAgICAvICpX
U1AgIidub25lJyIgKldTUAogLy8KLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dDo6cGFyc2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogZW5kKQogewotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOworICAgIGF1dG8g
cG9zaXRpb24gPSBiZWdpbjsKIAogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAg
ICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAg
IHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwog
ICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIGNvbnN0IFVDaGFyKiBiZWdpblNvdXJjZSA9IHBvc2l0aW9uOwotICAgICAgICBza2lwV2hp
bGU8VUNoYXIsIGlzU291cmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgYXV0
byBiZWdpblNvdXJjZSA9IHBvc2l0aW9uOworICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlw
ZSwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwogCiAgICAgICAgIFN0cmluZyBz
Y2hlbWUsIGhvc3QsIHBhdGg7CiAgICAgICAgIE9wdGlvbmFsPHVpbnQxNl90PiBwb3J0OwpAQCAt
MjA1LDcgKzIwNCw3IEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEK
IC8vICAgICAgICAgICAgICAgICAgIC8gKCBbIHNjaGVtZSAiOi8vIiBdIGhvc3QgWyBwb3J0IF0g
WyBwYXRoIF0gKQogLy8gICAgICAgICAgICAgICAgICAgLyAiJ3NlbGYnIgogLy8KLWJvb2wgQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTb3VyY2UoY29uc3QgVUNoYXIqIGJl
Z2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNjaGVtZSwgU3RyaW5nJiBob3N0LCBPcHRp
b25hbDx1aW50MTZfdD4mIHBvcnQsIFN0cmluZyYgcGF0aCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJk
LCBib29sJiBwb3J0SGFzV2lsZGNhcmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU291cmNlKGNvbnN0
IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN0cmluZyYg
c2NoZW1lLCBTdHJpbmcmIGhvc3QsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgU3RyaW5nJiBw
YXRoLCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCkKIHsKICAg
ICBpZiAoYmVnaW4gPT0gZW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzMsMTIgKzIz
MiwxMiBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2lu
OwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbkhvc3QgPSBiZWdpbjsKLSAgICBjb25zdCBVQ2hhciog
YmVnaW5QYXRoID0gZW5kOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpblBvcnQgPSBudWxscHRyOwor
ICAgIGF1dG8gcG9zaXRpb24gPSBiZWdpbjsKKyAgICBhdXRvIGJlZ2luSG9zdCA9IGJlZ2luOwor
ICAgIGF1dG8gYmVnaW5QYXRoID0gZW5kOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2lu
UG9ydCA9IG51bGxwdHI7CiAKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90Q29sb25PclNsYXNo
Pihwb3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RDb2xv
bk9yU2xhc2g+KHBvc2l0aW9uLCBlbmQpOwogCiAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgewog
ICAgICAgICAvLyBob3N0CkBAIC0yNjMsMjEgKzI2MiwyMSBAQCBib29sIENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAgICAgICAgICAgICAvLyBzY2hlbWU6Ly9ob3N0IHx8IHNj
aGVtZTovLwogICAgICAgICAgICAgLy8gICAgICAgXiAgICAgICAgICAgICAgICBeCiAgICAgICAg
ICAgICBpZiAoIXBhcnNlU2NoZW1lKGJlZ2luLCBwb3NpdGlvbiwgc2NoZW1lKQotICAgICAgICAg
ICAgICAgIHx8ICFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJzonKQotICAgICAg
ICAgICAgICAgIHx8ICFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKQotICAg
ICAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKSkK
KyAgICAgICAgICAgICAgICB8fCAhc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24s
IGVuZCwgJzonKQorICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBl
Pihwb3NpdGlvbiwgZW5kLCAnLycpCisgICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5PENo
YXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICcvJykpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBiZWdpbkhvc3QgPSBwb3NpdGlvbjsKLSAgICAg
ICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBlbmQp
OworICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90Q29sb25PclNsYXNo
Pihwb3NpdGlvbiwgZW5kKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChwb3NpdGlvbiA8IGVu
ZCAmJiAqcG9zaXRpb24gPT0gJzonKSB7CiAgICAgICAgICAgICAvLyBob3N0OnBvcnQgfHwgc2No
ZW1lOi8vaG9zdDpwb3J0CiAgICAgICAgICAgICAvLyAgICAgXiAgICAgICAgICAgICAgICAgICAg
IF4KICAgICAgICAgICAgIGJlZ2luUG9ydCA9IHBvc2l0aW9uOwotICAgICAgICAgICAgc2tpcFVu
dGlsPFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpOworICAgICAgICAgICAgc2tpcFVudGlsPENo
YXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICcvJyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTMxMSw3ICszMTAsNyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBh
CiAvLyAgICAgICAgICAgICAgICAgICAgIDsgPHNjaGVtZT4gcHJvZHVjdGlvbiBmcm9tIFJGQyAz
OTg2CiAvLyBzY2hlbWUgICAgICA9IEFMUEhBICooIEFMUEhBIC8gRElHSVQgLyAiKyIgLyAiLSIg
LyAiLiIgKQogLy8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VT
Y2hlbWUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNjaGVt
ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdDo6cGFyc2VTY2hlbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW4s
IGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgU3RyaW5nJiBzY2hlbWUpCiB7CiAgICAgQVNTRVJU
KGJlZ2luIDw9IGVuZCk7CiAgICAgQVNTRVJUKHNjaGVtZS5pc0VtcHR5KCkpOwpAQCAtMzE5LDEy
ICszMTgsMTIgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogICAg
IGlmIChiZWdpbiA9PSBlbmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFVD
aGFyKiBwb3NpdGlvbiA9IGJlZ2luOworICAgIGF1dG8gcG9zaXRpb24gPSBiZWdpbjsKIAotICAg
IGlmICghc2tpcEV4YWN0bHk8VUNoYXIsIGlzQVNDSUlBbHBoYT4ocG9zaXRpb24sIGVuZCkpCisg
ICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJQWxwaGE+KHBvc2l0aW9u
LCBlbmQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlz
U2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hp
bGU8Q2hhcmFjdGVyVHlwZSwgaXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXI+KHBvc2l0aW9u
LCBlbmQpOwogCiAgICAgaWYgKHBvc2l0aW9uICE9IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMzM3LDcgKzMzNiw3IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dDo6cGEKIC8vICAgICAgICAgICAgICAgICAgIC8gIioiCiAvLyBob3N0LWNoYXIgICAgICAgICA9
IEFMUEhBIC8gRElHSVQgLyAiLSIKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3Q6OnBhcnNlSG9zdChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0
cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhv
c3QoY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwg
U3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFzV2lsZGNhcmQpCiB7CiAgICAgQVNTRVJUKGJlZ2lu
IDw9IGVuZCk7CiAgICAgQVNTRVJUKGhvc3QuaXNFbXB0eSgpKTsKQEAgLTM0NiwyNyArMzQ1LDI3
IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEKICAgICBpZiAoYmVn
aW4gPT0gZW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBVQ2hhciogcG9z
aXRpb24gPSBiZWdpbjsKKyAgICBhdXRvIHBvc2l0aW9uID0gYmVnaW47CiAKLSAgICBpZiAoc2tp
cEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcqJykpIHsKKyAgICBpZiAoc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJyonKSkgewogICAgICAgICBob3N0SGFz
V2lsZGNhcmQgPSB0cnVlOwogCiAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihwb3Np
dGlvbiwgZW5kLCAnLicpKQorICAgICAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+
KHBvc2l0aW9uLCBlbmQsICcuJykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgY29uc3QgVUNoYXIqIGhvc3RCZWdpbiA9IHBvc2l0aW9uOworICAgIGF1dG8gaG9zdEJl
Z2luID0gcG9zaXRpb247CiAKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAg
aWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKSkK
KyAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc0hvc3RDaGFyYWN0ZXI+
KHBvc2l0aW9uLCBlbmQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHNr
aXBXaGlsZTxVQ2hhciwgaXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAg
c2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7
CiAKLSAgICAgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICFza2lwRXhhY3RseTxVQ2hhcj4ocG9z
aXRpb24sIGVuZCwgJy4nKSkKKyAgICAgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICFza2lwRXhh
Y3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnLicpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMzc1LDEzICszNzQsMTMgQEAgYm9vbCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUGF0aChjb25zdCBVQ2hhciogYmVn
aW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgcGF0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQ
YXRoKGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQs
IFN0cmluZyYgcGF0aCkKIHsKICAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKICAgICBBU1NFUlQo
cGF0aC5pc0VtcHR5KCkpOwogICAgIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2lu
OwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyPihwb3NpdGlv
biwgZW5kKTsKKyAgICBhdXRvIHBvc2l0aW9uID0gYmVnaW47CisgICAgc2tpcFdoaWxlPENoYXJh
Y3RlclR5cGUsIGlzUGF0aENvbXBvbmVudENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CiAgICAg
Ly8gcGF0aC90by9maWxlLmpzP3F1ZXJ5PXN0cmluZyB8fCBwYXRoL3RvL2ZpbGUuanMjYW5jaG9y
CiAgICAgLy8gICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBe
CiAgICAgaWYgKHBvc2l0aW9uIDwgZW5kKQpAQCAtMzk2LDEzICszOTUsMTMgQEAgYm9vbCBDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogCiAvLyBwb3J0ICAgICAgICAgICAgICA9
ICI6IiAoIDEqRElHSVQgLyAiKiIgKQogLy8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdDo6cGFyc2VQb3J0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwg
T3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29sJiBwb3J0SGFzV2lsZGNhcmQpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3Q6OnBhcnNlUG9ydChjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFj
dGVyVHlwZSogZW5kLCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIGJvb2wmIHBvcnRIYXNXaWxk
Y2FyZCkKIHsKICAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKICAgICBBU1NFUlQoIXBvcnQpOwog
ICAgIEFTU0VSVCghcG9ydEhhc1dpbGRjYXJkKTsKICAgICAKLSAgICBpZiAoIXNraXBFeGFjdGx5
PFVDaGFyPihiZWdpbiwgZW5kLCAnOicpKQorICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVy
VHlwZT4oYmVnaW4sIGVuZCwgJzonKSkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgCiAgICAgaWYgKGJlZ2luID09IGVuZCkKQEAgLTQxNCw4ICs0MTMsOCBAQCBib29sIENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hp
bGU8VUNoYXIsIGlzQVNDSUlEaWdpdD4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBwb3NpdGlv
biA9IGJlZ2luOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJRGlnaXQ+KHBv
c2l0aW9uLCBlbmQpOwogICAgIAogICAgIGlmIChwb3NpdGlvbiAhPSBlbmQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTQzMSwyMSArNDMwLDIxIEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGEKIC8vIE1hdGNoIEJsaW5rJ3MgYmVoYXZpb3Igb2YgYWxsb3dpbmcg
YW4gZXF1YWwgc2lnbiB0byBhcHBlYXIgYW55d2hlcmUgaW4gdGhlIHZhbHVlIG9mIHRoZSBub25j
ZQogLy8gZXZlbiB0aG91Z2ggdGhpcyBkb2VzIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgQ29u
dGVudCBTZWN1cml0eSBQb2xpY3kgTGV2ZWwgMyBzcGVjLiwKIC8vIDxodHRwczovL3czYy5naXRo
dWIuaW8vd2ViYXBwc2VjLWNzcC8+ICgyOSBGZWJydWFyeSAyMDE2KS4KLXN0YXRpYyBib29sIGlz
Tm9uY2VDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHN0YXRpYyBib29sIGlzTm9uY2VDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJl
dHVybiBpc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyKGMpIHx8IGMgPT0gJz0nOwogfQogCiAv
LyBub25jZS1zb3VyY2UgICAgPSAiJ25vbmNlLSIgbm9uY2UtdmFsdWUgIiciCiAvLyBub25jZS12
YWx1ZSAgICAgPSBiYXNlNjQtdmFsdWUKLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdDo6cGFyc2VOb25jZVNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBl
bmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlTm9uY2VTb3VyY2UoY29uc3QgQ2hhcmFjdGVyVHlwZSog
YmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAgICBjb25zdCB1bnNpZ25lZCBu
b25jZVByZWZpeExlbmd0aCA9IDc7CiAgICAgaWYgKCFTdHJpbmdWaWV3KGJlZ2luLCBlbmQgLSBi
ZWdpbikuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCInbm9uY2UtIikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbiArIG5vbmNlUHJl
Zml4TGVuZ3RoOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbk5vbmNlVmFsdWUgPSBwb3NpdGlvbjsK
LSAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm9uY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwor
ICAgIGF1dG8gcG9zaXRpb24gPSBiZWdpbiArIG5vbmNlUHJlZml4TGVuZ3RoOworICAgIGF1dG8g
YmVnaW5Ob25jZVZhbHVlID0gcG9zaXRpb247CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzTm9uY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwogICAgIGlmIChwb3NpdGlvbiA+PSBl
bmQgfHwgcG9zaXRpb24gPT0gYmVnaW5Ob25jZVZhbHVlIHx8ICpwb3NpdGlvbiAhPSAnXCcnKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9ub25jZXMuYWRkKFN0cmluZyhiZWdpbk5vbmNl
VmFsdWUsIHBvc2l0aW9uIC0gYmVnaW5Ob25jZVZhbHVlKSk7CkBAIC00NTUsMTMgKzQ1NCwxMyBA
QCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAvLyBoYXNoLXNvdXJj
ZSAgICA9ICInIiBoYXNoLWFsZ29yaXRobSAiLSIgYmFzZTY0LXZhbHVlICInIgogLy8gaGFzaC1h
bGdvcml0aG0gPSAic2hhMjU2IiAvICJzaGEzODQiIC8gInNoYTUxMiIKIC8vIGJhc2U2NC12YWx1
ZSAgPSAxKiggQUxQSEEgLyBESUdJVCAvICIrIiAvICIvIiAvICItIiAvICJfIiApKjIoICI9IiAp
Ci1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZShj
b25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNl
SGFzaFNvdXJjZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogZW5kKQogewogICAgIGlmIChiZWdpbiA9PSBlbmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIGlmICghc2tpcEV4YWN0
bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICdcJycpKQorICAgIGF1dG8gcG9zaXRpb24gPSBiZWdp
bjsKKyAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICdc
JycpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdChwb3NpdGlvbiwgZW5kKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmgJ
KHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTkgKzU1LDE5IEBA
IHB1YmxpYzoKICAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOb25lOyB9CiAK
IHByaXZhdGU6Ci0gICAgdm9pZCBwYXJzZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFy
KiBlbmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcGFyc2Uo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCk7CiAK
LSAgICBib29sIHBhcnNlU291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVu
ZCwgU3RyaW5nJiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0
LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRj
YXJkKTsKLSAgICBib29sIHBhcnNlU2NoZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNo
YXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUpOwotICAgIGJvb2wgcGFyc2VIb3N0KGNvbnN0IFVDaGFy
KiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFzV2ls
ZGNhcmQpOwotICAgIGJvb2wgcGFyc2VQb3J0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNo
YXIqIGVuZCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29sJiBwb3J0SGFzV2lsZGNhcmQp
OwotICAgIGJvb2wgcGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVu
ZCwgU3RyaW5nJiBwYXRoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBi
b29sIHBhcnNlU291cmNlKGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0
ZXJUeXBlKiBlbmQsIFN0cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIE9wdGlvbmFsPHVpbnQx
Nl90PiYgcG9ydCwgU3RyaW5nJiBwYXRoLCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBv
cnRIYXNXaWxkY2FyZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9v
bCBwYXJzZVNjaGVtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVy
VHlwZSogZW5kLCBTdHJpbmcmIHNjaGVtZSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gYm9vbCBwYXJzZUhvc3QoY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW4sIGNvbnN0
IENoYXJhY3RlclR5cGUqIGVuZCwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFzV2lsZGNhcmQp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VQb3J0KGNv
bnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIE9wdGlv
bmFsPHVpbnQxNl90PiYgcG9ydCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlUGF0aChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBTdHJpbmcmIHBhdGgpOwogCi0g
ICAgYm9vbCBwYXJzZU5vbmNlU291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIq
IGVuZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZU5v
bmNlU291cmNlKGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQpOwogCiAgICAgYm9vbCBpc1Byb3RvY29sQWxsb3dlZEJ5U3Rhcihjb25zdCBVUkwmKSBj
b25zdDsKIAotICAgIGJvb2wgcGFyc2VIYXNoU291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29u
c3QgVUNoYXIqIGVuZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9v
bCBwYXJzZUhhc2hTb3VyY2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW4sIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGVuZCk7CiAKICAgICBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIG1fcG9s
aWN5OwogICAgIFZlY3RvcjxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U+IG1fbGlzdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
LmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBib29s
IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYXNWYWxpCiB2b2lkIFNWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6dHlw
ZUF0dHIpIHsKLSAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zv
cm1UeXBlKHZhbHVlKTsKKyAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VU
cmFuc2Zvcm1UeXBlKHZhbHVlKS52YWx1ZU9yKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNG
T1JNX1VOS05PV04pOwogICAgICAgICBpZiAobV90eXBlID09IFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdfVFJBTlNGT1JNX01BVFJJWCkKICAgICAgICAgICAgIG1fdHlwZSA9IFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV047CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzMzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzcsNTQgKzc3LDUyIEBAIGZhaWw6CiAgICAgcmVzdWx0LmNsZWFyKCk7CiB9CiAK
LXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25z
dCBTdHJpbmdWaWV3JiBwYXJzZSkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+
IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCiB7Ci0gICAgaWYgKHBh
cnNlLmlzRW1wdHkoKSkKKyAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gcGFyc2Uu
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcGFyc2UubGVuZ3Ro
KCk7Ci0KLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwotCi0gICAgVmVjdG9y
PFVuaXRCZXppZXI+IHJlc3VsdDsKLQotICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAg
ICB3aGlsZSAoY3VyIDwgZW5kKSB7Ci0gICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAg
ICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NB
KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gV1RGOjpnZXRD
aGFyYWN0ZXJzKHN0cmluZywgWyZdKGF1dG8gY3VyLCBhdXRvIGVuZCkgLT4gT3B0aW9uYWw8VmVj
dG9yPFVuaXRCZXppZXI+PiB7CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVu
ZCk7CiAKLSAgICAgICAgYXV0byBwb3NCID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgICAg
ICBpZiAoIXBvc0IpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBW
ZWN0b3I8VW5pdEJlemllcj4gcmVzdWx0OwogCi0gICAgICAgIGF1dG8gcG9zQyA9IHBhcnNlTnVt
YmVyKGN1ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NDKQotICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICB3
aGlsZSAoY3VyIDwgZW5kKSB7CisgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAg
ICAgICAgICAgYXV0byBwb3NBID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICAgICAg
aWYgKCFwb3NBKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAg
ICAgYXV0byBwb3NEID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpEb250U2tpcCk7Ci0gICAgICAgIGlmICghcG9zRCkKLSAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7
CisgICAgICAgICAgICBpZiAoIXBvc0IpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOworICAgICAg
ICAgICAgYXV0byBwb3NDID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICAgICAgaWYg
KCFwb3NDKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAg
aWYgKGN1ciA8IGVuZCAmJiAqY3VyID09ICc7JykgewotICAgICAgICAgICAgZGVsaW1QYXJzZWQg
PSB0cnVlOwotICAgICAgICAgICAgY3VyKys7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8g
cG9zRCA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNr
aXApOworICAgICAgICAgICAgaWYgKCFwb3NEKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKKyAg
ICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKLSAgICAgICAgcmVz
dWx0LmFwcGVuZChVbml0QmV6aWVyIHsgKnBvc0EsICpwb3NCLCAqcG9zQywgKnBvc0QgfSk7Ci0g
ICAgfQorICAgICAgICAgICAgaWYgKGN1ciA8IGVuZCAmJiAqY3VyID09ICc7JykgeworICAgICAg
ICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjdXIrKzsKKyAg
ICAgICAgICAgIH0KIAotICAgIGlmICghKGN1ciA9PSBlbmQgJiYgIWRlbGltUGFyc2VkKSkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlcyhjdXIsIGVuZCk7CisKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoVW5pdEJlemllciB7
ICpwb3NBLCAqcG9zQiwgKnBvc0MsICpwb3NEIH0pOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCEoY3VyID09IGVuZCAmJiAhZGVsaW1QYXJzZWQpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfSk7CiB9CiAKIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDEyICs4NiwyMiBA
QCBib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAKIE9wdGlvbmFsPEZs
b2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgU3RyaW5nVmlldyYg
dmFsdWUpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB2YWx1ZS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJh
Y3RlcnMgKyB2YWx1ZS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyh2
YWx1ZSwgWyZdKGF1dG8gcHRyLCBhdXRvIGVuZCkgeworICAgICAgICByZXR1cm4gcGFyc2VWaWV3
Qm94R2VuZXJpYyhwdHIsIGVuZCk7CisgICAgfSk7CiB9CiAKLU9wdGlvbmFsPEZsb2F0UmVjdD4g
U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBjLCBjb25zdCBVQ2hh
ciogZW5kLCBib29sIHZhbGlkYXRlKQorT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdC
b3g6OnBhcnNlVmlld0JveChjb25zdCBMQ2hhciomIHN0YXJ0LCBjb25zdCBMQ2hhciogZW5kLCBi
b29sIHZhbGlkYXRlKQoreworICAgIHJldHVybiBwYXJzZVZpZXdCb3hHZW5lcmljKHN0YXJ0LCBl
bmQsIHZhbGlkYXRlKTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6
OnBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBib29s
IHZhbGlkYXRlKQoreworICAgIHJldHVybiBwYXJzZVZpZXdCb3hHZW5lcmljKHN0YXJ0LCBlbmQs
IHZhbGlkYXRlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9u
YWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveEdlbmVyaWMoY29uc3Qg
Q2hhcmFjdGVyVHlwZSomIGMsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgYm9vbCB2YWxpZGF0
ZSkKIHsKICAgICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw5ICs2NiwxMiBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCByZXNldCgpOwogICAgIGJvb2wgcGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKICAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSk7CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goY29uc3QgTENoYXIqJiBzdGFydCwgY29uc3Qg
TENoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOwogICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gcGFyc2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGJv
b2wgdmFsaWRhdGUgPSB0cnVlKTsKIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveEdlbmVyaWMoY29u
c3QgQ2hhcmFjdGVyVHlwZSomIHN0YXJ0LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGJvb2wg
dmFsaWRhdGUgPSB0cnVlKTsKKwogICAgIFJlZjxTVkdBbmltYXRlZFJlY3Q+IG1fdmlld0JveDsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPiBtX3ByZXNlcnZlQXNwZWN0
UmF0aW87CiAgICAgYm9vbCBtX2lzVmlld0JveFZhbGlkIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0xlbmd0aExpc3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0xlbmd0aExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMjYgKzU3LDI0IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGNsZWFySXRlbXMoKTsKIAotICAgICAgICBhdXRvIHVw
Y29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFj
dGVycygpOwotICAgICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
OwotICAgICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7Ci0gICAg
ICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9
IHB0cjsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnLCcgJiYgIWlz
U1ZHU3BhY2UoKnB0cikpCi0gICAgICAgICAgICAgICAgcHRyKys7Ci0gICAgICAgICAgICBpZiAo
cHRyID09IHN0YXJ0KQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBTdHJp
bmcgdmFsdWVTdHJpbmcoc3RhcnQsIHB0ciAtIHN0YXJ0KTsKLSAgICAgICAgICAgIFNWR0xlbmd0
aFZhbHVlIHZhbHVlKG1fbGVuZ3RoTW9kZSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUuc2V0VmFs
dWVBc1N0cmluZyh2YWx1ZVN0cmluZykuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybiBXVEY6OmdldENoYXJhY3RlcnModmFsdWUsIFsmXShhdXRv
IHB0ciwgYXV0byBlbmQpIHsKKyAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvKiBzdGFydCA9IHB0cjsKKyAgICAgICAgICAgICAgICB3aGlsZSAocHRy
IDwgZW5kICYmICpwdHIgIT0gJywnICYmICFpc1NWR1NwYWNlKCpwdHIpKQorICAgICAgICAgICAg
ICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgICAgICBpZiAocHRyID09IHN0YXJ0KQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBTVkdM
ZW5ndGhWYWx1ZTo6Y29uc3RydWN0KG1fbGVuZ3RoTW9kZSwgU3RyaW5nVmlldyhzdGFydCwgcHRy
IC0gc3RhcnQpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGFwcGVuZChTVkdMZW5ndGg6OmNyZWF0ZShX
VEZNb3ZlKCp2YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNP
ckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGFwcGVu
ZChTVkdMZW5ndGg6OmNyZWF0ZSh2YWx1ZSkpOwotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IHB0ciA9PSBlbmQ7CisgICAgICAgICAgICByZXR1cm4gcHRyID09IGVuZDsKKyAgICAgICAgfSk7
CiAgICAgfQogCiAgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MSwxNyArNjEsMTcgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBsZW5ndGhUeXBlVG9T
dAogICAgIHJldHVybiAiIjsKIH0KIAotc3RhdGljIGlubGluZSBTVkdMZW5ndGhUeXBlIHBhcnNl
TGVuZ3RoVHlwZShjb25zdCBVQ2hhciogcHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBTVkdMZW5ndGhUeXBlIHBhcnNl
TGVuZ3RoVHlwZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUq
IGVuZCkKIHsKICAgICBpZiAocHRyID09IGVuZCkKICAgICAgICAgcmV0dXJuIFNWR0xlbmd0aFR5
cGU6Ok51bWJlcjsKIAotICAgIGNvbnN0IFVDaGFyIGZpcnN0Q2hhciA9ICpwdHI7CisgICAgYXV0
byBmaXJzdENoYXIgPSAqcHRyOwogCiAgICAgaWYgKCsrcHRyID09IGVuZCkKICAgICAgICAgcmV0
dXJuIGZpcnN0Q2hhciA9PSAnJScgPyBTVkdMZW5ndGhUeXBlOjpQZXJjZW50YWdlIDogU1ZHTGVu
Z3RoVHlwZTo6VW5rbm93bjsKIAotICAgIGNvbnN0IFVDaGFyIHNlY29uZENoYXIgPSAqcHRyOwor
ICAgIGF1dG8gc2Vjb25kQ2hhciA9ICpwdHI7CiAKICAgICBpZiAoKytwdHIgIT0gZW5kKQogICAg
ICAgICByZXR1cm4gU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bjsKQEAgLTE4MCw3ICsxODAsMTUgQEAg
U1ZHTGVuZ3RoVmFsdWU6OlNWR0xlbmd0aFZhbHVlKGNvbnN0IFNWRwogICAgIHNldFZhbHVlKGNv
bnRleHQsIHZhbHVlKTsKIH0KIAotU1ZHTGVuZ3RoVmFsdWUgU1ZHTGVuZ3RoVmFsdWU6OmNvbnN0
cnVjdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmlu
ZywgU1ZHUGFyc2luZ0Vycm9yJiBwYXJzZUVycm9yLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01v
ZGUgbmVnYXRpdmVWYWx1ZXNNb2RlKQorT3B0aW9uYWw8U1ZHTGVuZ3RoVmFsdWU+IFNWR0xlbmd0
aFZhbHVlOjpjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlLCBjb25zdCBTdHJpbmdW
aWV3JiB2YWx1ZUFzU3RyaW5nKQoreworICAgIFNWR0xlbmd0aFZhbHVlIGxlbmd0aCB7IGxlbmd0
aE1vZGUgfTsKKyAgICBpZiAobGVuZ3RoLnNldFZhbHVlQXNTdHJpbmcodmFsdWVBc1N0cmluZyku
aGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJu
IGxlbmd0aDsKK30KKworU1ZHTGVuZ3RoVmFsdWUgU1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVjdChT
VkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlQXNTdHJpbmcs
IFNWR1BhcnNpbmdFcnJvciYgcGFyc2VFcnJvciwgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2Rl
IG5lZ2F0aXZlVmFsdWVzTW9kZSkKIHsKICAgICBTVkdMZW5ndGhWYWx1ZSBsZW5ndGgobGVuZ3Ro
TW9kZSk7CiAKQEAgLTIzOSw3ICsyNDcsNyBAQCBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IFNWR0xl
bmd0aFZhbHVlOjp0CiAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobGVuZ3Ro
LnZhbHVlSW5TcGVjaWZpZWRVbml0cygpLCBsZW5ndGhUeXBlVG9QcmltaXRpdmVUeXBlKGxlbmd0
aC5sZW5ndGhUeXBlKCkpKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6
OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nLCBTVkdMZW5ndGhN
b2RlIGxlbmd0aE1vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFs
dWVBc1N0cmluZyhjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFzU3RyaW5nLCBTVkdMZW5ndGhNb2Rl
IGxlbmd0aE1vZGUpCiB7CiAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAwOwogICAgIG1f
bGVuZ3RoTW9kZSA9IGxlbmd0aE1vZGU7CkBAIC0yODYsMjYgKzI5NCwyNCBAQCBFeGNlcHRpb25P
cjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsCiAgICAgcmV0dXJuIHNldFZhbHVlKGNvbnRl
eHQsIHZhbHVlKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZh
bHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCitFeGNlcHRpb25Pcjx2b2lkPiBTVkdM
ZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCiB7
CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBh
dXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZlcnRl
ZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAg
ICBhdXRvIGNvbnZlcnRlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lw
cGluZ1BvbGljeTo6RG9udFNraXApOwotICAgIGlmICghY29udmVydGVkTnVtYmVyKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKLQotICAgIGF1dG8gbGVuZ3RoVHlw
ZSA9IHBhcnNlTGVuZ3RoVHlwZShwdHIsIGVuZCk7Ci0gICAgaWYgKGxlbmd0aFR5cGUgPT0gU1ZH
TGVuZ3RoVHlwZTo6VW5rbm93bikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVy
cm9yIH07CisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyhzdHJpbmcsIFsmXShhdXRvIHB0
ciwgYXV0byBlbmQpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byBjb252ZXJ0
ZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRv
bnRTa2lwKTsKKyAgICAgICAgaWYgKCFjb252ZXJ0ZWROdW1iZXIpCisgICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKworICAgICAgICBhdXRvIGxlbmd0aFR5cGUg
PSBwYXJzZUxlbmd0aFR5cGUocHRyLCBlbmQpOworICAgICAgICBpZiAobGVuZ3RoVHlwZSA9PSBT
VkdMZW5ndGhUeXBlOjpVbmtub3duKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5
bnRheEVycm9yIH07CiAKLSAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwotICAgIG1fdmFs
dWVJblNwZWNpZmllZFVuaXRzID0gKmNvbnZlcnRlZE51bWJlcjsKLSAgICByZXR1cm4geyB9Owor
ICAgICAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOworICAgICAgICBtX3ZhbHVlSW5TcGVj
aWZpZWRVbml0cyA9ICpjb252ZXJ0ZWROdW1iZXI7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpjb252ZXJ0VG9TcGVj
aWZpZWRVbml0cyhjb25zdCBTVkdMZW5ndGhDb250ZXh0JiBjb250ZXh0LCBTVkdMZW5ndGhUeXBl
IGxlbmd0aFR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuaAkocmV2aXNp
b24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDEzICs1OCwxNCBAQCBlbnVtIGNsYXNzIFNWR0xlbmd0aE5lZ2F0aXZl
VmFsdWVzTW9kZSA6CiBjbGFzcyBTVkdMZW5ndGhWYWx1ZSB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgU1ZHTGVuZ3RoVmFsdWUoU1ZHTGVuZ3RoTW9kZSA9IFNW
R0xlbmd0aE1vZGU6Ok90aGVyLCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcgPSBTdHJpbmco
KSk7CisgICAgU1ZHTGVuZ3RoVmFsdWUoU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90
aGVyLCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcgPSB7IH0pOwogICAgIFNWR0xlbmd0aFZh
bHVlKGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cywgU1ZHTGVuZ3RoVHlwZSwgU1ZHTGVuZ3Ro
TW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVyKTsKICAgICBTVkdMZW5ndGhWYWx1ZShjb25zdCBT
VkdMZW5ndGhDb250ZXh0JiwgZmxvYXQsIFNWR0xlbmd0aFR5cGUgPSBTVkdMZW5ndGhUeXBlOjpO
dW1iZXIsIFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlcik7CiAKLSAgICBzdGF0
aWMgU1ZHTGVuZ3RoVmFsdWUgY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZyYs
IFNWR1BhcnNpbmdFcnJvciYsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA9IFNWR0xlbmd0
aE5lZ2F0aXZlVmFsdWVzTW9kZTo6QWxsb3cpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdMZW5n
dGhWYWx1ZT4gY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAg
ICBzdGF0aWMgU1ZHTGVuZ3RoVmFsdWUgY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0
cmluZ1ZpZXcmLCBTVkdQYXJzaW5nRXJyb3ImLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUg
PSBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGU6OkFsbG93KTsKICAgICBzdGF0aWMgU1ZHTGVu
Z3RoVmFsdWUgYmxlbmQoY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0
aFZhbHVlJiB0bywgZmxvYXQgcHJvZ3Jlc3MpOwotICAgIAorCiAgICAgc3RhdGljIFNWR0xlbmd0
aFZhbHVlIGZyb21DU1NQcmltaXRpdmVWYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYpOwog
ICAgIHN0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvQ1NTUHJpbWl0aXZlVmFsdWUoY29u
c3QgU1ZHTGVuZ3RoVmFsdWUmKTsKIApAQCAtODUsOCArODYsOCBAQCBwdWJsaWM6CiAgICAgRXhj
ZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZsb2F0KTsK
ICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0Jiwg
ZmxvYXQsIFNWR0xlbmd0aFR5cGUsIFNWR0xlbmd0aE1vZGUpOwogCi0gICAgRXhjZXB0aW9uT3I8
dm9pZD4gc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2
b2lkPiBzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYsIFNWR0xlbmd0aE1vZGUpOworICAg
IEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYpOwor
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYs
IFNWR0xlbmd0aE1vZGUpOwogCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gY29udmVydFRvU3BlY2lm
aWVkVW5pdHMoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIFNWR0xlbmd0aFR5cGUpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDIwICs1
NCwxOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBjbGVhckl0ZW1zKCk7CiAKLSAgICAgICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRl
ZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHZhbHVlLmxlbmd0aCgp
OwotCi0gICAgICAgIC8vIFRoZSBzcGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNuJ3Qg
YWxsb3cgbGVhZGluZyB3aGl0ZXNwYWNlLgotICAgICAgICAvLyBXZSBtaWdodCBjaG9vc2UgdG8g
dmlvbGF0ZSB0aGF0IGludGVudGlvbmFsbHkuCi0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsK
LSAgICAgICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAgICAg
ICAgICAgaWYgKCFudW1iZXIpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBh
cHBlbmQoU1ZHTnVtYmVyOjpjcmVhdGUoKm51bWJlcikpOwotICAgICAgICB9CisgICAgICAgIHJl
dHVybiBXVEY6OmdldENoYXJhY3RlcnModmFsdWUsIFsmXShhdXRvIHB0ciwgYXV0byBlbmQpIHsK
KyAgICAgICAgICAgIC8vIFRoZSBzcGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNuJ3Qg
YWxsb3cgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgICAgICAgICAgLy8gV2UgbWlnaHQgY2hvb3Nl
IHRvIHZpb2xhdGUgdGhhdCBpbnRlbnRpb25hbGx5LgorICAgICAgICAgICAgd2hpbGUgKHB0ciA8
IGVuZCkgeworICAgICAgICAgICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBl
bmQpOworICAgICAgICAgICAgICAgIGlmICghbnVtYmVyKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVyOjpjcmVhdGUoKm51bWJlcikp
OworICAgICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBwdHIgPT0gZW5kOworICAgICAgICAg
ICAgcmV0dXJuIHB0ciA9PSBlbmQ7CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIFN0cmluZyB2
YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXJzZXJVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXJzZXJVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDEzICsx
NDksMTIgQEAgT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFyKgogCiBPcHRp
b25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nLCBTdWZmaXhT
a2lwcGluZ1BvbGljeSBza2lwKQogewotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0g
c3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1
cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmlu
Zy5sZW5ndGgoKTsKLSAgICBhdXRvIHJlc3VsdCA9IGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVu
ZCwgc2tpcCk7Ci0gICAgaWYgKHB0ciAhPSBlbmQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHN0
cmluZywgW3NraXBdKGF1dG8gcHRyLCBhdXRvIGVuZCkgLT4gT3B0aW9uYWw8ZmxvYXQ+IHsKKyAg
ICAgICAgYXV0byByZXN1bHQgPSBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIHNraXApOwor
ICAgICAgICBpZiAocHRyICE9IGVuZCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSk7CiB9CiAKIC8vIG9ubHkgdXNlZCB0byBw
YXJzZSBsYXJnZUFyY0ZsYWcgYW5kIHN3ZWVwRmxhZyB3aGljaCBtdXN0IGJlIGEgIjAiIG9yICIx
IgpAQCAtMTk1LDI1ICsxOTQsMjMgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+
IHBhcnNlTgogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgc3RyaW5nLmxlbmd0aCgpOwot
Ci0gICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgIGlmICgheCkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHN0
cmluZywgW10oYXV0byBwdHIsIGF1dG8gZW5kKSAtPiBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQs
IGZsb2F0Pj4geworICAgICAgICBhdXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7CisgICAg
ICAgIGlmICgheCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAo
Y3VyID09IGVuZCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4LCAqeCk7CisgICAg
ICAgIGlmIChwdHIgPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4
LCAqeCk7CiAKLSAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBp
bmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICBpZiAoIXkpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lw
cGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAoIXkpCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKGN1ciAhPSBlbmQpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgIGlmIChwdHIgIT0gZW5kKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwgKnkpOworICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp5KTsKKyAgICB9KTsKIH0KIAogT3B0aW9u
YWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCkBAIC0y
MjEsODAgKzIxOCw3NSBAQCBPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZVBvaW50KGNvbnN0IFN0
CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
OwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBp
ZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCkpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyhzdHJpbmcsIFtdKGF1dG8g
cHRyLCBhdXRvIGVuZCkgLT4gT3B0aW9uYWw8RmxvYXRQb2ludD4geworICAgICAgICBpZiAoIXNr
aXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXIsIGVuZCk7Ci0g
ICAgaWYgKCFwb2ludCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0
byBwb2ludCA9IHBhcnNlRmxvYXRQb2ludChwdHIsIGVuZCk7CisgICAgICAgIGlmICghcG9pbnQp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgLy8gRGlzYWxsb3cgYW55
dGhpbmcgZXhjZXB0IHNwYWNlcyBhdCB0aGUgZW5kLgotICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjdXIsIGVuZCk7Ci0gICAgCi0gICAgcmV0dXJuIHBvaW50OworICAgICAgICAvLyBEaXNhbGxv
dyBhbnl0aGluZyBleGNlcHQgc3BhY2VzIGF0IHRoZSBlbmQuCisgICAgICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhwdHIsIGVuZCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcG9pbnQ7Cisg
ICAgfSk7CiB9CiAKIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNvbnN0IFN0cmluZ1Zp
ZXcmIHN0cmluZykKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3Ro
KCk7Ci0gICAgCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKLSAgICAKLSAg
ICBhdXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7Ci0gICAgaWYgKCF4KQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsK
LSAgICBpZiAoIXkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byB3aWR0
aCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKLSAgICBpZiAoIXdpZHRoKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQs
IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Ci0gICAgaWYgKCFoZWlnaHQpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyhz
dHJpbmcsIFtdKGF1dG8gcHRyLCBhdXRvIGVuZCkgLT4gT3B0aW9uYWw8RmxvYXRSZWN0PiB7Cisg
ICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7CisgICAgICAgIAorICAgICAg
ICBhdXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7CisgICAgICAgIGlmICgheCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVy
KHB0ciwgZW5kKTsKKyAgICAgICAgaWYgKCF5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICAg
ICAgaWYgKCF3aWR0aCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpEb250U2tpcCk7CisgICAgICAgIGlmICghaGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGbG9hdFJlY3QgeyAqeCwgKnksICp3aWR0aCwgKmhl
aWdodCB9OworICAgICAgICByZXR1cm4gRmxvYXRSZWN0IHsgKngsICp5LCAqd2lkdGgsICpoZWln
aHQgfTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiBwYXJzZUdseXBo
TmFtZShjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCiB7CiAgICAgLy8gRklYTUU6IFBhcnNpbmcg
ZXJyb3IgZGV0ZWN0aW9uIGlzIG1pc3NpbmcuCiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciog
cHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIg
KyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsK
KyAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHN0cmluZywgW10oYXV0byBwdHIsIGF1dG8g
ZW5kKSAtPiBPcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHsKKyAgICAgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKHB0ciwgZW5kKTsKIAotICAgIEhhc2hTZXQ8U3RyaW5nPiB2YWx1ZXM7CisgICAg
ICAgIEhhc2hTZXQ8U3RyaW5nPiB2YWx1ZXM7CiAKLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0g
ICAgICAgIC8vIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3Bh
Y2UgYmVmb3JlIGFuZCBhZnRlciBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICAg
IGNvbnN0IFVDaGFyKiBpbnB1dFN0YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5k
ICYmICpwdHIgIT0gJywnKQotICAgICAgICAgICAgKytwdHI7CisgICAgICAgIHdoaWxlIChwdHIg
PCBlbmQpIHsKKyAgICAgICAgICAgIC8vIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNl
LCBhbmQgd2hpdGUgc3BhY2UgYmVmb3JlIGFuZCBhZnRlciBzZXBhcmF0b3JzLCB3aWxsIGJlIGln
bm9yZWQuCisgICAgICAgICAgICBhdXRvKiBpbnB1dFN0YXJ0ID0gcHRyOworICAgICAgICAgICAg
d2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJykKKyAgICAgICAgICAgICAgICArK3B0cjsK
IAotICAgICAgICBpZiAocHRyID09IGlucHV0U3RhcnQpCi0gICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmIChwdHIgPT0gaW5wdXRTdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBhbnkgd2hp
dGVzcGFjZQotICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRFbmQgPSBwdHIgLSAxOwotICAgICAg
ICB3aGlsZSAoaW5wdXRTdGFydCA8IGlucHV0RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5kKSkK
LSAgICAgICAgICAgIC0taW5wdXRFbmQ7CisgICAgICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBm
cm9tIHRoZSA7IHRvIGlnbm9yZSBhbnkgd2hpdGVzcGFjZQorICAgICAgICAgICAgYXV0byogaW5w
dXRFbmQgPSBwdHIgLSAxOworICAgICAgICAgICAgd2hpbGUgKGlucHV0U3RhcnQgPCBpbnB1dEVu
ZCAmJiBpc1NWR1NwYWNlKCppbnB1dEVuZCkpCisgICAgICAgICAgICAgICAgLS1pbnB1dEVuZDsK
IAotICAgICAgICB2YWx1ZXMuYWRkKFN0cmluZyhpbnB1dFN0YXJ0LCBpbnB1dEVuZCAtIGlucHV0
U3RhcnQgKyAxKSk7Ci0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0
ciwgZW5kLCAnLCcpOwotICAgIH0KKyAgICAgICAgICAgIHZhbHVlcy5hZGQoU3RyaW5nKGlucHV0
U3RhcnQsIGlucHV0RW5kIC0gaW5wdXRTdGFydCArIDEpKTsKKyAgICAgICAgICAgIHNraXBPcHRp
b25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnLCcpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB2YWx1ZXM7CisgICAgfSk7CiAKLSAgICByZXR1cm4gdmFsdWVzOwogfQogCi1z
dGF0aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFVuaWNvZGVSYW5nZT4gcGFyc2VVbmljb2RlUmFuZ2Uo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAg
IGlmIChsZW5ndGggPCAyIHx8IGNoYXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJhY3RlcnNbMV0g
IT0gJysnKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMzAzLDggKzI5NSw4IEBA
IHN0YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY28KICAgICB1bnNpZ25lZCBz
dGFydFJhbmdlID0gMDsKICAgICB1bnNpZ25lZCBzdGFydExlbmd0aCA9IDA7CiAKLSAgICBjb25z
dCBVQ2hhciogcHRyID0gY2hhcmFjdGVycyArIDI7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGNo
YXJhY3RlcnMgKyBsZW5ndGg7CisgICAgYXV0byogcHRyID0gY2hhcmFjdGVycyArIDI7CisgICAg
YXV0byogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKICAgICB3aGlsZSAocHRyIDwgZW5kKSB7
CiAgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpwdHIpKQogICAgICAgICAgICAgYnJlYWs7
CkBAIC0zNjksMzAgKzM2MSwyOCBAQCBPcHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywg
SGFzaFNlCiB7CiAgICAgLy8gRklYTUU6IFBhcnNpbmcgZXJyb3IgZGV0ZWN0aW9uIGlzIG1pc3Np
bmcuCiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRl
ZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAg
ICBVbmljb2RlUmFuZ2VzIHJhbmdlTGlzdDsKLSAgICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nTGlz
dDsKKyAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHN0cmluZywgW10oYXV0byBwdHIsIGF1
dG8gZW5kKSAtPiBPcHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNldDxTdHJp
bmc+Pj4geworICAgICAgICBVbmljb2RlUmFuZ2VzIHJhbmdlTGlzdDsKKyAgICAgICAgSGFzaFNl
dDxTdHJpbmc+IHN0cmluZ0xpc3Q7CiAKLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAg
IGNvbnN0IFVDaGFyKiBpbnB1dFN0YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5k
ICYmICpwdHIgIT0gJywnKQotICAgICAgICAgICAgKytwdHI7CisgICAgICAgIHdoaWxlIChwdHIg
PCBlbmQpIHsKKyAgICAgICAgICAgIGF1dG8qIGlucHV0U3RhcnQgPSBwdHI7CisgICAgICAgICAg
ICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gJywnKQorICAgICAgICAgICAgICAgICsrcHRy
OwogCi0gICAgICAgIGlmIChwdHIgPT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgaWYgKHB0ciA9PSBpbnB1dFN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgIC8vIFRyeSB0byBwYXJzZSB1bmljb2RlIHJhbmdlIGZpcnN0Ci0gICAgICAg
IGlmIChhdXRvIHJhbmdlID0gcGFyc2VVbmljb2RlUmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5w
dXRTdGFydCkpCi0gICAgICAgICAgICByYW5nZUxpc3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0xpc3QuYWRkKFN0cmluZyhpbnB1dFN0
YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSk7Ci0gICAgICAgICsrcHRyOwotICAgIH0KKyAgICAgICAg
ICAgIC8vIFRyeSB0byBwYXJzZSB1bmljb2RlIHJhbmdlIGZpcnN0CisgICAgICAgICAgICBpZiAo
YXV0byByYW5nZSA9IHBhcnNlVW5pY29kZVJhbmdlKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3Rh
cnQpKQorICAgICAgICAgICAgICAgIHJhbmdlTGlzdC5hcHBlbmQoV1RGTW92ZSgqcmFuZ2UpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdHJpbmdMaXN0LmFkZChTdHJpbmco
aW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFydCkpOworICAgICAgICAgICAgKytwdHI7CisgICAg
ICAgIH0KIAotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYW5nZUxpc3QsIHN0cmluZ0xpc3Qp
OworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmFuZ2VMaXN0LCBzdHJpbmdMaXN0KTsK
KyAgICB9KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBP
cHRpb25hbDxGbG9hdFBvaW50PiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KGNvbnN0IENoYXJhY3Rl
clR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB0eXBlZGVmIHN0ZDo6
cGFpcjxVQ2hhcjMyLCBVQ2hhcjMyPiBVbmljb2RlUmFuZ2U7CiB0eXBlZGVmIFZlY3RvcjxVbmlj
b2RlUmFuZ2U+IFVuaWNvZGVSYW5nZXM7CkBAIC04NCwyNyArODMsMTMgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleAogICAgIHJldHVybiBwdHIgPCBlbmQ7CiB9CiAK
LWNvbnN0ZXhwciBib29sIHNraXBTdHJpbmcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFy
KiBlbmQsIGNvbnN0IFVDaGFyKiBuYW1lLCBpbnQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZSwgdW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+IGNvbnN0ZXhwciBib29sIHNr
aXBTdHJpbmcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSog
ZW5kLCBjb25zdCBDaGFyYWN0ZXJUeXBlKCZzdHIpW2NoYXJhY3RlckNvdW50XSkKIHsKLSAgICBp
ZiAoZW5kIC0gcHRyIDwgbGVuZ3RoKQorICAgIGlmIChlbmQgLSBwdHIgPCBjaGFyYWN0ZXJDb3Vu
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtZW1jbXAobmFtZSwgcHRyLCBzaXpl
b2YoVUNoYXIpICogbGVuZ3RoKSkKKyAgICBpZiAobWVtY21wKHN0ciwgcHRyLCBzaXplb2YoQ2hh
cmFjdGVyVHlwZSkgKiBjaGFyYWN0ZXJDb3VudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBwdHIgKz0gbGVuZ3RoOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx1bnNpZ25l
ZCBjaGFyYWN0ZXJDb3VudD4KLWlubGluZSBib29sIHNraXBTdHJpbmcoY29uc3QgVUNoYXIqJiBw
dHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgKCZzdHIpW2NoYXJhY3RlckNvdW50XSkK
LXsKLSAgICBpbnQgbGVuZ3RoID0gY2hhcmFjdGVyQ291bnQgLSAxOwotICAgIGlmIChlbmQgLSBw
dHIgPCBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChwdHJbaV0gIT0gc3RyW2ldKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBwdHIgKz0gbGVuZ3RoOworICAgIHB0ciAr
PSBjaGFyYWN0ZXJDb3VudDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQb2ludExpc3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BvaW50TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwzNiArNTQsMzQgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgY2xlYXJJdGVtcygpOwogCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAg
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyB2YWx1ZS5sZW5ndGgoKTsKLQotICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwotCi0gICAgICAgIGJvb2wgZGVsaW1QYXJz
ZWQgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKGN1ciA8IGVuZCkgewotICAgICAgICAgICAgZGVs
aW1QYXJzZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgYXV0byB4UG9zID0gcGFyc2VOdW1iZXIo
Y3VyLCBlbmQpOwotICAgICAgICAgICAgaWYgKCF4UG9zKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQs
IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Ci0gICAgICAgICAgICBpZiAoIXlQb3Mp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgICAgIHJldHVybiBXVEY6Omdl
dENoYXJhY3RlcnModmFsdWUsIFsmXShhdXRvIGN1ciwgYXV0byBlbmQpIHsKICAgICAgICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKLSAgICAgICAgICAgIGlmIChjdXIg
PCBlbmQgJiYgKmN1ciA9PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgY3VyKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOworICAgICAgICAgICAgYm9vbCBkZWxpbVBh
cnNlZCA9IGZhbHNlOworICAgICAgICAgICAgd2hpbGUgKGN1ciA8IGVuZCkgeworICAgICAgICAg
ICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBhdXRvIHhQb3Mg
PSBwYXJzZU51bWJlcihjdXIsIGVuZCk7CisgICAgICAgICAgICAgICAgaWYgKCF4UG9zKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBhdXRvIHlQ
b3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lw
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXlQb3MpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVu
ZCk7CisKKyAgICAgICAgICAgICAgICBpZiAoY3VyIDwgZW5kICYmICpjdXIgPT0gJywnKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgY3VyKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKLSAgICAgICAgICAgIGFwcGVuZChTVkdQb2ludDo6Y3Jl
YXRlKHsgKnhQb3MsICp5UG9zIH0pKTsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIGFwcGVu
ZChTVkdQb2ludDo6Y3JlYXRlKHsgKnhQb3MsICp5UG9zIH0pKTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICByZXR1cm4gIWRlbGltUGFyc2VkOworICAgICAgICAgICAgcmV0dXJuICFkZWxpbVBh
cnNlZDsKKyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBj
b25zdCBvdmVycmlkZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBAIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmUK
IHsKIH0KIAotU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKQog
ewogICAgIHBhcnNlKHZhbHVlKTsKIH0KQEAgLTU5LDE5ICs1OSwzMCBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2
b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoY29uc3QgU3RyaW5nVmlldyYg
dmFsdWUpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZh
bHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogYmVnaW4gPSB1
cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgcGFyc2VJbnRlcm5hbChiZWdpbiwgYmVnaW4gKyB2
YWx1ZS5sZW5ndGgoKSwgdHJ1ZSk7CisgICAgcmV0dXJuIFdURjo6Z2V0Q2hhcmFjdGVycyh2YWx1
ZSwgWyZdKGF1dG8gcHRyLCBhdXRvIGVuZCkgeworICAgICAgICBwYXJzZUludGVybmFsKHB0ciwg
ZW5kLCB0cnVlKTsKKyAgICB9KTsKIH0KIAotYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWU6OnBhcnNlKGNvbnN0IFVDaGFyKiYgY3VyclBhcmFtLCBjb25zdCBVQ2hhciogZW5kLCBib29s
IHZhbGlkYXRlKQorYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlKGNvbnN0
IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKQogewotICAgIHJl
dHVybiBwYXJzZUludGVybmFsKGN1cnJQYXJhbSwgZW5kLCB2YWxpZGF0ZSk7CisgICAgcmV0dXJu
IHBhcnNlSW50ZXJuYWwocHRyLCBlbmQsIHZhbGlkYXRlKTsKIH0KIAotYm9vbCBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwoY29uc3QgVUNoYXIqJiBjdXJyUGFyYW0s
IGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCitib29sIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZTo6cGFyc2UoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGJv
b2wgdmFsaWRhdGUpCit7CisgICAgcmV0dXJuIHBhcnNlSW50ZXJuYWwocHRyLCBlbmQsIHZhbGlk
YXRlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENo
YXJhY3RlclR5cGUgZGVmZXJEZXNjW10gPSAgeydkJywgJ2UnLCAnZicsICdlJywgJ3InfTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG5v
bmVEZXNjW10gPSAgeyduJywgJ28nLCAnbicsICdlJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBtZWV0RGVzY1tdID0gIHsnbScsICdl
JywgJ2UnLCAndCd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHBy
IENoYXJhY3RlclR5cGUgc2xpY2VEZXNjW10gPSAgeydzJywgJ2wnLCAnaScsICdjJywgJ2UnfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2Jvb2wgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlOjpwYXJzZUludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyUGFy
YW0sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKIHsKICAgICBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hN
SURZTUlEOwogICAgIFNWR01lZXRPclNsaWNlVHlwZSBtZWV0T3JTbGljZSA9IFNWR19NRUVUT1JT
TElDRV9NRUVUOwpAQCAtODMsNyArOTQsNyBAQCBib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZTo6cGFyc2VJCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICgqY3VyclBhcmFt
ID09ICdkJykgewotICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJkZWZl
ciIpKSB7CisgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgZGVmZXJEZXNj
PENoYXJhY3RlclR5cGU+KSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJTa2lwcGVkIHRvIHBh
cnNlIGV4Y2VwdCBmb3IgKmRlZmVyKiB2YWx1ZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQpAQCAtOTcsNyArMTA4LDcgQEAgYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWU6OnBhcnNlSQogICAgIH0KIAogICAgIGlmICgqY3VyclBhcmFtID09ICduJykgewot
ICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJub25lIikpIHsKKyAgICAg
ICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCBub25lRGVzYzxDaGFyYWN0ZXJUeXBl
PikpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJzZSBleGNlcHQgZm9y
ICpub25lKiB2YWx1ZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpA
QCAtMTU2LDEzICsxNjcsMTMgQEAgYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBh
cnNlSQogCiAgICAgaWYgKGN1cnJQYXJhbSA8IGVuZCkgewogICAgICAgICBpZiAoKmN1cnJQYXJh
bSA9PSAnbScpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwg
Im1lZXQiKSkgeworICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCBt
ZWV0RGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlNr
aXBwZWQgdG8gcGFyc2UgZXhjZXB0IGZvciAqbWVldCogb3IgKnNsaWNlKiB2YWx1ZS4iKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpOwogICAgICAgICB9IGVsc2UgaWYg
KCpjdXJyUGFyYW0gPT0gJ3MnKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBh
cmFtLCBlbmQsICJzbGljZSIpKSB7CisgICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBh
cmFtLCBlbmQsIHNsaWNlRGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIlNraXBwZWQgdG8gcGFyc2UgZXhjZXB0IGZvciAqbWVldCogb3IgKnNsaWNlKiB2
YWx1ZS4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CkBA
IC0zMjgsNTIgKzMzOSw0NCBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhCiAKIFN0cmluZyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnZhbHVlQXNTdHJpbmco
KSBjb25zdAogewotICAgIFN0cmluZyBhbGlnblR5cGU7CisgICAgYXV0byBhbGlnblR5cGUgPSBb
Jl0oKSB7CisgICAgICAgIHN3aXRjaCAobV9hbGlnbikgeworICAgICAgICBjYXNlIFNWR19QUkVT
RVJWRUFTUEVDVFJBVElPX05PTkU6CisgICAgICAgICAgICByZXR1cm4gIm5vbmUiOworICAgICAg
ICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlOOgorICAgICAgICAgICAgcmV0
dXJuICJ4TWluWU1pbiI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1J
RFlNSU46CisgICAgICAgICAgICByZXR1cm4gInhNaWRZTWluIjsKKyAgICAgICAgY2FzZSBTVkdf
UFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JTjoKKyAgICAgICAgICAgIHJldHVybiAieE1heFlN
aW4iOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlEOgorICAg
ICAgICAgICAgcmV0dXJuICJ4TWluWU1pZCI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQ
RUNUUkFUSU9fWE1JRFlNSUQ6CisgICAgICAgICAgICByZXR1cm4gInhNaWRZTWlkIjsKKyAgICAg
ICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRDoKKyAgICAgICAgICAgIHJl
dHVybiAieE1heFlNaWQiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hN
SU5ZTUFYOgorICAgICAgICAgICAgcmV0dXJuICJ4TWluWU1heCI7CisgICAgICAgIGNhc2UgU1ZH
X1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNQVg6CisgICAgICAgICAgICByZXR1cm4gInhNaWRZ
TWF4IjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1BWDoKKyAg
ICAgICAgICAgIHJldHVybiAieE1heFlNYXgiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1VOS05PV046CisgICAgICAgICAgICByZXR1cm4gInVua25vd24iOworICAgICAg
ICB9OwogCi0gICAgc3dpdGNoIChtX2FsaWduKSB7Ci0gICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BF
Q1RSQVRJT19OT05FOgotICAgICAgICBhbGlnblR5cGUgPSAibm9uZSI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSU46Ci0gICAgICAgIGFs
aWduVHlwZSA9ICJ4TWluWU1pbiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNF
UlZFQVNQRUNUUkFUSU9fWE1JRFlNSU46Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlkWU1pbiI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlN
SU46Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWF4WU1pbiI7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSUQ6Ci0gICAgICAgIGFsaWduVHlw
ZSA9ICJ4TWluWU1pZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQ
RUNUUkFUSU9fWE1JRFlNSUQ6Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlkWU1pZCI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSUQ6Ci0g
ICAgICAgIGFsaWduVHlwZSA9ICJ4TWF4WU1pZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNQVg6Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4
TWluWU1heCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFU
SU9fWE1JRFlNQVg6Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlkWU1heCI7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNQVg6Ci0gICAgICAg
IGFsaWduVHlwZSA9ICJ4TWF4WU1heCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BS
RVNFUlZFQVNQRUNUUkFUSU9fVU5LTk9XTjoKLSAgICAgICAgYWxpZ25UeXBlID0gInVua25vd24i
OwotICAgICAgICBicmVhazsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiAidW5rbm93biI7CiAgICAgfTsKIAogICAgIHN3aXRjaCAobV9tZWV0T3JTbGljZSkg
ewogICAgIGRlZmF1bHQ6CiAgICAgY2FzZSBTVkdfTUVFVE9SU0xJQ0VfVU5LTk9XTjoKLSAgICAg
ICAgcmV0dXJuIGFsaWduVHlwZTsKKyAgICAgICAgcmV0dXJuIGFsaWduVHlwZSgpOwogICAgIGNh
c2UgU1ZHX01FRVRPUlNMSUNFX01FRVQ6Ci0gICAgICAgIHJldHVybiBhbGlnblR5cGUgKyAiIG1l
ZXQiOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhhbGlnblR5cGUoKSwgIiBtZWV0Iik7CiAg
ICAgY2FzZSBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0U6Ci0gICAgICAgIHJldHVybiBhbGlnblR5cGUg
KyAiIHNsaWNlIjsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYWxpZ25UeXBlKCksICIgc2xp
Y2UiKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSgpOwotICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShjb25zdCBTdHJpbmcm
KTsKKyAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nVmlldyYpOwog
CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0QWxpZ24odW5zaWduZWQgc2hvcnQpOwogICAgIHVu
c2lnbmVkIHNob3J0IGFsaWduKCkgY29uc3QgeyByZXR1cm4gbV9hbGlnbjsgfQpAQCAtNjQsNyAr
NjQsOCBAQCBwdWJsaWM6CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKGZsb2F0IGxvZ2lj
YWxYLCBmbG9hdCBsb2dpY2FsWSwgZmxvYXQgbG9naWNhbFdpZHRoLCBmbG9hdCBsb2dpY2FsSGVp
Z2h0LCBmbG9hdCBwaHlzaWNhbFdpZHRoLCBmbG9hdCBwaHlzaWNhbEhlaWdodCkgY29uc3Q7CiAK
LSAgICB2b2lkIHBhcnNlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcGFyc2UoY29uc3QgU3Ry
aW5nVmlldyYpOworICAgIGJvb2wgcGFyc2UoY29uc3QgTENoYXIqJiBjdXJyUGFyYW0sIGNvbnN0
IExDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpOwogICAgIGJvb2wgcGFyc2UoY29uc3QgVUNoYXIq
JiBjdXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpOwogCiAgICAgU3Ry
aW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKQEAgLTczLDcgKzc0LDggQEAgcHJpdmF0ZToKICAg
ICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBtX2FsaWduOwogICAgIFNWR01lZXRPclNsaWNl
VHlwZSBtX21lZXRPclNsaWNlOwogCi0gICAgYm9vbCBwYXJzZUludGVybmFsKGNvbnN0IFVDaGFy
KiYgY3VyclBhcmFtLCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorICAgIGJvb2wgcGFyc2VJbnRlcm5hbChjb25z
dCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGJvb2wgdmFs
aWRhdGUpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlPiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3Ry
aW5nTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0
LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDIwICs1NSwxOSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBjbGVhckl0ZW1zKCk7CiAKLSAgICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMg
PSBTdHJpbmdWaWV3KGRhdGEpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25z
dCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgICAgICBjb25zdCBVQ2hh
ciogZW5kID0gcHRyICsgZGF0YS5sZW5ndGgoKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkg
ewotICAgICAgICAgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gcHRyOwotICAgICAgICAgICAgd2hp
bGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9IGRlbGltaXRlciAmJiAhaXNTVkdTcGFjZSgqcHRyKSkK
LSAgICAgICAgICAgICAgICBwdHIrKzsKLSAgICAgICAgICAgIGlmIChwdHIgPT0gc3RhcnQpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2l0ZW1zLmFwcGVuZChTdHJpbmco
c3RhcnQsIHB0ciAtIHN0YXJ0KSk7Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNP
ckRlbGltaXRlcihwdHIsIGVuZCwgZGVsaW1pdGVyKTsKLSAgICAgICAgfQorICAgICAgICByZXR1
cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKGRhdGEsIFsmXShhdXRvIHB0ciwgYXV0byBlbmQpIHsKKyAg
ICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAgICAgICAgICAgICBhdXRvKiBzdGFy
dCA9IHB0cjsKKyAgICAgICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gZGVs
aW1pdGVyICYmICFpc1NWR1NwYWNlKCpwdHIpKQorICAgICAgICAgICAgICAgICAgICBwdHIrKzsK
KyAgICAgICAgICAgICAgICBpZiAocHRyID09IHN0YXJ0KQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBtX2l0ZW1zLmFwcGVuZChTdHJpbmcoc3RhcnQsIHB0ciAt
IHN0YXJ0KSk7CisgICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0
ZXIocHRyLCBlbmQsIGRlbGltaXRlcik7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJu
IHB0ciA9PSBlbmQ7CisgICAgICAgICAgICByZXR1cm4gcHRyID09IGVuZDsKKyAgICAgICAgfSk7
CiAgICAgfQogCiAgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCShyZXZpc2lvbiAyNjMzMzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MiwxMCArODIsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgY2xlYXJJdGVtcygpOwog
Ci0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSku
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgaWYgKCFwYXJzZShzdGFydCwgc3RhcnQgKyB2
YWx1ZS5sZW5ndGgoKSkpCi0gICAgICAgICAgICBjbGVhckl0ZW1zKCk7CisgICAgICAgIHJldHVy
biBXVEY6OmdldENoYXJhY3RlcnModmFsdWUsIFsmXShhdXRvIHB0ciwgYXV0byBlbmQpIHsKKyAg
ICAgICAgICAgIGlmICghcGFyc2UocHRyLCBlbmQpKQorICAgICAgICAgICAgICAgIGNsZWFySXRl
bXMoKTsKKyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbmNhdGVu
YXRlKCkgY29uc3QKQEAgLTEwOSwzMCArMTA5LDMxIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgYm9vbCBwYXJzZShjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5k
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CisgICAgYm9vbCBwYXJzZShj
b25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiAgICAg
ewogICAgICAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlIChzdGFy
dCA8IGVuZCkgeworICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7CiAgICAgICAgICAgICBkZWxp
bVBhcnNlZCA9IGZhbHNlOwotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0
LCBlbmQpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgYXV0byB0eXBlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFy
c2VBbmRTa2lwVHlwZShzdGFydCwgZW5kKTsKLSAgICAgICAgICAgIGlmICghdHlwZSkKKyAgICAg
ICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3JtVHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNl
VHJhbnNmb3JtVHlwZShwdHIsIGVuZCk7CisgICAgICAgICAgICBpZiAoIXBhcnNlZFRyYW5zZm9y
bVR5cGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBhdXRv
IHBhcnNlZFRyYW5zZm9ybVZhbHVlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1W
YWx1ZSgqdHlwZSwgc3RhcnQsIGVuZCk7CisgICAgICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9y
bVZhbHVlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSgqcGFyc2VkVHJh
bnNmb3JtVHlwZSwgcHRyLCBlbmQpOwogICAgICAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1W
YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGFwcGVu
ZChTVkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKIAotICAgICAg
ICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYg
KHN0YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnLCcpIHsKKyAgICAgICAgICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhwdHIsIGVuZCk7CisgICAgICAgICAgICBpZiAocHRyIDwgZW5kICYmICpwdHIg
PT0gJywnKSB7CiAgICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICsrc3RhcnQ7CisgICAgICAgICAgICAgICAgKytwdHI7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhzdGFydCwgZW5kKTsKKyAgICAgICAg
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuICFkZWxpbVBhcnNlZDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VHJhbnNmb3JtYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Ry
YW5zZm9ybWFibGUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDEwIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGludCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlz
dChjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgZmxvYXQqIHZhbHVlcywgaW50
IHJlcXVpcmVkLCBpbnQgb3B0aW9uYWwpCisvLyBUaGlzIGRlc3RydWN0b3IgaXMgbmVlZGVkIGlu
IG9yZGVyIHRvIGxpbmsgY29ycmVjdGx5IHdpdGggSW50ZWwgSUNDLgorU1ZHVHJhbnNmb3JtYWJs
ZTo6flNWR1RyYW5zZm9ybWFibGUoKSA9IGRlZmF1bHQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoY29uc3QgQ2hh
cmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBmbG9hdCogdmFsdWVz
LCBpbnQgcmVxdWlyZWQsIGludCBvcHRpb25hbCkKIHsKICAgICBpbnQgb3B0aW9uYWxQYXJhbXMg
PSAwLCByZXF1aXJlZFBhcmFtcyA9IDA7CiAgICAgCkBAIC05MiwxMyArOTUsMTAgQEAgc3RhdGlj
IGludCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdAogfQogCiAvLyBUaGVzZSBzaG91bGQg
YmUga2VwdCBpbiBzeW5jIHdpdGggZW51bSBTVkdUcmFuc2Zvcm1UeXBlCi1zdGF0aWMgY29uc3Qg
aW50IHJlcXVpcmVkVmFsdWVzRm9yVHlwZVtdID0gIHswLCA2LCAxLCAxLCAxLCAxLCAxfTsKLXN0
YXRpYyBjb25zdCBpbnQgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW10gPSAgezAsIDAsIDEsIDEsIDIs
IDAsIDB9OworY29uc3RleHByIGludCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbXSA9ICB7MCwgNiwg
MSwgMSwgMSwgMSwgMX07Citjb25zdGV4cHIgaW50IG9wdGlvbmFsVmFsdWVzRm9yVHlwZVtdID0g
IHswLCAwLCAxLCAxLCAyLCAwLCAwfTsKIAotLy8gVGhpcyBkZXN0cnVjdG9yIGlzIG5lZWRlZCBp
biBvcmRlciB0byBsaW5rIGNvcnJlY3RseSB3aXRoIEludGVsIElDQy4KLVNWR1RyYW5zZm9ybWFi
bGU6On5TVkdUcmFuc2Zvcm1hYmxlKCkgPSBkZWZhdWx0OwotCi1PcHRpb25hbDxTVkdUcmFuc2Zv
cm1WYWx1ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlLCBjb25zdCBVQ2hhciomIHB0ciwgY29uc3Qg
VUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRp
b25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZUdlbmVyaWMoU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgQ2hhcmFjdGVyVHlwZSom
IHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIGlmICh0eXBlID09IFNWR1Ry
YW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV04pCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CkBAIC0xNDUsNDIgKzE0NSw2MyBAQCBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1
ZT4gU1ZHVHJhbnNmb3JtCiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotc3RhdGljIGNvbnN0
IFVDaGFyIHNrZXdYRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycsICdYJ307Ci1zdGF0aWMg
Y29uc3QgVUNoYXIgc2tld1lEZXNjW10gPSAgeydzJywgJ2snLCAnZScsICd3JywgJ1knfTsKLXN0
YXRpYyBjb25zdCBVQ2hhciBzY2FsZURlc2NbXSA9ICB7J3MnLCAnYycsICdhJywgJ2wnLCAnZSd9
Owotc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zbGF0ZURlc2NbXSA9ICB7J3QnLCAncicsICdhJywg
J24nLCAncycsICdsJywgJ2EnLCAndCcsICdlJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgcm90YXRl
RGVzY1tdID0gIHsncicsICdvJywgJ3QnLCAnYScsICd0JywgJ2UnfTsKLXN0YXRpYyBjb25zdCBV
Q2hhciBtYXRyaXhEZXNjW10gPSAgeydtJywgJ2EnLCAndCcsICdyJywgJ2knLCAneCd9OworT3B0
aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3Jt
VmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgTENo
YXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQpCit7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3Jt
VmFsdWVHZW5lcmljKHR5cGUsIHB0ciwgZW5kKTsKK30KIAotT3B0aW9uYWw8U1ZHVHJhbnNmb3Jt
VmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5
cGUoY29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kKQorT3B0aW9u
YWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFs
dWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgVUNoYXIq
JiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCiB7Ci0gICAgaWYgKGN1cnJUcmFuc2Zvcm0gPj0gZW5k
KQorICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyh0eXBlLCBwdHIsIGVuZCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0
ZXJUeXBlIHNrZXdYRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycsICdYJ307Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBza2V3WURl
c2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgc2NhbGVEZXNjW10gPSAgeydzJywg
J2MnLCAnYScsICdsJywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNv
bnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHRyYW5zbGF0ZURlc2NbXSA9ICB7J3QnLCAncicsICdhJywg
J24nLCAncycsICdsJywgJ2EnLCAndCcsICdlJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSByb3RhdGVEZXNjW10gPSAgeydyJywgJ28n
LCAndCcsICdhJywgJ3QnLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Y29uc3RleHByIENoYXJhY3RlclR5cGUgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3QnLCAn
cicsICdpJywgJ3gnfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZVRyYW5z
Zm9ybVR5cGVHZW5lcmljKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3Rl
clR5cGUqIGVuZCkKK3sKKyAgICBpZiAocHRyID49IGVuZCkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIGlmICgqY3VyclRyYW5zZm9ybSA9PSAncycpIHsKLSAgICAgICAgaWYg
KHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBza2V3WERlc2MsIFdURl9BUlJBWV9MRU5H
VEgoc2tld1hEZXNjKSkpCisgICAgaWYgKCpwdHIgPT0gJ3MnKSB7CisgICAgICAgIGlmIChza2lw
U3RyaW5nKHB0ciwgZW5kLCBza2V3WERlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICAgICAg
cmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwotICAgICAgICBl
bHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1lEZXNjLCBXVEZfQVJS
QVlfTEVOR1RIKHNrZXdZRGVzYykpKQorICAgICAgICBpZiAoc2tpcFN0cmluZyhwdHIsIGVuZCwg
c2tld1lEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TS0VXWTsKLSAgICAgICAgZWxzZSBpZiAoc2tpcFN0cmlu
ZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHNjYWxlRGVzYywgV1RGX0FSUkFZX0xFTkdUSChzY2FsZURl
c2MpKSkKKyAgICAgICAgaWYgKHNraXBTdHJpbmcocHRyLCBlbmQsIHNjYWxlRGVzYzxDaGFyYWN0
ZXJUeXBlPikpCiAgICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFO
U0ZPUk1fU0NBTEU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgfSBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgdHJhbnNs
YXRlRGVzYywgV1RGX0FSUkFZX0xFTkdUSCh0cmFuc2xhdGVEZXNjKSkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKHNraXBTdHJpbmcocHRyLCBlbmQsIHRy
YW5zbGF0ZURlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3Jt
VmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwotICAgIGVsc2UgaWYgKHNraXBTdHJpbmco
Y3VyclRyYW5zZm9ybSwgZW5kLCByb3RhdGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHJvdGF0ZURl
c2MpKSkKKyAgICBpZiAoc2tpcFN0cmluZyhwdHIsIGVuZCwgcm90YXRlRGVzYzxDaGFyYWN0ZXJU
eXBlPikpCiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9S
T1RBVEU7Ci0gICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIG1hdHJp
eERlc2MsIFdURl9BUlJBWV9MRU5HVEgobWF0cml4RGVzYykpKQorICAgIGlmIChza2lwU3RyaW5n
KHB0ciwgZW5kLCBtYXRyaXhEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX01BVFJJWDsKIAogICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiB9CiAKLVNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIFNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcp
CitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNm
b3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKK3sK
KyAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHN0cmluZywgW10oYXV0byBwdHIsIGF1dG8g
ZW5kKSB7CisgICAgICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVR5cGUocHRyLCBlbmQpOworICAg
IH0pOworfQorCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4g
U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IExDaGFyKiYgcHRyLCBj
b25zdCBMQ2hhciogZW5kKQoreworICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVR5cGVHZW5lcmlj
KHB0ciwgZW5kKTsKK30KKworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9y
bVR5cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBVQ2hhciom
IHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVy
cyA9IFN0cmluZ1ZpZXcodHlwZVN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgcmV0
dXJuIHBhcnNlQW5kU2tpcFR5cGUoY2hhcmFjdGVycywgY2hhcmFjdGVycyArIHR5cGVTdHJpbmcu
bGVuZ3RoKCkpLnZhbHVlT3IoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9X
Tik7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMocHRyLCBlbmQpOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHJldmlzaW9uIDI2
MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUgIlNWR0xvY2F0YWJsZS5oIgogI2lu
Y2x1ZGUgIlNWR1RyYW5zZm9ybVZhbHVlLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKQEAgLTMyLDkgKzMxLDEyIEBAIGNsYXNz
IFNWR1RyYW5zZm9ybWFibGUgOiBwdWJsaWMgU1ZHTG9jYXQKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5TVkdUcmFuc2Zvcm1hYmxlKCk7CiAKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3Jt
VmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9y
bVR5cGUsIGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kKTsKICAgICBzdGF0aWMg
T3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNm
b3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hh
ciogZW5kKTsKLSAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUg
cGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VBbmRTa2lwVHlwZShjb25z
dCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpOworCisgICAgc3RhdGlj
IE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZVRyYW5z
Zm9ybVR5cGUoY29uc3QgU3RyaW5nVmlldyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IExD
aGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IHBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbG9j
YWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOyB9CiAgICAgdmlydHVh
bCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsOTkg
KzYwLDEwMiBAQCB2b2lkIFNWR1ZpZXdTcGVjOjpyZXNldCgpCiAgICAgU1ZHWm9vbUFuZFBhbjo6
cmVzZXQoKTsKIH0KIAotc3RhdGljIGNvbnN0IFVDaGFyIHN2Z1ZpZXdTcGVjW10gPSB7J3MnLCAn
dicsICdnJywgJ1YnLCAnaScsICdlJywgJ3cnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB2aWV3Qm94
U3BlY1tdID0geyd2JywgJ2knLCAnZScsICd3JywgJ0InLCAnbycsICd4J307Ci1zdGF0aWMgY29u
c3QgVUNoYXIgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWNbXSA9IHsncCcsICdyJywgJ2UnLCAncycs
ICdlJywgJ3InLCAndicsICdlJywgJ0EnLCAncycsICdwJywgJ2UnLCAnYycsICd0JywgJ1InLCAn
YScsICd0JywgJ2knLCAnbyd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zZm9ybVNwZWNbXSA9
IHsndCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2YnLCAnbycsICdyJywgJ20nfTsKLXN0YXRpYyBj
b25zdCBVQ2hhciB6b29tQW5kUGFuU3BlY1tdID0geyd6JywgJ28nLCAnbycsICdtJywgJ0EnLCAn
bicsICdkJywgJ1AnLCAnYScsICduJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgdmlld1RhcmdldFNw
ZWNbXSA9ICB7J3YnLCAnaScsICdlJywgJ3cnLCAnVCcsICdhJywgJ3InLCAnZycsICdlJywgJ3Qn
fTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJU
eXBlIHN2Z1ZpZXdTcGVjW10gPSB7J3MnLCAndicsICdnJywgJ1YnLCAnaScsICdlJywgJ3cnfTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBl
IHZpZXdCb3hTcGVjW10gPSB7J3YnLCAnaScsICdlJywgJ3cnLCAnQicsICdvJywgJ3gnfTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHBy
ZXNlcnZlQXNwZWN0UmF0aW9TcGVjW10gPSB7J3AnLCAncicsICdlJywgJ3MnLCAnZScsICdyJywg
J3YnLCAnZScsICdBJywgJ3MnLCAncCcsICdlJywgJ2MnLCAndCcsICdSJywgJ2EnLCAndCcsICdp
JywgJ28nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFy
YWN0ZXJUeXBlIHRyYW5zZm9ybVNwZWNbXSA9IHsndCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2Yn
LCAnbycsICdyJywgJ20nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0
ZXhwciBDaGFyYWN0ZXJUeXBlIHpvb21BbmRQYW5TcGVjW10gPSB7J3onLCAnbycsICdvJywgJ20n
LCAnQScsICduJywgJ2QnLCAnUCcsICdhJywgJ24nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHZpZXdUYXJnZXRTcGVjW10gPSAgeyd2
JywgJ2knLCAnZScsICd3JywgJ1QnLCAnYScsICdyJywgJ2cnLCAnZScsICd0J307CiAKLWJvb2wg
U1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nJiB2aWV3U3BlYykKK2Jvb2wg
U1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewot
ICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2aWV3U3BlYykudXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1cnJWaWV3U3BlYyA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyclZpZXdTcGVj
ICsgdmlld1NwZWMubGVuZ3RoKCk7Ci0KLSAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAh
bV9jb250ZXh0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFza2lw
U3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCBzdmdWaWV3U3BlYywgV1RGX0FSUkFZX0xFTkdUSChz
dmdWaWV3U3BlYykpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY3VyclZpZXdT
cGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGN1cnJWaWV3U3BlYysrOwotCi0gICAgd2hpbGUgKGN1cnJWaWV3U3BlYyA8IGVuZCAm
JiAqY3VyclZpZXdTcGVjICE9ICcpJykgewotICAgICAgICBpZiAoKmN1cnJWaWV3U3BlYyA9PSAn
dicpIHsKLSAgICAgICAgICAgIGlmIChza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCB2aWV3
Qm94U3BlYywgV1RGX0FSUkFZX0xFTkdUSCh2aWV3Qm94U3BlYykpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBjdXJyVmlld1Nw
ZWMrKzsKLSAgICAgICAgICAgICAgICBhdXRvIHZpZXdCb3ggPSBTVkdGaXRUb1ZpZXdCb3g6OnBh
cnNlVmlld0JveChjdXJyVmlld1NwZWMsIGVuZCwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGlm
ICghdmlld0JveCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIHNldFZpZXdCb3goV1RGTW92ZSgqdmlld0JveCkpOwotICAgICAgICAgICAgICAgIGlm
IChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHZp
ZXdUYXJnZXRTcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHZpZXdUYXJnZXRTcGVjKSkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICco
JykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGNv
bnN0IFVDaGFyKiB2aWV3VGFyZ2V0U3RhcnQgPSArK2N1cnJWaWV3U3BlYzsKLSAgICAgICAgICAg
ICAgICB3aGlsZSAoY3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJyVmlld1NwZWMgIT0gJyknKQot
ICAgICAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBpZiAo
Y3VyclZpZXdTcGVjID49IGVuZCkKKyAgICByZXR1cm4gV1RGOjpnZXRDaGFyYWN0ZXJzKHN0cmlu
ZywgWyZdKGF1dG8gcHRyLCBhdXRvIGVuZCkgLT4gYm9vbCB7CisgICAgICAgIHVzaW5nIENoYXJh
Y3RlclR5cGUgPSBzdGQ6OnJlbW92ZV9wb2ludGVyX3Q8ZGVjbHR5cGUocHRyKT47CisKKyAgICAg
ICAgaWYgKHB0ciA+PSBlbmQgfHwgIW1fY29udGV4dEVsZW1lbnQpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFza2lwU3RyaW5nKHB0ciwgZW5kLCBzdmdWaWV3U3Bl
YzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
aWYgKHB0ciA+PSBlbmQgfHwgKnB0ciAhPSAnKCcpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgcHRyKys7CisKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9
ICcpJykgeworICAgICAgICAgICAgaWYgKCpwdHIgPT0gJ3YnKSB7CisgICAgICAgICAgICAgICAg
aWYgKHNraXBTdHJpbmcocHRyLCBlbmQsIHZpZXdCb3hTcGVjPENoYXJhY3RlclR5cGU+KSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAocHRyID49IGVuZCB8fCAqcHRyICE9ICcoJykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcHRy
Kys7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdmlld0JveCA9IFNWR0ZpdFRvVmlld0JveDo6
cGFyc2VWaWV3Qm94KHB0ciwgZW5kLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
dmlld0JveCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgc2V0Vmlld0JveChXVEZNb3ZlKCp2aWV3Qm94KSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICpwdHIgIT0gJyknKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHNraXBTdHJpbmcocHRyLCBlbmQsIHZpZXdUYXJnZXRTcGVjPENo
YXJhY3RlclR5cGU+KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocHRyID49IGVuZCB8fCAq
cHRyICE9ICcoJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byogdmlld1RhcmdldFN0YXJ0ID0gKytwdHI7CisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnKScpCisgICAgICAgICAgICAg
ICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IG1fdmlld1RhcmdldFN0cmluZyA9IFN0cmluZyh2aWV3VGFyZ2V0U3RhcnQsIHB0ciAtIHZpZXdU
YXJnZXRTdGFydCk7CisgICAgICAgICAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKCpwdHIgPT0gJ3onKSB7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5n
KHB0ciwgZW5kLCB6b29tQW5kUGFuU3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAocHRyID49IGVuZCB8fCAq
cHRyICE9ICcoJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIHB0cisrOworICAgICAgICAgICAgICAgIGF1dG8gem9vbUFuZFBhbiA9IFNWR1pvb21B
bmRQYW46OnBhcnNlWm9vbUFuZFBhbihwdHIsIGVuZCk7CisgICAgICAgICAgICAgICAgaWYgKCF6
b29tQW5kUGFuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgc2V0Wm9vbUFuZFBhbigqem9vbUFuZFBhbik7CisgICAgICAgICAgICAgICAgaWYgKHB0
ciA+PSBlbmQgfHwgKnB0ciAhPSAnKScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKnB0ciA9
PSAncCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcocHRyLCBlbmQsIHByZXNl
cnZlQXNwZWN0UmF0aW9TcGVjPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICpwdHIgIT0g
JygnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
cHRyKys7CisgICAgICAgICAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNl
cnZlQXNwZWN0UmF0aW87CisgICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFzcGVjdFJhdGlv
LnBhcnNlKHB0ciwgZW5kLCBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0
UmF0aW8pOworICAgICAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICpwdHIgIT0gJyknKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgbV92aWV3
VGFyZ2V0U3RyaW5nID0gU3RyaW5nKHZpZXdUYXJnZXRTdGFydCwgY3VyclZpZXdTcGVjIC0gdmll
d1RhcmdldFN0YXJ0KTsKLSAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKKyAgICAgICAg
ICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKnB0ciA9PSAndCcpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcocHRyLCBlbmQsIHRyYW5zZm9ybVNwZWM8Q2hh
cmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgKnB0ciAhPSAnKCcpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgICAg
ICBtX3RyYW5zZm9ybS0+cGFyc2UocHRyLCBlbmQpOworICAgICAgICAgICAgICAgIGlmIChwdHIg
Pj0gZW5kIHx8ICpwdHIgIT0gJyknKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgcHRyKys7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJWaWV3U3BlYyA9PSAn
eicpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgem9v
bUFuZFBhblNwZWMsIFdURl9BUlJBWV9MRU5HVEgoem9vbUFuZFBhblNwZWMpKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVu
ZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgIGlmICghU1ZHWm9vbUFu
ZFBhbjo6cGFyc2Vab29tQW5kUGFuKGN1cnJWaWV3U3BlYywgZW5kKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAq
Y3VyclZpZXdTcGVjICE9ICcpJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgfSBlbHNlIGlmICgqY3VyclZpZXdTcGVj
ID09ICdwJykgewotICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5k
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlYywgV1RGX0FSUkFZX0xFTkdUSChwcmVzZXJ2ZUFzcGVj
dFJhdGlvU3BlYykpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAg
ICAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0UmF0aW87
Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UoY3VyclZpZXdTcGVj
LCBlbmQsIGZhbHNlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOwotICAgICAgICAg
ICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoKmN1cnJWaWV3U3BlYyA9PSAndCcpIHsKLSAgICAgICAgICAgIGlm
ICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgdHJhbnNmb3JtU3BlYywgV1RGX0FSUkFZ
X0xFTkdUSCh0cmFuc2Zvcm1TcGVjKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAn
KCcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdT
cGVjKys7Ci0gICAgICAgICAgICBtX3RyYW5zZm9ybS0+cGFyc2UoY3VyclZpZXdTcGVjLCBlbmQp
OwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAh
PSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZp
ZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIGlmIChjdXJyVmlld1NwZWMgPCBlbmQgJiYgKmN1cnJWaWV3U3BlYyA9PSAnOycpCi0g
ICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGN1cnJWaWV3
U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnOycpCisgICAgICAgICAg
ICAgICAgcHRyKys7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChwdHIgPj0gZW5k
IHx8ICpwdHIgIT0gJyknKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVmlld1NwZWMuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ZpZXdTcGVjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdWaWV3U3BlYyhjb250ZXh0RWxlbWVu
dCkpOwogICAgIH0KIAotICAgIGJvb2wgcGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmcmKTsKKyAg
ICBib29sIHBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nVmlldyYpOwogICAgIHZvaWQgcmVzZXQo
KTsKICAgICB2b2lkIHJlc2V0Q29udGV4dEVsZW1lbnQoKSB7IG1fY29udGV4dEVsZW1lbnQgPSBu
dWxscHRyOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAJKHJldmlz
aW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsMjUgKzIyLDMwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU1ZHWm9vbUFuZFBhbi5oIgogCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0
ZW5hdGVOdW1iZXJzLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBTVkdab29tQW5k
UGFuOjpwYXJzZVpvb21BbmRQYW4oY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVu
ZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJU
eXBlIGRpc2FibGVbXSA9IHsgJ2QnLCAnaScsICdzJywgJ2EnLCAnYicsICdsJywgJ2UnIH07Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBt
YWduaWZ5W10gPSB7ICdtJywgJ2EnLCAnZycsICduJywgJ2knLCAnZicsICd5JyB9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFjYXRlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdab29tQW5kUGFu
VHlwZT4gcGFyc2Vab29tQW5kUGFuR2VuZXJpYyhjb25zdCBDaGFjYXRlclR5cGUqJiBzdGFydCwg
Y29uc3QgQ2hhY2F0ZXJUeXBlKiBlbmQpCiB7Ci0gICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpc2Fi
bGVbXSA9IHsgJ2QnLCAnaScsICdzJywgJ2EnLCAnYicsICdsJywgJ2UnIH07Ci0gICAgaWYgKHNr
aXBTdHJpbmcoc3RhcnQsIGVuZCwgZGlzYWJsZSwgV1RGX0FSUkFZX0xFTkdUSChkaXNhYmxlKSkp
IHsKLSAgICAgICAgbV96b29tQW5kUGFuID0gU1ZHWm9vbUFuZFBhbkRpc2FibGU7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBtYWduaWZ5W10g
PSB7ICdtJywgJ2EnLCAnZycsICduJywgJ2knLCAnZicsICd5JyB9OwotICAgIGlmIChza2lwU3Ry
aW5nKHN0YXJ0LCBlbmQsIG1hZ25pZnksIFdURl9BUlJBWV9MRU5HVEgobWFnbmlmeSkpKSB7Ci0g
ICAgICAgIG1fem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW5NYWduaWZ5OwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKHNraXBTdHJpbmcoc3RhcnQsIGVuZCwgZGlzYWJsZTxD
aGFjYXRlclR5cGU+KSkKKyAgICAgICAgcmV0dXJuIFNWR1pvb21BbmRQYW5EaXNhYmxlOworCisg
ICAgaWYgKHNraXBTdHJpbmcoc3RhcnQsIGVuZCwgbWFnbmlmeTxDaGFjYXRlclR5cGU+KSkKKyAg
ICAgICAgcmV0dXJuIFNWR1pvb21BbmRQYW5NYWduaWZ5OworCisgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKK30KIAotICAgIHJldHVybiBmYWxzZTsKK09wdGlvbmFsPFNWR1pvb21BbmRQYW5UeXBl
PiBTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4oY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0
IExDaGFyKiBlbmQpCit7CisgICAgcmV0dXJuIHBhcnNlWm9vbUFuZFBhbkdlbmVyaWMocHRyLCBl
bmQpOworfQorCitPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gU1ZHWm9vbUFuZFBhbjo6cGFy
c2Vab29tQW5kUGFuKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kKQoreworICAg
IHJldHVybiBwYXJzZVpvb21BbmRQYW5HZW5lcmljKHB0ciwgZW5kKTsKIH0KIAogdm9pZCBTVkda
b29tQW5kUGFuOjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
Vkdab29tQW5kUGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21B
bmRQYW4uaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21B
bmRQYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsOCBAQCBwdWJsaWM6CiBwcm90ZWN0
ZWQ6CiAgICAgU1ZHWm9vbUFuZFBhbigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgcGFyc2Vab29t
QW5kUGFuKGNvbnN0IFVDaGFyKiYsIGNvbnN0IFVDaGFyKik7CisgICAgc3RhdGljIE9wdGlvbmFs
PFNWR1pvb21BbmRQYW5UeXBlPiBwYXJzZVpvb21BbmRQYW4oY29uc3QgTENoYXIqJiwgY29uc3Qg
TENoYXIqKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IHBhcnNlWm9v
bUFuZFBhbihjb25zdCBVQ2hhciomLCBjb25zdCBVQ2hhciopOwogCiBwcml2YXRlOgogICAgIFNW
R1pvb21BbmRQYW5UeXBlIG1fem9vbUFuZFBhbiB7IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1pvb21B
bmRQYW5UeXBlPjo6aW5pdGlhbFZhbHVlKCkgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402614</attachid>
            <date>2020-06-23 18:38:28 -0700</date>
            <delta_ts>2020-06-23 19:56:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213460-20200623183827.patch</filename>
            <type>text/plain</type>
            <size>217534</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM0MzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA2LTIzICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIHVubmVjZXNzYXJ5IHVwY29udmVyc2lvbiBv
ZiBTdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTM0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbV0lQXQorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVm
ZmVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcpOgor
CiAyMDIwLTA2LTIzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIFdURjo6c2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZApJbmRleDogU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjMzMzUpCisrKyBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00NTIsNiArNDUyLDcgQEAKIAkJN0MxMzc5NDIyMjIzMjZENTAwRDdBODI0IC8qIGllZWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gaWVlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEz
Nzk0MzIyMjMyNkQ1MDBEN0E4MjQgLyogUkVBRE1FLm1kICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gbmV0LmRhcmluZ2ZpcmViYWxsLm1hcmtkb3duOyBw
YXRoID0gUkVBRE1FLm1kOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNBNDVEMDIz
Q0ZBODgzMDA3REUzQTYgLyogUGxhdGZvcm1IYXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtSGF2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QzNCMDZFODI0QTExNkU2MDBGRDI2QzcgLyogU3RyaW5nUGFyc2luZ0J1ZmZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHJpbmdQYXJzaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDM0Y3MjM5MUQ3ODgxMTkwMDY3NEUyNiAvKiBCcmlnYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJyaWdhbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M0MjMwNzEyM0NFMkQ4QTAwNkU1NEQwIC8qIFBsYXRmb3JtRW5hYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtRW5hYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNDIzMDcyMjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM5Niw2ICsxMzk3LDcgQEAKIAkJCQlBOEE0NzMyODE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQThBNDczMjkxNTFBODI1
QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCAqLywKIAkJCQlBOEE0NzMyQTE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nT3BlcmF0b3JzLmggKi8sCisJCQkJN0MzQjA2RTgyNEExMTZFNjAwRkQyNkM3
IC8qIFN0cmluZ1BhcnNpbmdCdWZmZXIuaCAqLywKIAkJCQlDRDAwMzYwRDIxNTAxRjc4MDBGNEVE
NEMgLyogU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oICovLAogCQkJCTkzRjE5OTNEMTlENzk1
OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCAqLywKIAkJCQkxQTZFQjFERjE4N0QwQkQzMDAz
MDEyNkYgLyogU3RyaW5nVmlldy5oICovLApJbmRleDogU291cmNlL1dURi93dGYvRm9yd2FyZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gMjYzMzM1
KQorKysgU291cmNlL1dURi93dGYvRm9yd2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3
MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCA9IGFsaWdub2YoVCkKIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gRHVtYlB0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBEdW1iUHRyVHJhaXRzPFQ+PiBjbGFzcyBSZWZQ
dHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgU3RyaW5nQnVmZmVyOwordGVtcGxhdGU8dHlw
ZW5hbWU+IGNsYXNzIFN0cmluZ1BhcnNpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlw
ZW5hbWUgPSB2b2lkPiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjsKIHRlbXBsYXRlPHR5cGVuYW1l
PiBjbGFzcyBVbmlxdWVSZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgVmFyaWFudDsK
QEAgLTEyMiw2ICsxMjMsNyBAQCB1c2luZyBXVEY6OlN0cmluZzsKIHVzaW5nIFdURjo6U3RyaW5n
QnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBs
OwordXNpbmcgV1RGOjpTdHJpbmdQYXJzaW5nQnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdWaWV3
OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247CiB1c2luZyBXVEY6OlRleHRTdHJlYW07CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybUhhdmUuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dURi93dGYv
UGxhdGZvcm1IYXZlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMiwxNSArNjEyLDE1IEBACiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE1MDApCi0jZGVmaW5lIEhBVkVfUEFTU0tJVF9CT1VO
RF9JTlRFUkZBQ0VfSURFTlRJRklFUiAxCisjZGVmaW5lIEhBVkVfUEFTU0tJVF9CT1VORF9JTlRF
UkZBQ0VfSURFTlRJRklFUiAwCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRG
T1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE1MDApCi0j
ZGVmaW5lIEhBVkVfUEFTU0tJVF9JTlNUQUxMTUVOVFMgMQorI2RlZmluZSBIQVZFX1BBU1NLSVRf
SU5TVEFMTE1FTlRTIDAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMCkKLSNkZWZp
bmUgSEFWRV9QQVNTS0lUX1BBWU1FTlRfTUVUSE9EX0JJTExJTkdfQUREUkVTUyAxCisjZGVmaW5l
IEhBVkVfUEFTU0tJVF9QQVlNRU5UX01FVEhPRF9CSUxMSU5HX0FERFJFU1MgMAogI2VuZGlmCiAK
ICNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwMTUwMCkgfHwgUExBVEZPUk0oSU9TKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29tbW9uLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorY2xhc3MgU3RyaW5nUGFyc2luZ0J1ZmZlciBmaW5hbCB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9
IFQ7CisKKyAgICBjb25zdGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlcigpCisgICAgeworICAgIH0K
KworICAgIGNvbnN0ZXhwciBTdHJpbmdQYXJzaW5nQnVmZmVyKGNvbnN0IENoYXJhY3RlclR5cGUq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uIHsgY2hh
cmFjdGVycyB9CisgICAgICAgICwgbV9lbmQgeyBjaGFyYWN0ZXJzICsgbGVuZ3RoIH0KKyAgICB7
CisgICAgfQorCisgICAgY29uc3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXIoY29uc3QgQ2hhcmFj
dGVyVHlwZSogY2hhcmFjdGVycywgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQorICAgICAgICA6
IG1fcG9zaXRpb24geyBjaGFyYWN0ZXJzIH0KKyAgICAgICAgLCBtX2VuZCB7IGVuZCB9CisgICAg
eworICAgIH0KKworICAgIGNvbnN0ZXhwciBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwb3NpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICBjb25zdGV4cHIgY29uc3QgQ2hhcmFj
dGVyVHlwZSogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KKworICAgIGNvbnN0ZXhwciBi
b29sIGhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uIDwg
bV9lbmQ7IH0KKyAgICBjb25zdGV4cHIgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
aXRpb24gPT0gbV9lbmQ7IH0KKworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBsZW5ndGhSZW1haW5p
bmcoKSBjb25zdCB7IHJldHVybiBtX2VuZCAtIG1fcG9zaXRpb247IH0KKyAgICBTdHJpbmdWaWV3
IHN0cmluZ1ZpZXdPZkNoYXJhY3RlcnNSZW1haW5pbmcoKSB7IHJldHVybiB7IG1fcG9zaXRpb24s
IGxlbmd0aFJlbWFpbmluZygpIH07IH0KKworICAgIENoYXJhY3RlclR5cGUgb3BlcmF0b3JbXSh1
bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcG9zaXRpb24gKyBpIDwgbV9lbmQp
OworICAgICAgICByZXR1cm4gbV9wb3NpdGlvbltpXTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIg
Q2hhcmFjdGVyVHlwZSBvcGVyYXRvciooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICpt
X3Bvc2l0aW9uOworICAgIH0KKworICAgIGNvbnN0ZXhwciB2b2lkIGFkdmFuY2UoKQorICAgIHsK
KyAgICAgICAgKyttX3Bvc2l0aW9uOworICAgIH0KKworICAgIGNvbnN0ZXhwciB2b2lkIGFkdmFu
Y2VCeSh1bnNpZ25lZCBwbGFjZXMpCisgICAgeworICAgICAgICBtX3Bvc2l0aW9uICs9IHBsYWNl
czsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlciYgb3BlcmF0b3Ir
KygpCisgICAgeworICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisKKyAgICBjb25zdGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlciBvcGVyYXRvcisrKGludCkK
KyAgICB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICsrKCp0aGlzKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgQ2hh
cmFjdGVyVHlwZSogbV9wb3NpdGlvbiB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBtX2VuZCB7IG51bGxwdHIgfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5
cGUsIHR5cGVuYW1lIEZ1bmN0aW9uPiBkZWNsdHlwZShhdXRvKSByZWFkQ2hhcmFjdGVyc0ZvclBh
cnNpbmcoU3RyaW5nVHlwZSYmIHN0cmluZywgRnVuY3Rpb24mJiBmdW5jdG9yKQoreworICAgIGlm
IChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBmdW5jdG9yKFN0cmluZ1BhcnNpbmdC
dWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH0pOworICAgIHJl
dHVybiBmdW5jdG9yKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczE2KCks
IHN0cmluZy5sZW5ndGgoKSB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6U3RyaW5nUGFyc2luZ0J1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzQzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2
NSBAQAorMjAyMC0wNi0yMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVwbGFjZSB1bm5lY2Vzc2FyeSB1cGNvbnZlcnNpb24gb2YgU3RyaW5ncworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRt
bC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RBU0NJ
SVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBFeGFjdGx5KToKKyAgICAgICAgKFdlYkNv
cmU6OmNoYXJhY3RlclByZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpza2lwVW50aWwpOgor
ICAgICAgICAoV2ViQ29yZTo6c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZSk6CisgICAgICAg
IChXZWJDb3JlOjpza2lwQ2hhcmFjdGVyc0V4YWN0bHkpOgorICAgICAgICAqIGxvYWRlci9SZXNv
dXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIYXNo
QWxnb3JpdGhtQWR2YW5jaW5nUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDcnlw
dG9ncmFwaGljRGlnZXN0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNyeXB0b2dyYXBo
aWNEaWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdCk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oOgor
ICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUludGVncml0eS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzcGxpdE9uU3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSW50ZWdyaXR5TWV0
YWRhdGEpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXJzZU1hbmlmZXN0KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5
UG9saWN5OjpkaWRSZWNlaXZlSGVhZGVyKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRGlyZWN0
aXZlTmFtZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc0RpcmVjdGl2ZVZhbHVlQ2hh
cmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVwb3J0VVJJKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldENTUERpcmVjdGl2
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
OjphcHBseVNhbmRib3hQb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0QmxvY2tB
bGxNaXhlZENvbnRlbnRFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFkZERpcmVjdGl2ZSk6CisgICAgICAgICogcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oOgorICAgICAgICAqIHBhZ2UvY3Nw
L0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjppc01lZGlhVHlwZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU6OnBhcnNlKToKKyAgICAgICAgKiBwYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmlzU291cmNlQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzSG9zdENoYXJhY3Rl
cik6CisgICAgICAgIChXZWJDb3JlOjppc1BhdGhDb21wb25lbnRDaGFyYWN0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNOb3RDb2xvbk9yU2xhc2gpOgorICAgICAgICAoV2ViQ29yZTo6aXNTb3VyY2VMaXN0
Tm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VMaXN0OjpwYXJzZVNjaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUG9ydCk6CisgICAgICAg
IChXZWJDb3JlOjppc05vbmNlQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlTm9uY2VTb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VIYXNoU291cmNlKToK
KyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VB
bmdsZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdWVBc1N0
cmluZyk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VLZXlTcGxpbmVzKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94R2VuZXJpYyk6Cisg
ICAgICAgICogc3ZnL1NWR0ZpdFRvVmlld0JveC5oOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhM
aXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhMaXN0OjpwYXJzZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhMaXN0Ojp2YWx1ZUFzU3RyaW5nIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVu
Z3RoTGlzdDo6cGFyc2UpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxlbmd0aFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5n
dGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aFZhbHVl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhWYWx1ZTo6U1ZHTGVuZ3RoVmFsdWUpOgor
ICAgICAgICAqIHN2Zy9TVkdOdW1iZXJMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdOdW1iZXJMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXJMaXN0
Ojp2YWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6cGFyc2UpOiBEZWxldGVkLgorICAgICAg
ICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdlbmVyaWNQYXJzZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpw
YXJzZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VBcmNGbGFnKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlQXJjRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51
bWJlck9wdGlvbmFsTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlUG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlR2x5cGhO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVW5pY29kZVJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Z2Vu
ZXJpY1BhcnNlRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQp
OgorICAgICAgICAqIHN2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OmlzU1ZHU3BhY2VPckNvbW1hKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1Nw
YWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpza2lwU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBz
dmcvU1ZHUGF0aFNvdXJjZS5oOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVU
b0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdQ
YXRoU3RyaW5nU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQb2ludExpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdQb2ludExpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvaW50TGlzdDo6cGFyc2UpOiBE
ZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZUludGVybmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6dmFsdWVBc1N0cmluZyBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oOgorICAgICAg
ICAqIHN2Zy9TVkdTdHJpbmdMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdT
dHJpbmdMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHJpbmdMaXN0Ojp2YWx1
ZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHU3RyaW5nTGlzdC5oOgorICAgICAg
ICAqIHN2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdUcmFuc2Zvcm1MaXN0Ojpjb25zb2xpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFu
c2Zvcm1MaXN0Ojpjb25jYXRlbmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFu
c2Zvcm1MaXN0OjpwYXJzZUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3Jt
TGlzdDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6dmFsdWVB
c1N0cmluZyBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRy
YW5zZm9ybVBhcmFtTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVZhbHVl
R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5z
Zm9ybVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUp
OiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICog
c3ZnL1NWR1ZpZXdTcGVjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdTcGVjOjpwYXJz
ZVZpZXdTcGVjKToKKyAgICAgICAgKiBzdmcvU1ZHVmlld1NwZWMuaDoKKyAgICAgICAgKiBzdmcv
U1ZHWm9vbUFuZFBhbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVpvb21BbmRQYW5HZW5l
cmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbik6
CisgICAgICAgICogc3ZnL1NWR1pvb21BbmRQYW4uaDoKKwogMjAyMC0wNi0yMyAgWmFsYW4gQnVq
dGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtNdWx0aWNvbF0gUmVzZXQgdGhlIGNo
aWxkcmVuSW5saW5lIHN0YXRlIG9uIHRoZSBSZW5kZXJCbG9ja0Zsb3cgd2hlbiBkZXN0cm95aW5n
IHRoZSBtdWx0aWNvbHVtbiBjb250ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjYz
MzM1KQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI1
MzcsNiArMjUzNyw3IEBAIHN2Zy9TVkdIS2VybkVsZW1lbnQuY3BwCiBzdmcvU1ZHSW1hZ2VFbGVt
ZW50LmNwcAogc3ZnL1NWR0ltYWdlTG9hZGVyLmNwcAogc3ZnL1NWR0xlbmd0aENvbnRleHQuY3Bw
CitzdmcvU1ZHTGVuZ3RoTGlzdC5jcHAKIHN2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAKIHN2Zy9TVkdM
aW5lRWxlbWVudC5jcHAKIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCkBAIC0yNTQ2
LDYgKzI1NDcsNyBAQCBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAKIHN2Zy9TVkdNYXNrRWxlbWVu
dC5jcHAKIHN2Zy9TVkdNZXRhZGF0YUVsZW1lbnQuY3BwCiBzdmcvU1ZHTWlzc2luZ0dseXBoRWxl
bWVudC5jcHAKK3N2Zy9TVkdOdW1iZXJMaXN0LmNwcAogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5j
cHAKIHN2Zy9TVkdQYXRoQmxlbmRlci5jcHAKIHN2Zy9TVkdQYXRoQnVpbGRlci5jcHAKQEAgLTI1
NjAsNiArMjU2Miw3IEBAIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAogc3ZnL1NWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwCiBzdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHAKIHN2Zy9T
VkdQYXR0ZXJuRWxlbWVudC5jcHAKK3N2Zy9TVkdQb2ludExpc3QuY3BwCiBzdmcvU1ZHUG9seUVs
ZW1lbnQuY3BwCiBzdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3BwCiBzdmcvU1ZHUG9seWxpbmVFbGVt
ZW50LmNwcApAQCAtMjU3MCw2ICsyNTczLDcgQEAgc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCiBzdmcv
U1ZHU2NyaXB0RWxlbWVudC5jcHAKIHN2Zy9TVkdTZXRFbGVtZW50LmNwcAogc3ZnL1NWR1N0b3BF
bGVtZW50LmNwcAorc3ZnL1NWR1N0cmluZ0xpc3QuY3BwCiBzdmcvU1ZHU3R5bGVFbGVtZW50LmNw
cAogc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCiBzdmcvU1ZHU3ltYm9sRWxlbWVudC5jcHAKQEAg
LTI1ODMsNiArMjU4Nyw3IEBAIHN2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAogc3Zn
L1NWR1RpdGxlRWxlbWVudC5jcHAKIHN2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAogc3Zn
L1NWR1RyYW5zZm9ybURpc3RhbmNlLmNwcAorc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCiBzdmcv
U1ZHVHJhbnNmb3JtYWJsZS5jcHAKIHN2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCiBzdmcvU1ZHVW5r
bm93bkVsZW1lbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEw
MTg4LDYgKzEwMTg4LDExIEBACiAJCTdDRDM0NDEyMUYzMTA4RTIwMDBEQ0Q0OSAvKiBKU011dGF0
aW9uQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNdXRhdGlvbkNhbGxiYWNrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NENDk0Q0ExQTg2RUIxRDAwMEE4N0VD
IC8qIFJlbmRlckF0dGFjaG1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVuZGVyQXR0YWNobWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDRDQ5NENCMUE4NkVCMUQwMDBBODdFQyAvKiBSZW5kZXJBdHRhY2htZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckF0dGFjaG1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0NENzBDM0QyNEEyOEEzQTAwRTYxMDQwIC8qIFNWR0xlbmd0aExp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHTGVuZ3RoTGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdDRDcwQzQwMjRBMjhBQzkwMEU2MTA0MCAvKiBTVkdOdW1iZXJM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR051bWJlckxpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3Q0Q3MEM0MjI0QTI4QjcwMDBFNjEwNDAgLyogU1ZHUG9pbnRM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BvaW50TGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdDRDcwQzQzMjRBMjhCRUMwMEU2MTA0MCAvKiBTVkdTdHJpbmdM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1N0cmluZ0xpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3Q0Q3MEM0NjI0QTI4Q0Q3MDBFNjEwNDAgLyogU1ZHVHJhbnNm
b3JtTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUcmFuc2Zvcm1MaXN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NERTczOTYxRjlCRDU5NTAwMzkwMzEyIC8qIFNl
dHRpbmdzLnlhbWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2V0dGluZ3MueWFtbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NERThFQkMxRjE5M0JDNTAwMTY4RkU3IC8qIENTU1N0
eWxlRGVjbGFyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
RTE5MTQ3MUYyQTk4QUYwMDI3MkY3OCAvKiBGZXRjaFJlcXVlc3RJbml0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZldGNoUmVxdWVzdEluaXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI1MTMwLDYgKzI1MTM1LDcgQEAKIAkJCQlCMjIyNzg5RTBEMDBCRjIw
MDA3MUI3ODIgLyogU1ZHTGVuZ3RoLmlkbCAqLywKIAkJCQk3MTM0NDk2QjE0Njk0MUIzMDA3MjAz
MTIgLyogU1ZHTGVuZ3RoQ29udGV4dC5jcHAgKi8sCiAJCQkJNzEzNDQ5NkMxNDY5NDFCMzAwNzIw
MzEyIC8qIFNWR0xlbmd0aENvbnRleHQuaCAqLywKKwkJCQk3Q0Q3MEMzRDI0QTI4QTNBMDBFNjEw
NDAgLyogU1ZHTGVuZ3RoTGlzdC5jcHAgKi8sCiAJCQkJQjIyMjc4QTAwRDAwQkYyMDAwNzFCNzgy
IC8qIFNWR0xlbmd0aExpc3QuaCAqLywKIAkJCQlCMjIyNzhBMTBEMDBCRjIwMDA3MUI3ODIgLyog
U1ZHTGVuZ3RoTGlzdC5pZGwgKi8sCiAJCQkJN0NFNThENTIxREQ3QjA5MzAwMTI4NTUyIC8qIFNW
R0xlbmd0aFZhbHVlLmNwcCAqLywKQEAgLTI1MTYyLDYgKzI1MTY4LDcgQEAKIAkJCQk0NEQ4REE5
ODEzOTU0NUJFMDAzMzdCNzUgLyogU1ZHTVBhdGhFbGVtZW50LmlkbCAqLywKIAkJCQk3Q0U1OEQ0
RjFERDY5QTFFMDAxMjg1NTIgLyogU1ZHTnVtYmVyLmggKi8sCiAJCQkJQjIyMjc4QjkwRDAwQkYy
MDAwNzFCNzgyIC8qIFNWR051bWJlci5pZGwgKi8sCisJCQkJN0NENzBDNDAyNEEyOEFDOTAwRTYx
MDQwIC8qIFNWR051bWJlckxpc3QuY3BwICovLAogCQkJCUIyMjI3OEJCMEQwMEJGMjAwMDcxQjc4
MiAvKiBTVkdOdW1iZXJMaXN0LmggKi8sCiAJCQkJQjIyMjc4QkMwRDAwQkYyMDAwNzFCNzgyIC8q
IFNWR051bWJlckxpc3QuaWRsICovLAogCQkJCUIyMjI3OEMwMEQwMEJGMjAwMDcxQjc4MiAvKiBT
VkdQYXJzZXJVdGlsaXRpZXMuY3BwICovLApAQCAtMjUyMjUsNiArMjUyMzIsNyBAQAogCQkJCUIy
MjI3OEYzMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXR0ZXJuRWxlbWVudC5pZGwgKi8sCiAJCQkJ
N0NFNThENDkxREQ2NEE1QjAwMTI4NTUyIC8qIFNWR1BvaW50LmggKi8sCiAJCQkJQjIyMjc4RjQw
RDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BvaW50LmlkbCAqLywKKwkJCQk3Q0Q3MEM0MjI0QTI4Qjcw
MDBFNjEwNDAgLyogU1ZHUG9pbnRMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzhGNjBEMDBCRjIxMDA3
MUI3ODIgLyogU1ZHUG9pbnRMaXN0LmggKi8sCiAJCQkJQjIyMjc4RjcwRDAwQkYyMTAwNzFCNzgy
IC8qIFNWR1BvaW50TGlzdC5pZGwgKi8sCiAJCQkJQjIyMjc4RjgwRDAwQkYyMTAwNzFCNzgyIC8q
IFNWR1BvbHlFbGVtZW50LmNwcCAqLywKQEAgLTI1MjU4LDYgKzI1MjY2LDcgQEAKIAkJCQlCMjIy
NzkxMjBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuY3BwICovLAogCQkJCUIyMjI3
OTEzMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdTdG9wRWxlbWVudC5oICovLAogCQkJCUIyMjI3OTE0
MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdTdG9wRWxlbWVudC5pZGwgKi8sCisJCQkJN0NENzBDNDMy
NEEyOEJFQzAwRTYxMDQwIC8qIFNWR1N0cmluZ0xpc3QuY3BwICovLAogCQkJCUIyMjI3OTE2MEQw
MEJGMjEwMDcxQjc4MiAvKiBTVkdTdHJpbmdMaXN0LmggKi8sCiAJCQkJQjIyMjc5MTcwRDAwQkYy
MTAwNzFCNzgyIC8qIFNWR1N0cmluZ0xpc3QuaWRsICovLAogCQkJCUIyMjI3OTIxMEQwMEJGMjEw
MDcxQjc4MiAvKiBTVkdTdHlsZUVsZW1lbnQuY3BwICovLApAQCAtMjUyOTksNiArMjUzMDgsNyBA
QAogCQkJCUIyMjI3OTQ0MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1hYmxlLmggKi8s
CiAJCQkJQjIyMjc5NDYwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmNw
cCAqLywKIAkJCQlCMjIyNzk0NzBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtRGlzdGFu
Y2UuaCAqLywKKwkJCQk3Q0Q3MEM0NjI0QTI4Q0Q3MDBFNjEwNDAgLyogU1ZHVHJhbnNmb3JtTGlz
dC5jcHAgKi8sCiAJCQkJQjIyMjc5NDkwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybUxp
c3QuaCAqLywKIAkJCQlCMjIyNzk0QTBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtTGlz
dC5pZGwgKi8sCiAJCQkJN0NFNThENTYxREQ3RDk2RDAwMTI4NTUyIC8qIFNWR1RyYW5zZm9ybVZh
bHVlLmggKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0
aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0
aWxpdGllcy5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9QYXJzaW5nVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwxNCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBib29sIGlzTm90QVNDSUlTcGFjZShVQ2hh
ciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+CitpbmxpbmUgYm9vbCBpc05vdEFTQ0lJ
U3BhY2UoQ2hhclR5cGUgYykKIHsKICAgICByZXR1cm4gIWlzQVNDSUlTcGFjZShjKTsKIH0KICAg
ICAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgotYm9vbCBza2lwRXhhY3RseShjb25zdCBD
aGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kLCBDaGFyVHlwZSBkZWxpbWl0
ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlwZW5hbWUgRGVsaW1pdGVyVHlwZT4K
K2Jvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5
cGUqIGVuZCwgRGVsaW1pdGVyVHlwZSBkZWxpbWl0ZXIpCiB7CiAgICAgaWYgKHBvc2l0aW9uIDwg
ZW5kICYmICpwb3NpdGlvbiA9PSBkZWxpbWl0ZXIpIHsKICAgICAgICAgKytwb3NpdGlvbjsKQEAg
LTQ5LDYgKzUwLDE2IEBAIGJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCB0eXBl
bmFtZSBEZWxpbWl0ZXJUeXBlPgorYm9vbCBza2lwRXhhY3RseShTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgRGVsaW1pdGVyVHlwZSBkZWxpbWl0ZXIpCit7Cisg
ICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5n
QnVmZmVyID09IGRlbGltaXRlcikgeworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+CiBib29s
IHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBl
bmQpCiB7CkBAIC01OSwxMyArNzAsMzAgQEAgYm9vbCBza2lwRXhhY3RseShjb25zdCBDaGFyVHlw
ZSomIHBvc2l0aQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
clR5cGU+Ci12b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBD
aGFyVHlwZSogZW5kLCBDaGFyVHlwZSBkZWxpbWl0ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
VHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgorYm9vbCBza2lwRXhhY3Rs
eShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICBp
ZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgY2hhcmFjdGVyUHJl
ZGljYXRlKCpwYXJzaW5nQnVmZmVyKSkgeworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJUeXBlLCB0eXBlbmFtZSBEZWxpbWl0ZXJUeXBlPgordm9pZCBza2lwVW50
aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCwgRGVsaW1p
dGVyVHlwZSBkZWxpbWl0ZXIpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmICpwb3Np
dGlvbiAhPSBkZWxpbWl0ZXIpCiAgICAgICAgICsrcG9zaXRpb247CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJUeXBlLCB0eXBlbmFtZSBEZWxpbWl0ZXJUeXBlPgordm9pZCBza2lwVW50aWwo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIsIERlbGltaXRlclR5
cGUgZGVsaW1pdGVyKQoreworICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNS
ZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciAhPSBkZWxpbWl0ZXIpCisgICAgICAgICsrcGFy
c2luZ0J1ZmZlcjsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFj
dGVyUHJlZGljYXRlKENoYXJUeXBlKT4KIHZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYg
cG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQpCiB7CkBAIC03NCw2ICsxMDIsMTMgQEAgdm9p
ZCBza2lwVW50aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbgogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgordm9pZCBz
a2lwVW50aWwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7
CisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICFj
aGFyYWN0ZXJQcmVkaWNhdGUoKnBhcnNpbmdCdWZmZXIpKQorICAgICAgICArK3BhcnNpbmdCdWZm
ZXI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRp
Y2F0ZShDaGFyVHlwZSk+CiB2b2lkIHNraXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9u
LCBjb25zdCBDaGFyVHlwZSogZW5kKQogewogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiBj
aGFyYWN0ZXJQcmVkaWNhdGUoKnBvc2l0aW9uKSkKQEAgLTgxLDYgKzExNiwxMyBAQCB2b2lkIHNr
aXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Cit2b2lkIHNraXBX
aGlsZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAg
ICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgY2hhcmFj
dGVyUHJlZGljYXRlKCpwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUo
Q2hhclR5cGUpPgogdm9pZCByZXZlcnNlU2tpcFdoaWxlKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRp
b24sIGNvbnN0IENoYXJUeXBlKiBzdGFydCkKIHsKICAgICB3aGlsZSAocG9zaXRpb24gPj0gc3Rh
cnQgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwb3NpdGlvbikpCkBAIC05MiwxMSArMTM0LDQxIEBA
IGJvb2wgc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCAKIHsKICAgICBpZiAocG9z
aXRpb24gKyBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoID4gZW5kKQogICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFXVEY6OmVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9u
LCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSwgbG93ZXJjYXNlTGV0dGVycykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBwb3NpdGlvbiArPSAobG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAt
IDEpOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgYm9vbCByZXN1bHQgPSBXVEY6OmVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3Ro
IC0gMSwgbG93ZXJjYXNlTGV0dGVycyk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcG9zaXRp
b24gKz0gKGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWduZWQgbG93ZXJjYXNlTGV0dGVy
c0xlbmd0aD4KK2Jvb2wgc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdQYXJzaW5n
QnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyLCBjb25zdCBjaGFyICgmbG93ZXJj
YXNlTGV0dGVycylbbG93ZXJjYXNlTGV0dGVyc0xlbmd0aF0pCit7CisgICAgaWYgKHBhcnNpbmdC
dWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPD0gbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCksIGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAx
LCBsb3dlcmNhc2VMZXR0ZXJzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBhcnNpbmdC
dWZmZXIuYWR2YW5jZUJ5KGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWduZWQgY2hh
cmFjdGVyQ291bnQ+IGNvbnN0ZXhwciBib29sIHNraXBDaGFyYWN0ZXJzRXhhY3RseShjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGNvbnN0IENoYXJh
Y3RlclR5cGUoJnN0cilbY2hhcmFjdGVyQ291bnRdKQoreworICAgIGlmIChlbmQgLSBwdHIgPCBj
aGFyYWN0ZXJDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtZW1jbXAoc3Ry
LCBwdHIsIHNpemVvZihDaGFyYWN0ZXJUeXBlKSAqIGNoYXJhY3RlckNvdW50KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHB0ciArPSBjaGFyYWN0ZXJDb3VudDsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWduZWQgY2hhcmFj
dGVyQ291bnQ+IGNvbnN0ZXhwciBib29sIHNraXBDaGFyYWN0ZXJzRXhhY3RseShTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKCZzdHIpW2NoYXJhY3RlckNvdW50XSkKK3sKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5sZW5n
dGhSZW1haW5pbmcoKSA8IGNoYXJhY3RlckNvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1lbWNtcChzdHIsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSwgc2l6ZW9mKENoYXJh
Y3RlclR5cGUpICogY2hhcmFjdGVyQ291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cGFyc2luZ0J1ZmZlci5hZHZhbmNlQnkoY2hhcmFjdGVyQ291bnQpOworICAgIHJldHVybiB0cnVl
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAkocmV2aXNpb24g
MjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwNCArMzAsOTYgQEAKICNpbmNsdWRlIDxw
YWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNp
bmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotc3RhdGljIGJvb2wgcGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5jaW5nUG9z
aXRpb24oY29uc3QgQ2hhcmFjdGVyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQsIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtJiBhbGdvcml0aG0p
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8UmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0+IHBhcnNlSGFzaEFsZ29yaXRobUFkdmFu
Y2luZ1Bvc2l0aW9uKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdC
dWZmZXIpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd291bGQgYmUgbXVjaCBjbGVhbmVyIHdpdGgg
YSBsb29rdXAgdGFibGUgb2YgcGFpcnMgb2YgbGFiZWwgLyBhbGdvcml0aG0gZW51bSB2YWx1ZXMs
IGJ1dCBJIGNhbid0CiAgICAgLy8gZmlndXJlIG91dCBob3cgdG8ga2VlcCB0aGUgbGFiZWxzIGNv
bXBpbGV0aW1lIHN0cmluZ3MgZm9yIHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UuCiAKLSAg
ICBpZiAoc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgZW5kLCAic2hhMjU2
IikpIHsKLSAgICAgICAgYWxnb3JpdGhtID0gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpB
bGdvcml0aG06OlNIQTI1NjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChz
a2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBlbmQsICJzaGEzODQiKSkgewot
ICAgICAgICBhbGdvcml0aG0gPSBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRo
bTo6U0hBMzg0OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHNraXBFeGFj
dGx5SWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGVuZCwgInNoYTUxMiIpKSB7Ci0gICAgICAg
IGFsZ29yaXRobSA9IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEE1
MTI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBpZiAoc2tpcEV4YWN0bHlJZ25v
cmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAic2hhMjU2IikpCisgICAgICAgIHJldHVybiBS
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hBMjU2OworICAgIGlmIChz
a2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICJzaGEzODQiKSkKKyAg
ICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEEz
ODQ7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwg
InNoYTUxMiIpKQorICAgICAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpB
bGdvcml0aG06OlNIQTUxMjsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIE9w
dGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGln
ZXN0SW1wbChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5
cGUqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25h
bDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdElt
cGwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKIHsK
LSAgICBpZiAocG9zaXRpb24gPT0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG07Ci0gICAgaWYgKCFwYXJzZUhhc2hBbGdvcml0
aG1BZHZhbmNpbmdQb3NpdGlvbihwb3NpdGlvbiwgZW5kLCBhbGdvcml0aG0pKQorICAgIGF1dG8g
YWxnb3JpdGhtID0gcGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5jaW5nUG9zaXRpb24ocGFyc2luZ0J1
ZmZlcik7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICct
JykpCisgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAn
LScpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgY29uc3QgQ2hhcmFjdGVy
VHlwZSogYmVnaW5IYXNoVmFsdWUgPSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Ci0gICAg
c2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz0nKTsKLSAgICBza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPScpOworICAgIGF1dG8gYmVn
aW5IYXNoVmFsdWUgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENo
YXJhY3RlclR5cGUsIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIp
OworICAgIHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc9Jyk7Cisg
ICAgc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz0nKTsKIAotICAg
IGlmIChwb3NpdGlvbiA9PSBiZWdpbkhhc2hWYWx1ZSkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpID09IGJlZ2luSGFzaFZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdDsKLSAgICBTdHJpbmdWaWV3IGhhc2hWYWx1
ZShiZWdpbkhhc2hWYWx1ZSwgcG9zaXRpb24gLSBiZWdpbkhhc2hWYWx1ZSk7CisgICAgU3RyaW5n
VmlldyBoYXNoVmFsdWUoYmVnaW5IYXNoVmFsdWUsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAt
IGJlZ2luSGFzaFZhbHVlKTsKICAgICBpZiAoIWJhc2U2NERlY29kZShoYXNoVmFsdWUsIGRpZ2Vz
dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkgewogICAgICAgICBpZiAoIWJhc2U2NFVSTERlY29k
ZShoYXNoVmFsdWUsIGRpZ2VzdCkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIH0KIAotICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyBhbGdvcml0
aG0sIFdURk1vdmUoZGlnZXN0KSB9OworICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QgeyAqYWxnb3JpdGhtLCBXVEZNb3ZlKGRpZ2VzdCkgfTsKIH0KIAotT3B0aW9uYWw8UmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3Qg
VUNoYXIqJiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkKK09wdGlvbmFsPFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZm
ZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBo
aWNEaWdlc3RJbXBsKGJlZ2luLCBlbmQpOworICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNE
aWdlc3RJbXBsKHBhcnNpbmdCdWZmZXIpOwogfQogCi1PcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBMQ2hhciomIGJlZ2lu
LCBjb25zdCBMQ2hhciogZW5kKQorT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIHBh
cnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwo
YmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwocGFy
c2luZ0J1ZmZlcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0
aWMgT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNv
ZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHBvc2l0aW9u
LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBzdGF0aWMgT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4g
cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBpZiAocG9zaXRpb24gPT0gZW5k
KQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0
aG0gYWxnb3JpdGhtOwotICAgIGlmICghcGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5jaW5nUG9zaXRp
b24ocG9zaXRpb24sIGVuZCwgYWxnb3JpdGhtKSkKKyAgICBhdXRvIGFsZ29yaXRobSA9IHBhcnNl
SGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9uKHBhcnNpbmdCdWZmZXIpOworICAgIGlmICgh
YWxnb3JpdGhtKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCFza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnLScpKQorICAgIGlmICghc2tp
cEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy0nKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luSGFzaFZh
bHVlID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQmFzZTY0T3JC
YXNlNjRVUkxDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotICAgIHNraXBFeGFjdGx5PENoYXJh
Y3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICc9Jyk7Ci0gICAgc2tpcEV4YWN0bHk8Q2hhcmFjdGVy
VHlwZT4ocG9zaXRpb24sIGVuZCwgJz0nKTsKKyAgICBhdXRvIGJlZ2luSGFzaFZhbHVlID0gcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0Jh
c2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKKyAgICBza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnPScpOworICAgIHNraXBFeGFjdGx5PENo
YXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc9Jyk7CiAKLSAgICBpZiAocG9zaXRpb24gPT0g
YmVnaW5IYXNoVmFsdWUpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA9PSBiZWdp
bkhhc2hWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBF
bmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgYWxnb3JpdGhtLCBTdHJpbmcoYmVn
aW5IYXNoVmFsdWUsIHBvc2l0aW9uIC0gYmVnaW5IYXNoVmFsdWUpIH07CisgICAgcmV0dXJuIEVu
Y29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyAqYWxnb3JpdGhtLCBTdHJpbmcoYmVn
aW5IYXNoVmFsdWUsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luSGFzaFZhbHVlKSB9
OwogfQogCi1PcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJz
ZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IFVDaGFyKiYgYmVnaW4sIGNvbnN0IFVD
aGFyKiBlbmQpCitPcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBw
YXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+
JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGlj
RGlnZXN0SW1wbChiZWdpbiwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdEltcGwocGFyc2luZ0J1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPEVuY29kZWRSZXNv
dXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3Qo
Y29uc3QgTENoYXIqJiBiZWdpbiwgY29uc3QgTENoYXIqIGVuZCkKK09wdGlvbmFsPEVuY29kZWRS
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdl
c3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0
dXJuIHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJlZ2luLCBlbmQpOworICAg
IHJldHVybiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChwYXJzaW5nQnVmZmVy
KTsKIH0KIAogT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVFbmNv
ZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IEVuY29kZWRSZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3QmIGVuY29kZWREaWdlc3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCShyZXZpc2lvbiAyNjMz
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2NiwxMSBAQCBzdHJ1Y3QgRW5jb2RlZFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzCiAgICAgU3RyaW5nIGRpZ2VzdDsKIH07CiAKLU9wdGlvbmFs
PFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNv
bnN0IFVDaGFyKiYgYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOwotT3B0aW9uYWw8UmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgTENoYXIq
JiBiZWdpbiwgY29uc3QgTENoYXIqIGVuZCk7CitPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVD
aGFyPiYpOworT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0
b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsKIAotT3B0aW9uYWw8
RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdChjb25zdCBVQ2hhciomIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKLU9wdGlv
bmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0
b2dyYXBoaWNEaWdlc3QoY29uc3QgTENoYXIqJiBiZWdpbiwgY29uc3QgTENoYXIqIGVuZCk7CitP
cHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRD
cnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CitPcHRpb25h
bDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9n
cmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CiAKIE9wdGlvbmFsPFJl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0Jik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUludGVncml0eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlSW50ZWdyaXR5LmNw
cAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNl
SW50ZWdyaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IlBhcnNpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdl
c3QuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdQYXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsNyArNTEs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKKyAgICBi
b29sIG9wZXJhdG9yKCkoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2lu
Z0J1ZmZlcikKICAgICB7CiAgICAgICAgIC8vIEluaXRpYWxpemUgaGFzaGVzIHRvIGJlIHNvbWV0
aGluZyBvdGhlciBXVEY6Om51bGxvcHQsIHRvIGluZGljYXRlCiAgICAgICAgIC8vIHRoYXQgYXQg
bGVhc3Qgb25lIHRva2VuIHdhcyBzZWVuLCBhbmQgdGh1cyBzZXR0aW5nIHRoZSBlbXB0eSBmbGFn
CkBAIC01OCwxOSArNTksMTkgQEAgcHVibGljOgogICAgICAgICBpZiAoIW1fZGlnZXN0cykKICAg
ICAgICAgICAgIG1fZGlnZXN0cyA9IFZlY3RvcjxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0PiB7IH07CiAKLSAgICAgICAgYXV0byBkaWdlc3QgPSBwYXJzZUVuY29kZWRDcnlwdG9n
cmFwaGljRGlnZXN0KHBvc2l0aW9uLCBlbmQpOworICAgICAgICBhdXRvIGRpZ2VzdCA9IHBhcnNl
RW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICgh
ZGlnZXN0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIFRoZSBzcGVj
IGFsbG93cyBmb3Igb3B0aW9ucyBmb2xsb3dpbmcgdGhlIGRpZ2VzdCwgYnV0IHNvIGZhciwgbm8K
ICAgICAgICAgLy8gc3BlY2lmaWMgb3B0aW9ucyBoYXZlIGJlZW4gc3BlY2lmaWVkLiBUaHVzLCB3
ZSBqdXN0IHBhcnNlIGFuZCBpZ25vcmUKICAgICAgICAgLy8gdGhlbS4gVGhlaXIgc3ludGF4IGlz
IGEgJz8nIGZvbGxvdyBieSBhbnkgbnVtYmVyIG9mIFZDSEFScy4KLSAgICAgICAgaWYgKHNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICc/JykpCi0gICAgICAgICAgICBz
a2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNWQ0hBUj4ocG9zaXRpb24sIGVuZCk7CisgICAgICAg
IGlmIChza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnPycpKQorICAg
ICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzVkNIQVI+KHBhcnNpbmdCdWZmZXIp
OwogCiAgICAgICAgIC8vIEFmdGVyIHRoZSBiYXNlNjQgdmFsdWUgYW5kIG9wdGlvbnMsIHRoZSBj
dXJyZW50IGNoYXJhY3RlciBwb2ludGVkIHRvIGJ5IHBvc2l0aW9uCiAgICAgICAgIC8vIHNob3Vs
ZCBlaXRoZXIgYmUgdGhlIGVuZCBvciBhIHNwYWNlLgotICAgICAgICBpZiAocG9zaXRpb24gIT0g
ZW5kICYmICFpc0hUTUxTcGFjZSgqcG9zaXRpb24pKQorICAgICAgICBpZiAoIXBhcnNpbmdCdWZm
ZXIuYXRFbmQoKSAmJiAhaXNIVE1MU3BhY2UoKnBhcnNpbmdCdWZmZXIpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgIG1fZGlnZXN0cy0+YXBwZW5kKFdURk1vdmUoKmRpZ2Vz
dCkpOwpAQCAtODQsMTcgKzg1LDE0IEBAIHByaXZhdGU6CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgotc3RhdGljIGlubGluZSB2b2lkIHNw
bGl0T25TcGFjZXMoY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW4sIGNvbnN0IENoYXJhY3RlclR5
cGUqIGVuZCwgRnVuY3RvciYmIGZ1bmN0b3IpCitzdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRPblNw
YWNlcyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIsIEZ1
bmN0b3ImJiBmdW5jdG9yKQogewotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHBvc2l0aW9uID0g
YmVnaW47CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzSFRNTFNwYWNlPihwYXJzaW5n
QnVmZmVyKTsKIAotICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0hUTUxTcGFjZT4ocG9z
aXRpb24sIGVuZCk7Ci0KLSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgaWYg
KCFmdW5jdG9yKHBvc2l0aW9uLCBlbmQpKQotICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzTm90SFRNTFNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLQotICAgICAgICBza2lwV2hp
bGU8Q2hhcmFjdGVyVHlwZSwgaXNIVE1MU3BhY2U+KHBvc2l0aW9uLCBlbmQpOworICAgIHdoaWxl
IChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICBpZiAo
IWZ1bmN0b3IocGFyc2luZ0J1ZmZlcikpCisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNOb3RIVE1MU3BhY2U+KHBhcnNpbmdCdWZmZXIpOworICAgICAgICBza2lwV2hpbGU8
Q2hhcmFjdGVyVHlwZSwgaXNIVE1MU3BhY2U+KHBhcnNpbmdCdWZmZXIpOwogICAgIH0KIH0KIApA
QCAtMTA1LDExICsxMDMsMTEgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxFbmNvZGVkUmVzb3Vy
Y2VDcgogCiAgICAgT3B0aW9uYWw8VmVjdG9yPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3Q+PiByZXN1bHQ7CiAgICAgCi0gICAgY29uc3QgU3RyaW5nSW1wbCYgc3RyaW5nSW1wbCA9
ICppbnRlZ3JpdHlNZXRhZGF0YS5pbXBsKCk7Ci0gICAgaWYgKHN0cmluZ0ltcGwuaXM4Qml0KCkp
Ci0gICAgICAgIHNwbGl0T25TcGFjZXMoc3RyaW5nSW1wbC5jaGFyYWN0ZXJzOCgpLCBzdHJpbmdJ
bXBsLmNoYXJhY3RlcnM4KCkgKyBzdHJpbmdJbXBsLmxlbmd0aCgpLCBJbnRlZ3JpdHlNZXRhZGF0
YVBhcnNlcjxMQ2hhcj4geyByZXN1bHQgfSk7Ci0gICAgZWxzZQotICAgICAgICBzcGxpdE9uU3Bh
Y2VzKHN0cmluZ0ltcGwuY2hhcmFjdGVyczE2KCksIHN0cmluZ0ltcGwuY2hhcmFjdGVyczE2KCkg
KyBzdHJpbmdJbXBsLmxlbmd0aCgpLCBJbnRlZ3JpdHlNZXRhZGF0YVBhcnNlcjxVQ2hhcj4geyBy
ZXN1bHQgfSk7CisgICAgV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoaW50ZWdyaXR5TWV0
YWRhdGEsIFsmcmVzdWx0XSAoYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHVzaW5nIENo
YXJhY3RlclR5cGUgPSB0eXBlbmFtZSBkZWNsdHlwZShwYXJzaW5nQnVmZmVyKTo6Q2hhcmFjdGVy
VHlwZTsKKworICAgICAgICBzcGxpdE9uU3BhY2VzKHBhcnNpbmdCdWZmZXIsIEludGVncml0eU1l
dGFkYXRhUGFyc2VyPENoYXJhY3RlclR5cGU+IHsgcmVzdWx0IH0pOworICAgIH0pOwogCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9N
YW5pZmVzdFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL01hbmlmZXN0UGFyc2VyLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL01hbmlmZXN0UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKQEAgLTY3LDEzNyArNjgsMTQwIEBAIGJvb2wgcGFyc2VN
YW5pZmVzdChjb25zdCBVUkwmIG1hbmlmZXN0VVIKICAgICBpZiAoIW1hbmlmZXN0U3RyaW5nLnN0
YXJ0c1dpdGgobWFuaWZlc3RTaWduYXR1cmUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Ci0gICAgU3RyaW5nVmlldyBtYW5pZmVzdEFmdGVyU2lnbmF0dXJlID0gU3RyaW5nVmlldyhtYW5p
ZmVzdFN0cmluZykuc3Vic3RyaW5nKHNpemVvZihtYW5pZmVzdFNpZ25hdHVyZSkgLSAxKTsKLSAg
ICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IG1hbmlmZXN0QWZ0ZXJTaWduYXR1cmUudXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHAgPSB1cGNvbnZlcnRlZENo
YXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHAgKyBtYW5pZmVzdEFmdGVyU2lnbmF0
dXJlLmxlbmd0aCgpOworICAgIGF1dG8gbWFuaWZlc3RBZnRlclNpZ25hdHVyZSA9IFN0cmluZ1Zp
ZXcobWFuaWZlc3RTdHJpbmcpLnN1YnN0cmluZyhzaXplb2YobWFuaWZlc3RTaWduYXR1cmUpIC0g
MSk7CiAKLSAgICBpZiAocCA8IGVuZCAmJiAqcCAhPSAnICcgJiYgKnAgIT0gJ1x0JyAmJiAqcCAh
PSAnXG4nICYmICpwICE9ICdccicpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBGSVhN
RTogVGhpcyBwYXJzZXIgY291bGQgYmUgbXVjaCBjbGVhcmVyIGlmIGl0IGFkb3B0ZWQgc29tZSBv
ZiB0aGUgY29tbW9uIHBhcnNpbmcgdXRpbGl0aWVzCisgICAgLy8gZm9yIHNraXBwaW5nIGFuZCBj
b21wYXJpbmcuCiAKLSAgICAvLyBTa2lwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCi0gICAgd2hp
bGUgKHAgPCBlbmQgJiYgKnAgIT0gJ1xyJyAmJiAqcCAhPSAnXG4nKQotICAgICAgICBwKys7Ci0K
LSAgICB3aGlsZSAoMSkgewotICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2UKLSAgICAgICAgd2hp
bGUgKHAgPCBlbmQgJiYgKCpwID09ICdcbicgfHwgKnAgPT0gJ1xyJyB8fCAqcCA9PSAnICcgfHwg
KnAgPT0gJ1x0JykpCi0gICAgICAgICAgICBwKys7Ci0gICAgICAgIAotICAgICAgICBpZiAocCA9
PSBlbmQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IFVDaGFy
KiBsaW5lU3RhcnQgPSBwOwotICAgICAgICAKLSAgICAgICAgLy8gRmluZCB0aGUgZW5kIG9mIHRo
ZSBsaW5lCi0gICAgICAgIHdoaWxlIChwIDwgZW5kICYmICpwICE9ICdccicgJiYgKnAgIT0gJ1xu
JykKLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIGlmIHdlIGhh
dmUgYSBjb21tZW50Ci0gICAgICAgIGlmICgqbGluZVN0YXJ0ID09ICcjJykKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgLy8gR2V0IHJpZCBvZiB0cmFpbGluZyB3aGl0
ZXNwYWNlCi0gICAgICAgIGNvbnN0IFVDaGFyKiB0bXAgPSBwIC0gMTsKLSAgICAgICAgd2hpbGUg
KHRtcCA+IGxpbmVTdGFydCAmJiAoKnRtcCA9PSAnICcgfHwgKnRtcCA9PSAnXHQnKSkKLSAgICAg
ICAgICAgIHRtcC0tOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGxpbmUobGluZVN0YXJ0LCB0
bXAgLSBsaW5lU3RhcnQgKyAxKTsKLQotICAgICAgICBpZiAobGluZSA9PSAiQ0FDSEU6IikgCi0g
ICAgICAgICAgICBtb2RlID0gRXhwbGljaXQ7Ci0gICAgICAgIGVsc2UgaWYgKGxpbmUgPT0gIkZB
TExCQUNLOiIpCi0gICAgICAgICAgICBtb2RlID0gRmFsbGJhY2s7Ci0gICAgICAgIGVsc2UgaWYg
KGxpbmUgPT0gIk5FVFdPUks6IikKLSAgICAgICAgICAgIG1vZGUgPSBPbmxpbmVBbGxvd2xpc3Q7
Ci0gICAgICAgIGVsc2UgaWYgKGxpbmUuZW5kc1dpdGgoJzonKSkKLSAgICAgICAgICAgIG1vZGUg
PSBVbmtub3duOwotICAgICAgICBlbHNlIGlmIChtb2RlID09IFVua25vd24pCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBFeHBsaWNpdCB8fCBtb2RlID09
IE9ubGluZUFsbG93bGlzdCkgewotICAgICAgICAgICAgYXV0byB1cGNvbnZlcnRlZExpbmVDaGFy
YWN0ZXJzID0gU3RyaW5nVmlldyhsaW5lKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAg
ICAgICAgIGNvbnN0IFVDaGFyKiBwID0gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVyczsKLSAgICAg
ICAgICAgIGNvbnN0IFVDaGFyKiBsaW5lRW5kID0gcCArIGxpbmUubGVuZ3RoKCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUg
VVJMIGZyb20gc3Vic2VxdWVudCBpZ25vcmVkIHRva2Vucy4KLSAgICAgICAgICAgIHdoaWxlIChw
IDwgbGluZUVuZCAmJiAqcCAhPSAnXHQnICYmICpwICE9ICcgJykgCi0gICAgICAgICAgICAgICAg
cCsrOworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhtYW5pZmVzdEFm
dGVyU2lnbmF0dXJlLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIGF1dG8gcCA9
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgYXV0byBlbmQgPSBwYXJzaW5nQnVm
ZmVyLmVuZCgpOwogCi0gICAgICAgICAgICBpZiAobW9kZSA9PSBPbmxpbmVBbGxvd2xpc3QgJiYg
cCAtIHVwY29udmVydGVkTGluZUNoYXJhY3RlcnMgPT0gMSAmJiBsaW5lWzBdID09ICcqJykgewot
ICAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHdhcyBmb3VuZC4KLSAgICAgICAgICAgICAgICBt
YW5pZmVzdC5hbGxvd0FsbE5ldHdvcmtSZXF1ZXN0cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChwIDwgZW5kICYmICpwICE9ICcg
JyAmJiAqcCAhPSAnXHQnICYmICpwICE9ICdcbicgJiYgKnAgIT0gJ1xyJykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgVVJMIHVybChtYW5pZmVzdFVSTCwgbGluZS5z
dWJzdHJpbmcoMCwgcCAtIHVwY29udmVydGVkTGluZUNoYXJhY3RlcnMpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAvLyBTa2lwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisgICAgICAgIHdo
aWxlIChwIDwgZW5kICYmICpwICE9ICdccicgJiYgKnAgIT0gJ1xuJykKKyAgICAgICAgICAgIHAr
KzsKIAotICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UodXJsLnByb3Rv
Y29sKCksIG1hbmlmZXN0VVJMLnByb3RvY29sKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlCisg
ICAgICAgICAgICB3aGlsZSAocCA8IGVuZCAmJiAoKnAgPT0gJ1xuJyB8fCAqcCA9PSAnXHInIHx8
ICpwID09ICcgJyB8fCAqcCA9PSAnXHQnKSkKKyAgICAgICAgICAgICAgICBwKys7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChtb2RlID09IEV4cGxpY2l0ICYmIG1hbmlmZXN0VVJMLnBy
b3RvY29sSXMoImh0dHBzIikgJiYgIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVz
dFVSTCwgdXJsKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChw
ID09IGVuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKG1vZGUgPT0gRXhwbGljaXQpCi0gICAgICAgICAgICAgICAgbWFuaWZlc3QuZXhwbGlj
aXRVUkxzLmFkZCh1cmwuc3RyaW5nKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG1hbmlmZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVuZCh1cmwpOwotICAgICAgICAgICAg
Ci0gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBGYWxsYmFjaykgewotICAgICAgICAgICAgYXV0
byB1cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhsaW5lKS51cGNvbnZlcnRl
ZENoYXJhY3RlcnMoKTsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBwID0gdXBjb252ZXJ0ZWRM
aW5lQ2hhcmFjdGVyczsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBsaW5lRW5kID0gcCArIGxp
bmUubGVuZ3RoKCk7CisgICAgICAgICAgICBhdXRvIGxpbmVTdGFydCA9IHA7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUgdHdv
IFVSTHMKLSAgICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAqcCAhPSAnXHQnICYmICpw
ICE9ICcgJykgCisgICAgICAgICAgICAvLyBGaW5kIHRoZSBlbmQgb2YgdGhlIGxpbmUKKyAgICAg
ICAgICAgIHdoaWxlIChwIDwgZW5kICYmICpwICE9ICdccicgJiYgKnAgIT0gJ1xuJykKICAgICAg
ICAgICAgICAgICBwKys7Ci0KLSAgICAgICAgICAgIGlmIChwID09IGxpbmVFbmQpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGVyZSB3YXMgbm8gd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSBVUkxz
LgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBVUkwgbmFtZXNwYWNlVVJMKG1hbmlmZXN0VVJMLCBsaW5lLnN1YnN0cmlu
ZygwLCBwIC0gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVycykpOwotICAgICAgICAgICAgaWYgKCFu
YW1lc3BhY2VVUkwuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgbmFtZXNwYWNlVVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotCi0gICAgICAg
ICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVSTCwgbmFtZXNw
YWNlVVJMKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gQWx0
aG91Z2ggPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29mZmxpbmUuaHRt
bCNwYXJzaW5nLWNhY2hlLW1hbmlmZXN0cz4gKDA3LzA2LzIwMTcpIHNhaWRzCi0gICAgICAgICAg
ICAvLyB0aGF0IHdlIHNob3VsZCBhbHdheXMgcHJlZml4IG1hdGNoIHRoZSBtYW5pZmVzdCBwYXRo
IHdlIG9ubHkgZG8gc28gaWYgdGhlIG1hbmlmZXN0IHdhcyBzZXJ2ZWQgd2l0aCBhIG5vbi0KLSAg
ICAgICAgICAgIC8vIHN0YW5kYXJkIEhUVFAgQ29udGVudC1UeXBlIGhlYWRlciBmb3Igd2ViIGNv
bXBhdGliaWxpdHkuCi0gICAgICAgICAgICBpZiAoIWFsbG93RmFsbGJhY2tOYW1lc3BhY2VPdXRz
aWRlTWFuZmVzdFBhdGggJiYgIW5hbWVzcGFjZVVSTC5wYXRoKCkuc3RhcnRzV2l0aChtYW5pZmVz
dFBhdGgpKQorICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNvbW1lbnQKKyAgICAg
ICAgICAgIGlmICgqbGluZVN0YXJ0ID09ICcjJykKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gR2V0IHJpZCBvZiB0cmFpbGluZyB3aGl0ZXNw
YWNlCisgICAgICAgICAgICBhdXRvIHRtcCA9IHAgLSAxOworICAgICAgICAgICAgd2hpbGUgKHRt
cCA+IGxpbmVTdGFydCAmJiAoKnRtcCA9PSAnICcgfHwgKnRtcCA9PSAnXHQnKSkKKyAgICAgICAg
ICAgICAgICB0bXAtLTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nVmlldyBsaW5l
KGxpbmVTdGFydCwgdG1wIC0gbGluZVN0YXJ0ICsgMSk7CisKKyAgICAgICAgICAgIGlmIChsaW5l
ID09ICJDQUNIRToiKQorICAgICAgICAgICAgICAgIG1vZGUgPSBFeHBsaWNpdDsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGxpbmUgPT0gIkZBTExCQUNLOiIpCisgICAgICAgICAgICAgICAgbW9kZSA9
IEZhbGxiYWNrOworICAgICAgICAgICAgZWxzZSBpZiAobGluZSA9PSAiTkVUV09SSzoiKQorICAg
ICAgICAgICAgICAgIG1vZGUgPSBPbmxpbmVBbGxvd2xpc3Q7CisgICAgICAgICAgICBlbHNlIGlm
IChsaW5lLmVuZHNXaXRoKCc6JykpCisgICAgICAgICAgICAgICAgbW9kZSA9IFVua25vd247Cisg
ICAgICAgICAgICBlbHNlIGlmIChtb2RlID09IFVua25vd24pCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBlbHNlIGlmIChtb2RlID09IEV4cGxpY2l0IHx8IG1vZGUgPT0g
T25saW5lQWxsb3dsaXN0KSB7CisgICAgICAgICAgICAgICAgYXV0byBwID0gbGluZVN0YXJ0Owor
ICAgICAgICAgICAgICAgIGF1dG8gbGluZUVuZCA9IHAgKyBsaW5lLmxlbmd0aCgpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2Ugc2VwYXJh
dGluZyB0aGUgVVJMIGZyb20gc3Vic2VxdWVudCBpZ25vcmVkIHRva2Vucy4KKyAgICAgICAgICAg
ICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnICcpCisgICAg
ICAgICAgICAgICAgICAgIHArKzsKKworICAgICAgICAgICAgICAgIGlmIChtb2RlID09IE9ubGlu
ZUFsbG93bGlzdCAmJiBwIC0gbGluZVN0YXJ0ID09IDEgJiYgbGluZVswXSA9PSAnKicpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgd2FzIGZvdW5kLgorICAgICAgICAgICAgICAg
ICAgICBtYW5pZmVzdC5hbGxvd0FsbE5ldHdvcmtSZXF1ZXN0cyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IFVSTCB1cmwobWFuaWZlc3RVUkwsIGxpbmUuc3Vic3RyaW5nKDAsIHAgLSBsaW5lU3RhcnQpLnRv
U3RyaW5nKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghdXJsLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAg
ICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHVybC5wcm90b2NvbCgpLCBt
YW5pZmVzdFVSTC5wcm90b2NvbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gRXhwbGljaXQgJiYg
bWFuaWZlc3RVUkwucHJvdG9jb2xJcygiaHR0cHMiKSAmJiAhcHJvdG9jb2xIb3N0QW5kUG9ydEFy
ZUVxdWFsKG1hbmlmZXN0VVJMLCB1cmwpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBFeHBsaWNpdCkK
KyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3QuZXhwbGljaXRVUkxzLmFkZCh1cmwuc3RyaW5n
KCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qu
b25saW5lQWxsb3dlZFVSTHMuYXBwZW5kKHVybCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gRmFsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHAgPSBsaW5lU3RhcnQ7CisgICAgICAgICAgICAgICAgYXV0byBsaW5lRW5kID0gcCArIGxpbmUu
bGVuZ3RoKCk7CisKKyAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFy
YXRpbmcgdGhlIHR3byBVUkxzCisgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBsaW5lRW5kICYm
ICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKQorICAgICAgICAgICAgICAgICAgICBwKys7CisKKyAg
ICAgICAgICAgICAgICBpZiAocCA9PSBsaW5lRW5kKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFRoZXJlIHdhcyBubyB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTHMuCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBVUkwgbmFtZXNwYWNlVVJMKG1hbmlmZXN0VVJMLCBsaW5lLnN1YnN0
cmluZygwLCBwIC0gbGluZVN0YXJ0KS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IW5hbWVzcGFjZVVSTC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIG5hbWVzcGFjZVVSTC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsK
KworICAgICAgICAgICAgICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1hbmlm
ZXN0VVJMLCBuYW1lc3BhY2VVUkwpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgICAgIC8vIEFsdGhvdWdoIDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3Jn
L211bHRpcGFnZS9vZmZsaW5lLmh0bWwjcGFyc2luZy1jYWNoZS1tYW5pZmVzdHM+ICgwNy8wNi8y
MDE3KSBzYWlkcworICAgICAgICAgICAgICAgIC8vIHRoYXQgd2Ugc2hvdWxkIGFsd2F5cyBwcmVm
aXggbWF0Y2ggdGhlIG1hbmlmZXN0IHBhdGggd2Ugb25seSBkbyBzbyBpZiB0aGUgbWFuaWZlc3Qg
d2FzIHNlcnZlZCB3aXRoIGEgbm9uLQorICAgICAgICAgICAgICAgIC8vIHN0YW5kYXJkIEhUVFAg
Q29udGVudC1UeXBlIGhlYWRlciBmb3Igd2ViIGNvbXBhdGliaWxpdHkuCisgICAgICAgICAgICAg
ICAgaWYgKCFhbGxvd0ZhbGxiYWNrTmFtZXNwYWNlT3V0c2lkZU1hbmZlc3RQYXRoICYmICFuYW1l
c3BhY2VVUkwucGF0aCgpLnN0YXJ0c1dpdGgobWFuaWZlc3RQYXRoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2Ugc2Vw
YXJhdGluZyBmYWxsYmFjayBuYW1lc3BhY2UgZnJvbSBVUkwuCisgICAgICAgICAgICAgICAgd2hp
bGUgKHAgPCBsaW5lRW5kICYmICgqcCA9PSAnXHQnIHx8ICpwID09ICcgJykpCisgICAgICAgICAg
ICAgICAgICAgIHArKzsKKworICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2Ug
c2VwYXJhdGluZyB0aGUgVVJMIGZyb20gc3Vic2VxdWVudCBpZ25vcmVkIHRva2Vucy4KKyAgICAg
ICAgICAgICAgICBhdXRvIGZhbGxiYWNrU3RhcnQgPSBwOworICAgICAgICAgICAgICAgIHdoaWxl
IChwIDwgbGluZUVuZCAmJiAqcCAhPSAnXHQnICYmICpwICE9ICcgJykKKyAgICAgICAgICAgICAg
ICAgICAgcCsrOworCisgICAgICAgICAgICAgICAgVVJMIGZhbGxiYWNrVVJMKG1hbmlmZXN0VVJM
LCBTdHJpbmcoZmFsbGJhY2tTdGFydCwgcCAtIGZhbGxiYWNrU3RhcnQpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWZhbGxiYWNrVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVh
bChtYW5pZmVzdFVSTCwgZmFsbGJhY2tVUkwpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgICAgIG1hbmlmZXN0LmZhbGxiYWNrVVJMcy5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIobmFtZXNwYWNlVVJMLCBmYWxsYmFja1VSTCkpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KIAotICAg
ICAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgZmFsbGJhY2sgbmFtZXNwYWNl
IGZyb20gVVJMLgotICAgICAgICAgICAgd2hpbGUgKHAgPCBsaW5lRW5kICYmICgqcCA9PSAnXHQn
IHx8ICpwID09ICcgJykpCi0gICAgICAgICAgICAgICAgcCsrOwotCi0gICAgICAgICAgICAvLyBM
b29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdu
b3JlZCB0b2tlbnMuCi0gICAgICAgICAgICBjb25zdCBVQ2hhciogZmFsbGJhY2tTdGFydCA9IHA7
Ci0gICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAn
ICcpIAotICAgICAgICAgICAgICAgIHArKzsKLQotICAgICAgICAgICAgVVJMIGZhbGxiYWNrVVJM
KG1hbmlmZXN0VVJMLCBTdHJpbmcoZmFsbGJhY2tTdGFydCwgcCAtIGZhbGxiYWNrU3RhcnQpKTsK
LSAgICAgICAgICAgIGlmICghZmFsbGJhY2tVUkwuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgZmFsbGJhY2tVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1h
bmlmZXN0VVJMLCBmYWxsYmFja1VSTCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgIG1hbmlmZXN0LmZhbGxiYWNrVVJMcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobmFt
ZXNwYWNlVVJMLCBmYWxsYmFja1VSTCkpOyAgICAgICAgICAgIAotICAgICAgICB9IGVsc2UgCi0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAkocmV2aXNp
b24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdC
dWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAogCkBAIC0yMTIs
MjIgKzIxMywyMyBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6ZGlkUmVjZWl2ZUhlCiAg
ICAgLy8gUkZDMjYxNiwgc2VjdGlvbiA0LjIgc3BlY2lmaWVzIHRoYXQgaGVhZGVycyBhcHBlYXJp
bmcgbXVsdGlwbGUgdGltZXMgY2FuCiAgICAgLy8gYmUgY29tYmluZWQgd2l0aCBhIGNvbW1hLiBX
YWxrIHRoZSBoZWFkZXIgc3RyaW5nLCBhbmQgcGFyc2UgZWFjaCBjb21tYQogICAgIC8vIHNlcGFy
YXRlZCBjaHVuayBhcyBhIHNlcGFyYXRlIGhlYWRlci4KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBT
dHJpbmdWaWV3KGhlYWRlcikudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNo
YXIqIGJlZ2luID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdp
bjsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gYmVnaW4gKyBoZWFkZXIubGVuZ3RoKCk7Ci0gICAg
d2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIHNraXBVbnRpbDxVQ2hhcj4ocG9zaXRp
b24sIGVuZCwgJywnKTsKLQotICAgICAgICAvLyBoZWFkZXIxLGhlYWRlcjIgT1IgaGVhZGVyMQot
ICAgICAgICAvLyAgICAgICAgXiAgICAgICAgICAgICAgICAgIF4KLSAgICAgICAgbV9wb2xpY2ll
cy5hcHBlbmQoQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y3JlYXRlKCp0aGlz
LCBTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pLCB0eXBlLCBwb2xpY3lGcm9tKSk7Ci0K
LSAgICAgICAgLy8gU2tpcCB0aGUgY29tbWEsIGFuZCBiZWdpbiB0aGUgbmV4dCBoZWFkZXIgZnJv
bSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8
fCAqcG9zaXRpb24gPT0gJywnKTsKLSAgICAgICAgc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9u
LCBlbmQsICcsJyk7Ci0gICAgICAgIGJlZ2luID0gcG9zaXRpb247Ci0gICAgfQorICAgIFdURjo6
cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKGhlYWRlciwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikg
eworICAgICAgICBhdXRvIGJlZ2luID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIAor
ICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsK
KyAgICAgICAgICAgIHNraXBVbnRpbChwYXJzaW5nQnVmZmVyLCAnLCcpOworCisgICAgICAgICAg
ICAvLyBoZWFkZXIxLGhlYWRlcjIgT1IgaGVhZGVyMQorICAgICAgICAgICAgLy8gICAgICAgIF4g
ICAgICAgICAgICAgICAgICBeCisgICAgICAgICAgICBtX3BvbGljaWVzLmFwcGVuZChDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpjcmVhdGUoKnRoaXMsIFN0cmluZyhiZWdpbiwg
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pLCB0eXBlLCBwb2xpY3lGcm9tKSk7CisK
KyAgICAgICAgICAgIC8vIFNraXAgdGhlIGNvbW1hLCBhbmQgYmVnaW4gdGhlIG5leHQgaGVhZGVy
IGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgICAgICBBU1NFUlQocGFyc2luZ0J1
ZmZlci5hdEVuZCgpIHx8ICpwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gJywnKTsKKyAgICAg
ICAgICAgIHNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcsJyk7CisgICAgICAgICAgICBiZWdp
biA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIAog
CiAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgYXBwbHlQb2xpY3lU
b1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3Nw
L0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Qu
Y3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTUg
KzMyLDE2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nUGFyc2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29s
IGlzRGlyZWN0aXZlTmFtZUNoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyKENoYXJhY3Rl
clR5cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICct
JzsKIH0KIAotc3RhdGljIGJvb2wgaXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihVQ2hhciBjKQor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNEaXJlY3RpdmVW
YWx1ZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGlzQVNDSUlTcGFj
ZShjKSB8fCAoYyA+PSAweDIxICYmIGMgPD0gMHg3ZSk7IC8vIFdoaXRlc3BhY2UgKyBWQ0hBUgog
fQpAQCAtMzMzLDIyNCArMzM0LDIxOCBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZUxpc3Q6CiAgICAgaWYgKHBvbGljeS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcocG9saWN5KS51cGNvbnZlcnRlZENoYXJh
Y3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBjaGFyYWN0ZXJzOwotICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIHBvbGljeS5sZW5ndGgoKTsKLQotICAgIHdoaWxl
IChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBjb25zdCBVQ2hhciogZGlyZWN0aXZlQmVnaW4g
PSBwb3NpdGlvbjsKLSAgICAgICAgc2tpcFVudGlsPFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnOycp
OwotCi0gICAgICAgIFN0cmluZyBuYW1lLCB2YWx1ZTsKLSAgICAgICAgaWYgKHBhcnNlRGlyZWN0
aXZlKGRpcmVjdGl2ZUJlZ2luLCBwb3NpdGlvbiwgbmFtZSwgdmFsdWUpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoIW5hbWUuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIGlmIChwb2xpY3lGcm9tID09
IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SW5oZXJpdGVkKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTmFtZXM6OnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBvbGljeUZyb20g
PT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpIVFRQRXF1aXZNZXRhKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRib3gpCi0gICAgICAgICAgICAgICAgICAg
IHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkKLSAgICAgICAgICAgICAgICAgICAgfHwgZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
ZnJhbWVBbmNlc3RvcnMpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcG9saWN5LnJlcG9ydElu
dmFsaWREaXJlY3RpdmVJbkhUVFBFcXVpdk1ldGEobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHBvbGljeSwgWyZd
KGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXND
aGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGF1dG8gZGlyZWN0aXZlQmVnaW4g
PSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBza2lwVW50aWwocGFyc2lu
Z0J1ZmZlciwgJzsnKTsKKworICAgICAgICAgICAgaWYgKGF1dG8gZGlyZWN0aXZlID0gcGFyc2VE
aXJlY3RpdmUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGRpcmVjdGl2ZUJlZ2luLCBwYXJzaW5nQnVm
ZmVyLnBvc2l0aW9uKCkgfSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWRpcmVjdGl2ZS0+
bmFtZS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIGlmIChwb2xpY3lGcm9tID09IENvbnRl
bnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SW5oZXJpdGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS0+bmFtZSwgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkhU
VFBFcXVpdk1ldGEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UoZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6c2FuZGJveCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UoZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6cmVwb3J0VVJJKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcG9saWN5
LnJlcG9ydEludmFsaWREaXJlY3RpdmVJbkhUVFBFcXVpdk1ldGEoZGlyZWN0aXZlLT5uYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwb2xpY3lGcm9tID09IENvbnRlbnRTZWN1cml0
eVBvbGljeTo6UG9saWN5RnJvbTo6SW5oZXJpdGVkRm9yUGx1Z2luRG9jdW1lbnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS0+bmFt
ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnBsdWdpblR5cGVzKQorICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZl
LT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OlBvbGljeUZyb206OkluaGVyaXRlZEZvclBsdWdpbkRvY3VtZW50KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykKLSAgICAgICAgICAgICAgICAgICAgJiYgIWVx
dWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TmFtZXM6OnJlcG9ydFVSSSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIGFkZERpcmVjdGl2ZShXVEZNb3ZlKCpkaXJlY3RpdmUpKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGFkZERpcmVjdGl2ZShuYW1lLCB2YWx1ZSk7Ci0gICAgICAgIH0KIAot
ICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8ICpwb3NpdGlvbiA9PSAnOycpOwotICAg
ICAgICBza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJzsnKTsKLSAgICB9CisgICAg
ICAgICAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICpwYXJzaW5nQnVmZmVyID09
ICc7Jyk7CisgICAgICAgICAgICBza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnOycpOworICAg
ICAgICB9CisgICAgfSk7CiB9CiAKIC8vIGRpcmVjdGl2ZSAgICAgICAgID0gKldTUCBbIGRpcmVj
dGl2ZS1uYW1lIFsgV1NQIGRpcmVjdGl2ZS12YWx1ZSBdIF0KIC8vIGRpcmVjdGl2ZS1uYW1lICAg
ID0gMSooIEFMUEhBIC8gRElHSVQgLyAiLSIgKQogLy8gZGlyZWN0aXZlLXZhbHVlICAgPSAqKCBX
U1AgLyA8VkNIQVIgZXhjZXB0ICI7Ij4gKQogLy8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdDo6cGFyc2VEaXJlY3RpdmUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBV
Q2hhciogZW5kLCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBhdXRvIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6
OnBhcnNlRGlyZWN0aXZlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2lu
Z0J1ZmZlcikgLT4gT3B0aW9uYWw8UGFyc2VkRGlyZWN0aXZlPgogewotICAgIEFTU0VSVChuYW1l
LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKHZhbHVlLmlzRW1wdHkoKSk7Ci0KLSAgICBjb25zdCBV
Q2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFj
ZT4ocG9zaXRpb24sIGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlT
cGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKICAgICAvLyBFbXB0eSBkaXJlY3RpdmUgKGUuZy4gIjs7
OyIpLiBFeGl0IGVhcmx5LgotICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgY29uc3QgVUNoYXIqIG5hbWVCZWdpbiA9IHBvc2l0aW9uOwot
ICAgIHNraXBXaGlsZTxVQ2hhciwgaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyPihwb3NpdGlvbiwg
ZW5kKTsKKyAgICBhdXRvIG5hbWVCZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAg
ICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyPihwYXJz
aW5nQnVmZmVyKTsKIAogICAgIC8vIFRoZSBkaXJlY3RpdmUtbmFtZSBtdXN0IGJlIG5vbi1lbXB0
eS4KLSAgICBpZiAobmFtZUJlZ2luID09IHBvc2l0aW9uKSB7Ci0gICAgICAgIHNraXBXaGlsZTxV
Q2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgbV9wb2xpY3ku
cmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUoU3RyaW5nKG5hbWVCZWdpbiwgcG9zaXRpb24gLSBu
YW1lQmVnaW4pKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChuYW1lQmVnaW4gPT0g
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpKSB7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJU
eXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOworICAgICAgICBtX3BvbGljeS5y
ZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBwYXJzaW5nQnVmZmVy
LnBvc2l0aW9uKCkgLSBuYW1lQmVnaW4pKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9CiAKLSAgICBuYW1lID0gU3RyaW5nKG5hbWVCZWdpbiwgcG9zaXRpb24gLSBuYW1lQmVn
aW4pOworICAgIGF1dG8gbmFtZSA9IFN0cmluZyhuYW1lQmVnaW4sIHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKSAtIG5hbWVCZWdpbik7CiAKLSAgICBpZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICBy
ZXR1cm4gUGFyc2VkRGlyZWN0aXZlIHsgV1RGTW92ZShuYW1lKSwgeyB9IH07CiAKLSAgICBpZiAo
IXNraXBFeGFjdGx5PFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAg
ICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAg
ICAgICAgbV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUoU3RyaW5nKG5hbWVCZWdp
biwgcG9zaXRpb24gLSBuYW1lQmVnaW4pKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVy
KSkgeworICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihw
YXJzaW5nQnVmZmVyKTsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3Rp
dmUoU3RyaW5nKG5hbWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gbmFtZUJlZ2lu
KSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgc2tpcFdoaWxl
PFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFy
YWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgY29uc3QgVUNo
YXIqIHZhbHVlQmVnaW4gPSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzRGlyZWN0
aXZlVmFsdWVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgIGF1dG8gdmFsdWVCZWdpbiA9
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBpZiAocG9z
aXRpb24gIT0gZW5kKSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVW
YWx1ZUNoYXJhY3RlcihuYW1lLCBTdHJpbmcodmFsdWVCZWdpbiwgZW5kIC0gdmFsdWVCZWdpbikp
OwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkp
IHsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVy
KG5hbWUsIFN0cmluZyh2YWx1ZUJlZ2luLCBwYXJzaW5nQnVmZmVyLmVuZCgpIC0gdmFsdWVCZWdp
bikpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAgIC8vIFRoZSBk
aXJlY3RpdmUtdmFsdWUgbWF5IGJlIGVtcHR5LgotICAgIGlmICh2YWx1ZUJlZ2luID09IHBvc2l0
aW9uKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodmFsdWVCZWdpbiA9PSBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiBQYXJzZWREaXJlY3RpdmUgeyBXVEZN
b3ZlKG5hbWUpLCB7IH0gfTsKIAotICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlQmVnaW4sIHBvc2l0
aW9uIC0gdmFsdWVCZWdpbik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgYXV0byB2YWx1ZSA9IFN0
cmluZyh2YWx1ZUJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSB2YWx1ZUJlZ2luKTsK
KyAgICByZXR1cm4gUGFyc2VkRGlyZWN0aXZlIHsgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh2YWx1
ZSkgfTsKIH0KIAotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJz
ZVJlcG9ydFVSSShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lk
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVwb3J0VVJJKFBhcnNl
ZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkKIHsKICAgICBpZiAoIW1fcmVwb3J0VVJJcy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOwor
ICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoZGlyZWN0aXZlLm5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5n
Vmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHBv
c2l0aW9uID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcG9zaXRpb24gKyB2
YWx1ZS5sZW5ndGgoKTsKKyAgICBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhkaXJlY3Rp
dmUudmFsdWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFj
dGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBl
OwogCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hh
ciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgYXV0byBiZWdpbiA9IHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFz
Q2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKIAotICAgICAgICBjb25zdCBVQ2hh
ciogdXJsQmVnaW4gPSBwb3NpdGlvbjsKLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdEFT
Q0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOworICAgICAgICAgICAgYXV0byB1cmxCZWdpbiA9IHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJU
eXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgICAgIGlmICh1cmxC
ZWdpbiA8IHBvc2l0aW9uKQotICAgICAgICAgICAgbV9yZXBvcnRVUklzLmFwcGVuZCh2YWx1ZS5z
dWJzdHJpbmcodXJsQmVnaW4gLSBjaGFyYWN0ZXJzLCBwb3NpdGlvbiAtIHVybEJlZ2luKSk7Ci0g
ICAgfQorICAgICAgICAgICAgaWYgKHVybEJlZ2luIDwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigp
KQorICAgICAgICAgICAgICAgIG1fcmVwb3J0VVJJcy5hcHBlbmQoZGlyZWN0aXZlLnZhbHVlLnN1
YnN0cmluZyh1cmxCZWdpbiAtIGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSB1cmxC
ZWdpbikpOworICAgICAgICB9CisgICAgfSk7CiB9CiAKIAogdGVtcGxhdGU8Y2xhc3MgQ1NQRGly
ZWN0aXZlVHlwZT4KLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0
Q1NQRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgc3Rk
Ojp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZVR5cGU+JiBkaXJlY3RpdmUpCit2b2lkIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldENTUERpcmVjdGl2ZShQYXJzZWREaXJlY3Rp
dmUmJiBkaXJlY3RpdmUsIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVUeXBlPiYgZXhpc3Rp
bmdEaXJlY3RpdmUpCiB7Ci0gICAgaWYgKGRpcmVjdGl2ZSkgewotICAgICAgICBtX3BvbGljeS5y
ZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CisgICAgaWYgKGV4aXN0aW5nRGlyZWN0aXZl
KSB7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShkaXJlY3RpdmUu
bmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZGlyZWN0aXZlID0gbWFrZVVuaXF1
ZTxDU1BEaXJlY3RpdmVUeXBlPigqdGhpcywgbmFtZSwgdmFsdWUpOworICAgIGV4aXN0aW5nRGly
ZWN0aXZlID0gbWFrZVVuaXF1ZTxDU1BEaXJlY3RpdmVUeXBlPigqdGhpcywgV1RGTW92ZShkaXJl
Y3RpdmUubmFtZSksIFdURk1vdmUoZGlyZWN0aXZlLnZhbHVlKSk7CiB9CiAKLXZvaWQgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YXBwbHlTYW5kYm94UG9saWN5KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzYW5kYm94UG9saWN5KQordm9pZCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphcHBseVNhbmRib3hQb2xpY3koUGFyc2VkRGlyZWN0
aXZlJiYgZGlyZWN0aXZlKQogewogICAgIGlmIChtX3JlcG9ydE9ubHkpIHsKLSAgICAgICAgbV9w
b2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUobmFtZSk7CisgICAg
ICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKGRpcmVj
dGl2ZS5uYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9oYXZlU2FuZGJv
eFBvbGljeSkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFt
ZSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShkaXJlY3RpdmUu
bmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9oYXZlU2FuZGJveFBvbGljeSA9
IHRydWU7CiAgICAgU3RyaW5nIGludmFsaWRUb2tlbnM7Ci0gICAgbV9wb2xpY3kuZW5mb3JjZVNh
bmRib3hGbGFncyhTZWN1cml0eUNvbnRleHQ6OnBhcnNlU2FuZGJveFBvbGljeShzYW5kYm94UG9s
aWN5LCBpbnZhbGlkVG9rZW5zKSk7CisgICAgbV9wb2xpY3kuZW5mb3JjZVNhbmRib3hGbGFncyhT
ZWN1cml0eUNvbnRleHQ6OnBhcnNlU2FuZGJveFBvbGljeShXVEZNb3ZlKGRpcmVjdGl2ZS52YWx1
ZSksIGludmFsaWRUb2tlbnMpKTsKICAgICBpZiAoIWludmFsaWRUb2tlbnMuaXNOdWxsKCkpCiAg
ICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRTYW5kYm94RmxhZ3MoaW52YWxpZFRva2Vucyk7
CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0VXBncmFk
ZUluc2VjdXJlUmVxdWVzdHMoY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhQYXJzZWRE
aXJlY3RpdmUmJiBkaXJlY3RpdmUpCiB7CiAgICAgaWYgKG1fcmVwb3J0T25seSkgewotICAgICAg
ICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShuYW1lKTsK
KyAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUo
V1RGTW92ZShkaXJlY3RpdmUubmFtZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
IChtX3VwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydER1
cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRl
RGlyZWN0aXZlKFdURk1vdmUoZGlyZWN0aXZlLm5hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBtX3VwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzID0gdHJ1ZTsKICAgICBtX3BvbGljeS5z
ZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyh0cnVlKTsKIH0KIAotdm9pZCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQoY29u
c3QgU3RyaW5nJiBuYW1lKQordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
OjpzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQoUGFyc2VkRGlyZWN0aXZlJiYgZGlyZWN0
aXZlKQogewogICAgIGlmIChtX2hhc0Jsb2NrQWxsTWl4ZWRDb250ZW50RGlyZWN0aXZlKSB7Ci0g
ICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAg
bV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKFdURk1vdmUoZGlyZWN0aXZlLm5hbWUp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2hhc0Jsb2NrQWxsTWl4ZWRDb250ZW50
RGlyZWN0aXZlID0gdHJ1ZTsKIH0KIAotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0OjphZGREaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphZGREaXJlY3Rp
dmUoUGFyc2VkRGlyZWN0aXZlJiYgZGlyZWN0aXZlKQogewotICAgIEFTU0VSVCghbmFtZS5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVCghZGlyZWN0aXZlLm5hbWUuaXNFbXB0eSgpKTsKIAotICAgIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpkZWZhdWx0U3JjKSkgewotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZGVmYXVs
dFNyYyk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpkZWZhdWx0U3JjKSkgeworICAgICAg
ICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2
ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2RlZmF1bHRTcmMpOwogICAgICAgICBtX3BvbGljeS5h
ZGRIYXNoQWxnb3JpdGhtc0ZvcklubGluZVNjcmlwdHMobV9kZWZhdWx0U3JjLT5oYXNoQWxnb3Jp
dGhtc1VzZWQoKSk7CiAgICAgICAgIG1fcG9saWN5LmFkZEhhc2hBbGdvcml0aG1zRm9ySW5saW5l
U3R5bGVzaGVldHMobV9kZWZhdWx0U3JjLT5oYXNoQWxnb3JpdGhtc1VzZWQoKSk7Ci0gICAgfSBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjpzY3JpcHRTcmMpKSB7Ci0gICAgICAgIHNldENTUERpcmVjdGl2ZTxD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9z
Y3JpcHRTcmMpOworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3Rp
dmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNjcmlwdFNyYykp
IHsKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9zY3JpcHRTcmMpOwogICAgICAgICBt
X3BvbGljeS5hZGRIYXNoQWxnb3JpdGhtc0ZvcklubGluZVNjcmlwdHMobV9zY3JpcHRTcmMtPmhh
c2hBbGdvcml0aG1zVXNlZCgpKTsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnN0eWxlU3JjKSkg
ewotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fc3R5bGVTcmMpOworICAgIH0gZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTmFtZXM6OnN0eWxlU3JjKSkgeworICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUp
LCBtX3N0eWxlU3JjKTsKICAgICAgICAgbV9wb2xpY3kuYWRkSGFzaEFsZ29yaXRobXNGb3JJbmxp
bmVTdHlsZXNoZWV0cyhtX3N0eWxlU3JjLT5oYXNoQWxnb3JpdGhtc1VzZWQoKSk7Ci0gICAgfSBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjpvYmplY3RTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fb2Jq
ZWN0U3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZVNyYykpIHsKKyAgICB9IGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpvYmplY3RTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3Rp
dmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJl
Y3RpdmUpLCBtX29iamVjdFNyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZy
YW1lU3JjKSkgewogICAgICAgICAvLyBGSVhNRTogTG9nIHRvIGNvbnNvbGUgIlRoZSBmcmFtZS1z
cmMgZGlyZWN0aXZlIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgY2hpbGQtc3JjIGRpcmVjdGl2ZSBp
bnN0ZWFkLiIKICAgICAgICAgLy8gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU1NzczPi4KLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2ZyYW1lU3JjKTsKLSAg
ICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTmFtZXM6OmltZ1NyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9p
bWdTcmMpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvbnRTcmMpKQotICAgICAgICBzZXRDU1BE
aXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwg
dmFsdWUsIG1fZm9udFNyYyk7CisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fZnJhbWVT
cmMpOworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFt
ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmltZ1NyYykpCisgICAgICAg
IHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZl
PihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1faW1nU3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6Zm9udFNyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fZm9udFNy
Yyk7CiAjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQotICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6Om1hbmlmZXN0U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX21hbmlmZXN0U3JjKTsK
KyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6bWFuaWZlc3RTcmMpKQorICAgICAgICBz
ZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4o
V1RGTW92ZShkaXJlY3RpdmUpLCBtX21hbmlmZXN0U3JjKTsKICNlbmRpZgotICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTmFtZXM6Om1lZGlhU3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX21lZGlhU3JjKTsK
LSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjb25uZWN0U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0
aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVl
LCBtX2Nvbm5lY3RTcmMpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFt
ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmNoaWxkU3JjKSkKLSAgICAg
ICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3Rp
dmU+KG5hbWUsIHZhbHVlLCBtX2NoaWxkU3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmb3Jt
QWN0aW9uKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2Zvcm1BY3Rpb24pOwotICAgIGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OmJhc2VVUkkpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fYmFzZVVSSSk7
Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJhbWVBbmNlc3RvcnMpKSB7CisgICAgZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTmFtZXM6Om1lZGlhU3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZl
KSwgbV9tZWRpYVNyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJl
Y3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmNvbm5lY3RT
cmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2Nvbm5lY3RTcmMpOworICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjaGlsZFNyYykpCisgICAgICAgIHNldENTUERpcmVj
dGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRp
cmVjdGl2ZSksIG1fY2hpbGRTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpm
b3JtQWN0aW9uKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9mb3JtQWN0aW9uKTsK
KyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6YmFzZVVSSSkpCisgICAgICAgIHNldENT
UERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZN
b3ZlKGRpcmVjdGl2ZSksIG1fYmFzZVVSSSk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6OmZyYW1lQW5jZXN0b3JzKSkgewogICAgICAgICBpZiAobV9yZXBvcnRPbmx5KSB7Ci0gICAg
ICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShu
YW1lKTsKKyAgICAgICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9y
dE9ubHlNb2RlKGRpcmVjdGl2ZS5uYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZnJhbWVBbmNlc3RvcnMpOwotICAgIH0gZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6cGx1Z2luVHlwZXMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVu
dFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9wbHVnaW5U
eXBlcyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2FuZGJveCkpCi0gICAgICAgIGFwcGx5U2Fu
ZGJveFBvbGljeShuYW1lLCB2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJ
KSkKLSAgICAgICAgcGFyc2VSZXBvcnRVUkkobmFtZSwgdmFsdWUpOwotICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TmFtZXM6OnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKSkKLSAgICAgICAgc2V0VXBncmFkZUluc2Vj
dXJlUmVxdWVzdHMobmFtZSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShu
YW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6YmxvY2tBbGxNaXhlZENv
bnRlbnQpKQotICAgICAgICBzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQobmFtZSk7Cisg
ICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGly
ZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fZnJhbWVBbmNlc3RvcnMpOworICAgIH0gZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnBsdWdpblR5cGVzKSkKKyAgICAgICAgc2V0Q1NQRGly
ZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShk
aXJlY3RpdmUpLCBtX3BsdWdpblR5cGVzKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6c2FuZGJveCkpCisgICAgICAgIGFwcGx5U2FuZGJveFBvbGljeShXVEZNb3ZlKGRpcmVjdGl2
ZSkpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUs
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpyZXBvcnRVUkkpKQorICAgICAg
ICBwYXJzZVJlcG9ydFVSSShXVEZNb3ZlKGRpcmVjdGl2ZSkpOworICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCisgICAgICAgIHNldFVwZ3Jh
ZGVJbnNlY3VyZVJlcXVlc3RzKFdURk1vdmUoZGlyZWN0aXZlKSk7CisgICAgZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTmFtZXM6OmJsb2NrQWxsTWl4ZWRDb250ZW50KSkKKyAgICAgICAgc2V0QmxvY2tB
bGxNaXhlZENvbnRlbnRFbmFibGVkKFdURk1vdmUoZGlyZWN0aXZlKSk7CiAgICAgZWxzZQotICAg
ICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAg
bV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUoV1RGTW92ZShkaXJlY3RpdmUubmFt
ZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDE2
ICs4OSwxOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgcGFyc2UoY29uc3QgU3RyaW5n
JiwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tKTsKIAotICAgIGJvb2wgcGFyc2VE
aXJlY3RpdmUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIG5h
bWUsIFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgcGFyc2VSZXBvcnRVUkkoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIHBhcnNlUGx1Z2luVHlwZXMo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIGFkZERp
cmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZv
aWQgYXBwbHlTYW5kYm94UG9saWN5KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBz
YW5kYm94UG9saWN5KTsKLSAgICB2b2lkIHNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKGNvbnN0
IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQo
Y29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBzdHJ1Y3QgUGFyc2VkRGlyZWN0aXZlIHsKKyAgICAg
ICAgU3RyaW5nIG5hbWU7CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICB9OworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPFBhcnNlZERpcmVjdGl2ZT4gcGFy
c2VEaXJlY3RpdmUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdm9p
ZCBwYXJzZVJlcG9ydFVSSShQYXJzZWREaXJlY3RpdmUmJik7CisgICAgdm9pZCBhZGREaXJlY3Rp
dmUoUGFyc2VkRGlyZWN0aXZlJiYpOworICAgIHZvaWQgYXBwbHlTYW5kYm94UG9saWN5KFBhcnNl
ZERpcmVjdGl2ZSYmKTsKKyAgICB2b2lkIHNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKFBhcnNl
ZERpcmVjdGl2ZSYmKTsKKyAgICB2b2lkIHNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChQ
YXJzZWREaXJlY3RpdmUmJik7CiAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ1NQRGlyZWN0aXZlVHlw
ZT4KLSAgICB2b2lkIHNldENTUERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVUeXBlPiYpOworICAgIHZv
aWQgc2V0Q1NQRGlyZWN0aXZlKFBhcnNlZERpcmVjdGl2ZSYmLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQ
RGlyZWN0aXZlVHlwZT4mKTsKIAogICAgIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3RE
aXJlY3RpdmUqIG9wZXJhdGl2ZURpcmVjdGl2ZShDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0RGlyZWN0aXZlKikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGly
ZWN0aXZlLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTAgKzMxLDEyIEBACiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdC5oIgogI2luY2x1ZGUgIlBhcnNpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1
ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIGlzTWVkaWFUeXBl
Q2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3Rh
dGljIGJvb2wgaXNNZWRpYVR5cGVDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJl
dHVybiAhaXNBU0NJSVNwYWNlKGMpICYmIGMgIT0gJy8nOwogfQpAQCAtNTIsNjIgKzU0LDYxIEBA
IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWMKIAogdm9pZCBDb250ZW50
U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU6OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7Ci0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luID0gY2hhcmFjdGVyczsKLSAg
ICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBjb25zdCBVQ2hhciogZW5kID0g
YmVnaW4gKyB2YWx1ZS5sZW5ndGgoKTsKLQogICAgIC8vICdwbHVnaW4tdHlwZXMgX19fXzsnIE9S
ICdwbHVnaW4tdHlwZXM7JwogICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZGly
ZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyh2YWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAg
ICAgICAgLy8gX19fX18gT1IgX19fX19taW1lMS9taW1lMQotICAgICAgICAvLyBeICAgICAgICBe
Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsK
LSAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMgotICAgICAgICAvLyBeCi0gICAgICAgIGJl
Z2luID0gcG9zaXRpb247Ci0gICAgICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXIsIGlzTWVkaWFU
eXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKSkgewotICAgICAgICAgICAgc2tpcFdoaWxlPFVD
aGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICAgICAgZGlyZWN0
aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4s
IHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBl
bmQpOworICAgIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBw
YXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSB0eXBlbmFtZSBk
ZWNsdHlwZShwYXJzaW5nQnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKIAotICAgICAgICAvLyBtaW1l
MS9taW1lMSBtaW1lMi9taW1lMgotICAgICAgICAvLyAgICAgIF4KLSAgICAgICAgaWYgKCFza2lw
RXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKSkgewotICAgICAgICAgICAgc2tpcFdo
aWxlPFVDaGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICAgICAg
ZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmco
YmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmco
KSkgeworICAgICAgICAgICAgLy8gX19fX18gT1IgX19fX19taW1lMS9taW1lMQorICAgICAgICAg
ICAgLy8gXiAgICAgICAgXgorICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlz
QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZl
ci5hdEVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgLy8gbWlt
ZTEvbWltZTEgbWltZTIvbWltZTIKKyAgICAgICAgICAgIC8vIF4KKyAgICAgICAgICAgIGF1dG8g
YmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBpZiAoIXNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGUsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVy
KSkgeworICAgICAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJ
U3BhY2U+KHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5w
b2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVm
ZmVyLnBvc2l0aW9uKCkgLSBiZWdpbikpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTWVkaWFU
eXBlQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKKworICAgICAgICAgICAgLy8gbWltZTEvbWlt
ZTEgbWltZTIvbWltZTIKKyAgICAgICAgICAgIC8vICAgICAgXgorICAgICAgICAgICAgaWYgKCFz
a2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnLycpKSB7CisgICAgICAg
ICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocGFyc2lu
Z0J1ZmZlcik7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9y
dEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24o
KSAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCisgICAgICAgICAgICAvLyAg
ICAgICBeCisgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGUsIGlzTWVk
aWFUeXBlQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKSkgeworICAgICAgICAgICAgICAgIHNraXBX
aGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOworICAg
ICAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2lu
VHlwZXMoU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbikpOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2tp
cFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVy
KTsKKworICAgICAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIgT1IgbWltZTEvbWlt
ZTEgIE9SIG1pbWUxL21pbWUxL2Vycm9yCisgICAgICAgICAgICAvLyAgICAgICAgICAgIF4gICAg
ICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICBeCisgICAgICAgICAgICBpZiAo
cGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgaXNOb3RBU0NJSVNwYWNl
KCpwYXJzaW5nQnVmZmVyKSkgeworICAgICAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJU
eXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgICAgIGRp
cmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJl
Z2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbikpOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9wbHVnaW5UeXBlcy5hZGQo
U3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbikpOwogCi0gICAg
ICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vICAgICAgIF4KLSAgICAg
ICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9u
LCBlbmQpKSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4o
cG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVw
b3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwot
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5h
dEVuZCgpIHx8IGlzQVNDSUlTcGFjZSgqcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9z
aXRpb24sIGVuZCk7Ci0KLSAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIgT1IgbWlt
ZTEvbWltZTEgIE9SIG1pbWUxL21pbWUxL2Vycm9yCi0gICAgICAgIC8vICAgICAgICAgICAgXiAg
ICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgIF4KLSAgICAgICAgaWYgKHBv
c2l0aW9uIDwgZW5kICYmIGlzTm90QVNDSUlTcGFjZSgqcG9zaXRpb24pKSB7Ci0gICAgICAgICAg
ICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAg
ICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVz
KFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICAgICAgbV9wbHVnaW5UeXBlcy5hZGQoU3RyaW5nKGJlZ2luLCBwb3Np
dGlvbiAtIGJlZ2luKSk7Ci0KLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCBpc0FT
Q0lJU3BhY2UoKnBvc2l0aW9uKSk7Ci0gICAgfQorICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nz
cC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNwcAkocmV2aXNpb24gMjYzMzM1KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
QmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU2LDQ4ICs1Nyw0MSBAQCBzdGF0aWMgYm9vbCBpc0NT
UERpcmVjdGl2ZU5hbWUoY29uc3QgU3RyCiAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnN0eWxlU3JjKTsK
IH0KIAotc3RhdGljIGJvb2wgaXNTb3VyY2VDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzU291cmNlQ2hhcmFjdGVyKENoYXJh
Y3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gIWlzQVNDSUlTcGFjZShjKTsKIH0KIAotc3RhdGlj
IGJvb2wgaXNIb3N0Q2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc0hvc3RDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewog
ICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJy0nOwogfQogCi1zdGF0
aWMgYm9vbCBpc1BhdGhDb21wb25lbnRDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzUGF0aENvbXBvbmVudENoYXJhY3RlcihD
aGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGMgIT0gJz8nICYmIGMgIT0gJyMnOwogfQog
Ci1zdGF0aWMgYm9vbCBpc1NjaGVtZUNvbnRpbnVhdGlvbkNoYXJhY3RlcihVQ2hhciBjKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNTY2hlbWVDb250aW51
YXRpb25DaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBpc0FTQ0lJQWxw
aGFudW1lcmljKGMpIHx8IGMgPT0gJysnIHx8IGMgPT0gJy0nIHx8IGMgPT0gJy4nOwogfQogCi1z
dGF0aWMgYm9vbCBpc05vdENvbG9uT3JTbGFzaChVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNOb3RDb2xvbk9yU2xhc2goQ2hhcmFjdGVyVHlw
ZSBjKQogewogICAgIHJldHVybiBjICE9ICc6JyAmJiBjICE9ICcvJzsKIH0KIAotc3RhdGljIGJv
b2wgaXNTb3VyY2VMaXN0Tm9uZShjb25zdCBTdHJpbmcmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNTb3VyY2VMaXN0Tm9uZShTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgYXV0byBjaGFy
YWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIGJlZ2luID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0g
Y2hhcmFjdGVycyArIHZhbHVlLmxlbmd0aCgpOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJ
SVNwYWNlPihiZWdpbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJ
SVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJl
Z2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBl
bmQpOwotICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIHBvc2l0
aW9uIC0gYmVnaW4sICInbm9uZSciKSkKKyAgICBpZiAoIXNraXBFeGFjdGx5SWdub3JpbmdBU0NJ
SUNhc2UocGFyc2luZ0J1ZmZlciwgIidub25lJyIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAg
aWYgKHBvc2l0aW9uICE9IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNraXBXaGls
ZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOwogICAgIAotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBwYXJzaW5nQnVmZmVyLmF0RW5kKCk7CiB9CiAKIENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3QoY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBwb2xpY3ksIGNvbnN0IFN0cmluZyYg
ZGlyZWN0aXZlTmFtZSkKQEAgLTEwOCwxMiArMTAyLDE0IEBAIENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3Q6OkNvbnRlbnQKIAogdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmIChpc1NvdXJjZUxpc3RO
b25lKHZhbHVlKSkgewotICAgICAgICBtX2lzTm9uZSA9IHRydWU7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgcGFyc2UoY2hhcmFjdGVycywgY2hhcmFjdGVycyArIHZhbHVl
Lmxlbmd0aCgpKTsKKyAgICBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZd
KGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICBpZiAoaXNTb3VyY2VMaXN0Tm9uZShwYXJz
aW5nQnVmZmVyKSkgeworICAgICAgICAgICAgbV9pc05vbmUgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcGFyc2UocGFyc2luZ0J1ZmZlcik7CisgICAg
fSk7CiB9CiAKIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6aXNQcm90b2Nv
bEFsbG93ZWRCeVN0YXIoY29uc3QgVVJMJiB1cmwpIGNvbnN0CkBAIC0xNjAsMzAgKzE1NiwyOCBA
QCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6Om1hCiAvLyBzb3VyY2UtbGlz
dCAgICAgICA9ICpXU1AgWyBzb3VyY2UgKiggMSpXU1Agc291cmNlICkgKldTUCBdCiAvLyAgICAg
ICAgICAgICAgICAgICAvICpXU1AgIidub25lJyIgKldTUAogLy8KLXZvaWQgQ29udGVudFNlY3Vy
aXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVn
aW47Ci0KLSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgc2tpcFdoaWxlPFVD
aGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICBpZiAocG9zaXRpb24g
PT0gZW5kKQorICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmco
KSkgeworICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSVNwYWNlPihwYXJz
aW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBjb25zdCBVQ2hhciogYmVnaW5Tb3VyY2UgPSBwb3NpdGlv
bjsKLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc1NvdXJjZUNoYXJhY3Rlcj4ocG9zaXRpb24s
IGVuZCk7CisgICAgICAgIGF1dG8gYmVnaW5Tb3VyY2UgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9u
KCk7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1NvdXJjZUNoYXJhY3Rlcj4o
cGFyc2luZ0J1ZmZlcik7CiAKICAgICAgICAgU3RyaW5nIHNjaGVtZSwgaG9zdCwgcGF0aDsKICAg
ICAgICAgT3B0aW9uYWw8dWludDE2X3Q+IHBvcnQ7CiAgICAgICAgIGJvb2wgaG9zdEhhc1dpbGRj
YXJkID0gZmFsc2U7CiAgICAgICAgIGJvb2wgcG9ydEhhc1dpbGRjYXJkID0gZmFsc2U7CiAKLSAg
ICAgICAgaWYgKHBhcnNlTm9uY2VTb3VyY2UoYmVnaW5Tb3VyY2UsIHBvc2l0aW9uKSkKKyAgICAg
ICAgaWYgKHBhcnNlTm9uY2VTb3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luU291cmNl
LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgfSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBpZiAocGFyc2VIYXNoU291cmNlKGJlZ2luU291cmNlLCBwb3NpdGlvbikpCisgICAg
ICAgIGlmIChwYXJzZUhhc2hTb3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luU291cmNl
LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgfSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBpZiAocGFyc2VTb3VyY2UoYmVnaW5Tb3VyY2UsIHBvc2l0aW9uLCBzY2hlbWUsIGhv
c3QsIHBvcnQsIHBhdGgsIGhvc3RIYXNXaWxkY2FyZCwgcG9ydEhhc1dpbGRjYXJkKSkgeworICAg
ICAgICBpZiAocGFyc2VTb3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luU291cmNlLCBw
YXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgfSwgc2NoZW1lLCBob3N0LCBwb3J0LCBwYXRoLCBob3N0
SGFzV2lsZGNhcmQsIHBvcnRIYXNXaWxkY2FyZCkpIHsKICAgICAgICAgICAgIC8vIFdpbGRjYXJk
IGhvc3RzIGFuZCBrZXl3b3JkIHNvdXJjZXMgKCdzZWxmJywgJ3Vuc2FmZS1pbmxpbmUnLAogICAg
ICAgICAgICAgLy8gZXRjLikgYXJlbid0IHN0b3JlZCBpbiBtX2xpc3QsIGJ1dCBhcyBhdHRyaWJ1
dGVzIG9uIHRoZSBzb3VyY2UKICAgICAgICAgICAgIC8vIGxpc3QgaXRzZWxmLgpAQCAtMTkzLDkg
KzE4Nyw5IEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEKICAgICAg
ICAgICAgICAgICBtX3BvbGljeS5yZXBvcnREaXJlY3RpdmVBc1NvdXJjZUV4cHJlc3Npb24obV9k
aXJlY3RpdmVOYW1lLCBob3N0KTsKICAgICAgICAgICAgIG1fbGlzdC5hcHBlbmQoQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlKG1fcG9saWN5LCBzY2hlbWUsIGhvc3QsIHBvcnQsIHBhdGgsIGhv
c3RIYXNXaWxkY2FyZCwgcG9ydEhhc1dpbGRjYXJkKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFNvdXJjZUV4cHJlc3Npb24obV9kaXJlY3RpdmVO
YW1lLCBTdHJpbmcoYmVnaW5Tb3VyY2UsIHBvc2l0aW9uIC0gYmVnaW5Tb3VyY2UpKTsKKyAgICAg
ICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0aXZl
TmFtZSwgU3RyaW5nKGJlZ2luU291cmNlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdp
blNvdXJjZSkpOwogCi0gICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNw
YWNlKCpwb3NpdGlvbikpOworICAgICAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8
IGlzQVNDSUlTcGFjZSgqcGFyc2luZ0J1ZmZlcikpOwogICAgIH0KICAgICAKICAgICBtX2xpc3Qu
c2hyaW5rVG9GaXQoKTsKQEAgLTIwNSwxMDMgKzE5OSwxMDMgQEAgdm9pZCBDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogLy8gICAgICAgICAgICAgICAgICAgLyAoIFsgc2NoZW1l
ICI6Ly8iIF0gaG9zdCBbIHBvcnQgXSBbIHBhdGggXSApCiAvLyAgICAgICAgICAgICAgICAgICAv
ICInc2VsZiciCiAvLwotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJz
ZVNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgc2No
ZW1lLCBTdHJpbmcmIGhvc3QsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgU3RyaW5nJiBwYXRo
LCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCkKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdDo6cGFyc2VTb3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJz
aW5nQnVmZmVyLCBTdHJpbmcmIHNjaGVtZSwgU3RyaW5nJiBob3N0LCBPcHRpb25hbDx1aW50MTZf
dD4mIHBvcnQsIFN0cmluZyYgcGF0aCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0
SGFzV2lsZGNhcmQpCiB7Ci0gICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1
ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAtIGJlZ2luLCAiJ25vbmUnIikpCisgICAg
aWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgIidub25lJyIp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZW5kIC0gYmVnaW4gPT0gMSAmJiAq
YmVnaW4gPT0gJyonKSB7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkg
PT0gMSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAnKicpIHsKICAgICAgICAgbV9hbGxvd1N0YXIgPSB0
cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAtIGJlZ2luLCAiJ3NlbGYnIikpIHsKKyAgICBp
ZiAoc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAiJ3NlbGYnIikp
IHsKICAgICAgICAgbV9hbGxvd1NlbGYgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAt
IGJlZ2luLCAiJ3Vuc2FmZS1pbmxpbmUnIikpIHsKKyAgICBpZiAoc2tpcEV4YWN0bHlJZ25vcmlu
Z0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAiJ3Vuc2FmZS1pbmxpbmUnIikpIHsKICAgICAgICAg
bV9hbGxvd0lubGluZSA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICIn
dW5zYWZlLWV2YWwnIikpIHsKKyAgICBpZiAoc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShw
YXJzaW5nQnVmZmVyLCAiJ3Vuc2FmZS1ldmFsJyIpKSB7CiAgICAgICAgIG1fYWxsb3dFdmFsID0g
dHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgY29uc3QgVUNoYXIqIHBv
c2l0aW9uID0gYmVnaW47Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luSG9zdCA9IGJlZ2luOwotICAg
IGNvbnN0IFVDaGFyKiBiZWdpblBhdGggPSBlbmQ7Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luUG9y
dCA9IG51bGxwdHI7CisgICAgYXV0byBiZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsK
KyAgICBhdXRvIGJlZ2luSG9zdCA9IGJlZ2luOworICAgIGF1dG8gYmVnaW5QYXRoID0gcGFyc2lu
Z0J1ZmZlci5lbmQoKTsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpblBvcnQgPSBudWxs
cHRyOwogCi0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdENvbG9uT3JTbGFzaD4ocG9zaXRpb24s
IGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90Q29sb25PclNsYXNoPihw
YXJzaW5nQnVmZmVyKTsKIAotICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIHsKKyAgICBpZiAocGFy
c2luZ0J1ZmZlci5hdEVuZCgpKSB7CiAgICAgICAgIC8vIGhvc3QKICAgICAgICAgLy8gICAgIF4K
LSAgICAgICAgcmV0dXJuIHBhcnNlSG9zdChiZWdpbkhvc3QsIHBvc2l0aW9uLCBob3N0LCBob3N0
SGFzV2lsZGNhcmQpOworICAgICAgICByZXR1cm4gcGFyc2VIb3N0KFN0cmluZ1BhcnNpbmdCdWZm
ZXIgeyBiZWdpbkhvc3QsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSB9LCBob3N0LCBob3N0SGFz
V2lsZGNhcmQpOwogICAgIH0KIAotICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24g
PT0gJy8nKSB7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygp
ICYmICpwYXJzaW5nQnVmZmVyID09ICcvJykgewogICAgICAgICAvLyBob3N0L3BhdGggfHwgaG9z
dC8gfHwgLwogICAgICAgICAvLyAgICAgXiAgICAgICAgICAgIF4gICAgXgotICAgICAgICByZXR1
cm4gcGFyc2VIb3N0KGJlZ2luSG9zdCwgcG9zaXRpb24sIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkg
JiYgcGFyc2VQYXRoKHBvc2l0aW9uLCBlbmQsIHBhdGgpOworICAgICAgICByZXR1cm4gcGFyc2VI
b3N0KFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpbkhvc3QsIHBhcnNpbmdCdWZmZXIucG9zaXRp
b24oKSB9LCBob3N0LCBob3N0SGFzV2lsZGNhcmQpICYmIHBhcnNlUGF0aChwYXJzaW5nQnVmZmVy
LCBwYXRoKTsKICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09
ICc6JykgewotICAgICAgICBpZiAoZW5kIC0gcG9zaXRpb24gPT0gMSkgeworICAgIGlmIChwYXJz
aW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAn
OicpIHsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPT0gMSkg
ewogICAgICAgICAgICAgLy8gc2NoZW1lOgogICAgICAgICAgICAgLy8gICAgICAgXgotICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlU2NoZW1lKGJlZ2luLCBwb3NpdGlvbiwgc2NoZW1lKTsKKyAgICAg
ICAgICAgIHJldHVybiBwYXJzZVNjaGVtZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW4sIHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKSB9LCBzY2hlbWUpOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKHBvc2l0aW9uWzFdID09ICcvJykgeworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlclsxXSA9
PSAnLycpIHsKICAgICAgICAgICAgIC8vIHNjaGVtZTovL2hvc3QgfHwgc2NoZW1lOi8vCiAgICAg
ICAgICAgICAvLyAgICAgICBeICAgICAgICAgICAgICAgIF4KLSAgICAgICAgICAgIGlmICghcGFy
c2VTY2hlbWUoYmVnaW4sIHBvc2l0aW9uLCBzY2hlbWUpCi0gICAgICAgICAgICAgICAgfHwgIXNr
aXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnOicpCi0gICAgICAgICAgICAgICAgfHwg
IXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpCi0gICAgICAgICAgICAgICAg
fHwgIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpKQorICAgICAgICAgICAg
aWYgKCFwYXJzZVNjaGVtZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW4sIHBhcnNpbmdCdWZm
ZXIucG9zaXRpb24oKSB9LCBzY2hlbWUpCisgICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5
PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc6JykKKyAgICAgICAgICAgICAgICB8fCAh
c2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy8nKQorICAgICAgICAg
ICAgICAgIHx8ICFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnLycp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlv
biA9PSBlbmQpCisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJlZ2luSG9zdCA9IHBvc2l0aW9u
OwotICAgICAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdENvbG9uT3JTbGFzaD4ocG9zaXRp
b24sIGVuZCk7CisgICAgICAgICAgICBiZWdpbkhvc3QgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9u
KCk7CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RDb2xvbk9yU2xh
c2g+KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBvc2l0aW9uIDwg
ZW5kICYmICpwb3NpdGlvbiA9PSAnOicpIHsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFz
Q2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5nQnVmZmVyID09ICc6JykgewogICAgICAg
ICAgICAgLy8gaG9zdDpwb3J0IHx8IHNjaGVtZTovL2hvc3Q6cG9ydAogICAgICAgICAgICAgLy8g
ICAgIF4gICAgICAgICAgICAgICAgICAgICBeCi0gICAgICAgICAgICBiZWdpblBvcnQgPSBwb3Np
dGlvbjsKLSAgICAgICAgICAgIHNraXBVbnRpbDxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKTsK
KyAgICAgICAgICAgIGJlZ2luUG9ydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAg
ICAgICAgIHNraXBVbnRpbDxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnLycpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSAn
LycpIHsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYg
KnBhcnNpbmdCdWZmZXIgPT0gJy8nKSB7CiAgICAgICAgIC8vIHNjaGVtZTovL2hvc3QvcGF0aCB8
fCBzY2hlbWU6Ly9ob3N0OnBvcnQvcGF0aAogICAgICAgICAvLyAgICAgICAgICAgICAgXiAgICAg
ICAgICAgICAgICAgICAgICAgICAgXgotICAgICAgICBpZiAocG9zaXRpb24gPT0gYmVnaW5Ib3N0
KQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09IGJlZ2luSG9zdCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBiZWdpblBhdGggPSBwb3NpdGlvbjsK
KyAgICAgICAgYmVnaW5QYXRoID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwogICAgIH0KIAot
ICAgIGlmICghcGFyc2VIb3N0KGJlZ2luSG9zdCwgYmVnaW5Qb3J0ID8gYmVnaW5Qb3J0IDogYmVn
aW5QYXRoLCBob3N0LCBob3N0SGFzV2lsZGNhcmQpKQorICAgIGlmICghcGFyc2VIb3N0KFN0cmlu
Z1BhcnNpbmdCdWZmZXIgeyBiZWdpbkhvc3QsIGJlZ2luUG9ydCA/IGJlZ2luUG9ydCA6IGJlZ2lu
UGF0aCB9LCBob3N0LCBob3N0SGFzV2lsZGNhcmQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoIWJlZ2luUG9ydCkKICAgICAgICAgcG9ydCA9IFdURjo6bnVsbG9wdDsKICAgICBl
bHNlIHsKLSAgICAgICAgaWYgKCFwYXJzZVBvcnQoYmVnaW5Qb3J0LCBiZWdpblBhdGgsIHBvcnQs
IHBvcnRIYXNXaWxkY2FyZCkpCisgICAgICAgIGlmICghcGFyc2VQb3J0KFN0cmluZ1BhcnNpbmdC
dWZmZXIgeyBiZWdpblBvcnQsIGJlZ2luUGF0aCB9LCBwb3J0LCBwb3J0SGFzV2lsZGNhcmQpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmIChiZWdpblBhdGggIT0g
ZW5kKSB7Ci0gICAgICAgIGlmICghcGFyc2VQYXRoKGJlZ2luUGF0aCwgZW5kLCBwYXRoKSkKKyAg
ICBpZiAoYmVnaW5QYXRoICE9IHBhcnNpbmdCdWZmZXIuZW5kKCkpIHsKKyAgICAgICAgaWYgKCFw
YXJzZVBhdGgoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luUGF0aCwgcGFyc2luZ0J1ZmZlci5l
bmQoKSB9LCBwYXRoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTMx
MSwyNSArMzA1LDI1IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEK
IC8vICAgICAgICAgICAgICAgICAgICAgOyA8c2NoZW1lPiBwcm9kdWN0aW9uIGZyb20gUkZDIDM5
ODYKIC8vIHNjaGVtZSAgICAgID0gQUxQSEEgKiggQUxQSEEgLyBESUdJVCAvICIrIiAvICItIiAv
ICIuIiApCiAvLwotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNj
aGVtZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgc2NoZW1l
KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNjaGVtZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+IHBhcnNpbmdCdWZmZXIsIFN0cmluZyYgc2NoZW1lKQogewotICAgIEFTU0VSVChiZWdp
biA8PSBlbmQpOworICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPD0gcGFyc2lu
Z0J1ZmZlci5lbmQoKSk7CiAgICAgQVNTRVJUKHNjaGVtZS5pc0VtcHR5KCkpOwogCi0gICAgaWYg
KGJlZ2luID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKKyAgICBh
dXRvIGJlZ2luID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwogCi0gICAgaWYgKCFza2lwRXhh
Y3RseTxVQ2hhciwgaXNBU0NJSUFscGhhPihwb3NpdGlvbiwgZW5kKSkKKyAgICBpZiAoIXNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGUsIGlzQVNDSUlBbHBoYT4ocGFyc2luZ0J1ZmZlcikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNTY2hlbWVDb250aW51
YXRpb25DaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJU
eXBlLCBpc1NjaGVtZUNvbnRpbnVhdGlvbkNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CiAKLSAg
ICBpZiAocG9zaXRpb24gIT0gZW5kKQorICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzY2hlbWUgPSBTdHJpbmcoYmVnaW4sIGVuZCAt
IGJlZ2luKTsKKyAgICBzY2hlbWUgPSBTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRp
b24oKSAtIGJlZ2luKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzM3LDkxICszMzEsODkg
QEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogLy8gICAgICAgICAg
ICAgICAgICAgLyAiKiIKIC8vIGhvc3QtY2hhciAgICAgICAgID0gQUxQSEEgLyBESUdJVCAvICIt
IgogLy8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VIb3N0KGNv
bnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBob3N0LCBib29sJiBo
b3N0SGFzV2lsZGNhcmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSG9zdChTdHJpbmdQYXJzaW5nQnVm
ZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIsIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9z
dEhhc1dpbGRjYXJkKQogewotICAgIEFTU0VSVChiZWdpbiA8PSBlbmQpOworICAgIEFTU0VSVChw
YXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPD0gcGFyc2luZ0J1ZmZlci5lbmQoKSk7CiAgICAgQVNT
RVJUKGhvc3QuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIWhvc3RIYXNXaWxkY2FyZCk7CiAKLSAg
ICBpZiAoYmVnaW4gPT0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwot
Ci0gICAgaWYgKHNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnKicpKSB7CisgICAg
aWYgKHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcqJykpIHsKICAg
ICAgICAgaG9zdEhhc1dpbGRjYXJkID0gdHJ1ZTsKIAotICAgICAgICBpZiAocG9zaXRpb24gPT0g
ZW5kKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVu
ZCwgJy4nKSkKKyAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5n
QnVmZmVyLCAnLicpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGNv
bnN0IFVDaGFyKiBob3N0QmVnaW4gPSBwb3NpdGlvbjsKKyAgICBhdXRvIGhvc3RCZWdpbiA9IHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKTsKIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewot
ICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc0hvc3RDaGFyYWN0ZXI+KHBvc2l0aW9u
LCBlbmQpKQorICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmco
KSkgeworICAgICAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGUsIGlzSG9zdENoYXJh
Y3Rlcj4ocGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgc2tpcFdoaWxlPFVDaGFyLCBpc0hvc3RDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAg
ICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNIb3N0Q2hhcmFjdGVyPihwYXJzaW5nQnVm
ZmVyKTsKIAotICAgICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgIXNraXBFeGFjdGx5PFVDaGFy
Pihwb3NpdGlvbiwgZW5kLCAnLicpKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkgJiYgIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdC
dWZmZXIsICcuJykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQVNT
RVJUKHBvc2l0aW9uID09IGVuZCk7Ci0gICAgaG9zdCA9IFN0cmluZyhob3N0QmVnaW4sIGVuZCAt
IGhvc3RCZWdpbik7CisgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAgaG9z
dCA9IFN0cmluZyhob3N0QmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGhvc3RCZWdp
bik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdDo6cGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwg
U3RyaW5nJiBwYXRoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBhdGgoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyLCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgQVNT
RVJUKGJlZ2luIDw9IGVuZCk7CisgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8
PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsKICAgICBBU1NFUlQocGF0aC5pc0VtcHR5KCkpOwogICAg
IAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIHNraXBXaGlsZTxVQ2hh
ciwgaXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIGJl
Z2luID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJU
eXBlLCBpc1BhdGhDb21wb25lbnRDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwogICAgIC8vIHBh
dGgvdG8vZmlsZS5qcz9xdWVyeT1zdHJpbmcgfHwgcGF0aC90by9maWxlLmpzI2FuY2hvcgogICAg
IC8vICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgotICAg
IGlmIChwb3NpdGlvbiA8IGVuZCkKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFBhdGhD
aGFyYWN0ZXIobV9kaXJlY3RpdmVOYW1lLCBTdHJpbmcoYmVnaW4sIGVuZCAtIGJlZ2luKSwgKnBv
c2l0aW9uKTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkp
CisgICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRQYXRoQ2hhcmFjdGVyKG1fZGlyZWN0aXZl
TmFtZSwgU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLmVuZCgpIC0gYmVnaW4pLCAqcGFyc2lu
Z0J1ZmZlcik7CiAgICAgCi0gICAgcGF0aCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhTdHJp
bmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKKyAgICBwYXRoID0gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4p
KTsKICAgICAKLSAgICBBU1NFUlQocG9zaXRpb24gPD0gZW5kKTsKLSAgICBBU1NFUlQocG9zaXRp
b24gPT0gZW5kIHx8ICgqcG9zaXRpb24gPT0gJyMnIHx8ICpwb3NpdGlvbiA9PSAnPycpKTsKKyAg
ICBBU1NFUlQocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIuZW5kKCkp
OworICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgKCpwYXJzaW5nQnVmZmVyID09
ICcjJyB8fCAqcGFyc2luZ0J1ZmZlciA9PSAnPycpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ly8gcG9ydCAgICAgICAgICAgICAgPSAiOiIgKCAxKkRJR0lUIC8gIioiICkKIC8vCi1ib29sIENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUG9ydChjb25zdCBVQ2hhciogYmVn
aW4sIGNvbnN0IFVDaGFyKiBlbmQsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgYm9vbCYgcG9y
dEhhc1dpbGRjYXJkKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBvcnQoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyLCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQs
IGJvb2wmIHBvcnRIYXNXaWxkY2FyZCkKIHsKLSAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKKyAg
ICBBU1NFUlQocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIuZW5kKCkp
OwogICAgIEFTU0VSVCghcG9ydCk7CiAgICAgQVNTRVJUKCFwb3J0SGFzV2lsZGNhcmQpOwogICAg
IAotICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KGJlZ2luLCBlbmQsICc6JykpCisgICAgaWYg
KCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnOicpKQogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAKLSAgICBpZiAoYmVnaW4gPT0gZW5kKQorICAg
IGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
LSAgICBpZiAoZW5kIC0gYmVnaW4gPT0gMSAmJiAqYmVnaW4gPT0gJyonKSB7CisgICAgaWYgKHBh
cnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPT0gMSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAn
KicpIHsKICAgICAgICAgcG9ydCA9IFdURjo6bnVsbG9wdDsKICAgICAgICAgcG9ydEhhc1dpbGRj
YXJkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIGNvbnN0
IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSURp
Z2l0Pihwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIGJlZ2luID0gcGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJRGlnaXQ+KHBhcnNp
bmdCdWZmZXIpOwogICAgIAotICAgIGlmIChwb3NpdGlvbiAhPSBlbmQpCisgICAgaWYgKCFwYXJz
aW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBib29s
IG9rOwotICAgIGludCBwb3J0SW50ID0gY2hhcmFjdGVyc1RvSW50U3RyaWN0KGJlZ2luLCBlbmQg
LSBiZWdpbiwgJm9rKTsKKyAgICBpbnQgcG9ydEludCA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChi
ZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4sICZvayk7CiAgICAgaWYgKHBv
cnRJbnQgPCAwIHx8IHBvcnRJbnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBwb3J0ID0gcG9ydEludDsKQEAgLTQzMSw0
NCArNDIzLDQyIEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEKIC8v
IE1hdGNoIEJsaW5rJ3MgYmVoYXZpb3Igb2YgYWxsb3dpbmcgYW4gZXF1YWwgc2lnbiB0byBhcHBl
YXIgYW55d2hlcmUgaW4gdGhlIHZhbHVlIG9mIHRoZSBub25jZQogLy8gZXZlbiB0aG91Z2ggdGhp
cyBkb2VzIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgQ29udGVudCBTZWN1cml0eSBQb2xpY3kg
TGV2ZWwgMyBzcGVjLiwKIC8vIDxodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWNzcC8+
ICgyOSBGZWJydWFyeSAyMDE2KS4KLXN0YXRpYyBib29sIGlzTm9uY2VDaGFyYWN0ZXIoVUNoYXIg
YykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzTm9uY2VD
aGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBpc0Jhc2U2NE9yQmFzZTY0
VVJMQ2hhcmFjdGVyKGMpIHx8IGMgPT0gJz0nOwogfQogCiAvLyBub25jZS1zb3VyY2UgICAgPSAi
J25vbmNlLSIgbm9uY2UtdmFsdWUgIiciCiAvLyBub25jZS12YWx1ZSAgICAgPSBiYXNlNjQtdmFs
dWUKLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VOb25jZVNvdXJj
ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBh
cnNlTm9uY2VTb3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5n
QnVmZmVyKQogewotICAgIGNvbnN0IHVuc2lnbmVkIG5vbmNlUHJlZml4TGVuZ3RoID0gNzsKLSAg
ICBpZiAoIVN0cmluZ1ZpZXcoYmVnaW4sIGVuZCAtIGJlZ2luKS5zdGFydHNXaXRoSWdub3JpbmdB
U0NJSUNhc2UoIidub25jZS0iKSkKKyAgICBpZiAoIXNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNh
c2UocGFyc2luZ0J1ZmZlciwgIidub25jZS0iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luICsgbm9uY2VQcmVmaXhMZW5ndGg7Ci0gICAg
Y29uc3QgVUNoYXIqIGJlZ2luTm9uY2VWYWx1ZSA9IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxV
Q2hhciwgaXNOb25jZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Ci0gICAgaWYgKHBvc2l0aW9u
ID49IGVuZCB8fCBwb3NpdGlvbiA9PSBiZWdpbk5vbmNlVmFsdWUgfHwgKnBvc2l0aW9uICE9ICdc
JycpCisKKyAgICBhdXRvIGJlZ2luTm9uY2VWYWx1ZSA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24o
KTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb25jZUNoYXJhY3Rlcj4ocGFyc2lu
Z0J1ZmZlcik7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCBwYXJzaW5nQnVmZmVy
LnBvc2l0aW9uKCkgPT0gYmVnaW5Ob25jZVZhbHVlIHx8ICpwYXJzaW5nQnVmZmVyICE9ICdcJycp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX25vbmNlcy5hZGQoU3RyaW5nKGJlZ2luTm9u
Y2VWYWx1ZSwgcG9zaXRpb24gLSBiZWdpbk5vbmNlVmFsdWUpKTsKKyAgICBtX25vbmNlcy5hZGQo
U3RyaW5nKGJlZ2luTm9uY2VWYWx1ZSwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5O
b25jZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIGhhc2gtc291cmNlICAgID0g
IiciIGhhc2gtYWxnb3JpdGhtICItIiBiYXNlNjQtdmFsdWUgIiciCiAvLyBoYXNoLWFsZ29yaXRo
bSA9ICJzaGEyNTYiIC8gInNoYTM4NCIgLyAic2hhNTEyIgogLy8gYmFzZTY0LXZhbHVlICA9IDEq
KCBBTFBIQSAvIERJR0lUIC8gIisiIC8gIi8iIC8gIi0iIC8gIl8iICkqMiggIj0iICkKLWJvb2wg
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VIYXNoU291cmNlKGNvbnN0IFVD
aGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VIYXNoU291
cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlcikKIHsK
LSAgICBpZiAoYmVnaW4gPT0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2lu
OwotICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICdcJycpKQorICAg
IGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJ1wnJykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gZGlnZXN0ID0gcGFyc2VDcnlwdG9ncmFw
aGljRGlnZXN0KHBvc2l0aW9uLCBlbmQpOworICAgIGF1dG8gZGlnZXN0ID0gcGFyc2VDcnlwdG9n
cmFwaGljRGlnZXN0KHBhcnNpbmdCdWZmZXIpOwogICAgIGlmICghZGlnZXN0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocG9zaXRpb24gPj0gZW5kIHx8ICpwb3NpdGlvbiAhPSAn
XCcnKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgKnBhcnNpbmdCdWZmZXIgIT0g
J1wnJykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGRpZ2VzdC0+dmFsdWUuc2l6
ZSgpID4gQ29udGVudFNlY3VyaXR5UG9saWN5SGFzaDo6bWF4aW11bURpZ2VzdExlbmd0aCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNTUsMTkgKzU1LDE5IEBAIHB1YmxpYzoKICAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNOb25lOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBwYXJzZShjb25zdCBVQ2hh
ciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHZvaWQgcGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7
CiAKLSAgICBib29sIHBhcnNlU291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIq
IGVuZCwgU3RyaW5nJiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBw
b3J0LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dp
bGRjYXJkKTsKLSAgICBib29sIHBhcnNlU2NoZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3Qg
VUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUpOwotICAgIGJvb2wgcGFyc2VIb3N0KGNvbnN0IFVD
aGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFz
V2lsZGNhcmQpOwotICAgIGJvb2wgcGFyc2VQb3J0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3Qg
VUNoYXIqIGVuZCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29sJiBwb3J0SGFzV2lsZGNh
cmQpOwotICAgIGJvb2wgcGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIq
IGVuZCwgU3RyaW5nJiBwYXRoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIHBhcnNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4sIFN0
cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgU3Ry
aW5nJiBwYXRoLCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVNjaGVtZShT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+LCBTdHJpbmcmIHNjaGVtZSk7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZUhvc3QoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFzV2ls
ZGNhcmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VQ
b3J0KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4sIE9wdGlvbmFsPHVpbnQxNl90
PiYgcG9ydCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlUGF0aChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+LCBTdHJpbmcmIHBhdGgpOwogCi0gICAgYm9vbCBwYXJzZU5vbmNlU291cmNlKGNvbnN0
IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZU5vbmNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4pOwogCiAgICAgYm9vbCBpc1Byb3RvY29sQWxsb3dlZEJ5U3Rhcihjb25z
dCBVUkwmKSBjb25zdDsKIAotICAgIGJvb2wgcGFyc2VIYXNoU291cmNlKGNvbnN0IFVDaGFyKiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gYm9vbCBwYXJzZUhhc2hTb3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJU
eXBlPik7CiAKICAgICBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIG1fcG9saWN5OwogICAg
IFZlY3RvcjxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U+IG1fbGlzdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQAogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTgwLDE5ICs4MSwxOSBAQCBTdHJpbmcgU1ZHQW5nbGVWYWx1ZTo6dmFs
dWVBc1N0cmluZygpIGNvCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIFNWR0FuZ2xlVmFsdWU6OlR5cGUgcGFy
c2VBbmdsZVR5cGUoY29uc3QgQ2hhcmFjdGVyVHlwZSogcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIFNW
R0FuZ2xlVmFsdWU6OlR5cGUgcGFyc2VBbmdsZVR5cGUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFy
YWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAgIHN3aXRjaCAoZW5kIC0gcHRyKSB7Cisg
ICAgc3dpdGNoIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpKSB7CiAgICAgY2FzZSAw
OgogICAgICAgICByZXR1cm4gU1ZHQW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9VTlNQRUNJRklF
RDsKICAgICBjYXNlIDM6Ci0gICAgICAgIGlmIChwdHJbMF0gPT0gJ2QnICYmIHB0clsxXSA9PSAn
ZScgJiYgcHRyWzJdID09ICdnJykKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbMF0gPT0gJ2Qn
ICYmIHBhcnNpbmdCdWZmZXJbMV0gPT0gJ2UnICYmIHBhcnNpbmdCdWZmZXJbMl0gPT0gJ2cnKQog
ICAgICAgICAgICAgcmV0dXJuIFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfREVHOwotICAg
ICAgICBpZiAocHRyWzBdID09ICdyJyAmJiBwdHJbMV0gPT0gJ2EnICYmIHB0clsyXSA9PSAnZCcp
CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzBdID09ICdyJyAmJiBwYXJzaW5nQnVmZmVyWzFd
ID09ICdhJyAmJiBwYXJzaW5nQnVmZmVyWzJdID09ICdkJykKICAgICAgICAgICAgIHJldHVybiBT
VkdBbmdsZVZhbHVlOjpTVkdfQU5HTEVUWVBFX1JBRDsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSA0OgotICAgICAgICBpZiAocHRyWzBdID09ICdnJyAmJiBwdHJbMV0gPT0gJ3InICYmIHB0clsy
XSA9PSAnYScgJiYgcHRyWzNdID09ICdkJykKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbMF0g
PT0gJ2cnICYmIHBhcnNpbmdCdWZmZXJbMV0gPT0gJ3InICYmIHBhcnNpbmdCdWZmZXJbMl0gPT0g
J2EnICYmIHBhcnNpbmdCdWZmZXJbM10gPT0gJ2QnKQogICAgICAgICAgICAgcmV0dXJuIFNWR0Fu
Z2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfR1JBRDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
MTA2LDI3ICsxMDcsMTkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1ZTo6c2V0VmFs
dQogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1dG8gaGVscGVyID0gWyZdKGF1
dG8qIHB0ciwgYXV0byogZW5kKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7Ci0gICAgICAgIGF1dG8g
dmFsdWVJblNwZWNpZmllZFVuaXRzID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBw
aW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQ
YXJzaW5nKHZhbHVlLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBFeGNlcHRpb25Pcjx2b2lk
PiB7CisgICAgICAgIGF1dG8gdmFsdWVJblNwZWNpZmllZFVuaXRzID0gcGFyc2VOdW1iZXIocGFy
c2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKICAgICAgICAgaWYg
KCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U3ludGF4RXJyb3IgfTsKIAotICAgICAgICBhdXRvIHVuaXRUeXBlID0gcGFyc2VBbmdsZVR5cGUo
cHRyLCBlbmQpOworICAgICAgICBhdXRvIHVuaXRUeXBlID0gcGFyc2VBbmdsZVR5cGUocGFyc2lu
Z0J1ZmZlcik7CiAgICAgICAgIGlmICh1bml0VHlwZSA9PSBTVkdBbmdsZVZhbHVlOjpTVkdfQU5H
TEVUWVBFX1VOS05PV04pCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJy
b3IgfTsKIAogICAgICAgICBtX3VuaXRUeXBlID0gdW5pdFR5cGU7CiAgICAgICAgIG1fdmFsdWVJ
blNwZWNpZmllZFVuaXRzID0gKnZhbHVlSW5TcGVjaWZpZWRVbml0czsKICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICB9OwotCi0gICAgaWYgKHZhbHVlLmlzOEJpdCgpKSB7Ci0gICAgICAgIGF1dG8q
IHB0ciA9IHZhbHVlLmNoYXJhY3RlcnM4KCk7Ci0gICAgICAgIHJldHVybiBoZWxwZXIocHRyLCBw
dHIgKyB2YWx1ZS5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgYXV0byogcHRyID0gdmFsdWUuY2hh
cmFjdGVyczE2KCk7Ci0gICAgcmV0dXJuIGhlbHBlcihwdHIsIHB0ciArIHZhbHVlLmxlbmd0aCgp
KTsKKyAgICB9KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1ZTo6bmV3VmFs
dWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSwgZmxvYXQgdmFsdWVJblNw
ZWNpZmllZFVuaXRzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw3ICs1Nyw3IEBAIGJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6Omhhc1ZhbGkKIHZv
aWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1l
ID09IFNWR05hbWVzOjp0eXBlQXR0cikgewotICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm1h
YmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUodmFsdWUpOworICAgICAgICBtX3R5cGUgPSBTVkdUcmFu
c2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUodmFsdWUpLnZhbHVlT3IoU1ZHVHJhbnNmb3Jt
VmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTik7CiAgICAgICAgIGlmIChtX3R5cGUgPT0gU1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fTUFUUklYKQogICAgICAgICAgICAgbV90eXBl
ID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjsKICAgICAgICAgcmV0
dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAko
cmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8d3RmL0lz
b01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdC
dWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTc3LDU0ICs3OCw1MCBAQCBmYWlsOgogICAgIHJlc3VsdC5jbGVhcigpOwog
fQogCi1zdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiBwYXJzZUtleVNwbGluZXMo
Y29uc3QgU3RyaW5nVmlldyYgcGFyc2UpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXpp
ZXI+PiBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewotICAgIGlm
IChwYXJzZS5pc0VtcHR5KCkpCisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHBh
cnNlLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNv
bnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHBhcnNlLmxl
bmd0aCgpOwotCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKLQotICAgIFZl
Y3RvcjxVbml0QmV6aWVyPiByZXN1bHQ7Ci0KLSAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7
Ci0gICAgd2hpbGUgKGN1ciA8IGVuZCkgewotICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOwot
ICAgICAgICBhdXRvIHBvc0EgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAgICAgIGlmICgh
cG9zQSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURjo6
cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikg
LT4gT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiB7CisgICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKIAotICAgICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJl
cihjdXIsIGVuZCk7Ci0gICAgICAgIGlmICghcG9zQikKLSAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIFZlY3RvcjxVbml0QmV6aWVyPiByZXN1bHQ7CiAKLSAgICAgICAg
YXV0byBwb3NDID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgICAgICBpZiAoIXBvc0MpCi0g
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBib29sIGRlbGltUGFyc2Vk
ID0gZmFsc2U7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1h
aW5pbmcoKSkgeworICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgaWYg
KCFwb3NBKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAg
YXV0byBwb3NEID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpE
b250U2tpcCk7Ci0gICAgICAgIGlmICghcG9zRCkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVy
KTsKKyAgICAgICAgICAgIGlmICghcG9zQikKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CisgICAg
ICAgICAgICBhdXRvIHBvc0MgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAg
ICAgIGlmICghcG9zQykKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgICAgIGlmIChjdXIgPCBlbmQgJiYgKmN1ciA9PSAnOycpIHsKLSAgICAgICAgICAgIGRlbGlt
UGFyc2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGN1cisrOwotICAgICAgICB9CisgICAgICAgICAg
ICBhdXRvIHBvc0QgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1Bv
bGljeTo6RG9udFNraXApOworICAgICAgICAgICAgaWYgKCFwb3NEKQorICAgICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1
ciwgZW5kKTsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVy
KTsKIAotICAgICAgICByZXN1bHQuYXBwZW5kKFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpw
b3NDLCAqcG9zRCB9KTsKLSAgICB9CisgICAgICAgICAgICBpZiAoc2tpcEV4YWN0bHkocGFyc2lu
Z0J1ZmZlciwgJzsnKSkKKyAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7CiAKLSAg
ICBpZiAoIShjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZCkpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZl
cik7CisKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoVW5pdEJlemllciB7ICpwb3NBLCAqcG9z
QiwgKnBvc0MsICpwb3NEIH0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEocGFyc2luZ0J1
ZmZlci5hdEVuZCgpICYmICFkZWxpbVBhcnNlZCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9KTsKIH0KIAogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaXRUb1ZpZXdCb3guY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODYsMjcgKzg3LDM3IEBAIGJvb2wgU1ZHRml0
VG9WaWV3Qm94OjpwYXJzZUF0dHJpYnV0ZShjb24KIAogT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdG
aXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSkKIHsKLSAg
ICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHZhbHVlLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
OwotICAgIHJldHVybiBwYXJzZVZpZXdCb3goY2hhcmFjdGVycywgY2hhcmFjdGVycyArIHZhbHVl
Lmxlbmd0aCgpKTsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFs
dWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlVmlld0Jv
eEdlbmVyaWMocGFyc2luZ0J1ZmZlcik7CisgICAgfSk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVj
dD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hh
cj4mIHBhcnNpbmdCdWZmZXIsIGJvb2wgdmFsaWRhdGUpCit7CisgICAgcmV0dXJuIHBhcnNlVmll
d0JveEdlbmVyaWMocGFyc2luZ0J1ZmZlciwgdmFsaWRhdGUpOworfQorCitPcHRpb25hbDxGbG9h
dFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KFN0cmluZ1BhcnNpbmdCdWZmZXI8
VUNoYXI+JiBwYXJzaW5nQnVmZmVyLCBib29sIHZhbGlkYXRlKQoreworICAgIHJldHVybiBwYXJz
ZVZpZXdCb3hHZW5lcmljKHBhcnNpbmdCdWZmZXIsIHZhbGlkYXRlKTsKIH0KIAotT3B0aW9uYWw8
RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIGMs
IGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBPcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3
Qm94R2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVm
ZmVyLCBib29sIHZhbGlkYXRlKQogewotICAgIFN0cmluZ1ZpZXcgc3RyKGMsIGVuZCAtIGMpOwor
ICAgIFN0cmluZ1ZpZXcgc3RyaW5nVG9QYXJzZSA9IHBhcnNpbmdCdWZmZXIuc3RyaW5nVmlld09m
Q2hhcmFjdGVyc1JlbWFpbmluZygpOwogCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGMsIGVu
ZCk7CisgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwogCi0gICAgYXV0
byB4ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKLSAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihjLCBl
bmQpOwotICAgIGF1dG8gd2lkdGggPSBwYXJzZU51bWJlcihjLCBlbmQpOwotICAgIGF1dG8gaGVp
Z2h0ID0gcGFyc2VOdW1iZXIoYywgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgIGF1dG8geSA9
IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgIGF1dG8gd2lkdGggPSBwYXJzZU51bWJl
cihwYXJzaW5nQnVmZmVyKTsKKyAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdC
dWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CiAKICAgICBpZiAodmFsaWRh
dGUpIHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gbV92aWV3Qm94LT5jb250ZXh0RWxl
bWVudCgpLT5kb2N1bWVudCgpOwogCiAgICAgICAgIGlmICgheCB8fCAheSB8fCAhd2lkdGggfHwg
IWhlaWdodCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJl
cG9ydFdhcm5pbmcobWFrZVN0cmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdCb3g9XCIiLCBzdHIs
ICJcIiIpKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBv
cnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiwgc3RyaW5n
VG9QYXJzZSwgIlwiIikpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAg
ICAgfQogCkBAIC0xMjMsOSArMTM0LDkgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1Zp
ZXdCb3g6OnBhcgogICAgICAgICB9CiAKICAgICAgICAgLy8gTm90aGluZyBzaG91bGQgY29tZSBh
ZnRlciB0aGUgbGFzdCwgZm91cnRoIG51bWJlci4KLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKGMsIGVuZCk7Ci0gICAgICAgIGlmIChjIDwgZW5kKSB7Ci0gICAgICAgICAgICBkb2N1bWVu
dC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9ibGVt
IHBhcnNpbmcgdmlld0JveD1cIiIsIHN0ciwgIlwiIikpOworICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0No
YXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcobWFrZVN0cmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdC
b3g9XCIiLCBzdHJpbmdUb1BhcnNlLCAiXCIiKSk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zp
dFRvVmlld0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1Zp
ZXdCb3guaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRv
Vmlld0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw5ICs2NiwxMiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCByZXNldCgpOwogICAgIGJvb2wgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNl
Vmlld0JveChjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSk7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgYm9v
bCB2YWxpZGF0ZSA9IHRydWUpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VWaWV3Qm94
KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VWaWV3Qm94KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNo
YXI+JiwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOwogCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VWaWV3Qm94R2Vu
ZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiwgYm9vbCB2YWxpZGF0ZSA9
IHRydWUpOworCiAgICAgUmVmPFNWR0FuaW1hdGVkUmVjdD4gbV92aWV3Qm94OwogICAgIFJlZjxT
VkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+IG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKICAg
ICBib29sIG1faXNWaWV3Qm94VmFsaWQgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0xlbmd0aExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMZW5ndGhMaXN0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TGVuZ3RoTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGhMaXN0LmgiCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZHTGVu
Z3RoTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjbGVhckl0ZW1zKCk7
CisKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShh
dXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVu
YW1lIGRlY2x0eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBlOworCisgICAgICAgIHdo
aWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAg
ICAgYXV0byBzdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKworICAgICAgICAgICAg
c2tpcFVudGlsPENoYXJhY3RlclR5cGUsIGlzU1ZHU3BhY2VPckNvbW1hPihwYXJzaW5nQnVmZmVy
KTsKKworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IFNWR0xlbmd0aFZhbHVlOjpj
b25zdHJ1Y3QobV9sZW5ndGhNb2RlLCBTdHJpbmdWaWV3KHN0YXJ0LCBwYXJzaW5nQnVmZmVyLnBv
c2l0aW9uKCkgLSBzdGFydCkpOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgYXBwZW5kKFNWR0xlbmd0aDo6Y3JlYXRlKFdURk1v
dmUoKnZhbHVlKSkpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0
ZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogU2hvdWxk
IHRoaXMgY2xlYXJJdGVtcygpIG9uIGZhaWx1cmUgbGlrZSBTVkdUcmFuc2Zvcm1MaXN0IGRvZXM/
CisKKyAgICAgICAgcmV0dXJuIHBhcnNpbmdCdWZmZXIuYXRFbmQoKTsKKyAgICB9KTsKK30KKwor
U3RyaW5nIFNWR0xlbmd0aExpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAoreworICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZvciAoY29uc3QgYXV0byYgbGVuZ3RoIDogbV9pdGVt
cykgeworICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobGVuZ3RoLT52YWx1ZSgpLnZh
bHVlQXNTdHJpbmcoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsK
K30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5oCShyZXZpc2lvbiAyNjMz
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJT
VkdWYWx1ZVByb3BlcnR5TGlzdC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Myw0NSArNTIsOSBAQCBwdWJsaWM6CiAK
ICAgICBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aE1v
ZGU7IH0KIAotICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGNsZWFySXRlbXMoKTsKLQotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9
IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25z
dCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgICAgICBjb25zdCBVQ2hh
ciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQp
IHsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IHB0cjsKLSAgICAgICAgICAgIHdo
aWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnLCcgJiYgIWlzU1ZHU3BhY2UoKnB0cikpCi0gICAg
ICAgICAgICAgICAgcHRyKys7Ci0gICAgICAgICAgICBpZiAocHRyID09IHN0YXJ0KQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmcoc3RhcnQs
IHB0ciAtIHN0YXJ0KTsKLSAgICAgICAgICAgIFNWR0xlbmd0aFZhbHVlIHZhbHVlKG1fbGVuZ3Ro
TW9kZSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUuc2V0VmFsdWVBc1N0cmluZyh2YWx1ZVN0cmlu
ZykuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGFwcGVuZChTVkdMZW5ndGg6OmNyZWF0ZSh2YWx1ZSkpOwotICAgICAgICAgICAgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIHB0ciA9PSBlbmQ7Ci0gICAgfQorICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiB2
YWx1ZSk7CiAKLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0KLSAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBsZW5ndGggOiBtX2l0ZW1zKSB7Ci0gICAgICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgo
KSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotCi0gICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZChsZW5ndGgtPnZhbHVlKCkudmFsdWVBc1N0cmluZygpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgIFN0cmlu
ZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgCiBwcml2YXRlOgogICAgIFNW
R0xlbmd0aExpc3QoU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxp
dGllcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYxLDE5ICs2Miwy
MSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGxlbmd0aFR5cGVUb1N0CiAgICAgcmV0dXJu
ICIiOwogfQogCi1zdGF0aWMgaW5saW5lIFNWR0xlbmd0aFR5cGUgcGFyc2VMZW5ndGhUeXBlKGNv
bnN0IFVDaGFyKiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIFNWR0xlbmd0aFR5cGUgcGFyc2VMZW5ndGhUeXBlKFN0
cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAg
aWYgKHB0ciA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAg
cmV0dXJuIFNWR0xlbmd0aFR5cGU6Ok51bWJlcjsKIAotICAgIGNvbnN0IFVDaGFyIGZpcnN0Q2hh
ciA9ICpwdHI7CisgICAgYXV0byBmaXJzdENoYXIgPSAqcGFyc2luZ0J1ZmZlcjsKKyAgICArK3Bh
cnNpbmdCdWZmZXI7CiAKLSAgICBpZiAoKytwdHIgPT0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVm
ZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBmaXJzdENoYXIgPT0gJyUnID8gU1ZHTGVuZ3Ro
VHlwZTo6UGVyY2VudGFnZSA6IFNWR0xlbmd0aFR5cGU6OlVua25vd247CiAKLSAgICBjb25zdCBV
Q2hhciBzZWNvbmRDaGFyID0gKnB0cjsKKyAgICBhdXRvIHNlY29uZENoYXIgPSAqcGFyc2luZ0J1
ZmZlcjsKKyAgICArK3BhcnNpbmdCdWZmZXI7CiAKLSAgICBpZiAoKytwdHIgIT0gZW5kKQorICAg
IGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gU1ZHTGVuZ3RoVHlw
ZTo6VW5rbm93bjsKIAogICAgIGlmIChmaXJzdENoYXIgPT0gJ2UnICYmIHNlY29uZENoYXIgPT0g
J20nKQpAQCAtMTgwLDcgKzE4MywxNSBAQCBTVkdMZW5ndGhWYWx1ZTo6U1ZHTGVuZ3RoVmFsdWUo
Y29uc3QgU1ZHCiAgICAgc2V0VmFsdWUoY29udGV4dCwgdmFsdWUpOwogfQogCi1TVkdMZW5ndGhW
YWx1ZSBTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0KFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nLCBTVkdQYXJzaW5nRXJyb3ImIHBhcnNlRXJyb3Is
IFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSBuZWdhdGl2ZVZhbHVlc01vZGUpCitPcHRpb25h
bDxTVkdMZW5ndGhWYWx1ZT4gU1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVjdChTVkdMZW5ndGhNb2Rl
IGxlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlQXNTdHJpbmcpCit7CisgICAgU1ZH
TGVuZ3RoVmFsdWUgbGVuZ3RoIHsgbGVuZ3RoTW9kZSB9OworICAgIGlmIChsZW5ndGguc2V0VmFs
dWVBc1N0cmluZyh2YWx1ZUFzU3RyaW5nKS5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCitTVkdMZW5ndGhWYWx1ZSBT
VkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0KFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSwgY29uc3Qg
U3RyaW5nVmlldyYgdmFsdWVBc1N0cmluZywgU1ZHUGFyc2luZ0Vycm9yJiBwYXJzZUVycm9yLCBT
VkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgbmVnYXRpdmVWYWx1ZXNNb2RlKQogewogICAgIFNW
R0xlbmd0aFZhbHVlIGxlbmd0aChsZW5ndGhNb2RlKTsKIApAQCAtMjM5LDcgKzI1MCw3IEBAIFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4gU1ZHTGVuZ3RoVmFsdWU6OnQKICAgICByZXR1cm4gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZShsZW5ndGgudmFsdWVJblNwZWNpZmllZFVuaXRzKCksIGxlbmd0
aFR5cGVUb1ByaW1pdGl2ZVR5cGUobGVuZ3RoLmxlbmd0aFR5cGUoKSkpOwogfQogCi1FeGNlcHRp
b25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlQXNTdHJpbmcsIFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSkKK0V4Y2VwdGlvbk9yPHZv
aWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmIHZh
bHVlQXNTdHJpbmcsIFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSkKIHsKICAgICBtX3ZhbHVlSW5T
cGVjaWZpZWRVbml0cyA9IDA7CiAgICAgbV9sZW5ndGhNb2RlID0gbGVuZ3RoTW9kZTsKQEAgLTI4
NiwyNiArMjk3LDI0IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwK
ICAgICByZXR1cm4gc2V0VmFsdWUoY29udGV4dCwgdmFsdWUpOwogfQogCi1FeGNlcHRpb25Pcjx2
b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIHN0cmlu
ZykKK0V4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNv
bnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3Ry
aW5nVmlldyhzdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFy
KiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0
ciArIHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGF1dG8gY29udmVydGVkTnVtYmVyID0gcGFyc2VO
dW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Ci0gICAgaWYg
KCFjb252ZXJ0ZWROdW1iZXIpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OwotCi0gICAgYXV0byBsZW5ndGhUeXBlID0gcGFyc2VMZW5ndGhUeXBlKHB0ciwgZW5kKTsK
LSAgICBpZiAobGVuZ3RoVHlwZSA9PSBTVkdMZW5ndGhUeXBlOjpVbmtub3duKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hh
cmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBFeGNl
cHRpb25Pcjx2b2lkPiB7CisgICAgICAgIGF1dG8gY29udmVydGVkTnVtYmVyID0gcGFyc2VOdW1i
ZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAg
ICAgaWYgKCFjb252ZXJ0ZWROdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U3ludGF4RXJyb3IgfTsKKworICAgICAgICBhdXRvIGxlbmd0aFR5cGUgPSBwYXJzZUxlbmd0aFR5
cGUocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmIChsZW5ndGhUeXBlID09IFNWR0xlbmd0aFR5
cGU6OlVua25vd24pCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3Ig
fTsKIAotICAgIG1fbGVuZ3RoVHlwZSA9IGxlbmd0aFR5cGU7Ci0gICAgbV92YWx1ZUluU3BlY2lm
aWVkVW5pdHMgPSAqY29udmVydGVkTnVtYmVyOwotICAgIHJldHVybiB7IH07CisgICAgICAgIG1f
bGVuZ3RoVHlwZSA9IGxlbmd0aFR5cGU7CisgICAgICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRz
ID0gKmNvbnZlcnRlZE51bWJlcjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9KTsKIH0KIAog
RXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRz
KGNvbnN0IFNWR0xlbmd0aENvbnRleHQmIGNvbnRleHQsIFNWR0xlbmd0aFR5cGUgbGVuZ3RoVHlw
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5oCShyZXZpc2lvbiAyNjMzMzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsMTMgKzU4LDE0IEBAIGVudW0gY2xhc3MgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2Rl
IDoKIGNsYXNzIFNWR0xlbmd0aFZhbHVlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBTVkdMZW5ndGhWYWx1ZShTVkdMZW5ndGhNb2RlID0gU1ZHTGVuZ3RoTW9k
ZTo6T3RoZXIsIGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZyA9IFN0cmluZygpKTsKKyAgICBT
VkdMZW5ndGhWYWx1ZShTVkdMZW5ndGhNb2RlID0gU1ZHTGVuZ3RoTW9kZTo6T3RoZXIsIGNvbnN0
IFN0cmluZyYgdmFsdWVBc1N0cmluZyA9IHsgfSk7CiAgICAgU1ZHTGVuZ3RoVmFsdWUoZmxvYXQg
dmFsdWVJblNwZWNpZmllZFVuaXRzLCBTVkdMZW5ndGhUeXBlLCBTVkdMZW5ndGhNb2RlID0gU1ZH
TGVuZ3RoTW9kZTo6T3RoZXIpOwogICAgIFNWR0xlbmd0aFZhbHVlKGNvbnN0IFNWR0xlbmd0aENv
bnRleHQmLCBmbG9hdCwgU1ZHTGVuZ3RoVHlwZSA9IFNWR0xlbmd0aFR5cGU6Ok51bWJlciwgU1ZH
TGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVyKTsKIAotICAgIHN0YXRpYyBTVkdMZW5n
dGhWYWx1ZSBjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSwgY29uc3QgU3RyaW5nJiwgU1ZHUGFyc2lu
Z0Vycm9yJiwgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlID0gU1ZHTGVuZ3RoTmVnYXRpdmVW
YWx1ZXNNb2RlOjpBbGxvdyk7CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR0xlbmd0aFZhbHVlPiBj
b25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSwgY29uc3QgU3RyaW5nVmlldyYpOworICAgIHN0YXRpYyBT
VkdMZW5ndGhWYWx1ZSBjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSwgY29uc3QgU3RyaW5nVmlldyYs
IFNWR1BhcnNpbmdFcnJvciYsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA9IFNWR0xlbmd0
aE5lZ2F0aXZlVmFsdWVzTW9kZTo6QWxsb3cpOwogICAgIHN0YXRpYyBTVkdMZW5ndGhWYWx1ZSBi
bGVuZChjb25zdCBTVkdMZW5ndGhWYWx1ZSYgZnJvbSwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHRv
LCBmbG9hdCBwcm9ncmVzcyk7Ci0gICAgCisKICAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFsdWUgZnJv
bUNTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7CiAgICAgc3RhdGlj
IFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gdG9DU1NQcmltaXRpdmVWYWx1ZShjb25zdCBTVkdMZW5n
dGhWYWx1ZSYpOwogCkBAIC04NSw4ICs4Niw4IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2
b2lkPiBzZXRWYWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0JiwgZmxvYXQpOwogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNldFZhbHVlKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBmbG9hdCwgU1ZH
TGVuZ3RoVHlwZSwgU1ZHTGVuZ3RoTW9kZSk7CiAKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRW
YWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZh
bHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiwgU1ZHTGVuZ3RoTW9kZSk7CisgICAgRXhjZXB0aW9u
T3I8dm9pZD4gc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmdWaWV3Jik7CisgICAgRXhjZXB0
aW9uT3I8dm9pZD4gc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmdWaWV3JiwgU1ZHTGVuZ3Ro
TW9kZSk7CiAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhj
b25zdCBTVkdMZW5ndGhDb250ZXh0JiwgU1ZHTGVuZ3RoVHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTnVtYmVyTGlzdC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR051bWJlckxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5o
IgorCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29s
IFNWR051bWJlckxpc3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgY2xlYXJJ
dGVtcygpOworCisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVl
LCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIC8vIFRoZSBzcGVjIChzZWN0aW9u
IDQuMSkgc3RyYW5nZWx5IGRvZXNuJ3QgYWxsb3cgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgICAg
ICAvLyBXZSBtaWdodCBjaG9vc2UgdG8gdmlvbGF0ZSB0aGF0IGludGVudGlvbmFsbHkuCisgICAg
ICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAg
ICAgICAgICAgYXV0byBudW1iZXIgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICAg
ICAgICAgIGlmICghbnVtYmVyKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
YXBwZW5kKFNWR051bWJlcjo6Y3JlYXRlKCpudW1iZXIpKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVhckl0ZW1zKCkgb24gZmFpbHVyZSBsaWtlIFNWR1Ry
YW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAgICByZXR1cm4gcGFyc2luZ0J1ZmZlci5hdEVuZCgp
OworICAgIH0pOworfQorCitTdHJpbmcgU1ZHTnVtYmVyTGlzdDo6dmFsdWVBc1N0cmluZygpIGNv
bnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgZm9yIChjb25zdCBhdXRv
JiBudW1iZXIgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQorICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZChu
dW1iZXItPnZhbHVlKCkpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
Cit9CisKK30KKwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCShyZXZpc2lvbiAy
NjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MCwzOSArNTAsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNWR051bWJlckxpc3Qob3RoZXIsIGFjY2VzcykpOwogICAgIH0KIAotICAgIGJvb2wgcGFy
c2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQot
ICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVw
Y29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUu
bGVuZ3RoKCk7Ci0KLSAgICAgICAgLy8gVGhlIHNwZWMgKHNlY3Rpb24gNC4xKSBzdHJhbmdlbHkg
ZG9lc24ndCBhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIC8vIFdlIG1pZ2h0IGNo
b29zZSB0byB2aW9sYXRlIHRoYXQgaW50ZW50aW9uYWxseS4KLSAgICAgICAgd2hpbGUgKHB0ciA8
IGVuZCkgewotICAgICAgICAgICAgYXV0byBudW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7
Ci0gICAgICAgICAgICBpZiAoIW51bWJlcikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGFwcGVuZChTVkdOdW1iZXI6OmNyZWF0ZSgqbnVtYmVyKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gcHRyID09IGVuZDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdmFsdWVBc1N0
cmluZygpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBudW1iZXIgOiBtX2l0ZW1zKSB7Ci0gICAg
ICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZCgnICcpOwotCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChudW1iZXItPnZhbHVlKCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9
CisgICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgdmFsdWVBc1N0cmlu
ZygpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI2MzMz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNyArNDIsNyBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRmxvYXRUeXBlPiBzdGF0aWMgaW5sCiAvLyBhdCBhIGhpZ2hlciBwcmVjaXNpb24gaW50
ZXJuYWxseSwgd2l0aG91dCBhbnkgdW5uZWNlc3NhcnkgcnVudGltZSBjb3N0IG9yIGNvZGUKIC8v
IGNvbXBsZXhpdHkuCiAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgc2hhcmVkL3JlcGxhY2VkIHdpdGgg
bnVtYmVyIHBhcnNpbmcgaW4gV1RGPwotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUs
IHR5cGVuYW1lIEZsb2F0VHlwZSA9IGZsb2F0PiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRUeXBlPiBn
ZW5lcmljUGFyc2VOdW1iZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFj
dGVyVHlwZSogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwID0gU3VmZml4U2tpcHBpbmdQ
b2xpY3k6OlNraXApCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUg
RmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBPcHRpb25hbDxGbG9hdFR5cGU+IGdlbmVyaWNQYXJz
ZU51bWJlcihTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVy
LCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXAp
CiB7CiAgICAgRmxvYXRUeXBlIG51bWJlciA9IDA7CiAgICAgRmxvYXRUeXBlIGludGVnZXIgPSAw
OwpAQCAtNTAsMjYgKzUxLDI2IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0
eXBlbmEKICAgICBGbG9hdFR5cGUgZXhwb25lbnQgPSAwOwogICAgIGludCBzaWduID0gMTsKICAg
ICBpbnQgZXhwc2lnbiA9IDE7Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogc3RhcnQgPSBwdHI7
CisgICAgYXV0byBzdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKIAogICAgIC8vIHJl
YWQgdGhlIHNpZ24KLSAgICBpZiAocHRyIDwgZW5kICYmICpwdHIgPT0gJysnKQotICAgICAgICBw
dHIrKzsKLSAgICBlbHNlIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnLScpIHsKLSAgICAgICAg
cHRyKys7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYm
ICpwYXJzaW5nQnVmZmVyID09ICcrJykKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgIGVs
c2UgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5n
QnVmZmVyID09ICctJykgeworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgICAgIHNpZ24g
PSAtMTsKICAgICB9IAogICAgIAotICAgIGlmIChwdHIgPT0gZW5kIHx8ICghaXNBU0NJSURpZ2l0
KCpwdHIpICYmICpwdHIgIT0gJy4nKSkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8
ICghaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSAmJiAqcGFyc2luZ0J1ZmZlciAhPSAnLicp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gcmVhZCB0aGUgaW50ZWdl
ciBwYXJ0LCBidWlsZCByaWdodC10by1sZWZ0Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcHRy
U3RhcnRJbnRQYXJ0ID0gcHRyOwotICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0
KCpwdHIpKQotICAgICAgICArK3B0cjsgLy8gQWR2YW5jZSB0byBmaXJzdCBub24tZGlnaXQuCisg
ICAgYXV0byBwdHJTdGFydEludFBhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAg
d2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlE
aWdpdCgqcGFyc2luZ0J1ZmZlcikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsgLy8gQWR2YW5j
ZSB0byBmaXJzdCBub24tZGlnaXQuCiAKLSAgICBpZiAocHRyICE9IHB0clN0YXJ0SW50UGFydCkg
ewotICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHJTY2FuSW50UGFydCA9IHB0ciAtIDE7
CisgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAhPSBwdHJTdGFydEludFBhcnQpIHsK
KyAgICAgICAgYXV0byBwdHJTY2FuSW50UGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAt
IDE7CiAgICAgICAgIEZsb2F0VHlwZSBtdWx0aXBsaWVyID0gMTsKICAgICAgICAgd2hpbGUgKHB0
clNjYW5JbnRQYXJ0ID49IHB0clN0YXJ0SW50UGFydCkgewogICAgICAgICAgICAgaW50ZWdlciAr
PSBtdWx0aXBsaWVyICogc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigqKHB0clNjYW5JbnRQYXJ0LS0p
IC0gJzAnKTsKQEAgLTgwLDM4ICs4MSwzOSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZSwgdHlwZW5hCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAot
ICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnLicpIHsgLy8gcmVhZCB0aGUgZGVjaW1hbHMK
LSAgICAgICAgcHRyKys7CisgICAgLy8gcmVhZCB0aGUgZGVjaW1hbHMKKyAgICBpZiAocGFyc2lu
Z0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJy4n
KSB7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKICAgICAgICAgCiAgICAgICAgIC8vIFRoZXJl
IG11c3QgYmUgYSBsZWFzdCBvbmUgZGlnaXQgZm9sbG93aW5nIHRoZSAuCi0gICAgICAgIGlmIChw
dHIgPj0gZW5kIHx8ICFpc0FTQ0lJRGlnaXQoKnB0cikpCisgICAgICAgIGlmIChwYXJzaW5nQnVm
ZmVyLmF0RW5kKCkgfHwgIWlzQVNDSUlEaWdpdCgqcGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVu
ZCAmJiBpc0FTQ0lJRGlnaXQoKnB0cikpCi0gICAgICAgICAgICBkZWNpbWFsICs9ICgqKHB0cisr
KSAtICcwJykgKiAoZnJhYyAqPSBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDAuMSkpOworICAgICAg
ICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgaXNBU0NJ
SURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgICAgIGRlY2ltYWwgKz0gKCoocGFyc2lu
Z0J1ZmZlcisrKSAtICcwJykgKiAoZnJhYyAqPSBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDAuMSkp
OwogICAgIH0KIAogICAgIC8vIHJlYWQgdGhlIGV4cG9uZW50IHBhcnQKLSAgICBpZiAocHRyICE9
IHN0YXJ0ICYmIHB0ciArIDEgPCBlbmQgJiYgKCpwdHIgPT0gJ2UnIHx8ICpwdHIgPT0gJ0UnKSAK
LSAgICAgICAgJiYgKHB0clsxXSAhPSAneCcgJiYgcHRyWzFdICE9ICdtJykpIHsgCi0gICAgICAg
IHB0cisrOworICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgIT0gc3RhcnQgJiYgcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpICsgMSA8IHBhcnNpbmdCdWZmZXIuZW5kKCkgJiYgKCpwYXJz
aW5nQnVmZmVyID09ICdlJyB8fCAqcGFyc2luZ0J1ZmZlciA9PSAnRScpCisgICAgICAgICYmIChw
YXJzaW5nQnVmZmVyWzFdICE9ICd4JyAmJiBwYXJzaW5nQnVmZmVyWzFdICE9ICdtJykpIHsKKyAg
ICAgICAgKytwYXJzaW5nQnVmZmVyOwogCiAgICAgICAgIC8vIHJlYWQgdGhlIHNpZ24gb2YgdGhl
IGV4cG9uZW50Ci0gICAgICAgIGlmICgqcHRyID09ICcrJykKLSAgICAgICAgICAgIHB0cisrOwot
ICAgICAgICBlbHNlIGlmICgqcHRyID09ICctJykgewotICAgICAgICAgICAgcHRyKys7CisgICAg
ICAgIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAnKycpCisgICAgICAgICAgICArK3BhcnNpbmdCdWZm
ZXI7CisgICAgICAgIGVsc2UgaWYgKCpwYXJzaW5nQnVmZmVyID09ICctJykgeworICAgICAgICAg
ICAgKytwYXJzaW5nQnVmZmVyOwogICAgICAgICAgICAgZXhwc2lnbiA9IC0xOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGFuIGV4cG9uZW50Ci0gICAgICAg
IGlmIChwdHIgPj0gZW5kIHx8ICFpc0FTQ0lJRGlnaXQoKnB0cikpCisgICAgICAgIGlmIChwYXJz
aW5nQnVmZmVyLmF0RW5kKCkgfHwgIWlzQVNDSUlEaWdpdCgqcGFyc2luZ0J1ZmZlcikpCiAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQg
JiYgaXNBU0NJSURpZ2l0KCpwdHIpKSB7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhh
c0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpKSB7
CiAgICAgICAgICAgICBleHBvbmVudCAqPSBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDEwKTsKLSAg
ICAgICAgICAgIGV4cG9uZW50ICs9ICpwdHIgLSAnMCc7Ci0gICAgICAgICAgICBwdHIrKzsKKyAg
ICAgICAgICAgIGV4cG9uZW50ICs9ICpwYXJzaW5nQnVmZmVyIC0gJzAnOworICAgICAgICAgICAg
KytwYXJzaW5nQnVmZmVyOwogICAgICAgICB9CiAgICAgICAgIC8vIE1ha2Ugc3VyZSBleHBvbmVu
dCBpcyB2YWxpZC4KICAgICAgICAgaWYgKCFpc1ZhbGlkUmFuZ2UoZXhwb25lbnQpIHx8IGV4cG9u
ZW50ID4gc3RkOjpudW1lcmljX2xpbWl0czxGbG9hdFR5cGU+OjptYXhfZXhwb25lbnQpCkBAIC0x
MjgsNDQgKzEzMCw0NCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5h
CiAgICAgaWYgKCFpc1ZhbGlkUmFuZ2UobnVtYmVyKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIGlmIChzdGFydCA9PSBwdHIpCisgICAgaWYgKHN0YXJ0ID09IHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlm
IChza2lwID09IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQotICAgICAgICBza2lwT3B0aW9u
YWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlc09yRGVsaW1pdGVyKHBhcnNpbmdCdWZmZXIpOwogCiAgICAgcmV0dXJuIG51bWJlcjsK
IH0KIAotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFyKiYgcHRyLCBjb25z
dCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQorT3B0aW9uYWw8ZmxvYXQ+
IHBhcnNlTnVtYmVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyLCBT
dWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1i
ZXIocHRyLCBlbmQsIHNraXApOworICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocGFyc2lu
Z0J1ZmZlciwgc2tpcCk7CiB9CiAKLU9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkK
K09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYg
cGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKLSAgICByZXR1cm4g
Z2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKKyAgICByZXR1cm4gZ2VuZXJpY1Bh
cnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIsIHNraXApOwogfQogCiBPcHRpb25hbDxmbG9hdD4gcGFy
c2VOdW1iZXIoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBz
a2lwKQogewotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVy
dGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJh
Y3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKLSAg
ICBhdXRvIHJlc3VsdCA9IGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7Ci0gICAg
aWYgKHB0ciAhPSBlbmQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5n
LCBbc2tpcF0oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxmbG9hdD4geworICAgICAg
ICBhdXRvIHJlc3VsdCA9IGdlbmVyaWNQYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBza2lwKTsK
KyAgICAgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0pOwogfQogCiAvLyBv
bmx5IHVzZWQgdG8gcGFyc2UgbGFyZ2VBcmNGbGFnIGFuZCBzd2VlcEZsYWcgd2hpY2ggbXVzdCBi
ZSBhICIwIiBvciAiMSIKIC8vIGFuZCBtaWdodCBub3QgaGF2ZSBhbnkgd2hpdGVzcGFjZS9jb21t
YSBhZnRlciBpdAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJv
b2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogZW5kKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9w
dGlvbmFsPGJvb2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFy
YWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBpZiAocHRyID49IGVuZCkKKyAgICBp
ZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSBmbGFnQ2hhciA9ICpwdHIrKzsKKyAgICBjb25zdCBD
aGFyYWN0ZXJUeXBlIGZsYWdDaGFyID0gKnBhcnNpbmdCdWZmZXI7CisgICAgKytwYXJzaW5nQnVm
ZmVyOwogCiAgICAgYm9vbCBmbGFnOwogICAgIGlmIChmbGFnQ2hhciA9PSAnMCcpCkBAIC0xNzUs
MTkgKzE3NywxOSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uCiAg
ICAgZWxzZQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOworICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
c09yRGVsaW1pdGVyKHBhcnNpbmdCdWZmZXIpOwogICAgIAogICAgIHJldHVybiBmbGFnOwogfQog
Ci1PcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0IExD
aGFyKiBlbmQpCitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0Zs
YWcocHRyLCBlbmQpOworICAgIHJldHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKHBhcnNpbmdCdWZm
ZXIpOwogfQogCi1PcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoY29uc3QgVUNoYXIqJiBwdHIs
IGNvbnN0IFVDaGFyKiBlbmQpCitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQ
YXJzZUFyY0ZsYWcocHRyLCBlbmQpOworICAgIHJldHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKHBh
cnNpbmdCdWZmZXIpOwogfQogCiBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gcGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCkBAIC0xOTUs
MjUgKzE5NywyMyBAQCBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gcGFyc2VOCiAg
ICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJh
Y3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwot
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBhdXRv
IHggPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAgaWYgKCF4KQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhz
dHJpbmcsIFtdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0
LCBmbG9hdD4+IHsKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7
CisgICAgICAgIGlmICgheCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBpZiAoY3VyID09IGVuZCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4LCAqeCk7
CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoKngsICp4KTsKIAotICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGN1ciwg
ZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwotICAgIGlmICgheSkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIocGFy
c2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgaWYg
KCF5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChjdXIgIT0g
ZW5kKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIXBhcnNpbmdC
dWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp5KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKCp4LCAqeSk7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlUG9p
bnQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQpAQCAtMjIxLDExNyArMjIxLDExMyBAQCBPcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZVBvaW50KGNvbnN0IFN0CiAgICAgaWYgKHN0cmluZy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25z
dCBVQ2hhciogY3VyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBl
bmQgPSBjdXIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBpZiAoIXNraXBPcHRpb25hbFNWR1Nw
YWNlcyhjdXIsIGVuZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJu
IFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVm
ZmVyKSAtPiBPcHRpb25hbDxGbG9hdFBvaW50PiB7CisgICAgICAgIGlmICghc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIGF1dG8gcG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VyLCBlbmQpOwotICAgIGlm
ICghcG9pbnQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gcG9p
bnQgPSBwYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICghcG9pbnQp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgLy8gRGlzYWxsb3cgYW55
dGhpbmcgZXhjZXB0IHNwYWNlcyBhdCB0aGUgZW5kLgotICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjdXIsIGVuZCk7Ci0gICAgCi0gICAgcmV0dXJuIHBvaW50OworICAgICAgICAvLyBEaXNhbGxv
dyBhbnl0aGluZyBleGNlcHQgc3BhY2VzIGF0IHRoZSBlbmQuCisgICAgICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBwb2lu
dDsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVJlY3QoY29uc3QgU3Ry
aW5nVmlldyYgc3RyaW5nKQogewotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3Ry
aW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNv
bnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5s
ZW5ndGgoKTsKLSAgICAKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOwotICAg
IAotICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKLSAgICBpZiAoIXgpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byB5ID0gcGFyc2VOdW1iZXIocHRyLCBl
bmQpOwotICAgIGlmICgheSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRv
IHdpZHRoID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAgIGlmICghd2lkdGgpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byBoZWlnaHQgPSBwYXJzZU51bWJlcihwdHIs
IGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICBpZiAoIWhlaWdodCkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFj
dGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFs
PEZsb2F0UmVjdD4geworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZl
cik7CisgICAgICAgIAorICAgICAgICBhdXRvIHggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVy
KTsKKyAgICAgICAgaWYgKCF4KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICgh
eSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gd2lkdGgg
PSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKCF3aWR0aCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VO
dW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAg
ICAgICAgaWYgKCFoZWlnaHQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgcmV0dXJuIEZsb2F0UmVjdCB7ICp4LCAqeSwgKndpZHRoLCAqaGVpZ2h0IH07CisgICAgICAg
IHJldHVybiBGbG9hdFJlY3QgeyAqeCwgKnksICp3aWR0aCwgKmhlaWdodCB9OworICAgIH0pOwog
fQogCiBPcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmlu
Z1ZpZXcmIHN0cmluZykKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBkZXRlY3Rpb24g
aXMgbWlzc2luZy4KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVw
Y29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRl
ZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgo
KTsKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOwotCi0gICAgSGFzaFNldDxT
dHJpbmc+IHZhbHVlczsKLQotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgLy8gTGVh
ZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFjZSBiZWZvcmUgYW5k
IGFmdGVyIHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdub3JlZC4KLSAgICAgICAgY29uc3QgVUNoYXIq
IGlucHV0U3RhcnQgPSBwdHI7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAn
LCcpCi0gICAgICAgICAgICArK3B0cjsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0Zv
clBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IEhhc2hTZXQ8U3RyaW5n
PiB7CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKIAotICAg
ICAgICBpZiAocHRyID09IGlucHV0U3RhcnQpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAg
SGFzaFNldDxTdHJpbmc+IHZhbHVlczsKIAotICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9t
IHRoZSA7IHRvIGlnbm9yZSBhbnkgd2hpdGVzcGFjZQotICAgICAgICBjb25zdCBVQ2hhciogaW5w
dXRFbmQgPSBwdHIgLSAxOwotICAgICAgICB3aGlsZSAoaW5wdXRTdGFydCA8IGlucHV0RW5kICYm
IGlzU1ZHU3BhY2UoKmlucHV0RW5kKSkKLSAgICAgICAgICAgIC0taW5wdXRFbmQ7CisgICAgICAg
IHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAg
ICAgICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFj
ZSBiZWZvcmUgYW5kIGFmdGVyIHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdub3JlZC4KKyAgICAgICAg
ICAgIGF1dG8gaW5wdXRTdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKIAotICAgICAg
ICB2YWx1ZXMuYWRkKFN0cmluZyhpbnB1dFN0YXJ0LCBpbnB1dEVuZCAtIGlucHV0U3RhcnQgKyAx
KSk7Ci0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAn
LCcpOwotICAgIH0KKyAgICAgICAgICAgIHNraXBVbnRpbChwYXJzaW5nQnVmZmVyLCAnLCcpOwor
CisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09IGlucHV0U3RhcnQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIHdhbGsgYmFja3dhcmRz
IGZyb20gdGhlIDsgdG8gaWdub3JlIGFueSB3aGl0ZXNwYWNlCisgICAgICAgICAgICBhdXRvIGlu
cHV0RW5kID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gMTsKKyAgICAgICAgICAgIHdoaWxl
IChpbnB1dFN0YXJ0IDwgaW5wdXRFbmQgJiYgaXNTVkdTcGFjZSgqaW5wdXRFbmQpKQorICAgICAg
ICAgICAgICAgIC0taW5wdXRFbmQ7CisKKyAgICAgICAgICAgIHZhbHVlcy5hZGQoU3RyaW5nKGlu
cHV0U3RhcnQsIGlucHV0RW5kIC0gaW5wdXRTdGFydCArIDEpKTsKKyAgICAgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHBhcnNpbmdCdWZmZXIsICcsJyk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICB9KTsKIAotICAgIHJldHVybiB2YWx1ZXM7
CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY29kZVJhbmdlKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBwYXJzZVVuaWNv
ZGVSYW5nZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIp
CiB7Ci0gICAgaWYgKGxlbmd0aCA8IDIgfHwgY2hhcmFjdGVyc1swXSAhPSAnVScgfHwgY2hhcmFj
dGVyc1sxXSAhPSAnKycpCisgICAgdW5zaWduZWQgbGVuZ3RoID0gcGFyc2luZ0J1ZmZlci5sZW5n
dGhSZW1haW5pbmcoKTsKKyAgICBpZiAobGVuZ3RoIDwgMiB8fCBwYXJzaW5nQnVmZmVyWzBdICE9
ICdVJyB8fCBwYXJzaW5nQnVmZmVyWzFdICE9ICcrJykKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICAKKworICAgIHBhcnNpbmdCdWZmZXIuYWR2YW5jZUJ5KDIpOworCiAgICAgLy8g
UGFyc2UgdGhlIHN0YXJ0aW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVmaXgpLgogICAgIHVuc2ln
bmVkIHN0YXJ0UmFuZ2UgPSAwOwogICAgIHVuc2lnbmVkIHN0YXJ0TGVuZ3RoID0gMDsKIAotICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSBjaGFyYWN0ZXJzICsgMjsKLSAgICBjb25zdCBVQ2hhciogZW5k
ID0gY2hhcmFjdGVycyArIGxlbmd0aDsKLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAg
IGlmICghaXNBU0NJSUhleERpZ2l0KCpwdHIpKQorICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhh
c0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdCgq
cGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgKytzdGFydExlbmd0
aDsKICAgICAgICAgaWYgKHN0YXJ0TGVuZ3RoID4gNikKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgICAgIHN0YXJ0UmFuZ2UgPSAoc3RhcnRSYW5nZSA8PCA0KSB8IHRvQVND
SUlIZXhWYWx1ZSgqcHRyKTsKLSAgICAgICAgKytwdHI7CisgICAgICAgIHN0YXJ0UmFuZ2UgPSAo
c3RhcnRSYW5nZSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZSgqcGFyc2luZ0J1ZmZlcik7CisgICAg
ICAgICsrcGFyc2luZ0J1ZmZlcjsKICAgICB9CiAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2Yg
cmFuZ2VzIHNlcGFyYXRlZCBieSAiLSIgc2lnbi4KLSAgICBpZiAoMiArIHN0YXJ0TGVuZ3RoIDwg
bGVuZ3RoICYmICpwdHIgPT0gJy0nKSB7CisgICAgaWYgKDIgKyBzdGFydExlbmd0aCA8IGxlbmd0
aCAmJiAqcGFyc2luZ0J1ZmZlciA9PSAnLScpIHsKICAgICAgICAgaWYgKCFzdGFydExlbmd0aCkK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICAvLyBQ
YXJzZSB0aGUgZW5kaW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVmaXgpLgogICAgICAgICB1bnNp
Z25lZCBlbmRSYW5nZSA9IDA7CiAgICAgICAgIHVuc2lnbmVkIGVuZExlbmd0aCA9IDA7Ci0gICAg
ICAgICsrcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgICAgICBpZiAo
IWlzQVNDSUlIZXhEaWdpdCgqcHRyKSkKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAg
ICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAg
ICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICsrZW5kTGVuZ3RoOwogICAgICAgICAgICAgaWYgKGVu
ZExlbmd0aCA+IDYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAg
ICAgICAgIGVuZFJhbmdlID0gKGVuZFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKCpwdHIp
OwotICAgICAgICAgICAgKytwdHI7CisgICAgICAgICAgICBlbmRSYW5nZSA9IChlbmRSYW5nZSA8
PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZSgqcGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICArK3Bh
cnNpbmdCdWZmZXI7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghZW5kTGVuZ3Ro
KQpAQCAtMzQ1LDE1ICszNDEsMTUgQEAgc3RhdGljIE9wdGlvbmFsPFVuaWNvZGVSYW5nZT4gcGFy
c2VVbmljbwogICAgIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiBhIG51bWJlciB3aXRoIHNv
bWUgb3B0aW9uYWwgdHJhaWxpbmcgcXVlc3Rpb24gbWFya3MuCiAgICAgdW5zaWduZWQgZW5kUmFu
Z2UgPSBzdGFydFJhbmdlOwotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgaWYgKCpw
dHIgIT0gJz8nKQorICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5p
bmcoKSkgeworICAgICAgICBpZiAoKnBhcnNpbmdCdWZmZXIgIT0gJz8nKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAgICAgICAgIGlmIChzdGFydExlbmd0aCA+
IDYpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBzdGFydFJhbmdl
IDw8PSA0OwogICAgICAgICBlbmRSYW5nZSA9IChlbmRSYW5nZSA8PCA0KSB8IDB4RjsKLSAgICAg
ICAgKytwdHI7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKICAgICB9CiAgICAgCiAgICAgaWYg
KCFzdGFydExlbmd0aCkKQEAgLTM2OSw1MyArMzY1LDUxIEBAIE9wdGlvbmFsPHN0ZDo6cGFpcjxV
bmljb2RlUmFuZ2VzLCBIYXNoU2UKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBkZXRl
Y3Rpb24gaXMgbWlzc2luZy4KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3Ry
aW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNv
bnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5s
ZW5ndGgoKTsKLQotICAgIFVuaWNvZGVSYW5nZXMgcmFuZ2VMaXN0OwotICAgIEhhc2hTZXQ8U3Ry
aW5nPiBzdHJpbmdMaXN0OwotCi0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICBjb25z
dCBVQ2hhciogaW5wdXRTdGFydCA9IHB0cjsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAq
cHRyICE9ICcsJykKLSAgICAgICAgICAgICsrcHRyOworICAgIHJldHVybiBXVEY6OnJlYWRDaGFy
YWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gc3RkOjpw
YWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8U3RyaW5nPj4geworICAgICAgICBVbmljb2RlUmFu
Z2VzIHJhbmdlTGlzdDsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IHN0cmluZ0xpc3Q7CiAKLSAg
ICAgICAgaWYgKHB0ciA9PSBpbnB1dFN0YXJ0KQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAg
ICAgICAgYXV0byBpbnB1dFN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwogCi0gICAg
ICAgIC8vIFRyeSB0byBwYXJzZSB1bmljb2RlIHJhbmdlIGZpcnN0Ci0gICAgICAgIGlmIChhdXRv
IHJhbmdlID0gcGFyc2VVbmljb2RlUmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFydCkp
Ci0gICAgICAgICAgICByYW5nZUxpc3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0xpc3QuYWRkKFN0cmluZyhpbnB1dFN0YXJ0LCBwdHIg
LSBpbnB1dFN0YXJ0KSk7Ci0gICAgICAgICsrcHRyOwotICAgIH0KKyAgICAgICAgICAgIHNraXBV
bnRpbChwYXJzaW5nQnVmZmVyLCAnLCcpOworCisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZl
ci5wb3NpdGlvbigpID09IGlucHV0U3RhcnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSB1bmljb2RlIHJhbmdlIGZpcnN0CisgICAgICAgICAg
ICBpZiAoYXV0byByYW5nZSA9IHBhcnNlVW5pY29kZVJhbmdlKFN0cmluZ1BhcnNpbmdCdWZmZXIg
eyBpbnB1dFN0YXJ0LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgfSkpCisgICAgICAgICAgICAg
ICAgcmFuZ2VMaXN0LmFwcGVuZChXVEZNb3ZlKCpyYW5nZSkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHN0cmluZ0xpc3QuYWRkKFN0cmluZyhpbnB1dFN0YXJ0LCBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCkgLSBpbnB1dFN0YXJ0KSk7CisgICAgICAgICAgICArK3BhcnNpbmdC
dWZmZXI7CisgICAgICAgIH0KIAotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYW5nZUxpc3Qs
IHN0cmluZ0xpc3QpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoV1RGTW92ZShyYW5n
ZUxpc3QpLCBXVEZNb3ZlKHN0cmluZ0xpc3QpKTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxGbG9hdFBvaW50PiBnZW5lcmlj
UGFyc2VGbG9hdFBvaW50KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFy
YWN0ZXJUeXBlKiBlbmQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBhdXRvIHggPSBw
YXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHBhcnNp
bmdCdWZmZXIpOwogICAgIGlmICgheCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgYXV0byB5ID0gcGFy
c2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CiAgICAgaWYgKCF5KQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgcmV0dXJuIEZsb2F0UG9pbnQgeyAqeCwgKnkgfTsKIH0KIAotT3B0
aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwg
Y29uc3QgTENoYXIqIGVuZCkKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChT
dHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4g
Z2VuZXJpY1BhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBnZW5lcmlj
UGFyc2VGbG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOwogfQogCi1PcHRpb25hbDxGbG9hdFBvaW50
PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5k
KQorT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KFN0cmluZ1BhcnNpbmdCdWZm
ZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9h
dFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQo
cGFyc2luZ0J1ZmZlcik7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJz
ZXJVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2Vy
VXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXJzZXJVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsOSArMjEsOSBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIlBhcnNpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogdHlwZWRlZiBzdGQ6OnBhaXI8VUNoYXIzMiwgVUNoYXIzMj4gVW5pY29k
ZVJhbmdlOwogdHlwZWRlZiBWZWN0b3I8VW5pY29kZVJhbmdlPiBVbmljb2RlUmFuZ2VzOwpAQCAt
MzgsMjAgKzM4LDIwIEBAIGVudW0gY2xhc3MgU3VmZml4U2tpcHBpbmdQb2xpY3kgewogICAgIFNr
aXAKIH07CiAKLU9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBMQ2hhciomIGN1cnJl
bnQsIGNvbnN0IExDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBp
bmdQb2xpY3k6OlNraXApOwotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFy
KiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZm
aXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7CitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNr
aXBwaW5nUG9saWN5OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihTdHJpbmdQ
YXJzaW5nQnVmZmVyPFVDaGFyPiYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBp
bmdQb2xpY3k6OlNraXApOwogT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IFN0cmlu
Z1ZpZXcmLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lw
KTsKIAogT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTnVtYmVyT3B0aW9u
YWxOdW1iZXIoY29uc3QgU3RyaW5nVmlldyYpOwogCi1PcHRpb25hbDxib29sPiBwYXJzZUFyY0Zs
YWcoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kKTsKLU9wdGlvbmFsPGJv
b2w+IHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQp
OworT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+
Jik7CitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hh
cj4mKTsKIAogT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJpbmdWaWV3
Jik7CiBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJpbmdWaWV3Jik7CiAK
LU9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBMQ2hhciomIGN1cnJl
bnQsIGNvbnN0IExDaGFyKiBlbmQpOwotT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBv
aW50KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCk7CitPcHRpb25hbDxG
bG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsK
K09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJzaW5nQnVmZmVy
PFVDaGFyPiYpOwogCiBPcHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNldDxT
dHJpbmc+Pj4gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyhjb25zdCBTdHJpbmdWaWV3Jik7CiBP
cHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZ1ZpZXcm
KTsKQEAgLTY0LDEzICs2NCwyMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBj
b25zdGV4CiAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwg
YyA9PSAnXHInOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4
cHIgYm9vbCBpc1NWR1NwYWNlT3JDb21tYShDaGFyYWN0ZXJUeXBlIGMpCit7CisgICAgcmV0dXJu
IGlzU1ZHU3BhY2UoYykgfHwgJywnOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBjb25zdGV4cHIgYm9vbCBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY29uc3QgQ2hhcmFjdGVy
VHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewotICAgIHdoaWxlIChwdHIg
PCBlbmQgJiYgaXNTVkdTcGFjZSgqcHRyKSkKLSAgICAgICAgcHRyKys7CisgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzU1ZHU3BhY2U+KHB0ciwgZW5kKTsKICAgICByZXR1cm4gcHRyIDwg
ZW5kOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgYm9v
bCBza2lwT3B0aW9uYWxTVkdTcGFjZXMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiYgY2hhcmFjdGVycykKK3sKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNTVkdTcGFj
ZT4oY2hhcmFjdGVycyk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFp
bmluZygpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIg
Ym9vbCBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGNoYXIgZGVsaW1pdGVyID0gJywnKQog
ewogICAgIGlmIChwdHIgPCBlbmQgJiYgIWlzU1ZHU3BhY2UoKnB0cikgJiYgKnB0ciAhPSBkZWxp
bWl0ZXIpCkBAIC04NCwyOCArOTQsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gY29uc3RleAogICAgIHJldHVybiBwdHIgPCBlbmQ7CiB9CiAKLWNvbnN0ZXhwciBib29sIHNr
aXBTdHJpbmcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFy
KiBuYW1lLCBpbnQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29u
c3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgY2hhcmFjdGVycywgY2hhciBkZWxpbWl0ZXIgPSAnLCcp
CiB7Ci0gICAgaWYgKGVuZCAtIHB0ciA8IGxlbmd0aCkKKyAgICBpZiAoY2hhcmFjdGVycy5oYXND
aGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgIWlzU1ZHU3BhY2UoKmNoYXJhY3RlcnMpICYmICpjaGFy
YWN0ZXJzICE9IGRlbGltaXRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtZW1j
bXAobmFtZSwgcHRyLCBzaXplb2YoVUNoYXIpICogbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHB0ciArPSBsZW5ndGg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRl
PHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PgotaW5saW5lIGJvb2wgc2tpcFN0cmluZyhjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgY2hhciAoJnN0cilbY2hhcmFjdGVy
Q291bnRdKQotewotICAgIGludCBsZW5ndGggPSBjaGFyYWN0ZXJDb3VudCAtIDE7Ci0gICAgaWYg
KGVuZCAtIHB0ciA8IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKHB0cltpXSAhPSBzdHJbaV0p
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjaGFyYWN0ZXJzKSkgeworICAgICAgICBpZiAoY2hhcmFjdGVycy5oYXNDaGFyYWN0ZXJzUmVt
YWluaW5nKCkgJiYgKmNoYXJhY3RlcnMgPT0gZGVsaW1pdGVyKSB7CisgICAgICAgICAgICBjaGFy
YWN0ZXJzKys7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY2hhcmFjdGVycyk7
CisgICAgICAgIH0KICAgICB9Ci0gICAgcHRyICs9IGxlbmd0aDsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gY2hhcmFjdGVycy5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291
cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAko
cmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTksMTEgKzE5LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWcuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwogCiBjbGFzcyBTVkdQYXRoU291cmNlIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdQYXRoU291cmNlKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2Uu
Y3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTVkdQYXRoU3RyaW5nU291cmNlLmgiCiAKLSNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTgzLDE0MCArODMsMTM0IEBAIFNWR1BhdGhTZWdUeXBlIFNWR1BhdGhTdHJpbmdTb3VyY2U6
Om5leHQKICAgICByZXR1cm4gKnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKIH0KIAotdGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBTVkdQYXRoU2VnVHlwZSBwYXJzZVNWR1Nl
Z21lbnRUeXBlSGVscGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50KQordGVtcGxhdGU8
dHlwZW5hbWUgRj4gZGVjbHR5cGUoYXV0bykgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2UoRiYm
IGZ1bmN0b3IpCiB7Ci0gICAgc3dpdGNoICgqKGN1cnJlbnQrKykpIHsKLSAgICBjYXNlICdaJzoK
LSAgICBjYXNlICd6JzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDbG9zZVBhdGg7Ci0gICAgY2Fz
ZSAnTSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOwotICAgIGNhc2UgJ20nOgot
ICAgICAgICByZXR1cm4gUGF0aFNlZ01vdmVUb1JlbDsKLSAgICBjYXNlICdMJzoKLSAgICAgICAg
cmV0dXJuIFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAgY2FzZSAnbCc6Ci0gICAgICAgIHJldHVybiBQ
YXRoU2VnTGluZVRvUmVsOwotICAgIGNhc2UgJ0MnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1
cnZlVG9DdWJpY0FiczsKLSAgICBjYXNlICdjJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2
ZVRvQ3ViaWNSZWw7Ci0gICAgY2FzZSAnUSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVU
b1F1YWRyYXRpY0FiczsKLSAgICBjYXNlICdxJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2
ZVRvUXVhZHJhdGljUmVsOwotICAgIGNhc2UgJ0EnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0Fy
Y0FiczsKLSAgICBjYXNlICdhJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNSZWw7Ci0gICAg
Y2FzZSAnSCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFiczsKLSAg
ICBjYXNlICdoJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOwot
ICAgIGNhc2UgJ1YnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOwot
ICAgIGNhc2UgJ3YnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsUmVsOwot
ICAgIGNhc2UgJ1MnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFi
czsKLSAgICBjYXNlICdzJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9v
dGhSZWw7Ci0gICAgY2FzZSAnVCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRy
YXRpY1Ntb290aEFiczsKLSAgICBjYXNlICd0JzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2
ZVRvUXVhZHJhdGljU21vb3RoUmVsOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQYXRo
U2VnVW5rbm93bjsKKyAgICBpZiAobV9pczhCaXRTb3VyY2UpIHsKKyAgICAgICAgU3RyaW5nUGFy
c2luZ0J1ZmZlcjxMQ2hhcj4gcGFyc2luZ0J1ZmZlciB7IG1fY3VycmVudC5tX2NoYXJhY3Rlcjgs
IG1fZW5kLm1fY2hhcmFjdGVyOCB9OworICAgICAgICBhdXRvIHJlc3VsdCA9IGZ1bmN0b3IocGFy
c2luZ0J1ZmZlcik7CisgICAgICAgIG1fY3VycmVudC5tX2NoYXJhY3RlcjggPSBwYXJzaW5nQnVm
ZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorCisgICAgU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4gcGFyc2luZ0J1ZmZlciB7IG1fY3VycmVudC5tX2NoYXJh
Y3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2IH07CisgICAgYXV0byByZXN1bHQgPSBmdW5jdG9y
KHBhcnNpbmdCdWZmZXIpOworICAgIG1fY3VycmVudC5tX2NoYXJhY3RlcjE2ID0gcGFyc2luZ0J1
ZmZlci5wb3NpdGlvbigpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIE9wdGlvbmFsPFNWR1Bh
dGhTZWdUeXBlPiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKCkKIHsK
LSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRU
eXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBwYXJzZVNWR1Nl
Z21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2KTsKKyAgICByZXR1cm4gcGFy
c2UoW10oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBTVkdQYXRoU2VnVHlwZSB7CisgICAgICAgIHN3
aXRjaCAoKihwYXJzaW5nQnVmZmVyKyspKSB7CisgICAgICAgIGNhc2UgJ1onOgorICAgICAgICBj
YXNlICd6JzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ2xvc2VQYXRoOworICAgICAgICBj
YXNlICdNJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOworICAgICAgICBj
YXNlICdtJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvUmVsOworICAgICAgICBj
YXNlICdMJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvQWJzOworICAgICAgICBj
YXNlICdsJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvUmVsOworICAgICAgICBj
YXNlICdDJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOworICAg
ICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljUmVs
OworICAgICAgICBjYXNlICdRJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1
YWRyYXRpY0FiczsKKyAgICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNl
Z0N1cnZlVG9RdWFkcmF0aWNSZWw7CisgICAgICAgIGNhc2UgJ0EnOgorICAgICAgICAgICAgcmV0
dXJuIFBhdGhTZWdBcmNBYnM7CisgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgcmV0dXJu
IFBhdGhTZWdBcmNSZWw7CisgICAgICAgIGNhc2UgJ0gnOgorICAgICAgICAgICAgcmV0dXJuIFBh
dGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOworICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAg
IHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbDsKKyAgICAgICAgY2FzZSAnVic6Cisg
ICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOworICAgICAgICBjYXNl
ICd2JzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw7CisgICAg
ICAgIGNhc2UgJ1MnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9v
dGhBYnM7CisgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2
ZVRvQ3ViaWNTbW9vdGhSZWw7CisgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAgcmV0dXJu
IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzOworICAgICAgICBjYXNlICd0JzoKKyAg
ICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnVW5rbm93bjsKKyAgICAgICAg
fQorICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAgIGF1dG8gaGVs
cGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9u
YWw8TW92ZVRvU2VnbWVudD4gewotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9h
dFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8gY2hhcmFjdGVy
cykgLT4gT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4geworICAgICAgICBhdXRvIHRhcmdldFBvaW50
ID0gcGFyc2VGbG9hdFBvaW50KGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAoIXRhcmdldFBvaW50
KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCiAgICAgICAgIE1v
dmVUb1NlZ21lbnQgc2VnbWVudDsKICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IFdURk1v
dmUoKnRhcmdldFBvaW50KTsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAg
IGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBP
cHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNl
OjpwYXJzZUxpbmVUb1NlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0
byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TGluZVRvU2VnbWVudD4g
ewotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVu
ZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8gY2hhcmFjdGVycykgLT4gT3B0aW9uYWw8TGlu
ZVRvU2VnbWVudD4geworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50
KGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAoIXRhcmdldFBvaW50KQogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCiAgICAgICAgIExpbmVUb1NlZ21lbnQgc2VnbWVu
dDsKICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IFdURk1vdmUoKnRhcmdldFBvaW50KTsK
ICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmIChtX2lzOEJpdFNvdXJj
ZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5t
X2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYs
IG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291
cmNlOjpMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VM
aW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBh
dXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudD4gewotICAgICAgICBhdXRvIHggPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQp
OworICAgIHJldHVybiBwYXJzZShbXShhdXRvIGNoYXJhY3RlcnMpIC0+IE9wdGlvbmFsPExpbmVU
b0hvcml6b250YWxTZWdtZW50PiB7CisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGNoYXJh
Y3RlcnMpOwogICAgICAgICBpZiAoIXgpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgICAgICAKICAgICAgICAgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQgc2VnbWVudDsKICAg
ICAgICAgc2VnbWVudC54ID0gKng7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0K
LSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50
Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0K
IAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdtZW50PiBTVkdQYXRo
U3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7Ci0gICAgYXV0byBo
ZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRp
b25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB5ID0gcGFyc2VOdW1i
ZXIoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byBjaGFyYWN0ZXJzKSAt
PiBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB5ID0gcGFy
c2VOdW1iZXIoY2hhcmFjdGVycyk7CiAgICAgICAgIGlmICgheSkKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICBMaW5lVG9WZXJ0aWNhbFNlZ21lbnQg
c2VnbWVudDsKICAgICAgICAgc2VnbWVudC55ID0gKnk7CiAgICAgICAgIHJldHVybiBzZWdtZW50
OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxw
ZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1
cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsK
KyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU2VnbWVu
dD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKIHsKLSAg
ICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQp
IC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHsKLSAgICAgICAgYXV0byBwb2ludDEg
PSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0
byBjaGFyYWN0ZXJzKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiB7CisgICAgICAg
IGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAo
IXBvaW50MSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgYXV0
byBwb2ludDIgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byBw
b2ludDIgPSBwYXJzZUZsb2F0UG9pbnQoY2hhcmFjdGVycyk7CiAgICAgICAgIGlmICghcG9pbnQy
KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIHRhcmdl
dFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8gdGFy
Z2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY2hhcmFjdGVycyk7CiAgICAgICAgIGlmICghdGFy
Z2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCkBAIC0yMjUsMjEg
KzIxOSwxNyBAQCBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTZWdtCiAgICAg
ICAgIHNlZ21lbnQucG9pbnQyID0gKnBvaW50MjsKICAgICAgICAgc2VnbWVudC50YXJnZXRQb2lu
dCA9ICp0YXJnZXRQb2ludDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAg
IGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBP
cHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBTVkdQYXRo
U3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQogewotICAgIGF1
dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4g
T3B0aW9uYWw8Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4gewotICAgICAgICBhdXRvIHBvaW50
MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShbXShh
dXRvIGNoYXJhY3RlcnMpIC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IHsK
KyAgICAgICAgYXV0byBwb2ludDIgPSBwYXJzZUZsb2F0UG9pbnQoY2hhcmFjdGVycyk7CiAgICAg
ICAgIGlmICghcG9pbnQyKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
ICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7Cisg
ICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY2hhcmFjdGVycyk7CiAg
ICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCkBAIC0yNDcsMjEgKzIzNywxNyBAQCBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRv
Q3ViaWNTbW9vCiAgICAgICAgIHNlZ21lbnQucG9pbnQyID0gKnBvaW50MjsKICAgICAgICAgc2Vn
bWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7
Ci0gICAgfTsKLQotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBl
cihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVy
biBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwor
ICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgp
CiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0
byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gewotICAgICAgICBh
dXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBw
YXJzZShbXShhdXRvIGNoYXJhY3RlcnMpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdt
ZW50PiB7CisgICAgICAgIGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGNoYXJhY3RlcnMp
OwogICAgICAgICBpZiAoIXBvaW50MSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBl
bmQpOworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGNoYXJhY3Rl
cnMpOwogICAgICAgICBpZiAoIXRhcmdldFBvaW50KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIApAQCAtMjY5LDQ5ICsyNTUsNDEgQEAgT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6
Q3VydmVUb1F1YWRyYXRpYwogICAgICAgICBzZWdtZW50LnBvaW50MSA9ICpwb2ludDE7CiAgICAg
ICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CiAgICAgICAgIHJldHVybiBz
ZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVy
biBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAg
ICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3Rl
cjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byom
IGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Nt
b290aFNlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2lu
dChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShbXShhdXRvIGNoYXJhY3RlcnMpIC0+
IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiB7CisgICAgICAgIGF1dG8g
dGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY2hhcmFjdGVycyk7CiAgICAgICAgIGlmICgh
dGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAg
IEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21lbnQu
dGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAg
IH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9
KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6QXJjVG9TZWdtZW50PiBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShj
b25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxBcmNUb1Nl
Z21lbnQ+IHsKLSAgICAgICAgYXV0byByeCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7Cisg
ICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8gY2hhcmFjdGVycykgLT4gT3B0aW9uYWw8QXJjVG9TZWdt
ZW50PiB7CisgICAgICAgIGF1dG8gcnggPSBwYXJzZU51bWJlcihjaGFyYWN0ZXJzKTsKICAgICAg
ICAgaWYgKCFyeCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1
dG8gcnkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHJ5ID0gcGFy
c2VOdW1iZXIoY2hhcmFjdGVycyk7CiAgICAgICAgIGlmICghcnkpCiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBhdXRvIGFuZ2xlID0gcGFyc2VOdW1iZXIoY3VycmVu
dCwgZW5kKTsKKyAgICAgICAgYXV0byBhbmdsZSA9IHBhcnNlTnVtYmVyKGNoYXJhY3RlcnMpOwog
ICAgICAgICBpZiAoIWFuZ2xlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICAgICAgYXV0byBsYXJnZUFyYyA9IHBhcnNlQXJjRmxhZyhjdXJyZW50LCBlbmQpOworICAgICAg
ICBhdXRvIGxhcmdlQXJjID0gcGFyc2VBcmNGbGFnKGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAo
IWxhcmdlQXJjKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0
byBzd2VlcCA9IHBhcnNlQXJjRmxhZyhjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHN3ZWVw
ID0gcGFyc2VBcmNGbGFnKGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAoIXN3ZWVwKQogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBh
cnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0g
cGFyc2VGbG9hdFBvaW50KGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAoIXRhcmdldFBvaW50KQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMzIzLDExICszMDEsNyBAQCBP
cHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWCiAgICAgICAgIHNlZ21lbnQu
c3dlZXAgPSAqc3dlZXA7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9p
bnQ7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRT
b3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9l
bmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHJl
dmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgcHJpdmF0ZToKICAgICBPcHRpb25h
bDxDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudCgpIGZpbmFsOwogICAgIE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gcGFyc2VBcmNU
b1NlZ21lbnQoKSBmaW5hbDsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEY+IGRlY2x0eXBlKGF1
dG8pIHBhcnNlKEYmJik7CisKICAgICBTdHJpbmcgbV9zdHJpbmc7CiAgICAgYm9vbCBtX2lzOEJp
dFNvdXJjZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTVkdQb2ludExpc3QuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworYm9vbCBTVkdQb2ludExpc3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgY2xlYXJJdGVtcygpOworCisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJh
Y3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKworICAgICAgICBib29sIGRl
bGltUGFyc2VkID0gZmFsc2U7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKKwor
ICAgICAgICAgICAgYXV0byB4UG9zID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAg
ICAgICAgICBpZiAoIXhQb3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBhdXRvIHlQb3MgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lw
cGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICAgICAgaWYgKCF5UG9zKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KHBhcnNpbmdCdWZmZXIpOworCisgICAgICAgICAgICBpZiAoc2tpcEV4YWN0bHkocGFyc2luZ0J1
ZmZlciwgJywnKSkKKyAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7CisKKyAgICAg
ICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKworICAgICAgICAg
ICAgYXBwZW5kKFNWR1BvaW50OjpjcmVhdGUoeyAqeFBvcywgKnlQb3MgfSkpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNsZWFySXRlbXMoKSBvbiBmYWlsdXJl
IGxpa2UgU1ZHVHJhbnNmb3JtTGlzdCBkb2VzPworCisgICAgICAgIHJldHVybiAhZGVsaW1QYXJz
ZWQ7CisgICAgfSk7Cit9CisKK1N0cmluZyBTVkdQb2ludExpc3Q6OnZhbHVlQXNTdHJpbmcoKSBj
b25zdAoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZvciAoY29uc3QgYXV0
byYgcG9pbnQgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQorICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZChw
b2ludC0+eCgpLCAnICcsIHBvaW50LT55KCkpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVy
LnRvU3RyaW5nKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHJl
dmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNTUgKzUwLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTVkdQb2ludExpc3Qob3RoZXIsIGFjY2VzcykpOwogICAgIH0KIAotICAgIGJv
b2wgcGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGNsZWFySXRlbXMo
KTsKLQotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFs
dWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25zdCBVQ2hhciogY3VyID0g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgICAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsg
dmFsdWUubGVuZ3RoKCk7Ci0KLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5k
KTsKLQotICAgICAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlIChj
dXIgPCBlbmQpIHsKLSAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIGF1dG8geFBvcyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAgICAgIGlmICgh
eFBvcykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGF1dG8g
eVBvcyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNr
aXApOwotICAgICAgICAgICAgaWYgKCF5UG9zKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKLQotICAg
ICAgICAgICAgaWYgKGN1ciA8IGVuZCAmJiAqY3VyID09ICcsJykgewotICAgICAgICAgICAgICAg
IGRlbGltUGFyc2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjdXIrKzsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAgICAg
ICAgICAgIGFwcGVuZChTVkdQb2ludDo6Y3JlYXRlKHsgKnhQb3MsICp5UG9zIH0pKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7Ci0gICAgfQotCi0gICAgU3RyaW5n
IHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgcG9pbnQgOiBtX2l0ZW1z
KSB7Ci0gICAgICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZCgnICcpOwotCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChwb2ludC0+
eCgpLCAnICcsIHBvaW50LT55KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKLSAgICB9CisgICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVl
KTsKKyAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZS5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYsNyArMzcsNyBAQCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlCiB7CiB9CiAKLVNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCitTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZShjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSkKIHsKICAgICBwYXJzZSh2YWx1ZSk7
CiB9CkBAIC01OSwxOSArNjAsMzAgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpbwogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlOjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQorYm9vbCBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWU6OnBhcnNlKGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKQogewotICAgIGF1dG8g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
OwotICAgIHBhcnNlSW50ZXJuYWwoYmVnaW4sIGJlZ2luICsgdmFsdWUubGVuZ3RoKCksIHRydWUp
OworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1
dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICByZXR1cm4gcGFyc2VJbnRlcm5hbChwYXJzaW5n
QnVmZmVyLCB0cnVlKTsKKyAgICB9KTsKIH0KIAotYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWU6OnBhcnNlKGNvbnN0IFVDaGFyKiYgY3VyclBhcmFtLCBjb25zdCBVQ2hhciogZW5kLCBi
b29sIHZhbGlkYXRlKQorYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlKFN0
cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyLCBib29sIHZhbGlkYXRlKQog
ewotICAgIHJldHVybiBwYXJzZUludGVybmFsKGN1cnJQYXJhbSwgZW5kLCB2YWxpZGF0ZSk7Cisg
ICAgcmV0dXJuIHBhcnNlSW50ZXJuYWwocGFyc2luZ0J1ZmZlciwgdmFsaWRhdGUpOwogfQogCi1i
b29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJbnRlcm5hbChjb25zdCBVQ2hh
ciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKK2Jvb2wgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFy
PiYgcGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKK3sKKyAgICByZXR1cm4gcGFyc2VJbnRl
cm5hbChwYXJzaW5nQnVmZmVyLCB2YWxpZGF0ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIGRlZmVyRGVzY1tdID0gIHsnZCcs
ICdlJywgJ2YnLCAnZScsICdyJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBj
b25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBub25lRGVzY1tdID0gIHsnbicsICdvJywgJ24nLCAnZSd9
OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5
cGUgbWVldERlc2NbXSA9ICB7J20nLCAnZScsICdlJywgJ3QnfTsKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHNsaWNlRGVzY1tdID0gIHsn
cycsICdsJywgJ2knLCAnYycsICdlJ307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Citib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJbnRlcm5hbChTdHJp
bmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyLCBib29sIHZhbGlk
YXRlKQogewogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlIGFsaWduID0gU1ZHX1BSRVNF
UlZFQVNQRUNUUkFUSU9fWE1JRFlNSUQ7CiAgICAgU1ZHTWVldE9yU2xpY2VUeXBlIG1lZXRPclNs
aWNlID0gU1ZHX01FRVRPUlNMSUNFX01FRVQ7CkBAIC03OSwxMDAgKzkxLDEwMCBAQCBib29sIFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJCiAgICAgbV9hbGlnbiA9IGFsaWduOwog
ICAgIG1fbWVldE9yU2xpY2UgPSBtZWV0T3JTbGljZTsKIAotICAgIGlmICghc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKGN1cnJQYXJhbSwgZW5kKSkKKyAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNl
cyhwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCpjdXJy
UGFyYW0gPT0gJ2QnKSB7Ci0gICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwg
ImRlZmVyIikpIHsKKyAgICBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ2QnKSB7CisgICAgICAgIGlm
ICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIGRlZmVyRGVzYzxDaGFyYWN0
ZXJUeXBlPikpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJzZSBleGNl
cHQgZm9yICpkZWZlciogdmFsdWUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBGSVhNRTogV2UganVzdCBpZ25vcmUgdGhlICJkZWZlciIgaGVy
ZS4KLSAgICAgICAgaWYgKGN1cnJQYXJhbSA9PSBlbmQpCisgICAgICAgIGlmIChwYXJzaW5nQnVm
ZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAoIXNr
aXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCkpCisgICAgICAgIGlmICghc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIGlmICgqY3VyclBhcmFtID09ICduJykgewotICAgICAgICBpZiAoIXNr
aXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJub25lIikpIHsKKyAgICBpZiAoKnBhcnNpbmdCdWZm
ZXIgPT0gJ24nKSB7CisgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdC
dWZmZXIsIG5vbmVEZXNjPENoYXJhY3RlclR5cGU+KSkgewogICAgICAgICAgICAgTE9HX0VSUk9S
KCJTa2lwcGVkIHRvIHBhcnNlIGV4Y2VwdCBmb3IgKm5vbmUqIHZhbHVlLiIpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fTk9ORTsKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1cnJQYXJh
bSwgZW5kKTsKLSAgICB9IGVsc2UgaWYgKCpjdXJyUGFyYW0gPT0gJ3gnKSB7Ci0gICAgICAgIGlm
ICgoZW5kIC0gY3VyclBhcmFtKSA8IDgpCisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhw
YXJzaW5nQnVmZmVyKTsKKyAgICB9IGVsc2UgaWYgKCpwYXJzaW5nQnVmZmVyID09ICd4Jykgewor
ICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA8IDgpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjdXJyUGFyYW1bMV0gIT0gJ00nIHx8IGN1
cnJQYXJhbVs0XSAhPSAnWScgfHwgY3VyclBhcmFtWzVdICE9ICdNJykKKyAgICAgICAgaWYgKHBh
cnNpbmdCdWZmZXJbMV0gIT0gJ00nIHx8IHBhcnNpbmdCdWZmZXJbNF0gIT0gJ1knIHx8IHBhcnNp
bmdCdWZmZXJbNV0gIT0gJ00nKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoY3VyclBhcmFtWzJdID09ICdpJykgewotICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVszXSA9
PSAnbicpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdpJykgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzddID09ICduJykKKyAgICAgICAgaWYgKHBh
cnNpbmdCdWZmZXJbMl0gPT0gJ2knKSB7CisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlclsz
XSA9PSAnbicpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnaScp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbN10gPT0gJ24nKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlO
WU1JTjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBhcmFtWzddID09ICdkJykK
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyc2luZ0J1ZmZlcls3XSA9PSAnZCcpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hN
SU5ZTUlEOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bNl0g
PT0gJ2EnICYmIGN1cnJQYXJhbVs3XSA9PSAneCcpCisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChwYXJzaW5nQnVmZmVyWzZdID09ICdhJyAmJiBwYXJzaW5nQnVmZmVyWzddID09ICd4JykKICAg
ICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1B
WDsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJQYXJhbVszXSA9PSAnZCcpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdpJykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoY3VyclBhcmFtWzddID09ICduJykKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2lu
Z0J1ZmZlclszXSA9PSAnZCcpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlcls2
XSA9PSAnaScpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbN10gPT0g
J24nKQogICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RS
QVRJT19YTUlEWU1JTjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBhcmFtWzdd
ID09ICdkJykKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyc2luZ0J1ZmZlcls3XSA9
PSAnZCcpCiAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVD
VFJBVElPX1hNSURZTUlEOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJy
UGFyYW1bNl0gPT0gJ2EnICYmIGN1cnJQYXJhbVs3XSA9PSAneCcpCisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChwYXJzaW5nQnVmZmVyWzZdID09ICdhJyAmJiBwYXJzaW5nQnVmZmVyWzddID09
ICd4JykKICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJ
T19YTUlEWU1BWDsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bMl0gPT0gJ2EnICYmIGN1cnJQYXJh
bVszXSA9PSAneCcpIHsKLSAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bNl0gPT0gJ2knKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAgIH0gZWxzZSBp
ZiAocGFyc2luZ0J1ZmZlclsyXSA9PSAnYScgJiYgcGFyc2luZ0J1ZmZlclszXSA9PSAneCcpIHsK
KyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzZdID09ICdpJykgeworICAgICAgICAgICAg
ICAgIGlmIChwYXJzaW5nQnVmZmVyWzddID09ICduJykKICAgICAgICAgICAgICAgICAgICAgYWxp
Z24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JTjsKLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChjdXJyUGFyYW1bN10gPT0gJ2QnKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBh
cnNpbmdCdWZmZXJbN10gPT0gJ2QnKQogICAgICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlEOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJy
UGFyYW1bNl0gPT0gJ2EnICYmIGN1cnJQYXJhbVs3XSA9PSAneCcpCisgICAgICAgICAgICB9IGVs
c2UgaWYgKHBhcnNpbmdCdWZmZXJbNl0gPT0gJ2EnICYmIHBhcnNpbmdCdWZmZXJbN10gPT0gJ3gn
KQogICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlN
QVg7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VyclBhcmFt
ICs9IDg7Ci0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCk7Cisg
ICAgICAgIHBhcnNpbmdCdWZmZXIuYWR2YW5jZUJ5KDgpOworICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChjdXJyUGFyYW0gPCBlbmQpIHsKLSAgICAgICAgaWYgKCpjdXJyUGFyYW0g
PT0gJ20nKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJt
ZWV0IikpIHsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkp
IHsKKyAgICAgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdtJykgeworICAgICAgICAgICAgaWYg
KCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgbWVldERlc2M8Q2hhcmFjdGVy
VHlwZT4pKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJTa2lwcGVkIHRvIHBhcnNlIGV4
Y2VwdCBmb3IgKm1lZXQqIG9yICpzbGljZSogdmFsdWUuIik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKGN1cnJQYXJhbSwgZW5kKTsKLSAgICAgICAgfSBlbHNlIGlmICgqY3VyclBhcmFtID09ICdz
JykgewotICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAic2xpY2Ui
KSkgeworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwor
ICAgICAgICB9IGVsc2UgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdzJykgeworICAgICAgICAgICAg
aWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgc2xpY2VEZXNjPENoYXJh
Y3RlclR5cGU+KSkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJz
ZSBleGNlcHQgZm9yICptZWV0KiBvciAqc2xpY2UqIHZhbHVlLiIpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlcyhjdXJyUGFyYW0sIGVuZCk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXMocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgICAgICBpZiAoYWxpZ24gIT0gU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fTk9ORSkKICAgICAgICAgICAgICAgICBtZWV0T3JTbGljZSA9IFNWR19NRUVU
T1JTTElDRV9TTElDRTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChlbmQgIT0gY3VyclBh
cmFtICYmIHZhbGlkYXRlKQorICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpICYmIHZhbGlk
YXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2FsaWduID0gYWxpZ247CkBAIC0z
MjgsNTIgKzM0MCw0NCBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
CiAKIFN0cmluZyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnZhbHVlQXNTdHJpbmcoKSBj
b25zdAogewotICAgIFN0cmluZyBhbGlnblR5cGU7CisgICAgYXV0byBhbGlnblR5cGUgPSBbJl0o
KSB7CisgICAgICAgIHN3aXRjaCAobV9hbGlnbikgeworICAgICAgICBjYXNlIFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX05PTkU6CisgICAgICAgICAgICByZXR1cm4gIm5vbmUiOworICAgICAgICBj
YXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlOOgorICAgICAgICAgICAgcmV0dXJu
ICJ4TWluWU1pbiI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlN
SU46CisgICAgICAgICAgICByZXR1cm4gInhNaWRZTWluIjsKKyAgICAgICAgY2FzZSBTVkdfUFJF
U0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JTjoKKyAgICAgICAgICAgIHJldHVybiAieE1heFlNaW4i
OworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlEOgorICAgICAg
ICAgICAgcmV0dXJuICJ4TWluWU1pZCI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNU
UkFUSU9fWE1JRFlNSUQ6CisgICAgICAgICAgICByZXR1cm4gInhNaWRZTWlkIjsKKyAgICAgICAg
Y2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRDoKKyAgICAgICAgICAgIHJldHVy
biAieE1heFlNaWQiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5Z
TUFYOgorICAgICAgICAgICAgcmV0dXJuICJ4TWluWU1heCI7CisgICAgICAgIGNhc2UgU1ZHX1BS
RVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNQVg6CisgICAgICAgICAgICByZXR1cm4gInhNaWRZTWF4
IjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1BWDoKKyAgICAg
ICAgICAgIHJldHVybiAieE1heFlNYXgiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVD
VFJBVElPX1VOS05PV046CisgICAgICAgICAgICByZXR1cm4gInVua25vd24iOworICAgICAgICB9
OwogCi0gICAgc3dpdGNoIChtX2FsaWduKSB7Ci0gICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RS
QVRJT19OT05FOgotICAgICAgICBhbGlnblR5cGUgPSAibm9uZSI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSU46Ci0gICAgICAgIGFsaWdu
VHlwZSA9ICJ4TWluWU1pbiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1JRFlNSU46Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlkWU1pbiI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU46
Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWF4WU1pbiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSUQ6Ci0gICAgICAgIGFsaWduVHlwZSA9
ICJ4TWluWU1pZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNU
UkFUSU9fWE1JRFlNSUQ6Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlkWU1pZCI7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSUQ6Ci0gICAg
ICAgIGFsaWduVHlwZSA9ICJ4TWF4WU1pZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZH
X1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNQVg6Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlu
WU1heCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9f
WE1JRFlNQVg6Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlkWU1heCI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNQVg6Ci0gICAgICAgIGFs
aWduVHlwZSA9ICJ4TWF4WU1heCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNF
UlZFQVNQRUNUUkFUSU9fVU5LTk9XTjoKLSAgICAgICAgYWxpZ25UeXBlID0gInVua25vd24iOwot
ICAgICAgICBicmVhazsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiAidW5rbm93biI7CiAgICAgfTsKIAogICAgIHN3aXRjaCAobV9tZWV0T3JTbGljZSkgewog
ICAgIGRlZmF1bHQ6CiAgICAgY2FzZSBTVkdfTUVFVE9SU0xJQ0VfVU5LTk9XTjoKLSAgICAgICAg
cmV0dXJuIGFsaWduVHlwZTsKKyAgICAgICAgcmV0dXJuIGFsaWduVHlwZSgpOwogICAgIGNhc2Ug
U1ZHX01FRVRPUlNMSUNFX01FRVQ6Ci0gICAgICAgIHJldHVybiBhbGlnblR5cGUgKyAiIG1lZXQi
OworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhhbGlnblR5cGUoKSwgIiBtZWV0Iik7CiAgICAg
Y2FzZSBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0U6Ci0gICAgICAgIHJldHVybiBhbGlnblR5cGUgKyAi
IHNsaWNlIjsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYWxpZ25UeXBlKCksICIgc2xpY2Ui
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZSgpOwotICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShjb25zdCBTdHJpbmcmKTsK
KyAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nVmlldyYpOwogCiAg
ICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0QWxpZ24odW5zaWduZWQgc2hvcnQpOwogICAgIHVuc2ln
bmVkIHNob3J0IGFsaWduKCkgY29uc3QgeyByZXR1cm4gbV9hbGlnbjsgfQpAQCAtNjQsOCArNjQs
OSBAQCBwdWJsaWM6CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKGZsb2F0IGxvZ2ljYWxY
LCBmbG9hdCBsb2dpY2FsWSwgZmxvYXQgbG9naWNhbFdpZHRoLCBmbG9hdCBsb2dpY2FsSGVpZ2h0
LCBmbG9hdCBwaHlzaWNhbFdpZHRoLCBmbG9hdCBwaHlzaWNhbEhlaWdodCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHBhcnNlKGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgcGFyc2UoY29uc3QgVUNoYXIq
JiBjdXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpOworICAgIGJvb2wg
cGFyc2UoY29uc3QgU3RyaW5nVmlldyYpOworICAgIGJvb2wgcGFyc2UoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxMQ2hhcj4mLCBib29sIHZhbGlkYXRlKTsKKyAgICBib29sIHBhcnNlKFN0cmluZ1BhcnNp
bmdCdWZmZXI8VUNoYXI+JiwgYm9vbCB2YWxpZGF0ZSk7CiAKICAgICBTdHJpbmcgdmFsdWVBc1N0
cmluZygpIGNvbnN0OwogCkBAIC03Myw3ICs3NCw4IEBAIHByaXZhdGU6CiAgICAgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1R5cGUgbV9hbGlnbjsKICAgICBTVkdNZWV0T3JTbGljZVR5cGUgbV9tZWV0
T3JTbGljZTsKIAotICAgIGJvb2wgcGFyc2VJbnRlcm5hbChjb25zdCBVQ2hhciomIGN1cnJQYXJh
bSwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSk7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBib29sIHBhcnNlSW50ZXJuYWwoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiYsIGJvb2wgdmFsaWRhdGUpOwogfTsKIAogdGVtcGxhdGU8PiBz
dHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNW
R1N0cmluZ0xpc3QuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworYm9vbCBTVkdTdHJpbmdMaXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIGRhdGEsIFVD
aGFyIGRlbGltaXRlcikKK3sKKyAgICBjbGVhckl0ZW1zKCk7CisKKyAgICBhdXRvIGlzU1ZHU3Bh
Y2VPckRlbGltaXRlciA9IFtkZWxpbWl0ZXJdKGF1dG8gYykgeworICAgICAgICByZXR1cm4gaXNT
VkdTcGFjZShjKSB8fCBjID09IGRlbGltaXRlcjsKKyAgICB9OworCisgICAgcmV0dXJuIFdURjo6
cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKGRhdGEsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsK
KyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7
CisgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgYSBuaWNlIGltcHJv
dmVtZW50IHRvIGFkZCBhIHZhcmlhbnQgb2Ygc2tpcFVudGlsIHdoaWNoIHdvcmtlZAorICAgICAg
ICAgICAgLy8gd2l0aCBsYW1iZGEgcHJlZGljYXRlcy4KKyAgICAgICAgICAgIHdoaWxlIChwYXJz
aW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhaXNTVkdTcGFjZU9yRGVsaW1p
dGVyKCpwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgICAgICAgICArK3BhcnNpbmdCdWZmZXI7CisK
KyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gc3RhcnQpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtX2l0ZW1zLmFwcGVuZChTdHJpbmcoc3Rh
cnQsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIHN0YXJ0KSk7CisgICAgICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyLCBkZWxpbWl0ZXIpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNsZWFySXRlbXMoKSBv
biBmYWlsdXJlIGxpa2UgU1ZHVHJhbnNmb3JtTGlzdCBkb2VzPworCisgICAgICAgIHJldHVybiBw
YXJzaW5nQnVmZmVyLmF0RW5kKCk7CisgICAgfSk7Cit9CisKK1N0cmluZyBTVkdTdHJpbmdMaXN0
Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6IG1faXRlbXMpIHsKKyAgICAgICAgaWYgKGJ1
aWxkZXIubGVuZ3RoKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworCisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIu
dG9TdHJpbmcoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlzdC5oCShy
ZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwzOSArNTEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2l0
ZW1zLmFwcGVuZChlbXB0eVN0cmluZygpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlKGNvbnN0
IFN0cmluZyYgZGF0YSwgVUNoYXIgZGVsaW1pdGVyKQotICAgIHsKLSAgICAgICAgY2xlYXJJdGVt
cygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhk
YXRhKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIHB0ciA9
IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciAr
IGRhdGEubGVuZ3RoKCk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgICAg
IGNvbnN0IFVDaGFyKiBzdGFydCA9IHB0cjsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQg
JiYgKnB0ciAhPSBkZWxpbWl0ZXIgJiYgIWlzU1ZHU3BhY2UoKnB0cikpCi0gICAgICAgICAgICAg
ICAgcHRyKys7Ci0gICAgICAgICAgICBpZiAocHRyID09IHN0YXJ0KQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5nKHN0YXJ0LCBwdHIgLSBz
dGFydCkpOwotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRy
LCBlbmQsIGRlbGltaXRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcHRyID09IGVu
ZDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0KLSAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBzdHJpbmcgOiBtX2l0ZW1zKSB7Ci0gICAgICAgICAgICBpZiAoYnVpbGRlci5sZW5n
dGgoKSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotCi0gICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChzdHJpbmcpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGJ1
aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9CisgICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIGRh
dGEsIFVDaGFyIGRlbGltaXRlcik7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBv
dmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR1RyYW5z
Zm9ybUxpc3QuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRXhjZXB0aW9uT3I8UmVmUHRyPFNWR1RyYW5zZm9ybT4+IFNWR1RyYW5zZm9ybUxpc3Q6
OmNvbnNvbGlkYXRlKCkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGNhbkFsdGVyTGlzdCgpOworICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFz
ZUV4Y2VwdGlvbigpOworICAgIEFTU0VSVChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwor
CisgICAgLy8gU3BlYzogSWYgdGhlIGxpc3Qgd2FzIGVtcHR5LCB0aGVuIGEgdmFsdWUgb2YgbnVs
bCBpcyByZXR1cm5lZC4KKyAgICBpZiAobV9pdGVtcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgaWYgKG1faXRlbXMuc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVy
biBtYWtlUmVmUHRyKGF0KDApLmdldCgpKTsKKworICAgIGF1dG8gbmV3SXRlbSA9IFNWR1RyYW5z
Zm9ybTo6Y3JlYXRlKGNvbmNhdGVuYXRlKCkpOworICAgIGNsZWFySXRlbXMoKTsKKworICAgIGF1
dG8gaXRlbSA9IGFwcGVuZChXVEZNb3ZlKG5ld0l0ZW0pKTsKKyAgICBjb21taXRDaGFuZ2UoKTsK
KyAgICByZXR1cm4gbWFrZVJlZlB0cihpdGVtLmdldCgpKTsKK30KKworQWZmaW5lVHJhbnNmb3Jt
IFNWR1RyYW5zZm9ybUxpc3Q6OmNvbmNhdGVuYXRlKCkgY29uc3QKK3sKKyAgICBBZmZpbmVUcmFu
c2Zvcm0gcmVzdWx0OworICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNmb3JtIDogbV9pdGVtcykK
KyAgICAgICAgcmVzdWx0ICo9IHRyYW5zZm9ybS0+bWF0cml4KCktPnZhbHVlKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBT
VkdUcmFuc2Zvcm1MaXN0OjpwYXJzZUdlbmVyaWMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0
ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7
CisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7Cisg
ICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3Jt
VHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShwYXJzaW5nQnVmZmVy
KTsKKyAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1UeXBlKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3JtVmFsdWUgPSBTVkdUcmFuc2Zv
cm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKCpwYXJzZWRUcmFuc2Zvcm1UeXBlLCBwYXJzaW5n
QnVmZmVyKTsKKyAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBhcHBlbmQoU1ZHVHJhbnNmb3JtOjpjcmVhdGUoKnBh
cnNlZFRyYW5zZm9ybVZhbHVlKSk7CisKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBh
cnNpbmdCdWZmZXIpOworCisgICAgICAgIGlmIChza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAn
LCcpKQorICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOworCisgICAgICAgIHNraXBPcHRp
b25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKyAgICB9CisgICAgcmV0dXJuICFkZWxpbVBh
cnNlZDsKK30KKwordm9pZCBTVkdUcmFuc2Zvcm1MaXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIGNsZWFySXRlbXMoKTsKKworICAgIGJvb2wgcGFyc2luZ1N1Y2NlZWRlZCA9
IFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBwYXJzaW5nQnVm
ZmVyKSB7CisgICAgICAgIHJldHVybiBwYXJzZUdlbmVyaWMocGFyc2luZ0J1ZmZlcik7CisgICAg
fSk7CisgICAgCisgICAgaWYgKCFwYXJzaW5nU3VjY2VlZGVkKQorICAgICAgICBjbGVhckl0ZW1z
KCk7Cit9CisKK2Jvb2wgU1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNlR2VuZXJpYyhwYXJz
aW5nQnVmZmVyKTsKK30KKworYm9vbCBTVkdUcmFuc2Zvcm1MaXN0OjpwYXJzZShTdHJpbmdQYXJz
aW5nQnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICByZXR1cm4gcGFyc2VHZW5l
cmljKHBhcnNpbmdCdWZmZXIpOworfQorCitTdHJpbmcgU1ZHVHJhbnNmb3JtTGlzdDo6dmFsdWVB
c1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAo
Y29uc3QgYXV0byYgdHJhbnNmcm9tIDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVpbGRlci5s
ZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQodHJhbnNmcm9tLT52YWx1ZSgpLnZhbHVlQXNTdHJpbmcoKSk7CisgICAgfQor
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30KKwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4NiArNTYs
MTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3ZnVHJhbnNmb3JtOwogICAgIH0KIAotICAg
IEV4Y2VwdGlvbk9yPFJlZlB0cjxTVkdUcmFuc2Zvcm0+PiBjb25zb2xpZGF0ZSgpCi0gICAgewot
ICAgICAgICBhdXRvIHJlc3VsdCA9IGNhbkFsdGVyTGlzdCgpOwotICAgICAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCk7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwotCi0g
ICAgICAgIC8vIFNwZWM6IElmIHRoZSBsaXN0IHdhcyBlbXB0eSwgdGhlbiBhIHZhbHVlIG9mIG51
bGwgaXMgcmV0dXJuZWQuCi0gICAgICAgIGlmIChtX2l0ZW1zLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGlmIChtX2l0ZW1zLnNpemUoKSA9PSAxKQot
ICAgICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoYXQoMCkuZ2V0KCkpOwotCi0gICAgICAgIGF1
dG8gbmV3SXRlbSA9IFNWR1RyYW5zZm9ybTo6Y3JlYXRlKGNvbmNhdGVuYXRlKCkpOwotICAgICAg
ICBjbGVhckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0byBpdGVtID0gYXBwZW5kKFdURk1vdmUobmV3
SXRlbSkpOwotICAgICAgICBjb21taXRDaGFuZ2UoKTsKLSAgICAgICAgcmV0dXJuIG1ha2VSZWZQ
dHIoaXRlbS5nZXQoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsK
LSAgICAgICAgaWYgKCFwYXJzZShzdGFydCwgc3RhcnQgKyB2YWx1ZS5sZW5ndGgoKSkpCi0gICAg
ICAgICAgICBjbGVhckl0ZW1zKCk7Ci0gICAgfQotCi0gICAgQWZmaW5lVHJhbnNmb3JtIGNvbmNh
dGVuYXRlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSByZXN1bHQ7Ci0g
ICAgICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNmb3JtIDogbV9pdGVtcykKLSAgICAgICAgICAg
IHJlc3VsdCAqPSB0cmFuc2Zvcm0tPm1hdHJpeCgpLT52YWx1ZSgpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLQotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJp
ZGUKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgZm9yIChj
b25zdCBhdXRvJiB0cmFuc2Zyb20gOiBtX2l0ZW1zKSB7Ci0gICAgICAgICAgICBpZiAoYnVpbGRl
ci5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotCi0gICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCh0cmFuc2Zyb20tPnZhbHVlKCkudmFsdWVBc1N0cmluZygp
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0K
KyAgICBFeGNlcHRpb25PcjxSZWZQdHI8U1ZHVHJhbnNmb3JtPj4gY29uc29saWRhdGUoKTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gY29uY2F0ZW5hdGUoKSBjb25zdDsKKyAgICB2b2lkIHBhcnNlKGNv
bnN0IFN0cmluZyYpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBwYXJzZShjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBV
Q2hhciogZW5kKQotICAgIHsKLSAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAg
ICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLSAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFs
c2U7Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gdHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNl
QW5kU2tpcFR5cGUoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoIXR5cGUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9y
bVZhbHVlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSgqdHlwZSwgc3Rh
cnQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlZFRyYW5zZm9ybVZhbHVlKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgYXBwZW5kKFNWR1RyYW5zZm9y
bTo6Y3JlYXRlKCpwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkpOwotCi0gICAgICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoc3RhcnQgPCBlbmQg
JiYgKnN0YXJ0ID09ICcsJykgewotICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICArK3N0YXJ0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuICFkZWxpbVBhcnNlZDsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gYm9vbCBwYXJzZUdlbmVyaWMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiYpOworICAgIGJvb2wgcGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsKKyAgICBi
b29sIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3Bw
CShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDg1ICsyNyw4NiBAQAogI2luY2x1ZGUgIlNWR0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxp
dGllcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3Rh
dGljIGludCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdCBVQ2hhciomIHB0ciwgY29uc3Qg
VUNoYXIqIGVuZCwgZmxvYXQqIHZhbHVlcywgaW50IHJlcXVpcmVkLCBpbnQgb3B0aW9uYWwpCitT
VkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpID0gZGVmYXVsdDsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGludCBwYXJzZVRyYW5zZm9ybVBhcmFt
TGlzdChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyLCBm
bG9hdCogdmFsdWVzLCBpbnQgcmVxdWlyZWQsIGludCBvcHRpb25hbCkKIHsKICAgICBpbnQgb3B0
aW9uYWxQYXJhbXMgPSAwLCByZXF1aXJlZFBhcmFtcyA9IDA7CiAgICAgCi0gICAgaWYgKCFza2lw
T3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpIHx8ICpwdHIgIT0gJygnKQorICAgIGlmICghc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpIHx8ICpwYXJzaW5nQnVmZmVyICE9ICco
JykKICAgICAgICAgcmV0dXJuIC0xOwogICAgIAotICAgIHB0cisrOworICAgICsrcGFyc2luZ0J1
ZmZlcjsKICAgIAotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7CisgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwogCiAgICAgd2hpbGUgKHJlcXVpcmVk
UGFyYW1zIDwgcmVxdWlyZWQpIHsKLSAgICAgICAgaWYgKHB0ciA+PSBlbmQpCisgICAgICAgIGlm
IChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAg
IGF1dG8gcGFyc2VkTnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBwaW5n
UG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGF1dG8gcGFyc2VkTnVtYmVyID0gcGFyc2VOdW1i
ZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKICAgICAg
ICAgaWYgKCFwYXJzZWROdW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHZh
bHVlc1tyZXF1aXJlZFBhcmFtc10gPSAqcGFyc2VkTnVtYmVyOwogICAgICAgICByZXF1aXJlZFBh
cmFtcysrOwogICAgICAgICBpZiAocmVxdWlyZWRQYXJhbXMgPCByZXF1aXJlZCkKLSAgICAgICAg
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICAgICAg
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHBhcnNpbmdCdWZmZXIpOwogICAg
IH0KLSAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCkpCisgICAgaWYgKCFz
a2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcikpCiAgICAgICAgIHJldHVybiAtMTsK
ICAgICAKLSAgICBib29sIGRlbGltUGFyc2VkID0gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxp
bWl0ZXIocHRyLCBlbmQpOworICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyKTsKIAotICAgIGlmIChwdHIgPj0gZW5kKQor
ICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiAtMTsKICAgICAK
LSAgICBpZiAoKnB0ciA9PSAnKScpIHsgLy8gc2tpcCBvcHRpb25hbHMKLSAgICAgICAgcHRyKys7
CisgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICcpJykgeworICAgICAgICAvLyBza2lwIG9wdGlv
bmFscworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgICAgIGlmIChkZWxpbVBhcnNlZCkK
ICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9IGVsc2UgewogICAgICAgICB3aGlsZSAob3B0
aW9uYWxQYXJhbXMgPCBvcHRpb25hbCkgewotICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCisg
ICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiAtMTsKLSAgICAgICAgICAgIGF1dG8gcGFyc2VkTnVtYmVyID0gcGFyc2VOdW1iZXIocHRy
LCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgICAgICBhdXRv
IHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5n
UG9saWN5OjpEb250U2tpcCk7CiAgICAgICAgICAgICBpZiAoIXBhcnNlZE51bWJlcikKICAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB2YWx1ZXNbcmVxdWlyZWRQYXJhbXMg
KyBvcHRpb25hbFBhcmFtc10gPSAqcGFyc2VkTnVtYmVyOwogICAgICAgICAgICAgb3B0aW9uYWxQ
YXJhbXMrKzsKICAgICAgICAgICAgIGlmIChvcHRpb25hbFBhcmFtcyA8IG9wdGlvbmFsKQotICAg
ICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsK
KyAgICAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5n
QnVmZmVyKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxT
VkdTcGFjZXMocHRyLCBlbmQpKQorICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhw
YXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgCi0gICAgICAg
IGRlbGltUGFyc2VkID0gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQp
OworICAgICAgICBkZWxpbVBhcnNlZCA9IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVy
KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICAKLSAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgKnB0
ciAhPSAnKScgfHwgZGVsaW1QYXJzZWQpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5k
KCkgfHwgKnBhcnNpbmdCdWZmZXIgIT0gJyknIHx8IGRlbGltUGFyc2VkKQogICAgICAgICAgICAg
cmV0dXJuIC0xOwotICAgICAgICBwdHIrKzsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAg
IH0KIAogICAgIHJldHVybiByZXF1aXJlZFBhcmFtcyArIG9wdGlvbmFsUGFyYW1zOwogfQogCiAv
LyBUaGVzZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggZW51bSBTVkdUcmFuc2Zvcm1UeXBl
Ci1zdGF0aWMgY29uc3QgaW50IHJlcXVpcmVkVmFsdWVzRm9yVHlwZVtdID0gIHswLCA2LCAxLCAx
LCAxLCAxLCAxfTsKLXN0YXRpYyBjb25zdCBpbnQgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW10gPSAg
ezAsIDAsIDEsIDEsIDIsIDAsIDB9OworY29uc3RleHByIGludCByZXF1aXJlZFZhbHVlc0ZvclR5
cGVbXSA9ICB7MCwgNiwgMSwgMSwgMSwgMSwgMX07Citjb25zdGV4cHIgaW50IG9wdGlvbmFsVmFs
dWVzRm9yVHlwZVtdID0gIHswLCAwLCAxLCAxLCAyLCAwLCAwfTsKIAotLy8gVGhpcyBkZXN0cnVj
dG9yIGlzIG5lZWRlZCBpbiBvcmRlciB0byBsaW5rIGNvcnJlY3RseSB3aXRoIEludGVsIElDQy4K
LVNWR1RyYW5zZm9ybWFibGU6On5TVkdUcmFuc2Zvcm1hYmxlKCkgPSBkZWZhdWx0OwotCi1PcHRp
b25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1W
YWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlLCBjb25zdCBVQ2hh
ciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1
ZUdlbmVyaWMoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgU3RyaW5n
UGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKIHsKICAgICBpZiAo
dHlwZSA9PSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaW50IHZhbHVlQ291bnQgPSAwOwogICAgIGZs
b2F0IHZhbHVlc1tdID0gezAsIDAsIDAsIDAsIDAsIDB9OwotICAgIGlmICgodmFsdWVDb3VudCA9
IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KHB0ciwgZW5kLCB2YWx1ZXMsIHJlcXVpcmVkVmFsdWVz
Rm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW3R5cGVdKSkgPCAwKQorICAgIGlm
ICgodmFsdWVDb3VudCA9IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KHBhcnNpbmdCdWZmZXIsIHZh
bHVlcywgcmVxdWlyZWRWYWx1ZXNGb3JUeXBlW3R5cGVdLCBvcHRpb25hbFZhbHVlc0ZvclR5cGVb
dHlwZV0pKSA8IDApCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBTVkdUcmFu
c2Zvcm1WYWx1ZSB0cmFuc2Zvcm07CkBAIC0xNDUsNDIgKzE0Niw2MyBAQCBPcHRpb25hbDxTVkdU
cmFuc2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3JtCiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAot
c3RhdGljIGNvbnN0IFVDaGFyIHNrZXdYRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycsICdY
J307Ci1zdGF0aWMgY29uc3QgVUNoYXIgc2tld1lEZXNjW10gPSAgeydzJywgJ2snLCAnZScsICd3
JywgJ1knfTsKLXN0YXRpYyBjb25zdCBVQ2hhciBzY2FsZURlc2NbXSA9ICB7J3MnLCAnYycsICdh
JywgJ2wnLCAnZSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zbGF0ZURlc2NbXSA9ICB7J3Qn
LCAncicsICdhJywgJ24nLCAncycsICdsJywgJ2EnLCAndCcsICdlJ307Ci1zdGF0aWMgY29uc3Qg
VUNoYXIgcm90YXRlRGVzY1tdID0gIHsncicsICdvJywgJ3QnLCAnYScsICd0JywgJ2UnfTsKLXN0
YXRpYyBjb25zdCBVQ2hhciBtYXRyaXhEZXNjW10gPSAgeydtJywgJ2EnLCAndCcsICdyJywgJ2kn
LCAneCd9OworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBh
cnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlw
ZSwgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0
dXJuIHBhcnNlVHJhbnNmb3JtVmFsdWVHZW5lcmljKHR5cGUsIHBhcnNpbmdCdWZmZXIpOworfQor
CitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFu
c2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlLCBTdHJp
bmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICByZXR1cm4gcGFy
c2VUcmFuc2Zvcm1WYWx1ZUdlbmVyaWModHlwZSwgcGFyc2luZ0J1ZmZlcik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHNrZXdY
RGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycsICdYJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBza2V3WURlc2NbXSA9ICB7J3Mn
LCAnaycsICdlJywgJ3cnLCAnWSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Y29uc3RleHByIENoYXJhY3RlclR5cGUgc2NhbGVEZXNjW10gPSAgeydzJywgJ2MnLCAnYScsICds
JywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFy
YWN0ZXJUeXBlIHRyYW5zbGF0ZURlc2NbXSA9ICB7J3QnLCAncicsICdhJywgJ24nLCAncycsICds
JywgJ2EnLCAndCcsICdlJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25z
dGV4cHIgQ2hhcmFjdGVyVHlwZSByb3RhdGVEZXNjW10gPSAgeydyJywgJ28nLCAndCcsICdhJywg
J3QnLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENo
YXJhY3RlclR5cGUgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3QnLCAncicsICdpJywgJ3gn
fTsKIAotT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IFNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUoY29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3Jt
LCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3Rh
dGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZVRy
YW5zZm9ybVR5cGVHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBh
cnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKGN1cnJUcmFuc2Zvcm0gPj0gZW5kKQorICAgIGlmIChw
YXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBpZiAoKmN1cnJUcmFuc2Zvcm0gPT0gJ3MnKSB7Ci0gICAgICAgIGlmIChza2lwU3RyaW5nKGN1
cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1hEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdYRGVzYykp
KQorICAgIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAncycpIHsKKyAgICAgICAgaWYgKHNraXBDaGFy
YWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBza2V3WERlc2M8Q2hhcmFjdGVyVHlwZT4pKQog
ICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdY
OwotICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1lE
ZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdZRGVzYykpKQorICAgICAgICBpZiAoc2tpcENoYXJh
Y3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHNrZXdZRGVzYzxDaGFyYWN0ZXJUeXBlPikpCiAg
ICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0tFV1k7
Ci0gICAgICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBzY2FsZURl
c2MsIFdURl9BUlJBWV9MRU5HVEgoc2NhbGVEZXNjKSkpCisgICAgICAgIGlmIChza2lwQ2hhcmFj
dGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgc2NhbGVEZXNjPENoYXJhY3RlclR5cGU+KSkKICAg
ICAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TQ0FMRTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9IGVs
c2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCB0cmFuc2xhdGVEZXNjLCBXVEZf
QVJSQVlfTEVOR1RIKHRyYW5zbGF0ZURlc2MpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICB9CisKKyAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIs
IHRyYW5zbGF0ZURlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICByZXR1cm4gU1ZHVHJhbnNm
b3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwotICAgIGVsc2UgaWYgKHNraXBTdHJp
bmcoY3VyclRyYW5zZm9ybSwgZW5kLCByb3RhdGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHJvdGF0
ZURlc2MpKSkKKyAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHJv
dGF0ZURlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFs
dWU6OlNWR19UUkFOU0ZPUk1fUk9UQVRFOwotICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRy
YW5zZm9ybSwgZW5kLCBtYXRyaXhEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKG1hdHJpeERlc2MpKSkK
KyAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIG1hdHJpeERlc2M8
Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19U
UkFOU0ZPUk1fTUFUUklYOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFu
c2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKK09wdGlvbmFsPFNWR1RyYW5zZm9y
bVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9y
bVR5cGUoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQoreworICAgIHJldHVybiBXVEY6OnJlYWRD
aGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAg
ICAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlKHBhcnNpbmdCdWZmZXIpOworICAgIH0pOwor
fQorCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJh
bnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+
JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVR5cGVHZW5lcmlj
KHBhcnNpbmdCdWZmZXIpOworfQorCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJh
bnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh0eXBlU3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3Rl
cnMoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVy
czsKLSAgICByZXR1cm4gcGFyc2VBbmRTa2lwVHlwZShjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsg
dHlwZVN0cmluZy5sZW5ndGgoKSkudmFsdWVPcihTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5T
Rk9STV9VTktOT1dOKTsKKyAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlR2VuZXJpYyhwYXJz
aW5nQnVmZmVyKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9y
bWFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJs
ZS5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3Jt
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRlICJTVkdM
b2NhdGFibGUuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1WYWx1ZS5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCkBAIC0zMiw5
ICszMSwxMiBAQCBjbGFzcyBTVkdUcmFuc2Zvcm1hYmxlIDogcHVibGljIFNWR0xvY2F0CiBwdWJs
aWM6CiAgICAgdmlydHVhbCB+U1ZHVHJhbnNmb3JtYWJsZSgpOwogCi0gICAgc3RhdGljIE9wdGlv
bmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVu
ZCk7Ci0gICAgc3RhdGljIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHBhcnNl
VHJhbnNmb3JtVHlwZShjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IHBhcnNlQW5kU2tpcFR5cGUoY29uc3QgVUNo
YXIqJiBjdXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICBzdGF0aWMgT3B0aW9u
YWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFs
dWU6OlNWR1RyYW5zZm9ybVR5cGUsIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CisgICAg
c3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBTdHJpbmdQYXJzaW5nQnVmZmVyPFVD
aGFyPiYpOworCisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFu
c2Zvcm1UeXBlPiBwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nVmlldyYpOworICAgIHN0
YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VU
cmFuc2Zvcm1UeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CisgICAgc3RhdGljIE9w
dGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZVRyYW5zZm9y
bVR5cGUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKIAogICAgIEFmZmluZVRyYW5zZm9y
bSBsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7IH0KICAgICB2
aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QgPSAw
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
U1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGUuaCIKKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNjAsOTkgKzYxLDkwIEBAIHZvaWQgU1ZHVmlld1NwZWM6OnJlc2V0KCkKICAgICBT
Vkdab29tQW5kUGFuOjpyZXNldCgpOwogfQogCi1zdGF0aWMgY29uc3QgVUNoYXIgc3ZnVmlld1Nw
ZWNbXSA9IHsncycsICd2JywgJ2cnLCAnVicsICdpJywgJ2UnLCAndyd9Owotc3RhdGljIGNvbnN0
IFVDaGFyIHZpZXdCb3hTcGVjW10gPSB7J3YnLCAnaScsICdlJywgJ3cnLCAnQicsICdvJywgJ3gn
fTsKLXN0YXRpYyBjb25zdCBVQ2hhciBwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlY1tdID0geydwJywg
J3InLCAnZScsICdzJywgJ2UnLCAncicsICd2JywgJ2UnLCAnQScsICdzJywgJ3AnLCAnZScsICdj
JywgJ3QnLCAnUicsICdhJywgJ3QnLCAnaScsICdvJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgdHJh
bnNmb3JtU3BlY1tdID0geyd0JywgJ3InLCAnYScsICduJywgJ3MnLCAnZicsICdvJywgJ3InLCAn
bSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHpvb21BbmRQYW5TcGVjW10gPSB7J3onLCAnbycsICdv
JywgJ20nLCAnQScsICduJywgJ2QnLCAnUCcsICdhJywgJ24nfTsKLXN0YXRpYyBjb25zdCBVQ2hh
ciB2aWV3VGFyZ2V0U3BlY1tdID0gIHsndicsICdpJywgJ2UnLCAndycsICdUJywgJ2EnLCAncics
ICdnJywgJ2UnLCAndCd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3Rl
eHByIENoYXJhY3RlclR5cGUgc3ZnVmlld1NwZWNbXSA9IHsncycsICd2JywgJ2cnLCAnVicsICdp
JywgJ2UnLCAndyd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHBy
IENoYXJhY3RlclR5cGUgdmlld0JveFNwZWNbXSA9IHsndicsICdpJywgJ2UnLCAndycsICdCJywg
J28nLCAneCd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENo
YXJhY3RlclR5cGUgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWNbXSA9IHsncCcsICdyJywgJ2UnLCAn
cycsICdlJywgJ3InLCAndicsICdlJywgJ0EnLCAncycsICdwJywgJ2UnLCAnYycsICd0JywgJ1In
LCAnYScsICd0JywgJ2knLCAnbyd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Y29uc3RleHByIENoYXJhY3RlclR5cGUgdHJhbnNmb3JtU3BlY1tdID0geyd0JywgJ3InLCAnYScs
ICduJywgJ3MnLCAnZicsICdvJywgJ3InLCAnbSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgem9vbUFuZFBhblNwZWNbXSA9IHsneics
ICdvJywgJ28nLCAnbScsICdBJywgJ24nLCAnZCcsICdQJywgJ2EnLCAnbid9OwordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgdmlld1Rhcmdl
dFNwZWNbXSA9ICB7J3YnLCAnaScsICdlJywgJ3cnLCAnVCcsICdhJywgJ3InLCAnZycsICdlJywg
J3QnfTsKIAotYm9vbCBTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmcmIHZp
ZXdTcGVjKQorYm9vbCBTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmdWaWV3
JiBzdHJpbmcpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3
KHZpZXdTcGVjKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3Vy
clZpZXdTcGVjID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQg
PSBjdXJyVmlld1NwZWMgKyB2aWV3U3BlYy5sZW5ndGgoKTsKLQotICAgIGlmIChjdXJyVmlld1Nw
ZWMgPj0gZW5kIHx8ICFtX2NvbnRleHRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHN2Z1ZpZXdTcGVjLCBXVEZf
QVJSQVlfTEVOR1RIKHN2Z1ZpZXdTcGVjKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY3VyclZpZXdTcGVjKys7Ci0KLSAgICB3aGlsZSAoY3VyclZp
ZXdTcGVjIDwgZW5kICYmICpjdXJyVmlld1NwZWMgIT0gJyknKSB7Ci0gICAgICAgIGlmICgqY3Vy
clZpZXdTcGVjID09ICd2JykgewotICAgICAgICAgICAgaWYgKHNraXBTdHJpbmcoY3VyclZpZXdT
cGVjLCBlbmQsIHZpZXdCb3hTcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHZpZXdCb3hTcGVjKSkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVj
ICE9ICcoJykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgICAgIGF1dG8gdmlld0JveCA9IFNWR0Zp
dFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGN1cnJWaWV3U3BlYywgZW5kLCBmYWxzZSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCF2aWV3Qm94KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgc2V0Vmlld0JveChXVEZNb3ZlKCp2aWV3Qm94KSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAn
KScpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBj
dXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVmll
d1NwZWMsIGVuZCwgdmlld1RhcmdldFNwZWMsIFdURl9BUlJBWV9MRU5HVEgodmlld1RhcmdldFNw
ZWMpKSkgewotICAgICAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJy
Vmlld1NwZWMgIT0gJygnKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIHZpZXdUYXJnZXRTdGFydCA9ICsrY3VyclZpZXdTcGVj
OwotICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyVmlld1NwZWMgPCBlbmQgJiYgKmN1cnJWaWV3
U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAg
ICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kKQorICAgIHJldHVybiBXVEY6OnJlYWRD
aGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IGJv
b2wgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlwZW5hbWUgZGVjbHR5cGUocGFy
c2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7CisKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIu
YXRFbmQoKSB8fCAhbV9jb250ZXh0RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBzdmdW
aWV3U3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKCcpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciAhPSAnKScpIHsKKyAgICAgICAgICAgIGlm
ICgqcGFyc2luZ0J1ZmZlciA9PSAndicpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2tpcENoYXJh
Y3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHZpZXdCb3hTcGVjPENoYXJhY3RlclR5cGU+KSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICco
JykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gdmlld0JveCA9IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KHBhcnNp
bmdCdWZmZXIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF2aWV3Qm94KQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBz
ZXRWaWV3Qm94KFdURk1vdmUoKnZpZXdCb3gpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFz
a2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKScpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2tpcENoYXJhY3RlcnNF
eGFjdGx5KHBhcnNpbmdCdWZmZXIsIHZpZXdUYXJnZXRTcGVjPENoYXJhY3RlclR5cGU+KSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcoJykp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gdmlld1RhcmdldFN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAg
ICAgICAgICAgICAgICAgICBza2lwVW50aWwocGFyc2luZ0J1ZmZlciwgJyknKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbV92aWV3VGFyZ2V0U3Ry
aW5nID0gU3RyaW5nKHZpZXdUYXJnZXRTdGFydCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0g
dmlld1RhcmdldFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVyOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpwYXJzaW5nQnVmZmVyID09ICd6JykgeworICAgICAg
ICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHpvb21B
bmRQYW5TcGVjPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJygn
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGF1
dG8gem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbihwYXJzaW5nQnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXpvb21BbmRQYW4pCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBzZXRab29tQW5kUGFuKCp6b29tQW5k
UGFuKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcp
JykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ3AnKSB7CisgICAgICAgICAgICAgICAgaWYgKCFza2lw
Q2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWM8
Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKCcpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgICAgICAgICAgICAgaWYg
KCFwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKHBhcnNpbmdCdWZmZXIsIGZhbHNlKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNldFByZXNlcnZl
QXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbyk7CisgICAgICAgICAgICAgICAgaWYgKCFz
a2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKScpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpwYXJzaW5nQnVmZmVyID09ICd0Jykg
eworICAgICAgICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZm
ZXIsIHRyYW5zZm9ybVNwZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVm
ZmVyLCAnKCcpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgbV90cmFuc2Zvcm0tPnBhcnNlKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgICAg
IGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJyknKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIG1fdmlld1RhcmdldFN0cmluZyA9IFN0
cmluZyh2aWV3VGFyZ2V0U3RhcnQsIGN1cnJWaWV3U3BlYyAtIHZpZXdUYXJnZXRTdGFydCk7Ci0g
ICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJWaWV3U3Bl
YyA9PSAneicpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVu
ZCwgem9vbUFuZFBhblNwZWMsIFdURl9BUlJBWV9MRU5HVEgoem9vbUFuZFBhblNwZWMpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVj
ID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgIGlmICghU1ZH
Wm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKGN1cnJWaWV3U3BlYywgZW5kKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVu
ZCB8fCAqY3VyclZpZXdTcGVjICE9ICcpJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgfSBlbHNlIGlmICgqY3VyclZp
ZXdTcGVjID09ICdwJykgewotICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJWaWV3U3Bl
YywgZW5kLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlYywgV1RGX0FSUkFZX0xFTkdUSChwcmVzZXJ2
ZUFzcGVjdFJhdGlvU3BlYykpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysr
OwotICAgICAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0
UmF0aW87Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UoY3VyclZp
ZXdTcGVjLCBlbmQsIGZhbHNlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOwotICAg
ICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVj
Kys7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJWaWV3U3BlYyA9PSAndCcpIHsKLSAgICAgICAg
ICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgdHJhbnNmb3JtU3BlYywgV1RG
X0FSUkFZX0xFTkdUSCh0cmFuc2Zvcm1TcGVjKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3Bl
YyAhPSAnKCcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3Vy
clZpZXdTcGVjKys7Ci0gICAgICAgICAgICBtX3RyYW5zZm9ybS0+cGFyc2UoY3VyclZpZXdTcGVj
LCBlbmQpOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3
U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
Y3VyclZpZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgIGlmIChjdXJyVmlld1NwZWMgPCBlbmQgJiYgKmN1cnJWaWV3U3BlYyA9PSAn
OycpCi0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGN1
cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICc7Jyk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICpwYXJzaW5n
QnVmZmVyICE9ICcpJykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiB0
cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKIH0KIAogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ZpZXdTcGVjLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdWaWV3U3BlYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVmlld1NwZWMoY29udGV4dEVsZW1lbnQp
KTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nJik7CisgICAg
Ym9vbCBwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZ1ZpZXcmKTsKICAgICB2b2lkIHJlc2V0KCk7
CiAgICAgdm9pZCByZXNldENvbnRleHRFbGVtZW50KCkgeyBtX2NvbnRleHRFbGVtZW50ID0gbnVs
bHB0cjsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCShyZXZpc2lv
biAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDI1ICsyMiwzMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlNWR1pvb21BbmRQYW4uaCIKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlTnVtYmVycy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgU1ZHWm9vbUFuZFBh
bjo6cGFyc2Vab29tQW5kUGFuKGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlw
ZSBkaXNhYmxlW10gPSB7ICdkJywgJ2knLCAncycsICdhJywgJ2InLCAnbCcsICdlJyB9OwordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgbWFn
bmlmeVtdID0geyAnbScsICdhJywgJ2cnLCAnbicsICdpJywgJ2YnLCAneScgfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNWR1pvb21BbmRQYW5U
eXBlPiBwYXJzZVpvb21BbmRQYW5HZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpc2FibGVb
XSA9IHsgJ2QnLCAnaScsICdzJywgJ2EnLCAnYicsICdsJywgJ2UnIH07Ci0gICAgaWYgKHNraXBT
dHJpbmcoc3RhcnQsIGVuZCwgZGlzYWJsZSwgV1RGX0FSUkFZX0xFTkdUSChkaXNhYmxlKSkpIHsK
LSAgICAgICAgbV96b29tQW5kUGFuID0gU1ZHWm9vbUFuZFBhbkRpc2FibGU7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBtYWduaWZ5W10gPSB7
ICdtJywgJ2EnLCAnZycsICduJywgJ2knLCAnZicsICd5JyB9OwotICAgIGlmIChza2lwU3RyaW5n
KHN0YXJ0LCBlbmQsIG1hZ25pZnksIFdURl9BUlJBWV9MRU5HVEgobWFnbmlmeSkpKSB7Ci0gICAg
ICAgIG1fem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW5NYWduaWZ5OwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVy
LCBkaXNhYmxlPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgcmV0dXJuIFNWR1pvb21BbmRQYW5E
aXNhYmxlOworCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBt
YWduaWZ5PENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgcmV0dXJuIFNWR1pvb21BbmRQYW5NYWdu
aWZ5OworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KIAotICAgIHJldHVybiBmYWxzZTsK
K09wdGlvbmFsPFNWR1pvb21BbmRQYW5UeXBlPiBTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQ
YW4oU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0
dXJuIHBhcnNlWm9vbUFuZFBhbkdlbmVyaWMocGFyc2luZ0J1ZmZlcik7Cit9CisKK09wdGlvbmFs
PFNWR1pvb21BbmRQYW5UeXBlPiBTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4oU3RyaW5n
UGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNl
Wm9vbUFuZFBhbkdlbmVyaWMocGFyc2luZ0J1ZmZlcik7CiB9CiAKIHZvaWQgU1ZHWm9vbUFuZFBh
bjo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgY29u
c3QgQXRvbVN0cmluZyYgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFu
ZFBhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmgJ
KHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAg
IFNWR1pvb21BbmRQYW4oKSA9IGRlZmF1bHQ7CiAKLSAgICBib29sIHBhcnNlWm9vbUFuZFBhbihj
b25zdCBVQ2hhciomLCBjb25zdCBVQ2hhciopOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdab29t
QW5kUGFuVHlwZT4gcGFyc2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7
CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1pvb21BbmRQYW5UeXBlPiBwYXJzZVpvb21BbmRQYW4o
U3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKIAogcHJpdmF0ZToKICAgICBTVkdab29tQW5k
UGFuVHlwZSBtX3pvb21BbmRQYW4geyBTVkdQcm9wZXJ0eVRyYWl0czxTVkdab29tQW5kUGFuVHlw
ZT46OmluaXRpYWxWYWx1ZSgpIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402619</attachid>
            <date>2020-06-23 19:56:10 -0700</date>
            <delta_ts>2020-06-24 09:38:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213460-20200623195609.patch</filename>
            <type>text/plain</type>
            <size>219692</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM0MzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA2LTIzICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIHVubmVjZXNzYXJ5IHVwY29udmVyc2lvbiBv
ZiBTdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTM0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbV0lQXQorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVm
ZmVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcpOgor
CiAyMDIwLTA2LTIzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIFdURjo6c2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZApJbmRleDogU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjMzMzUpCisrKyBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00NTIsNiArNDUyLDcgQEAKIAkJN0MxMzc5NDIyMjIzMjZENTAwRDdBODI0IC8qIGllZWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gaWVlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEz
Nzk0MzIyMjMyNkQ1MDBEN0E4MjQgLyogUkVBRE1FLm1kICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gbmV0LmRhcmluZ2ZpcmViYWxsLm1hcmtkb3duOyBw
YXRoID0gUkVBRE1FLm1kOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNBNDVEMDIz
Q0ZBODgzMDA3REUzQTYgLyogUGxhdGZvcm1IYXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtSGF2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QzNCMDZFODI0QTExNkU2MDBGRDI2QzcgLyogU3RyaW5nUGFyc2luZ0J1ZmZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHJpbmdQYXJzaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDM0Y3MjM5MUQ3ODgxMTkwMDY3NEUyNiAvKiBCcmlnYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJyaWdhbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M0MjMwNzEyM0NFMkQ4QTAwNkU1NEQwIC8qIFBsYXRmb3JtRW5hYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtRW5hYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNDIzMDcyMjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM5Niw2ICsxMzk3LDcgQEAKIAkJCQlBOEE0NzMyODE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQThBNDczMjkxNTFBODI1
QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCAqLywKIAkJCQlBOEE0NzMyQTE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nT3BlcmF0b3JzLmggKi8sCisJCQkJN0MzQjA2RTgyNEExMTZFNjAwRkQyNkM3
IC8qIFN0cmluZ1BhcnNpbmdCdWZmZXIuaCAqLywKIAkJCQlDRDAwMzYwRDIxNTAxRjc4MDBGNEVE
NEMgLyogU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oICovLAogCQkJCTkzRjE5OTNEMTlENzk1
OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCAqLywKIAkJCQkxQTZFQjFERjE4N0QwQkQzMDAz
MDEyNkYgLyogU3RyaW5nVmlldy5oICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0zMzgsNiArMzM4LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIHRleHQv
U3RyaW5nSGFzaGVyLmgKICAgICB0ZXh0L1N0cmluZ0ltcGwuaAogICAgIHRleHQvU3RyaW5nT3Bl
cmF0b3JzLmgKKyAgICB0ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAogICAgIHRleHQvU3RyaW5n
VG9JbnRlZ2VyQ29udmVyc2lvbi5oCiAgICAgdGV4dC9TdHJpbmdWaWV3LmgKICAgICB0ZXh0L1N5
bWJvbEltcGwuaApJbmRleDogU291cmNlL1dURi93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dU
Ri93dGYvRm9yd2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCA9IGFsaWdub2YoVCkKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lID0gRHVtYlB0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgPSBEdW1iUHRyVHJhaXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0
eXBlbmFtZT4gY2xhc3MgU3RyaW5nQnVmZmVyOwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0
cmluZ1BhcnNpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBj
bGFzcyBTdHJpbmdUeXBlQWRhcHRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBVbmlxdWVS
ZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgVmFyaWFudDsKQEAgLTEyMiw2ICsxMjMs
NyBAQCB1c2luZyBXVEY6OlN0cmluZzsKIHVzaW5nIFdURjo6U3RyaW5nQnVmZmVyOwogdXNpbmcg
V1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwordXNpbmcgV1RGOjpT
dHJpbmdQYXJzaW5nQnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpU
ZXh0UG9zaXRpb247CiB1c2luZyBXVEY6OlRleHRTdHJlYW07CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUhhdmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhh
dmUuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxMiwxNSArNjEyLDE1IEBACiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDE1MDApCi0jZGVmaW5lIEhBVkVfUEFTU0tJVF9CT1VORF9JTlRFUkZBQ0VfSURF
TlRJRklFUiAxCisjZGVmaW5lIEhBVkVfUEFTU0tJVF9CT1VORF9JTlRFUkZBQ0VfSURFTlRJRklF
UiAwCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE1MDApCi0jZGVmaW5lIEhBVkVfUEFT
U0tJVF9JTlNUQUxMTUVOVFMgMQorI2RlZmluZSBIQVZFX1BBU1NLSVRfSU5TVEFMTE1FTlRTIDAK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMCkKLSNkZWZpbmUgSEFWRV9QQVNTS0lU
X1BBWU1FTlRfTUVUSE9EX0JJTExJTkdfQUREUkVTUyAxCisjZGVmaW5lIEhBVkVfUEFTU0tJVF9Q
QVlNRU5UX01FVEhPRF9CSUxMSU5HX0FERFJFU1MgMAogI2VuZGlmCiAKICNpZiAoUExBVEZPUk0o
TUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMCkgfHwgUExB
VEZPUk0oSU9TKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQ29tbW9uLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
Y2xhc3MgU3RyaW5nUGFyc2luZ0J1ZmZlciBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IFQ7CisKKyAgICBjb25z
dGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlcigpCisgICAgeworICAgIH0KKworICAgIGNvbnN0ZXhw
ciBTdHJpbmdQYXJzaW5nQnVmZmVyKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uIHsgY2hhcmFjdGVycyB9CisgICAg
ICAgICwgbV9lbmQgeyBjaGFyYWN0ZXJzICsgbGVuZ3RoIH0KKyAgICB7CisgICAgfQorCisgICAg
Y29uc3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFj
dGVycywgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQorICAgICAgICA6IG1fcG9zaXRpb24geyBj
aGFyYWN0ZXJzIH0KKyAgICAgICAgLCBtX2VuZCB7IGVuZCB9CisgICAgeworICAgIH0KKworICAg
IGNvbnN0ZXhwciBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb247IH0KKyAgICBjb25zdGV4cHIgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KKworICAgIGNvbnN0ZXhwciBib29sIGhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uIDwgbV9lbmQ7IH0KKyAgICBj
b25zdGV4cHIgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24gPT0gbV9lbmQ7
IH0KKworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBsZW5ndGhSZW1haW5pbmcoKSBjb25zdCB7IHJl
dHVybiBtX2VuZCAtIG1fcG9zaXRpb247IH0KKyAgICBTdHJpbmdWaWV3IHN0cmluZ1ZpZXdPZkNo
YXJhY3RlcnNSZW1haW5pbmcoKSB7IHJldHVybiB7IG1fcG9zaXRpb24sIGxlbmd0aFJlbWFpbmlu
ZygpIH07IH0KKworICAgIENoYXJhY3RlclR5cGUgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fcG9zaXRpb24gKyBpIDwgbV9lbmQpOworICAgICAgICByZXR1
cm4gbV9wb3NpdGlvbltpXTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBv
cGVyYXRvciooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICptX3Bvc2l0aW9uOworICAg
IH0KKworICAgIGNvbnN0ZXhwciB2b2lkIGFkdmFuY2UoKQorICAgIHsKKyAgICAgICAgKyttX3Bv
c2l0aW9uOworICAgIH0KKworICAgIGNvbnN0ZXhwciB2b2lkIGFkdmFuY2VCeSh1bnNpZ25lZCBw
bGFjZXMpCisgICAgeworICAgICAgICBtX3Bvc2l0aW9uICs9IHBsYWNlczsKKyAgICB9CisKKyAg
ICBjb25zdGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlciYgb3BlcmF0b3IrKygpCisgICAgeworICAg
ICAgICBhZHZhbmNlKCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBjb25z
dGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlciBvcGVyYXRvcisrKGludCkKKyAgICB7CisgICAgICAg
IGF1dG8gcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICsrKCp0aGlzKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogbV9w
b3NpdGlvbiB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBtX2VuZCB7IG51
bGxwdHIgfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUsIHR5cGVuYW1lIEZ1
bmN0aW9uPiBkZWNsdHlwZShhdXRvKSByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoU3RyaW5nVHlw
ZSYmIHN0cmluZywgRnVuY3Rpb24mJiBmdW5jdG9yKQoreworICAgIGlmIChzdHJpbmcuaXM4Qml0
KCkpCisgICAgICAgIHJldHVybiBmdW5jdG9yKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBzdHJpbmcu
Y2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH0pOworICAgIHJldHVybiBmdW5jdG9yKFN0
cmluZ1BhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgo
KSB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U3RyaW5nUGFyc2lu
Z0J1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzQzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NSBAQAorMjAyMC0wNi0y
MyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSB1bm5l
Y2Vzc2FyeSB1cGNvbnZlcnNpb24gb2YgU3RyaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9wYXJzZXIvUGFyc2lu
Z1V0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RBU0NJSVNwYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNraXBFeGFjdGx5KToKKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlclBy
ZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpza2lwVW50aWwpOgorICAgICAgICAoV2ViQ29y
ZTo6c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpza2lw
Q2hhcmFjdGVyc0V4YWN0bHkpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5j
aW5nUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdCk6CisgICAgICAg
ICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oOgorICAgICAgICAqIGxvYWRl
ci9TdWJyZXNvdXJjZUludGVncml0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcGxpdE9uU3Bh
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSW50ZWdyaXR5TWV0YWRhdGEpOgorICAgICAg
ICAqIGxvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZU1hbmlmZXN0KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xp
Y3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpkaWRSZWNl
aXZlSGVhZGVyKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rl
cik6CisgICAgICAgIChXZWJDb3JlOjppc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBh
cnNlRGlyZWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3Q6OnBhcnNlUmVwb3J0VVJJKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldENTUERpcmVjdGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphcHBseVNhbmRib3hQ
b2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDo6c2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0QmxvY2tBbGxNaXhlZENvbnRlbnRF
bmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OmFkZERpcmVjdGl2ZSk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdC5oOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc01lZGlh
VHlwZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lN
ZWRpYUxpc3REaXJlY3RpdmU6OnBhcnNlKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU291cmNlQ2hh
cmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzSG9zdENoYXJhY3Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjppc1BhdGhDb21wb25lbnRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNT
Y2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RDb2xv
bk9yU2xhc2gpOgorICAgICAgICAoV2ViQ29yZTo6aXNTb3VyY2VMaXN0Tm9uZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Ojpw
YXJzZVNjaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0OjpwYXJzZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGFyc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjppc05v
bmNlQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3Q6OnBhcnNlTm9uY2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VIYXNoU291cmNlKToKKyAgICAgICAgKiBwYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmg6CisgICAgICAgICogc3ZnL1NW
R0FuZ2xlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBbmdsZVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICog
c3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXlT
cGxpbmVzKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94R2VuZXJpYyk6CisgICAgICAgICogc3ZnL1NW
R0ZpdFRvVmlld0JveC5oOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhMaXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdMZW5ndGhMaXN0Ojp2YWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHTGVuZ3RoTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoTGlzdDo6cGFyc2Up
OiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUxlbmd0aFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoVmFs
dWU6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhWYWx1ZTo6c2V0VmFs
dWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aFZhbHVlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdMZW5ndGhWYWx1ZTo6U1ZHTGVuZ3RoVmFsdWUpOgorICAgICAgICAqIHN2Zy9T
VkdOdW1iZXJMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXJMaXN0
OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXJMaXN0Ojp2YWx1ZUFzU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHTnVtYmVyTGlzdDo6cGFyc2UpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4K
KyAgICAgICAgKiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyaWNQYXJzZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VBcmNGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlQXJjRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlck9wdGlvbmFsTnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlR2x5cGhOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlVW5pY29kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlS2Vy
bmluZ1VuaWNvZGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlRmxvYXRQ
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQpOgorICAgICAgICAqIHN2
Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU1ZHU3BhY2VPckNv
bW1hKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpza2lwU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNvdXJj
ZS5oOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRv
VmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU1ZHU2VnbWVu
dFR5cGVIZWxwZXIpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNl
Lmg6CisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUG9pbnRMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExp
c3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdQb2ludExpc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BvaW50TGlzdDo6cGFyc2UpOiBEZWxldGVkLgorICAgICAg
ICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlOjpwYXJzZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oOgorICAgICAgICAqIHN2Zy9TVkdTdHJp
bmdMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHJpbmdMaXN0OjpwYXJz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHJpbmdMaXN0Ojp2YWx1ZUFzU3RyaW5nIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHU3RyaW5nTGlzdC5oOgorICAgICAgICAqIHN2Zy9TVkdUcmFu
c2Zvcm1MaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1MaXN0
Ojpjb25zb2xpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1MaXN0Ojpjb25j
YXRlbmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1MaXN0OjpwYXJz
ZUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6dmFsdWVBc1N0cmluZyBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJh
bnNmb3JtYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVBhcmFtTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVj
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKToKKyAg
ICAgICAgKiBzdmcvU1ZHVmlld1NwZWMuaDoKKyAgICAgICAgKiBzdmcvU1ZHWm9vbUFuZFBhbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVpvb21BbmRQYW5HZW5lcmljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbik6CisgICAgICAgICogc3Zn
L1NWR1pvb21BbmRQYW4uaDoKKwogMjAyMC0wNi0yMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtNdWx0aWNvbF0gUmVzZXQgdGhlIGNoaWxkcmVuSW5saW5lIHN0
YXRlIG9uIHRoZSBSZW5kZXJCbG9ja0Zsb3cgd2hlbiBkZXN0cm95aW5nIHRoZSBtdWx0aWNvbHVt
biBjb250ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTY2NCw2ICs2NjQs
NyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBodG1sL2Zv
cm1zL0ZpbGVJY29uTG9hZGVyLmgKIAorICAgIGh0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMu
aAogICAgIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaAogCiAgICAgaHRtbC90cmFjay9B
dWRpb1RyYWNrLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjUzNyw2ICsyNTM3LDcg
QEAgc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAKIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCiBzdmcv
U1ZHSW1hZ2VMb2FkZXIuY3BwCiBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKK3N2Zy9TVkdMZW5n
dGhMaXN0LmNwcAogc3ZnL1NWR0xlbmd0aFZhbHVlLmNwcAogc3ZnL1NWR0xpbmVFbGVtZW50LmNw
cAogc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKQEAgLTI1NDYsNiArMjU0Nyw3IEBA
IHN2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAogc3ZnL1NWR01hc2tFbGVtZW50LmNwcAogc3ZnL1NW
R01ldGFkYXRhRWxlbWVudC5jcHAKIHN2Zy9TVkdNaXNzaW5nR2x5cGhFbGVtZW50LmNwcAorc3Zn
L1NWR051bWJlckxpc3QuY3BwCiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAogc3ZnL1NWR1Bh
dGhCbGVuZGVyLmNwcAogc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcApAQCAtMjU2MCw2ICsyNTYyLDcg
QEAgc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCiBzdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRl
QnVpbGRlci5jcHAKIHN2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAogc3ZnL1NWR1BhdHRlcm5FbGVt
ZW50LmNwcAorc3ZnL1NWR1BvaW50TGlzdC5jcHAKIHN2Zy9TVkdQb2x5RWxlbWVudC5jcHAKIHN2
Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKIHN2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCkBAIC0y
NTcwLDYgKzI1NzMsNyBAQCBzdmcvU1ZHU1ZHRWxlbWVudC5jcHAKIHN2Zy9TVkdTY3JpcHRFbGVt
ZW50LmNwcAogc3ZnL1NWR1NldEVsZW1lbnQuY3BwCiBzdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCitz
dmcvU1ZHU3RyaW5nTGlzdC5jcHAKIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCiBzdmcvU1ZHU3dp
dGNoRWxlbWVudC5jcHAKIHN2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcApAQCAtMjU4Myw2ICsyNTg3
LDcgQEAgc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCiBzdmcvU1ZHVGl0bGVFbGVt
ZW50LmNwcAogc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCiBzdmcvU1ZHVHJhbnNmb3Jt
RGlzdGFuY2UuY3BwCitzdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKIHN2Zy9TVkdUcmFuc2Zvcm1h
YmxlLmNwcAogc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAKIHN2Zy9TVkdVbmtub3duRWxlbWVudC5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU4OCw3ICsxNTg4LDcg
QEAKIAkJNTMyMDQyMDIxRjlBOUYxMDAwQjgxQjJBIC8qIFVzZXJBZ2VudFNjcmlwdHNEYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUI2RDMw
MTdDOTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRTY3JpcHRzRGF0YS5jcHAgKi87IH07CiAJCTUz
NTFENEIxMURGOTE2QjQwMDgwMTBDRCAvKiBGaWxlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUxRDRBRjFERjkxNkFDMDA4MDEwQ0QgLyog
RmlsZUhhbmRsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUzNkQ1QTIwMTkzRTE4RTkwMENFNENBQiAvKiBIVE1MU3Jjc2V0UGFyc2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzZENUExRjE5M0Ux
OEU5MDBDRTRDQUIgLyogSFRNTFNyY3NldFBhcnNlci5oICovOyB9OwotCQk1MzZENUEyMzE5M0U4
RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2RDVBMjIxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNp
bmdVdGlsaXRpZXMuaCAqLzsgfTsKKwkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNp
bmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzNkQ1QTIyMTkzRThFMEMwMENFNENBQiAvKiBQYXJzaW5nVXRpbGl0aWVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM4RUM4MDIxRjk2
QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRTb3VyY2UxLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0ZBMUY5NkFBNzAwMDREMjJBOCAvKiBVbmlm
aWVkU291cmNlMS5jcHAgKi87IH07CiAJCTUzOEVDODAzMUY5NkFGODEwMDREMjJBOCAvKiBVbmlm
aWVkU291cmNlMS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzOEVDN0YzMUY5NkFBNUIwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS1tbS5tbSAq
LzsgfTsKIAkJNTM4RUM4MDQxRjk2QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRTb3VyY2UyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0VFMUY5
NkFBNTYwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMi5jcHAgKi87IH07CkBAIC0xMDE4OCw2ICsx
MDE4OCwxMSBAQAogCQk3Q0QzNDQxMjFGMzEwOEUyMDAwRENENDkgLyogSlNNdXRhdGlvbkNhbGxi
YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTXV0YXRpb25DYWxsYmFjay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDQ5NENBMUE4NkVCMUQwMDBBODdFQyAvKiBSZW5k
ZXJBdHRhY2htZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlckF0dGFjaG1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Q0OTRD
QjFBODZFQjFEMDAwQTg3RUMgLyogUmVuZGVyQXR0YWNobWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJBdHRhY2htZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDRDcwQzNEMjRBMjhBM0EwMEU2MTA0MCAvKiBTVkdMZW5ndGhMaXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0xlbmd0aExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3Q0Q3MEM0MDI0QTI4QUM5MDBFNjEwNDAgLyogU1ZHTnVtYmVyTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdOdW1iZXJMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0NENzBDNDIyNEEyOEI3MDAwRTYxMDQwIC8qIFNWR1BvaW50TGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQb2ludExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3Q0Q3MEM0MzI0QTI4QkVDMDBFNjEwNDAgLyogU1ZHU3RyaW5nTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdTdHJpbmdMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0NENzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5zZm9ybUxpc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVHJhbnNmb3JtTGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDREU3Mzk2MUY5QkQ1OTUwMDM5MDMxMiAvKiBTZXR0aW5ncy55
YW1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNldHRpbmdzLnlhbWw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDREU4RUJDMUYxOTNCQzUwMDE2OEZFNyAvKiBDU1NTdHlsZURlY2xh
cmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1N0eWxl
RGVjbGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0UxOTE0NzFG
MkE5OEFGMDAyNzJGNzggLyogRmV0Y2hSZXF1ZXN0SW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGZXRjaFJlcXVlc3RJbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yNTEzMCw2ICsyNTEzNSw3IEBACiAJCQkJQjIyMjc4OUUwRDAwQkYyMDAwNzFCNzgy
IC8qIFNWR0xlbmd0aC5pZGwgKi8sCiAJCQkJNzEzNDQ5NkIxNDY5NDFCMzAwNzIwMzEyIC8qIFNW
R0xlbmd0aENvbnRleHQuY3BwICovLAogCQkJCTcxMzQ0OTZDMTQ2OTQxQjMwMDcyMDMxMiAvKiBT
VkdMZW5ndGhDb250ZXh0LmggKi8sCisJCQkJN0NENzBDM0QyNEEyOEEzQTAwRTYxMDQwIC8qIFNW
R0xlbmd0aExpc3QuY3BwICovLAogCQkJCUIyMjI3OEEwMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdM
ZW5ndGhMaXN0LmggKi8sCiAJCQkJQjIyMjc4QTEwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0
aExpc3QuaWRsICovLAogCQkJCTdDRTU4RDUyMUREN0IwOTMwMDEyODU1MiAvKiBTVkdMZW5ndGhW
YWx1ZS5jcHAgKi8sCkBAIC0yNTE2Miw2ICsyNTE2OCw3IEBACiAJCQkJNDREOERBOTgxMzk1NDVC
RTAwMzM3Qjc1IC8qIFNWR01QYXRoRWxlbWVudC5pZGwgKi8sCiAJCQkJN0NFNThENEYxREQ2OUEx
RTAwMTI4NTUyIC8qIFNWR051bWJlci5oICovLAogCQkJCUIyMjI3OEI5MEQwMEJGMjAwMDcxQjc4
MiAvKiBTVkdOdW1iZXIuaWRsICovLAorCQkJCTdDRDcwQzQwMjRBMjhBQzkwMEU2MTA0MCAvKiBT
VkdOdW1iZXJMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzhCQjBEMDBCRjIwMDA3MUI3ODIgLyogU1ZH
TnVtYmVyTGlzdC5oICovLAogCQkJCUIyMjI3OEJDMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdOdW1i
ZXJMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzhDMDBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHUGFyc2Vy
VXRpbGl0aWVzLmNwcCAqLywKQEAgLTI1MjI1LDYgKzI1MjMyLDcgQEAKIAkJCQlCMjIyNzhGMzBE
MDBCRjIxMDA3MUI3ODIgLyogU1ZHUGF0dGVybkVsZW1lbnQuaWRsICovLAogCQkJCTdDRTU4RDQ5
MURENjRBNUIwMDEyODU1MiAvKiBTVkdQb2ludC5oICovLAogCQkJCUIyMjI3OEY0MEQwMEJGMjEw
MDcxQjc4MiAvKiBTVkdQb2ludC5pZGwgKi8sCisJCQkJN0NENzBDNDIyNEEyOEI3MDAwRTYxMDQw
IC8qIFNWR1BvaW50TGlzdC5jcHAgKi8sCiAJCQkJQjIyMjc4RjYwRDAwQkYyMTAwNzFCNzgyIC8q
IFNWR1BvaW50TGlzdC5oICovLAogCQkJCUIyMjI3OEY3MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQ
b2ludExpc3QuaWRsICovLAogCQkJCUIyMjI3OEY4MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQb2x5
RWxlbWVudC5jcHAgKi8sCkBAIC0yNTI1OCw2ICsyNTI2Niw3IEBACiAJCQkJQjIyMjc5MTIwRDAw
QkYyMTAwNzFCNzgyIC8qIFNWR1N0b3BFbGVtZW50LmNwcCAqLywKIAkJCQlCMjIyNzkxMzBEMDBC
RjIxMDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaCAqLywKIAkJCQlCMjIyNzkxNDBEMDBCRjIx
MDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaWRsICovLAorCQkJCTdDRDcwQzQzMjRBMjhCRUMw
MEU2MTA0MCAvKiBTVkdTdHJpbmdMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzkxNjBEMDBCRjIxMDA3
MUI3ODIgLyogU1ZHU3RyaW5nTGlzdC5oICovLAogCQkJCUIyMjI3OTE3MEQwMEJGMjEwMDcxQjc4
MiAvKiBTVkdTdHJpbmdMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzkyMTBEMDBCRjIxMDA3MUI3ODIg
LyogU1ZHU3R5bGVFbGVtZW50LmNwcCAqLywKQEAgLTI1Mjk5LDYgKzI1MzA4LDcgQEAKIAkJCQlC
MjIyNzk0NDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtYWJsZS5oICovLAogCQkJCUIy
MjI3OTQ2MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgKi8sCiAJ
CQkJQjIyMjc5NDcwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmggKi8s
CisJCQkJN0NENzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5zZm9ybUxpc3QuY3BwICov
LAogCQkJCUIyMjI3OTQ5MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1MaXN0LmggKi8s
CiAJCQkJQjIyMjc5NEEwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybUxpc3QuaWRsICov
LAogCQkJCTdDRTU4RDU2MUREN0Q5NkQwMDEyODU1MiAvKiBTVkdUcmFuc2Zvcm1WYWx1ZS5oICov
LApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMu
aAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2lu
Z1V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTQgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1pbmxpbmUgYm9vbCBpc05vdEFTQ0lJU3BhY2UoVUNoYXIgYykKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgoraW5saW5lIGJvb2wgaXNOb3RBU0NJSVNwYWNlKENo
YXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7CiB9CiAgICAgCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KLWJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUq
JiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+Citib29sIHNr
aXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQs
IERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQogewogICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAq
cG9zaXRpb24gPT0gZGVsaW1pdGVyKSB7CiAgICAgICAgICsrcG9zaXRpb247CkBAIC00OSw2ICs1
MCwxNiBAQCBib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlwZW5hbWUgRGVs
aW1pdGVyVHlwZT4KK2Jvb2wgc2tpcEV4YWN0bHkoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlw
ZT4mIHBhcnNpbmdCdWZmZXIsIERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQoreworICAgIGlmIChw
YXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9
PSBkZWxpbWl0ZXIpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgogYm9vbCBza2lwRXhh
Y3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kKQogewpA
QCAtNTksMTMgKzcwLDMwIEBAIGJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3Np
dGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgot
dm9pZCBza2lwVW50aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUq
IGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJv
b2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK2Jvb2wgc2tpcEV4YWN0bHkoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgaWYgKHBhcnNp
bmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGNoYXJhY3RlclByZWRpY2F0ZSgq
cGFyc2luZ0J1ZmZlcikpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyVHlwZSwgdHlwZW5hbWUgRGVsaW1pdGVyVHlwZT4KK3ZvaWQgc2tpcFVudGlsKGNvbnN0
IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIERlbGltaXRlclR5cGUg
ZGVsaW1pdGVyKQogewogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gIT0g
ZGVsaW1pdGVyKQogICAgICAgICArK3Bvc2l0aW9uOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyVHlwZSwgdHlwZW5hbWUgRGVsaW1pdGVyVHlwZT4KK3ZvaWQgc2tpcFVudGlsKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyLCBEZWxpbWl0ZXJUeXBlIGRlbGlt
aXRlcikKK3sKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkgJiYgKnBhcnNpbmdCdWZmZXIgIT0gZGVsaW1pdGVyKQorICAgICAgICArK3BhcnNpbmdCdWZm
ZXI7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRp
Y2F0ZShDaGFyVHlwZSk+CiB2b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9u
LCBjb25zdCBDaGFyVHlwZSogZW5kKQogewpAQCAtNzQsNiArMTAyLDEzIEBAIHZvaWQgc2tpcFVu
dGlsKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
clR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK3ZvaWQgc2tpcFVudGls
KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHdo
aWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhY2hhcmFjdGVy
UHJlZGljYXRlKCpwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hh
clR5cGUpPgogdm9pZCBza2lwV2hpbGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3Qg
Q2hhclR5cGUqIGVuZCkKIHsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgY2hhcmFjdGVy
UHJlZGljYXRlKCpwb3NpdGlvbikpCkBAIC04MSw2ICsxMTYsMTMgQEAgdm9pZCBza2lwV2hpbGUo
Y29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlw
ZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgordm9pZCBza2lwV2hpbGUoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgd2hpbGUg
KHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGNoYXJhY3RlclByZWRp
Y2F0ZSgqcGFyc2luZ0J1ZmZlcikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBl
KT4KIHZvaWQgcmV2ZXJzZVNraXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25z
dCBDaGFyVHlwZSogc3RhcnQpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uID49IHN0YXJ0ICYmIGNo
YXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKQpAQCAtOTIsMTEgKzEzNCw0MSBAQCBib29sIHNr
aXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoY29uc3QgCiB7CiAgICAgaWYgKHBvc2l0aW9uICsg
bG93ZXJjYXNlTGV0dGVyc0xlbmd0aCA+IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgbG93ZXJj
YXNlTGV0dGVyc0xlbmd0aCAtIDEsIGxvd2VyY2FzZUxldHRlcnMpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcG9zaXRpb24gKz0gKGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGJvb2wgcmVzdWx0ID0gV1RGOjplcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEsIGxv
d2VyY2FzZUxldHRlcnMpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHBvc2l0aW9uICs9IChs
b3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5ndGg+
Citib29sIHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRl
cnMpW2xvd2VyY2FzZUxldHRlcnNMZW5ndGhdKQoreworICAgIGlmIChwYXJzaW5nQnVmZmVyLmxl
bmd0aFJlbWFpbmluZygpIDw9IGxvd2VyY2FzZUxldHRlcnNMZW5ndGgpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIVdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpLCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSwgbG93ZXJj
YXNlTGV0dGVycykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwYXJzaW5nQnVmZmVyLmFk
dmFuY2VCeShsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGNoYXJhY3RlckNv
dW50PiBjb25zdGV4cHIgYm9vbCBza2lwQ2hhcmFjdGVyc0V4YWN0bHkoY29uc3QgQ2hhcmFjdGVy
VHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KCZzdHIpW2NoYXJhY3RlckNvdW50XSkKK3sKKyAgICBpZiAoZW5kIC0gcHRyIDwgY2hhcmFjdGVy
Q291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobWVtY21wKHN0ciwgcHRyLCBz
aXplb2YoQ2hhcmFjdGVyVHlwZSkgKiBjaGFyYWN0ZXJDb3VudCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBwdHIgKz0gY2hhcmFjdGVyQ291bnQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGNoYXJhY3RlckNvdW50
PiBjb25zdGV4cHIgYm9vbCBza2lwQ2hhcmFjdGVyc0V4YWN0bHkoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgY29uc3QgQ2hhcmFjdGVyVHlwZSgmc3Ry
KVtjaGFyYWN0ZXJDb3VudF0pCit7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWlu
aW5nKCkgPCBjaGFyYWN0ZXJDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
ZW1jbXAoc3RyLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCksIHNpemVvZihDaGFyYWN0ZXJUeXBl
KSAqIGNoYXJhY3RlckNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBhcnNpbmdC
dWZmZXIuYWR2YW5jZUJ5KGNoYXJhY3RlckNvdW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9uIDI2MzMzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMDQgKzMwLDk2IEBACiAjaW5jbHVkZSA8cGFsL2NyeXB0
by9DcnlwdG9EaWdlc3QuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLXN0YXRpYyBib29sIHBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9uKGNv
bnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBS
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSYgYWxnb3JpdGhtKQordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtPiBwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3Np
dGlvbihTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQog
ewogICAgIC8vIEZJWE1FOiBUaGlzIHdvdWxkIGJlIG11Y2ggY2xlYW5lciB3aXRoIGEgbG9va3Vw
IHRhYmxlIG9mIHBhaXJzIG9mIGxhYmVsIC8gYWxnb3JpdGhtIGVudW0gdmFsdWVzLCBidXQgSSBj
YW4ndAogICAgIC8vIGZpZ3VyZSBvdXQgaG93IHRvIGtlZXAgdGhlIGxhYmVscyBjb21waWxldGlt
ZSBzdHJpbmdzIGZvciBza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlLgogCi0gICAgaWYgKHNr
aXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGVuZCwgInNoYTI1NiIpKSB7Ci0g
ICAgICAgIGFsZ29yaXRobSA9IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGht
OjpTSEEyNTY7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoc2tpcEV4YWN0
bHlJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgZW5kLCAic2hhMzg0IikpIHsKLSAgICAgICAg
YWxnb3JpdGhtID0gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTM4
NDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChza2lwRXhhY3RseUlnbm9y
aW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBlbmQsICJzaGE1MTIiKSkgewotICAgICAgICBhbGdvcml0
aG0gPSBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hBNTEyOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJ
SUNhc2UocGFyc2luZ0J1ZmZlciwgInNoYTI1NiIpKQorICAgICAgICByZXR1cm4gUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTI1NjsKKyAgICBpZiAoc2tpcEV4YWN0
bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAic2hhMzg0IikpCisgICAgICAgIHJl
dHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hBMzg0OworICAg
IGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICJzaGE1MTIi
KSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGht
OjpTSEE1MTI7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBPcHRpb25hbDxS
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwo
Y29uc3QgQ2hhcmFjdGVyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8UmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYg
KHBvc2l0aW9uID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
OjpBbGdvcml0aG0gYWxnb3JpdGhtOwotICAgIGlmICghcGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5j
aW5nUG9zaXRpb24ocG9zaXRpb24sIGVuZCwgYWxnb3JpdGhtKSkKKyAgICBhdXRvIGFsZ29yaXRo
bSA9IHBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9uKHBhcnNpbmdCdWZmZXIpOwor
ICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
aWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnLScpKQorICAg
IGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy0nKSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGJl
Z2luSGFzaFZhbHVlID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlz
QmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotICAgIHNraXBFeGFj
dGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICc9Jyk7Ci0gICAgc2tpcEV4YWN0bHk8
Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz0nKTsKKyAgICBhdXRvIGJlZ2luSGFzaFZh
bHVlID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJU
eXBlLCBpc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKKyAgICBz
a2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnPScpOworICAgIHNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc9Jyk7CiAKLSAgICBpZiAocG9z
aXRpb24gPT0gYmVnaW5IYXNoVmFsdWUpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24o
KSA9PSBiZWdpbkhhc2hWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
IFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0gICAgU3RyaW5nVmlldyBoYXNoVmFsdWUoYmVnaW5I
YXNoVmFsdWUsIHBvc2l0aW9uIC0gYmVnaW5IYXNoVmFsdWUpOworICAgIFN0cmluZ1ZpZXcgaGFz
aFZhbHVlKGJlZ2luSGFzaFZhbHVlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhh
c2hWYWx1ZSk7CiAgICAgaWYgKCFiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBkaWdlc3QsIEJhc2U2
NFZhbGlkYXRlUGFkZGluZykpIHsKICAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoaGFzaFZh
bHVlLCBkaWdlc3QpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAK
LSAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgYWxnb3JpdGhtLCBXVEZN
b3ZlKGRpZ2VzdCkgfTsKKyAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsg
KmFsZ29yaXRobSwgV1RGTW92ZShkaWdlc3QpIH07CiB9CiAKLU9wdGlvbmFsPFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IFVDaGFyKiYg
YmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpCitPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFy
PiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0
SW1wbChiZWdpbiwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1w
bChwYXJzaW5nQnVmZmVyKTsKIH0KIAotT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGln
ZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgTENoYXIqJiBiZWdpbiwgY29uc3Qg
TENoYXIqIGVuZCkKK09wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VD
cnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVm
ZmVyKQogewotICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJlZ2luLCBl
bmQpOworICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKHBhcnNpbmdCdWZm
ZXIpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIE9wdGlv
bmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0
b2dyYXBoaWNEaWdlc3RJbXBsKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3Rh
dGljIE9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5j
b2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkKKyAgICBp
ZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtIGFsZ29y
aXRobTsKLSAgICBpZiAoIXBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9uKHBvc2l0
aW9uLCBlbmQsIGFsZ29yaXRobSkpCisgICAgYXV0byBhbGdvcml0aG0gPSBwYXJzZUhhc2hBbGdv
cml0aG1BZHZhbmNpbmdQb3NpdGlvbihwYXJzaW5nQnVmZmVyKTsKKyAgICBpZiAoIWFsZ29yaXRo
bSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghc2tpcEV4YWN0bHk8
Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJy0nKSkKKyAgICBpZiAoIXNraXBFeGFjdGx5
PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICctJykpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbkhhc2hWYWx1ZSA9IHBv
c2l0aW9uOwotICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0Jhc2U2NE9yQmFzZTY0VVJM
Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAgICBza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBl
Pihwb3NpdGlvbiwgZW5kLCAnPScpOwotICAgIHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBv
c2l0aW9uLCBlbmQsICc9Jyk7CisgICAgYXV0byBiZWdpbkhhc2hWYWx1ZSA9IHBhcnNpbmdCdWZm
ZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNCYXNlNjRPckJh
c2U2NFVSTENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CisgICAgc2tpcEV4YWN0bHk8Q2hhcmFj
dGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz0nKTsKKyAgICBza2lwRXhhY3RseTxDaGFyYWN0ZXJU
eXBlPihwYXJzaW5nQnVmZmVyLCAnPScpOwogCi0gICAgaWYgKHBvc2l0aW9uID09IGJlZ2luSGFz
aFZhbHVlKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gYmVnaW5IYXNoVmFs
dWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRW5jb2RlZFJl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGFsZ29yaXRobSwgU3RyaW5nKGJlZ2luSGFzaFZh
bHVlLCBwb3NpdGlvbiAtIGJlZ2luSGFzaFZhbHVlKSB9OworICAgIHJldHVybiBFbmNvZGVkUmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgU3RyaW5nKGJlZ2luSGFzaFZh
bHVlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhhc2hWYWx1ZSkgfTsKIH0KIAot
T3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVk
Q3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBVQ2hhciomIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
KQorT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNv
ZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFyc2lu
Z0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdElt
cGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdl
c3RJbXBsKHBhcnNpbmdCdWZmZXIpOwogfQogCi1PcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExD
aGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpCitPcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmlu
Z1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBwYXJz
ZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChiZWdpbiwgZW5kKTsKKyAgICByZXR1cm4g
cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwocGFyc2luZ0J1ZmZlcik7CiB9CiAK
IE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0JiBlbmNvZGVkRGlnZXN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NiwxMSArNjYsMTEgQEAgc3RydWN0IEVuY29kZWRSZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlcwogICAgIFN0cmluZyBkaWdlc3Q7CiB9OwogCi1PcHRpb25hbDxSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBVQ2hh
ciomIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKLU9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4s
IGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsK
K09wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGlj
RGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CiAKLU9wdGlvbmFsPEVuY29kZWRS
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdl
c3QoY29uc3QgVUNoYXIqJiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7Ci1PcHRpb25hbDxFbmNv
ZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGlj
RGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8
RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOworT3B0aW9uYWw8RW5jb2Rl
ZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOwogCiBPcHRpb25hbDxSZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdl
c3QoY29uc3QgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCYpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VJbnRlZ3JpdHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUludGVncml0eS5jcHAJKHJldmlz
aW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUludGVncml0
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJQYXJzaW5n
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgiCiAj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2lu
Z0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDcgKzUxLDcgQEAgcHVi
bGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ2hhcmFjdGVy
VHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCisgICAgYm9vbCBvcGVy
YXRvcigpKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIp
CiAgICAgewogICAgICAgICAvLyBJbml0aWFsaXplIGhhc2hlcyB0byBiZSBzb21ldGhpbmcgb3Ro
ZXIgV1RGOjpudWxsb3B0LCB0byBpbmRpY2F0ZQogICAgICAgICAvLyB0aGF0IGF0IGxlYXN0IG9u
ZSB0b2tlbiB3YXMgc2VlbiwgYW5kIHRodXMgc2V0dGluZyB0aGUgZW1wdHkgZmxhZwpAQCAtNTgs
MTkgKzU5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX2RpZ2VzdHMpCiAgICAgICAgICAg
ICBtX2RpZ2VzdHMgPSBWZWN0b3I8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4g
eyB9OwogCi0gICAgICAgIGF1dG8gZGlnZXN0ID0gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdChwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgYXV0byBkaWdlc3QgPSBwYXJzZUVuY29kZWRD
cnlwdG9ncmFwaGljRGlnZXN0KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIWRpZ2VzdCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyBUaGUgc3BlYyBhbGxvd3Mg
Zm9yIG9wdGlvbnMgZm9sbG93aW5nIHRoZSBkaWdlc3QsIGJ1dCBzbyBmYXIsIG5vCiAgICAgICAg
IC8vIHNwZWNpZmljIG9wdGlvbnMgaGF2ZSBiZWVuIHNwZWNpZmllZC4gVGh1cywgd2UganVzdCBw
YXJzZSBhbmQgaWdub3JlCiAgICAgICAgIC8vIHRoZW0uIFRoZWlyIHN5bnRheCBpcyBhICc/JyBm
b2xsb3cgYnkgYW55IG51bWJlciBvZiBWQ0hBUnMuCi0gICAgICAgIGlmIChza2lwRXhhY3RseTxD
aGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPycpKQotICAgICAgICAgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzVkNIQVI+KHBvc2l0aW9uLCBlbmQpOworICAgICAgICBpZiAoc2tp
cEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz8nKSkKKyAgICAgICAgICAg
IHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1ZDSEFSPihwYXJzaW5nQnVmZmVyKTsKIAogICAg
ICAgICAvLyBBZnRlciB0aGUgYmFzZTY0IHZhbHVlIGFuZCBvcHRpb25zLCB0aGUgY3VycmVudCBj
aGFyYWN0ZXIgcG9pbnRlZCB0byBieSBwb3NpdGlvbgogICAgICAgICAvLyBzaG91bGQgZWl0aGVy
IGJlIHRoZSBlbmQgb3IgYSBzcGFjZS4KLSAgICAgICAgaWYgKHBvc2l0aW9uICE9IGVuZCAmJiAh
aXNIVE1MU3BhY2UoKnBvc2l0aW9uKSkKKyAgICAgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0RW5k
KCkgJiYgIWlzSFRNTFNwYWNlKCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICBtX2RpZ2VzdHMtPmFwcGVuZChXVEZNb3ZlKCpkaWdlc3QpKTsKQEAg
LTg0LDE3ICs4NSwxNCBAQCBwcml2YXRlOgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdE9uU3Bh
Y2VzKGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQs
IEZ1bmN0b3ImJiBmdW5jdG9yKQorc3RhdGljIGlubGluZSB2b2lkIHNwbGl0T25TcGFjZXMoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyLCBGdW5jdG9yJiYg
ZnVuY3RvcikKIHsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwb3NpdGlvbiA9IGJlZ2luOwor
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0hUTUxTcGFjZT4ocGFyc2luZ0J1ZmZlcik7
CiAKLSAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNIVE1MU3BhY2U+KHBvc2l0aW9uLCBl
bmQpOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGlmICghZnVuY3Rv
cihwb3NpdGlvbiwgZW5kKSkKLSAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBp
c05vdEhUTUxTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0KLSAgICAgICAgc2tpcFdoaWxlPENoYXJh
Y3RlclR5cGUsIGlzSFRNTFNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICB3aGlsZSAocGFyc2lu
Z0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFmdW5jdG9y
KHBhcnNpbmdCdWZmZXIpKQorICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlz
Tm90SFRNTFNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzSFRNTFNwYWNlPihwYXJzaW5nQnVmZmVyKTsKICAgICB9CiB9CiAKQEAgLTEwNSwx
MSArMTAzLDExIEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8RW5jb2RlZFJlc291cmNlQ3IKIAog
ICAgIE9wdGlvbmFsPFZlY3RvcjxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0Pj4g
cmVzdWx0OwogICAgIAotICAgIGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZ0ltcGwgPSAqaW50ZWdy
aXR5TWV0YWRhdGEuaW1wbCgpOwotICAgIGlmIChzdHJpbmdJbXBsLmlzOEJpdCgpKQotICAgICAg
ICBzcGxpdE9uU3BhY2VzKHN0cmluZ0ltcGwuY2hhcmFjdGVyczgoKSwgc3RyaW5nSW1wbC5jaGFy
YWN0ZXJzOCgpICsgc3RyaW5nSW1wbC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0YWRhdGFQYXJzZXI8
TENoYXI+IHsgcmVzdWx0IH0pOwotICAgIGVsc2UKLSAgICAgICAgc3BsaXRPblNwYWNlcyhzdHJp
bmdJbXBsLmNoYXJhY3RlcnMxNigpLCBzdHJpbmdJbXBsLmNoYXJhY3RlcnMxNigpICsgc3RyaW5n
SW1wbC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0YWRhdGFQYXJzZXI8VUNoYXI+IHsgcmVzdWx0IH0p
OworICAgIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKGludGVncml0eU1ldGFkYXRhLCBb
JnJlc3VsdF0gKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJU
eXBlID0gdHlwZW5hbWUgZGVjbHR5cGUocGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7CisK
KyAgICAgICAgc3BsaXRPblNwYWNlcyhwYXJzaW5nQnVmZmVyLCBJbnRlZ3JpdHlNZXRhZGF0YVBh
cnNlcjxDaGFyYWN0ZXJUeXBlPiB7IHJlc3VsdCB9KTsKKyAgICB9KTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9N
YW5pZmVzdFBhcnNlci5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlIDx3
dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFy
YWN0ZXJOYW1lcy5oPgogCkBAIC02NywxMzcgKzY4LDE0MCBAQCBib29sIHBhcnNlTWFuaWZlc3Qo
Y29uc3QgVVJMJiBtYW5pZmVzdFVSCiAgICAgaWYgKCFtYW5pZmVzdFN0cmluZy5zdGFydHNXaXRo
KG1hbmlmZXN0U2lnbmF0dXJlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFN0
cmluZ1ZpZXcgbWFuaWZlc3RBZnRlclNpZ25hdHVyZSA9IFN0cmluZ1ZpZXcobWFuaWZlc3RTdHJp
bmcpLnN1YnN0cmluZyhzaXplb2YobWFuaWZlc3RTaWduYXR1cmUpIC0gMSk7Ci0gICAgYXV0byB1
cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBtYW5pZmVzdEFmdGVyU2lnbmF0dXJlLnVwY29udmVydGVk
Q2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
OwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwICsgbWFuaWZlc3RBZnRlclNpZ25hdHVyZS5sZW5n
dGgoKTsKKyAgICBhdXRvIG1hbmlmZXN0QWZ0ZXJTaWduYXR1cmUgPSBTdHJpbmdWaWV3KG1hbmlm
ZXN0U3RyaW5nKS5zdWJzdHJpbmcoc2l6ZW9mKG1hbmlmZXN0U2lnbmF0dXJlKSAtIDEpOwogCi0g
ICAgaWYgKHAgPCBlbmQgJiYgKnAgIT0gJyAnICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJ1xuJyAm
JiAqcCAhPSAnXHInKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRklYTUU6IFRoaXMg
cGFyc2VyIGNvdWxkIGJlIG11Y2ggY2xlYXJlciBpZiBpdCBhZG9wdGVkIHNvbWUgb2YgdGhlIGNv
bW1vbiBwYXJzaW5nIHV0aWxpdGllcworICAgIC8vIGZvciBza2lwcGluZyBhbmQgY29tcGFyaW5n
LgogCi0gICAgLy8gU2tpcCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgotICAgIHdoaWxlIChwIDwg
ZW5kICYmICpwICE9ICdccicgJiYgKnAgIT0gJ1xuJykKLSAgICAgICAgcCsrOwotCi0gICAgd2hp
bGUgKDEpIHsKLSAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlCi0gICAgICAgIHdoaWxlIChwIDwg
ZW5kICYmICgqcCA9PSAnXG4nIHx8ICpwID09ICdccicgfHwgKnAgPT0gJyAnIHx8ICpwID09ICdc
dCcpKQotICAgICAgICAgICAgcCsrOwotICAgICAgICAKLSAgICAgICAgaWYgKHAgPT0gZW5kKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBVQ2hhciogbGluZVN0
YXJ0ID0gcDsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbmQgdGhlIGVuZCBvZiB0aGUgbGluZQot
ICAgICAgICB3aGlsZSAocCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCi0gICAg
ICAgICAgICBwKys7Ci0gICAgICAgIAotICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgY29t
bWVudAotICAgICAgICBpZiAoKmxpbmVTdGFydCA9PSAnIycpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEdldCByaWQgb2YgdHJhaWxpbmcgd2hpdGVzcGFjZQot
ICAgICAgICBjb25zdCBVQ2hhciogdG1wID0gcCAtIDE7Ci0gICAgICAgIHdoaWxlICh0bXAgPiBs
aW5lU3RhcnQgJiYgKCp0bXAgPT0gJyAnIHx8ICp0bXAgPT0gJ1x0JykpCi0gICAgICAgICAgICB0
bXAtLTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBsaW5lKGxpbmVTdGFydCwgdG1wIC0gbGlu
ZVN0YXJ0ICsgMSk7Ci0KLSAgICAgICAgaWYgKGxpbmUgPT0gIkNBQ0hFOiIpIAotICAgICAgICAg
ICAgbW9kZSA9IEV4cGxpY2l0OwotICAgICAgICBlbHNlIGlmIChsaW5lID09ICJGQUxMQkFDSzoi
KQotICAgICAgICAgICAgbW9kZSA9IEZhbGxiYWNrOwotICAgICAgICBlbHNlIGlmIChsaW5lID09
ICJORVRXT1JLOiIpCi0gICAgICAgICAgICBtb2RlID0gT25saW5lQWxsb3dsaXN0OwotICAgICAg
ICBlbHNlIGlmIChsaW5lLmVuZHNXaXRoKCc6JykpCi0gICAgICAgICAgICBtb2RlID0gVW5rbm93
bjsKLSAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBVbmtub3duKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gRXhwbGljaXQgfHwgbW9kZSA9PSBPbmxpbmVB
bGxvd2xpc3QpIHsKLSAgICAgICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVycyA9
IFN0cmluZ1ZpZXcobGluZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgICAgICBj
b25zdCBVQ2hhciogcCA9IHVwY29udmVydGVkTGluZUNoYXJhY3RlcnM7Ci0gICAgICAgICAgICBj
b25zdCBVQ2hhciogbGluZUVuZCA9IHAgKyBsaW5lLmxlbmd0aCgpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTCBmcm9t
IHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCi0gICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVF
bmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnICcpIAotICAgICAgICAgICAgICAgIHArKzsKKyAg
ICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcobWFuaWZlc3RBZnRlclNpZ25h
dHVyZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICBhdXRvIHAgPSBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIGF1dG8gZW5kID0gcGFyc2luZ0J1ZmZlci5lbmQo
KTsKIAotICAgICAgICAgICAgaWYgKG1vZGUgPT0gT25saW5lQWxsb3dsaXN0ICYmIHAgLSB1cGNv
bnZlcnRlZExpbmVDaGFyYWN0ZXJzID09IDEgJiYgbGluZVswXSA9PSAnKicpIHsKLSAgICAgICAg
ICAgICAgICAvLyBXaWxkY2FyZCB3YXMgZm91bmQuCi0gICAgICAgICAgICAgICAgbWFuaWZlc3Qu
YWxsb3dBbGxOZXR3b3JrUmVxdWVzdHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQorICAgICAgICBpZiAocCA8IGVuZCAmJiAqcCAhPSAnICcgJiYgKnAg
IT0gJ1x0JyAmJiAqcCAhPSAnXG4nICYmICpwICE9ICdccicpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgICAgIFVSTCB1cmwobWFuaWZlc3RVUkwsIGxpbmUuc3Vic3RyaW5n
KDAsIHAgLSB1cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgLy8gU2tpcCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorICAgICAgICB3aGlsZSAocCA8
IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCisgICAgICAgICAgICBwKys7CiAKLSAg
ICAgICAgICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHVybC5wcm90b2NvbCgpLCBt
YW5pZmVzdFVSTC5wcm90b2NvbCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZQorICAgICAgICAg
ICAgd2hpbGUgKHAgPCBlbmQgJiYgKCpwID09ICdcbicgfHwgKnAgPT0gJ1xyJyB8fCAqcCA9PSAn
ICcgfHwgKnAgPT0gJ1x0JykpCisgICAgICAgICAgICAgICAgcCsrOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAobW9kZSA9PSBFeHBsaWNpdCAmJiBtYW5pZmVzdFVSTC5wcm90b2NvbElz
KCJodHRwcyIpICYmICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RVUkwsIHVy
bCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocCA9PSBlbmQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICht
b2RlID09IEV4cGxpY2l0KQotICAgICAgICAgICAgICAgIG1hbmlmZXN0LmV4cGxpY2l0VVJMcy5h
ZGQodXJsLnN0cmluZygpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtYW5p
ZmVzdC5vbmxpbmVBbGxvd2VkVVJMcy5hcHBlbmQodXJsKTsKLSAgICAgICAgICAgIAotICAgICAg
ICB9IGVsc2UgaWYgKG1vZGUgPT0gRmFsbGJhY2spIHsKLSAgICAgICAgICAgIGF1dG8gdXBjb252
ZXJ0ZWRMaW5lQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcobGluZSkudXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzKCk7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogcCA9IHVwY29udmVydGVkTGluZUNoYXJh
Y3RlcnM7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogbGluZUVuZCA9IHAgKyBsaW5lLmxlbmd0
aCgpOworICAgICAgICAgICAgYXV0byBsaW5lU3RhcnQgPSBwOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIHR3byBVUkxzCi0g
ICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnICcp
IAorICAgICAgICAgICAgLy8gRmluZCB0aGUgZW5kIG9mIHRoZSBsaW5lCisgICAgICAgICAgICB3
aGlsZSAocCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCiAgICAgICAgICAgICAg
ICAgcCsrOwotCi0gICAgICAgICAgICBpZiAocCA9PSBsaW5lRW5kKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVGhlcmUgd2FzIG5vIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUgVVJMcy4KLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgVVJMIG5hbWVzcGFjZVVSTChtYW5pZmVzdFVSTCwgbGluZS5zdWJzdHJpbmcoMCwgcCAt
IHVwY29udmVydGVkTGluZUNoYXJhY3RlcnMpKTsKLSAgICAgICAgICAgIGlmICghbmFtZXNwYWNl
VVJMLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG5h
bWVzcGFjZVVSTC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLQotICAgICAgICAgICAgaWYg
KCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RVUkwsIG5hbWVzcGFjZVVSTCkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIEFsdGhvdWdoIDxo
dHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vZmZsaW5lLmh0bWwjcGFyc2lu
Zy1jYWNoZS1tYW5pZmVzdHM+ICgwNy8wNi8yMDE3KSBzYWlkcwotICAgICAgICAgICAgLy8gdGhh
dCB3ZSBzaG91bGQgYWx3YXlzIHByZWZpeCBtYXRjaCB0aGUgbWFuaWZlc3QgcGF0aCB3ZSBvbmx5
IGRvIHNvIGlmIHRoZSBtYW5pZmVzdCB3YXMgc2VydmVkIHdpdGggYSBub24tCi0gICAgICAgICAg
ICAvLyBzdGFuZGFyZCBIVFRQIENvbnRlbnQtVHlwZSBoZWFkZXIgZm9yIHdlYiBjb21wYXRpYmls
aXR5LgotICAgICAgICAgICAgaWYgKCFhbGxvd0ZhbGxiYWNrTmFtZXNwYWNlT3V0c2lkZU1hbmZl
c3RQYXRoICYmICFuYW1lc3BhY2VVUkwucGF0aCgpLnN0YXJ0c1dpdGgobWFuaWZlc3RQYXRoKSkK
KyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBjb21tZW50CisgICAgICAgICAgICBp
ZiAoKmxpbmVTdGFydCA9PSAnIycpCiAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEdldCByaWQgb2YgdHJhaWxpbmcgd2hpdGVzcGFjZQorICAg
ICAgICAgICAgYXV0byB0bXAgPSBwIC0gMTsKKyAgICAgICAgICAgIHdoaWxlICh0bXAgPiBsaW5l
U3RhcnQgJiYgKCp0bXAgPT0gJyAnIHx8ICp0bXAgPT0gJ1x0JykpCisgICAgICAgICAgICAgICAg
dG1wLS07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZ1ZpZXcgbGluZShsaW5lU3Rh
cnQsIHRtcCAtIGxpbmVTdGFydCArIDEpOworCisgICAgICAgICAgICBpZiAobGluZSA9PSAiQ0FD
SEU6IikKKyAgICAgICAgICAgICAgICBtb2RlID0gRXhwbGljaXQ7CisgICAgICAgICAgICBlbHNl
IGlmIChsaW5lID09ICJGQUxMQkFDSzoiKQorICAgICAgICAgICAgICAgIG1vZGUgPSBGYWxsYmFj
azsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxpbmUgPT0gIk5FVFdPUks6IikKKyAgICAgICAgICAg
ICAgICBtb2RlID0gT25saW5lQWxsb3dsaXN0OworICAgICAgICAgICAgZWxzZSBpZiAobGluZS5l
bmRzV2l0aCgnOicpKQorICAgICAgICAgICAgICAgIG1vZGUgPSBVbmtub3duOworICAgICAgICAg
ICAgZWxzZSBpZiAobW9kZSA9PSBVbmtub3duKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBFeHBsaWNpdCB8fCBtb2RlID09IE9ubGluZUFs
bG93bGlzdCkgeworICAgICAgICAgICAgICAgIGF1dG8gcCA9IGxpbmVTdGFydDsKKyAgICAgICAg
ICAgICAgICBhdXRvIGxpbmVFbmQgPSBwICsgbGluZS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhl
IFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCisgICAgICAgICAgICAgICAgd2hp
bGUgKHAgPCBsaW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKQorICAgICAgICAgICAg
ICAgICAgICBwKys7CisKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBPbmxpbmVBbGxvd2xp
c3QgJiYgcCAtIGxpbmVTdGFydCA9PSAxICYmIGxpbmVbMF0gPT0gJyonKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFdpbGRjYXJkIHdhcyBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgbWFu
aWZlc3QuYWxsb3dBbGxOZXR3b3JrUmVxdWVzdHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBVUkwgdXJs
KG1hbmlmZXN0VVJMLCBsaW5lLnN1YnN0cmluZygwLCBwIC0gbGluZVN0YXJ0KS50b1N0cmluZygp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdXJsLnJl
bW92ZUZyYWdtZW50SWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2woKSwgbWFuaWZlc3RV
UkwucHJvdG9jb2woKSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEV4cGxpY2l0ICYmIG1hbmlmZXN0
VVJMLnByb3RvY29sSXMoImh0dHBzIikgJiYgIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbCht
YW5pZmVzdFVSTCwgdXJsKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gRXhwbGljaXQpCisgICAgICAg
ICAgICAgICAgICAgIG1hbmlmZXN0LmV4cGxpY2l0VVJMcy5hZGQodXJsLnN0cmluZygpKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0Lm9ubGluZUFs
bG93ZWRVUkxzLmFwcGVuZCh1cmwpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSBl
bHNlIGlmIChtb2RlID09IEZhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgYXV0byBwID0gbGlu
ZVN0YXJ0OworICAgICAgICAgICAgICAgIGF1dG8gbGluZUVuZCA9IHAgKyBsaW5lLmxlbmd0aCgp
OworCisgICAgICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRo
ZSB0d28gVVJMcworICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAqcCAhPSAn
XHQnICYmICpwICE9ICcgJykKKyAgICAgICAgICAgICAgICAgICAgcCsrOworCisgICAgICAgICAg
ICAgICAgaWYgKHAgPT0gbGluZUVuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSB3
YXMgbm8gd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSBVUkxzLgorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgVVJMIG5hbWVzcGFjZVVSTChtYW5pZmVzdFVSTCwgbGluZS5zdWJzdHJpbmcoMCwg
cCAtIGxpbmVTdGFydCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFuYW1lc3Bh
Y2VVUkwuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBuYW1lc3BhY2VVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVSTCwg
bmFtZXNwYWNlVVJMKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgICAgICAvLyBBbHRob3VnaCA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2Uvb2ZmbGluZS5odG1sI3BhcnNpbmctY2FjaGUtbWFuaWZlc3RzPiAoMDcvMDYvMjAxNykgc2Fp
ZHMKKyAgICAgICAgICAgICAgICAvLyB0aGF0IHdlIHNob3VsZCBhbHdheXMgcHJlZml4IG1hdGNo
IHRoZSBtYW5pZmVzdCBwYXRoIHdlIG9ubHkgZG8gc28gaWYgdGhlIG1hbmlmZXN0IHdhcyBzZXJ2
ZWQgd2l0aCBhIG5vbi0KKyAgICAgICAgICAgICAgICAvLyBzdGFuZGFyZCBIVFRQIENvbnRlbnQt
VHlwZSBoZWFkZXIgZm9yIHdlYiBjb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgIGlmICgh
YWxsb3dGYWxsYmFja05hbWVzcGFjZU91dHNpZGVNYW5mZXN0UGF0aCAmJiAhbmFtZXNwYWNlVVJM
LnBhdGgoKS5zdGFydHNXaXRoKG1hbmlmZXN0UGF0aCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcg
ZmFsbGJhY2sgbmFtZXNwYWNlIGZyb20gVVJMLgorICAgICAgICAgICAgICAgIHdoaWxlIChwIDwg
bGluZUVuZCAmJiAoKnAgPT0gJ1x0JyB8fCAqcCA9PSAnICcpKQorICAgICAgICAgICAgICAgICAg
ICBwKys7CisKKyAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRp
bmcgdGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCisgICAgICAgICAgICAg
ICAgYXV0byBmYWxsYmFja1N0YXJ0ID0gcDsKKyAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGxp
bmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnICcpCisgICAgICAgICAgICAgICAgICAgIHAr
KzsKKworICAgICAgICAgICAgICAgIFVSTCBmYWxsYmFja1VSTChtYW5pZmVzdFVSTCwgU3RyaW5n
KGZhbGxiYWNrU3RhcnQsIHAgLSBmYWxsYmFja1N0YXJ0KSk7CisgICAgICAgICAgICAgICAgaWYg
KCFmYWxsYmFja1VSTC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGZhbGxiYWNrVVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwor
CisgICAgICAgICAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZl
c3RVUkwsIGZhbGxiYWNrVVJMKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICBtYW5pZmVzdC5mYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KG5hbWVzcGFjZVVSTCwgZmFsbGJhY2tVUkwpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAKLSAgICAgICAgICAg
IC8vIFNraXAgd2hpdGVzcGFjZSBzZXBhcmF0aW5nIGZhbGxiYWNrIG5hbWVzcGFjZSBmcm9tIFVS
TC4KLSAgICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAoKnAgPT0gJ1x0JyB8fCAqcCA9
PSAnICcpKQotICAgICAgICAgICAgICAgIHArKzsKLQotICAgICAgICAgICAgLy8gTG9vayBmb3Ig
d2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSBVUkwgZnJvbSBzdWJzZXF1ZW50IGlnbm9yZWQgdG9r
ZW5zLgotICAgICAgICAgICAgY29uc3QgVUNoYXIqIGZhbGxiYWNrU3RhcnQgPSBwOwotICAgICAg
ICAgICAgd2hpbGUgKHAgPCBsaW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKSAKLSAg
ICAgICAgICAgICAgICBwKys7Ci0KLSAgICAgICAgICAgIFVSTCBmYWxsYmFja1VSTChtYW5pZmVz
dFVSTCwgU3RyaW5nKGZhbGxiYWNrU3RhcnQsIHAgLSBmYWxsYmFja1N0YXJ0KSk7Ci0gICAgICAg
ICAgICBpZiAoIWZhbGxiYWNrVVJMLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGZhbGxiYWNrVVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwot
Ci0gICAgICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVS
TCwgZmFsbGJhY2tVUkwpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICBtYW5pZmVzdC5mYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5hbWVzcGFjZVVS
TCwgZmFsbGJhY2tVUkwpKTsgICAgICAgICAgICAKLSAgICAgICAgfSBlbHNlIAotICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJKHJldmlzaW9uIDI2MzMz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgogI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAKIApAQCAtMjEyLDIyICsyMTMs
MjMgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRpZFJlY2VpdmVIZQogICAgIC8vIFJG
QzI2MTYsIHNlY3Rpb24gNC4yIHNwZWNpZmllcyB0aGF0IGhlYWRlcnMgYXBwZWFyaW5nIG11bHRp
cGxlIHRpbWVzIGNhbgogICAgIC8vIGJlIGNvbWJpbmVkIHdpdGggYSBjb21tYS4gV2FsayB0aGUg
aGVhZGVyIHN0cmluZywgYW5kIHBhcnNlIGVhY2ggY29tbWEKICAgICAvLyBzZXBhcmF0ZWQgY2h1
bmsgYXMgYSBzZXBhcmF0ZSBoZWFkZXIuCi0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmll
dyhoZWFkZXIpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBiZWdp
biA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAg
Y29uc3QgVUNoYXIqIGVuZCA9IGJlZ2luICsgaGVhZGVyLmxlbmd0aCgpOwotICAgIHdoaWxlIChw
b3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQs
ICcsJyk7Ci0KLSAgICAgICAgLy8gaGVhZGVyMSxoZWFkZXIyIE9SIGhlYWRlcjEKLSAgICAgICAg
Ly8gICAgICAgIF4gICAgICAgICAgICAgICAgICBeCi0gICAgICAgIG1fcG9saWNpZXMuYXBwZW5k
KENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmNyZWF0ZSgqdGhpcywgU3RyaW5n
KGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSwgdHlwZSwgcG9saWN5RnJvbSkpOwotCi0gICAgICAg
IC8vIFNraXAgdGhlIGNvbW1hLCBhbmQgYmVnaW4gdGhlIG5leHQgaGVhZGVyIGZyb20gdGhlIGN1
cnJlbnQgcG9zaXRpb24uCi0gICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgKnBvc2l0
aW9uID09ICcsJyk7Ci0gICAgICAgIHNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAn
LCcpOwotICAgICAgICBiZWdpbiA9IHBvc2l0aW9uOwotICAgIH0KKyAgICBXVEY6OnJlYWRDaGFy
YWN0ZXJzRm9yUGFyc2luZyhoZWFkZXIsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAg
ICAgYXV0byBiZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAKKyAgICAgICAg
d2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAg
ICAgICBza2lwVW50aWwocGFyc2luZ0J1ZmZlciwgJywnKTsKKworICAgICAgICAgICAgLy8gaGVh
ZGVyMSxoZWFkZXIyIE9SIGhlYWRlcjEKKyAgICAgICAgICAgIC8vICAgICAgICBeICAgICAgICAg
ICAgICAgICAgXgorICAgICAgICAgICAgbV9wb2xpY2llcy5hcHBlbmQoQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdDo6Y3JlYXRlKCp0aGlzLCBTdHJpbmcoYmVnaW4sIHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSwgdHlwZSwgcG9saWN5RnJvbSkpOworCisgICAgICAg
ICAgICAvLyBTa2lwIHRoZSBjb21tYSwgYW5kIGJlZ2luIHRoZSBuZXh0IGhlYWRlciBmcm9tIHRo
ZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICAgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRF
bmQoKSB8fCAqcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09ICcsJyk7CisgICAgICAgICAgICBz
a2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnLCcpOworICAgICAgICAgICAgYmVnaW4gPSBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICAKIAogICAgIGlm
IChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIGFwcGx5UG9saWN5VG9TY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcAkocmV2
aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE1ICszMiwxNiBA
QAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5Q29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNp
bmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpc0RpcmVj
dGl2ZU5hbWVDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyBib29sIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMp
CiB7CiAgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnLSc7CiB9CiAK
LXN0YXRpYyBib29sIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzRGlyZWN0aXZlVmFsdWVDaGFy
YWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBpc0FTQ0lJU3BhY2UoYykgfHwg
KGMgPj0gMHgyMSAmJiBjIDw9IDB4N2UpOyAvLyBXaGl0ZXNwYWNlICsgVkNIQVIKIH0KQEAgLTMz
MywyMjQgKzMzNCwyMTggQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
OgogICAgIGlmIChwb2xpY3kuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHBvbGljeSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hh
ciogZW5kID0gcG9zaXRpb24gKyBwb2xpY3kubGVuZ3RoKCk7Ci0KLSAgICB3aGlsZSAocG9zaXRp
b24gPCBlbmQpIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGRpcmVjdGl2ZUJlZ2luID0gcG9zaXRp
b247Ci0gICAgICAgIHNraXBVbnRpbDxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJzsnKTsKLQotICAg
ICAgICBTdHJpbmcgbmFtZSwgdmFsdWU7Ci0gICAgICAgIGlmIChwYXJzZURpcmVjdGl2ZShkaXJl
Y3RpdmVCZWdpbiwgcG9zaXRpb24sIG5hbWUsIHZhbHVlKSkgewotICAgICAgICAgICAgQVNTRVJU
KCFuYW1lLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZCkgewotICAgICAgICAgICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwb2xpY3lGcm9tID09IENvbnRl
bnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SFRUUEVxdWl2TWV0YSkgewotICAgICAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZU5hbWVzOjpzYW5kYm94KQotICAgICAgICAgICAgICAgICAgICB8fCBlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjpyZXBvcnRVUkkpCi0gICAgICAgICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1lQW5j
ZXN0b3JzKSkgewotICAgICAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGly
ZWN0aXZlSW5IVFRQRXF1aXZNZXRhKG5hbWUpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhwb2xpY3ksIFsmXShhdXRvIHBh
cnNpbmdCdWZmZXIpIHsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBhdXRvIGRpcmVjdGl2ZUJlZ2luID0gcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZmZXIs
ICc7Jyk7CisKKyAgICAgICAgICAgIGlmIChhdXRvIGRpcmVjdGl2ZSA9IHBhcnNlRGlyZWN0aXZl
KFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBkaXJlY3RpdmVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpIH0pKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFkaXJlY3RpdmUtPm5hbWUuaXNF
bXB0eSgpKTsKKyAgICAgICAgICAgICAgICBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJp
dHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBv
bGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpIVFRQRXF1aXZN
ZXRhKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRp
cmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRi
b3gpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRp
cmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9y
dFVSSSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
ZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJh
bWVBbmNlc3RvcnMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJ
bnZhbGlkRGlyZWN0aXZlSW5IVFRQRXF1aXZNZXRhKGRpcmVjdGl2ZS0+bmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OlBvbGljeUZyb206OkluaGVyaXRlZEZvclBsdWdpbkRvY3VtZW50KSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICYmICFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS0+bmFtZSwg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lG
cm9tOjpJbmhlcml0ZWRGb3JQbHVnaW5Eb2N1bWVudCkgewotICAgICAgICAgICAgICAgIGlmICgh
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6cGx1Z2luVHlwZXMpCi0gICAgICAgICAgICAgICAgICAgICYmICFlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpy
ZXBvcnRVUkkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBhZGREaXJlY3RpdmUoV1RGTW92ZSgqZGlyZWN0aXZlKSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBhZGREaXJlY3RpdmUobmFtZSwgdmFsdWUpOwotICAgICAgICB9CiAKLSAgICAgICAg
QVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJzsnKTsKLSAgICAgICAgc2tp
cEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0gICAgfQorICAgICAgICAgICAg
QVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciA9PSAnOycpOwor
ICAgICAgICAgICAgc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJzsnKTsKKyAgICAgICAgfQor
ICAgIH0pOwogfQogCiAvLyBkaXJlY3RpdmUgICAgICAgICA9ICpXU1AgWyBkaXJlY3RpdmUtbmFt
ZSBbIFdTUCBkaXJlY3RpdmUtdmFsdWUgXSBdCiAvLyBkaXJlY3RpdmUtbmFtZSAgICA9IDEqKCBB
TFBIQSAvIERJR0lUIC8gIi0iICkKIC8vIGRpcmVjdGl2ZS12YWx1ZSAgID0gKiggV1NQIC8gPFZD
SEFSIGV4Y2VwdCAiOyI+ICkKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVu
ZCwgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gYXV0byBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZURp
cmVjdGl2ZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIp
IC0+IE9wdGlvbmFsPFBhcnNlZERpcmVjdGl2ZT4KIHsKLSAgICBBU1NFUlQobmFtZS5pc0VtcHR5
KCkpOwotICAgIEFTU0VSVCh2YWx1ZS5pc0VtcHR5KCkpOwotCi0gICAgY29uc3QgVUNoYXIqIHBv
c2l0aW9uID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0
aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBh
cnNpbmdCdWZmZXIpOwogCiAgICAgLy8gRW1wdHkgZGlyZWN0aXZlIChlLmcuICI7OzsiKS4gRXhp
dCBlYXJseS4KLSAgICBpZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIGNvbnN0IFVDaGFyKiBuYW1lQmVnaW4gPSBwb3NpdGlvbjsKLSAgICBza2lw
V2hpbGU8VUNoYXIsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Cisg
ICAgYXV0byBuYW1lQmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdo
aWxlPENoYXJhY3RlclR5cGUsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZl
cik7CiAKICAgICAvLyBUaGUgZGlyZWN0aXZlLW5hbWUgbXVzdCBiZSBub24tZW1wdHkuCi0gICAg
aWYgKG5hbWVCZWdpbiA9PSBwb3NpdGlvbikgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlz
Tm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydFVu
c3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJlZ2lu
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobmFtZUJlZ2luID09IHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKSkgeworICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNO
b3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0VW5z
dXBwb3J0ZWREaXJlY3RpdmUoU3RyaW5nKG5hbWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpIC0gbmFtZUJlZ2luKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQog
Ci0gICAgbmFtZSA9IFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJlZ2luKTsKKyAg
ICBhdXRvIG5hbWUgPSBTdHJpbmcobmFtZUJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkg
LSBuYW1lQmVnaW4pOwogCi0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFBh
cnNlZERpcmVjdGl2ZSB7IFdURk1vdmUobmFtZSksIHsgfSB9OwogCi0gICAgaWYgKCFza2lwRXhh
Y3RseTxVQ2hhciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKSkgewotICAgICAgICBza2lw
V2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIG1f
cG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0
aW9uIC0gbmFtZUJlZ2luKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcikpIHsKKyAg
ICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1
ZmZlcik7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmlu
ZyhuYW1lQmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIG5hbWVCZWdpbikpOworICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlw
ZSwgaXNBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKIAotICAgIGNvbnN0IFVDaGFyKiB2YWx1
ZUJlZ2luID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0RpcmVjdGl2ZVZhbHVl
Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIHZhbHVlQmVnaW4gPSBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzRGlyZWN0
aXZlVmFsdWVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgaWYgKHBvc2l0aW9uICE9
IGVuZCkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlVmFsdWVDaGFy
YWN0ZXIobmFtZSwgU3RyaW5nKHZhbHVlQmVnaW4sIGVuZCAtIHZhbHVlQmVnaW4pKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKSB7CisgICAg
ICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihuYW1lLCBT
dHJpbmcodmFsdWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5lbmQoKSAtIHZhbHVlQmVnaW4pKTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICAvLyBUaGUgZGlyZWN0aXZl
LXZhbHVlIG1heSBiZSBlbXB0eS4KLSAgICBpZiAodmFsdWVCZWdpbiA9PSBwb3NpdGlvbikKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHZhbHVlQmVnaW4gPT0gcGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpKQorICAgICAgICByZXR1cm4gUGFyc2VkRGlyZWN0aXZlIHsgV1RGTW92ZShuYW1l
KSwgeyB9IH07CiAKLSAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZUJlZ2luLCBwb3NpdGlvbiAtIHZh
bHVlQmVnaW4pOwotICAgIHJldHVybiB0cnVlOworICAgIGF1dG8gdmFsdWUgPSBTdHJpbmcodmFs
dWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gdmFsdWVCZWdpbik7CisgICAgcmV0
dXJuIFBhcnNlZERpcmVjdGl2ZSB7IFdURk1vdmUobmFtZSksIFdURk1vdmUodmFsdWUpIH07CiB9
CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBvcnRV
UkkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZVJlcG9ydFVSSShQYXJzZWREaXJlY3Rp
dmUmJiBkaXJlY3RpdmUpCiB7CiAgICAgaWYgKCFtX3JlcG9ydFVSSXMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAg
bV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZS5uYW1lKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFs
dWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9
IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9uICsgdmFsdWUubGVu
Z3RoKCk7CisgICAgV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoZGlyZWN0aXZlLnZhbHVl
LCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUg
PSB0eXBlbmFtZSBkZWNsdHlwZShwYXJzaW5nQnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKIAotICAg
IHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVND
SUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVm
ZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlz
QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAgY29uc3QgVUNoYXIqIHVybEJl
Z2luID0gcG9zaXRpb247Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNl
Pihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgIGF1dG8gdXJsQmVnaW4gPSBwYXJzaW5nQnVm
ZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNO
b3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKIAotICAgICAgICBpZiAodXJsQmVnaW4gPCBw
b3NpdGlvbikKLSAgICAgICAgICAgIG1fcmVwb3J0VVJJcy5hcHBlbmQodmFsdWUuc3Vic3RyaW5n
KHVybEJlZ2luIC0gY2hhcmFjdGVycywgcG9zaXRpb24gLSB1cmxCZWdpbikpOwotICAgIH0KKyAg
ICAgICAgICAgIGlmICh1cmxCZWdpbiA8IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSkKKyAgICAg
ICAgICAgICAgICBtX3JlcG9ydFVSSXMuYXBwZW5kKGRpcmVjdGl2ZS52YWx1ZS5zdWJzdHJpbmco
dXJsQmVnaW4gLSBiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gdXJsQmVnaW4pKTsK
KyAgICAgICAgfQorICAgIH0pOwogfQogCiAKIHRlbXBsYXRlPGNsYXNzIENTUERpcmVjdGl2ZVR5
cGU+Ci12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldENTUERpcmVj
dGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIHN0ZDo6dW5pcXVl
X3B0cjxDU1BEaXJlY3RpdmVUeXBlPiYgZGlyZWN0aXZlKQordm9pZCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRDU1BEaXJlY3RpdmUoUGFyc2VkRGlyZWN0aXZlJiYgZGly
ZWN0aXZlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlwZT4mIGV4aXN0aW5nRGlyZWN0
aXZlKQogewotICAgIGlmIChkaXJlY3RpdmUpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVw
bGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgIGlmIChleGlzdGluZ0RpcmVjdGl2ZSkgeworICAg
ICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoZGlyZWN0aXZlLm5hbWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRpcmVjdGl2ZSA9IG1ha2VVbmlxdWU8Q1NQRGly
ZWN0aXZlVHlwZT4oKnRoaXMsIG5hbWUsIHZhbHVlKTsKKyAgICBleGlzdGluZ0RpcmVjdGl2ZSA9
IG1ha2VVbmlxdWU8Q1NQRGlyZWN0aXZlVHlwZT4oKnRoaXMsIFdURk1vdmUoZGlyZWN0aXZlLm5h
bWUpLCBXVEZNb3ZlKGRpcmVjdGl2ZS52YWx1ZSkpOwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgc2FuZGJveFBvbGljeSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTGlzdDo6YXBwbHlTYW5kYm94UG9saWN5KFBhcnNlZERpcmVjdGl2ZSYmIGRp
cmVjdGl2ZSkKIHsKICAgICBpZiAobV9yZXBvcnRPbmx5KSB7Ci0gICAgICAgIG1fcG9saWN5LnJl
cG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKG5hbWUpOworICAgICAgICBtX3Bv
bGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShkaXJlY3RpdmUubmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1faGF2ZVNhbmRib3hQb2xpY3kp
IHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAg
ICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoZGlyZWN0aXZlLm5hbWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1faGF2ZVNhbmRib3hQb2xpY3kgPSB0cnVlOwog
ICAgIFN0cmluZyBpbnZhbGlkVG9rZW5zOwotICAgIG1fcG9saWN5LmVuZm9yY2VTYW5kYm94Rmxh
Z3MoU2VjdXJpdHlDb250ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koc2FuZGJveFBvbGljeSwgaW52
YWxpZFRva2VucykpOworICAgIG1fcG9saWN5LmVuZm9yY2VTYW5kYm94RmxhZ3MoU2VjdXJpdHlD
b250ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koV1RGTW92ZShkaXJlY3RpdmUudmFsdWUpLCBpbnZh
bGlkVG9rZW5zKSk7CiAgICAgaWYgKCFpbnZhbGlkVG9rZW5zLmlzTnVsbCgpKQogICAgICAgICBt
X3BvbGljeS5yZXBvcnRJbnZhbGlkU2FuZGJveEZsYWdzKGludmFsaWRUb2tlbnMpOwogfQogCi12
b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldFVwZ3JhZGVJbnNlY3Vy
ZVJlcXVlc3RzKGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdDo6c2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMoUGFyc2VkRGlyZWN0aXZl
JiYgZGlyZWN0aXZlKQogewogICAgIGlmIChtX3JlcG9ydE9ubHkpIHsKLSAgICAgICAgbV9wb2xp
Y3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUobmFtZSk7CisgICAgICAg
IG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKFdURk1vdmUo
ZGlyZWN0aXZlLm5hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV91cGdy
YWRlSW5zZWN1cmVSZXF1ZXN0cykgewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVE
aXJlY3RpdmUobmFtZSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2
ZShXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
bV91cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyA9IHRydWU7CiAgICAgbV9wb2xpY3kuc2V0VXBncmFk
ZUluc2VjdXJlUmVxdWVzdHModHJ1ZSk7CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdDo6c2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0Qmxv
Y2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKFBhcnNlZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkKIHsK
ICAgICBpZiAobV9oYXNCbG9ja0FsbE1peGVkQ29udGVudERpcmVjdGl2ZSkgewotICAgICAgICBt
X3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CisgICAgICAgIG1fcG9saWN5
LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgbV9oYXNCbG9ja0FsbE1peGVkQ29udGVudERpcmVjdGl2
ZSA9IHRydWU7CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6
YWRkRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3Zv
aWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWRkRGlyZWN0aXZlKFBhcnNl
ZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkKIHsKLSAgICBBU1NFUlQoIW5hbWUuaXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQoIWRpcmVjdGl2ZS5uYW1lLmlzRW1wdHkoKSk7CiAKLSAgICBpZiAoZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6ZGVmYXVsdFNyYykpIHsKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2RlZmF1bHRTcmMpOwor
ICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZGVmYXVsdFNyYykpIHsKKyAgICAgICAgc2V0Q1NQ
RGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1v
dmUoZGlyZWN0aXZlKSwgbV9kZWZhdWx0U3JjKTsKICAgICAgICAgbV9wb2xpY3kuYWRkSGFzaEFs
Z29yaXRobXNGb3JJbmxpbmVTY3JpcHRzKG1fZGVmYXVsdFNyYy0+aGFzaEFsZ29yaXRobXNVc2Vk
KCkpOwogICAgICAgICBtX3BvbGljeS5hZGRIYXNoQWxnb3JpdGhtc0ZvcklubGluZVN0eWxlc2hl
ZXRzKG1fZGVmYXVsdFNyYy0+aGFzaEFsZ29yaXRobXNVc2VkKCkpOwotICAgIH0gZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6c2NyaXB0U3JjKSkgewotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fc2NyaXB0U3Jj
KTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUs
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzY3JpcHRTcmMpKSB7CisgICAg
ICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0
aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fc2NyaXB0U3JjKTsKICAgICAgICAgbV9wb2xpY3ku
YWRkSGFzaEFsZ29yaXRobXNGb3JJbmxpbmVTY3JpcHRzKG1fc2NyaXB0U3JjLT5oYXNoQWxnb3Jp
dGhtc1VzZWQoKSk7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUs
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNyYykpIHsKLSAgICAg
ICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3Rp
dmU+KG5hbWUsIHZhbHVlLCBtX3N0eWxlU3JjKTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZU5hbWVzOjpzdHlsZVNyYykpIHsKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9zdHls
ZVNyYyk7CiAgICAgICAgIG1fcG9saWN5LmFkZEhhc2hBbGdvcml0aG1zRm9ySW5saW5lU3R5bGVz
aGVldHMobV9zdHlsZVNyYy0+aGFzaEFsZ29yaXRobXNVc2VkKCkpOwotICAgIH0gZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6b2JqZWN0U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX29iamVjdFNyYyk7
Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJhbWVTcmMpKSB7CisgICAgfSBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVOYW1lczo6b2JqZWN0U3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwg
bV9vYmplY3RTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0
aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZVNyYykp
IHsKICAgICAgICAgLy8gRklYTUU6IExvZyB0byBjb25zb2xlICJUaGUgZnJhbWUtc3JjIGRpcmVj
dGl2ZSBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIGNoaWxkLXNyYyBkaXJlY3RpdmUgaW5zdGVhZC4i
CiAgICAgICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NTc3Mz4uCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9mcmFtZVNyYyk7Ci0gICAgfSBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZU5hbWVzOjppbWdTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1faW1nU3JjKTsK
LSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmb250U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZl
PENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBt
X2ZvbnRTcmMpOworICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZyYW1lU3JjKTsKKyAg
ICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjppbWdTcmMpKQorICAgICAgICBzZXRDU1BE
aXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92
ZShkaXJlY3RpdmUpLCBtX2ltZ1NyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6
OmZvbnRTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZvbnRTcmMpOwogI2lm
IEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjptYW5p
ZmVzdFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9tYW5pZmVzdFNyYyk7CisgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6Om1hbmlmZXN0U3JjKSkKKyAgICAgICAgc2V0Q1NQRGly
ZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUo
ZGlyZWN0aXZlKSwgbV9tYW5pZmVzdFNyYyk7CiAjZW5kaWYKLSAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVz
OjptZWRpYVNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9tZWRpYVNyYyk7Ci0gICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVOYW1lczo6Y29ubmVjdFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9jb25u
ZWN0U3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjaGlsZFNyYykpCi0gICAgICAgIHNldENT
UERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1l
LCB2YWx1ZSwgbV9jaGlsZFNyYyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9ybUFjdGlvbikp
Ci0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9mb3JtQWN0aW9uKTsKLSAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjpiYXNlVVJJKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2Jhc2VVUkkpOwotICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTmFtZXM6OmZyYW1lQW5jZXN0b3JzKSkgeworICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjptZWRpYVNyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fbWVk
aWFTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjb25uZWN0U3JjKSkKKyAg
ICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJl
Y3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9jb25uZWN0U3JjKTsKKyAgICBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6Y2hpbGRTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUp
LCBtX2NoaWxkU3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVj
dGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9ybUFjdGlv
bikpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fZm9ybUFjdGlvbik7CisgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmJhc2VVUkkpKQorICAgICAgICBzZXRDU1BEaXJlY3Rp
dmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJl
Y3RpdmUpLCBtX2Jhc2VVUkkpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
ZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFt
ZUFuY2VzdG9ycykpIHsKICAgICAgICAgaWYgKG1fcmVwb3J0T25seSkgewotICAgICAgICAgICAg
bV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUobmFtZSk7Cisg
ICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9k
ZShkaXJlY3RpdmUubmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3Rp
dmU+KG5hbWUsIHZhbHVlLCBtX2ZyYW1lQW5jZXN0b3JzKTsKLSAgICB9IGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6OnBsdWdpblR5cGVzKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0
eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fcGx1Z2luVHlwZXMpOwot
ICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRib3gpKQotICAgICAgICBhcHBseVNhbmRib3hQb2xp
Y3kobmFtZSwgdmFsdWUpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFt
ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCi0gICAg
ICAgIHBhcnNlUmVwb3J0VVJJKG5hbWUsIHZhbHVlKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjp1
cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCi0gICAgICAgIHNldFVwZ3JhZGVJbnNlY3VyZVJlcXVl
c3RzKG5hbWUpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmJsb2NrQWxsTWl4ZWRDb250ZW50KSkK
LSAgICAgICAgc2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKG5hbWUpOworICAgICAgICBz
ZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4o
V1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZyYW1lQW5jZXN0b3JzKTsKKyAgICB9IGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxD
b250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZl
KSwgbV9wbHVnaW5UeXBlcyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShk
aXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRi
b3gpKQorICAgICAgICBhcHBseVNhbmRib3hQb2xpY3koV1RGTW92ZShkaXJlY3RpdmUpKTsKKyAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKSkKKyAgICAgICAgcGFyc2VS
ZXBvcnRVUkkoV1RGTW92ZShkaXJlY3RpdmUpKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVO
YW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQorICAgICAgICBzZXRVcGdyYWRlSW5zZWN1
cmVSZXF1ZXN0cyhXVEZNb3ZlKGRpcmVjdGl2ZSkpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZU5hbWVzOjpibG9ja0FsbE1peGVkQ29udGVudCkpCisgICAgICAgIHNldEJsb2NrQWxsTWl4ZWRD
b250ZW50RW5hYmxlZChXVEZNb3ZlKGRpcmVjdGl2ZSkpOwogICAgIGVsc2UKLSAgICAgICAgbV9w
b2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUobmFtZSk7CisgICAgICAgIG1fcG9saWN5
LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFdURk1vdmUoZGlyZWN0aXZlLm5hbWUpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaAko
cmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxNiArODksMTkg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlKGNvbnN0IFN0cmluZyYsIENvbnRl
bnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbSk7CiAKLSAgICBib29sIHBhcnNlRGlyZWN0aXZl
KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBuYW1lLCBTdHJp
bmcmIHZhbHVlKTsKLSAgICB2b2lkIHBhcnNlUmVwb3J0VVJJKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBwYXJzZVBsdWdpblR5cGVzKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBhZGREaXJlY3RpdmUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIGFwcGx5
U2FuZGJveFBvbGljeShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc2FuZGJveFBv
bGljeSk7Ci0gICAgdm9pZCBzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhjb25zdCBTdHJpbmcm
IG5hbWUpOwotICAgIHZvaWQgc2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKGNvbnN0IFN0
cmluZyYgbmFtZSk7CisgICAgc3RydWN0IFBhcnNlZERpcmVjdGl2ZSB7CisgICAgICAgIFN0cmlu
ZyBuYW1lOworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgfTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxQYXJzZWREaXJlY3RpdmU+IHBhcnNlRGlyZWN0
aXZlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOworICAgIHZvaWQgcGFyc2VS
ZXBvcnRVUkkoUGFyc2VkRGlyZWN0aXZlJiYpOworICAgIHZvaWQgYWRkRGlyZWN0aXZlKFBhcnNl
ZERpcmVjdGl2ZSYmKTsKKyAgICB2b2lkIGFwcGx5U2FuZGJveFBvbGljeShQYXJzZWREaXJlY3Rp
dmUmJik7CisgICAgdm9pZCBzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhQYXJzZWREaXJlY3Rp
dmUmJik7CisgICAgdm9pZCBzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQoUGFyc2VkRGly
ZWN0aXZlJiYpOwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIENTUERpcmVjdGl2ZVR5cGU+Ci0gICAg
dm9pZCBzZXRDU1BEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlwZT4mKTsKKyAgICB2b2lkIHNldENT
UERpcmVjdGl2ZShQYXJzZWREaXJlY3RpdmUmJiwgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2
ZVR5cGU+Jik7CiAKICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZl
KiBvcGVyYXRpdmVEaXJlY3RpdmUoQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVj
dGl2ZSopIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5j
cHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDEwICszMSwxMiBAQAogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxp
c3QuaCIKICNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpc01lZGlhVHlwZUNoYXJhY3Rl
cihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBib29s
IGlzTWVkaWFUeXBlQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gIWlz
QVNDSUlTcGFjZShjKSAmJiBjICE9ICcvJzsKIH0KQEAgLTUyLDYyICs1NCw2MSBAQCBib29sIENv
bnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjCiAKIHZvaWQgQ29udGVudFNlY3VyaXR5
UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlOjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewot
ICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFj
dGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3Qg
VUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGJlZ2luICsg
dmFsdWUubGVuZ3RoKCk7Ci0KICAgICAvLyAncGx1Z2luLXR5cGVzIF9fX187JyBPUiAncGx1Z2lu
LXR5cGVzOycKICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRpcmVjdGl2ZUxp
c3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXModmFsdWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIC8v
IF9fX19fIE9SIF9fX19fbWltZTEvbWltZTEKLSAgICAgICAgLy8gXiAgICAgICAgXgotICAgICAg
ICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAg
IGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8g
bWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8gXgotICAgICAgICBiZWdpbiA9IHBv
c2l0aW9uOwotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc01lZGlhVHlwZUNoYXJh
Y3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNO
b3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3Qo
KS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlv
biAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAg
ICBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1
ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlwZW5hbWUgZGVjbHR5cGUo
cGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7CiAKLSAgICAgICAgLy8gbWltZTEvbWltZTEg
bWltZTIvbWltZTIKLSAgICAgICAgLy8gICAgICBeCi0gICAgICAgIGlmICghc2tpcEV4YWN0bHk8
VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJykpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hh
ciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVjdGl2
ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBw
b3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorICAg
ICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAg
ICAgICAgICAgIC8vIF9fX19fIE9SIF9fX19fbWltZTEvbWltZTEKKyAgICAgICAgICAgIC8vIF4g
ICAgICAgIF4KKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3Bh
Y2U+KHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIG1pbWUxL21pbWUx
IG1pbWUyL21pbWUyCisgICAgICAgICAgICAvLyBeCisgICAgICAgICAgICBhdXRvIGJlZ2luID0g
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseTxD
aGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcikpIHsKKyAg
ICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihw
YXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCku
cmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNoYXJh
Y3Rlcj4ocGFyc2luZ0J1ZmZlcik7CisKKyAgICAgICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUy
L21pbWUyCisgICAgICAgICAgICAvLyAgICAgIF4KKyAgICAgICAgICAgIGlmICghc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy8nKSkgeworICAgICAgICAgICAgICAg
IHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIp
OworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlk
UGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdp
bikpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMgorICAgICAgICAgICAgLy8gICAgICAgXgor
ICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNo
YXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hh
cmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAg
ICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0
cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pKTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNraXBXaGlsZTxD
aGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CisKKyAg
ICAgICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyIE9SIG1pbWUxL21pbWUxICBPUiBt
aW1lMS9taW1lMS9lcnJvcgorICAgICAgICAgICAgLy8gICAgICAgICAgICBeICAgICAgICAgICAg
ICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgaWYgKHBhcnNpbmdC
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzTm90QVNDSUlTcGFjZSgqcGFyc2lu
Z0J1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNO
b3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVM
aXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcGx1Z2luVHlwZXMuYWRkKFN0cmluZyhi
ZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pKTsKIAotICAgICAgICAvLyBt
aW1lMS9taW1lMSBtaW1lMi9taW1lMgotICAgICAgICAvLyAgICAgICBeCi0gICAgICAgIGlmICgh
c2tpcEV4YWN0bHk8VUNoYXIsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKSkg
ewotICAgICAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9u
LCBlbmQpOwotICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFs
aWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8
fCBpc0FTQ0lJU3BhY2UoKnBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSkpOwogICAgICAgICB9Ci0g
ICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBl
bmQpOwotCi0gICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyIE9SIG1pbWUxL21pbWUx
ICBPUiBtaW1lMS9taW1lMS9lcnJvcgotICAgICAgICAvLyAgICAgICAgICAgIF4gICAgICAgICAg
ICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICBeCi0gICAgICAgIGlmIChwb3NpdGlvbiA8
IGVuZCAmJiBpc05vdEFTQ0lJU3BhY2UoKnBvc2l0aW9uKSkgewotICAgICAgICAgICAgc2tpcFdo
aWxlPFVDaGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICAgICAg
ZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmco
YmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIG1fcGx1Z2luVHlwZXMuYWRkKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBi
ZWdpbikpOwotCi0gICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNwYWNl
KCpwb3NpdGlvbikpOwotICAgIH0KKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC01Niw0OCArNTcsNDEgQEAgc3RhdGljIGJvb2wgaXNDU1BEaXJlY3Rp
dmVOYW1lKGNvbnN0IFN0cgogICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUs
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNyYyk7CiB9CiAKLXN0
YXRpYyBib29sIGlzU291cmNlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1NvdXJjZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBl
IGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7CiB9CiAKLXN0YXRpYyBib29sIGlz
SG9zdENoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIGJvb2wgaXNIb3N0Q2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1
cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICctJzsKIH0KIAotc3RhdGljIGJvb2wg
aXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1BhdGhDb21wb25lbnRDaGFyYWN0ZXIoQ2hhcmFjdGVy
VHlwZSBjKQogewogICAgIHJldHVybiBjICE9ICc/JyAmJiBjICE9ICcjJzsKIH0KIAotc3RhdGlj
IGJvb2wgaXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzU2NoZW1lQ29udGludWF0aW9uQ2hh
cmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJp
YyhjKSB8fCBjID09ICcrJyB8fCBjID09ICctJyB8fCBjID09ICcuJzsKIH0KIAotc3RhdGljIGJv
b2wgaXNOb3RDb2xvbk9yU2xhc2goVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyBib29sIGlzTm90Q29sb25PclNsYXNoKENoYXJhY3RlclR5cGUgYykKIHsK
ICAgICByZXR1cm4gYyAhPSAnOicgJiYgYyAhPSAnLyc7CiB9CiAKLXN0YXRpYyBib29sIGlzU291
cmNlTGlzdE5vbmUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBib29sIGlzU291cmNlTGlzdE5vbmUoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAgIGF1dG8gY2hhcmFjdGVycyA9
IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVD
aGFyKiBiZWdpbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGNoYXJhY3Rl
cnMgKyB2YWx1ZS5sZW5ndGgoKTsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4o
YmVnaW4sIGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4o
cGFyc2luZ0J1ZmZlcik7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAg
ICBza2lwV2hpbGU8VUNoYXIsIGlzU291cmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAg
ICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBwb3NpdGlvbiAtIGJl
Z2luLCAiJ25vbmUnIikpCisgICAgaWYgKCFza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBh
cnNpbmdCdWZmZXIsICInbm9uZSciKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2tp
cFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgIGlmIChwb3Np
dGlvbiAhPSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBza2lwV2hpbGU8Q2hhcmFj
dGVyVHlwZSwgaXNBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKICAgICAKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gcGFyc2luZ0J1ZmZlci5hdEVuZCgpOwogfQogCiBDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0KGNv
bnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgcG9saWN5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGl2
ZU5hbWUpCkBAIC0xMDgsMTIgKzEwMiwxNCBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpDb250ZW50CiAKIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFy
c2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoaXNTb3VyY2VMaXN0Tm9uZSh2YWx1
ZSkpIHsKLSAgICAgICAgbV9pc05vbmUgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFj
dGVycygpOwotICAgIHBhcnNlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5ndGgo
KSk7CisgICAgV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIHBh
cnNpbmdCdWZmZXIpIHsKKyAgICAgICAgaWYgKGlzU291cmNlTGlzdE5vbmUocGFyc2luZ0J1ZmZl
cikpIHsKKyAgICAgICAgICAgIG1faXNOb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHBhcnNlKHBhcnNpbmdCdWZmZXIpOworICAgIH0pOwogfQog
CiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OmlzUHJvdG9jb2xBbGxvd2Vk
QnlTdGFyKGNvbnN0IFVSTCYgdXJsKSBjb25zdApAQCAtMTYwLDMwICsxNTYsMjggQEAgYm9vbCBD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjptYQogLy8gc291cmNlLWxpc3QgICAgICAg
PSAqV1NQIFsgc291cmNlICooIDEqV1NQIHNvdXJjZSApICpXU1AgXQogLy8gICAgICAgICAgICAg
ICAgICAgLyAqV1NQICInbm9uZSciICpXU1AKIC8vCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3Q6OnBhcnNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBw
YXJzaW5nQnVmZmVyKQogewotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotCi0g
ICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNB
U0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkK
KyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAg
ICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZl
cik7CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgY29uc3QgVUNoYXIqIGJlZ2luU291cmNlID0gcG9zaXRpb247Ci0gICAg
ICAgIHNraXBXaGlsZTxVQ2hhciwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwor
ICAgICAgICBhdXRvIGJlZ2luU291cmNlID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAg
ICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBhcnNpbmdC
dWZmZXIpOwogCiAgICAgICAgIFN0cmluZyBzY2hlbWUsIGhvc3QsIHBhdGg7CiAgICAgICAgIE9w
dGlvbmFsPHVpbnQxNl90PiBwb3J0OwogICAgICAgICBib29sIGhvc3RIYXNXaWxkY2FyZCA9IGZh
bHNlOwogICAgICAgICBib29sIHBvcnRIYXNXaWxkY2FyZCA9IGZhbHNlOwogCi0gICAgICAgIGlm
IChwYXJzZU5vbmNlU291cmNlKGJlZ2luU291cmNlLCBwb3NpdGlvbikpCisgICAgICAgIGlmIChw
YXJzZU5vbmNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblNvdXJjZSwgcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpIH0pKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
aWYgKHBhcnNlSGFzaFNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24pKQorICAgICAgICBpZiAo
cGFyc2VIYXNoU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblNvdXJjZSwgcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpIH0pKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
aWYgKHBhcnNlU291cmNlKGJlZ2luU291cmNlLCBwb3NpdGlvbiwgc2NoZW1lLCBob3N0LCBwb3J0
LCBwYXRoLCBob3N0SGFzV2lsZGNhcmQsIHBvcnRIYXNXaWxkY2FyZCkpIHsKKyAgICAgICAgaWYg
KHBhcnNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblNvdXJjZSwgcGFyc2luZ0J1
ZmZlci5wb3NpdGlvbigpIH0sIHNjaGVtZSwgaG9zdCwgcG9ydCwgcGF0aCwgaG9zdEhhc1dpbGRj
YXJkLCBwb3J0SGFzV2lsZGNhcmQpKSB7CiAgICAgICAgICAgICAvLyBXaWxkY2FyZCBob3N0cyBh
bmQga2V5d29yZCBzb3VyY2VzICgnc2VsZicsICd1bnNhZmUtaW5saW5lJywKICAgICAgICAgICAg
IC8vIGV0Yy4pIGFyZW4ndCBzdG9yZWQgaW4gbV9saXN0LCBidXQgYXMgYXR0cmlidXRlcyBvbiB0
aGUgc291cmNlCiAgICAgICAgICAgICAvLyBsaXN0IGl0c2VsZi4KQEAgLTE5Myw5ICsxODcsOSBA
QCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAgICAgICAgICAgICAg
ICAgbV9wb2xpY3kucmVwb3J0RGlyZWN0aXZlQXNTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0aXZl
TmFtZSwgaG9zdCk7CiAgICAgICAgICAgICBtX2xpc3QuYXBwZW5kKENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZShtX3BvbGljeSwgc2NoZW1lLCBob3N0LCBwb3J0LCBwYXRoLCBob3N0SGFzV2ls
ZGNhcmQsIHBvcnRIYXNXaWxkY2FyZCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
cG9saWN5LnJlcG9ydEludmFsaWRTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0aXZlTmFtZSwgU3Ry
aW5nKGJlZ2luU291cmNlLCBwb3NpdGlvbiAtIGJlZ2luU291cmNlKSk7CisgICAgICAgICAgICBt
X3BvbGljeS5yZXBvcnRJbnZhbGlkU291cmNlRXhwcmVzc2lvbihtX2RpcmVjdGl2ZU5hbWUsIFN0
cmluZyhiZWdpblNvdXJjZSwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5Tb3VyY2Up
KTsKIAotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8IGlzQVNDSUlTcGFjZSgqcG9z
aXRpb24pKTsKKyAgICAgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCBpc0FTQ0lJ
U3BhY2UoKnBhcnNpbmdCdWZmZXIpKTsKICAgICB9CiAgICAgCiAgICAgbV9saXN0LnNocmlua1Rv
Rml0KCk7CkBAIC0yMDUsMTAzICsxOTksMTAzIEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdDo6cGEKIC8vICAgICAgICAgICAgICAgICAgIC8gKCBbIHNjaGVtZSAiOi8vIiBd
IGhvc3QgWyBwb3J0IF0gWyBwYXRoIF0gKQogLy8gICAgICAgICAgICAgICAgICAgLyAiJ3NlbGYn
IgogLy8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTb3VyY2Uo
Y29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNjaGVtZSwgU3Ry
aW5nJiBob3N0LCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIFN0cmluZyYgcGF0aCwgYm9vbCYg
aG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNhcmQpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBh
cnNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZl
ciwgU3RyaW5nJiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0
LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRj
YXJkKQogewotICAgIGlmIChiZWdpbiA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRF
bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIidub25lJyIpKQorICAgIGlmIChza2lw
RXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICInbm9uZSciKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2luID09
ICcqJykgeworICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEgJiYg
KnBhcnNpbmdCdWZmZXIgPT0gJyonKSB7CiAgICAgICAgIG1fYWxsb3dTdGFyID0gdHJ1ZTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIidzZWxmJyIpKSB7CisgICAgaWYgKHNraXBF
eGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgIidzZWxmJyIpKSB7CiAgICAg
ICAgIG1fYWxsb3dTZWxmID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwg
Iid1bnNhZmUtaW5saW5lJyIpKSB7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNh
c2UocGFyc2luZ0J1ZmZlciwgIid1bnNhZmUtaW5saW5lJyIpKSB7CiAgICAgICAgIG1fYWxsb3dJ
bmxpbmUgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAtIGJlZ2luLCAiJ3Vuc2FmZS1l
dmFsJyIpKSB7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1
ZmZlciwgIid1bnNhZmUtZXZhbCciKSkgewogICAgICAgICBtX2FsbG93RXZhbCA9IHRydWU7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9
IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbkhvc3QgPSBiZWdpbjsKLSAgICBjb25zdCBV
Q2hhciogYmVnaW5QYXRoID0gZW5kOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpblBvcnQgPSBudWxs
cHRyOworICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgYXV0
byBiZWdpbkhvc3QgPSBiZWdpbjsKKyAgICBhdXRvIGJlZ2luUGF0aCA9IHBhcnNpbmdCdWZmZXIu
ZW5kKCk7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW5Qb3J0ID0gbnVsbHB0cjsKIAot
ICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBlbmQpOwor
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdENvbG9uT3JTbGFzaD4ocGFyc2luZ0J1
ZmZlcik7CiAKLSAgICBpZiAocG9zaXRpb24gPT0gZW5kKSB7CisgICAgaWYgKHBhcnNpbmdCdWZm
ZXIuYXRFbmQoKSkgewogICAgICAgICAvLyBob3N0CiAgICAgICAgIC8vICAgICBeCi0gICAgICAg
IHJldHVybiBwYXJzZUhvc3QoYmVnaW5Ib3N0LCBwb3NpdGlvbiwgaG9zdCwgaG9zdEhhc1dpbGRj
YXJkKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlSG9zdChTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVn
aW5Ib3N0LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgfSwgaG9zdCwgaG9zdEhhc1dpbGRjYXJk
KTsKICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICcvJykg
eworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFy
c2luZ0J1ZmZlciA9PSAnLycpIHsKICAgICAgICAgLy8gaG9zdC9wYXRoIHx8IGhvc3QvIHx8IC8K
ICAgICAgICAgLy8gICAgIF4gICAgICAgICAgICBeICAgIF4KLSAgICAgICAgcmV0dXJuIHBhcnNl
SG9zdChiZWdpbkhvc3QsIHBvc2l0aW9uLCBob3N0LCBob3N0SGFzV2lsZGNhcmQpICYmIHBhcnNl
UGF0aChwb3NpdGlvbiwgZW5kLCBwYXRoKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlSG9zdChTdHJp
bmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5Ib3N0LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgfSwg
aG9zdCwgaG9zdEhhc1dpbGRjYXJkKSAmJiBwYXJzZVBhdGgocGFyc2luZ0J1ZmZlciwgcGF0aCk7
CiAgICAgfQogCi0gICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSAnOicpIHsK
LSAgICAgICAgaWYgKGVuZCAtIHBvc2l0aW9uID09IDEpIHsKKyAgICBpZiAocGFyc2luZ0J1ZmZl
ci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJzonKSB7Cisg
ICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEpIHsKICAgICAg
ICAgICAgIC8vIHNjaGVtZToKICAgICAgICAgICAgIC8vICAgICAgIF4KLSAgICAgICAgICAgIHJl
dHVybiBwYXJzZVNjaGVtZShiZWdpbiwgcG9zaXRpb24sIHNjaGVtZSk7CisgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luLCBwYXJzaW5nQnVm
ZmVyLnBvc2l0aW9uKCkgfSwgc2NoZW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChwb3Np
dGlvblsxXSA9PSAnLycpIHsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbMV0gPT0gJy8nKSB7
CiAgICAgICAgICAgICAvLyBzY2hlbWU6Ly9ob3N0IHx8IHNjaGVtZTovLwogICAgICAgICAgICAg
Ly8gICAgICAgXiAgICAgICAgICAgICAgICBeCi0gICAgICAgICAgICBpZiAoIXBhcnNlU2NoZW1l
KGJlZ2luLCBwb3NpdGlvbiwgc2NoZW1lKQotICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3Rs
eTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJzonKQotICAgICAgICAgICAgICAgIHx8ICFza2lwRXhh
Y3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKQotICAgICAgICAgICAgICAgIHx8ICFza2lw
RXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKSkKKyAgICAgICAgICAgIGlmICghcGFy
c2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0
aW9uKCkgfSwgc2NoZW1lKQorICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseTxDaGFyYWN0
ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnOicpCisgICAgICAgICAgICAgICAgfHwgIXNraXBFeGFj
dGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJykKKyAgICAgICAgICAgICAgICB8
fCAhc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy8nKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5k
KQorICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBiZWdpbkhvc3QgPSBwb3NpdGlvbjsKLSAgICAg
ICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBlbmQp
OworICAgICAgICAgICAgYmVnaW5Ib3N0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAg
ICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90Q29sb25PclNsYXNoPihwYXJz
aW5nQnVmZmVyKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAq
cG9zaXRpb24gPT0gJzonKSB7CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAnOicpIHsKICAgICAgICAgICAgIC8v
IGhvc3Q6cG9ydCB8fCBzY2hlbWU6Ly9ob3N0OnBvcnQKICAgICAgICAgICAgIC8vICAgICBeICAg
ICAgICAgICAgICAgICAgICAgXgotICAgICAgICAgICAgYmVnaW5Qb3J0ID0gcG9zaXRpb247Ci0g
ICAgICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJyk7CisgICAgICAg
ICAgICBiZWdpblBvcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBz
a2lwVW50aWw8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy8nKTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gJy8nKSB7Cisg
ICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5n
QnVmZmVyID09ICcvJykgewogICAgICAgICAvLyBzY2hlbWU6Ly9ob3N0L3BhdGggfHwgc2NoZW1l
Oi8vaG9zdDpwb3J0L3BhdGgKICAgICAgICAgLy8gICAgICAgICAgICAgIF4gICAgICAgICAgICAg
ICAgICAgICAgICAgIF4KLSAgICAgICAgaWYgKHBvc2l0aW9uID09IGJlZ2luSG9zdCkKKyAgICAg
ICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA9PSBiZWdpbkhvc3QpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgYmVnaW5QYXRoID0gcG9zaXRpb247CisgICAgICAg
IGJlZ2luUGF0aCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKICAgICB9CiAKLSAgICBpZiAo
IXBhcnNlSG9zdChiZWdpbkhvc3QsIGJlZ2luUG9ydCA/IGJlZ2luUG9ydCA6IGJlZ2luUGF0aCwg
aG9zdCwgaG9zdEhhc1dpbGRjYXJkKSkKKyAgICBpZiAoIXBhcnNlSG9zdChTdHJpbmdQYXJzaW5n
QnVmZmVyIHsgYmVnaW5Ib3N0LCBiZWdpblBvcnQgPyBiZWdpblBvcnQgOiBiZWdpblBhdGggfSwg
aG9zdCwgaG9zdEhhc1dpbGRjYXJkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KCFiZWdpblBvcnQpCiAgICAgICAgIHBvcnQgPSBXVEY6Om51bGxvcHQ7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGlmICghcGFyc2VQb3J0KGJlZ2luUG9ydCwgYmVnaW5QYXRoLCBwb3J0LCBwb3J0SGFz
V2lsZGNhcmQpKQorICAgICAgICBpZiAoIXBhcnNlUG9ydChTdHJpbmdQYXJzaW5nQnVmZmVyIHsg
YmVnaW5Qb3J0LCBiZWdpblBhdGggfSwgcG9ydCwgcG9ydEhhc1dpbGRjYXJkKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoYmVnaW5QYXRoICE9IGVuZCkgewot
ICAgICAgICBpZiAoIXBhcnNlUGF0aChiZWdpblBhdGgsIGVuZCwgcGF0aCkpCisgICAgaWYgKGJl
Z2luUGF0aCAhPSBwYXJzaW5nQnVmZmVyLmVuZCgpKSB7CisgICAgICAgIGlmICghcGFyc2VQYXRo
KFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblBhdGgsIHBhcnNpbmdCdWZmZXIuZW5kKCkgfSwg
cGF0aCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0zMTEsMjUgKzMw
NSwyNSBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAvLyAgICAg
ICAgICAgICAgICAgICAgIDsgPHNjaGVtZT4gcHJvZHVjdGlvbiBmcm9tIFJGQyAzOTg2CiAvLyBz
Y2hlbWUgICAgICA9IEFMUEhBICooIEFMUEhBIC8gRElHSVQgLyAiKyIgLyAiLSIgLyAiLiIgKQog
Ly8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTY2hlbWUoY29u
c3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNjaGVtZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdDo6cGFyc2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBw
YXJzaW5nQnVmZmVyLCBTdHJpbmcmIHNjaGVtZSkKIHsKLSAgICBBU1NFUlQoYmVnaW4gPD0gZW5k
KTsKKyAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIu
ZW5kKCkpOwogICAgIEFTU0VSVChzY2hlbWUuaXNFbXB0eSgpKTsKIAotICAgIGlmIChiZWdpbiA9
PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47CisgICAgYXV0byBiZWdp
biA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKIAotICAgIGlmICghc2tpcEV4YWN0bHk8VUNo
YXIsIGlzQVNDSUlBbHBoYT4ocG9zaXRpb24sIGVuZCkpCisgICAgaWYgKCFza2lwRXhhY3RseTxD
aGFyYWN0ZXJUeXBlLCBpc0FTQ0lJQWxwaGE+KHBhcnNpbmdCdWZmZXIpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzU2NoZW1lQ29udGludWF0aW9uQ2hh
cmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNT
Y2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgaWYgKHBv
c2l0aW9uICE9IGVuZCkKKyAgICBpZiAoIXBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgc2NoZW1lID0gU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdpbik7
CisgICAgc2NoZW1lID0gU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBi
ZWdpbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMzNyw5MSArMzMxLDg5IEBAIGJvb2wg
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEKIC8vICAgICAgICAgICAgICAgICAg
IC8gIioiCiAvLyBob3N0LWNoYXIgICAgICAgICA9IEFMUEhBIC8gRElHSVQgLyAiLSIKIC8vCi1i
b29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSG9zdChjb25zdCBVQ2hh
ciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhhc1dp
bGRjYXJkKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhvc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFy
YWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxk
Y2FyZCkKIHsKLSAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKKyAgICBBU1NFUlQocGFyc2luZ0J1
ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIuZW5kKCkpOwogICAgIEFTU0VSVChob3N0
LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFob3N0SGFzV2lsZGNhcmQpOwogCi0gICAgaWYgKGJl
Z2luID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLQotICAgIGlm
IChza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJyonKSkgeworICAgIGlmIChza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnKicpKSB7CiAgICAgICAgIGhv
c3RIYXNXaWxkY2FyZCA9IHRydWU7CiAKLSAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkKKyAg
ICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcuJykp
CisgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwg
Jy4nKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjb25zdCBVQ2hh
ciogaG9zdEJlZ2luID0gcG9zaXRpb247CisgICAgYXV0byBob3N0QmVnaW4gPSBwYXJzaW5nQnVm
ZmVyLnBvc2l0aW9uKCk7CiAKLSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAg
aWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKSkK
KyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAg
ICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc0hvc3RDaGFyYWN0ZXI+KHBh
cnNpbmdCdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHNraXBX
aGlsZTxVQ2hhciwgaXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgc2tp
cFdoaWxlPENoYXJhY3RlclR5cGUsIGlzSG9zdENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CiAK
LSAgICAgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRp
b24sIGVuZCwgJy4nKSkKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1Jl
bWFpbmluZygpICYmICFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAn
LicpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEFTU0VSVChwb3Np
dGlvbiA9PSBlbmQpOwotICAgIGhvc3QgPSBTdHJpbmcoaG9zdEJlZ2luLCBlbmQgLSBob3N0QmVn
aW4pOworICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpOworICAgIGhvc3QgPSBTdHJp
bmcoaG9zdEJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBob3N0QmVnaW4pOwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6
OnBhcnNlUGF0aChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYg
cGF0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3Vy
aXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQYXRoKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFj
dGVyVHlwZT4gcGFyc2luZ0J1ZmZlciwgU3RyaW5nJiBwYXRoKQogewotICAgIEFTU0VSVChiZWdp
biA8PSBlbmQpOworICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPD0gcGFyc2lu
Z0J1ZmZlci5lbmQoKSk7CiAgICAgQVNTRVJUKHBhdGguaXNFbXB0eSgpKTsKICAgICAKLSAgICBj
b25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzUGF0
aENvbXBvbmVudENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBiZWdpbiA9IHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNQ
YXRoQ29tcG9uZW50Q2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKICAgICAvLyBwYXRoL3RvL2Zp
bGUuanM/cXVlcnk9c3RyaW5nIHx8IHBhdGgvdG8vZmlsZS5qcyNhbmNob3IKICAgICAvLyAgICAg
ICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLSAgICBpZiAocG9z
aXRpb24gPCBlbmQpCi0gICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRQYXRoQ2hhcmFjdGVy
KG1fZGlyZWN0aXZlTmFtZSwgU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdpbiksICpwb3NpdGlvbik7
CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKQorICAgICAg
ICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUGF0aENoYXJhY3RlcihtX2RpcmVjdGl2ZU5hbWUsIFN0
cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5lbmQoKSAtIGJlZ2luKSwgKnBhcnNpbmdCdWZmZXIp
OwogICAgIAotICAgIHBhdGggPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nKGJlZ2lu
LCBwb3NpdGlvbiAtIGJlZ2luKSk7CisgICAgcGF0aCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
cyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CiAgICAg
Ci0gICAgQVNTRVJUKHBvc2l0aW9uIDw9IGVuZCk7Ci0gICAgQVNTRVJUKHBvc2l0aW9uID09IGVu
ZCB8fCAoKnBvc2l0aW9uID09ICcjJyB8fCAqcG9zaXRpb24gPT0gJz8nKSk7CisgICAgQVNTRVJU
KHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsKKyAgICBB
U1NFUlQocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICgqcGFyc2luZ0J1ZmZlciA9PSAnIycgfHwg
KnBhcnNpbmdCdWZmZXIgPT0gJz8nKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIHBvcnQg
ICAgICAgICAgICAgID0gIjoiICggMSpESUdJVCAvICIqIiApCiAvLwotYm9vbCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25z
dCBVQ2hhciogZW5kLCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIGJvb2wmIHBvcnRIYXNXaWxk
Y2FyZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3Vy
aXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQb3J0KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFj
dGVyVHlwZT4gcGFyc2luZ0J1ZmZlciwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29sJiBw
b3J0SGFzV2lsZGNhcmQpCiB7Ci0gICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CisgICAgQVNTRVJU
KHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsKICAgICBB
U1NFUlQoIXBvcnQpOwogICAgIEFTU0VSVCghcG9ydEhhc1dpbGRjYXJkKTsKICAgICAKLSAgICBp
ZiAoIXNraXBFeGFjdGx5PFVDaGFyPihiZWdpbiwgZW5kLCAnOicpKQorICAgIGlmICghc2tpcEV4
YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJzonKSkKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgCi0gICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICBpZiAocGFy
c2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYg
KGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2luID09ICcqJykgeworICAgIGlmIChwYXJzaW5nQnVm
ZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJyonKSB7CiAg
ICAgICAgIHBvcnQgPSBXVEY6Om51bGxvcHQ7CiAgICAgICAgIHBvcnRIYXNXaWxkY2FyZCA9IHRy
dWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBjb25zdCBVQ2hhciog
cG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlEaWdpdD4ocG9z
aXRpb24sIGVuZCk7CisgICAgYXV0byBiZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsK
KyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSURpZ2l0PihwYXJzaW5nQnVmZmVy
KTsKICAgICAKLSAgICBpZiAocG9zaXRpb24gIT0gZW5kKQorICAgIGlmICghcGFyc2luZ0J1ZmZl
ci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgYm9vbCBvazsKLSAg
ICBpbnQgcG9ydEludCA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChiZWdpbiwgZW5kIC0gYmVnaW4s
ICZvayk7CisgICAgaW50IHBvcnRJbnQgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoYmVnaW4sIHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luLCAmb2spOwogICAgIGlmIChwb3J0SW50IDwg
MCB8fCBwb3J0SW50ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcG9ydCA9IHBvcnRJbnQ7CkBAIC00MzEsNDQgKzQyMyw0
MiBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAvLyBNYXRjaCBC
bGluaydzIGJlaGF2aW9yIG9mIGFsbG93aW5nIGFuIGVxdWFsIHNpZ24gdG8gYXBwZWFyIGFueXdo
ZXJlIGluIHRoZSB2YWx1ZSBvZiB0aGUgbm9uY2UKIC8vIGV2ZW4gdGhvdWdoIHRoaXMgZG9lcyBu
b3QgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IExldmVsIDMg
c3BlYy4sCiAvLyA8aHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1jc3AvPiAoMjkgRmVi
cnVhcnkgMjAxNikuCi1zdGF0aWMgYm9vbCBpc05vbmNlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc05vbmNlQ2hhcmFjdGVy
KENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNCYXNlNjRPckJhc2U2NFVSTENoYXJh
Y3RlcihjKSB8fCBjID09ICc9JzsKIH0KIAogLy8gbm9uY2Utc291cmNlICAgID0gIidub25jZS0i
IG5vbmNlLXZhbHVlICInIgogLy8gbm9uY2UtdmFsdWUgICAgID0gYmFzZTY0LXZhbHVlCi1ib29s
IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlTm9uY2VTb3VyY2UoY29uc3Qg
VUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZU5vbmNl
U291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlcikK
IHsKLSAgICBjb25zdCB1bnNpZ25lZCBub25jZVByZWZpeExlbmd0aCA9IDc7Ci0gICAgaWYgKCFT
dHJpbmdWaWV3KGJlZ2luLCBlbmQgLSBiZWdpbikuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNl
KCInbm9uY2UtIikpCisgICAgaWYgKCFza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNp
bmdCdWZmZXIsICInbm9uY2UtIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBV
Q2hhciogcG9zaXRpb24gPSBiZWdpbiArIG5vbmNlUHJlZml4TGVuZ3RoOwotICAgIGNvbnN0IFVD
aGFyKiBiZWdpbk5vbmNlVmFsdWUgPSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlz
Tm9uY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotICAgIGlmIChwb3NpdGlvbiA+PSBlbmQg
fHwgcG9zaXRpb24gPT0gYmVnaW5Ob25jZVZhbHVlIHx8ICpwb3NpdGlvbiAhPSAnXCcnKQorCisg
ICAgYXV0byBiZWdpbk5vbmNlVmFsdWUgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAg
c2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm9uY2VDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIp
OworICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpID09IGJlZ2luTm9uY2VWYWx1ZSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAnXCcnKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9ub25jZXMuYWRkKFN0cmluZyhiZWdpbk5vbmNlVmFsdWUs
IHBvc2l0aW9uIC0gYmVnaW5Ob25jZVZhbHVlKSk7CisgICAgbV9ub25jZXMuYWRkKFN0cmluZyhi
ZWdpbk5vbmNlVmFsdWUsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luTm9uY2VWYWx1
ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBoYXNoLXNvdXJjZSAgICA9ICInIiBoYXNo
LWFsZ29yaXRobSAiLSIgYmFzZTY0LXZhbHVlICInIgogLy8gaGFzaC1hbGdvcml0aG0gPSAic2hh
MjU2IiAvICJzaGEzODQiIC8gInNoYTUxMiIKIC8vIGJhc2U2NC12YWx1ZSAgPSAxKiggQUxQSEEg
LyBESUdJVCAvICIrIiAvICIvIiAvICItIiAvICJfIiApKjIoICI9IiApCi1ib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZShjb25zdCBVQ2hhciogYmVn
aW4sIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBi
b29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZShTdHJp
bmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYg
KGJlZ2luID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBp
ZiAoIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnXCcnKSkKKyAgICBpZiAoIXNr
aXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICdcJycpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dChwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdChwYXJzaW5nQnVmZmVyKTsKICAgICBpZiAoIWRpZ2VzdCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKHBvc2l0aW9uID49IGVuZCB8fCAqcG9zaXRpb24gIT0gJ1wnJykKKyAg
ICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICpwYXJzaW5nQnVmZmVyICE9ICdcJycpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkaWdlc3QtPnZhbHVlLnNpemUoKSA+IENv
bnRlbnRTZWN1cml0eVBvbGljeUhhc2g6Om1heGltdW1EaWdlc3RMZW5ndGgpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nz
cC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDE5ICs1NSwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc05vbmUoKSBjb25zdCB7IHJldHVybiBt
X2lzTm9uZTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgcGFyc2UoY29uc3QgVUNoYXIqIGJlZ2lu
LCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiB2b2lkIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOwogCi0gICAg
Ym9vbCBwYXJzZVNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0
cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgU3Ry
aW5nJiBwYXRoLCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7
Ci0gICAgYm9vbCBwYXJzZVNjaGVtZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBl
bmQsIFN0cmluZyYgc2NoZW1lKTsKLSAgICBib29sIHBhcnNlSG9zdChjb25zdCBVQ2hhciogYmVn
aW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJk
KTsKLSAgICBib29sIHBhcnNlUG9ydChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBl
bmQsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKLSAg
ICBib29sIHBhcnNlUGF0aChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0
cmluZyYgcGF0aCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBw
YXJzZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+LCBTdHJpbmcmIHNj
aGVtZSwgU3RyaW5nJiBob3N0LCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIFN0cmluZyYgcGF0
aCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNhcmQpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VTY2hlbWUoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiwgU3RyaW5nJiBzY2hlbWUpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VIb3N0KFN0cmluZ1BhcnNpbmdCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4sIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlUG9ydChTdHJp
bmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+LCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQs
IGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gYm9vbCBwYXJzZVBhdGgoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiwg
U3RyaW5nJiBwYXRoKTsKIAotICAgIGJvb2wgcGFyc2VOb25jZVNvdXJjZShjb25zdCBVQ2hhciog
YmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGJvb2wgcGFyc2VOb25jZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+KTsKIAogICAgIGJvb2wgaXNQcm90b2NvbEFsbG93ZWRCeVN0YXIoY29uc3QgVVJMJikg
Y29uc3Q7CiAKLSAgICBib29sIHBhcnNlSGFzaFNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNv
bnN0IFVDaGFyKiBlbmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJv
b2wgcGFyc2VIYXNoU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOwog
CiAgICAgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBtX3BvbGljeTsKICAgICBWZWN0b3I8
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlPiBtX2xpc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuZ2xlVmFsdWUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5nbGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNp
bmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC04MCwxOSArODEsMTkgQEAgU3RyaW5nIFNWR0FuZ2xlVmFsdWU6OnZhbHVlQXNTdHJp
bmcoKSBjbwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVU
eXBlKGNvbnN0IENoYXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBTVkdBbmdsZVZh
bHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBzd2l0Y2ggKGVuZCAtIHB0cikgeworICAgIHN3aXRj
aCAocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSkgewogICAgIGNhc2UgMDoKICAgICAg
ICAgcmV0dXJuIFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfVU5TUEVDSUZJRUQ7CiAgICAg
Y2FzZSAzOgotICAgICAgICBpZiAocHRyWzBdID09ICdkJyAmJiBwdHJbMV0gPT0gJ2UnICYmIHB0
clsyXSA9PSAnZycpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzBdID09ICdkJyAmJiBwYXJz
aW5nQnVmZmVyWzFdID09ICdlJyAmJiBwYXJzaW5nQnVmZmVyWzJdID09ICdnJykKICAgICAgICAg
ICAgIHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5HTEVUWVBFX0RFRzsKLSAgICAgICAgaWYg
KHB0clswXSA9PSAncicgJiYgcHRyWzFdID09ICdhJyAmJiBwdHJbMl0gPT0gJ2QnKQorICAgICAg
ICBpZiAocGFyc2luZ0J1ZmZlclswXSA9PSAncicgJiYgcGFyc2luZ0J1ZmZlclsxXSA9PSAnYScg
JiYgcGFyc2luZ0J1ZmZlclsyXSA9PSAnZCcpCiAgICAgICAgICAgICByZXR1cm4gU1ZHQW5nbGVW
YWx1ZTo6U1ZHX0FOR0xFVFlQRV9SQUQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoKLSAg
ICAgICAgaWYgKHB0clswXSA9PSAnZycgJiYgcHRyWzFdID09ICdyJyAmJiBwdHJbMl0gPT0gJ2En
ICYmIHB0clszXSA9PSAnZCcpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzBdID09ICdnJyAm
JiBwYXJzaW5nQnVmZmVyWzFdID09ICdyJyAmJiBwYXJzaW5nQnVmZmVyWzJdID09ICdhJyAmJiBw
YXJzaW5nQnVmZmVyWzNdID09ICdkJykKICAgICAgICAgICAgIHJldHVybiBTVkdBbmdsZVZhbHVl
OjpTVkdfQU5HTEVUWVBFX0dSQUQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEwNiwyNyAr
MTA3LDE5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFsdWU6OnNldFZhbHUKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRvIGhlbHBlciA9IFsmXShhdXRvKiBwdHIs
IGF1dG8qIGVuZCkgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewotICAgICAgICBhdXRvIHZhbHVlSW5T
cGVjaWZpZWRVbml0cyA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGlj
eTo6RG9udFNraXApOworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2
YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gRXhjZXB0aW9uT3I8dm9pZD4geworICAg
ICAgICBhdXRvIHZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZm
ZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CiAgICAgICAgIGlmICghdmFsdWVJ
blNwZWNpZmllZFVuaXRzKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVy
cm9yIH07CiAKLSAgICAgICAgYXV0byB1bml0VHlwZSA9IHBhcnNlQW5nbGVUeXBlKHB0ciwgZW5k
KTsKKyAgICAgICAgYXV0byB1bml0VHlwZSA9IHBhcnNlQW5nbGVUeXBlKHBhcnNpbmdCdWZmZXIp
OwogICAgICAgICBpZiAodW5pdFR5cGUgPT0gU1ZHQW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9V
TktOT1dOKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAK
ICAgICAgICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOwogICAgICAgICBtX3ZhbHVlSW5TcGVjaWZp
ZWRVbml0cyA9ICp2YWx1ZUluU3BlY2lmaWVkVW5pdHM7CiAgICAgICAgIHJldHVybiB7IH07Ci0g
ICAgfTsKLQotICAgIGlmICh2YWx1ZS5pczhCaXQoKSkgewotICAgICAgICBhdXRvKiBwdHIgPSB2
YWx1ZS5jaGFyYWN0ZXJzOCgpOwotICAgICAgICByZXR1cm4gaGVscGVyKHB0ciwgcHRyICsgdmFs
dWUubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGF1dG8qIHB0ciA9IHZhbHVlLmNoYXJhY3RlcnMx
NigpOwotICAgIHJldHVybiBoZWxwZXIocHRyLCBwdHIgKyB2YWx1ZS5sZW5ndGgoKSk7CisgICAg
fSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFsdWU6Om5ld1ZhbHVlU3BlY2lm
aWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRV
bml0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCBib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYXNWYWxpCiB2b2lkIFNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdO
YW1lczo6dHlwZUF0dHIpIHsKLSAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFy
c2VUcmFuc2Zvcm1UeXBlKHZhbHVlKTsKKyAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtYWJs
ZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKHZhbHVlKS52YWx1ZU9yKFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdfVFJBTlNGT1JNX1VOS05PV04pOwogICAgICAgICBpZiAobV90eXBlID09IFNWR1RyYW5zZm9y
bVZhbHVlOjpTVkdfVFJBTlNGT1JNX01BVFJJWCkKICAgICAgICAgICAgIG1fdHlwZSA9IFNWR1Ry
YW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV047CiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9u
IDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC03Nyw1NCArNzgsNTAgQEAgZmFpbDoKICAgICByZXN1bHQuY2xlYXIoKTsKIH0KIAotc3Rh
dGljIE9wdGlvbmFsPFZlY3RvcjxVbml0QmV6aWVyPj4gcGFyc2VLZXlTcGxpbmVzKGNvbnN0IFN0
cmluZ1ZpZXcmIHBhcnNlKQorc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxVbml0QmV6aWVyPj4gcGFy
c2VLZXlTcGxpbmVzKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKIHsKLSAgICBpZiAocGFyc2Uu
aXNFbXB0eSgpKQorICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBwYXJzZS51cGNv
bnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyID0gdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBwYXJzZS5sZW5ndGgoKTsK
LQotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAgICBWZWN0b3I8VW5p
dEJlemllcj4gcmVzdWx0OwotCi0gICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgIHdo
aWxlIChjdXIgPCBlbmQpIHsKLSAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICAgICAg
YXV0byBwb3NBID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgICAgICBpZiAoIXBvc0EpCi0g
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBXVEY6OnJlYWRDaGFy
YWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlv
bmFsPFZlY3RvcjxVbml0QmV6aWVyPj4geworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
cGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAgYXV0byBwb3NCID0gcGFyc2VOdW1iZXIoY3VyLCBl
bmQpOwotICAgICAgICBpZiAoIXBvc0IpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICBWZWN0b3I8VW5pdEJlemllcj4gcmVzdWx0OwogCi0gICAgICAgIGF1dG8gcG9z
QyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NDKQotICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNl
OworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkp
IHsKKyAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7CisgICAgICAgICAgICBhdXRvIHBv
c0EgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgIGlmICghcG9zQSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8gcG9z
RCA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OwotICAgICAgICBpZiAoIXBvc0QpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICAgICAgYXV0byBwb3NCID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAg
ICAgICAgICBpZiAoIXBvc0IpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOworICAgICAgICAgICAg
YXV0byBwb3NDID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICBpZiAo
IXBvc0MpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBp
ZiAoY3VyIDwgZW5kICYmICpjdXIgPT0gJzsnKSB7Ci0gICAgICAgICAgICBkZWxpbVBhcnNlZCA9
IHRydWU7Ci0gICAgICAgICAgICBjdXIrKzsKLSAgICAgICAgfQorICAgICAgICAgICAgYXV0byBw
b3NEID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRv
bnRTa2lwKTsKKyAgICAgICAgICAgIGlmICghcG9zRCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7
CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CiAKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6aWVyIHsgKnBvc0EsICpwb3NCLCAqcG9zQywgKnBv
c0QgfSk7Ci0gICAgfQorICAgICAgICAgICAgaWYgKHNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIs
ICc7JykpCisgICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwogCi0gICAgaWYgKCEo
Y3VyID09IGVuZCAmJiAhZGVsaW1QYXJzZWQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOworCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpwb3ND
LCAqcG9zRCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKHBhcnNpbmdCdWZmZXIuYXRF
bmQoKSAmJiAhZGVsaW1QYXJzZWQpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSk7CiB9
CiAKIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0
VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9W
aWV3Qm94LmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zp
dFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUg
IlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg2LDI3ICs4NywzNyBAQCBib29sIFNWR0ZpdFRvVmlld0Jv
eDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAKIE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3
Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCiB7Ci0gICAgYXV0byB1
cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB2YWx1ZS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBy
ZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5ndGgo
KSk7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0o
YXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHJldHVybiBwYXJzZVZpZXdCb3hHZW5lcmlj
KHBhcnNpbmdCdWZmZXIpOworICAgIH0pOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0Zp
dFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJz
aW5nQnVmZmVyLCBib29sIHZhbGlkYXRlKQoreworICAgIHJldHVybiBwYXJzZVZpZXdCb3hHZW5l
cmljKHBhcnNpbmdCdWZmZXIsIHZhbGlkYXRlKTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBT
VkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYg
cGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKK3sKKyAgICByZXR1cm4gcGFyc2VWaWV3Qm94
R2VuZXJpYyhwYXJzaW5nQnVmZmVyLCB2YWxpZGF0ZSk7CiB9CiAKLU9wdGlvbmFsPEZsb2F0UmVj
dD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBjLCBjb25zdCBV
Q2hhciogZW5kLCBib29sIHZhbGlkYXRlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveEdlbmVy
aWMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgYm9v
bCB2YWxpZGF0ZSkKIHsKLSAgICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKKyAgICBTdHJp
bmdWaWV3IHN0cmluZ1RvUGFyc2UgPSBwYXJzaW5nQnVmZmVyLnN0cmluZ1ZpZXdPZkNoYXJhY3Rl
cnNSZW1haW5pbmcoKTsKIAotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjLCBlbmQpOworICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKIAotICAgIGF1dG8geCA9IHBh
cnNlTnVtYmVyKGMsIGVuZCk7Ci0gICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKLSAg
ICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKLSAgICBhdXRvIGhlaWdodCA9IHBh
cnNlTnVtYmVyKGMsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICBh
dXRvIHggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICBhdXRvIHkgPSBwYXJzZU51
bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIocGFyc2lu
Z0J1ZmZlcik7CisgICAgYXV0byBoZWlnaHQgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBT
dWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwogCiAgICAgaWYgKHZhbGlkYXRlKSB7CiAg
ICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG1fdmlld0JveC0+Y29udGV4dEVsZW1lbnQoKS0+
ZG9jdW1lbnQoKTsKIAogICAgICAgICBpZiAoIXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQp
IHsKLSAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJu
aW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7
CisgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fybmlu
ZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0cmluZ1RvUGFyc2Us
ICJcIiIpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KIApA
QCAtMTIzLDkgKzEzNCw5IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94Ojpw
YXIKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vdGhpbmcgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhl
IGxhc3QsIGZvdXJ0aCBudW1iZXIuCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjLCBl
bmQpOwotICAgICAgICBpZiAoYyA8IGVuZCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcobWFrZVN0cmluZygiUHJvYmxlbSBwYXJzaW5n
IHZpZXdCb3g9XCIiLCBzdHIsICJcIiIpKTsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJz
UmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiwg
c3RyaW5nVG9QYXJzZSwgIlwiIikpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdC
b3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJ
KHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3gu
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsOSArNjYsMTIgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
cmVzZXQoKTsKICAgICBib29sIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBj
b25zdCBBdG9tU3RyaW5nJik7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3go
Y29uc3QgU3RyaW5nVmlldyYgdmFsdWUpOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VW
aWV3Qm94KGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRh
dGUgPSB0cnVlKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChTdHJpbmdQ
YXJzaW5nQnVmZmVyPExDaGFyPiYsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYsIGJv
b2wgdmFsaWRhdGUgPSB0cnVlKTsKIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveEdlbmVyaWMoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsK
KwogICAgIFJlZjxTVkdBbmltYXRlZFJlY3Q+IG1fdmlld0JveDsKICAgICBSZWY8U1ZHQW5pbWF0
ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CiAgICAgYm9vbCBt
X2lzVmlld0JveFZhbGlkIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdM
ZW5ndGhMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3Ro
TGlzdC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNp
bmdCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNWR0xlbmd0aExpc3Q6
OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgY2xlYXJJdGVtcygpOworCisgICAg
cmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBwYXJz
aW5nQnVmZmVyKSB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSB0eXBlbmFtZSBkZWNs
dHlwZShwYXJzaW5nQnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKKworICAgICAgICB3aGlsZSAocGFy
c2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGF1dG8g
c3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisKKyAgICAgICAgICAgIHNraXBVbnRp
bDxDaGFyYWN0ZXJUeXBlLCBpc1NWR1NwYWNlT3JDb21tYT4ocGFyc2luZ0J1ZmZlcik7CisKKyAg
ICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0
KG1fbGVuZ3RoTW9kZSwgU3RyaW5nVmlldyhzdGFydCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigp
IC0gc3RhcnQpKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIGFwcGVuZChTVkdMZW5ndGg6OmNyZWF0ZShXVEZNb3ZlKCp2YWx1
ZSkpKTsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHBhcnNp
bmdCdWZmZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNs
ZWFySXRlbXMoKSBvbiBmYWlsdXJlIGxpa2UgU1ZHVHJhbnNmb3JtTGlzdCBkb2VzPworCisgICAg
ICAgIHJldHVybiBwYXJzaW5nQnVmZmVyLmF0RW5kKCk7CisgICAgfSk7Cit9CisKK1N0cmluZyBT
VkdMZW5ndGhMaXN0Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxlbmd0aCA6IG1faXRlbXMpIHsKKyAg
ICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
ICcpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxlbmd0aC0+dmFsdWUoKS52YWx1ZUFzU3Ry
aW5nKCkpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NyArMjcsNiBAQAogCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHVmFsdWVQ
cm9wZXJ0eUxpc3QuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTMsNDUgKzUyLDkgQEAgcHVibGljOgogCiAgICAgU1ZH
TGVuZ3RoTW9kZSBsZW5ndGhNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGhNb2RlOyB9CiAK
LSAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBjbGVh
ckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdW
aWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIq
IHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9
IHB0ciArIHZhbHVlLmxlbmd0aCgpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAg
ICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBwdHI7Ci0gICAgICAgICAgICB3aGlsZSAocHRy
IDwgZW5kICYmICpwdHIgIT0gJywnICYmICFpc1NWR1NwYWNlKCpwdHIpKQotICAgICAgICAgICAg
ICAgIHB0cisrOwotICAgICAgICAgICAgaWYgKHB0ciA9PSBzdGFydCkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nKHN0YXJ0LCBwdHIgLSBz
dGFydCk7Ci0gICAgICAgICAgICBTVkdMZW5ndGhWYWx1ZSB2YWx1ZShtX2xlbmd0aE1vZGUpOwot
ICAgICAgICAgICAgaWYgKHZhbHVlLnNldFZhbHVlQXNTdHJpbmcodmFsdWVTdHJpbmcpLmhhc0V4
Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBhcHBlbmQo
U1ZHTGVuZ3RoOjpjcmVhdGUodmFsdWUpKTsKLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBw
dHIgPT0gZW5kOwotICAgIH0KKyAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpOwog
Ci0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgbGVu
Z3RoIDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQobGVuZ3RoLT52YWx1ZSgpLnZhbHVlQXNTdHJpbmcoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICBTdHJpbmcgdmFsdWVB
c1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogICAgIAogcHJpdmF0ZToKICAgICBTVkdMZW5ndGhM
aXN0KFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMZW5ndGhWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xl
bmd0aFZhbHVlLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xlbmd0aFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlNWR0xlbmd0aENvbnRleHQuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MSwxOSArNjIsMjEgQEAgc3Rh
dGljIGlubGluZSBjb25zdCBjaGFyKiBsZW5ndGhUeXBlVG9TdAogICAgIHJldHVybiAiIjsKIH0K
IAotc3RhdGljIGlubGluZSBTVkdMZW5ndGhUeXBlIHBhcnNlTGVuZ3RoVHlwZShjb25zdCBVQ2hh
ciogcHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gc3RhdGljIGlubGluZSBTVkdMZW5ndGhUeXBlIHBhcnNlTGVuZ3RoVHlwZShTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChwdHIg
PT0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBT
VkdMZW5ndGhUeXBlOjpOdW1iZXI7CiAKLSAgICBjb25zdCBVQ2hhciBmaXJzdENoYXIgPSAqcHRy
OworICAgIGF1dG8gZmlyc3RDaGFyID0gKnBhcnNpbmdCdWZmZXI7CisgICAgKytwYXJzaW5nQnVm
ZmVyOwogCi0gICAgaWYgKCsrcHRyID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVu
ZCgpKQogICAgICAgICByZXR1cm4gZmlyc3RDaGFyID09ICclJyA/IFNWR0xlbmd0aFR5cGU6OlBl
cmNlbnRhZ2UgOiBTVkdMZW5ndGhUeXBlOjpVbmtub3duOwogCi0gICAgY29uc3QgVUNoYXIgc2Vj
b25kQ2hhciA9ICpwdHI7CisgICAgYXV0byBzZWNvbmRDaGFyID0gKnBhcnNpbmdCdWZmZXI7Cisg
ICAgKytwYXJzaW5nQnVmZmVyOwogCi0gICAgaWYgKCsrcHRyICE9IGVuZCkKKyAgICBpZiAoIXBh
cnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFNWR0xlbmd0aFR5cGU6OlVua25v
d247CiAKICAgICBpZiAoZmlyc3RDaGFyID09ICdlJyAmJiBzZWNvbmRDaGFyID09ICdtJykKQEAg
LTE4MCw3ICsxODMsMTUgQEAgU1ZHTGVuZ3RoVmFsdWU6OlNWR0xlbmd0aFZhbHVlKGNvbnN0IFNW
RwogICAgIHNldFZhbHVlKGNvbnRleHQsIHZhbHVlKTsKIH0KIAotU1ZHTGVuZ3RoVmFsdWUgU1ZH
TGVuZ3RoVmFsdWU6OmNvbnN0cnVjdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0IFN0
cmluZyYgdmFsdWVBc1N0cmluZywgU1ZHUGFyc2luZ0Vycm9yJiBwYXJzZUVycm9yLCBTVkdMZW5n
dGhOZWdhdGl2ZVZhbHVlc01vZGUgbmVnYXRpdmVWYWx1ZXNNb2RlKQorT3B0aW9uYWw8U1ZHTGVu
Z3RoVmFsdWU+IFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5ndGhN
b2RlLCBjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFzU3RyaW5nKQoreworICAgIFNWR0xlbmd0aFZh
bHVlIGxlbmd0aCB7IGxlbmd0aE1vZGUgfTsKKyAgICBpZiAobGVuZ3RoLnNldFZhbHVlQXNTdHJp
bmcodmFsdWVBc1N0cmluZykuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKworU1ZHTGVuZ3RoVmFsdWUgU1ZHTGVuZ3Ro
VmFsdWU6OmNvbnN0cnVjdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1Zp
ZXcmIHZhbHVlQXNTdHJpbmcsIFNWR1BhcnNpbmdFcnJvciYgcGFyc2VFcnJvciwgU1ZHTGVuZ3Ro
TmVnYXRpdmVWYWx1ZXNNb2RlIG5lZ2F0aXZlVmFsdWVzTW9kZSkKIHsKICAgICBTVkdMZW5ndGhW
YWx1ZSBsZW5ndGgobGVuZ3RoTW9kZSk7CiAKQEAgLTIzOSw3ICsyNTAsNyBAQCBSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+IFNWR0xlbmd0aFZhbHVlOjp0CiAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUobGVuZ3RoLnZhbHVlSW5TcGVjaWZpZWRVbml0cygpLCBsZW5ndGhUeXBlVG9Q
cmltaXRpdmVUeXBlKGxlbmd0aC5sZW5ndGhUeXBlKCkpKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9p
ZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZUFz
U3RyaW5nLCBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBTVkdM
ZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFzU3Ry
aW5nLCBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCiB7CiAgICAgbV92YWx1ZUluU3BlY2lmaWVk
VW5pdHMgPSAwOwogICAgIG1fbGVuZ3RoTW9kZSA9IGxlbmd0aE1vZGU7CkBAIC0yODYsMjYgKzI5
NywyNCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsCiAgICAgcmV0
dXJuIHNldFZhbHVlKGNvbnRleHQsIHZhbHVlKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gU1ZH
TGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCitFeGNl
cHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJp
bmdWaWV3JiBzdHJpbmcpCiB7CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXco
c3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJp
bmcubGVuZ3RoKCk7Ci0KLSAgICBhdXRvIGNvbnZlcnRlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0
ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwotICAgIGlmICghY29udmVy
dGVkTnVtYmVyKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKLQot
ICAgIGF1dG8gbGVuZ3RoVHlwZSA9IHBhcnNlTGVuZ3RoVHlwZShwdHIsIGVuZCk7Ci0gICAgaWYg
KGxlbmd0aFR5cGUgPT0gU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bikKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNG
b3JQYXJzaW5nKHN0cmluZywgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gRXhjZXB0aW9uT3I8
dm9pZD4geworICAgICAgICBhdXRvIGNvbnZlcnRlZE51bWJlciA9IHBhcnNlTnVtYmVyKHBhcnNp
bmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlmICgh
Y29udmVydGVkTnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVy
cm9yIH07CisKKyAgICAgICAgYXV0byBsZW5ndGhUeXBlID0gcGFyc2VMZW5ndGhUeXBlKHBhcnNp
bmdCdWZmZXIpOworICAgICAgICBpZiAobGVuZ3RoVHlwZSA9PSBTVkdMZW5ndGhUeXBlOjpVbmtu
b3duKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAg
ICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwotICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRz
ID0gKmNvbnZlcnRlZE51bWJlcjsKLSAgICByZXR1cm4geyB9OworICAgICAgICBtX2xlbmd0aFR5
cGUgPSBsZW5ndGhUeXBlOworICAgICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9ICpjb252
ZXJ0ZWROdW1iZXI7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfSk7CiB9CiAKIEV4Y2VwdGlv
bk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhjb25zdCBT
VkdMZW5ndGhDb250ZXh0JiBjb250ZXh0LCBTVkdMZW5ndGhUeXBlIGxlbmd0aFR5cGUpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDEz
ICs1OCwxNCBAQCBlbnVtIGNsYXNzIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA6CiBjbGFz
cyBTVkdMZW5ndGhWYWx1ZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgU1ZHTGVuZ3RoVmFsdWUoU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVy
LCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcgPSBTdHJpbmcoKSk7CisgICAgU1ZHTGVuZ3Ro
VmFsdWUoU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVyLCBjb25zdCBTdHJpbmcm
IHZhbHVlQXNTdHJpbmcgPSB7IH0pOwogICAgIFNWR0xlbmd0aFZhbHVlKGZsb2F0IHZhbHVlSW5T
cGVjaWZpZWRVbml0cywgU1ZHTGVuZ3RoVHlwZSwgU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1v
ZGU6Ok90aGVyKTsKICAgICBTVkdMZW5ndGhWYWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0Jiwg
ZmxvYXQsIFNWR0xlbmd0aFR5cGUgPSBTVkdMZW5ndGhUeXBlOjpOdW1iZXIsIFNWR0xlbmd0aE1v
ZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlcik7CiAKLSAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFsdWUg
Y29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZyYsIFNWR1BhcnNpbmdFcnJvciYs
IFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA9IFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9k
ZTo6QWxsb3cpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdMZW5ndGhWYWx1ZT4gY29uc3RydWN0
KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBzdGF0aWMgU1ZHTGVuZ3Ro
VmFsdWUgY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1ZpZXcmLCBTVkdQYXJz
aW5nRXJyb3ImLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgPSBTVkdMZW5ndGhOZWdhdGl2
ZVZhbHVlc01vZGU6OkFsbG93KTsKICAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFsdWUgYmxlbmQoY29u
c3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0bywgZmxvYXQg
cHJvZ3Jlc3MpOwotICAgIAorCiAgICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGZyb21DU1NQcmlt
aXRpdmVWYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYpOwogICAgIHN0YXRpYyBSZWY8Q1NT
UHJpbWl0aXZlVmFsdWU+IHRvQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgU1ZHTGVuZ3RoVmFsdWUm
KTsKIApAQCAtODUsOCArODYsOCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0
VmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZsb2F0KTsKICAgICBFeGNlcHRpb25Pcjx2
b2lkPiBzZXRWYWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0JiwgZmxvYXQsIFNWR0xlbmd0aFR5
cGUsIFNWR0xlbmd0aE1vZGUpOwogCi0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVBc1N0
cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFzU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIFNWR0xlbmd0aE1vZGUpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+
IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYpOworICAgIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYsIFNWR0xlbmd0aE1vZGUpOwog
CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gY29udmVydFRvU3BlY2lmaWVkVW5pdHMoY29uc3QgU1ZH
TGVuZ3RoQ29udGV4dCYsIFNWR0xlbmd0aFR5cGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTnVtYmVyTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R051bWJlckxpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdO
dW1iZXJMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR051bWJlckxpc3QuaCIKKworI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdQYXJzaW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTVkdOdW1i
ZXJMaXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNsZWFySXRlbXMoKTsK
KworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1
dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICAvLyBUaGUgc3BlYyAoc2VjdGlvbiA0LjEpIHN0
cmFuZ2VseSBkb2Vzbid0IGFsbG93IGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAgLy8gV2Ug
bWlnaHQgY2hvb3NlIHRvIHZpb2xhdGUgdGhhdCBpbnRlbnRpb25hbGx5LgorICAgICAgICB3aGls
ZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAg
IGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICBp
ZiAoIW51bWJlcikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFwcGVuZChT
VkdOdW1iZXI6OmNyZWF0ZSgqbnVtYmVyKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhN
RTogU2hvdWxkIHRoaXMgY2xlYXJJdGVtcygpIG9uIGZhaWx1cmUgbGlrZSBTVkdUcmFuc2Zvcm1M
aXN0IGRvZXM/CisKKyAgICAgICAgcmV0dXJuIHBhcnNpbmdCdWZmZXIuYXRFbmQoKTsKKyAgICB9
KTsKK30KKworU3RyaW5nIFNWR051bWJlckxpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAorewor
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZvciAoY29uc3QgYXV0byYgbnVtYmVy
IDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobnVtYmVyLT52
YWx1ZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit9
CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuaAkocmV2aXNpb24gMjYzMzM1KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsMzkgKzUwLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdO
dW1iZXJMaXN0KG90aGVyLCBhY2Nlc3MpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBjbGVhckl0ZW1zKCk7Ci0KLSAgICAgICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRl
ZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHZhbHVlLmxlbmd0aCgp
OwotCi0gICAgICAgIC8vIFRoZSBzcGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNuJ3Qg
YWxsb3cgbGVhZGluZyB3aGl0ZXNwYWNlLgotICAgICAgICAvLyBXZSBtaWdodCBjaG9vc2UgdG8g
dmlvbGF0ZSB0aGF0IGludGVudGlvbmFsbHkuCi0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsK
LSAgICAgICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAgICAg
ICAgICAgaWYgKCFudW1iZXIpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBh
cHBlbmQoU1ZHTnVtYmVyOjpjcmVhdGUoKm51bWJlcikpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIHB0ciA9PSBlbmQ7Ci0gICAgfQotCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBj
b25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotCi0g
ICAgICAgIGZvciAoY29uc3QgYXV0byYgbnVtYmVyIDogbV9pdGVtcykgewotICAgICAgICAgICAg
aWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAn
KTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobnVtYmVyLT52YWx1ZSgpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgIGJv
b2wgcGFyc2UoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25z
dCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPGxpbWl0
cz4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzQyLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEZs
b2F0VHlwZT4gc3RhdGljIGlubAogLy8gYXQgYSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFsbHks
IHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IHJ1bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21wbGV4
aXR5LgogLy8gRklYTUU6IENhbiB0aGlzIGJlIHNoYXJlZC9yZXBsYWNlZCB3aXRoIG51bWJlciBw
YXJzaW5nIGluIFdURj8KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFt
ZSBGbG9hdFR5cGUgPSBmbG9hdD4gc3RhdGljIE9wdGlvbmFsPEZsb2F0VHlwZT4gZ2VuZXJpY1Bh
cnNlTnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUq
IGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpT
a2lwKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlw
ZSA9IGZsb2F0PiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRUeXBlPiBnZW5lcmljUGFyc2VOdW1iZXIo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgU3VmZml4
U2tpcHBpbmdQb2xpY3kgc2tpcCA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQogewogICAg
IEZsb2F0VHlwZSBudW1iZXIgPSAwOwogICAgIEZsb2F0VHlwZSBpbnRlZ2VyID0gMDsKQEAgLTUw
LDI2ICs1MSwyNiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAg
ICAgRmxvYXRUeXBlIGV4cG9uZW50ID0gMDsKICAgICBpbnQgc2lnbiA9IDE7CiAgICAgaW50IGV4
cHNpZ24gPSAxOwotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0YXJ0ID0gcHRyOworICAgIGF1
dG8gc3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAKICAgICAvLyByZWFkIHRoZSBz
aWduCi0gICAgaWYgKHB0ciA8IGVuZCAmJiAqcHRyID09ICcrJykKLSAgICAgICAgcHRyKys7Ci0g
ICAgZWxzZSBpZiAocHRyIDwgZW5kICYmICpwdHIgPT0gJy0nKSB7Ci0gICAgICAgIHB0cisrOwor
ICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2lu
Z0J1ZmZlciA9PSAnKycpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICBlbHNlIGlmIChw
YXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9
PSAnLScpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgICAgICBzaWduID0gLTE7CiAg
ICAgfSAKICAgICAKLSAgICBpZiAocHRyID09IGVuZCB8fCAoIWlzQVNDSUlEaWdpdCgqcHRyKSAm
JiAqcHRyICE9ICcuJykpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAoIWlzQVND
SUlEaWdpdCgqcGFyc2luZ0J1ZmZlcikgJiYgKnBhcnNpbmdCdWZmZXIgIT0gJy4nKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIHJlYWQgdGhlIGludGVnZXIgcGFydCwg
YnVpbGQgcmlnaHQtdG8tbGVmdAotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHB0clN0YXJ0SW50
UGFydCA9IHB0cjsKLSAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzQVNDSUlEaWdpdCgqcHRyKSkK
LSAgICAgICAgKytwdHI7IC8vIEFkdmFuY2UgdG8gZmlyc3Qgbm9uLWRpZ2l0LgorICAgIGF1dG8g
cHRyU3RhcnRJbnRQYXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHdoaWxlIChw
YXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoKnBh
cnNpbmdCdWZmZXIpKQorICAgICAgICArK3BhcnNpbmdCdWZmZXI7IC8vIEFkdmFuY2UgdG8gZmly
c3Qgbm9uLWRpZ2l0LgogCi0gICAgaWYgKHB0ciAhPSBwdHJTdGFydEludFBhcnQpIHsKLSAgICAg
ICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcHRyU2NhbkludFBhcnQgPSBwdHIgLSAxOworICAgIGlm
IChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgIT0gcHRyU3RhcnRJbnRQYXJ0KSB7CisgICAgICAg
IGF1dG8gcHRyU2NhbkludFBhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSAxOwogICAg
ICAgICBGbG9hdFR5cGUgbXVsdGlwbGllciA9IDE7CiAgICAgICAgIHdoaWxlIChwdHJTY2FuSW50
UGFydCA+PSBwdHJTdGFydEludFBhcnQpIHsKICAgICAgICAgICAgIGludGVnZXIgKz0gbXVsdGlw
bGllciAqIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oKihwdHJTY2FuSW50UGFydC0tKSAtICcwJyk7
CkBAIC04MCwzOCArODEsMzkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5
cGVuYQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBpZiAo
cHRyIDwgZW5kICYmICpwdHIgPT0gJy4nKSB7IC8vIHJlYWQgdGhlIGRlY2ltYWxzCi0gICAgICAg
IHB0cisrOworICAgIC8vIHJlYWQgdGhlIGRlY2ltYWxzCisgICAgaWYgKHBhcnNpbmdCdWZmZXIu
aGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5nQnVmZmVyID09ICcuJykgeworICAg
ICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJl
IGEgbGVhc3Qgb25lIGRpZ2l0IGZvbGxvd2luZyB0aGUgLgotICAgICAgICBpZiAocHRyID49IGVu
ZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVu
ZCgpIHx8ICFpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICAgICAgCi0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNB
U0NJSURpZ2l0KCpwdHIpKQotICAgICAgICAgICAgZGVjaW1hbCArPSAoKihwdHIrKykgLSAnMCcp
ICogKGZyYWMgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsKKyAgICAgICAgd2hpbGUg
KHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgq
cGFyc2luZ0J1ZmZlcikpCisgICAgICAgICAgICBkZWNpbWFsICs9ICgqKHBhcnNpbmdCdWZmZXIr
KykgLSAnMCcpICogKGZyYWMgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsKICAgICB9
CiAKICAgICAvLyByZWFkIHRoZSBleHBvbmVudCBwYXJ0Ci0gICAgaWYgKHB0ciAhPSBzdGFydCAm
JiBwdHIgKyAxIDwgZW5kICYmICgqcHRyID09ICdlJyB8fCAqcHRyID09ICdFJykgCi0gICAgICAg
ICYmIChwdHJbMV0gIT0gJ3gnICYmIHB0clsxXSAhPSAnbScpKSB7IAotICAgICAgICBwdHIrKzsK
KyAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpICE9IHN0YXJ0ICYmIHBhcnNpbmdCdWZm
ZXIucG9zaXRpb24oKSArIDEgPCBwYXJzaW5nQnVmZmVyLmVuZCgpICYmICgqcGFyc2luZ0J1ZmZl
ciA9PSAnZScgfHwgKnBhcnNpbmdCdWZmZXIgPT0gJ0UnKQorICAgICAgICAmJiAocGFyc2luZ0J1
ZmZlclsxXSAhPSAneCcgJiYgcGFyc2luZ0J1ZmZlclsxXSAhPSAnbScpKSB7CisgICAgICAgICsr
cGFyc2luZ0J1ZmZlcjsKIAogICAgICAgICAvLyByZWFkIHRoZSBzaWduIG9mIHRoZSBleHBvbmVu
dAotICAgICAgICBpZiAoKnB0ciA9PSAnKycpCi0gICAgICAgICAgICBwdHIrKzsKLSAgICAgICAg
ZWxzZSBpZiAoKnB0ciA9PSAnLScpIHsKLSAgICAgICAgICAgIHB0cisrOworICAgICAgICBpZiAo
KnBhcnNpbmdCdWZmZXIgPT0gJysnKQorICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAg
ICAgICBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAnLScpIHsKKyAgICAgICAgICAgICsrcGFy
c2luZ0J1ZmZlcjsKICAgICAgICAgICAgIGV4cHNpZ24gPSAtMTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhbiBleHBvbmVudAotICAgICAgICBpZiAocHRy
ID49IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZl
ci5hdEVuZCgpIHx8ICFpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpKQogICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzQVND
SUlEaWdpdCgqcHRyKSkgeworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0
ZXJzUmVtYWluaW5nKCkgJiYgaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkgewogICAgICAg
ICAgICAgZXhwb25lbnQgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigxMCk7Ci0gICAgICAgICAg
ICBleHBvbmVudCArPSAqcHRyIC0gJzAnOwotICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAg
ICBleHBvbmVudCArPSAqcGFyc2luZ0J1ZmZlciAtICcwJzsKKyAgICAgICAgICAgICsrcGFyc2lu
Z0J1ZmZlcjsKICAgICAgICAgfQogICAgICAgICAvLyBNYWtlIHN1cmUgZXhwb25lbnQgaXMgdmFs
aWQuCiAgICAgICAgIGlmICghaXNWYWxpZFJhbmdlKGV4cG9uZW50KSB8fCBleHBvbmVudCA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRUeXBlPjo6bWF4X2V4cG9uZW50KQpAQCAtMTI4LDQ0ICsx
MzAsNDQgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQogICAgIGlm
ICghaXNWYWxpZFJhbmdlKG51bWJlcikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBpZiAoc3RhcnQgPT0gcHRyKQorICAgIGlmIChzdGFydCA9PSBwYXJzaW5nQnVmZmVyLnBv
c2l0aW9uKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoc2tpcCA9
PSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNP
ckRlbGltaXRlcihwYXJzaW5nQnVmZmVyKTsKIAogICAgIHJldHVybiBudW1iZXI7CiB9CiAKLU9w
dGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIq
IGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51
bWJlcihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlciwgU3VmZml4U2tp
cHBpbmdQb2xpY3kgc2tpcCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwg
ZW5kLCBza2lwKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIs
IHNraXApOwogfQogCi1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBw
dHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCitPcHRpb25h
bDxmbG9hdD4gcGFyc2VOdW1iZXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdC
dWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQ
YXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJl
cihwYXJzaW5nQnVmZmVyLCBza2lwKTsKIH0KIAogT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVy
KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZywgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsK
LSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJh
Y3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwot
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgYXV0byBy
ZXN1bHQgPSBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIHNraXApOwotICAgIGlmIChwdHIg
IT0gZW5kKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgW3NraXBd
KGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8ZmxvYXQ+IHsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBnZW5lcmljUGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgc2tpcCk7CisgICAgICAg
IGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9KTsKIH0KIAogLy8gb25seSB1c2Vk
IHRvIHBhcnNlIGxhcmdlQXJjRmxhZyBhbmQgc3dlZXBGbGFnIHdoaWNoIG11c3QgYmUgYSAiMCIg
b3IgIjEiCiAvLyBhbmQgbWlnaHQgbm90IGhhdmUgYW55IHdoaXRlc3BhY2UvY29tbWEgYWZ0ZXIg
aXQKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxib29sPiBnZW5l
cmljUGFyc2VBcmNGbGFnKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3Rl
clR5cGUqIGVuZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxi
b29sPiBnZW5lcmljUGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKHB0ciA+PSBlbmQpCisgICAgaWYgKHBhcnNp
bmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGNv
bnN0IENoYXJhY3RlclR5cGUgZmxhZ0NoYXIgPSAqcHRyKys7CisgICAgY29uc3QgQ2hhcmFjdGVy
VHlwZSBmbGFnQ2hhciA9ICpwYXJzaW5nQnVmZmVyOworICAgICsrcGFyc2luZ0J1ZmZlcjsKIAog
ICAgIGJvb2wgZmxhZzsKICAgICBpZiAoZmxhZ0NoYXIgPT0gJzAnKQpAQCAtMTc1LDE5ICsxNzcs
MTkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbgogICAgIGVsc2UK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
c09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGlt
aXRlcihwYXJzaW5nQnVmZmVyKTsKICAgICAKICAgICByZXR1cm4gZmxhZzsKIH0KIAotT3B0aW9u
YWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5k
KQorT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+
JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKHB0ciwg
ZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhwYXJzaW5nQnVmZmVyKTsKIH0K
IAotT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBV
Q2hhciogZW5kKQorT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZm
ZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VBcmNG
bGFnKHB0ciwgZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhwYXJzaW5nQnVm
ZmVyKTsKIH0KIAogT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQpAQCAtMTk1LDI1ICsxOTcs
MjMgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTgogICAgIGlmIChz
dHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25z
dCBVQ2hhciogZW5kID0gY3VyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgYXV0byB4ID0gcGFy
c2VOdW1iZXIoY3VyLCBlbmQpOwotICAgIGlmICgheCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBb
XShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+
PiB7CisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAg
ICBpZiAoIXgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKGN1
ciA9PSBlbmQpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwgKngpOworICAgICAg
ICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKCp4LCAqeCk7CiAKLSAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3Vm
Zml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICBpZiAoIXkpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZm
ZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlmICgheSkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoY3VyICE9IGVuZCkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0
RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKCp4LCAqeSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwg
KnkpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZVBvaW50KGNvbnN0
IFN0cmluZ1ZpZXcmIHN0cmluZykKQEAgLTIyMSwxMTcgKzIyMSwxMTMgQEAgT3B0aW9uYWw8Rmxv
YXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdAogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJh
Y3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIq
IGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY3Vy
ICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3Vy
LCBlbmQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBXVEY6OnJl
YWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4g
T3B0aW9uYWw8RmxvYXRQb2ludD4geworICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNl
cyhwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBhdXRvIHBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1ciwgZW5kKTsKLSAgICBpZiAoIXBvaW50
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHBvaW50ID0gcGFy
c2VGbG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAoIXBvaW50KQorICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIC8vIERpc2FsbG93IGFueXRoaW5nIGV4
Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4KLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBl
bmQpOwotICAgIAotICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgLy8gRGlzYWxsb3cgYW55dGhp
bmcgZXhjZXB0IHNwYWNlcyBhdCB0aGUgZW5kLgorICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXMocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAg
fSk7CiB9CiAKIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNvbnN0IFN0cmluZ1ZpZXcm
IHN0cmluZykKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNv
bnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7
Ci0gICAgCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKLSAgICAKLSAgICBh
dXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7Ci0gICAgaWYgKCF4KQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKLSAg
ICBpZiAoIXkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byB3aWR0aCA9
IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKLSAgICBpZiAoIXdpZHRoKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1
ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Ci0gICAgaWYgKCFoZWlnaHQpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQ
YXJzaW5nKHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxGbG9hdFJl
Y3Q+IHsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOworICAg
ICAgICAKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAg
ICAgIGlmICgheCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1
dG8geSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAoIXkpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHdpZHRoID0gcGFyc2VO
dW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICghd2lkdGgpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKHBh
cnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlm
ICghaGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVy
biBGbG9hdFJlY3QgeyAqeCwgKnksICp3aWR0aCwgKmhlaWdodCB9OworICAgICAgICByZXR1cm4g
RmxvYXRSZWN0IHsgKngsICp5LCAqd2lkdGgsICpoZWlnaHQgfTsKKyAgICB9KTsKIH0KIAogT3B0
aW9uYWw8SGFzaFNldDxTdHJpbmc+PiBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmdWaWV3JiBz
dHJpbmcpCiB7CiAgICAgLy8gRklYTUU6IFBhcnNpbmcgZXJyb3IgZGV0ZWN0aW9uIGlzIG1pc3Np
bmcuCiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRl
ZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKLQotICAgIEhhc2hTZXQ8U3RyaW5nPiB2
YWx1ZXM7Ci0KLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIC8vIExlYWRpbmcgYW5k
IHRyYWlsaW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2UgYmVmb3JlIGFuZCBhZnRlciBz
ZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dFN0
YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gJywnKQotICAg
ICAgICAgICAgKytwdHI7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5n
KHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBIYXNoU2V0PFN0cmluZz4geworICAg
ICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAgaWYg
KHB0ciA9PSBpbnB1dFN0YXJ0KQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIEhhc2hTZXQ8
U3RyaW5nPiB2YWx1ZXM7CiAKLSAgICAgICAgLy8gd2FsayBiYWNrd2FyZHMgZnJvbSB0aGUgOyB0
byBpZ25vcmUgYW55IHdoaXRlc3BhY2UKLSAgICAgICAgY29uc3QgVUNoYXIqIGlucHV0RW5kID0g
cHRyIC0gMTsKLSAgICAgICAgd2hpbGUgKGlucHV0U3RhcnQgPCBpbnB1dEVuZCAmJiBpc1NWR1Nw
YWNlKCppbnB1dEVuZCkpCi0gICAgICAgICAgICAtLWlucHV0RW5kOworICAgICAgICB3aGlsZSAo
cGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIC8v
IExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2UgYmVmb3Jl
IGFuZCBhZnRlciBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCisgICAgICAgICAgICBhdXRv
IGlucHV0U3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAKLSAgICAgICAgdmFsdWVz
LmFkZChTdHJpbmcoaW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1dFN0YXJ0ICsgMSkpOwotICAg
ICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCwgJywnKTsKLSAg
ICB9CisgICAgICAgICAgICBza2lwVW50aWwocGFyc2luZ0J1ZmZlciwgJywnKTsKKworICAgICAg
ICAgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA9PSBpbnB1dFN0YXJ0KQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9tIHRo
ZSA7IHRvIGlnbm9yZSBhbnkgd2hpdGVzcGFjZQorICAgICAgICAgICAgYXV0byBpbnB1dEVuZCA9
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIDE7CisgICAgICAgICAgICB3aGlsZSAoaW5wdXRT
dGFydCA8IGlucHV0RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5kKSkKKyAgICAgICAgICAgICAg
ICAtLWlucHV0RW5kOworCisgICAgICAgICAgICB2YWx1ZXMuYWRkKFN0cmluZyhpbnB1dFN0YXJ0
LCBpbnB1dEVuZCAtIGlucHV0U3RhcnQgKyAxKSk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyLCAnLCcpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB2YWx1ZXM7CisgICAgfSk7CiAKLSAgICByZXR1cm4gdmFsdWVzOwogfQogCi1z
dGF0aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFVuaWNvZGVSYW5nZT4gcGFyc2VVbmljb2RlUmFuZ2Uo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAg
IGlmIChsZW5ndGggPCAyIHx8IGNoYXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJhY3RlcnNbMV0g
IT0gJysnKQorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWlu
aW5nKCk7CisgICAgaWYgKGxlbmd0aCA8IDIgfHwgcGFyc2luZ0J1ZmZlclswXSAhPSAnVScgfHwg
cGFyc2luZ0J1ZmZlclsxXSAhPSAnKycpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgCisKKyAgICBwYXJzaW5nQnVmZmVyLmFkdmFuY2VCeSgyKTsKKwogICAgIC8vIFBhcnNlIHRo
ZSBzdGFydGluZyBoZXggbnVtYmVyIChvciBpdHMgcHJlZml4KS4KICAgICB1bnNpZ25lZCBzdGFy
dFJhbmdlID0gMDsKICAgICB1bnNpZ25lZCBzdGFydExlbmd0aCA9IDA7CiAKLSAgICBjb25zdCBV
Q2hhciogcHRyID0gY2hhcmFjdGVycyArIDI7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGNoYXJh
Y3RlcnMgKyBsZW5ndGg7Ci0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICBpZiAoIWlz
QVNDSUlIZXhEaWdpdCgqcHRyKSkKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0
ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKnBhcnNpbmdC
dWZmZXIpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAgICAg
ICAgIGlmIChzdGFydExlbmd0aCA+IDYpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgICAgICBzdGFydFJhbmdlID0gKHN0YXJ0UmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFs
dWUoKnB0cik7Ci0gICAgICAgICsrcHRyOworICAgICAgICBzdGFydFJhbmdlID0gKHN0YXJ0UmFu
Z2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnBhcnNpbmdCdWZmZXIpOworICAgICAgICArK3Bh
cnNpbmdCdWZmZXI7CiAgICAgfQogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIG9mIHJhbmdlcyBz
ZXBhcmF0ZWQgYnkgIi0iIHNpZ24uCi0gICAgaWYgKDIgKyBzdGFydExlbmd0aCA8IGxlbmd0aCAm
JiAqcHRyID09ICctJykgeworICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5ndGggJiYgKnBh
cnNpbmdCdWZmZXIgPT0gJy0nKSB7CiAgICAgICAgIGlmICghc3RhcnRMZW5ndGgpCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgLy8gUGFyc2UgdGhl
IGVuZGluZyBoZXggbnVtYmVyIChvciBpdHMgcHJlZml4KS4KICAgICAgICAgdW5zaWduZWQgZW5k
UmFuZ2UgPSAwOwogICAgICAgICB1bnNpZ25lZCBlbmRMZW5ndGggPSAwOwotICAgICAgICArK3B0
cjsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICAgICAgaWYgKCFpc0FTQ0lJ
SGV4RGlnaXQoKnB0cikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgd2hpbGUg
KHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBp
ZiAoIWlzQVNDSUlIZXhEaWdpdCgqcGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICArK2VuZExlbmd0aDsKICAgICAgICAgICAgIGlmIChlbmRMZW5ndGgg
PiA2KQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICBl
bmRSYW5nZSA9IChlbmRSYW5nZSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZSgqcHRyKTsKLSAgICAg
ICAgICAgICsrcHRyOworICAgICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCB0
b0FTQ0lJSGV4VmFsdWUoKnBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgKytwYXJzaW5nQnVm
ZmVyOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWVuZExlbmd0aCkKQEAgLTM0
NSwxNSArMzQxLDE1IEBAIHN0YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY28K
ICAgICAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2YgYSBudW1iZXIgd2l0aCBzb21lIG9wdGlv
bmFsIHRyYWlsaW5nIHF1ZXN0aW9uIG1hcmtzLgogICAgIHVuc2lnbmVkIGVuZFJhbmdlID0gc3Rh
cnRSYW5nZTsKLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIGlmICgqcHRyICE9ICc/
JykKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsK
KyAgICAgICAgaWYgKCpwYXJzaW5nQnVmZmVyICE9ICc/JykKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICArK3N0YXJ0TGVuZ3RoOwogICAgICAgICBpZiAoc3RhcnRMZW5ndGggPiA2KQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgc3RhcnRSYW5nZSA8PD0gNDsK
ICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCAweEY7Ci0gICAgICAgICsrcHRy
OworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgfQogICAgIAogICAgIGlmICghc3RhcnRM
ZW5ndGgpCkBAIC0zNjksNTMgKzM2NSw1MSBAQCBPcHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJh
bmdlcywgSGFzaFNlCiB7CiAgICAgLy8gRklYTUU6IFBhcnNpbmcgZXJyb3IgZGV0ZWN0aW9uIGlz
IG1pc3NpbmcuCiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNv
bnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7
Ci0KLSAgICBVbmljb2RlUmFuZ2VzIHJhbmdlTGlzdDsKLSAgICBIYXNoU2V0PFN0cmluZz4gc3Ry
aW5nTGlzdDsKLQotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgY29uc3QgVUNoYXIq
IGlucHV0U3RhcnQgPSBwdHI7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAn
LCcpCi0gICAgICAgICAgICArK3B0cjsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0Zv
clBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IHN0ZDo6cGFpcjxVbmlj
b2RlUmFuZ2VzLCBIYXNoU2V0PFN0cmluZz4+IHsKKyAgICAgICAgVW5pY29kZVJhbmdlcyByYW5n
ZUxpc3Q7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdMaXN0OwogCi0gICAgICAgIGlm
IChwdHIgPT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICB3aGlsZSAo
cGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGF1
dG8gaW5wdXRTdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKIAotICAgICAgICAvLyBU
cnkgdG8gcGFyc2UgdW5pY29kZSByYW5nZSBmaXJzdAotICAgICAgICBpZiAoYXV0byByYW5nZSA9
IHBhcnNlVW5pY29kZVJhbmdlKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQpKQotICAgICAg
ICAgICAgcmFuZ2VMaXN0LmFwcGVuZChXVEZNb3ZlKCpyYW5nZSkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzdHJpbmdMaXN0LmFkZChTdHJpbmcoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRT
dGFydCkpOwotICAgICAgICArK3B0cjsKLSAgICB9CisgICAgICAgICAgICBza2lwVW50aWwocGFy
c2luZ0J1ZmZlciwgJywnKTsKKworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRp
b24oKSA9PSBpbnB1dFN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAvLyBUcnkgdG8gcGFyc2UgdW5pY29kZSByYW5nZSBmaXJzdAorICAgICAgICAgICAgaWYgKGF1
dG8gcmFuZ2UgPSBwYXJzZVVuaWNvZGVSYW5nZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgaW5wdXRT
dGFydCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIH0pKQorICAgICAgICAgICAgICAgIHJhbmdl
TGlzdC5hcHBlbmQoV1RGTW92ZSgqcmFuZ2UpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBzdHJpbmdMaXN0LmFkZChTdHJpbmcoaW5wdXRTdGFydCwgcGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpIC0gaW5wdXRTdGFydCkpOworICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVyOwor
ICAgICAgICB9CiAKLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmFuZ2VMaXN0LCBzdHJpbmdM
aXN0KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUocmFuZ2VMaXN0KSwg
V1RGTW92ZShzdHJpbmdMaXN0KSk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4gZ2VuZXJpY1BhcnNlRmxv
YXRQb2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogZW5kKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25h
bDxGbG9hdFBvaW50PiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgYXV0byB4ID0gcGFyc2VOdW1i
ZXIoY3VycmVudCwgZW5kKTsKKyAgICBhdXRvIHggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVy
KTsKICAgICBpZiAoIXgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRv
IHkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgIGF1dG8geSA9IHBhcnNlTnVtYmVy
KHBhcnNpbmdCdWZmZXIpOwogICAgIGlmICgheSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIHJldHVybiBGbG9hdFBvaW50IHsgKngsICp5IH07CiB9CiAKLU9wdGlvbmFsPEZs
b2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExD
aGFyKiBlbmQpCitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQ
YXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxv
YXRQb2ludChwYXJzaW5nQnVmZmVyKTsKIH0KIAotT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VG
bG9hdFBvaW50KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCkKK09wdGlv
bmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFy
PiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChj
dXJyZW50LCBlbmQpOworICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KHBhcnNpbmdC
dWZmZXIpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0
aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGll
cy5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRp
bGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDkgKzIxLDkgQEAKIAogI3ByYWdtYSBvbmNl
CiAKKyNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIHR5cGVkZWYgc3RkOjpwYWlyPFVDaGFyMzIsIFVDaGFyMzI+IFVuaWNvZGVSYW5nZTsK
IHR5cGVkZWYgVmVjdG9yPFVuaWNvZGVSYW5nZT4gVW5pY29kZVJhbmdlczsKQEAgLTM4LDIwICsz
OCwyMCBAQCBlbnVtIGNsYXNzIFN1ZmZpeFNraXBwaW5nUG9saWN5IHsKICAgICBTa2lwCiB9Owog
Ci1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25z
dCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpTa2lwKTsKLU9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBVQ2hhciomIGN1cnJl
bnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBp
bmdQb2xpY3k6OlNraXApOworT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKFN0cmluZ1BhcnNp
bmdCdWZmZXI8TENoYXI+JiwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1Bv
bGljeTo6U2tpcCk7CitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxVQ2hhcj4mLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpTa2lwKTsKIE9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmdWaWV3Jiwg
U3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7CiAKIE9w
dGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVy
KGNvbnN0IFN0cmluZ1ZpZXcmKTsKIAotT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0
IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7Ci1PcHRpb25hbDxib29sPiBwYXJz
ZUFyY0ZsYWcoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kKTsKK09wdGlv
bmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworT3B0
aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiAK
IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nVmlldyYpOwogT3B0
aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVJlY3QoY29uc3QgU3RyaW5nVmlldyYpOwogCi1PcHRpb25h
bDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25z
dCBMQ2hhciogZW5kKTsKLU9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25z
dCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpOworT3B0aW9uYWw8RmxvYXRQb2lu
dD4gcGFyc2VGbG9hdFBvaW50KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CitPcHRpb25h
bDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4m
KTsKIAogT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8U3RyaW5nPj4+
IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYpOwogT3B0aW9uYWw8
SGFzaFNldDxTdHJpbmc+PiBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmdWaWV3Jik7CkBAIC02
NCwxMyArNjQsMjMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleAog
ICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xy
JzsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wg
aXNTVkdTcGFjZU9yQ29tbWEoQ2hhcmFjdGVyVHlwZSBjKQoreworICAgIHJldHVybiBpc1NWR1Nw
YWNlKGMpIHx8ICcsJzsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29u
c3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBw
dHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKLSAgICB3aGlsZSAocHRyIDwgZW5kICYm
IGlzU1ZHU3BhY2UoKnB0cikpCi0gICAgICAgIHB0cisrOworICAgIHNraXBXaGlsZTxDaGFyYWN0
ZXJUeXBlLCBpc1NWR1NwYWNlPihwdHIsIGVuZCk7CiAgICAgcmV0dXJuIHB0ciA8IGVuZDsKIH0K
IAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGNoYXJh
Y3RlcnMpCit7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzU1ZHU3BhY2U+KGNoYXJh
Y3RlcnMpOworICAgIHJldHVybiBjaGFyYWN0ZXJzLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKTsK
K30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwg
Y29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjaGFyIGRlbGltaXRlciA9ICcsJykKIHsKICAgICBp
ZiAocHRyIDwgZW5kICYmICFpc1NWR1NwYWNlKCpwdHIpICYmICpwdHIgIT0gZGVsaW1pdGVyKQpA
QCAtODQsMjggKzk0LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0
ZXgKICAgICByZXR1cm4gcHRyIDwgZW5kOwogfQogCi1jb25zdGV4cHIgYm9vbCBza2lwU3RyaW5n
KGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhciogbmFtZSwg
aW50IGxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBi
b29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4mIGNoYXJhY3RlcnMsIGNoYXIgZGVsaW1pdGVyID0gJywnKQogewotICAg
IGlmIChlbmQgLSBwdHIgPCBsZW5ndGgpCisgICAgaWYgKGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpICYmICFpc1NWR1NwYWNlKCpjaGFyYWN0ZXJzKSAmJiAqY2hhcmFjdGVycyAh
PSBkZWxpbWl0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobWVtY21wKG5hbWUs
IHB0ciwgc2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBwdHIgKz0gbGVuZ3RoOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx1bnNpZ25l
ZCBjaGFyYWN0ZXJDb3VudD4KLWlubGluZSBib29sIHNraXBTdHJpbmcoY29uc3QgVUNoYXIqJiBw
dHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgKCZzdHIpW2NoYXJhY3RlckNvdW50XSkK
LXsKLSAgICBpbnQgbGVuZ3RoID0gY2hhcmFjdGVyQ291bnQgLSAxOwotICAgIGlmIChlbmQgLSBw
dHIgPCBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChwdHJbaV0gIT0gc3RyW2ldKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChza2lwT3B0aW9uYWxTVkdTcGFjZXMoY2hhcmFj
dGVycykpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygp
ICYmICpjaGFyYWN0ZXJzID09IGRlbGltaXRlcikgeworICAgICAgICAgICAgY2hhcmFjdGVycysr
OworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNoYXJhY3RlcnMpOworICAgICAg
ICB9CiAgICAgfQotICAgIHB0ciArPSBsZW5ndGg7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHJldmlzaW9u
IDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE5LDExICsxOSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgRmxvYXRQb2ludDsKIAogY2xhc3MgU1ZHUGF0aFNvdXJjZSB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoU1ZHUGF0aFNvdXJjZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAkocmV2
aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04Mywx
NDAgKzgzLDEzNCBAQCBTVkdQYXRoU2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0CiAg
ICAgcmV0dXJuICpwYXJzZVNWR1NlZ21lbnRUeXBlKCk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgU1ZHUGF0aFNlZ1R5cGUgcGFyc2VTVkdTZWdtZW50VHlw
ZUhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCkKK3RlbXBsYXRlPHR5cGVuYW1l
IEY+IGRlY2x0eXBlKGF1dG8pIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlKEYmJiBmdW5jdG9y
KQogewotICAgIHN3aXRjaCAoKihjdXJyZW50KyspKSB7Ci0gICAgY2FzZSAnWic6Ci0gICAgY2Fz
ZSAneic6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ2xvc2VQYXRoOwotICAgIGNhc2UgJ00nOgot
ICAgICAgICByZXR1cm4gUGF0aFNlZ01vdmVUb0FiczsKLSAgICBjYXNlICdtJzoKLSAgICAgICAg
cmV0dXJuIFBhdGhTZWdNb3ZlVG9SZWw7Ci0gICAgY2FzZSAnTCc6Ci0gICAgICAgIHJldHVybiBQ
YXRoU2VnTGluZVRvQWJzOwotICAgIGNhc2UgJ2wnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xp
bmVUb1JlbDsKLSAgICBjYXNlICdDJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3Vi
aWNBYnM7Ci0gICAgY2FzZSAnYyc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1Ymlj
UmVsOwotICAgIGNhc2UgJ1EnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0
aWNBYnM7Ci0gICAgY2FzZSAncSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRy
YXRpY1JlbDsKLSAgICBjYXNlICdBJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNBYnM7Ci0g
ICAgY2FzZSAnYSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQXJjUmVsOwotICAgIGNhc2UgJ0gn
OgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxBYnM7Ci0gICAgY2FzZSAn
aCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbDsKLSAgICBjYXNl
ICdWJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9WZXJ0aWNhbEFiczsKLSAgICBjYXNl
ICd2JzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9WZXJ0aWNhbFJlbDsKLSAgICBjYXNl
ICdTJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnM7Ci0gICAg
Y2FzZSAncyc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsOwot
ICAgIGNhc2UgJ1QnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9v
dGhBYnM7Ci0gICAgY2FzZSAndCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFJlbDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGF0aFNlZ1Vua25v
d247CisgICAgaWYgKG1faXM4Qml0U291cmNlKSB7CisgICAgICAgIFN0cmluZ1BhcnNpbmdCdWZm
ZXI8TENoYXI+IHBhcnNpbmdCdWZmZXIgeyBtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5t
X2NoYXJhY3RlcjggfTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBmdW5jdG9yKHBhcnNpbmdCdWZm
ZXIpOworICAgICAgICBtX2N1cnJlbnQubV9jaGFyYWN0ZXI4ID0gcGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIFN0cmluZ1BhcnNp
bmdCdWZmZXI8VUNoYXI+IHBhcnNpbmdCdWZmZXIgeyBtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwg
bV9lbmQubV9jaGFyYWN0ZXIxNiB9OworICAgIGF1dG8gcmVzdWx0ID0gZnVuY3RvcihwYXJzaW5n
QnVmZmVyKTsKKyAgICBtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiA9IHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBPcHRpb25hbDxTVkdQYXRoU2VnVHlw
ZT4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSgpCiB7Ci0gICAgaWYg
KG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBl
cihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gcGFyc2VTVkdTZWdtZW50VHlw
ZUhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNik7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1
dG8gcGFyc2luZ0J1ZmZlcikgLT4gU1ZHUGF0aFNlZ1R5cGUgeworICAgICAgICBzd2l0Y2ggKCoo
cGFyc2luZ0J1ZmZlcisrKSkgeworICAgICAgICBjYXNlICdaJzoKKyAgICAgICAgY2FzZSAneic6
CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0Nsb3NlUGF0aDsKKyAgICAgICAgY2FzZSAnTSc6
CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ01vdmVUb0FiczsKKyAgICAgICAgY2FzZSAnbSc6
CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ01vdmVUb1JlbDsKKyAgICAgICAgY2FzZSAnTCc6
CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0FiczsKKyAgICAgICAgY2FzZSAnbCc6
CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1JlbDsKKyAgICAgICAgY2FzZSAnQyc6
CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsKKyAgICAgICAgY2Fz
ZSAnYyc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbDsKKyAgICAg
ICAgY2FzZSAnUSc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNB
YnM7CisgICAgICAgIGNhc2UgJ3EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRv
UXVhZHJhdGljUmVsOworICAgICAgICBjYXNlICdBJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRo
U2VnQXJjQWJzOworICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2Vn
QXJjUmVsOworICAgICAgICBjYXNlICdIJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGlu
ZVRvSG9yaXpvbnRhbEFiczsKKyAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICByZXR1cm4g
UGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWw7CisgICAgICAgIGNhc2UgJ1YnOgorICAgICAgICAg
ICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9WZXJ0aWNhbEFiczsKKyAgICAgICAgY2FzZSAndic6Cisg
ICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsUmVsOworICAgICAgICBjYXNl
ICdTJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzOwor
ICAgICAgICBjYXNlICdzJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1Ymlj
U21vb3RoUmVsOworICAgICAgICBjYXNlICdUJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2Vn
Q3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczsKKyAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAg
ICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWw7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ1Vua25vd247CisgICAgICAgIH0KKyAgICB9
KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TW92ZVRvU2VnbWVudD4gU1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtd
KGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPE1vdmVU
b1NlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChj
dXJyZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShbXShhdXRvIGNoYXJhY3RlcnMpIC0+IE9w
dGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNl
RmxvYXRQb2ludChjaGFyYWN0ZXJzKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICBNb3ZlVG9TZWdt
ZW50IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJn
ZXRQb2ludCk7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9p
czhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8
U1ZHUGF0aFNvdXJjZTo6TGluZVRvU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VM
aW5lVG9TZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJy
ZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHsKLSAgICAg
ICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAg
IHJldHVybiBwYXJzZShbXShhdXRvIGNoYXJhY3RlcnMpIC0+IE9wdGlvbmFsPExpbmVUb1NlZ21l
bnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjaGFyYWN0
ZXJzKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICBMaW5lVG9TZWdtZW50IHNlZ21lbnQ7CiAgICAg
ICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7CiAgICAgICAg
IHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAg
ICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0
ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5t
X2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGlu
ZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1
cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNlZ21l
bnQ+IHsKLSAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICBy
ZXR1cm4gcGFyc2UoW10oYXV0byBjaGFyYWN0ZXJzKSAtPiBPcHRpb25hbDxMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudD4geworICAgICAgICBhdXRvIHggPSBwYXJzZU51bWJlcihjaGFyYWN0ZXJzKTsK
ICAgICAgICAgaWYgKCF4KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAg
ICAgCiAgICAgICAgIExpbmVUb0hvcml6b250YWxTZWdtZW50IHNlZ21lbnQ7CiAgICAgICAgIHNl
Z21lbnQueCA9ICp4OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYg
KG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJh
Y3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQu
bV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlv
bmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1ZlcnRpY2FsU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0g
W10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TGlu
ZVRvVmVydGljYWxTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGN1cnJl
bnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8gY2hhcmFjdGVycykgLT4gT3B0aW9u
YWw8TGluZVRvVmVydGljYWxTZWdtZW50PiB7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVy
KGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAoIXkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvVmVydGljYWxTZWdtZW50IHNlZ21lbnQ7
CiAgICAgICAgIHNlZ21lbnQueSA9ICp5OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9
OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBl
cihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7
CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ21lbnQ+IFNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCiB7Ci0gICAgYXV0byBo
ZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRp
b25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8gcG9pbnQxID0gcGFyc2VG
bG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8gY2hhcmFj
dGVycykgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU2VnbWVudD4geworICAgICAgICBhdXRvIHBv
aW50MSA9IHBhcnNlRmxvYXRQb2ludChjaGFyYWN0ZXJzKTsKICAgICAgICAgaWYgKCFwb2ludDEp
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8gcG9pbnQy
ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8gcG9pbnQyID0g
cGFyc2VGbG9hdFBvaW50KGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAoIXBvaW50MikKICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9
IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHRhcmdldFBvaW50
ID0gcGFyc2VGbG9hdFBvaW50KGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAoIXRhcmdldFBvaW50
KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMjI1LDIxICsyMTksMTcg
QEAgT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU2VnbQogICAgICAgICBzZWdt
ZW50LnBvaW50MiA9ICpwb2ludDI7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFy
Z2V0UG9pbnQ7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9p
czhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8
U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBl
ciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFs
PEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IHsKLSAgICAgICAgYXV0byBwb2ludDIgPSBwYXJz
ZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byBjaGFy
YWN0ZXJzKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiB7CisgICAgICAg
IGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAo
IXBvaW50MikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgYXV0
byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBh
dXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGNoYXJhY3RlcnMpOwogICAgICAgICBp
ZiAoIXRhcmdldFBvaW50KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAt
MjQ3LDIxICsyMzcsMTcgQEAgT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU21v
bwogICAgICAgICBzZWdtZW50LnBvaW50MiA9ICpwb2ludDI7CiAgICAgICAgIHNlZ21lbnQudGFy
Z2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07
Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVy
KG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsK
IH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IFNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKQogewotICAg
IGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkg
LT4gT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IHsKLSAgICAgICAgYXV0byBwb2lu
dDEgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10o
YXV0byBjaGFyYWN0ZXJzKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gewor
ICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChjaGFyYWN0ZXJzKTsKICAgICAg
ICAgaWYgKCFwb2ludDEpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAg
ICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjaGFyYWN0ZXJzKTsKICAg
ICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKQEAgLTI2OSw0OSArMjU1LDQxIEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9R
dWFkcmF0aWMKICAgICAgICAgc2VnbWVudC5wb2ludDEgPSAqcG9pbnQxOwogICAgICAgICBzZWdt
ZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsK
LSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVy
KG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJu
IGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7Cisg
ICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9v
dGhTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9v
dGhTZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50
LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50PiB7Ci0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVu
dCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byBjaGFyYWN0ZXJzKSAtPiBPcHRpb25h
bDxDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudD4geworICAgICAgICBhdXRvIHRhcmdldFBv
aW50ID0gcGFyc2VGbG9hdFBvaW50KGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAoIXRhcmdldFBv
aW50KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoU2VnbWVudCBzZWdtZW50OwogICAgICAgICBzZWdtZW50LnRhcmdldFBv
aW50ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0g
ICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5t
X2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1
cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAK
IE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkFyY1RvU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJj
ZTo6cGFyc2VBcmNUb1NlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0
byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8QXJjVG9TZWdtZW50PiB7
Ci0gICAgICAgIGF1dG8gcnggPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgIHJldHVy
biBwYXJzZShbXShhdXRvIGNoYXJhY3RlcnMpIC0+IE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gewor
ICAgICAgICBhdXRvIHJ4ID0gcGFyc2VOdW1iZXIoY2hhcmFjdGVycyk7CiAgICAgICAgIGlmICgh
cngpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBhdXRvIHJ5ID0g
cGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byByeSA9IHBhcnNlTnVtYmVy
KGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAoIXJ5KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICAgICAgYXV0byBhbmdsZSA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7
CisgICAgICAgIGF1dG8gYW5nbGUgPSBwYXJzZU51bWJlcihjaGFyYWN0ZXJzKTsKICAgICAgICAg
aWYgKCFhbmdsZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1
dG8gbGFyZ2VBcmMgPSBwYXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byBs
YXJnZUFyYyA9IHBhcnNlQXJjRmxhZyhjaGFyYWN0ZXJzKTsKICAgICAgICAgaWYgKCFsYXJnZUFy
YykKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1dG8gc3dlZXAg
PSBwYXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byBzd2VlcCA9IHBhcnNl
QXJjRmxhZyhjaGFyYWN0ZXJzKTsKICAgICAgICAgaWYgKCFzd2VlcCkKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0
UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxv
YXRQb2ludChjaGFyYWN0ZXJzKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAgLTMyMywxMSArMzAxLDcgQEAgT3B0aW9uYWw8
U1ZHUGF0aFNvdXJjZTo6QXJjVG9TZWdtZW50PiBTVgogICAgICAgICBzZWdtZW50LnN3ZWVwID0g
KnN3ZWVwOwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OwogICAg
ICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQot
ICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hh
cmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9l
bmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCShyZXZpc2lvbiAy
NjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw2ICs0NSw4IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8Q3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQoKSBmaW5hbDsKICAgICBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50
KCkgZmluYWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGPiBkZWNsdHlwZShhdXRvKSBwYXJz
ZShGJiYpOworCiAgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIGJvb2wgbV9pczhCaXRTb3VyY2U7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U1ZHUG9pbnRMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgU1ZHUG9pbnRMaXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIGNsZWFySXRlbXMoKTsKKworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9y
UGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisKKyAgICAgICAgYm9vbCBkZWxpbVBhcnNl
ZCA9IGZhbHNlOworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVt
YWluaW5nKCkpIHsKKyAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7CisKKyAgICAgICAg
ICAgIGF1dG8geFBvcyA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAg
aWYgKCF4UG9zKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAg
YXV0byB5UG9zID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xp
Y3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICgheVBvcykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5n
QnVmZmVyKTsKKworICAgICAgICAgICAgaWYgKHNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcs
JykpCisgICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOworCisgICAgICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisKKyAgICAgICAgICAgIGFwcGVu
ZChTVkdQb2ludDo6Y3JlYXRlKHsgKnhQb3MsICp5UG9zIH0pKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVhckl0ZW1zKCkgb24gZmFpbHVyZSBsaWtlIFNW
R1RyYW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAgICByZXR1cm4gIWRlbGltUGFyc2VkOworICAg
IH0pOworfQorCitTdHJpbmcgU1ZHUG9pbnRMaXN0Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBvaW50
IDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQocG9pbnQtPngo
KSwgJyAnLCBwb2ludC0+eSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5oCShyZXZpc2lvbiAy
NjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDU1ICs1MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU1ZHUG9pbnRMaXN0KG90aGVyLCBhY2Nlc3MpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBjbGVhckl0ZW1zKCk7Ci0KLSAg
ICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNv
bnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHZhbHVlLmxl
bmd0aCgpOwotCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAg
ICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICB3aGlsZSAoY3VyIDwgZW5k
KSB7Ci0gICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICBhdXRv
IHhQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoIXhQb3MpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBhdXRvIHlQb3MgPSBw
YXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAg
ICAgICAgICAgIGlmICgheVBvcykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAgICAgICAgICAg
IGlmIChjdXIgPCBlbmQgJiYgKmN1ciA9PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBkZWxpbVBh
cnNlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY3VyKys7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwotCi0gICAgICAgICAgICBh
cHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7ICp4UG9zLCAqeVBvcyB9KSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gIWRlbGltUGFyc2VkOwotICAgIH0KLQotICAgIFN0cmluZyB2YWx1ZUFz
U3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBvaW50IDogbV9pdGVtcykgewotICAg
ICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocG9pbnQtPngoKSwgJyAn
LCBwb2ludC0+eSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7Ci0gICAgfQorICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAg
U3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3Bw
CShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDcgKzM3LDcgQEAgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZQogewogfQogCi1TVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVl
KQorU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUoY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCiB7CiAgICAgcGFyc2UodmFsdWUpOwogfQpAQCAt
NTksMTkgKzYwLDMwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8K
ICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6
cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlOjpwYXJzZShjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSkKIHsKLSAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygp
OwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBw
YXJzZUludGVybmFsKGJlZ2luLCBiZWdpbiArIHZhbHVlLmxlbmd0aCgpLCB0cnVlKTsKKyAgICBy
ZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIHBhcnNp
bmdCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlSW50ZXJuYWwocGFyc2luZ0J1ZmZlciwg
dHJ1ZSk7CisgICAgfSk7CiB9CiAKLWJvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpw
YXJzZShjb25zdCBVQ2hhciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxp
ZGF0ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShTdHJpbmdQYXJz
aW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKIHsKLSAgICBy
ZXR1cm4gcGFyc2VJbnRlcm5hbChjdXJyUGFyYW0sIGVuZCwgdmFsaWRhdGUpOworICAgIHJldHVy
biBwYXJzZUludGVybmFsKHBhcnNpbmdCdWZmZXIsIHZhbGlkYXRlKTsKIH0KIAotYm9vbCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwoY29uc3QgVUNoYXIqJiBjdXJy
UGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCitib29sIFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNp
bmdCdWZmZXIsIGJvb2wgdmFsaWRhdGUpCit7CisgICAgcmV0dXJuIHBhcnNlSW50ZXJuYWwocGFy
c2luZ0J1ZmZlciwgdmFsaWRhdGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBkZWZlckRlc2NbXSA9ICB7J2QnLCAnZScsICdm
JywgJ2UnLCAncid9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHBy
IENoYXJhY3RlclR5cGUgbm9uZURlc2NbXSA9ICB7J24nLCAnbycsICduJywgJ2UnfTsKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG1lZXRE
ZXNjW10gPSAgeydtJywgJ2UnLCAnZScsICd0J307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBzbGljZURlc2NbXSA9ICB7J3MnLCAnbCcs
ICdpJywgJ2MnLCAnZSd9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9v
bCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKIHsK
ICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVD
VFJBVElPX1hNSURZTUlEOwogICAgIFNWR01lZXRPclNsaWNlVHlwZSBtZWV0T3JTbGljZSA9IFNW
R19NRUVUT1JTTElDRV9NRUVUOwpAQCAtNzksMTAwICs5MSwxMDAgQEAgYm9vbCBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSQogICAgIG1fYWxpZ24gPSBhbGlnbjsKICAgICBtX21l
ZXRPclNsaWNlID0gbWVldE9yU2xpY2U7CiAKLSAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNl
cyhjdXJyUGFyYW0sIGVuZCkpCisgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2lu
Z0J1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICgqY3VyclBhcmFtID09
ICdkJykgewotICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJkZWZlciIp
KSB7CisgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdkJykgeworICAgICAgICBpZiAoIXNraXBD
aGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBkZWZlckRlc2M8Q2hhcmFjdGVyVHlwZT4p
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8gcGFyc2UgZXhjZXB0IGZvciAq
ZGVmZXIqIHZhbHVlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gRklYTUU6IFdlIGp1c3QgaWdub3JlIHRoZSAiZGVmZXIiIGhlcmUuCi0gICAg
ICAgIGlmIChjdXJyUGFyYW0gPT0gZW5kKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVu
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKCFza2lwT3B0aW9u
YWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpKQorICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNW
R1NwYWNlcyhwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBpZiAoKmN1cnJQYXJhbSA9PSAnbicpIHsKLSAgICAgICAgaWYgKCFza2lwU3RyaW5n
KGN1cnJQYXJhbSwgZW5kLCAibm9uZSIpKSB7CisgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdu
JykgeworICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBu
b25lRGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBl
ZCB0byBwYXJzZSBleGNlcHQgZm9yICpub25lKiB2YWx1ZS4iKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJB
VElPX05PTkU7Ci0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCk7
Ci0gICAgfSBlbHNlIGlmICgqY3VyclBhcmFtID09ICd4JykgewotICAgICAgICBpZiAoKGVuZCAt
IGN1cnJQYXJhbSkgPCA4KQorICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1
ZmZlcik7CisgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAneCcpIHsKKyAgICAgICAg
aWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPCA4KQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoY3VyclBhcmFtWzFdICE9ICdNJyB8fCBjdXJyUGFyYW1b
NF0gIT0gJ1knIHx8IGN1cnJQYXJhbVs1XSAhPSAnTScpCisgICAgICAgIGlmIChwYXJzaW5nQnVm
ZmVyWzFdICE9ICdNJyB8fCBwYXJzaW5nQnVmZmVyWzRdICE9ICdZJyB8fCBwYXJzaW5nQnVmZmVy
WzVdICE9ICdNJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGN1cnJQ
YXJhbVsyXSA9PSAnaScpIHsKLSAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bM10gPT0gJ24nKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAnaScpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAgIGlmIChwYXJzaW5nQnVm
ZmVyWzJdID09ICdpJykgeworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbM10gPT0gJ24n
KSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbNl0gPT0gJ2knKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzddID09ICduJykKICAgICAgICAgICAg
ICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSU47Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJhbVs3XSA9PSAnZCcpCisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbN10gPT0gJ2QnKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JRDsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzZdID09ICdhJyAm
JiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2lu
Z0J1ZmZlcls2XSA9PSAnYScgJiYgcGFyc2luZ0J1ZmZlcls3XSA9PSAneCcpCiAgICAgICAgICAg
ICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNQVg7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bM10gPT0gJ2QnKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAnaScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1
cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJb
M10gPT0gJ2QnKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbNl0gPT0gJ2kn
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzddID09ICduJykKICAg
ICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1J
RFlNSU47Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJhbVs3XSA9PSAnZCcp
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbN10gPT0gJ2QnKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19Y
TUlEWU1JRDsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzZd
ID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnYScgJiYgcGFyc2luZ0J1ZmZlcls3XSA9PSAneCcpCiAg
ICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlN
QVg7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzJdID09ICdhJyAmJiBjdXJyUGFyYW1bM10gPT0g
J3gnKSB7Ci0gICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdpJykgewotICAgICAgICAg
ICAgICAgIGlmIChjdXJyUGFyYW1bN10gPT0gJ24nKQorICAgICAgICB9IGVsc2UgaWYgKHBhcnNp
bmdCdWZmZXJbMl0gPT0gJ2EnICYmIHBhcnNpbmdCdWZmZXJbM10gPT0gJ3gnKSB7CisgICAgICAg
ICAgICBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnaScpIHsKKyAgICAgICAgICAgICAgICBpZiAo
cGFyc2luZ0J1ZmZlcls3XSA9PSAnbicpCiAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZH
X1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU47Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
Y3VyclBhcmFtWzddID09ICdkJykKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXJzaW5nQnVm
ZmVyWzddID09ICdkJykKICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVB
U1BFQ1RSQVRJT19YTUFYWU1JRDsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzZd
ID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAgICAgfSBlbHNlIGlmIChw
YXJzaW5nQnVmZmVyWzZdID09ICdhJyAmJiBwYXJzaW5nQnVmZmVyWzddID09ICd4JykKICAgICAg
ICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUFYOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGN1cnJQYXJhbSArPSA4Owot
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpOworICAgICAgICBw
YXJzaW5nQnVmZmVyLmFkdmFuY2VCeSg4KTsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KHBhcnNpbmdCdWZmZXIpOwogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoY3VyclBhcmFtIDwgZW5kKSB7Ci0gICAgICAgIGlmICgqY3VyclBhcmFtID09ICdtJykg
ewotICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAibWVldCIpKSB7
CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAg
ICAgIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAnbScpIHsKKyAgICAgICAgICAgIGlmICghc2tpcENo
YXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIG1lZXREZXNjPENoYXJhY3RlclR5cGU+KSkg
ewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJzZSBleGNlcHQgZm9y
ICptZWV0KiBvciAqc2xpY2UqIHZhbHVlLiIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJy
UGFyYW0sIGVuZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJQYXJhbSA9PSAncycpIHsKLSAg
ICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgInNsaWNlIikpIHsKKyAg
ICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAg
fSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAncycpIHsKKyAgICAgICAgICAgIGlmICghc2tp
cENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHNsaWNlRGVzYzxDaGFyYWN0ZXJUeXBl
PikpIHsKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8gcGFyc2UgZXhjZXB0
IGZvciAqbWVldCogb3IgKnNsaWNlKiB2YWx1ZS4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
Y3VyclBhcmFtLCBlbmQpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNp
bmdCdWZmZXIpOwogICAgICAgICAgICAgaWYgKGFsaWduICE9IFNWR19QUkVTRVJWRUFTUEVDVFJB
VElPX05PTkUpCiAgICAgICAgICAgICAgICAgbWVldE9yU2xpY2UgPSBTVkdfTUVFVE9SU0xJQ0Vf
U0xJQ0U7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZW5kICE9IGN1cnJQYXJhbSAmJiB2
YWxpZGF0ZSkKKyAgICBpZiAoIXBhcnNpbmdCdWZmZXIuYXRFbmQoKSAmJiB2YWxpZGF0ZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9hbGlnbiA9IGFsaWduOwpAQCAtMzI4LDUyICsz
NDAsNDQgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYQogCiBTdHJp
bmcgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKIHsK
LSAgICBTdHJpbmcgYWxpZ25UeXBlOworICAgIGF1dG8gYWxpZ25UeXBlID0gWyZdKCkgeworICAg
ICAgICBzd2l0Y2ggKG1fYWxpZ24pIHsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RS
QVRJT19OT05FOgorICAgICAgICAgICAgcmV0dXJuICJub25lIjsKKyAgICAgICAgY2FzZSBTVkdf
UFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JTjoKKyAgICAgICAgICAgIHJldHVybiAieE1pbllN
aW4iOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlOOgorICAg
ICAgICAgICAgcmV0dXJuICJ4TWlkWU1pbiI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQ
RUNUUkFUSU9fWE1BWFlNSU46CisgICAgICAgICAgICByZXR1cm4gInhNYXhZTWluIjsKKyAgICAg
ICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JRDoKKyAgICAgICAgICAgIHJl
dHVybiAieE1pbllNaWQiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hN
SURZTUlEOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1pZCI7CisgICAgICAgIGNhc2UgU1ZH
X1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSUQ6CisgICAgICAgICAgICByZXR1cm4gInhNYXhZ
TWlkIjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1BWDoKKyAg
ICAgICAgICAgIHJldHVybiAieE1pbllNYXgiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1hNSURZTUFYOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1heCI7CisgICAg
ICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNQVg6CisgICAgICAgICAgICBy
ZXR1cm4gInhNYXhZTWF4IjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19V
TktOT1dOOgorICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKKyAgICAgICAgfTsKIAotICAg
IHN3aXRjaCAobV9hbGlnbikgewotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9O
RToKLSAgICAgICAgYWxpZ25UeXBlID0gIm5vbmUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlOOgotICAgICAgICBhbGlnblR5cGUgPSAi
eE1pbllNaW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJB
VElPX1hNSURZTUlOOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNaW4iOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlOOgotICAgICAg
ICBhbGlnblR5cGUgPSAieE1heFlNaW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlEOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pbllN
aWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hN
SURZTUlEOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNaWQiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlEOgotICAgICAgICBhbGln
blR5cGUgPSAieE1heFlNaWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1hNSU5ZTUFYOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pbllNYXgiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUFY
OgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNYXgiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUFYOgotICAgICAgICBhbGlnblR5cGUg
PSAieE1heFlNYXgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVD
VFJBVElPX1VOS05PV046Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ1bmtub3duIjsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gInVu
a25vd24iOwogICAgIH07CiAKICAgICBzd2l0Y2ggKG1fbWVldE9yU2xpY2UpIHsKICAgICBkZWZh
dWx0OgogICAgIGNhc2UgU1ZHX01FRVRPUlNMSUNFX1VOS05PV046Ci0gICAgICAgIHJldHVybiBh
bGlnblR5cGU7CisgICAgICAgIHJldHVybiBhbGlnblR5cGUoKTsKICAgICBjYXNlIFNWR19NRUVU
T1JTTElDRV9NRUVUOgotICAgICAgICByZXR1cm4gYWxpZ25UeXBlICsgIiBtZWV0IjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoYWxpZ25UeXBlKCksICIgbWVldCIpOwogICAgIGNhc2UgU1ZH
X01FRVRPUlNMSUNFX1NMSUNFOgotICAgICAgICByZXR1cm4gYWxpZ25UeXBlICsgIiBzbGljZSI7
CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGFsaWduVHlwZSgpLCAiIHNsaWNlIik7CiAgICAg
fQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZS5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcg
QEAgcHVibGljOgogICAgIH07CiAKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoKTsK
LSAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0cmluZ1ZpZXcmKTsKIAogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNldEFsaWduKHVuc2lnbmVkIHNob3J0KTsKICAgICB1bnNpZ25lZCBzaG9y
dCBhbGlnbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ247IH0KQEAgLTY0LDggKzY0LDkgQEAgcHVi
bGljOgogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShmbG9hdCBsb2dpY2FsWCwgZmxvYXQg
bG9naWNhbFksIGZsb2F0IGxvZ2ljYWxXaWR0aCwgZmxvYXQgbG9naWNhbEhlaWdodCwgZmxvYXQg
cGh5c2ljYWxXaWR0aCwgZmxvYXQgcGh5c2ljYWxIZWlnaHQpIGNvbnN0OwogCi0gICAgdm9pZCBw
YXJzZShjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHBhcnNlKGNvbnN0IFVDaGFyKiYgY3VyclBh
cmFtLCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKTsKKyAgICBib29sIHBhcnNlKGNv
bnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBib29sIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENo
YXI+JiwgYm9vbCB2YWxpZGF0ZSk7CisgICAgYm9vbCBwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVy
PFVDaGFyPiYsIGJvb2wgdmFsaWRhdGUpOwogCiAgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBj
b25zdDsKIApAQCAtNzMsNyArNzQsOCBAQCBwcml2YXRlOgogICAgIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9UeXBlIG1fYWxpZ247CiAgICAgU1ZHTWVldE9yU2xpY2VUeXBlIG1fbWVldE9yU2xpY2U7
CiAKLSAgICBib29sIHBhcnNlSW50ZXJuYWwoY29uc3QgVUNoYXIqJiBjdXJyUGFyYW0sIGNvbnN0
IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+CisgICAgYm9vbCBwYXJzZUludGVybmFsKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4mLCBib29sIHZhbGlkYXRlKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IFNW
R1Byb3BlcnR5VHJhaXRzPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gewpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdTdHJpbmdM
aXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgU1ZHU3RyaW5nTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiBkYXRhLCBVQ2hhciBkZWxp
bWl0ZXIpCit7CisgICAgY2xlYXJJdGVtcygpOworCisgICAgYXV0byBpc1NWR1NwYWNlT3JEZWxp
bWl0ZXIgPSBbZGVsaW1pdGVyXShhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIGlzU1ZHU3BhY2Uo
YykgfHwgYyA9PSBkZWxpbWl0ZXI7CisgICAgfTsKKworICAgIHJldHVybiBXVEY6OnJlYWRDaGFy
YWN0ZXJzRm9yUGFyc2luZyhkYXRhLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAg
IHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAg
ICAgICAgYXV0byBzdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGEgbmljZSBpbXByb3ZlbWVudCB0
byBhZGQgYSB2YXJpYW50IG9mIHNraXBVbnRpbCB3aGljaCB3b3JrZWQKKyAgICAgICAgICAgIC8v
IHdpdGggbGFtYmRhIHByZWRpY2F0ZXMuCisgICAgICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZl
ci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgIWlzU1ZHU3BhY2VPckRlbGltaXRlcigqcGFy
c2luZ0J1ZmZlcikpCisgICAgICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVyOworCisgICAgICAg
ICAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09IHN0YXJ0KQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5nKHN0YXJ0LCBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBzdGFydCkpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlciwgZGVsaW1pdGVyKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVhckl0ZW1zKCkgb24gZmFpbHVy
ZSBsaWtlIFNWR1RyYW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAgICByZXR1cm4gcGFyc2luZ0J1
ZmZlci5hdEVuZCgpOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHU3RyaW5nTGlzdDo6dmFsdWVB
c1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgZm9y
IChjb25zdCBhdXRvJiBzdHJpbmcgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVyLmxl
bmd0aCgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBidWls
ZGVyLmFwcGVuZChzdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5n
KCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuaAkocmV2aXNpb24g
MjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTEsMzkgKzUxLDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9pdGVtcy5hcHBl
bmQoZW1wdHlTdHJpbmcoKSk7CiAgICAgfQogCi0gICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcm
IGRhdGEsIFVDaGFyIGRlbGltaXRlcikKLSAgICB7Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQot
ICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoZGF0YSkudXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZl
cnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBkYXRhLmxl
bmd0aCgpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgICAgICBjb25zdCBV
Q2hhciogc3RhcnQgPSBwdHI7Ci0gICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIg
IT0gZGVsaW1pdGVyICYmICFpc1NWR1NwYWNlKCpwdHIpKQotICAgICAgICAgICAgICAgIHB0cisr
OwotICAgICAgICAgICAgaWYgKHB0ciA9PSBzdGFydCkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIG1faXRlbXMuYXBwZW5kKFN0cmluZyhzdGFydCwgcHRyIC0gc3RhcnQpKTsK
LSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCBk
ZWxpbWl0ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHB0ciA9PSBlbmQ7Ci0gICAg
fQotCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYg
c3RyaW5nIDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0g
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoc3RyaW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBidWlsZGVyLnRv
U3RyaW5nKCk7Ci0gICAgfQorICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiBkYXRhLCBVQ2hh
ciBkZWxpbWl0ZXIpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVHJhbnNmb3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RyYW5zZm9ybUxpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUcmFuc2Zvcm1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0
LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4
Y2VwdGlvbk9yPFJlZlB0cjxTVkdUcmFuc2Zvcm0+PiBTVkdUcmFuc2Zvcm1MaXN0Ojpjb25zb2xp
ZGF0ZSgpCit7CisgICAgYXV0byByZXN1bHQgPSBjYW5BbHRlckxpc3QoKTsKKyAgICBpZiAocmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRp
b24oKTsKKyAgICBBU1NFUlQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKworICAgIC8v
IFNwZWM6IElmIHRoZSBsaXN0IHdhcyBlbXB0eSwgdGhlbiBhIHZhbHVlIG9mIG51bGwgaXMgcmV0
dXJuZWQuCisgICAgaWYgKG1faXRlbXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGlmIChtX2l0ZW1zLnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gbWFrZVJl
ZlB0cihhdCgwKS5nZXQoKSk7CisKKyAgICBhdXRvIG5ld0l0ZW0gPSBTVkdUcmFuc2Zvcm06OmNy
ZWF0ZShjb25jYXRlbmF0ZSgpKTsKKyAgICBjbGVhckl0ZW1zKCk7CisKKyAgICBhdXRvIGl0ZW0g
PSBhcHBlbmQoV1RGTW92ZShuZXdJdGVtKSk7CisgICAgY29tbWl0Q2hhbmdlKCk7CisgICAgcmV0
dXJuIG1ha2VSZWZQdHIoaXRlbS5nZXQoKSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBTVkdUcmFu
c2Zvcm1MaXN0Ojpjb25jYXRlbmF0ZSgpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHJl
c3VsdDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zZm9ybSA6IG1faXRlbXMpCisgICAgICAg
IHJlc3VsdCAqPSB0cmFuc2Zvcm0tPm1hdHJpeCgpLT52YWx1ZSgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgU1ZHVHJhbnNm
b3JtTGlzdDo6cGFyc2VHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
IHBhcnNpbmdCdWZmZXIpCit7CisgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgIHdo
aWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICBk
ZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2lu
Z0J1ZmZlcik7CisgICAgICAgIAorICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9ybVR5cGUgPSBT
VkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUocGFyc2luZ0J1ZmZlcik7CisgICAg
ICAgIGlmICghcGFyc2VkVHJhbnNmb3JtVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9ybVZhbHVlID0gU1ZHVHJhbnNmb3JtYWJsZTo6
cGFyc2VUcmFuc2Zvcm1WYWx1ZSgqcGFyc2VkVHJhbnNmb3JtVHlwZSwgcGFyc2luZ0J1ZmZlcik7
CisgICAgICAgIGlmICghcGFyc2VkVHJhbnNmb3JtVmFsdWUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgYXBwZW5kKFNWR1RyYW5zZm9ybTo6Y3JlYXRlKCpwYXJzZWRUcmFu
c2Zvcm1WYWx1ZSkpOworCisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVm
ZmVyKTsKKworICAgICAgICBpZiAoc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJywnKSkKKyAg
ICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKKworICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgfQorICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7Cit9
CisKK3ZvaWQgU1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sK
KyAgICBjbGVhckl0ZW1zKCk7CisKKyAgICBib29sIHBhcnNpbmdTdWNjZWVkZWQgPSBXVEY6OnJl
YWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgewor
ICAgICAgICByZXR1cm4gcGFyc2VHZW5lcmljKHBhcnNpbmdCdWZmZXIpOworICAgIH0pOworICAg
IAorICAgIGlmICghcGFyc2luZ1N1Y2NlZWRlZCkKKyAgICAgICAgY2xlYXJJdGVtcygpOworfQor
Citib29sIFNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+
JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZUdlbmVyaWMocGFyc2luZ0J1ZmZl
cik7Cit9CisKK2Jvb2wgU1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNlR2VuZXJpYyhwYXJz
aW5nQnVmZmVyKTsKK30KKworU3RyaW5nIFNWR1RyYW5zZm9ybUxpc3Q6OnZhbHVlQXNTdHJpbmco
KSBjb25zdAoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIHRyYW5zZnJvbSA6IG1faXRlbXMpIHsKKyAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkp
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworCisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKHRyYW5zZnJvbS0+dmFsdWUoKS52YWx1ZUFzU3RyaW5nKCkpOworICAgIH0KKyAgICByZXR1
cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit9CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUcmFuc2Zvcm1MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RyYW5zZm9ybUxpc3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RyYW5zZm9ybUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsODYgKzU2LDE1IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHN2Z1RyYW5zZm9ybTsKICAgICB9CiAKLSAgICBFeGNlcHRp
b25PcjxSZWZQdHI8U1ZHVHJhbnNmb3JtPj4gY29uc29saWRhdGUoKQotICAgIHsKLSAgICAgICAg
YXV0byByZXN1bHQgPSBjYW5BbHRlckxpc3QoKTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNl
cHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwot
ICAgICAgICBBU1NFUlQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLQotICAgICAgICAv
LyBTcGVjOiBJZiB0aGUgbGlzdCB3YXMgZW1wdHksIHRoZW4gYSB2YWx1ZSBvZiBudWxsIGlzIHJl
dHVybmVkLgotICAgICAgICBpZiAobV9pdGVtcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgICAgICBpZiAobV9pdGVtcy5zaXplKCkgPT0gMSkKLSAgICAgICAg
ICAgIHJldHVybiBtYWtlUmVmUHRyKGF0KDApLmdldCgpKTsKLQotICAgICAgICBhdXRvIG5ld0l0
ZW0gPSBTVkdUcmFuc2Zvcm06OmNyZWF0ZShjb25jYXRlbmF0ZSgpKTsKLSAgICAgICAgY2xlYXJJ
dGVtcygpOwotCi0gICAgICAgIGF1dG8gaXRlbSA9IGFwcGVuZChXVEZNb3ZlKG5ld0l0ZW0pKTsK
LSAgICAgICAgY29tbWl0Q2hhbmdlKCk7Ci0gICAgICAgIHJldHVybiBtYWtlUmVmUHRyKGl0ZW0u
Z2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgcGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hh
cmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAg
ICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAg
IGlmICghcGFyc2Uoc3RhcnQsIHN0YXJ0ICsgdmFsdWUubGVuZ3RoKCkpKQotICAgICAgICAgICAg
Y2xlYXJJdGVtcygpOwotICAgIH0KLQotICAgIEFmZmluZVRyYW5zZm9ybSBjb25jYXRlbmF0ZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gcmVzdWx0OwotICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHRyYW5zZm9ybSA6IG1faXRlbXMpCi0gICAgICAgICAgICByZXN1bHQg
Kj0gdHJhbnNmb3JtLT5tYXRyaXgoKS0+dmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0
byYgdHJhbnNmcm9tIDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3Ro
KCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQodHJhbnNmcm9tLT52YWx1ZSgpLnZhbHVlQXNTdHJpbmcoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9CisgICAgRXhj
ZXB0aW9uT3I8UmVmUHRyPFNWR1RyYW5zZm9ybT4+IGNvbnNvbGlkYXRlKCk7CisgICAgQWZmaW5l
VHJhbnNmb3JtIGNvbmNhdGVuYXRlKCkgY29uc3Q7CisgICAgdm9pZCBwYXJzZShjb25zdCBTdHJp
bmcmKTsKKyAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2
YXRlOgotICAgIGJvb2wgcGFyc2UoY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVu
ZCkKLSAgICB7Ci0gICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICAgICAgd2hp
bGUgKHN0YXJ0IDwgZW5kKSB7Ci0gICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAg
ICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBhdXRvIHR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBU
eXBlKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYgKCF0eXBlKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgYXV0byBwYXJzZWRUcmFuc2Zvcm1WYWx1ZSA9
IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoKnR5cGUsIHN0YXJ0LCBlbmQp
OwotICAgICAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGFwcGVuZChTVkdUcmFuc2Zvcm06OmNyZWF0
ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKLQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYgKHN0YXJ0IDwgZW5kICYmICpzdGFy
dCA9PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgKytzdGFydDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAhZGVs
aW1QYXJzZWQ7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJv
b2wgcGFyc2VHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAg
ICBib29sIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CisgICAgYm9vbCBwYXJz
ZShTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAkocmV2aXNp
b24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw4NSArMjcsODYgQEAKICNpbmNsdWRlICJTVkdFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbnQg
cGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBl
bmQsIGZsb2F0KiB2YWx1ZXMsIGludCByZXF1aXJlZCwgaW50IG9wdGlvbmFsKQorU1ZHVHJhbnNm
b3JtYWJsZTo6flNWR1RyYW5zZm9ybWFibGUoKSA9IGRlZmF1bHQ7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgZmxvYXQqIHZh
bHVlcywgaW50IHJlcXVpcmVkLCBpbnQgb3B0aW9uYWwpCiB7CiAgICAgaW50IG9wdGlvbmFsUGFy
YW1zID0gMCwgcmVxdWlyZWRQYXJhbXMgPSAwOwogICAgIAotICAgIGlmICghc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKHB0ciwgZW5kKSB8fCAqcHRyICE9ICcoJykKKyAgICBpZiAoIXNraXBPcHRpb25h
bFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAnKCcpCiAgICAg
ICAgIHJldHVybiAtMTsKICAgICAKLSAgICBwdHIrKzsKKyAgICArK3BhcnNpbmdCdWZmZXI7CiAg
ICAKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOworICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKIAogICAgIHdoaWxlIChyZXF1aXJlZFBhcmFtcyA8
IHJlcXVpcmVkKSB7Ci0gICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICBpZiAocGFyc2lu
Z0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBhdXRvIHBh
cnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6
RG9udFNraXApOworICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHBhcnNp
bmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CiAgICAgICAgIGlmICgh
cGFyc2VkTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB2YWx1ZXNbcmVx
dWlyZWRQYXJhbXNdID0gKnBhcnNlZE51bWJlcjsKICAgICAgICAgcmVxdWlyZWRQYXJhbXMrKzsK
ICAgICAgICAgaWYgKHJlcXVpcmVkUGFyYW1zIDwgcmVxdWlyZWQpCi0gICAgICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyKTsKICAgICB9Ci0gICAg
aWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpKQorICAgIGlmICghc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgCi0g
ICAgYm9vbCBkZWxpbVBhcnNlZCA9IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0
ciwgZW5kKTsKKyAgICBib29sIGRlbGltUGFyc2VkID0gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JE
ZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBpZiAocHRyID49IGVuZCkKKyAgICBpZiAo
cGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgCi0gICAgaWYg
KCpwdHIgPT0gJyknKSB7IC8vIHNraXAgb3B0aW9uYWxzCi0gICAgICAgIHB0cisrOworICAgIGlm
ICgqcGFyc2luZ0J1ZmZlciA9PSAnKScpIHsKKyAgICAgICAgLy8gc2tpcCBvcHRpb25hbHMKKyAg
ICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgICAgICBpZiAoZGVsaW1QYXJzZWQpCiAgICAgICAg
ICAgICByZXR1cm4gLTE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgd2hpbGUgKG9wdGlvbmFsUGFy
YW1zIDwgb3B0aW9uYWwpIHsKLSAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAg
ICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7
Ci0gICAgICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBT
dWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICAgICAgYXV0byBwYXJzZWRO
dW1iZXIgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6
RG9udFNraXApOwogICAgICAgICAgICAgaWYgKCFwYXJzZWROdW1iZXIpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgdmFsdWVzW3JlcXVpcmVkUGFyYW1zICsgb3B0aW9u
YWxQYXJhbXNdID0gKnBhcnNlZE51bWJlcjsKICAgICAgICAgICAgIG9wdGlvbmFsUGFyYW1zKys7
CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxQYXJhbXMgPCBvcHRpb25hbCkKLSAgICAgICAgICAg
ICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgICAg
ICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KHB0ciwgZW5kKSkKKyAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1
ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIAotICAgICAgICBkZWxpbVBh
cnNlZCA9IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICAg
ICAgZGVsaW1QYXJzZWQgPSBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5n
QnVmZmVyKTsKICAgICAgICAgCi0gICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICpwdHIgIT0gJykn
IHx8IGRlbGltUGFyc2VkKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICpw
YXJzaW5nQnVmZmVyICE9ICcpJyB8fCBkZWxpbVBhcnNlZCkKICAgICAgICAgICAgIHJldHVybiAt
MTsKLSAgICAgICAgcHRyKys7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKICAgICB9CiAKICAg
ICByZXR1cm4gcmVxdWlyZWRQYXJhbXMgKyBvcHRpb25hbFBhcmFtczsKIH0KIAogLy8gVGhlc2Ug
c2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIGVudW0gU1ZHVHJhbnNmb3JtVHlwZQotc3RhdGlj
IGNvbnN0IGludCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbXSA9ICB7MCwgNiwgMSwgMSwgMSwgMSwg
MX07Ci1zdGF0aWMgY29uc3QgaW50IG9wdGlvbmFsVmFsdWVzRm9yVHlwZVtdID0gIHswLCAwLCAx
LCAxLCAyLCAwLCAwfTsKK2NvbnN0ZXhwciBpbnQgcmVxdWlyZWRWYWx1ZXNGb3JUeXBlW10gPSAg
ezAsIDYsIDEsIDEsIDEsIDEsIDF9OworY29uc3RleHByIGludCBvcHRpb25hbFZhbHVlc0ZvclR5
cGVbXSA9ICB7MCwgMCwgMSwgMSwgMiwgMCwgMH07CiAKLS8vIFRoaXMgZGVzdHJ1Y3RvciBpcyBu
ZWVkZWQgaW4gb3JkZXIgdG8gbGluayBjb3JyZWN0bHkgd2l0aCBJbnRlbCBJQ0MuCi1TVkdUcmFu
c2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpID0gZGVmYXVsdDsKLQotT3B0aW9uYWw8U1ZH
VHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgVUNoYXIqJiBwdHIs
IGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0
aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWVHZW5lcmlj
KFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7CiAgICAgaWYgKHR5cGUgPT0g
U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAogICAgIGludCB2YWx1ZUNvdW50ID0gMDsKICAgICBmbG9hdCB2YWx1
ZXNbXSA9IHswLCAwLCAwLCAwLCAwLCAwfTsKLSAgICBpZiAoKHZhbHVlQ291bnQgPSBwYXJzZVRy
YW5zZm9ybVBhcmFtTGlzdChwdHIsIGVuZCwgdmFsdWVzLCByZXF1aXJlZFZhbHVlc0ZvclR5cGVb
dHlwZV0sIG9wdGlvbmFsVmFsdWVzRm9yVHlwZVt0eXBlXSkpIDwgMCkKKyAgICBpZiAoKHZhbHVl
Q291bnQgPSBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChwYXJzaW5nQnVmZmVyLCB2YWx1ZXMsIHJl
cXVpcmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW3R5cGVdKSkg
PCAwKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgU1ZHVHJhbnNmb3JtVmFs
dWUgdHJhbnNmb3JtOwpAQCAtMTQ1LDQyICsxNDYsNjMgQEAgT3B0aW9uYWw8U1ZHVHJhbnNmb3Jt
VmFsdWU+IFNWR1RyYW5zZm9ybQogICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKLXN0YXRpYyBj
b25zdCBVQ2hhciBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9Owotc3Rh
dGljIGNvbnN0IFVDaGFyIHNrZXdZRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycsICdZJ307
Ci1zdGF0aWMgY29uc3QgVUNoYXIgc2NhbGVEZXNjW10gPSAgeydzJywgJ2MnLCAnYScsICdsJywg
J2UnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB0cmFuc2xhdGVEZXNjW10gPSAgeyd0JywgJ3InLCAn
YScsICduJywgJ3MnLCAnbCcsICdhJywgJ3QnLCAnZSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHJv
dGF0ZURlc2NbXSA9ICB7J3InLCAnbycsICd0JywgJ2EnLCAndCcsICdlJ307Ci1zdGF0aWMgY29u
c3QgVUNoYXIgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3QnLCAncicsICdpJywgJ3gnfTsK
K09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5z
Zm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIFN0cmlu
Z1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBwYXJz
ZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyh0eXBlLCBwYXJzaW5nQnVmZmVyKTsKK30KKworT3B0aW9u
YWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFs
dWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNm
b3JtVmFsdWVHZW5lcmljKHR5cGUsIHBhcnNpbmdCdWZmZXIpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBza2V3WERlc2NbXSA9
ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgc2tld1lEZXNjW10gPSAgeydzJywgJ2snLCAn
ZScsICd3JywgJ1knfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhw
ciBDaGFyYWN0ZXJUeXBlIHNjYWxlRGVzY1tdID0gIHsncycsICdjJywgJ2EnLCAnbCcsICdlJ307
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlw
ZSB0cmFuc2xhdGVEZXNjW10gPSAgeyd0JywgJ3InLCAnYScsICduJywgJ3MnLCAnbCcsICdhJywg
J3QnLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENo
YXJhY3RlclR5cGUgcm90YXRlRGVzY1tdID0gIHsncicsICdvJywgJ3QnLCAnYScsICd0JywgJ2Un
fTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJU
eXBlIG1hdHJpeERlc2NbXSA9ICB7J20nLCAnYScsICd0JywgJ3InLCAnaScsICd4J307CiAKLU9w
dGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdUcmFuc2Zvcm1h
YmxlOjpwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3Qg
VUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRp
b25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1U
eXBlR2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVm
ZmVyKQogewotICAgIGlmIChjdXJyVHJhbnNmb3JtID49IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1
ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCpj
dXJyVHJhbnNmb3JtID09ICdzJykgewotICAgICAgICBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNm
b3JtLCBlbmQsIHNrZXdYRGVzYywgV1RGX0FSUkFZX0xFTkdUSChza2V3WERlc2MpKSkKKyAgICBp
ZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ3MnKSB7CisgICAgICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4
YWN0bHkocGFyc2luZ0J1ZmZlciwgc2tld1hEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAg
ICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TS0VXWDsKLSAgICAg
ICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHNrZXdZRGVzYywgV1RG
X0FSUkFZX0xFTkdUSChza2V3WURlc2MpKSkKKyAgICAgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhh
Y3RseShwYXJzaW5nQnVmZmVyLCBza2V3WURlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICAg
ICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdZOwotICAgICAg
ICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2NhbGVEZXNjLCBXVEZf
QVJSQVlfTEVOR1RIKHNjYWxlRGVzYykpKQorICAgICAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFj
dGx5KHBhcnNpbmdCdWZmZXIsIHNjYWxlRGVzYzxDaGFyYWN0ZXJUeXBlPikpCiAgICAgICAgICAg
ICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0NBTEU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfSBlbHNlIGlmIChz
a2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgdHJhbnNsYXRlRGVzYywgV1RGX0FSUkFZX0xF
TkdUSCh0cmFuc2xhdGVEZXNjKSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
fQorCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCB0cmFuc2xh
dGVEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVl
OjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURTsKLSAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJU
cmFuc2Zvcm0sIGVuZCwgcm90YXRlRGVzYywgV1RGX0FSUkFZX0xFTkdUSChyb3RhdGVEZXNjKSkp
CisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCByb3RhdGVEZXNj
PENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdf
VFJBTlNGT1JNX1JPVEFURTsKLSAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0s
IGVuZCwgbWF0cml4RGVzYywgV1RGX0FSUkFZX0xFTkdUSChtYXRyaXhEZXNjKSkpCisgICAgaWYg
KHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBtYXRyaXhEZXNjPENoYXJhY3Rl
clR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JN
X01BVFJJWDsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLVNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdUcmFuc2Zvcm1UeXBlIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6
U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKGNv
bnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKK3sKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVy
c0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgcmV0
dXJuIHBhcnNlVHJhbnNmb3JtVHlwZShwYXJzaW5nQnVmZmVyKTsKKyAgICB9KTsKK30KKworT3B0
aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IFNWR1RyYW5zZm9ybWFi
bGU6OnBhcnNlVHJhbnNmb3JtVHlwZShTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2lu
Z0J1ZmZlcikKK3sKKyAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlR2VuZXJpYyhwYXJzaW5n
QnVmZmVyKTsKK30KKworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5
cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShTdHJpbmdQYXJzaW5nQnVm
ZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcodHlwZVN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0g
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAg
cmV0dXJuIHBhcnNlQW5kU2tpcFR5cGUoY2hhcmFjdGVycywgY2hhcmFjdGVycyArIHR5cGVTdHJp
bmcubGVuZ3RoKCkpLnZhbHVlT3IoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5L
Tk9XTik7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMocGFyc2luZ0J1ZmZl
cik7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkocmV2
aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSAiU1ZHTG9jYXRhYmxl
LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtVmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIApAQCAtMzIsOSArMzEsMTIg
QEAgY2xhc3MgU1ZHVHJhbnNmb3JtYWJsZSA6IHB1YmxpYyBTVkdMb2NhdAogcHVibGljOgogICAg
IHZpcnR1YWwgflNWR1RyYW5zZm9ybWFibGUoKTsKIAotICAgIHN0YXRpYyBPcHRpb25hbDxTVkdU
cmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
VHJhbnNmb3JtVHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpOwotICAg
IHN0YXRpYyBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBwYXJzZVRyYW5zZm9y
bVR5cGUoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3Vy
clRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1Ry
YW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdU
cmFuc2Zvcm1UeXBlLCBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBP
cHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsK
KworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlw
ZT4gcGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBzdGF0aWMgT3B0
aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IHBhcnNlVHJhbnNmb3Jt
VHlwZShTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBPcHRpb25hbDxT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlKFN0
cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxD
b29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOyB9CiAgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNWR1RyYW5z
Zm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTYwLDk5ICs2MSw5MCBAQCB2b2lkIFNWR1ZpZXdTcGVjOjpyZXNldCgpCiAgICAgU1ZHWm9vbUFu
ZFBhbjo6cmVzZXQoKTsKIH0KIAotc3RhdGljIGNvbnN0IFVDaGFyIHN2Z1ZpZXdTcGVjW10gPSB7
J3MnLCAndicsICdnJywgJ1YnLCAnaScsICdlJywgJ3cnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB2
aWV3Qm94U3BlY1tdID0geyd2JywgJ2knLCAnZScsICd3JywgJ0InLCAnbycsICd4J307Ci1zdGF0
aWMgY29uc3QgVUNoYXIgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWNbXSA9IHsncCcsICdyJywgJ2Un
LCAncycsICdlJywgJ3InLCAndicsICdlJywgJ0EnLCAncycsICdwJywgJ2UnLCAnYycsICd0Jywg
J1InLCAnYScsICd0JywgJ2knLCAnbyd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zZm9ybVNw
ZWNbXSA9IHsndCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2YnLCAnbycsICdyJywgJ20nfTsKLXN0
YXRpYyBjb25zdCBVQ2hhciB6b29tQW5kUGFuU3BlY1tdID0geyd6JywgJ28nLCAnbycsICdtJywg
J0EnLCAnbicsICdkJywgJ1AnLCAnYScsICduJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgdmlld1Rh
cmdldFNwZWNbXSA9ICB7J3YnLCAnaScsICdlJywgJ3cnLCAnVCcsICdhJywgJ3InLCAnZycsICdl
JywgJ3QnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFy
YWN0ZXJUeXBlIHN2Z1ZpZXdTcGVjW10gPSB7J3MnLCAndicsICdnJywgJ1YnLCAnaScsICdlJywg
J3cnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0
ZXJUeXBlIHZpZXdCb3hTcGVjW10gPSB7J3YnLCAnaScsICdlJywgJ3cnLCAnQicsICdvJywgJ3gn
fTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJU
eXBlIHByZXNlcnZlQXNwZWN0UmF0aW9TcGVjW10gPSB7J3AnLCAncicsICdlJywgJ3MnLCAnZScs
ICdyJywgJ3YnLCAnZScsICdBJywgJ3MnLCAncCcsICdlJywgJ2MnLCAndCcsICdSJywgJ2EnLCAn
dCcsICdpJywgJ28nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhw
ciBDaGFyYWN0ZXJUeXBlIHRyYW5zZm9ybVNwZWNbXSA9IHsndCcsICdyJywgJ2EnLCAnbicsICdz
JywgJ2YnLCAnbycsICdyJywgJ20nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHpvb21BbmRQYW5TcGVjW10gPSB7J3onLCAnbycsICdv
JywgJ20nLCAnQScsICduJywgJ2QnLCAnUCcsICdhJywgJ24nfTsKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHZpZXdUYXJnZXRTcGVjW10g
PSAgeyd2JywgJ2knLCAnZScsICd3JywgJ1QnLCAnYScsICdyJywgJ2cnLCAnZScsICd0J307CiAK
LWJvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nJiB2aWV3U3BlYykK
K2Jvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5n
KQogewotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2aWV3U3Bl
YykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1cnJWaWV3U3Bl
YyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyclZp
ZXdTcGVjICsgdmlld1NwZWMubGVuZ3RoKCk7Ci0KLSAgICBpZiAoY3VyclZpZXdTcGVjID49IGVu
ZCB8fCAhbV9jb250ZXh0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCBzdmdWaWV3U3BlYywgV1RGX0FSUkFZX0xF
TkdUSChzdmdWaWV3U3BlYykpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY3Vy
clZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGN1cnJWaWV3U3BlYysrOwotCi0gICAgd2hpbGUgKGN1cnJWaWV3U3BlYyA8
IGVuZCAmJiAqY3VyclZpZXdTcGVjICE9ICcpJykgewotICAgICAgICBpZiAoKmN1cnJWaWV3U3Bl
YyA9PSAndicpIHsKLSAgICAgICAgICAgIGlmIChza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5k
LCB2aWV3Qm94U3BlYywgV1RGX0FSUkFZX0xFTkdUSCh2aWV3Qm94U3BlYykpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBjdXJy
Vmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBhdXRvIHZpZXdCb3ggPSBTVkdGaXRUb1ZpZXdC
b3g6OnBhcnNlVmlld0JveChjdXJyVmlld1NwZWMsIGVuZCwgZmFsc2UpOwotICAgICAgICAgICAg
ICAgIGlmICghdmlld0JveCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIHNldFZpZXdCb3goV1RGTW92ZSgqdmlld0JveCkpOwotICAgICAgICAgICAg
ICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgY3VyclZpZXdT
cGVjKys7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBl
bmQsIHZpZXdUYXJnZXRTcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHZpZXdUYXJnZXRTcGVjKSkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVj
ICE9ICcoJykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIGNvbnN0IFVDaGFyKiB2aWV3VGFyZ2V0U3RhcnQgPSArK2N1cnJWaWV3U3BlYzsKLSAgICAg
ICAgICAgICAgICB3aGlsZSAoY3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJyVmlld1NwZWMgIT0g
JyknKQotICAgICAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgICAg
ICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCkKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVy
c0ZvclBhcnNpbmcoc3RyaW5nLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBib29sIHsKKyAg
ICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKHBhcnNpbmdCdWZm
ZXIpOjpDaGFyYWN0ZXJUeXBlOworCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkg
fHwgIW1fY29udGV4dEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgc3ZnVmlld1NwZWM8
Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlm
ICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJygnKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWlu
aW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgIT0gJyknKSB7CisgICAgICAgICAgICBpZiAoKnBhcnNp
bmdCdWZmZXIgPT0gJ3YnKSB7CisgICAgICAgICAgICAgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhh
Y3RseShwYXJzaW5nQnVmZmVyLCB2aWV3Qm94U3BlYzxDaGFyYWN0ZXJUeXBlPikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKCcpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBh
dXRvIHZpZXdCb3ggPSBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChwYXJzaW5nQnVmZmVy
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdmlld0JveCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgc2V0Vmlld0Jv
eChXVEZNb3ZlKCp2aWV3Qm94KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0
bHkocGFyc2luZ0J1ZmZlciwgJyknKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShw
YXJzaW5nQnVmZmVyLCB2aWV3VGFyZ2V0U3BlYzxDaGFyYWN0ZXJUeXBlPikpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKCcpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBhdXRv
IHZpZXdUYXJnZXRTdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZmZXIsICcpJyk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1fdmlld1RhcmdldFN0cmluZyA9IFN0
cmluZyh2aWV3VGFyZ2V0U3RhcnQsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIHZpZXdUYXJn
ZXRTdGFydCk7CisgICAgICAgICAgICAgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAneicpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCB6b29tQW5kUGFuU3Bl
YzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcoJykpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBhdXRvIHpvb21B
bmRQYW4gPSBTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4ocGFyc2luZ0J1ZmZlcik7Cisg
ICAgICAgICAgICAgICAgaWYgKCF6b29tQW5kUGFuKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgc2V0Wm9vbUFuZFBhbigqem9vbUFuZFBhbik7Cisg
ICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKScpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpw
YXJzaW5nQnVmZmVyID09ICdwJykgeworICAgICAgICAgICAgICAgIGlmICghc2tpcENoYXJhY3Rl
cnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHByZXNlcnZlQXNwZWN0UmF0aW9TcGVjPENoYXJhY3Rl
clR5cGU+KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJygnKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgICAgICAgICAgICAgIGlmICghcHJlc2Vy
dmVBc3BlY3RSYXRpby5wYXJzZShwYXJzaW5nQnVmZmVyLCBmYWxzZSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJh
dGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0
bHkocGFyc2luZ0J1ZmZlciwgJyknKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAndCcpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCB0cmFu
c2Zvcm1TcGVjPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJygn
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1f
dHJhbnNmb3JtLT5wYXJzZShwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNr
aXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcpJykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICBtX3ZpZXdUYXJnZXRTdHJpbmcgPSBTdHJpbmcodmll
d1RhcmdldFN0YXJ0LCBjdXJyVmlld1NwZWMgLSB2aWV3VGFyZ2V0U3RhcnQpOwotICAgICAgICAg
ICAgICAgIGN1cnJWaWV3U3BlYysrOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKCpjdXJyVmlld1NwZWMgPT0gJ3on
KSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHpvb21B
bmRQYW5TcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHpvb21BbmRQYW5TcGVjKSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQg
fHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICBpZiAoIVNWR1pvb21BbmRQ
YW46OnBhcnNlWm9vbUFuZFBhbihjdXJyVmlld1NwZWMsIGVuZCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1
cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJWaWV3U3BlYyA9
PSAncCcpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwg
cHJlc2VydmVBc3BlY3RSYXRpb1NwZWMsIFdURl9BUlJBWV9MRU5HVEgocHJlc2VydmVBc3BlY3RS
YXRpb1NwZWMpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBp
ZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAg
ICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOwot
ICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKGN1cnJWaWV3U3BlYywg
ZW5kLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
c2V0UHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKLSAgICAgICAgICAg
IGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAg
ICAgICB9IGVsc2UgaWYgKCpjdXJyVmlld1NwZWMgPT0gJ3QnKSB7Ci0gICAgICAgICAgICBpZiAo
IXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHRyYW5zZm9ybVNwZWMsIFdURl9BUlJBWV9M
RU5HVEgodHJhbnNmb3JtU3BlYykpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygn
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3Bl
YysrOwotICAgICAgICAgICAgbV90cmFuc2Zvcm0tPnBhcnNlKGN1cnJWaWV3U3BlYywgZW5kKTsK
LSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0g
JyknKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3
U3BlYysrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBpZiAoY3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJyVmlld1NwZWMgPT0gJzsnKQotICAg
ICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgfQotICAgIAotICAgIGlmIChjdXJyVmlld1Nw
ZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnOycpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciAh
PSAnKScpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdWaWV3U3BlYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdW
aWV3U3BlYy5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmll
d1NwZWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1ZpZXdTcGVjKGNvbnRleHRFbGVtZW50KSk7CiAgICAg
fQogCi0gICAgYm9vbCBwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgcGFy
c2VWaWV3U3BlYyhjb25zdCBTdHJpbmdWaWV3Jik7CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZv
aWQgcmVzZXRDb250ZXh0RWxlbWVudCgpIHsgbV9jb250ZXh0RWxlbWVudCA9IG51bGxwdHI7IH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcAkocmV2aXNpb24gMjYzMzM1
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiwyNSArMjIsMzAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkda
b29tQW5kUGFuLmgiCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJl
cnMuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNWR1pvb21BbmRQYW46OnBhcnNl
Wm9vbUFuZFBhbihjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgZGlzYWJs
ZVtdID0geyAnZCcsICdpJywgJ3MnLCAnYScsICdiJywgJ2wnLCAnZScgfTsKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG1hZ25pZnlbXSA9
IHsgJ20nLCAnYScsICdnJywgJ24nLCAnaScsICdmJywgJ3knIH07CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gcGFy
c2Vab29tQW5kUGFuR2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBw
YXJzaW5nQnVmZmVyKQogewotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaXNhYmxlW10gPSB7ICdk
JywgJ2knLCAncycsICdhJywgJ2InLCAnbCcsICdlJyB9OwotICAgIGlmIChza2lwU3RyaW5nKHN0
YXJ0LCBlbmQsIGRpc2FibGUsIFdURl9BUlJBWV9MRU5HVEgoZGlzYWJsZSkpKSB7Ci0gICAgICAg
IG1fem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW5EaXNhYmxlOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgVUNoYXIgbWFnbmlmeVtdID0geyAnbScsICdh
JywgJ2cnLCAnbicsICdpJywgJ2YnLCAneScgfTsKLSAgICBpZiAoc2tpcFN0cmluZyhzdGFydCwg
ZW5kLCBtYWduaWZ5LCBXVEZfQVJSQVlfTEVOR1RIKG1hZ25pZnkpKSkgewotICAgICAgICBtX3pv
b21BbmRQYW4gPSBTVkdab29tQW5kUGFuTWFnbmlmeTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQorICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgZGlzYWJs
ZTxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgIHJldHVybiBTVkdab29tQW5kUGFuRGlzYWJsZTsK
KworICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgbWFnbmlmeTxD
aGFyYWN0ZXJUeXBlPikpCisgICAgICAgIHJldHVybiBTVkdab29tQW5kUGFuTWFnbmlmeTsKKwor
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CiAKLSAgICByZXR1cm4gZmFsc2U7CitPcHRpb25h
bDxTVkdab29tQW5kUGFuVHlwZT4gU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBwYXJz
ZVpvb21BbmRQYW5HZW5lcmljKHBhcnNpbmdCdWZmZXIpOworfQorCitPcHRpb25hbDxTVkdab29t
QW5kUGFuVHlwZT4gU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdC
dWZmZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZVpvb21BbmRQ
YW5HZW5lcmljKHBhcnNpbmdCdWZmZXIpOwogfQogCiB2b2lkIFNWR1pvb21BbmRQYW46OnBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21T
dHJpbmcmIHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5oCShyZXZpc2lv
biAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw3ICs0OCw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBTVkdab29t
QW5kUGFuKCkgPSBkZWZhdWx0OwogCi0gICAgYm9vbCBwYXJzZVpvb21BbmRQYW4oY29uc3QgVUNo
YXIqJiwgY29uc3QgVUNoYXIqKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5
cGU+IHBhcnNlWm9vbUFuZFBhbihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0
YXRpYyBPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gcGFyc2Vab29tQW5kUGFuKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8VUNoYXI+Jik7CiAKIHByaXZhdGU6CiAgICAgU1ZHWm9vbUFuZFBhblR5cGUg
bV96b29tQW5kUGFuIHsgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHWm9vbUFuZFBhblR5cGU+Ojppbml0
aWFsVmFsdWUoKSB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402658</attachid>
            <date>2020-06-24 09:38:02 -0700</date>
            <delta_ts>2020-06-24 11:38:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213460-20200624093801.patch</filename>
            <type>text/plain</type>
            <size>222494</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM0MzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA2LTIzICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIHVubmVjZXNzYXJ5IHVwY29udmVyc2lvbiBv
ZiBTdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTM0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbV0lQXQorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVm
ZmVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcpOgor
CiAyMDIwLTA2LTIzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIFdURjo6c2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZApJbmRleDogU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjMzMzUpCisrKyBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00NTIsNiArNDUyLDcgQEAKIAkJN0MxMzc5NDIyMjIzMjZENTAwRDdBODI0IC8qIGllZWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gaWVlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEz
Nzk0MzIyMjMyNkQ1MDBEN0E4MjQgLyogUkVBRE1FLm1kICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gbmV0LmRhcmluZ2ZpcmViYWxsLm1hcmtkb3duOyBw
YXRoID0gUkVBRE1FLm1kOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNBNDVEMDIz
Q0ZBODgzMDA3REUzQTYgLyogUGxhdGZvcm1IYXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtSGF2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QzNCMDZFODI0QTExNkU2MDBGRDI2QzcgLyogU3RyaW5nUGFyc2luZ0J1ZmZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHJpbmdQYXJzaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDM0Y3MjM5MUQ3ODgxMTkwMDY3NEUyNiAvKiBCcmlnYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJyaWdhbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M0MjMwNzEyM0NFMkQ4QTAwNkU1NEQwIC8qIFBsYXRmb3JtRW5hYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtRW5hYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNDIzMDcyMjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM5Niw2ICsxMzk3LDcgQEAKIAkJCQlBOEE0NzMyODE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQThBNDczMjkxNTFBODI1
QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCAqLywKIAkJCQlBOEE0NzMyQTE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nT3BlcmF0b3JzLmggKi8sCisJCQkJN0MzQjA2RTgyNEExMTZFNjAwRkQyNkM3
IC8qIFN0cmluZ1BhcnNpbmdCdWZmZXIuaCAqLywKIAkJCQlDRDAwMzYwRDIxNTAxRjc4MDBGNEVE
NEMgLyogU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oICovLAogCQkJCTkzRjE5OTNEMTlENzk1
OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCAqLywKIAkJCQkxQTZFQjFERjE4N0QwQkQzMDAz
MDEyNkYgLyogU3RyaW5nVmlldy5oICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0zMzgsNiArMzM4LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIHRleHQv
U3RyaW5nSGFzaGVyLmgKICAgICB0ZXh0L1N0cmluZ0ltcGwuaAogICAgIHRleHQvU3RyaW5nT3Bl
cmF0b3JzLmgKKyAgICB0ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAogICAgIHRleHQvU3RyaW5n
VG9JbnRlZ2VyQ29udmVyc2lvbi5oCiAgICAgdGV4dC9TdHJpbmdWaWV3LmgKICAgICB0ZXh0L1N5
bWJvbEltcGwuaApJbmRleDogU291cmNlL1dURi93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dU
Ri93dGYvRm9yd2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCA9IGFsaWdub2YoVCkKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lID0gRHVtYlB0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgPSBEdW1iUHRyVHJhaXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0
eXBlbmFtZT4gY2xhc3MgU3RyaW5nQnVmZmVyOwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0
cmluZ1BhcnNpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBj
bGFzcyBTdHJpbmdUeXBlQWRhcHRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBVbmlxdWVS
ZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgVmFyaWFudDsKQEAgLTEyMiw2ICsxMjMs
NyBAQCB1c2luZyBXVEY6OlN0cmluZzsKIHVzaW5nIFdURjo6U3RyaW5nQnVmZmVyOwogdXNpbmcg
V1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwordXNpbmcgV1RGOjpT
dHJpbmdQYXJzaW5nQnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpU
ZXh0UG9zaXRpb247CiB1c2luZyBXVEY6OlRleHRTdHJlYW07CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUhhdmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhh
dmUuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxMiwxNSArNjEyLDE1IEBACiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDE1MDApCi0jZGVmaW5lIEhBVkVfUEFTU0tJVF9CT1VORF9JTlRFUkZBQ0VfSURF
TlRJRklFUiAxCisjZGVmaW5lIEhBVkVfUEFTU0tJVF9CT1VORF9JTlRFUkZBQ0VfSURFTlRJRklF
UiAwCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE1MDApCi0jZGVmaW5lIEhBVkVfUEFT
U0tJVF9JTlNUQUxMTUVOVFMgMQorI2RlZmluZSBIQVZFX1BBU1NLSVRfSU5TVEFMTE1FTlRTIDAK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMCkKLSNkZWZpbmUgSEFWRV9QQVNTS0lU
X1BBWU1FTlRfTUVUSE9EX0JJTExJTkdfQUREUkVTUyAxCisjZGVmaW5lIEhBVkVfUEFTU0tJVF9Q
QVlNRU5UX01FVEhPRF9CSUxMSU5HX0FERFJFU1MgMAogI2VuZGlmCiAKICNpZiAoUExBVEZPUk0o
TUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMCkgfHwgUExB
VEZPUk0oSU9TKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQ29tbW9uLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
Y2xhc3MgU3RyaW5nUGFyc2luZ0J1ZmZlciBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IFQ7CisKKyAgICBjb25z
dGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlcigpCisgICAgeworICAgIH0KKworICAgIGNvbnN0ZXhw
ciBTdHJpbmdQYXJzaW5nQnVmZmVyKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uIHsgY2hhcmFjdGVycyB9CisgICAg
ICAgICwgbV9lbmQgeyBjaGFyYWN0ZXJzICsgbGVuZ3RoIH0KKyAgICB7CisgICAgfQorCisgICAg
Y29uc3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFj
dGVycywgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQorICAgICAgICA6IG1fcG9zaXRpb24geyBj
aGFyYWN0ZXJzIH0KKyAgICAgICAgLCBtX2VuZCB7IGVuZCB9CisgICAgeworICAgIH0KKworICAg
IGNvbnN0ZXhwciBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb247IH0KKyAgICBjb25zdGV4cHIgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KKworICAgIGNvbnN0ZXhwciBib29sIGhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uIDwgbV9lbmQ7IH0KKyAgICBj
b25zdGV4cHIgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24gPT0gbV9lbmQ7
IH0KKworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBsZW5ndGhSZW1haW5pbmcoKSBjb25zdCB7IHJl
dHVybiBtX2VuZCAtIG1fcG9zaXRpb247IH0KKyAgICBTdHJpbmdWaWV3IHN0cmluZ1ZpZXdPZkNo
YXJhY3RlcnNSZW1haW5pbmcoKSB7IHJldHVybiB7IG1fcG9zaXRpb24sIGxlbmd0aFJlbWFpbmlu
ZygpIH07IH0KKworICAgIENoYXJhY3RlclR5cGUgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fcG9zaXRpb24gKyBpIDwgbV9lbmQpOworICAgICAgICByZXR1
cm4gbV9wb3NpdGlvbltpXTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBv
cGVyYXRvciooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICptX3Bvc2l0aW9uOworICAg
IH0KKworICAgIGNvbnN0ZXhwciB2b2lkIGFkdmFuY2UoKQorICAgIHsKKyAgICAgICAgKyttX3Bv
c2l0aW9uOworICAgIH0KKworICAgIGNvbnN0ZXhwciB2b2lkIGFkdmFuY2VCeSh1bnNpZ25lZCBw
bGFjZXMpCisgICAgeworICAgICAgICBtX3Bvc2l0aW9uICs9IHBsYWNlczsKKyAgICB9CisKKyAg
ICBjb25zdGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlciYgb3BlcmF0b3IrKygpCisgICAgeworICAg
ICAgICBhZHZhbmNlKCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBjb25z
dGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlciBvcGVyYXRvcisrKGludCkKKyAgICB7CisgICAgICAg
IGF1dG8gcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICsrKCp0aGlzKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogbV9w
b3NpdGlvbiB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBtX2VuZCB7IG51
bGxwdHIgfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUsIHR5cGVuYW1lIEZ1
bmN0aW9uPiBkZWNsdHlwZShhdXRvKSByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoU3RyaW5nVHlw
ZSYmIHN0cmluZywgRnVuY3Rpb24mJiBmdW5jdG9yKQoreworICAgIGlmIChzdHJpbmcuaXM4Qml0
KCkpCisgICAgICAgIHJldHVybiBmdW5jdG9yKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBzdHJpbmcu
Y2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH0pOworICAgIHJldHVybiBmdW5jdG9yKFN0
cmluZ1BhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgo
KSB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U3RyaW5nUGFyc2lu
Z0J1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzQzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NSBAQAorMjAyMC0wNi0y
MyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSB1bm5l
Y2Vzc2FyeSB1cGNvbnZlcnNpb24gb2YgU3RyaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9wYXJzZXIvUGFyc2lu
Z1V0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RBU0NJSVNwYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNraXBFeGFjdGx5KToKKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlclBy
ZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpza2lwVW50aWwpOgorICAgICAgICAoV2ViQ29y
ZTo6c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpza2lw
Q2hhcmFjdGVyc0V4YWN0bHkpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5j
aW5nUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdCk6CisgICAgICAg
ICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oOgorICAgICAgICAqIGxvYWRl
ci9TdWJyZXNvdXJjZUludGVncml0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcGxpdE9uU3Bh
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSW50ZWdyaXR5TWV0YWRhdGEpOgorICAgICAg
ICAqIGxvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZU1hbmlmZXN0KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xp
Y3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpkaWRSZWNl
aXZlSGVhZGVyKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rl
cik6CisgICAgICAgIChXZWJDb3JlOjppc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBh
cnNlRGlyZWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3Q6OnBhcnNlUmVwb3J0VVJJKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldENTUERpcmVjdGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphcHBseVNhbmRib3hQ
b2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDo6c2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0QmxvY2tBbGxNaXhlZENvbnRlbnRF
bmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OmFkZERpcmVjdGl2ZSk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdC5oOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc01lZGlh
VHlwZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lN
ZWRpYUxpc3REaXJlY3RpdmU6OnBhcnNlKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU291cmNlQ2hh
cmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzSG9zdENoYXJhY3Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjppc1BhdGhDb21wb25lbnRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNT
Y2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RDb2xv
bk9yU2xhc2gpOgorICAgICAgICAoV2ViQ29yZTo6aXNTb3VyY2VMaXN0Tm9uZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Ojpw
YXJzZVNjaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0OjpwYXJzZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGFyc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjppc05v
bmNlQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3Q6OnBhcnNlTm9uY2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VIYXNoU291cmNlKToKKyAgICAgICAgKiBwYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmg6CisgICAgICAgICogc3ZnL1NW
R0FuZ2xlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBbmdsZVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICog
c3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXlT
cGxpbmVzKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94R2VuZXJpYyk6CisgICAgICAgICogc3ZnL1NW
R0ZpdFRvVmlld0JveC5oOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhMaXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdMZW5ndGhMaXN0Ojp2YWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHTGVuZ3RoTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoTGlzdDo6cGFyc2Up
OiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUxlbmd0aFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoVmFs
dWU6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhWYWx1ZTo6c2V0VmFs
dWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aFZhbHVlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdMZW5ndGhWYWx1ZTo6U1ZHTGVuZ3RoVmFsdWUpOgorICAgICAgICAqIHN2Zy9T
VkdOdW1iZXJMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXJMaXN0
OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXJMaXN0Ojp2YWx1ZUFzU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHTnVtYmVyTGlzdDo6cGFyc2UpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4K
KyAgICAgICAgKiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyaWNQYXJzZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VBcmNGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlQXJjRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlck9wdGlvbmFsTnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlR2x5cGhOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlVW5pY29kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlS2Vy
bmluZ1VuaWNvZGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlRmxvYXRQ
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQpOgorICAgICAgICAqIHN2
Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU1ZHU3BhY2VPckNv
bW1hKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpza2lwU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNvdXJj
ZS5oOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRv
VmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU1ZHU2VnbWVu
dFR5cGVIZWxwZXIpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNl
Lmg6CisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUG9pbnRMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExp
c3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdQb2ludExpc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BvaW50TGlzdDo6cGFyc2UpOiBEZWxldGVkLgorICAgICAg
ICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlOjpwYXJzZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oOgorICAgICAgICAqIHN2Zy9TVkdTdHJp
bmdMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHJpbmdMaXN0OjpwYXJz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHJpbmdMaXN0Ojp2YWx1ZUFzU3RyaW5nIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHU3RyaW5nTGlzdC5oOgorICAgICAgICAqIHN2Zy9TVkdUcmFu
c2Zvcm1MaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1MaXN0
Ojpjb25zb2xpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1MaXN0Ojpjb25j
YXRlbmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1MaXN0OjpwYXJz
ZUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6dmFsdWVBc1N0cmluZyBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJh
bnNmb3JtYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVBhcmFtTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVj
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKToKKyAg
ICAgICAgKiBzdmcvU1ZHVmlld1NwZWMuaDoKKyAgICAgICAgKiBzdmcvU1ZHWm9vbUFuZFBhbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVpvb21BbmRQYW5HZW5lcmljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbik6CisgICAgICAgICogc3Zn
L1NWR1pvb21BbmRQYW4uaDoKKwogMjAyMC0wNi0yMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtNdWx0aWNvbF0gUmVzZXQgdGhlIGNoaWxkcmVuSW5saW5lIHN0
YXRlIG9uIHRoZSBSZW5kZXJCbG9ja0Zsb3cgd2hlbiBkZXN0cm95aW5nIHRoZSBtdWx0aWNvbHVt
biBjb250ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTY2NCw2ICs2NjQs
NyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBodG1sL2Zv
cm1zL0ZpbGVJY29uTG9hZGVyLmgKIAorICAgIGh0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMu
aAogICAgIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaAogCiAgICAgaHRtbC90cmFjay9B
dWRpb1RyYWNrLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjUzNyw2ICsyNTM3LDcg
QEAgc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAKIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCiBzdmcv
U1ZHSW1hZ2VMb2FkZXIuY3BwCiBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKK3N2Zy9TVkdMZW5n
dGhMaXN0LmNwcAogc3ZnL1NWR0xlbmd0aFZhbHVlLmNwcAogc3ZnL1NWR0xpbmVFbGVtZW50LmNw
cAogc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKQEAgLTI1NDYsNiArMjU0Nyw3IEBA
IHN2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAogc3ZnL1NWR01hc2tFbGVtZW50LmNwcAogc3ZnL1NW
R01ldGFkYXRhRWxlbWVudC5jcHAKIHN2Zy9TVkdNaXNzaW5nR2x5cGhFbGVtZW50LmNwcAorc3Zn
L1NWR051bWJlckxpc3QuY3BwCiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAogc3ZnL1NWR1Bh
dGhCbGVuZGVyLmNwcAogc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcApAQCAtMjU2MCw2ICsyNTYyLDcg
QEAgc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCiBzdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRl
QnVpbGRlci5jcHAKIHN2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAogc3ZnL1NWR1BhdHRlcm5FbGVt
ZW50LmNwcAorc3ZnL1NWR1BvaW50TGlzdC5jcHAKIHN2Zy9TVkdQb2x5RWxlbWVudC5jcHAKIHN2
Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKIHN2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCkBAIC0y
NTcwLDYgKzI1NzMsNyBAQCBzdmcvU1ZHU1ZHRWxlbWVudC5jcHAKIHN2Zy9TVkdTY3JpcHRFbGVt
ZW50LmNwcAogc3ZnL1NWR1NldEVsZW1lbnQuY3BwCiBzdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCitz
dmcvU1ZHU3RyaW5nTGlzdC5jcHAKIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCiBzdmcvU1ZHU3dp
dGNoRWxlbWVudC5jcHAKIHN2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcApAQCAtMjU4Myw2ICsyNTg3
LDcgQEAgc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCiBzdmcvU1ZHVGl0bGVFbGVt
ZW50LmNwcAogc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCiBzdmcvU1ZHVHJhbnNmb3Jt
RGlzdGFuY2UuY3BwCitzdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKIHN2Zy9TVkdUcmFuc2Zvcm1h
YmxlLmNwcAogc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAKIHN2Zy9TVkdVbmtub3duRWxlbWVudC5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU4OCw3ICsxNTg4LDcg
QEAKIAkJNTMyMDQyMDIxRjlBOUYxMDAwQjgxQjJBIC8qIFVzZXJBZ2VudFNjcmlwdHNEYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUI2RDMw
MTdDOTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRTY3JpcHRzRGF0YS5jcHAgKi87IH07CiAJCTUz
NTFENEIxMURGOTE2QjQwMDgwMTBDRCAvKiBGaWxlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUxRDRBRjFERjkxNkFDMDA4MDEwQ0QgLyog
RmlsZUhhbmRsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUzNkQ1QTIwMTkzRTE4RTkwMENFNENBQiAvKiBIVE1MU3Jjc2V0UGFyc2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzZENUExRjE5M0Ux
OEU5MDBDRTRDQUIgLyogSFRNTFNyY3NldFBhcnNlci5oICovOyB9OwotCQk1MzZENUEyMzE5M0U4
RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2RDVBMjIxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNp
bmdVdGlsaXRpZXMuaCAqLzsgfTsKKwkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNp
bmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzNkQ1QTIyMTkzRThFMEMwMENFNENBQiAvKiBQYXJzaW5nVXRpbGl0aWVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM4RUM4MDIxRjk2
QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRTb3VyY2UxLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0ZBMUY5NkFBNzAwMDREMjJBOCAvKiBVbmlm
aWVkU291cmNlMS5jcHAgKi87IH07CiAJCTUzOEVDODAzMUY5NkFGODEwMDREMjJBOCAvKiBVbmlm
aWVkU291cmNlMS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzOEVDN0YzMUY5NkFBNUIwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS1tbS5tbSAq
LzsgfTsKIAkJNTM4RUM4MDQxRjk2QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRTb3VyY2UyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0VFMUY5
NkFBNTYwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMi5jcHAgKi87IH07CkBAIC0xMDE4OCw2ICsx
MDE4OCwxMSBAQAogCQk3Q0QzNDQxMjFGMzEwOEUyMDAwRENENDkgLyogSlNNdXRhdGlvbkNhbGxi
YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTXV0YXRpb25DYWxsYmFjay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDQ5NENBMUE4NkVCMUQwMDBBODdFQyAvKiBSZW5k
ZXJBdHRhY2htZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlckF0dGFjaG1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Q0OTRD
QjFBODZFQjFEMDAwQTg3RUMgLyogUmVuZGVyQXR0YWNobWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJBdHRhY2htZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDRDcwQzNEMjRBMjhBM0EwMEU2MTA0MCAvKiBTVkdMZW5ndGhMaXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0xlbmd0aExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3Q0Q3MEM0MDI0QTI4QUM5MDBFNjEwNDAgLyogU1ZHTnVtYmVyTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdOdW1iZXJMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0NENzBDNDIyNEEyOEI3MDAwRTYxMDQwIC8qIFNWR1BvaW50TGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQb2ludExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3Q0Q3MEM0MzI0QTI4QkVDMDBFNjEwNDAgLyogU1ZHU3RyaW5nTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdTdHJpbmdMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0NENzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5zZm9ybUxpc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVHJhbnNmb3JtTGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDREU3Mzk2MUY5QkQ1OTUwMDM5MDMxMiAvKiBTZXR0aW5ncy55
YW1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNldHRpbmdzLnlhbWw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDREU4RUJDMUYxOTNCQzUwMDE2OEZFNyAvKiBDU1NTdHlsZURlY2xh
cmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1N0eWxl
RGVjbGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0UxOTE0NzFG
MkE5OEFGMDAyNzJGNzggLyogRmV0Y2hSZXF1ZXN0SW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGZXRjaFJlcXVlc3RJbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yNTEzMCw2ICsyNTEzNSw3IEBACiAJCQkJQjIyMjc4OUUwRDAwQkYyMDAwNzFCNzgy
IC8qIFNWR0xlbmd0aC5pZGwgKi8sCiAJCQkJNzEzNDQ5NkIxNDY5NDFCMzAwNzIwMzEyIC8qIFNW
R0xlbmd0aENvbnRleHQuY3BwICovLAogCQkJCTcxMzQ0OTZDMTQ2OTQxQjMwMDcyMDMxMiAvKiBT
VkdMZW5ndGhDb250ZXh0LmggKi8sCisJCQkJN0NENzBDM0QyNEEyOEEzQTAwRTYxMDQwIC8qIFNW
R0xlbmd0aExpc3QuY3BwICovLAogCQkJCUIyMjI3OEEwMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdM
ZW5ndGhMaXN0LmggKi8sCiAJCQkJQjIyMjc4QTEwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0
aExpc3QuaWRsICovLAogCQkJCTdDRTU4RDUyMUREN0IwOTMwMDEyODU1MiAvKiBTVkdMZW5ndGhW
YWx1ZS5jcHAgKi8sCkBAIC0yNTE2Miw2ICsyNTE2OCw3IEBACiAJCQkJNDREOERBOTgxMzk1NDVC
RTAwMzM3Qjc1IC8qIFNWR01QYXRoRWxlbWVudC5pZGwgKi8sCiAJCQkJN0NFNThENEYxREQ2OUEx
RTAwMTI4NTUyIC8qIFNWR051bWJlci5oICovLAogCQkJCUIyMjI3OEI5MEQwMEJGMjAwMDcxQjc4
MiAvKiBTVkdOdW1iZXIuaWRsICovLAorCQkJCTdDRDcwQzQwMjRBMjhBQzkwMEU2MTA0MCAvKiBT
VkdOdW1iZXJMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzhCQjBEMDBCRjIwMDA3MUI3ODIgLyogU1ZH
TnVtYmVyTGlzdC5oICovLAogCQkJCUIyMjI3OEJDMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdOdW1i
ZXJMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzhDMDBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHUGFyc2Vy
VXRpbGl0aWVzLmNwcCAqLywKQEAgLTI1MjI1LDYgKzI1MjMyLDcgQEAKIAkJCQlCMjIyNzhGMzBE
MDBCRjIxMDA3MUI3ODIgLyogU1ZHUGF0dGVybkVsZW1lbnQuaWRsICovLAogCQkJCTdDRTU4RDQ5
MURENjRBNUIwMDEyODU1MiAvKiBTVkdQb2ludC5oICovLAogCQkJCUIyMjI3OEY0MEQwMEJGMjEw
MDcxQjc4MiAvKiBTVkdQb2ludC5pZGwgKi8sCisJCQkJN0NENzBDNDIyNEEyOEI3MDAwRTYxMDQw
IC8qIFNWR1BvaW50TGlzdC5jcHAgKi8sCiAJCQkJQjIyMjc4RjYwRDAwQkYyMTAwNzFCNzgyIC8q
IFNWR1BvaW50TGlzdC5oICovLAogCQkJCUIyMjI3OEY3MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQ
b2ludExpc3QuaWRsICovLAogCQkJCUIyMjI3OEY4MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQb2x5
RWxlbWVudC5jcHAgKi8sCkBAIC0yNTI1OCw2ICsyNTI2Niw3IEBACiAJCQkJQjIyMjc5MTIwRDAw
QkYyMTAwNzFCNzgyIC8qIFNWR1N0b3BFbGVtZW50LmNwcCAqLywKIAkJCQlCMjIyNzkxMzBEMDBC
RjIxMDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaCAqLywKIAkJCQlCMjIyNzkxNDBEMDBCRjIx
MDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaWRsICovLAorCQkJCTdDRDcwQzQzMjRBMjhCRUMw
MEU2MTA0MCAvKiBTVkdTdHJpbmdMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzkxNjBEMDBCRjIxMDA3
MUI3ODIgLyogU1ZHU3RyaW5nTGlzdC5oICovLAogCQkJCUIyMjI3OTE3MEQwMEJGMjEwMDcxQjc4
MiAvKiBTVkdTdHJpbmdMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzkyMTBEMDBCRjIxMDA3MUI3ODIg
LyogU1ZHU3R5bGVFbGVtZW50LmNwcCAqLywKQEAgLTI1Mjk5LDYgKzI1MzA4LDcgQEAKIAkJCQlC
MjIyNzk0NDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtYWJsZS5oICovLAogCQkJCUIy
MjI3OTQ2MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgKi8sCiAJ
CQkJQjIyMjc5NDcwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmggKi8s
CisJCQkJN0NENzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5zZm9ybUxpc3QuY3BwICov
LAogCQkJCUIyMjI3OTQ5MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1MaXN0LmggKi8s
CiAJCQkJQjIyMjc5NEEwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybUxpc3QuaWRsICov
LAogCQkJCTdDRTU4RDU2MUREN0Q5NkQwMDEyODU1MiAvKiBTVkdUcmFuc2Zvcm1WYWx1ZS5oICov
LApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMu
aAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2lu
Z1V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTQgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1pbmxpbmUgYm9vbCBpc05vdEFTQ0lJU3BhY2UoVUNoYXIgYykKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgoraW5saW5lIGJvb2wgaXNOb3RBU0NJSVNwYWNlKENo
YXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7CiB9CiAgICAgCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KLWJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUq
JiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+Citib29sIHNr
aXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQs
IERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQogewogICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAq
cG9zaXRpb24gPT0gZGVsaW1pdGVyKSB7CiAgICAgICAgICsrcG9zaXRpb247CkBAIC00OSw2ICs1
MCwxNiBAQCBib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlwZW5hbWUgRGVs
aW1pdGVyVHlwZT4KK2Jvb2wgc2tpcEV4YWN0bHkoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlw
ZT4mIHBhcnNpbmdCdWZmZXIsIERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQoreworICAgIGlmIChw
YXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9
PSBkZWxpbWl0ZXIpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgogYm9vbCBza2lwRXhh
Y3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kKQogewpA
QCAtNTksMTMgKzcwLDMwIEBAIGJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3Np
dGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgot
dm9pZCBza2lwVW50aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUq
IGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJv
b2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK2Jvb2wgc2tpcEV4YWN0bHkoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgaWYgKHBhcnNp
bmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGNoYXJhY3RlclByZWRpY2F0ZSgq
cGFyc2luZ0J1ZmZlcikpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyVHlwZSwgdHlwZW5hbWUgRGVsaW1pdGVyVHlwZT4KK3ZvaWQgc2tpcFVudGlsKGNvbnN0
IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIERlbGltaXRlclR5cGUg
ZGVsaW1pdGVyKQogewogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gIT0g
ZGVsaW1pdGVyKQogICAgICAgICArK3Bvc2l0aW9uOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyVHlwZSwgdHlwZW5hbWUgRGVsaW1pdGVyVHlwZT4KK3ZvaWQgc2tpcFVudGlsKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyLCBEZWxpbWl0ZXJUeXBlIGRlbGlt
aXRlcikKK3sKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkgJiYgKnBhcnNpbmdCdWZmZXIgIT0gZGVsaW1pdGVyKQorICAgICAgICArK3BhcnNpbmdCdWZm
ZXI7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRp
Y2F0ZShDaGFyVHlwZSk+CiB2b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9u
LCBjb25zdCBDaGFyVHlwZSogZW5kKQogewpAQCAtNzQsNiArMTAyLDEzIEBAIHZvaWQgc2tpcFVu
dGlsKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
clR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK3ZvaWQgc2tpcFVudGls
KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHdo
aWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhY2hhcmFjdGVy
UHJlZGljYXRlKCpwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hh
clR5cGUpPgogdm9pZCBza2lwV2hpbGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3Qg
Q2hhclR5cGUqIGVuZCkKIHsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgY2hhcmFjdGVy
UHJlZGljYXRlKCpwb3NpdGlvbikpCkBAIC04MSw2ICsxMTYsMTMgQEAgdm9pZCBza2lwV2hpbGUo
Y29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlw
ZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgordm9pZCBza2lwV2hpbGUoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgd2hpbGUg
KHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGNoYXJhY3RlclByZWRp
Y2F0ZSgqcGFyc2luZ0J1ZmZlcikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBl
KT4KIHZvaWQgcmV2ZXJzZVNraXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25z
dCBDaGFyVHlwZSogc3RhcnQpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uID49IHN0YXJ0ICYmIGNo
YXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKQpAQCAtOTIsMTEgKzEzNCw0MSBAQCBib29sIHNr
aXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoY29uc3QgCiB7CiAgICAgaWYgKHBvc2l0aW9uICsg
bG93ZXJjYXNlTGV0dGVyc0xlbmd0aCA+IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgbG93ZXJj
YXNlTGV0dGVyc0xlbmd0aCAtIDEsIGxvd2VyY2FzZUxldHRlcnMpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcG9zaXRpb24gKz0gKGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGJvb2wgcmVzdWx0ID0gV1RGOjplcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEsIGxv
d2VyY2FzZUxldHRlcnMpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHBvc2l0aW9uICs9IChs
b3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5ndGg+
Citib29sIHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRl
cnMpW2xvd2VyY2FzZUxldHRlcnNMZW5ndGhdKQoreworICAgIGlmIChwYXJzaW5nQnVmZmVyLmxl
bmd0aFJlbWFpbmluZygpIDwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIVdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpLCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSwgbG93
ZXJjYXNlTGV0dGVycykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwYXJzaW5nQnVmZmVy
LmFkdmFuY2VCeShsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGNoYXJhY3Rl
ckNvdW50PiBjb25zdGV4cHIgYm9vbCBza2lwQ2hhcmFjdGVyc0V4YWN0bHkoY29uc3QgQ2hhcmFj
dGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKCZzdHIpW2NoYXJhY3RlckNvdW50XSkKK3sKKyAgICBpZiAoZW5kIC0gcHRyIDwgY2hhcmFj
dGVyQ291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobWVtY21wKHN0ciwgcHRy
LCBzaXplb2YoQ2hhcmFjdGVyVHlwZSkgKiBjaGFyYWN0ZXJDb3VudCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBwdHIgKz0gY2hhcmFjdGVyQ291bnQ7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGNoYXJhY3RlckNv
dW50PiBjb25zdGV4cHIgYm9vbCBza2lwQ2hhcmFjdGVyc0V4YWN0bHkoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgY29uc3QgQ2hhcmFjdGVyVHlwZSgm
c3RyKVtjaGFyYWN0ZXJDb3VudF0pCit7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVt
YWluaW5nKCkgPCBjaGFyYWN0ZXJDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtZW1jbXAoc3RyLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCksIHNpemVvZihDaGFyYWN0ZXJU
eXBlKSAqIGNoYXJhY3RlckNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBhcnNp
bmdCdWZmZXIuYWR2YW5jZUJ5KGNoYXJhY3RlckNvdW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9uIDI2MzMz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMDQgKzMwLDk2IEBACiAjaW5jbHVkZSA8cGFsL2Ny
eXB0by9DcnlwdG9EaWdlc3QuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVm
ZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLXN0YXRpYyBib29sIHBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9u
KGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5k
LCBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSYgYWxnb3JpdGhtKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtPiBwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQ
b3NpdGlvbihTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVy
KQogewogICAgIC8vIEZJWE1FOiBUaGlzIHdvdWxkIGJlIG11Y2ggY2xlYW5lciB3aXRoIGEgbG9v
a3VwIHRhYmxlIG9mIHBhaXJzIG9mIGxhYmVsIC8gYWxnb3JpdGhtIGVudW0gdmFsdWVzLCBidXQg
SSBjYW4ndAogICAgIC8vIGZpZ3VyZSBvdXQgaG93IHRvIGtlZXAgdGhlIGxhYmVscyBjb21waWxl
dGltZSBzdHJpbmdzIGZvciBza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlLgogCi0gICAgaWYg
KHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGVuZCwgInNoYTI1NiIpKSB7
Ci0gICAgICAgIGFsZ29yaXRobSA9IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3Jp
dGhtOjpTSEEyNTY7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoc2tpcEV4
YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgZW5kLCAic2hhMzg0IikpIHsKLSAgICAg
ICAgYWxnb3JpdGhtID0gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNI
QTM4NDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChza2lwRXhhY3RseUln
bm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBlbmQsICJzaGE1MTIiKSkgewotICAgICAgICBhbGdv
cml0aG0gPSBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hBNTEyOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdB
U0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgInNoYTI1NiIpKQorICAgICAgICByZXR1cm4gUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTI1NjsKKyAgICBpZiAoc2tpcEV4
YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAic2hhMzg0IikpCisgICAgICAg
IHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hBMzg0Owor
ICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICJzaGE1
MTIiKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3Jp
dGhtOjpTSEE1MTI7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBPcHRpb25h
bDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdElt
cGwoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBl
bmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8UmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKFN0
cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAg
aWYgKHBvc2l0aW9uID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVzb3VyY2VDcnlwdG9ncmFwaGljRGln
ZXN0OjpBbGdvcml0aG0gYWxnb3JpdGhtOwotICAgIGlmICghcGFyc2VIYXNoQWxnb3JpdGhtQWR2
YW5jaW5nUG9zaXRpb24ocG9zaXRpb24sIGVuZCwgYWxnb3JpdGhtKSkKKyAgICBhdXRvIGFsZ29y
aXRobSA9IHBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9uKHBhcnNpbmdCdWZmZXIp
OworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnLScpKQor
ICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy0nKSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGNvbnN0IENoYXJhY3RlclR5cGUq
IGJlZ2luSGFzaFZhbHVlID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotICAgIHNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICc9Jyk7Ci0gICAgc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz0nKTsKKyAgICBhdXRvIGJlZ2luSGFz
aFZhbHVlID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0
ZXJUeXBlLCBpc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKKyAg
ICBza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnPScpOworICAgIHNr
aXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc9Jyk7CiAKLSAgICBpZiAo
cG9zaXRpb24gPT0gYmVnaW5IYXNoVmFsdWUpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRp
b24oKSA9PSBiZWdpbkhhc2hWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0gICAgU3RyaW5nVmlldyBoYXNoVmFsdWUoYmVn
aW5IYXNoVmFsdWUsIHBvc2l0aW9uIC0gYmVnaW5IYXNoVmFsdWUpOworICAgIFN0cmluZ1ZpZXcg
aGFzaFZhbHVlKGJlZ2luSGFzaFZhbHVlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdp
bkhhc2hWYWx1ZSk7CiAgICAgaWYgKCFiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBkaWdlc3QsIEJh
c2U2NFZhbGlkYXRlUGFkZGluZykpIHsKICAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoaGFz
aFZhbHVlLCBkaWdlc3QpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9
CiAKLSAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgYWxnb3JpdGhtLCBX
VEZNb3ZlKGRpZ2VzdCkgfTsKKyAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
IHsgKmFsZ29yaXRobSwgV1RGTW92ZShkaWdlc3QpIH07CiB9CiAKLU9wdGlvbmFsPFJlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IFVDaGFy
KiYgYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpCitPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVD
aGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGljRGln
ZXN0SW1wbChiZWdpbiwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0
SW1wbChwYXJzaW5nQnVmZmVyKTsKIH0KIAotT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgTENoYXIqJiBiZWdpbiwgY29u
c3QgTENoYXIqIGVuZCkKK09wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFy
c2VDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5n
QnVmZmVyKQogewotICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJlZ2lu
LCBlbmQpOworICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKHBhcnNpbmdC
dWZmZXIpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIE9w
dGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENy
eXB0b2dyYXBoaWNEaWdlc3RJbXBsKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29u
c3QgQ2hhcmFjdGVyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIE9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNl
RW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFj
dGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkKKyAg
ICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtIGFs
Z29yaXRobTsKLSAgICBpZiAoIXBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9uKHBv
c2l0aW9uLCBlbmQsIGFsZ29yaXRobSkpCisgICAgYXV0byBhbGdvcml0aG0gPSBwYXJzZUhhc2hB
bGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihwYXJzaW5nQnVmZmVyKTsKKyAgICBpZiAoIWFsZ29y
aXRobSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJy0nKSkKKyAgICBpZiAoIXNraXBFeGFj
dGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICctJykpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbkhhc2hWYWx1ZSA9
IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0Jhc2U2NE9yQmFzZTY0
VVJMQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAgICBza2lwRXhhY3RseTxDaGFyYWN0ZXJU
eXBlPihwb3NpdGlvbiwgZW5kLCAnPScpOwotICAgIHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+
KHBvc2l0aW9uLCBlbmQsICc9Jyk7CisgICAgYXV0byBiZWdpbkhhc2hWYWx1ZSA9IHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNCYXNlNjRP
ckJhc2U2NFVSTENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CisgICAgc2tpcEV4YWN0bHk8Q2hh
cmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz0nKTsKKyAgICBza2lwRXhhY3RseTxDaGFyYWN0
ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnPScpOwogCi0gICAgaWYgKHBvc2l0aW9uID09IGJlZ2lu
SGFzaFZhbHVlKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gYmVnaW5IYXNo
VmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRW5jb2Rl
ZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGFsZ29yaXRobSwgU3RyaW5nKGJlZ2luSGFz
aFZhbHVlLCBwb3NpdGlvbiAtIGJlZ2luSGFzaFZhbHVlKSB9OworICAgIHJldHVybiBFbmNvZGVk
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgU3RyaW5nKGJlZ2luSGFz
aFZhbHVlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhhc2hWYWx1ZSkgfTsKIH0K
IAotT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNv
ZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBVQ2hhciomIGJlZ2luLCBjb25zdCBVQ2hhciog
ZW5kKQorT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VF
bmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFy
c2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNE
aWdlc3RJbXBsKHBhcnNpbmdCdWZmZXIpOwogfQogCi1PcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0
IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpCitPcHRpb25hbDxFbmNvZGVkUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KFN0
cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBw
YXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChiZWdpbiwgZW5kKTsKKyAgICByZXR1
cm4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwocGFyc2luZ0J1ZmZlcik7CiB9
CiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0JiBlbmNvZGVkRGlnZXN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaAkocmV2aXNpb24gMjYzMzM1KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NiwxMSArNjYsMTEgQEAgc3RydWN0IEVuY29kZWRSZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlcwogICAgIFN0cmluZyBkaWdlc3Q7CiB9OwogCi1PcHRpb25hbDxSZXNv
dXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBV
Q2hhciomIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKLU9wdGlvbmFsPFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVn
aW4sIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGln
ZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4m
KTsKK09wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFw
aGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CiAKLU9wdGlvbmFsPEVuY29k
ZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNE
aWdlc3QoY29uc3QgVUNoYXIqJiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7Ci1PcHRpb25hbDxF
bmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFw
aGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9u
YWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRv
Z3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOworT3B0aW9uYWw8RW5j
b2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOwogCiBPcHRpb25hbDxSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QoY29uc3QgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCYpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VJbnRlZ3JpdHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUludGVncml0eS5jcHAJKHJl
dmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUludGVn
cml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJQYXJz
aW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0Lmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFy
c2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDcgKzUxLDcgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ2hhcmFj
dGVyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCisgICAgYm9vbCBv
cGVyYXRvcigpKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZm
ZXIpCiAgICAgewogICAgICAgICAvLyBJbml0aWFsaXplIGhhc2hlcyB0byBiZSBzb21ldGhpbmcg
b3RoZXIgV1RGOjpudWxsb3B0LCB0byBpbmRpY2F0ZQogICAgICAgICAvLyB0aGF0IGF0IGxlYXN0
IG9uZSB0b2tlbiB3YXMgc2VlbiwgYW5kIHRodXMgc2V0dGluZyB0aGUgZW1wdHkgZmxhZwpAQCAt
NTgsMTkgKzU5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX2RpZ2VzdHMpCiAgICAgICAg
ICAgICBtX2RpZ2VzdHMgPSBWZWN0b3I8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dD4geyB9OwogCi0gICAgICAgIGF1dG8gZGlnZXN0ID0gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdChwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgYXV0byBkaWdlc3QgPSBwYXJzZUVuY29k
ZWRDcnlwdG9ncmFwaGljRGlnZXN0KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIWRpZ2Vz
dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyBUaGUgc3BlYyBhbGxv
d3MgZm9yIG9wdGlvbnMgZm9sbG93aW5nIHRoZSBkaWdlc3QsIGJ1dCBzbyBmYXIsIG5vCiAgICAg
ICAgIC8vIHNwZWNpZmljIG9wdGlvbnMgaGF2ZSBiZWVuIHNwZWNpZmllZC4gVGh1cywgd2UganVz
dCBwYXJzZSBhbmQgaWdub3JlCiAgICAgICAgIC8vIHRoZW0uIFRoZWlyIHN5bnRheCBpcyBhICc/
JyBmb2xsb3cgYnkgYW55IG51bWJlciBvZiBWQ0hBUnMuCi0gICAgICAgIGlmIChza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPycpKQotICAgICAgICAgICAgc2tpcFdo
aWxlPENoYXJhY3RlclR5cGUsIGlzVkNIQVI+KHBvc2l0aW9uLCBlbmQpOworICAgICAgICBpZiAo
c2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz8nKSkKKyAgICAgICAg
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1ZDSEFSPihwYXJzaW5nQnVmZmVyKTsKIAog
ICAgICAgICAvLyBBZnRlciB0aGUgYmFzZTY0IHZhbHVlIGFuZCBvcHRpb25zLCB0aGUgY3VycmVu
dCBjaGFyYWN0ZXIgcG9pbnRlZCB0byBieSBwb3NpdGlvbgogICAgICAgICAvLyBzaG91bGQgZWl0
aGVyIGJlIHRoZSBlbmQgb3IgYSBzcGFjZS4KLSAgICAgICAgaWYgKHBvc2l0aW9uICE9IGVuZCAm
JiAhaXNIVE1MU3BhY2UoKnBvc2l0aW9uKSkKKyAgICAgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0
RW5kKCkgJiYgIWlzSFRNTFNwYWNlKCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBtX2RpZ2VzdHMtPmFwcGVuZChXVEZNb3ZlKCpkaWdlc3QpKTsK
QEAgLTg0LDE3ICs4NSwxNCBAQCBwcml2YXRlOgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdE9u
U3BhY2VzKGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBl
bmQsIEZ1bmN0b3ImJiBmdW5jdG9yKQorc3RhdGljIGlubGluZSB2b2lkIHNwbGl0T25TcGFjZXMo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyLCBGdW5jdG9y
JiYgZnVuY3RvcikKIHsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwb3NpdGlvbiA9IGJlZ2lu
OworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0hUTUxTcGFjZT4ocGFyc2luZ0J1ZmZl
cik7CiAKLSAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNIVE1MU3BhY2U+KHBvc2l0aW9u
LCBlbmQpOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGlmICghZnVu
Y3Rvcihwb3NpdGlvbiwgZW5kKSkKLSAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc05vdEhUTUxTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0KLSAgICAgICAgc2tpcFdoaWxlPENo
YXJhY3RlclR5cGUsIGlzSFRNTFNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICB3aGlsZSAocGFy
c2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFmdW5j
dG9yKHBhcnNpbmdCdWZmZXIpKQorICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzTm90SFRNTFNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgc2tpcFdoaWxlPENoYXJh
Y3RlclR5cGUsIGlzSFRNTFNwYWNlPihwYXJzaW5nQnVmZmVyKTsKICAgICB9CiB9CiAKQEAgLTEw
NSwxMSArMTAzLDExIEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8RW5jb2RlZFJlc291cmNlQ3IK
IAogICAgIE9wdGlvbmFsPFZlY3RvcjxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
Pj4gcmVzdWx0OwogICAgIAotICAgIGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZ0ltcGwgPSAqaW50
ZWdyaXR5TWV0YWRhdGEuaW1wbCgpOwotICAgIGlmIChzdHJpbmdJbXBsLmlzOEJpdCgpKQotICAg
ICAgICBzcGxpdE9uU3BhY2VzKHN0cmluZ0ltcGwuY2hhcmFjdGVyczgoKSwgc3RyaW5nSW1wbC5j
aGFyYWN0ZXJzOCgpICsgc3RyaW5nSW1wbC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0YWRhdGFQYXJz
ZXI8TENoYXI+IHsgcmVzdWx0IH0pOwotICAgIGVsc2UKLSAgICAgICAgc3BsaXRPblNwYWNlcyhz
dHJpbmdJbXBsLmNoYXJhY3RlcnMxNigpLCBzdHJpbmdJbXBsLmNoYXJhY3RlcnMxNigpICsgc3Ry
aW5nSW1wbC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0YWRhdGFQYXJzZXI8VUNoYXI+IHsgcmVzdWx0
IH0pOworICAgIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKGludGVncml0eU1ldGFkYXRh
LCBbJnJlc3VsdF0gKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0
ZXJUeXBlID0gdHlwZW5hbWUgZGVjbHR5cGUocGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7
CisKKyAgICAgICAgc3BsaXRPblNwYWNlcyhwYXJzaW5nQnVmZmVyLCBJbnRlZ3JpdHlNZXRhZGF0
YVBhcnNlcjxDaGFyYWN0ZXJUeXBlPiB7IHJlc3VsdCB9KTsKKyAgICB9KTsKIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvTWFuaWZl
c3RQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9NYW5pZmVzdFBhcnNlci5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRl
IDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9D
aGFyYWN0ZXJOYW1lcy5oPgogCkBAIC02NywxMzcgKzY4LDE0MCBAQCBib29sIHBhcnNlTWFuaWZl
c3QoY29uc3QgVVJMJiBtYW5pZmVzdFVSCiAgICAgaWYgKCFtYW5pZmVzdFN0cmluZy5zdGFydHNX
aXRoKG1hbmlmZXN0U2lnbmF0dXJlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IFN0cmluZ1ZpZXcgbWFuaWZlc3RBZnRlclNpZ25hdHVyZSA9IFN0cmluZ1ZpZXcobWFuaWZlc3RT
dHJpbmcpLnN1YnN0cmluZyhzaXplb2YobWFuaWZlc3RTaWduYXR1cmUpIC0gMSk7Ci0gICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBtYW5pZmVzdEFmdGVyU2lnbmF0dXJlLnVwY29udmVy
dGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwID0gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwICsgbWFuaWZlc3RBZnRlclNpZ25hdHVyZS5s
ZW5ndGgoKTsKKyAgICBhdXRvIG1hbmlmZXN0QWZ0ZXJTaWduYXR1cmUgPSBTdHJpbmdWaWV3KG1h
bmlmZXN0U3RyaW5nKS5zdWJzdHJpbmcoc2l6ZW9mKG1hbmlmZXN0U2lnbmF0dXJlKSAtIDEpOwog
Ci0gICAgaWYgKHAgPCBlbmQgJiYgKnAgIT0gJyAnICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJ1xu
JyAmJiAqcCAhPSAnXHInKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRklYTUU6IFRo
aXMgcGFyc2VyIGNvdWxkIGJlIG11Y2ggY2xlYXJlciBpZiBpdCBhZG9wdGVkIHNvbWUgb2YgdGhl
IGNvbW1vbiBwYXJzaW5nIHV0aWxpdGllcworICAgIC8vIGZvciBza2lwcGluZyBhbmQgY29tcGFy
aW5nLgogCi0gICAgLy8gU2tpcCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgotICAgIHdoaWxlIChw
IDwgZW5kICYmICpwICE9ICdccicgJiYgKnAgIT0gJ1xuJykKLSAgICAgICAgcCsrOwotCi0gICAg
d2hpbGUgKDEpIHsKLSAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlCi0gICAgICAgIHdoaWxlIChw
IDwgZW5kICYmICgqcCA9PSAnXG4nIHx8ICpwID09ICdccicgfHwgKnAgPT0gJyAnIHx8ICpwID09
ICdcdCcpKQotICAgICAgICAgICAgcCsrOwotICAgICAgICAKLSAgICAgICAgaWYgKHAgPT0gZW5k
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBVQ2hhciogbGlu
ZVN0YXJ0ID0gcDsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbmQgdGhlIGVuZCBvZiB0aGUgbGlu
ZQotICAgICAgICB3aGlsZSAocCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCi0g
ICAgICAgICAgICBwKys7Ci0gICAgICAgIAotICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEg
Y29tbWVudAotICAgICAgICBpZiAoKmxpbmVTdGFydCA9PSAnIycpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEdldCByaWQgb2YgdHJhaWxpbmcgd2hpdGVzcGFj
ZQotICAgICAgICBjb25zdCBVQ2hhciogdG1wID0gcCAtIDE7Ci0gICAgICAgIHdoaWxlICh0bXAg
PiBsaW5lU3RhcnQgJiYgKCp0bXAgPT0gJyAnIHx8ICp0bXAgPT0gJ1x0JykpCi0gICAgICAgICAg
ICB0bXAtLTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBsaW5lKGxpbmVTdGFydCwgdG1wIC0g
bGluZVN0YXJ0ICsgMSk7Ci0KLSAgICAgICAgaWYgKGxpbmUgPT0gIkNBQ0hFOiIpIAotICAgICAg
ICAgICAgbW9kZSA9IEV4cGxpY2l0OwotICAgICAgICBlbHNlIGlmIChsaW5lID09ICJGQUxMQkFD
SzoiKQotICAgICAgICAgICAgbW9kZSA9IEZhbGxiYWNrOwotICAgICAgICBlbHNlIGlmIChsaW5l
ID09ICJORVRXT1JLOiIpCi0gICAgICAgICAgICBtb2RlID0gT25saW5lQWxsb3dsaXN0OwotICAg
ICAgICBlbHNlIGlmIChsaW5lLmVuZHNXaXRoKCc6JykpCi0gICAgICAgICAgICBtb2RlID0gVW5r
bm93bjsKLSAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBVbmtub3duKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gRXhwbGljaXQgfHwgbW9kZSA9PSBPbmxp
bmVBbGxvd2xpc3QpIHsKLSAgICAgICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVy
cyA9IFN0cmluZ1ZpZXcobGluZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgICAg
ICBjb25zdCBVQ2hhciogcCA9IHVwY29udmVydGVkTGluZUNoYXJhY3RlcnM7Ci0gICAgICAgICAg
ICBjb25zdCBVQ2hhciogbGluZUVuZCA9IHAgKyBsaW5lLmxlbmd0aCgpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTCBm
cm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCi0gICAgICAgICAgICB3aGlsZSAocCA8IGxp
bmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnICcpIAotICAgICAgICAgICAgICAgIHArKzsK
KyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcobWFuaWZlc3RBZnRlclNp
Z25hdHVyZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICBhdXRvIHAgPSBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIGF1dG8gZW5kID0gcGFyc2luZ0J1ZmZlci5l
bmQoKTsKIAotICAgICAgICAgICAgaWYgKG1vZGUgPT0gT25saW5lQWxsb3dsaXN0ICYmIHAgLSB1
cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzID09IDEgJiYgbGluZVswXSA9PSAnKicpIHsKLSAgICAg
ICAgICAgICAgICAvLyBXaWxkY2FyZCB3YXMgZm91bmQuCi0gICAgICAgICAgICAgICAgbWFuaWZl
c3QuYWxsb3dBbGxOZXR3b3JrUmVxdWVzdHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAocCA8IGVuZCAmJiAqcCAhPSAnICcgJiYg
KnAgIT0gJ1x0JyAmJiAqcCAhPSAnXG4nICYmICpwICE9ICdccicpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFVSTCB1cmwobWFuaWZlc3RVUkwsIGxpbmUuc3Vic3Ry
aW5nKDAsIHAgLSB1cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgLy8gU2tpcCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorICAgICAgICB3aGlsZSAo
cCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCisgICAgICAgICAgICBwKys7CiAK
LSAgICAgICAgICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHVybC5wcm90b2NvbCgp
LCBtYW5pZmVzdFVSTC5wcm90b2NvbCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZQorICAgICAg
ICAgICAgd2hpbGUgKHAgPCBlbmQgJiYgKCpwID09ICdcbicgfHwgKnAgPT0gJ1xyJyB8fCAqcCA9
PSAnICcgfHwgKnAgPT0gJ1x0JykpCisgICAgICAgICAgICAgICAgcCsrOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBFeHBsaWNpdCAmJiBtYW5pZmVzdFVSTC5wcm90b2Nv
bElzKCJodHRwcyIpICYmICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RVUkws
IHVybCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocCA9PSBl
bmQpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChtb2RlID09IEV4cGxpY2l0KQotICAgICAgICAgICAgICAgIG1hbmlmZXN0LmV4cGxpY2l0VVJM
cy5hZGQodXJsLnN0cmluZygpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBt
YW5pZmVzdC5vbmxpbmVBbGxvd2VkVVJMcy5hcHBlbmQodXJsKTsKLSAgICAgICAgICAgIAotICAg
ICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gRmFsbGJhY2spIHsKLSAgICAgICAgICAgIGF1dG8gdXBj
b252ZXJ0ZWRMaW5lQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcobGluZSkudXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCk7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogcCA9IHVwY29udmVydGVkTGluZUNo
YXJhY3RlcnM7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogbGluZUVuZCA9IHAgKyBsaW5lLmxl
bmd0aCgpOworICAgICAgICAgICAgYXV0byBsaW5lU3RhcnQgPSBwOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIHR3byBVUkxz
Ci0gICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAn
ICcpIAorICAgICAgICAgICAgLy8gRmluZCB0aGUgZW5kIG9mIHRoZSBsaW5lCisgICAgICAgICAg
ICB3aGlsZSAocCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCiAgICAgICAgICAg
ICAgICAgcCsrOwotCi0gICAgICAgICAgICBpZiAocCA9PSBsaW5lRW5kKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVGhlcmUgd2FzIG5vIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUgVVJMcy4KLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgVVJMIG5hbWVzcGFjZVVSTChtYW5pZmVzdFVSTCwgbGluZS5zdWJzdHJpbmcoMCwg
cCAtIHVwY29udmVydGVkTGluZUNoYXJhY3RlcnMpKTsKLSAgICAgICAgICAgIGlmICghbmFtZXNw
YWNlVVJMLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IG5hbWVzcGFjZVVSTC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLQotICAgICAgICAgICAg
aWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RVUkwsIG5hbWVzcGFjZVVS
TCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIEFsdGhvdWdo
IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vZmZsaW5lLmh0bWwjcGFy
c2luZy1jYWNoZS1tYW5pZmVzdHM+ICgwNy8wNi8yMDE3KSBzYWlkcwotICAgICAgICAgICAgLy8g
dGhhdCB3ZSBzaG91bGQgYWx3YXlzIHByZWZpeCBtYXRjaCB0aGUgbWFuaWZlc3QgcGF0aCB3ZSBv
bmx5IGRvIHNvIGlmIHRoZSBtYW5pZmVzdCB3YXMgc2VydmVkIHdpdGggYSBub24tCi0gICAgICAg
ICAgICAvLyBzdGFuZGFyZCBIVFRQIENvbnRlbnQtVHlwZSBoZWFkZXIgZm9yIHdlYiBjb21wYXRp
YmlsaXR5LgotICAgICAgICAgICAgaWYgKCFhbGxvd0ZhbGxiYWNrTmFtZXNwYWNlT3V0c2lkZU1h
bmZlc3RQYXRoICYmICFuYW1lc3BhY2VVUkwucGF0aCgpLnN0YXJ0c1dpdGgobWFuaWZlc3RQYXRo
KSkKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBjb21tZW50CisgICAgICAgICAg
ICBpZiAoKmxpbmVTdGFydCA9PSAnIycpCiAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEdldCByaWQgb2YgdHJhaWxpbmcgd2hpdGVzcGFjZQor
ICAgICAgICAgICAgYXV0byB0bXAgPSBwIC0gMTsKKyAgICAgICAgICAgIHdoaWxlICh0bXAgPiBs
aW5lU3RhcnQgJiYgKCp0bXAgPT0gJyAnIHx8ICp0bXAgPT0gJ1x0JykpCisgICAgICAgICAgICAg
ICAgdG1wLS07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZ1ZpZXcgbGluZShsaW5l
U3RhcnQsIHRtcCAtIGxpbmVTdGFydCArIDEpOworCisgICAgICAgICAgICBpZiAobGluZSA9PSAi
Q0FDSEU6IikKKyAgICAgICAgICAgICAgICBtb2RlID0gRXhwbGljaXQ7CisgICAgICAgICAgICBl
bHNlIGlmIChsaW5lID09ICJGQUxMQkFDSzoiKQorICAgICAgICAgICAgICAgIG1vZGUgPSBGYWxs
YmFjazsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxpbmUgPT0gIk5FVFdPUks6IikKKyAgICAgICAg
ICAgICAgICBtb2RlID0gT25saW5lQWxsb3dsaXN0OworICAgICAgICAgICAgZWxzZSBpZiAobGlu
ZS5lbmRzV2l0aCgnOicpKQorICAgICAgICAgICAgICAgIG1vZGUgPSBVbmtub3duOworICAgICAg
ICAgICAgZWxzZSBpZiAobW9kZSA9PSBVbmtub3duKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBFeHBsaWNpdCB8fCBtb2RlID09IE9ubGlu
ZUFsbG93bGlzdCkgeworICAgICAgICAgICAgICAgIGF1dG8gcCA9IGxpbmVTdGFydDsKKyAgICAg
ICAgICAgICAgICBhdXRvIGxpbmVFbmQgPSBwICsgbGluZS5sZW5ndGgoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcg
dGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCisgICAgICAgICAgICAgICAg
d2hpbGUgKHAgPCBsaW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKQorICAgICAgICAg
ICAgICAgICAgICBwKys7CisKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBPbmxpbmVBbGxv
d2xpc3QgJiYgcCAtIGxpbmVTdGFydCA9PSAxICYmIGxpbmVbMF0gPT0gJyonKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHdhcyBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAg
bWFuaWZlc3QuYWxsb3dBbGxOZXR3b3JrUmVxdWVzdHMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBVUkwg
dXJsKG1hbmlmZXN0VVJMLCBsaW5lLnN1YnN0cmluZygwLCBwIC0gbGluZVN0YXJ0KS50b1N0cmlu
ZygpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIXVybC5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdXJs
LnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2woKSwgbWFuaWZl
c3RVUkwucHJvdG9jb2woKSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEV4cGxpY2l0ICYmIG1hbmlm
ZXN0VVJMLnByb3RvY29sSXMoImh0dHBzIikgJiYgIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVh
bChtYW5pZmVzdFVSTCwgdXJsKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gRXhwbGljaXQpCisgICAg
ICAgICAgICAgICAgICAgIG1hbmlmZXN0LmV4cGxpY2l0VVJMcy5hZGQodXJsLnN0cmluZygpKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0Lm9ubGlu
ZUFsbG93ZWRVUkxzLmFwcGVuZCh1cmwpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
fSBlbHNlIGlmIChtb2RlID09IEZhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgYXV0byBwID0g
bGluZVN0YXJ0OworICAgICAgICAgICAgICAgIGF1dG8gbGluZUVuZCA9IHAgKyBsaW5lLmxlbmd0
aCgpOworCisgICAgICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5n
IHRoZSB0d28gVVJMcworICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAqcCAh
PSAnXHQnICYmICpwICE9ICcgJykKKyAgICAgICAgICAgICAgICAgICAgcCsrOworCisgICAgICAg
ICAgICAgICAgaWYgKHAgPT0gbGluZUVuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGVy
ZSB3YXMgbm8gd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSBVUkxzLgorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgVVJMIG5hbWVzcGFjZVVSTChtYW5pZmVzdFVSTCwgbGluZS5zdWJzdHJpbmco
MCwgcCAtIGxpbmVTdGFydCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFuYW1l
c3BhY2VVUkwuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBuYW1lc3BhY2VVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVS
TCwgbmFtZXNwYWNlVVJMKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICAvLyBBbHRob3VnaCA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0
aXBhZ2Uvb2ZmbGluZS5odG1sI3BhcnNpbmctY2FjaGUtbWFuaWZlc3RzPiAoMDcvMDYvMjAxNykg
c2FpZHMKKyAgICAgICAgICAgICAgICAvLyB0aGF0IHdlIHNob3VsZCBhbHdheXMgcHJlZml4IG1h
dGNoIHRoZSBtYW5pZmVzdCBwYXRoIHdlIG9ubHkgZG8gc28gaWYgdGhlIG1hbmlmZXN0IHdhcyBz
ZXJ2ZWQgd2l0aCBhIG5vbi0KKyAgICAgICAgICAgICAgICAvLyBzdGFuZGFyZCBIVFRQIENvbnRl
bnQtVHlwZSBoZWFkZXIgZm9yIHdlYiBjb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgIGlm
ICghYWxsb3dGYWxsYmFja05hbWVzcGFjZU91dHNpZGVNYW5mZXN0UGF0aCAmJiAhbmFtZXNwYWNl
VVJMLnBhdGgoKS5zdGFydHNXaXRoKG1hbmlmZXN0UGF0aCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlIHNlcGFyYXRp
bmcgZmFsbGJhY2sgbmFtZXNwYWNlIGZyb20gVVJMLgorICAgICAgICAgICAgICAgIHdoaWxlIChw
IDwgbGluZUVuZCAmJiAoKnAgPT0gJ1x0JyB8fCAqcCA9PSAnICcpKQorICAgICAgICAgICAgICAg
ICAgICBwKys7CisKKyAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFy
YXRpbmcgdGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCisgICAgICAgICAg
ICAgICAgYXV0byBmYWxsYmFja1N0YXJ0ID0gcDsKKyAgICAgICAgICAgICAgICB3aGlsZSAocCA8
IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnICcpCisgICAgICAgICAgICAgICAgICAg
IHArKzsKKworICAgICAgICAgICAgICAgIFVSTCBmYWxsYmFja1VSTChtYW5pZmVzdFVSTCwgU3Ry
aW5nKGZhbGxiYWNrU3RhcnQsIHAgLSBmYWxsYmFja1N0YXJ0KSk7CisgICAgICAgICAgICAgICAg
aWYgKCFmYWxsYmFja1VSTC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIGZhbGxiYWNrVVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigp
OworCisgICAgICAgICAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFu
aWZlc3RVUkwsIGZhbGxiYWNrVVJMKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgICAgICBtYW5pZmVzdC5mYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKG5hbWVzcGFjZVVSTCwgZmFsbGJhY2tVUkwpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAKLSAgICAgICAg
ICAgIC8vIFNraXAgd2hpdGVzcGFjZSBzZXBhcmF0aW5nIGZhbGxiYWNrIG5hbWVzcGFjZSBmcm9t
IFVSTC4KLSAgICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAoKnAgPT0gJ1x0JyB8fCAq
cCA9PSAnICcpKQotICAgICAgICAgICAgICAgIHArKzsKLQotICAgICAgICAgICAgLy8gTG9vayBm
b3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSBVUkwgZnJvbSBzdWJzZXF1ZW50IGlnbm9yZWQg
dG9rZW5zLgotICAgICAgICAgICAgY29uc3QgVUNoYXIqIGZhbGxiYWNrU3RhcnQgPSBwOwotICAg
ICAgICAgICAgd2hpbGUgKHAgPCBsaW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKSAK
LSAgICAgICAgICAgICAgICBwKys7Ci0KLSAgICAgICAgICAgIFVSTCBmYWxsYmFja1VSTChtYW5p
ZmVzdFVSTCwgU3RyaW5nKGZhbGxiYWNrU3RhcnQsIHAgLSBmYWxsYmFja1N0YXJ0KSk7Ci0gICAg
ICAgICAgICBpZiAoIWZhbGxiYWNrVVJMLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGZhbGxiYWNrVVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigp
OwotCi0gICAgICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVz
dFVSTCwgZmFsbGJhY2tVUkwpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICBtYW5pZmVzdC5mYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5hbWVzcGFj
ZVVSTCwgZmFsbGJhY2tVUkwpKTsgICAgICAgICAgICAKLSAgICAgICAgfSBlbHNlIAotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJKHJldmlzaW9uIDI2
MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAKIApAQCAtMjEyLDIyICsy
MTMsMjMgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRpZFJlY2VpdmVIZQogICAgIC8v
IFJGQzI2MTYsIHNlY3Rpb24gNC4yIHNwZWNpZmllcyB0aGF0IGhlYWRlcnMgYXBwZWFyaW5nIG11
bHRpcGxlIHRpbWVzIGNhbgogICAgIC8vIGJlIGNvbWJpbmVkIHdpdGggYSBjb21tYS4gV2FsayB0
aGUgaGVhZGVyIHN0cmluZywgYW5kIHBhcnNlIGVhY2ggY29tbWEKICAgICAvLyBzZXBhcmF0ZWQg
Y2h1bmsgYXMgYSBzZXBhcmF0ZSBoZWFkZXIuCi0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5n
VmlldyhoZWFkZXIpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBi
ZWdpbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0g
ICAgY29uc3QgVUNoYXIqIGVuZCA9IGJlZ2luICsgaGVhZGVyLmxlbmd0aCgpOwotICAgIHdoaWxl
IChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBl
bmQsICcsJyk7Ci0KLSAgICAgICAgLy8gaGVhZGVyMSxoZWFkZXIyIE9SIGhlYWRlcjEKLSAgICAg
ICAgLy8gICAgICAgIF4gICAgICAgICAgICAgICAgICBeCi0gICAgICAgIG1fcG9saWNpZXMuYXBw
ZW5kKENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmNyZWF0ZSgqdGhpcywgU3Ry
aW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSwgdHlwZSwgcG9saWN5RnJvbSkpOwotCi0gICAg
ICAgIC8vIFNraXAgdGhlIGNvbW1hLCBhbmQgYmVnaW4gdGhlIG5leHQgaGVhZGVyIGZyb20gdGhl
IGN1cnJlbnQgcG9zaXRpb24uCi0gICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgKnBv
c2l0aW9uID09ICcsJyk7Ci0gICAgICAgIHNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5k
LCAnLCcpOwotICAgICAgICBiZWdpbiA9IHBvc2l0aW9uOwotICAgIH0KKyAgICBXVEY6OnJlYWRD
aGFyYWN0ZXJzRm9yUGFyc2luZyhoZWFkZXIsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAg
ICAgICAgYXV0byBiZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAKKyAgICAg
ICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAg
ICAgICAgICBza2lwVW50aWwocGFyc2luZ0J1ZmZlciwgJywnKTsKKworICAgICAgICAgICAgLy8g
aGVhZGVyMSxoZWFkZXIyIE9SIGhlYWRlcjEKKyAgICAgICAgICAgIC8vICAgICAgICBeICAgICAg
ICAgICAgICAgICAgXgorICAgICAgICAgICAgbV9wb2xpY2llcy5hcHBlbmQoQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y3JlYXRlKCp0aGlzLCBTdHJpbmcoYmVnaW4sIHBhcnNp
bmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSwgdHlwZSwgcG9saWN5RnJvbSkpOworCisgICAg
ICAgICAgICAvLyBTa2lwIHRoZSBjb21tYSwgYW5kIGJlZ2luIHRoZSBuZXh0IGhlYWRlciBmcm9t
IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICAgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIu
YXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09ICcsJyk7CisgICAgICAgICAg
ICBza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnLCcpOworICAgICAgICAgICAgYmVnaW4gPSBw
YXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICAKIAogICAg
IGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIGFwcGx5UG9saWN5VG9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcAko
cmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE1ICszMiwx
NiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5Q29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Bh
cnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpc0Rp
cmVjdGl2ZU5hbWVDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyBib29sIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBl
IGMpCiB7CiAgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnLSc7CiB9
CiAKLXN0YXRpYyBib29sIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzRGlyZWN0aXZlVmFsdWVD
aGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBpc0FTQ0lJU3BhY2UoYykg
fHwgKGMgPj0gMHgyMSAmJiBjIDw9IDB4N2UpOyAvLyBXaGl0ZXNwYWNlICsgVkNIQVIKIH0KQEAg
LTMzMywyMjQgKzMzNCwyMTggQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVM
aXN0OgogICAgIGlmIChwb2xpY3kuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHBvbGljeSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBV
Q2hhciogZW5kID0gcG9zaXRpb24gKyBwb2xpY3kubGVuZ3RoKCk7Ci0KLSAgICB3aGlsZSAocG9z
aXRpb24gPCBlbmQpIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGRpcmVjdGl2ZUJlZ2luID0gcG9z
aXRpb247Ci0gICAgICAgIHNraXBVbnRpbDxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJzsnKTsKLQot
ICAgICAgICBTdHJpbmcgbmFtZSwgdmFsdWU7Ci0gICAgICAgIGlmIChwYXJzZURpcmVjdGl2ZShk
aXJlY3RpdmVCZWdpbiwgcG9zaXRpb24sIG5hbWUsIHZhbHVlKSkgewotICAgICAgICAgICAgQVNT
RVJUKCFuYW1lLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBpZiAocG9saWN5RnJvbSA9PSBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZCkgewotICAgICAgICAgICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwb2xpY3lGcm9tID09IENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SFRUUEVxdWl2TWV0YSkgewotICAgICAg
ICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzYW5kYm94KQotICAgICAgICAgICAgICAgICAgICB8fCBl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZU5hbWVzOjpyZXBvcnRVUkkpCi0gICAgICAgICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1l
QW5jZXN0b3JzKSkgewotICAgICAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlk
RGlyZWN0aXZlSW5IVFRQRXF1aXZNZXRhKG5hbWUpOwotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhwb2xpY3ksIFsmXShhdXRv
IHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFj
dGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBhdXRvIGRpcmVjdGl2ZUJlZ2luID0gcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZm
ZXIsICc7Jyk7CisKKyAgICAgICAgICAgIGlmIChhdXRvIGRpcmVjdGl2ZSA9IHBhcnNlRGlyZWN0
aXZlKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBkaXJlY3RpdmVCZWdpbiwgcGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpIH0pKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFkaXJlY3RpdmUtPm5hbWUu
aXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZCkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpIVFRQRXF1
aXZNZXRhKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGRpcmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNh
bmRib3gpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGRpcmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJl
cG9ydFVSSSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
ZnJhbWVBbmNlc3RvcnMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBv
cnRJbnZhbGlkRGlyZWN0aXZlSW5IVFRQRXF1aXZNZXRhKGRpcmVjdGl2ZS0+bmFtZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OlBvbGljeUZyb206OkluaGVyaXRlZEZvclBsdWdpbkRvY3VtZW50KSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICYmICFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS0+bmFt
ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xp
Y3lGcm9tOjpJbmhlcml0ZWRGb3JQbHVnaW5Eb2N1bWVudCkgewotICAgICAgICAgICAgICAgIGlm
ICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6cGx1Z2luVHlwZXMpCi0gICAgICAgICAgICAgICAgICAgICYmICFlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVz
OjpyZXBvcnRVUkkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBhZGREaXJlY3RpdmUoV1RGTW92ZSgqZGlyZWN0aXZlKSk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBhZGREaXJlY3RpdmUobmFtZSwgdmFsdWUpOwotICAgICAgICB9CiAKLSAgICAg
ICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJzsnKTsKLSAgICAgICAg
c2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0gICAgfQorICAgICAgICAg
ICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciA9PSAnOycp
OworICAgICAgICAgICAgc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJzsnKTsKKyAgICAgICAg
fQorICAgIH0pOwogfQogCiAvLyBkaXJlY3RpdmUgICAgICAgICA9ICpXU1AgWyBkaXJlY3RpdmUt
bmFtZSBbIFdTUCBkaXJlY3RpdmUtdmFsdWUgXSBdCiAvLyBkaXJlY3RpdmUtbmFtZSAgICA9IDEq
KCBBTFBIQSAvIERJR0lUIC8gIi0iICkKIC8vIGRpcmVjdGl2ZS12YWx1ZSAgID0gKiggV1NQIC8g
PFZDSEFSIGV4Y2VwdCAiOyI+ICkKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIq
IGVuZCwgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gYXV0byBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJz
ZURpcmVjdGl2ZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZm
ZXIpIC0+IE9wdGlvbmFsPFBhcnNlZERpcmVjdGl2ZT4KIHsKLSAgICBBU1NFUlQobmFtZS5pc0Vt
cHR5KCkpOwotICAgIEFTU0VSVCh2YWx1ZS5pc0VtcHR5KCkpOwotCi0gICAgY29uc3QgVUNoYXIq
IHBvc2l0aW9uID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBv
c2l0aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+
KHBhcnNpbmdCdWZmZXIpOwogCiAgICAgLy8gRW1wdHkgZGlyZWN0aXZlIChlLmcuICI7OzsiKS4g
RXhpdCBlYXJseS4KLSAgICBpZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIGNvbnN0IFVDaGFyKiBuYW1lQmVnaW4gPSBwb3NpdGlvbjsKLSAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7
CisgICAgYXV0byBuYW1lQmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tp
cFdoaWxlPENoYXJhY3RlclR5cGUsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4ocGFyc2luZ0J1
ZmZlcik7CiAKICAgICAvLyBUaGUgZGlyZWN0aXZlLW5hbWUgbXVzdCBiZSBub24tZW1wdHkuCi0g
ICAgaWYgKG5hbWVCZWdpbiA9PSBwb3NpdGlvbikgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIs
IGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9y
dFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJl
Z2luKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobmFtZUJlZ2luID09IHBhcnNp
bmdCdWZmZXIucG9zaXRpb24oKSkgeworICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0
VW5zdXBwb3J0ZWREaXJlY3RpdmUoU3RyaW5nKG5hbWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpIC0gbmFtZUJlZ2luKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQogCi0gICAgbmFtZSA9IFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJlZ2luKTsK
KyAgICBhdXRvIG5hbWUgPSBTdHJpbmcobmFtZUJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9u
KCkgLSBuYW1lQmVnaW4pOwogCi0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJu
IFBhcnNlZERpcmVjdGl2ZSB7IFdURk1vdmUobmFtZSksIHsgfSB9OwogCi0gICAgaWYgKCFza2lw
RXhhY3RseTxVQ2hhciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKSkgewotICAgICAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAg
IG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBv
c2l0aW9uIC0gbmFtZUJlZ2luKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXNr
aXBFeGFjdGx5PENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcikpIHsK
KyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocGFyc2lu
Z0J1ZmZlcik7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0
cmluZyhuYW1lQmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIG5hbWVCZWdpbikpOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIHNraXBXaGlsZTxVQ2hh
ciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKIAotICAgIGNvbnN0IFVDaGFyKiB2
YWx1ZUJlZ2luID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0RpcmVjdGl2ZVZh
bHVlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIHZhbHVlQmVnaW4gPSBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzRGly
ZWN0aXZlVmFsdWVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgaWYgKHBvc2l0aW9u
ICE9IGVuZCkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlVmFsdWVD
aGFyYWN0ZXIobmFtZSwgU3RyaW5nKHZhbHVlQmVnaW4sIGVuZCAtIHZhbHVlQmVnaW4pKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKSB7Cisg
ICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihuYW1l
LCBTdHJpbmcodmFsdWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5lbmQoKSAtIHZhbHVlQmVnaW4pKTsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICAvLyBUaGUgZGlyZWN0
aXZlLXZhbHVlIG1heSBiZSBlbXB0eS4KLSAgICBpZiAodmFsdWVCZWdpbiA9PSBwb3NpdGlvbikK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHZhbHVlQmVnaW4gPT0gcGFyc2luZ0J1ZmZl
ci5wb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gUGFyc2VkRGlyZWN0aXZlIHsgV1RGTW92ZShu
YW1lKSwgeyB9IH07CiAKLSAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZUJlZ2luLCBwb3NpdGlvbiAt
IHZhbHVlQmVnaW4pOwotICAgIHJldHVybiB0cnVlOworICAgIGF1dG8gdmFsdWUgPSBTdHJpbmco
dmFsdWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gdmFsdWVCZWdpbik7CisgICAg
cmV0dXJuIFBhcnNlZERpcmVjdGl2ZSB7IFdURk1vdmUobmFtZSksIFdURk1vdmUodmFsdWUpIH07
CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBv
cnRVUkkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZVJlcG9ydFVSSShQYXJzZWREaXJl
Y3RpdmUmJiBkaXJlY3RpdmUpCiB7CiAgICAgaWYgKCFtX3JlcG9ydFVSSXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAg
ICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZS5uYW1lKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXco
dmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlv
biA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9uICsgdmFsdWUu
bGVuZ3RoKCk7CisgICAgV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoZGlyZWN0aXZlLnZh
bHVlLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5
cGUgPSB0eXBlbmFtZSBkZWNsdHlwZShwYXJzaW5nQnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKIAot
ICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlz
QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAgY29uc3QgVUNoYXIqIHVy
bEJlZ2luID0gcG9zaXRpb247Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNw
YWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgIGF1dG8gdXJsQmVnaW4gPSBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKIAotICAgICAgICBpZiAodXJsQmVnaW4g
PCBwb3NpdGlvbikKLSAgICAgICAgICAgIG1fcmVwb3J0VVJJcy5hcHBlbmQodmFsdWUuc3Vic3Ry
aW5nKHVybEJlZ2luIC0gY2hhcmFjdGVycywgcG9zaXRpb24gLSB1cmxCZWdpbikpOwotICAgIH0K
KyAgICAgICAgICAgIGlmICh1cmxCZWdpbiA8IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSkKKyAg
ICAgICAgICAgICAgICBtX3JlcG9ydFVSSXMuYXBwZW5kKGRpcmVjdGl2ZS52YWx1ZS5zdWJzdHJp
bmcodXJsQmVnaW4gLSBiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gdXJsQmVnaW4p
KTsKKyAgICAgICAgfQorICAgIH0pOwogfQogCiAKIHRlbXBsYXRlPGNsYXNzIENTUERpcmVjdGl2
ZVR5cGU+Ci12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldENTUERp
cmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIHN0ZDo6dW5p
cXVlX3B0cjxDU1BEaXJlY3RpdmVUeXBlPiYgZGlyZWN0aXZlKQordm9pZCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRDU1BEaXJlY3RpdmUoUGFyc2VkRGlyZWN0aXZlJiYg
ZGlyZWN0aXZlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlwZT4mIGV4aXN0aW5nRGly
ZWN0aXZlKQogewotICAgIGlmIChkaXJlY3RpdmUpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0
RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgIGlmIChleGlzdGluZ0RpcmVjdGl2ZSkgewor
ICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoZGlyZWN0aXZlLm5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRpcmVjdGl2ZSA9IG1ha2VVbmlxdWU8Q1NQ
RGlyZWN0aXZlVHlwZT4oKnRoaXMsIG5hbWUsIHZhbHVlKTsKKyAgICBleGlzdGluZ0RpcmVjdGl2
ZSA9IG1ha2VVbmlxdWU8Q1NQRGlyZWN0aXZlVHlwZT4oKnRoaXMsIFdURk1vdmUoZGlyZWN0aXZl
Lm5hbWUpLCBXVEZNb3ZlKGRpcmVjdGl2ZS52YWx1ZSkpOwogfQogCi12b2lkIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgc2FuZGJveFBvbGljeSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdDo6YXBwbHlTYW5kYm94UG9saWN5KFBhcnNlZERpcmVjdGl2ZSYm
IGRpcmVjdGl2ZSkKIHsKICAgICBpZiAobV9yZXBvcnRPbmx5KSB7Ci0gICAgICAgIG1fcG9saWN5
LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKG5hbWUpOworICAgICAgICBt
X3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShkaXJlY3RpdmUu
bmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1faGF2ZVNhbmRib3hQb2xp
Y3kpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOwor
ICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoZGlyZWN0aXZlLm5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1faGF2ZVNhbmRib3hQb2xpY3kgPSB0cnVl
OwogICAgIFN0cmluZyBpbnZhbGlkVG9rZW5zOwotICAgIG1fcG9saWN5LmVuZm9yY2VTYW5kYm94
RmxhZ3MoU2VjdXJpdHlDb250ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koc2FuZGJveFBvbGljeSwg
aW52YWxpZFRva2VucykpOworICAgIG1fcG9saWN5LmVuZm9yY2VTYW5kYm94RmxhZ3MoU2VjdXJp
dHlDb250ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koV1RGTW92ZShkaXJlY3RpdmUudmFsdWUpLCBp
bnZhbGlkVG9rZW5zKSk7CiAgICAgaWYgKCFpbnZhbGlkVG9rZW5zLmlzTnVsbCgpKQogICAgICAg
ICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkU2FuZGJveEZsYWdzKGludmFsaWRUb2tlbnMpOwogfQog
Ci12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldFVwZ3JhZGVJbnNl
Y3VyZVJlcXVlc3RzKGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTGlzdDo6c2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMoUGFyc2VkRGlyZWN0
aXZlJiYgZGlyZWN0aXZlKQogewogICAgIGlmIChtX3JlcG9ydE9ubHkpIHsKLSAgICAgICAgbV9w
b2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUobmFtZSk7CisgICAg
ICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKFdURk1v
dmUoZGlyZWN0aXZlLm5hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV91
cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykgewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNh
dGVEaXJlY3RpdmUobmFtZSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVj
dGl2ZShXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgbV91cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyA9IHRydWU7CiAgICAgbV9wb2xpY3kuc2V0VXBn
cmFkZUluc2VjdXJlUmVxdWVzdHModHJ1ZSk7CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTGlzdDo6c2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKGNvbnN0IFN0
cmluZyYgbmFtZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0
QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKFBhcnNlZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkK
IHsKICAgICBpZiAobV9oYXNCbG9ja0FsbE1peGVkQ29udGVudERpcmVjdGl2ZSkgewotICAgICAg
ICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CisgICAgICAgIG1fcG9s
aWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9oYXNCbG9ja0FsbE1peGVkQ29udGVudERpcmVj
dGl2ZSA9IHRydWU7CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlz
dDo6YWRkRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWRkRGlyZWN0aXZlKFBh
cnNlZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkKIHsKLSAgICBBU1NFUlQoIW5hbWUuaXNFbXB0eSgp
KTsKKyAgICBBU1NFUlQoIWRpcmVjdGl2ZS5uYW1lLmlzRW1wdHkoKSk7CiAKLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVO
YW1lczo6ZGVmYXVsdFNyYykpIHsKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2RlZmF1bHRTcmMp
OworICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZGVmYXVsdFNyYykpIHsKKyAgICAgICAgc2V0
Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdU
Rk1vdmUoZGlyZWN0aXZlKSwgbV9kZWZhdWx0U3JjKTsKICAgICAgICAgbV9wb2xpY3kuYWRkSGFz
aEFsZ29yaXRobXNGb3JJbmxpbmVTY3JpcHRzKG1fZGVmYXVsdFNyYy0+aGFzaEFsZ29yaXRobXNV
c2VkKCkpOwogICAgICAgICBtX3BvbGljeS5hZGRIYXNoQWxnb3JpdGhtc0ZvcklubGluZVN0eWxl
c2hlZXRzKG1fZGVmYXVsdFNyYy0+aGFzaEFsZ29yaXRobXNVc2VkKCkpOwotICAgIH0gZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6c2NyaXB0U3JjKSkgewotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fc2NyaXB0
U3JjKTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzY3JpcHRTcmMpKSB7Cisg
ICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGly
ZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fc2NyaXB0U3JjKTsKICAgICAgICAgbV9wb2xp
Y3kuYWRkSGFzaEFsZ29yaXRobXNGb3JJbmxpbmVTY3JpcHRzKG1fc2NyaXB0U3JjLT5oYXNoQWxn
b3JpdGhtc1VzZWQoKSk7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNyYykpIHsKLSAg
ICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJl
Y3RpdmU+KG5hbWUsIHZhbHVlLCBtX3N0eWxlU3JjKTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpzdHlsZVNyYykpIHsKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9z
dHlsZVNyYyk7CiAgICAgICAgIG1fcG9saWN5LmFkZEhhc2hBbGdvcml0aG1zRm9ySW5saW5lU3R5
bGVzaGVldHMobV9zdHlsZVNyYy0+aGFzaEFsZ29yaXRobXNVc2VkKCkpOwotICAgIH0gZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6b2JqZWN0U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX29iamVjdFNy
Yyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJhbWVTcmMpKSB7CisgICAgfSBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6b2JqZWN0U3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZl
KSwgbV9vYmplY3RTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGly
ZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZVNy
YykpIHsKICAgICAgICAgLy8gRklYTUU6IExvZyB0byBjb25zb2xlICJUaGUgZnJhbWUtc3JjIGRp
cmVjdGl2ZSBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIGNoaWxkLXNyYyBkaXJlY3RpdmUgaW5zdGVh
ZC4iCiAgICAgICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NTc3Mz4uCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9mcmFtZVNyYyk7Ci0gICAgfSBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjppbWdTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1faW1nU3Jj
KTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmb250U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0
aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVl
LCBtX2ZvbnRTcmMpOworICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZyYW1lU3JjKTsK
KyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjppbWdTcmMpKQorICAgICAgICBzZXRD
U1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RG
TW92ZShkaXJlY3RpdmUpLCBtX2ltZ1NyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6OmZvbnRTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZvbnRTcmMpOwog
I2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKLSAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpt
YW5pZmVzdFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9tYW5pZmVzdFNyYyk7CisgICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6Om1hbmlmZXN0U3JjKSkKKyAgICAgICAgc2V0Q1NQ
RGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1v
dmUoZGlyZWN0aXZlKSwgbV9tYW5pZmVzdFNyYyk7CiAjZW5kaWYKLSAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjptZWRpYVNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9tZWRpYVNyYyk7Ci0gICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6Y29ubmVjdFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9j
b25uZWN0U3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjaGlsZFNyYykpCi0gICAgICAgIHNl
dENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihu
YW1lLCB2YWx1ZSwgbV9jaGlsZFNyYyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9ybUFjdGlv
bikpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9mb3JtQWN0aW9uKTsKLSAgICBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZU5hbWVzOjpiYXNlVVJJKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2Jhc2VVUkkpOwotICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1lQW5jZXN0b3JzKSkgeworICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZU5hbWVzOjptZWRpYVNyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1f
bWVkaWFTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZl
Lm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjb25uZWN0U3JjKSkK
KyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3RE
aXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9jb25uZWN0U3JjKTsKKyAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVOYW1lczo6Y2hpbGRTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3Rp
dmUpLCBtX2NoaWxkU3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRp
cmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9ybUFj
dGlvbikpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fZm9ybUFjdGlvbik7CisgICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmJhc2VVUkkpKQorICAgICAgICBzZXRDU1BEaXJl
Y3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShk
aXJlY3RpdmUpLCBtX2Jhc2VVUkkpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpm
cmFtZUFuY2VzdG9ycykpIHsKICAgICAgICAgaWYgKG1fcmVwb3J0T25seSkgewotICAgICAgICAg
ICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUobmFtZSk7
CisgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5
TW9kZShkaXJlY3RpdmUubmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJl
Y3RpdmU+KG5hbWUsIHZhbHVlLCBtX2ZyYW1lQW5jZXN0b3JzKTsKLSAgICB9IGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TmFtZXM6OnBsdWdpblR5cGVzKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1
cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fcGx1Z2luVHlwZXMp
OwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRib3gpKQotICAgICAgICBhcHBseVNhbmRib3hQ
b2xpY3kobmFtZSwgdmFsdWUpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCi0g
ICAgICAgIHBhcnNlUmVwb3J0VVJJKG5hbWUsIHZhbHVlKTsKLSAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVz
Ojp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCi0gICAgICAgIHNldFVwZ3JhZGVJbnNlY3VyZVJl
cXVlc3RzKG5hbWUpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmJsb2NrQWxsTWl4ZWRDb250ZW50
KSkKLSAgICAgICAgc2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKG5hbWUpOworICAgICAg
ICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2
ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZyYW1lQW5jZXN0b3JzKTsKKyAgICB9IGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykpCisgICAgICAgIHNldENTUERpcmVjdGl2
ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0
aXZlKSwgbV9wbHVnaW5UeXBlcyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNh
bmRib3gpKQorICAgICAgICBhcHBseVNhbmRib3hQb2xpY3koV1RGTW92ZShkaXJlY3RpdmUpKTsK
KyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKSkKKyAgICAgICAgcGFy
c2VSZXBvcnRVUkkoV1RGTW92ZShkaXJlY3RpdmUpKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQorICAgICAgICBzZXRVcGdyYWRlSW5z
ZWN1cmVSZXF1ZXN0cyhXVEZNb3ZlKGRpcmVjdGl2ZSkpOworICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpibG9ja0FsbE1peGVkQ29udGVudCkpCisgICAgICAgIHNldEJsb2NrQWxsTWl4
ZWRDb250ZW50RW5hYmxlZChXVEZNb3ZlKGRpcmVjdGl2ZSkpOwogICAgIGVsc2UKLSAgICAgICAg
bV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUobmFtZSk7CisgICAgICAgIG1fcG9s
aWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFdURk1vdmUoZGlyZWN0aXZlLm5hbWUpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9j
c3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Qu
aAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxNiArODks
MTkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlKGNvbnN0IFN0cmluZyYsIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbSk7CiAKLSAgICBib29sIHBhcnNlRGlyZWN0
aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBuYW1lLCBT
dHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIHBhcnNlUmVwb3J0VVJJKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBwYXJzZVBsdWdpblR5cGVzKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBhZGREaXJlY3Rp
dmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIGFw
cGx5U2FuZGJveFBvbGljeShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc2FuZGJv
eFBvbGljeSk7Ci0gICAgdm9pZCBzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhjb25zdCBTdHJp
bmcmIG5hbWUpOwotICAgIHZvaWQgc2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKGNvbnN0
IFN0cmluZyYgbmFtZSk7CisgICAgc3RydWN0IFBhcnNlZERpcmVjdGl2ZSB7CisgICAgICAgIFN0
cmluZyBuYW1lOworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgfTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxQYXJzZWREaXJlY3RpdmU+IHBhcnNlRGly
ZWN0aXZlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOworICAgIHZvaWQgcGFy
c2VSZXBvcnRVUkkoUGFyc2VkRGlyZWN0aXZlJiYpOworICAgIHZvaWQgYWRkRGlyZWN0aXZlKFBh
cnNlZERpcmVjdGl2ZSYmKTsKKyAgICB2b2lkIGFwcGx5U2FuZGJveFBvbGljeShQYXJzZWREaXJl
Y3RpdmUmJik7CisgICAgdm9pZCBzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhQYXJzZWREaXJl
Y3RpdmUmJik7CisgICAgdm9pZCBzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQoUGFyc2Vk
RGlyZWN0aXZlJiYpOwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIENTUERpcmVjdGl2ZVR5cGU+Ci0g
ICAgdm9pZCBzZXRDU1BEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlwZT4mKTsKKyAgICB2b2lkIHNl
dENTUERpcmVjdGl2ZShQYXJzZWREaXJlY3RpdmUmJiwgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVj
dGl2ZVR5cGU+Jik7CiAKICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0
aXZlKiBvcGVyYXRpdmVEaXJlY3RpdmUoQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERp
cmVjdGl2ZSopIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2
ZS5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRl
bnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDEwICszMSwxMiBAQAogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3QuaCIKICNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpc01lZGlhVHlwZUNoYXJh
Y3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBi
b29sIGlzTWVkaWFUeXBlQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4g
IWlzQVNDSUlTcGFjZShjKSAmJiBjICE9ICcvJzsKIH0KQEAgLTUyLDYyICs1NCw2MSBAQCBib29s
IENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjCiAKIHZvaWQgQ29udGVudFNlY3Vy
aXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlOjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29u
c3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGJlZ2lu
ICsgdmFsdWUubGVuZ3RoKCk7Ci0KICAgICAvLyAncGx1Z2luLXR5cGVzIF9fX187JyBPUiAncGx1
Z2luLXR5cGVzOycKICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRpcmVjdGl2
ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXModmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAg
IC8vIF9fX19fIE9SIF9fX19fbWltZTEvbWltZTEKLSAgICAgICAgLy8gXiAgICAgICAgXgotICAg
ICAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAg
ICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
Ly8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8gXgotICAgICAgICBiZWdpbiA9
IHBvc2l0aW9uOwotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc01lZGlhVHlwZUNo
YXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxp
c3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3Np
dGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICBza2lwV2hpbGU8VUNoYXIsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsK
KyAgICBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2lu
Z0J1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlwZW5hbWUgZGVjbHR5
cGUocGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7CiAKLSAgICAgICAgLy8gbWltZTEvbWlt
ZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8gICAgICBeCi0gICAgICAgIGlmICghc2tpcEV4YWN0
bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJykpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxV
Q2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVj
dGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2lu
LCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQor
ICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsK
KyAgICAgICAgICAgIC8vIF9fX19fIE9SIF9fX19fbWltZTEvbWltZTEKKyAgICAgICAgICAgIC8v
IF4gICAgICAgIF4KKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJ
U3BhY2U+KHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRF
bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIG1pbWUxL21p
bWUxIG1pbWUyL21pbWUyCisgICAgICAgICAgICAvLyBeCisgICAgICAgICAgICBhdXRvIGJlZ2lu
ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAgICAgaWYgKCFza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcikpIHsK
KyAgICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNl
PihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5
KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNo
YXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CisKKyAgICAgICAgICAgIC8vIG1pbWUxL21pbWUxIG1p
bWUyL21pbWUyCisgICAgICAgICAgICAvLyAgICAgIF4KKyAgICAgICAgICAgIGlmICghc2tpcEV4
YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy8nKSkgeworICAgICAgICAgICAg
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNpbmdCdWZm
ZXIpOworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZh
bGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBi
ZWdpbikpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMgorICAgICAgICAgICAgLy8gICAgICAg
XgorICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlw
ZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICBza2lwV2hpbGU8
Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVz
KFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNraXBXaGls
ZTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CisK
KyAgICAgICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyIE9SIG1pbWUxL21pbWUxICBP
UiBtaW1lMS9taW1lMS9lcnJvcgorICAgICAgICAgICAgLy8gICAgICAgICAgICBeICAgICAgICAg
ICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgaWYgKHBhcnNp
bmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzTm90QVNDSUlTcGFjZSgqcGFy
c2luZ0J1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJlY3Rp
dmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwg
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcGx1Z2luVHlwZXMuYWRkKFN0cmlu
ZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pKTsKIAotICAgICAgICAv
LyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMgotICAgICAgICAvLyAgICAgICBeCi0gICAgICAgIGlm
ICghc2tpcEV4YWN0bHk8VUNoYXIsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5k
KSkgewotICAgICAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0
aW9uLCBlbmQpOwotICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydElu
dmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQo
KSB8fCBpc0FTQ0lJU3BhY2UoKnBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSkpOwogICAgICAgICB9
Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9u
LCBlbmQpOwotCi0gICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyIE9SIG1pbWUxL21p
bWUxICBPUiBtaW1lMS9taW1lMS9lcnJvcgotICAgICAgICAvLyAgICAgICAgICAgIF4gICAgICAg
ICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICBeCi0gICAgICAgIGlmIChwb3NpdGlv
biA8IGVuZCAmJiBpc05vdEFTQ0lJU3BhY2UoKnBvc2l0aW9uKSkgewotICAgICAgICAgICAgc2tp
cFdoaWxlPFVDaGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICAg
ICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJp
bmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0gICAgICAgIG1fcGx1Z2luVHlwZXMuYWRkKFN0cmluZyhiZWdpbiwgcG9zaXRpb24g
LSBiZWdpbikpOwotCi0gICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNw
YWNlKCpwb3NpdGlvbikpOwotICAgIH0KKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2
NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC01Niw0OCArNTcsNDEgQEAgc3RhdGljIGJvb2wgaXNDU1BEaXJl
Y3RpdmVOYW1lKGNvbnN0IFN0cgogICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNyYyk7CiB9CiAK
LXN0YXRpYyBib29sIGlzU291cmNlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1NvdXJjZUNoYXJhY3RlcihDaGFyYWN0ZXJU
eXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7CiB9CiAKLXN0YXRpYyBib29s
IGlzSG9zdENoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gc3RhdGljIGJvb2wgaXNIb3N0Q2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICBy
ZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICctJzsKIH0KIAotc3RhdGljIGJv
b2wgaXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1BhdGhDb21wb25lbnRDaGFyYWN0ZXIoQ2hhcmFj
dGVyVHlwZSBjKQogewogICAgIHJldHVybiBjICE9ICc/JyAmJiBjICE9ICcjJzsKIH0KIAotc3Rh
dGljIGJvb2wgaXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzU2NoZW1lQ29udGludWF0aW9u
Q2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVt
ZXJpYyhjKSB8fCBjID09ICcrJyB8fCBjID09ICctJyB8fCBjID09ICcuJzsKIH0KIAotc3RhdGlj
IGJvb2wgaXNOb3RDb2xvbk9yU2xhc2goVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBib29sIGlzTm90Q29sb25PclNsYXNoKENoYXJhY3RlclR5cGUgYykK
IHsKICAgICByZXR1cm4gYyAhPSAnOicgJiYgYyAhPSAnLyc7CiB9CiAKLXN0YXRpYyBib29sIGlz
U291cmNlTGlzdE5vbmUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzU291cmNlTGlzdE5vbmUoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAgIGF1dG8gY2hhcmFjdGVy
cyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0
IFVDaGFyKiBiZWdpbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGNoYXJh
Y3RlcnMgKyB2YWx1ZS5sZW5ndGgoKTsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFj
ZT4oYmVnaW4sIGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFj
ZT4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsK
LSAgICBza2lwV2hpbGU8VUNoYXIsIGlzU291cmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsK
LSAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBwb3NpdGlvbiAt
IGJlZ2luLCAiJ25vbmUnIikpCisgICAgaWYgKCFza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNl
KHBhcnNpbmdCdWZmZXIsICInbm9uZSciKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
c2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgIGlmIChw
b3NpdGlvbiAhPSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBza2lwV2hpbGU8Q2hh
cmFjdGVyVHlwZSwgaXNBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKICAgICAKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gcGFyc2luZ0J1ZmZlci5hdEVuZCgpOwogfQogCiBDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
KGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgcG9saWN5LCBjb25zdCBTdHJpbmcmIGRpcmVj
dGl2ZU5hbWUpCkBAIC0xMDgsMTIgKzEwMiwxNCBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0OjpDb250ZW50CiAKIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6
cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoaXNTb3VyY2VMaXN0Tm9uZSh2
YWx1ZSkpIHsKLSAgICAgICAgbV9pc05vbmUgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOwotICAgIHBhcnNlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5n
dGgoKSk7CisgICAgV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRv
IHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgaWYgKGlzU291cmNlTGlzdE5vbmUocGFyc2luZ0J1
ZmZlcikpIHsKKyAgICAgICAgICAgIG1faXNOb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHBhcnNlKHBhcnNpbmdCdWZmZXIpOworICAgIH0pOwog
fQogCiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OmlzUHJvdG9jb2xBbGxv
d2VkQnlTdGFyKGNvbnN0IFVSTCYgdXJsKSBjb25zdApAQCAtMTYwLDMwICsxNTYsMjggQEAgYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjptYQogLy8gc291cmNlLWxpc3QgICAg
ICAgPSAqV1NQIFsgc291cmNlICooIDEqV1NQIHNvdXJjZSApICpXU1AgXQogLy8gICAgICAgICAg
ICAgICAgICAgLyAqV1NQICInbm9uZSciICpXU1AKIC8vCi12b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhcnNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVu
ZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgQ29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdDo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiBwYXJzaW5nQnVmZmVyKQogewotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwot
Ci0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uID09IGVu
ZCkKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsK
KyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1
ZmZlcik7CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgY29uc3QgVUNoYXIqIGJlZ2luU291cmNlID0gcG9zaXRpb247Ci0g
ICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQp
OworICAgICAgICBhdXRvIGJlZ2luU291cmNlID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwor
ICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBhcnNp
bmdCdWZmZXIpOwogCiAgICAgICAgIFN0cmluZyBzY2hlbWUsIGhvc3QsIHBhdGg7CiAgICAgICAg
IE9wdGlvbmFsPHVpbnQxNl90PiBwb3J0OwogICAgICAgICBib29sIGhvc3RIYXNXaWxkY2FyZCA9
IGZhbHNlOwogICAgICAgICBib29sIHBvcnRIYXNXaWxkY2FyZCA9IGZhbHNlOwogCi0gICAgICAg
IGlmIChwYXJzZU5vbmNlU291cmNlKGJlZ2luU291cmNlLCBwb3NpdGlvbikpCisgICAgICAgIGlm
IChwYXJzZU5vbmNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblNvdXJjZSwgcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpIH0pKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgaWYgKHBhcnNlSGFzaFNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24pKQorICAgICAgICBp
ZiAocGFyc2VIYXNoU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblNvdXJjZSwgcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpIH0pKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgaWYgKHBhcnNlU291cmNlKGJlZ2luU291cmNlLCBwb3NpdGlvbiwgc2NoZW1lLCBob3N0LCBw
b3J0LCBwYXRoLCBob3N0SGFzV2lsZGNhcmQsIHBvcnRIYXNXaWxkY2FyZCkpIHsKKyAgICAgICAg
aWYgKHBhcnNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblNvdXJjZSwgcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpIH0sIHNjaGVtZSwgaG9zdCwgcG9ydCwgcGF0aCwgaG9zdEhhc1dp
bGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKSB7CiAgICAgICAgICAgICAvLyBXaWxkY2FyZCBob3N0
cyBhbmQga2V5d29yZCBzb3VyY2VzICgnc2VsZicsICd1bnNhZmUtaW5saW5lJywKICAgICAgICAg
ICAgIC8vIGV0Yy4pIGFyZW4ndCBzdG9yZWQgaW4gbV9saXN0LCBidXQgYXMgYXR0cmlidXRlcyBv
biB0aGUgc291cmNlCiAgICAgICAgICAgICAvLyBsaXN0IGl0c2VsZi4KQEAgLTE5Myw5ICsxODcs
OSBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAgICAgICAgICAg
ICAgICAgbV9wb2xpY3kucmVwb3J0RGlyZWN0aXZlQXNTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0
aXZlTmFtZSwgaG9zdCk7CiAgICAgICAgICAgICBtX2xpc3QuYXBwZW5kKENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZShtX3BvbGljeSwgc2NoZW1lLCBob3N0LCBwb3J0LCBwYXRoLCBob3N0SGFz
V2lsZGNhcmQsIHBvcnRIYXNXaWxkY2FyZCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IG1fcG9saWN5LnJlcG9ydEludmFsaWRTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0aXZlTmFtZSwg
U3RyaW5nKGJlZ2luU291cmNlLCBwb3NpdGlvbiAtIGJlZ2luU291cmNlKSk7CisgICAgICAgICAg
ICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkU291cmNlRXhwcmVzc2lvbihtX2RpcmVjdGl2ZU5hbWUs
IFN0cmluZyhiZWdpblNvdXJjZSwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5Tb3Vy
Y2UpKTsKIAotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8IGlzQVNDSUlTcGFjZSgq
cG9zaXRpb24pKTsKKyAgICAgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCBpc0FT
Q0lJU3BhY2UoKnBhcnNpbmdCdWZmZXIpKTsKICAgICB9CiAgICAgCiAgICAgbV9saXN0LnNocmlu
a1RvRml0KCk7CkBAIC0yMDUsMTAzICsxOTksMTAzIEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGEKIC8vICAgICAgICAgICAgICAgICAgIC8gKCBbIHNjaGVtZSAiOi8v
IiBdIGhvc3QgWyBwb3J0IF0gWyBwYXRoIF0gKQogLy8gICAgICAgICAgICAgICAgICAgLyAiJ3Nl
bGYnIgogLy8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTb3Vy
Y2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNjaGVtZSwg
U3RyaW5nJiBob3N0LCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIFN0cmluZyYgcGF0aCwgYm9v
bCYgaG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNhcmQpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6
OnBhcnNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1
ZmZlciwgU3RyaW5nJiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBw
b3J0LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dp
bGRjYXJkKQogewotICAgIGlmIChiZWdpbiA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIu
YXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIidub25lJyIpKQorICAgIGlmIChz
a2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICInbm9uZSciKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2lu
ID09ICcqJykgeworICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEg
JiYgKnBhcnNpbmdCdWZmZXIgPT0gJyonKSB7CiAgICAgICAgIG1fYWxsb3dTdGFyID0gdHJ1ZTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIidzZWxmJyIpKSB7CisgICAgaWYgKHNr
aXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgIidzZWxmJyIpKSB7CiAg
ICAgICAgIG1fYWxsb3dTZWxmID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdp
biwgIid1bnNhZmUtaW5saW5lJyIpKSB7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJ
SUNhc2UocGFyc2luZ0J1ZmZlciwgIid1bnNhZmUtaW5saW5lJyIpKSB7CiAgICAgICAgIG1fYWxs
b3dJbmxpbmUgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAtIGJlZ2luLCAiJ3Vuc2Fm
ZS1ldmFsJyIpKSB7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2lu
Z0J1ZmZlciwgIid1bnNhZmUtZXZhbCciKSkgewogICAgICAgICBtX2FsbG93RXZhbCA9IHRydWU7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlv
biA9IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbkhvc3QgPSBiZWdpbjsKLSAgICBjb25z
dCBVQ2hhciogYmVnaW5QYXRoID0gZW5kOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpblBvcnQgPSBu
dWxscHRyOworICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAg
YXV0byBiZWdpbkhvc3QgPSBiZWdpbjsKKyAgICBhdXRvIGJlZ2luUGF0aCA9IHBhcnNpbmdCdWZm
ZXIuZW5kKCk7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW5Qb3J0ID0gbnVsbHB0cjsK
IAotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBlbmQp
OworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdENvbG9uT3JTbGFzaD4ocGFyc2lu
Z0J1ZmZlcik7CiAKLSAgICBpZiAocG9zaXRpb24gPT0gZW5kKSB7CisgICAgaWYgKHBhcnNpbmdC
dWZmZXIuYXRFbmQoKSkgewogICAgICAgICAvLyBob3N0CiAgICAgICAgIC8vICAgICBeCi0gICAg
ICAgIHJldHVybiBwYXJzZUhvc3QoYmVnaW5Ib3N0LCBwb3NpdGlvbiwgaG9zdCwgaG9zdEhhc1dp
bGRjYXJkKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlSG9zdChTdHJpbmdQYXJzaW5nQnVmZmVyIHsg
YmVnaW5Ib3N0LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgfSwgaG9zdCwgaG9zdEhhc1dpbGRj
YXJkKTsKICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICcv
JykgeworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAq
cGFyc2luZ0J1ZmZlciA9PSAnLycpIHsKICAgICAgICAgLy8gaG9zdC9wYXRoIHx8IGhvc3QvIHx8
IC8KICAgICAgICAgLy8gICAgIF4gICAgICAgICAgICBeICAgIF4KLSAgICAgICAgcmV0dXJuIHBh
cnNlSG9zdChiZWdpbkhvc3QsIHBvc2l0aW9uLCBob3N0LCBob3N0SGFzV2lsZGNhcmQpICYmIHBh
cnNlUGF0aChwb3NpdGlvbiwgZW5kLCBwYXRoKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlSG9zdChT
dHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5Ib3N0LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkg
fSwgaG9zdCwgaG9zdEhhc1dpbGRjYXJkKSAmJiBwYXJzZVBhdGgocGFyc2luZ0J1ZmZlciwgcGF0
aCk7CiAgICAgfQogCi0gICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSAnOicp
IHsKLSAgICAgICAgaWYgKGVuZCAtIHBvc2l0aW9uID09IDEpIHsKKyAgICBpZiAocGFyc2luZ0J1
ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJzonKSB7
CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEpIHsKICAg
ICAgICAgICAgIC8vIHNjaGVtZToKICAgICAgICAgICAgIC8vICAgICAgIF4KLSAgICAgICAgICAg
IHJldHVybiBwYXJzZVNjaGVtZShiZWdpbiwgcG9zaXRpb24sIHNjaGVtZSk7CisgICAgICAgICAg
ICByZXR1cm4gcGFyc2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luLCBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCkgfSwgc2NoZW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChw
b3NpdGlvblsxXSA9PSAnLycpIHsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbMV0gPT0gJy8n
KSB7CiAgICAgICAgICAgICAvLyBzY2hlbWU6Ly9ob3N0IHx8IHNjaGVtZTovLwogICAgICAgICAg
ICAgLy8gICAgICAgXiAgICAgICAgICAgICAgICBeCi0gICAgICAgICAgICBpZiAoIXBhcnNlU2No
ZW1lKGJlZ2luLCBwb3NpdGlvbiwgc2NoZW1lKQotICAgICAgICAgICAgICAgIHx8ICFza2lwRXhh
Y3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJzonKQotICAgICAgICAgICAgICAgIHx8ICFza2lw
RXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKQotICAgICAgICAgICAgICAgIHx8ICFz
a2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKSkKKyAgICAgICAgICAgIGlmICgh
cGFyc2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBv
c2l0aW9uKCkgfSwgc2NoZW1lKQorICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseTxDaGFy
YWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnOicpCisgICAgICAgICAgICAgICAgfHwgIXNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJykKKyAgICAgICAgICAgICAg
ICB8fCAhc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy8nKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gPT0g
ZW5kKQorICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBiZWdpbkhvc3QgPSBwb3NpdGlvbjsKLSAg
ICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBl
bmQpOworICAgICAgICAgICAgYmVnaW5Ib3N0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwor
ICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90Q29sb25PclNsYXNoPihw
YXJzaW5nQnVmZmVyKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAm
JiAqcG9zaXRpb24gPT0gJzonKSB7CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAnOicpIHsKICAgICAgICAgICAg
IC8vIGhvc3Q6cG9ydCB8fCBzY2hlbWU6Ly9ob3N0OnBvcnQKICAgICAgICAgICAgIC8vICAgICBe
ICAgICAgICAgICAgICAgICAgICAgXgotICAgICAgICAgICAgYmVnaW5Qb3J0ID0gcG9zaXRpb247
Ci0gICAgICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJyk7CisgICAg
ICAgICAgICBiZWdpblBvcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAg
ICBza2lwVW50aWw8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy8nKTsKICAgICAgICAg
fQogICAgIH0KIAotICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gJy8nKSB7
CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJz
aW5nQnVmZmVyID09ICcvJykgewogICAgICAgICAvLyBzY2hlbWU6Ly9ob3N0L3BhdGggfHwgc2No
ZW1lOi8vaG9zdDpwb3J0L3BhdGgKICAgICAgICAgLy8gICAgICAgICAgICAgIF4gICAgICAgICAg
ICAgICAgICAgICAgICAgIF4KLSAgICAgICAgaWYgKHBvc2l0aW9uID09IGJlZ2luSG9zdCkKKyAg
ICAgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA9PSBiZWdpbkhvc3QpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgYmVnaW5QYXRoID0gcG9zaXRpb247CisgICAg
ICAgIGJlZ2luUGF0aCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKICAgICB9CiAKLSAgICBp
ZiAoIXBhcnNlSG9zdChiZWdpbkhvc3QsIGJlZ2luUG9ydCA/IGJlZ2luUG9ydCA6IGJlZ2luUGF0
aCwgaG9zdCwgaG9zdEhhc1dpbGRjYXJkKSkKKyAgICBpZiAoIXBhcnNlSG9zdChTdHJpbmdQYXJz
aW5nQnVmZmVyIHsgYmVnaW5Ib3N0LCBiZWdpblBvcnQgPyBiZWdpblBvcnQgOiBiZWdpblBhdGgg
fSwgaG9zdCwgaG9zdEhhc1dpbGRjYXJkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKCFiZWdpblBvcnQpCiAgICAgICAgIHBvcnQgPSBXVEY6Om51bGxvcHQ7CiAgICAgZWxzZSB7
Ci0gICAgICAgIGlmICghcGFyc2VQb3J0KGJlZ2luUG9ydCwgYmVnaW5QYXRoLCBwb3J0LCBwb3J0
SGFzV2lsZGNhcmQpKQorICAgICAgICBpZiAoIXBhcnNlUG9ydChTdHJpbmdQYXJzaW5nQnVmZmVy
IHsgYmVnaW5Qb3J0LCBiZWdpblBhdGggfSwgcG9ydCwgcG9ydEhhc1dpbGRjYXJkKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoYmVnaW5QYXRoICE9IGVuZCkg
ewotICAgICAgICBpZiAoIXBhcnNlUGF0aChiZWdpblBhdGgsIGVuZCwgcGF0aCkpCisgICAgaWYg
KGJlZ2luUGF0aCAhPSBwYXJzaW5nQnVmZmVyLmVuZCgpKSB7CisgICAgICAgIGlmICghcGFyc2VQ
YXRoKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblBhdGgsIHBhcnNpbmdCdWZmZXIuZW5kKCkg
fSwgcGF0aCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0zMTEsMjUg
KzMwNSwyNSBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAvLyAg
ICAgICAgICAgICAgICAgICAgIDsgPHNjaGVtZT4gcHJvZHVjdGlvbiBmcm9tIFJGQyAzOTg2CiAv
LyBzY2hlbWUgICAgICA9IEFMUEhBICooIEFMUEhBIC8gRElHSVQgLyAiKyIgLyAiLSIgLyAiLiIg
KQogLy8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTY2hlbWUo
Y29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNjaGVtZSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdDo6cGFyc2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiBwYXJzaW5nQnVmZmVyLCBTdHJpbmcmIHNjaGVtZSkKIHsKLSAgICBBU1NFUlQoYmVnaW4gPD0g
ZW5kKTsKKyAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZm
ZXIuZW5kKCkpOwogICAgIEFTU0VSVChzY2hlbWUuaXNFbXB0eSgpKTsKIAotICAgIGlmIChiZWdp
biA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47CisgICAgYXV0byBi
ZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKIAotICAgIGlmICghc2tpcEV4YWN0bHk8
VUNoYXIsIGlzQVNDSUlBbHBoYT4ocG9zaXRpb24sIGVuZCkpCisgICAgaWYgKCFza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJQWxwaGE+KHBhcnNpbmdCdWZmZXIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzU2NoZW1lQ29udGludWF0aW9u
Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgaWYg
KHBvc2l0aW9uICE9IGVuZCkKKyAgICBpZiAoIXBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2NoZW1lID0gU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdp
bik7CisgICAgc2NoZW1lID0gU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkg
LSBiZWdpbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMzNyw5MSArMzMxLDg5IEBAIGJv
b2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEKIC8vICAgICAgICAgICAgICAg
ICAgIC8gIioiCiAvLyBob3N0LWNoYXIgICAgICAgICA9IEFMUEhBIC8gRElHSVQgLyAiLSIKIC8v
Ci1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSG9zdChjb25zdCBV
Q2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhh
c1dpbGRjYXJkKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhvc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNX
aWxkY2FyZCkKIHsKLSAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKKyAgICBBU1NFUlQocGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIuZW5kKCkpOwogICAgIEFTU0VSVCho
b3N0LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFob3N0SGFzV2lsZGNhcmQpOwogCi0gICAgaWYg
KGJlZ2luID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLQotICAg
IGlmIChza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJyonKSkgeworICAgIGlmIChz
a2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnKicpKSB7CiAgICAgICAg
IGhvc3RIYXNXaWxkY2FyZCA9IHRydWU7CiAKLSAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkK
KyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcu
JykpCisgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZl
ciwgJy4nKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjb25zdCBV
Q2hhciogaG9zdEJlZ2luID0gcG9zaXRpb247CisgICAgYXV0byBob3N0QmVnaW4gPSBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCk7CiAKLSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAg
ICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5k
KSkKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsK
KyAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc0hvc3RDaGFyYWN0ZXI+
KHBhcnNpbmdCdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHNr
aXBXaGlsZTxVQ2hhciwgaXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAg
c2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzSG9zdENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7
CiAKLSAgICAgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICFza2lwRXhhY3RseTxVQ2hhcj4ocG9z
aXRpb24sIGVuZCwgJy4nKSkKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpICYmICFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVy
LCAnLicpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEFTU0VSVChw
b3NpdGlvbiA9PSBlbmQpOwotICAgIGhvc3QgPSBTdHJpbmcoaG9zdEJlZ2luLCBlbmQgLSBob3N0
QmVnaW4pOworICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpOworICAgIGhvc3QgPSBT
dHJpbmcoaG9zdEJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBob3N0QmVnaW4pOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3Q6OnBhcnNlUGF0aChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmlu
ZyYgcGF0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQYXRoKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlciwgU3RyaW5nJiBwYXRoKQogewotICAgIEFTU0VSVChi
ZWdpbiA8PSBlbmQpOworICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPD0gcGFy
c2luZ0J1ZmZlci5lbmQoKSk7CiAgICAgQVNTRVJUKHBhdGguaXNFbXB0eSgpKTsKICAgICAKLSAg
ICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlz
UGF0aENvbXBvbmVudENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBiZWdpbiA9
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKICAgICAvLyBwYXRoL3Rv
L2ZpbGUuanM/cXVlcnk9c3RyaW5nIHx8IHBhdGgvdG8vZmlsZS5qcyNhbmNob3IKICAgICAvLyAg
ICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLSAgICBpZiAo
cG9zaXRpb24gPCBlbmQpCi0gICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRQYXRoQ2hhcmFj
dGVyKG1fZGlyZWN0aXZlTmFtZSwgU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdpbiksICpwb3NpdGlv
bik7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKQorICAg
ICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUGF0aENoYXJhY3RlcihtX2RpcmVjdGl2ZU5hbWUs
IFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5lbmQoKSAtIGJlZ2luKSwgKnBhcnNpbmdCdWZm
ZXIpOwogICAgIAotICAgIHBhdGggPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nKGJl
Z2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7CisgICAgcGF0aCA9IGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CiAg
ICAgCi0gICAgQVNTRVJUKHBvc2l0aW9uIDw9IGVuZCk7Ci0gICAgQVNTRVJUKHBvc2l0aW9uID09
IGVuZCB8fCAoKnBvc2l0aW9uID09ICcjJyB8fCAqcG9zaXRpb24gPT0gJz8nKSk7CisgICAgQVNT
RVJUKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsKKyAg
ICBBU1NFUlQocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICgqcGFyc2luZ0J1ZmZlciA9PSAnIycg
fHwgKnBhcnNpbmdCdWZmZXIgPT0gJz8nKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIHBv
cnQgICAgICAgICAgICAgID0gIjoiICggMSpESUdJVCAvICIqIiApCiAvLwotYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBj
b25zdCBVQ2hhciogZW5kLCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIGJvb2wmIHBvcnRIYXNX
aWxkY2FyZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQb3J0KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlciwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29s
JiBwb3J0SGFzV2lsZGNhcmQpCiB7Ci0gICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CisgICAgQVNT
RVJUKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsKICAg
ICBBU1NFUlQoIXBvcnQpOwogICAgIEFTU0VSVCghcG9ydEhhc1dpbGRjYXJkKTsKICAgICAKLSAg
ICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihiZWdpbiwgZW5kLCAnOicpKQorICAgIGlmICghc2tp
cEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJzonKSkKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgCi0gICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICBpZiAo
cGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAg
aWYgKGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2luID09ICcqJykgeworICAgIGlmIChwYXJzaW5n
QnVmZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJyonKSB7
CiAgICAgICAgIHBvcnQgPSBXVEY6Om51bGxvcHQ7CiAgICAgICAgIHBvcnRIYXNXaWxkY2FyZCA9
IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBjb25zdCBVQ2hh
ciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlEaWdpdD4o
cG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBiZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24o
KTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSURpZ2l0PihwYXJzaW5nQnVm
ZmVyKTsKICAgICAKLSAgICBpZiAocG9zaXRpb24gIT0gZW5kKQorICAgIGlmICghcGFyc2luZ0J1
ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgYm9vbCBvazsK
LSAgICBpbnQgcG9ydEludCA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChiZWdpbiwgZW5kIC0gYmVn
aW4sICZvayk7CisgICAgaW50IHBvcnRJbnQgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoYmVnaW4s
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luLCAmb2spOwogICAgIGlmIChwb3J0SW50
IDwgMCB8fCBwb3J0SW50ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcG9ydCA9IHBvcnRJbnQ7CkBAIC00MzEsNDQgKzQy
Myw0MiBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAvLyBNYXRj
aCBCbGluaydzIGJlaGF2aW9yIG9mIGFsbG93aW5nIGFuIGVxdWFsIHNpZ24gdG8gYXBwZWFyIGFu
eXdoZXJlIGluIHRoZSB2YWx1ZSBvZiB0aGUgbm9uY2UKIC8vIGV2ZW4gdGhvdWdoIHRoaXMgZG9l
cyBub3QgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IExldmVs
IDMgc3BlYy4sCiAvLyA8aHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1jc3AvPiAoMjkg
RmVicnVhcnkgMjAxNikuCi1zdGF0aWMgYm9vbCBpc05vbmNlQ2hhcmFjdGVyKFVDaGFyIGMpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc05vbmNlQ2hhcmFj
dGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNCYXNlNjRPckJhc2U2NFVSTENo
YXJhY3RlcihjKSB8fCBjID09ICc9JzsKIH0KIAogLy8gbm9uY2Utc291cmNlICAgID0gIidub25j
ZS0iIG5vbmNlLXZhbHVlICInIgogLy8gbm9uY2UtdmFsdWUgICAgID0gYmFzZTY0LXZhbHVlCi1i
b29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlTm9uY2VTb3VyY2UoY29u
c3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZU5v
bmNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZl
cikKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBub25jZVByZWZpeExlbmd0aCA9IDc7Ci0gICAgaWYg
KCFTdHJpbmdWaWV3KGJlZ2luLCBlbmQgLSBiZWdpbikuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlD
YXNlKCInbm9uY2UtIikpCisgICAgaWYgKCFza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBh
cnNpbmdCdWZmZXIsICInbm9uY2UtIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25z
dCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbiArIG5vbmNlUHJlZml4TGVuZ3RoOwotICAgIGNvbnN0
IFVDaGFyKiBiZWdpbk5vbmNlVmFsdWUgPSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8VUNoYXIs
IGlzTm9uY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotICAgIGlmIChwb3NpdGlvbiA+PSBl
bmQgfHwgcG9zaXRpb24gPT0gYmVnaW5Ob25jZVZhbHVlIHx8ICpwb3NpdGlvbiAhPSAnXCcnKQor
CisgICAgYXV0byBiZWdpbk5vbmNlVmFsdWUgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7Cisg
ICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm9uY2VDaGFyYWN0ZXI+KHBhcnNpbmdCdWZm
ZXIpOworICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgcGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpID09IGJlZ2luTm9uY2VWYWx1ZSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAnXCcnKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9ub25jZXMuYWRkKFN0cmluZyhiZWdpbk5vbmNlVmFs
dWUsIHBvc2l0aW9uIC0gYmVnaW5Ob25jZVZhbHVlKSk7CisgICAgbV9ub25jZXMuYWRkKFN0cmlu
ZyhiZWdpbk5vbmNlVmFsdWUsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luTm9uY2VW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBoYXNoLXNvdXJjZSAgICA9ICInIiBo
YXNoLWFsZ29yaXRobSAiLSIgYmFzZTY0LXZhbHVlICInIgogLy8gaGFzaC1hbGdvcml0aG0gPSAi
c2hhMjU2IiAvICJzaGEzODQiIC8gInNoYTUxMiIKIC8vIGJhc2U2NC12YWx1ZSAgPSAxKiggQUxQ
SEEgLyBESUdJVCAvICIrIiAvICIvIiAvICItIiAvICJfIiApKjIoICI9IiApCi1ib29sIENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZShjb25zdCBVQ2hhciog
YmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZShT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAg
aWYgKGJlZ2luID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAg
ICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnXCcnKSkKKyAgICBpZiAo
IXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICdcJycpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdChwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdChwYXJzaW5nQnVmZmVyKTsKICAgICBpZiAoIWRpZ2VzdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKHBvc2l0aW9uID49IGVuZCB8fCAqcG9zaXRpb24gIT0gJ1wnJykK
KyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICpwYXJzaW5nQnVmZmVyICE9ICdcJycp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkaWdlc3QtPnZhbHVlLnNpemUoKSA+
IENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2g6Om1heGltdW1EaWdlc3RMZW5ndGgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDE5ICs1NSwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc05vbmUoKSBjb25zdCB7IHJldHVy
biBtX2lzTm9uZTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgcGFyc2UoY29uc3QgVUNoYXIqIGJl
Z2luLCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiB2b2lkIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOwogCi0g
ICAgYm9vbCBwYXJzZVNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQs
IFN0cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwg
U3RyaW5nJiBwYXRoLCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBvcnRIYXNXaWxkY2Fy
ZCk7Ci0gICAgYm9vbCBwYXJzZVNjaGVtZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFy
KiBlbmQsIFN0cmluZyYgc2NoZW1lKTsKLSAgICBib29sIHBhcnNlSG9zdChjb25zdCBVQ2hhciog
YmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhhc1dpbGRj
YXJkKTsKLSAgICBib29sIHBhcnNlUG9ydChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFy
KiBlbmQsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsK
LSAgICBib29sIHBhcnNlUGF0aChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQs
IFN0cmluZyYgcGF0aCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9v
bCBwYXJzZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+LCBTdHJpbmcm
IHNjaGVtZSwgU3RyaW5nJiBob3N0LCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIFN0cmluZyYg
cGF0aCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNhcmQpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VTY2hlbWUoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiwgU3RyaW5nJiBzY2hlbWUpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VIb3N0KFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4sIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJk
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlUG9ydChT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+LCBPcHRpb25hbDx1aW50MTZfdD4mIHBv
cnQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gYm9vbCBwYXJzZVBhdGgoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiwgU3RyaW5nJiBwYXRoKTsKIAotICAgIGJvb2wgcGFyc2VOb25jZVNvdXJjZShjb25zdCBVQ2hh
ciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGJvb2wgcGFyc2VOb25jZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJh
Y3RlclR5cGU+KTsKIAogICAgIGJvb2wgaXNQcm90b2NvbEFsbG93ZWRCeVN0YXIoY29uc3QgVVJM
JikgY29uc3Q7CiAKLSAgICBib29sIHBhcnNlSGFzaFNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4s
IGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGJvb2wgcGFyc2VIYXNoU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4p
OwogCiAgICAgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBtX3BvbGljeTsKICAgICBWZWN0
b3I8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlPiBtX2xpc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAK
ICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC04MCwxOSArODEsMTkgQEAgU3RyaW5nIFNWR0FuZ2xlVmFsdWU6OnZhbHVlQXNT
dHJpbmcoKSBjbwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5n
bGVUeXBlKGNvbnN0IENoYXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5k
KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBTVkdBbmds
ZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBzd2l0Y2ggKGVuZCAtIHB0cikgeworICAgIHN3
aXRjaCAocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSkgewogICAgIGNhc2UgMDoKICAg
ICAgICAgcmV0dXJuIFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfVU5TUEVDSUZJRUQ7CiAg
ICAgY2FzZSAzOgotICAgICAgICBpZiAocHRyWzBdID09ICdkJyAmJiBwdHJbMV0gPT0gJ2UnICYm
IHB0clsyXSA9PSAnZycpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzBdID09ICdkJyAmJiBw
YXJzaW5nQnVmZmVyWzFdID09ICdlJyAmJiBwYXJzaW5nQnVmZmVyWzJdID09ICdnJykKICAgICAg
ICAgICAgIHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5HTEVUWVBFX0RFRzsKLSAgICAgICAg
aWYgKHB0clswXSA9PSAncicgJiYgcHRyWzFdID09ICdhJyAmJiBwdHJbMl0gPT0gJ2QnKQorICAg
ICAgICBpZiAocGFyc2luZ0J1ZmZlclswXSA9PSAncicgJiYgcGFyc2luZ0J1ZmZlclsxXSA9PSAn
YScgJiYgcGFyc2luZ0J1ZmZlclsyXSA9PSAnZCcpCiAgICAgICAgICAgICByZXR1cm4gU1ZHQW5n
bGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9SQUQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoK
LSAgICAgICAgaWYgKHB0clswXSA9PSAnZycgJiYgcHRyWzFdID09ICdyJyAmJiBwdHJbMl0gPT0g
J2EnICYmIHB0clszXSA9PSAnZCcpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzBdID09ICdn
JyAmJiBwYXJzaW5nQnVmZmVyWzFdID09ICdyJyAmJiBwYXJzaW5nQnVmZmVyWzJdID09ICdhJyAm
JiBwYXJzaW5nQnVmZmVyWzNdID09ICdkJykKICAgICAgICAgICAgIHJldHVybiBTVkdBbmdsZVZh
bHVlOjpTVkdfQU5HTEVUWVBFX0dSQUQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEwNiwy
NyArMTA3LDE5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFsdWU6OnNldFZhbHUKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRvIGhlbHBlciA9IFsmXShhdXRvKiBw
dHIsIGF1dG8qIGVuZCkgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewotICAgICAgICBhdXRvIHZhbHVl
SW5TcGVjaWZpZWRVbml0cyA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1Bv
bGljeTo6RG9udFNraXApOworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2lu
Zyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewor
ICAgICAgICBhdXRvIHZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IHBhcnNlTnVtYmVyKHBhcnNpbmdC
dWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CiAgICAgICAgIGlmICghdmFs
dWVJblNwZWNpZmllZFVuaXRzKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CiAKLSAgICAgICAgYXV0byB1bml0VHlwZSA9IHBhcnNlQW5nbGVUeXBlKHB0ciwg
ZW5kKTsKKyAgICAgICAgYXV0byB1bml0VHlwZSA9IHBhcnNlQW5nbGVUeXBlKHBhcnNpbmdCdWZm
ZXIpOwogICAgICAgICBpZiAodW5pdFR5cGUgPT0gU1ZHQW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQ
RV9VTktOT1dOKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07
CiAKICAgICAgICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOwogICAgICAgICBtX3ZhbHVlSW5TcGVj
aWZpZWRVbml0cyA9ICp2YWx1ZUluU3BlY2lmaWVkVW5pdHM7CiAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgfTsKLQotICAgIGlmICh2YWx1ZS5pczhCaXQoKSkgewotICAgICAgICBhdXRvKiBwdHIg
PSB2YWx1ZS5jaGFyYWN0ZXJzOCgpOwotICAgICAgICByZXR1cm4gaGVscGVyKHB0ciwgcHRyICsg
dmFsdWUubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGF1dG8qIHB0ciA9IHZhbHVlLmNoYXJhY3Rl
cnMxNigpOwotICAgIHJldHVybiBoZWxwZXIocHRyLCBwdHIgKyB2YWx1ZS5sZW5ndGgoKSk7Cisg
ICAgfSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFsdWU6Om5ld1ZhbHVlU3Bl
Y2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZp
ZWRVbml0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyAr
NTcsNyBAQCBib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYXNWYWxpCiB2b2lkIFNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBT
VkdOYW1lczo6dHlwZUF0dHIpIHsKLSAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtYWJsZTo6
cGFyc2VUcmFuc2Zvcm1UeXBlKHZhbHVlKTsKKyAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3Jt
YWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKHZhbHVlKS52YWx1ZU9yKFNWR1RyYW5zZm9ybVZhbHVl
OjpTVkdfVFJBTlNGT1JNX1VOS05PV04pOwogICAgICAgICBpZiAobV90eXBlID09IFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX01BVFJJWCkKICAgICAgICAgICAgIG1fdHlwZSA9IFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV047CiAgICAgICAgIHJldHVybjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlz
aW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC03Nyw1NCArNzgsNTAgQEAgZmFpbDoKICAgICByZXN1bHQuY2xlYXIoKTsKIH0KIAot
c3RhdGljIE9wdGlvbmFsPFZlY3RvcjxVbml0QmV6aWVyPj4gcGFyc2VLZXlTcGxpbmVzKGNvbnN0
IFN0cmluZ1ZpZXcmIHBhcnNlKQorc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxVbml0QmV6aWVyPj4g
cGFyc2VLZXlTcGxpbmVzKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKIHsKLSAgICBpZiAocGFy
c2UuaXNFbXB0eSgpKQorICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBwYXJzZS51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBwYXJzZS5sZW5ndGgo
KTsKLQotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAgICBWZWN0b3I8
VW5pdEJlemllcj4gcmVzdWx0OwotCi0gICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAg
IHdoaWxlIChjdXIgPCBlbmQpIHsKLSAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICAg
ICAgYXV0byBwb3NBID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgICAgICBpZiAoIXBvc0Ep
Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBXVEY6OnJlYWRD
aGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IE9w
dGlvbmFsPFZlY3RvcjxVbml0QmV6aWVyPj4geworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXMocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAgYXV0byBwb3NCID0gcGFyc2VOdW1iZXIoY3Vy
LCBlbmQpOwotICAgICAgICBpZiAoIXBvc0IpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICBWZWN0b3I8VW5pdEJlemllcj4gcmVzdWx0OwogCi0gICAgICAgIGF1dG8g
cG9zQyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NDKQotICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZh
bHNlOworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkpIHsKKyAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7CisgICAgICAgICAgICBhdXRv
IHBvc0EgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgIGlmICghcG9z
QSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8g
cG9zRCA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNr
aXApOwotICAgICAgICBpZiAoIXBvc0QpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICAgICAgYXV0byBwb3NCID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7Cisg
ICAgICAgICAgICBpZiAoIXBvc0IpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOworICAgICAgICAg
ICAgYXV0byBwb3NDID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICBp
ZiAoIXBvc0MpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAg
ICBpZiAoY3VyIDwgZW5kICYmICpjdXIgPT0gJzsnKSB7Ci0gICAgICAgICAgICBkZWxpbVBhcnNl
ZCA9IHRydWU7Ci0gICAgICAgICAgICBjdXIrKzsKLSAgICAgICAgfQorICAgICAgICAgICAgYXV0
byBwb3NEID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6
OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICghcG9zRCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVu
ZCk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CiAK
LSAgICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6aWVyIHsgKnBvc0EsICpwb3NCLCAqcG9zQywg
KnBvc0QgfSk7Ci0gICAgfQorICAgICAgICAgICAgaWYgKHNraXBFeGFjdGx5KHBhcnNpbmdCdWZm
ZXIsICc7JykpCisgICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwogCi0gICAgaWYg
KCEoY3VyID09IGVuZCAmJiAhZGVsaW1QYXJzZWQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwor
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpw
b3NDLCAqcG9zRCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKHBhcnNpbmdCdWZmZXIu
YXRFbmQoKSAmJiAhZGVsaW1QYXJzZWQpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSk7
CiB9CiAKIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0
VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1
ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg2LDI3ICs4NywzNyBAQCBib29sIFNWR0ZpdFRvVmll
d0JveDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAKIE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9W
aWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCiB7Ci0gICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB2YWx1ZS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsK
LSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAg
ICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5n
dGgoKSk7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBb
Jl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHJldHVybiBwYXJzZVZpZXdCb3hHZW5l
cmljKHBhcnNpbmdCdWZmZXIpOworICAgIH0pOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IFNW
R0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBw
YXJzaW5nQnVmZmVyLCBib29sIHZhbGlkYXRlKQoreworICAgIHJldHVybiBwYXJzZVZpZXdCb3hH
ZW5lcmljKHBhcnNpbmdCdWZmZXIsIHZhbGlkYXRlKTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0
PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFy
PiYgcGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKK3sKKyAgICByZXR1cm4gcGFyc2VWaWV3
Qm94R2VuZXJpYyhwYXJzaW5nQnVmZmVyLCB2YWxpZGF0ZSk7CiB9CiAKLU9wdGlvbmFsPEZsb2F0
UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBjLCBjb25z
dCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveEdl
bmVyaWMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwg
Ym9vbCB2YWxpZGF0ZSkKIHsKLSAgICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKKyAgICBT
dHJpbmdWaWV3IHN0cmluZ1RvUGFyc2UgPSBwYXJzaW5nQnVmZmVyLnN0cmluZ1ZpZXdPZkNoYXJh
Y3RlcnNSZW1haW5pbmcoKTsKIAotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjLCBlbmQpOwor
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKIAotICAgIGF1dG8geCA9
IHBhcnNlTnVtYmVyKGMsIGVuZCk7Ci0gICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsK
LSAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKLSAgICBhdXRvIGhlaWdodCA9
IHBhcnNlTnVtYmVyKGMsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAg
ICBhdXRvIHggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICBhdXRvIHkgPSBwYXJz
ZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIocGFy
c2luZ0J1ZmZlcik7CisgICAgYXV0byBoZWlnaHQgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVy
LCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwogCiAgICAgaWYgKHZhbGlkYXRlKSB7
CiAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG1fdmlld0JveC0+Y29udGV4dEVsZW1lbnQo
KS0+ZG9jdW1lbnQoKTsKIAogICAgICAgICBpZiAoIXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWln
aHQpIHsKLSAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRX
YXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIi
KSk7CisgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fy
bmluZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0cmluZ1RvUGFy
c2UsICJcIiIpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0K
IApAQCAtMTIzLDkgKzEzNCw5IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94
OjpwYXIKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vdGhpbmcgc2hvdWxkIGNvbWUgYWZ0ZXIg
dGhlIGxhc3QsIGZvdXJ0aCBudW1iZXIuCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhj
LCBlbmQpOwotICAgICAgICBpZiAoYyA8IGVuZCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcobWFrZVN0cmluZygiUHJvYmxlbSBwYXJz
aW5nIHZpZXdCb3g9XCIiLCBzdHIsICJcIiIpKTsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0
ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwi
Iiwgc3RyaW5nVG9QYXJzZSwgIlwiIikpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1Zp
ZXdCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94
LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOSArNjYsMTIgQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgcmVzZXQoKTsKICAgICBib29sIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9tU3RyaW5nJik7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdC
b3goY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFy
c2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFs
aWRhdGUgPSB0cnVlKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChTdHJp
bmdQYXJzaW5nQnVmZmVyPExDaGFyPiYsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYs
IGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveEdlbmVyaWMo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYsIGJvb2wgdmFsaWRhdGUgPSB0cnVl
KTsKKwogICAgIFJlZjxTVkdBbmltYXRlZFJlY3Q+IG1fdmlld0JveDsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CiAgICAgYm9v
bCBtX2lzVmlld0JveFZhbGlkIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMZW5ndGhMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVu
Z3RoTGlzdC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0
aExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Bh
cnNpbmdCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNWR0xlbmd0aExp
c3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgY2xlYXJJdGVtcygpOworCisg
ICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBw
YXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSB0eXBlbmFtZSBk
ZWNsdHlwZShwYXJzaW5nQnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKKworICAgICAgICB3aGlsZSAo
cGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGF1
dG8gc3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisKKyAgICAgICAgICAgIHNraXBV
bnRpbDxDaGFyYWN0ZXJUeXBlLCBpc1NWR1NwYWNlT3JDb21tYT4ocGFyc2luZ0J1ZmZlcik7CisK
KyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBTVkdMZW5ndGhWYWx1ZTo6Y29uc3Ry
dWN0KG1fbGVuZ3RoTW9kZSwgU3RyaW5nVmlldyhzdGFydCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpIC0gc3RhcnQpKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGFwcGVuZChTVkdMZW5ndGg6OmNyZWF0ZShXVEZNb3ZlKCp2
YWx1ZSkpKTsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHBh
cnNpbmdCdWZmZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlz
IGNsZWFySXRlbXMoKSBvbiBmYWlsdXJlIGxpa2UgU1ZHVHJhbnNmb3JtTGlzdCBkb2VzPworCisg
ICAgICAgIHJldHVybiBwYXJzaW5nQnVmZmVyLmF0RW5kKCk7CisgICAgfSk7Cit9CisKK1N0cmlu
ZyBTVkdMZW5ndGhMaXN0Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxlbmd0aCA6IG1faXRlbXMpIHsK
KyAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgnICcpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxlbmd0aC0+dmFsdWUoKS52YWx1ZUFz
U3RyaW5nKCkpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisK
K30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuaAkocmV2aXNpb24gMjYzMzM1KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHVmFs
dWVQcm9wZXJ0eUxpc3QuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTMsNDUgKzUyLDkgQEAgcHVibGljOgogCiAgICAg
U1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGhNb2RlOyB9
CiAKLSAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBj
bGVhckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJp
bmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNo
YXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVu
ZCA9IHB0ciArIHZhbHVlLmxlbmd0aCgpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0g
ICAgICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBwdHI7Ci0gICAgICAgICAgICB3aGlsZSAo
cHRyIDwgZW5kICYmICpwdHIgIT0gJywnICYmICFpc1NWR1NwYWNlKCpwdHIpKQotICAgICAgICAg
ICAgICAgIHB0cisrOwotICAgICAgICAgICAgaWYgKHB0ciA9PSBzdGFydCkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nKHN0YXJ0LCBwdHIg
LSBzdGFydCk7Ci0gICAgICAgICAgICBTVkdMZW5ndGhWYWx1ZSB2YWx1ZShtX2xlbmd0aE1vZGUp
OwotICAgICAgICAgICAgaWYgKHZhbHVlLnNldFZhbHVlQXNTdHJpbmcodmFsdWVTdHJpbmcpLmhh
c0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBhcHBl
bmQoU1ZHTGVuZ3RoOjpjcmVhdGUodmFsdWUpKTsKLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBwdHIgPT0gZW5kOwotICAgIH0KKyAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUp
OwogCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYg
bGVuZ3RoIDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0g
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQobGVuZ3RoLT52YWx1ZSgpLnZhbHVlQXNTdHJpbmcoKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICBTdHJpbmcgdmFs
dWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogICAgIAogcHJpdmF0ZToKICAgICBTVkdMZW5n
dGhMaXN0KFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMZW5ndGhWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xlbmd0aFZhbHVlLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIlNWR0xlbmd0aENvbnRleHQuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MSwxOSArNjIsMjEgQEAg
c3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBsZW5ndGhUeXBlVG9TdAogICAgIHJldHVybiAiIjsK
IH0KIAotc3RhdGljIGlubGluZSBTVkdMZW5ndGhUeXBlIHBhcnNlTGVuZ3RoVHlwZShjb25zdCBV
Q2hhciogcHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gc3RhdGljIGlubGluZSBTVkdMZW5ndGhUeXBlIHBhcnNlTGVuZ3RoVHlwZShTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChw
dHIgPT0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVy
biBTVkdMZW5ndGhUeXBlOjpOdW1iZXI7CiAKLSAgICBjb25zdCBVQ2hhciBmaXJzdENoYXIgPSAq
cHRyOworICAgIGF1dG8gZmlyc3RDaGFyID0gKnBhcnNpbmdCdWZmZXI7CisgICAgKytwYXJzaW5n
QnVmZmVyOwogCi0gICAgaWYgKCsrcHRyID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5h
dEVuZCgpKQogICAgICAgICByZXR1cm4gZmlyc3RDaGFyID09ICclJyA/IFNWR0xlbmd0aFR5cGU6
OlBlcmNlbnRhZ2UgOiBTVkdMZW5ndGhUeXBlOjpVbmtub3duOwogCi0gICAgY29uc3QgVUNoYXIg
c2Vjb25kQ2hhciA9ICpwdHI7CisgICAgYXV0byBzZWNvbmRDaGFyID0gKnBhcnNpbmdCdWZmZXI7
CisgICAgKytwYXJzaW5nQnVmZmVyOwogCi0gICAgaWYgKCsrcHRyICE9IGVuZCkKKyAgICBpZiAo
IXBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFNWR0xlbmd0aFR5cGU6OlVu
a25vd247CiAKICAgICBpZiAoZmlyc3RDaGFyID09ICdlJyAmJiBzZWNvbmRDaGFyID09ICdtJykK
QEAgLTE4MCw3ICsxODMsMTUgQEAgU1ZHTGVuZ3RoVmFsdWU6OlNWR0xlbmd0aFZhbHVlKGNvbnN0
IFNWRwogICAgIHNldFZhbHVlKGNvbnRleHQsIHZhbHVlKTsKIH0KIAotU1ZHTGVuZ3RoVmFsdWUg
U1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVjdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0
IFN0cmluZyYgdmFsdWVBc1N0cmluZywgU1ZHUGFyc2luZ0Vycm9yJiBwYXJzZUVycm9yLCBTVkdM
ZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgbmVnYXRpdmVWYWx1ZXNNb2RlKQorT3B0aW9uYWw8U1ZH
TGVuZ3RoVmFsdWU+IFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5n
dGhNb2RlLCBjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFzU3RyaW5nKQoreworICAgIFNWR0xlbmd0
aFZhbHVlIGxlbmd0aCB7IGxlbmd0aE1vZGUgfTsKKyAgICBpZiAobGVuZ3RoLnNldFZhbHVlQXNT
dHJpbmcodmFsdWVBc1N0cmluZykuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKworU1ZHTGVuZ3RoVmFsdWUgU1ZHTGVu
Z3RoVmFsdWU6OmNvbnN0cnVjdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0IFN0cmlu
Z1ZpZXcmIHZhbHVlQXNTdHJpbmcsIFNWR1BhcnNpbmdFcnJvciYgcGFyc2VFcnJvciwgU1ZHTGVu
Z3RoTmVnYXRpdmVWYWx1ZXNNb2RlIG5lZ2F0aXZlVmFsdWVzTW9kZSkKIHsKICAgICBTVkdMZW5n
dGhWYWx1ZSBsZW5ndGgobGVuZ3RoTW9kZSk7CiAKQEAgLTIzOSw3ICsyNTAsNyBAQCBSZWY8Q1NT
UHJpbWl0aXZlVmFsdWU+IFNWR0xlbmd0aFZhbHVlOjp0CiAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUobGVuZ3RoLnZhbHVlSW5TcGVjaWZpZWRVbml0cygpLCBsZW5ndGhUeXBl
VG9QcmltaXRpdmVUeXBlKGxlbmd0aC5sZW5ndGhUeXBlKCkpKTsKIH0KIAotRXhjZXB0aW9uT3I8
dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZUFzU3RyaW5nLCBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBT
VkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFz
U3RyaW5nLCBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCiB7CiAgICAgbV92YWx1ZUluU3BlY2lm
aWVkVW5pdHMgPSAwOwogICAgIG1fbGVuZ3RoTW9kZSA9IGxlbmd0aE1vZGU7CkBAIC0yODYsMjYg
KzI5NywyNCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsCiAgICAg
cmV0dXJuIHNldFZhbHVlKGNvbnRleHQsIHZhbHVlKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4g
U1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCitF
eGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBT
dHJpbmdWaWV3JiBzdHJpbmcpCiB7CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1Zp
ZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRy
ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBz
dHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBhdXRvIGNvbnZlcnRlZE51bWJlciA9IHBhcnNlTnVtYmVy
KHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwotICAgIGlmICghY29u
dmVydGVkTnVtYmVyKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsK
LQotICAgIGF1dG8gbGVuZ3RoVHlwZSA9IHBhcnNlTGVuZ3RoVHlwZShwdHIsIGVuZCk7Ci0gICAg
aWYgKGxlbmd0aFR5cGUgPT0gU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bikKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3Rl
cnNGb3JQYXJzaW5nKHN0cmluZywgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gRXhjZXB0aW9u
T3I8dm9pZD4geworICAgICAgICBhdXRvIGNvbnZlcnRlZE51bWJlciA9IHBhcnNlTnVtYmVyKHBh
cnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlm
ICghY29udmVydGVkTnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CisKKyAgICAgICAgYXV0byBsZW5ndGhUeXBlID0gcGFyc2VMZW5ndGhUeXBlKHBh
cnNpbmdCdWZmZXIpOworICAgICAgICBpZiAobGVuZ3RoVHlwZSA9PSBTVkdMZW5ndGhUeXBlOjpV
bmtub3duKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAK
LSAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwotICAgIG1fdmFsdWVJblNwZWNpZmllZFVu
aXRzID0gKmNvbnZlcnRlZE51bWJlcjsKLSAgICByZXR1cm4geyB9OworICAgICAgICBtX2xlbmd0
aFR5cGUgPSBsZW5ndGhUeXBlOworICAgICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9ICpj
b252ZXJ0ZWROdW1iZXI7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfSk7CiB9CiAKIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhjb25z
dCBTVkdMZW5ndGhDb250ZXh0JiBjb250ZXh0LCBTVkdMZW5ndGhUeXBlIGxlbmd0aFR5cGUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuaAkocmV2aXNpb24gMjYzMzM1KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDEzICs1OCwxNCBAQCBlbnVtIGNsYXNzIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA6CiBj
bGFzcyBTVkdMZW5ndGhWYWx1ZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgU1ZHTGVuZ3RoVmFsdWUoU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90
aGVyLCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcgPSBTdHJpbmcoKSk7CisgICAgU1ZHTGVu
Z3RoVmFsdWUoU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVyLCBjb25zdCBTdHJp
bmcmIHZhbHVlQXNTdHJpbmcgPSB7IH0pOwogICAgIFNWR0xlbmd0aFZhbHVlKGZsb2F0IHZhbHVl
SW5TcGVjaWZpZWRVbml0cywgU1ZHTGVuZ3RoVHlwZSwgU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0
aE1vZGU6Ok90aGVyKTsKICAgICBTVkdMZW5ndGhWYWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0
JiwgZmxvYXQsIFNWR0xlbmd0aFR5cGUgPSBTVkdMZW5ndGhUeXBlOjpOdW1iZXIsIFNWR0xlbmd0
aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlcik7CiAKLSAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFs
dWUgY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZyYsIFNWR1BhcnNpbmdFcnJv
ciYsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA9IFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVz
TW9kZTo6QWxsb3cpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdMZW5ndGhWYWx1ZT4gY29uc3Ry
dWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBzdGF0aWMgU1ZHTGVu
Z3RoVmFsdWUgY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1ZpZXcmLCBTVkdQ
YXJzaW5nRXJyb3ImLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgPSBTVkdMZW5ndGhOZWdh
dGl2ZVZhbHVlc01vZGU6OkFsbG93KTsKICAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFsdWUgYmxlbmQo
Y29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0bywgZmxv
YXQgcHJvZ3Jlc3MpOwotICAgIAorCiAgICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGZyb21DU1NQ
cmltaXRpdmVWYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYpOwogICAgIHN0YXRpYyBSZWY8
Q1NTUHJpbWl0aXZlVmFsdWU+IHRvQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgU1ZHTGVuZ3RoVmFs
dWUmKTsKIApAQCAtODUsOCArODYsOCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4g
c2V0VmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZsb2F0KTsKICAgICBFeGNlcHRpb25P
cjx2b2lkPiBzZXRWYWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0JiwgZmxvYXQsIFNWR0xlbmd0
aFR5cGUsIFNWR0xlbmd0aE1vZGUpOwogCi0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVB
c1N0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFz
U3RyaW5nKGNvbnN0IFN0cmluZyYsIFNWR0xlbmd0aE1vZGUpOworICAgIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYpOworICAgIEV4Y2VwdGlvbk9y
PHZvaWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYsIFNWR0xlbmd0aE1vZGUp
OwogCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gY29udmVydFRvU3BlY2lmaWVkVW5pdHMoY29uc3Qg
U1ZHTGVuZ3RoQ29udGV4dCYsIFNWR0xlbmd0aFR5cGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTnVtYmVyTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR051bWJlckxpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdOdW1iZXJMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR051bWJlckxpc3QuaCIKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdQYXJzaW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTVkdO
dW1iZXJMaXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNsZWFySXRlbXMo
KTsKKworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZd
KGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICAvLyBUaGUgc3BlYyAoc2VjdGlvbiA0LjEp
IHN0cmFuZ2VseSBkb2Vzbid0IGFsbG93IGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAgLy8g
V2UgbWlnaHQgY2hvb3NlIHRvIHZpb2xhdGUgdGhhdCBpbnRlbnRpb25hbGx5LgorICAgICAgICB3
aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAg
ICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAg
ICBpZiAoIW51bWJlcikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFwcGVu
ZChTVkdOdW1iZXI6OmNyZWF0ZSgqbnVtYmVyKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHRoaXMgY2xlYXJJdGVtcygpIG9uIGZhaWx1cmUgbGlrZSBTVkdUcmFuc2Zv
cm1MaXN0IGRvZXM/CisKKyAgICAgICAgcmV0dXJuIHBhcnNpbmdCdWZmZXIuYXRFbmQoKTsKKyAg
ICB9KTsKK30KKworU3RyaW5nIFNWR051bWJlckxpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAor
eworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZvciAoY29uc3QgYXV0byYgbnVt
YmVyIDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobnVtYmVy
LT52YWx1ZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQor
Cit9CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuaAkocmV2aXNpb24gMjYzMzM1
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsMzkgKzUwLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
VkdOdW1iZXJMaXN0KG90aGVyLCBhY2Nlc3MpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBjbGVhckl0ZW1zKCk7Ci0KLSAgICAg
ICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVk
Q2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHZhbHVlLmxlbmd0
aCgpOwotCi0gICAgICAgIC8vIFRoZSBzcGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNu
J3QgYWxsb3cgbGVhZGluZyB3aGl0ZXNwYWNlLgotICAgICAgICAvLyBXZSBtaWdodCBjaG9vc2Ug
dG8gdmlvbGF0ZSB0aGF0IGludGVudGlvbmFsbHkuCi0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQp
IHsKLSAgICAgICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAg
ICAgICAgICAgaWYgKCFudW1iZXIpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBhcHBlbmQoU1ZHTnVtYmVyOjpjcmVhdGUoKm51bWJlcikpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIHB0ciA9PSBlbmQ7Ci0gICAgfQotCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmco
KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgbnVtYmVyIDogbV9pdGVtcykgewotICAgICAgICAg
ICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
JyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobnVtYmVyLT52YWx1ZSgpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAg
IGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBj
b25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPGxp
bWl0cz4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzQyLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZsb2F0VHlwZT4gc3RhdGljIGlubAogLy8gYXQgYSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFs
bHksIHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IHJ1bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21w
bGV4aXR5LgogLy8gRklYTUU6IENhbiB0aGlzIGJlIHNoYXJlZC9yZXBsYWNlZCB3aXRoIG51bWJl
ciBwYXJzaW5nIGluIFdURj8KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBl
bmFtZSBGbG9hdFR5cGUgPSBmbG9hdD4gc3RhdGljIE9wdGlvbmFsPEZsb2F0VHlwZT4gZ2VuZXJp
Y1BhcnNlTnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5
cGUqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCA9IFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpTa2lwKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0
VHlwZSA9IGZsb2F0PiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRUeXBlPiBnZW5lcmljUGFyc2VOdW1i
ZXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgU3Vm
Zml4U2tpcHBpbmdQb2xpY3kgc2tpcCA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQogewog
ICAgIEZsb2F0VHlwZSBudW1iZXIgPSAwOwogICAgIEZsb2F0VHlwZSBpbnRlZ2VyID0gMDsKQEAg
LTUwLDI2ICs1MSwyNiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5h
CiAgICAgRmxvYXRUeXBlIGV4cG9uZW50ID0gMDsKICAgICBpbnQgc2lnbiA9IDE7CiAgICAgaW50
IGV4cHNpZ24gPSAxOwotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0YXJ0ID0gcHRyOworICAg
IGF1dG8gc3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAKICAgICAvLyByZWFkIHRo
ZSBzaWduCi0gICAgaWYgKHB0ciA8IGVuZCAmJiAqcHRyID09ICcrJykKLSAgICAgICAgcHRyKys7
Ci0gICAgZWxzZSBpZiAocHRyIDwgZW5kICYmICpwdHIgPT0gJy0nKSB7Ci0gICAgICAgIHB0cisr
OworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFy
c2luZ0J1ZmZlciA9PSAnKycpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICBlbHNlIGlm
IChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZl
ciA9PSAnLScpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgICAgICBzaWduID0gLTE7
CiAgICAgfSAKICAgICAKLSAgICBpZiAocHRyID09IGVuZCB8fCAoIWlzQVNDSUlEaWdpdCgqcHRy
KSAmJiAqcHRyICE9ICcuJykpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAoIWlz
QVNDSUlEaWdpdCgqcGFyc2luZ0J1ZmZlcikgJiYgKnBhcnNpbmdCdWZmZXIgIT0gJy4nKSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIHJlYWQgdGhlIGludGVnZXIgcGFy
dCwgYnVpbGQgcmlnaHQtdG8tbGVmdAotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHB0clN0YXJ0
SW50UGFydCA9IHB0cjsKLSAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzQVNDSUlEaWdpdCgqcHRy
KSkKLSAgICAgICAgKytwdHI7IC8vIEFkdmFuY2UgdG8gZmlyc3Qgbm9uLWRpZ2l0LgorICAgIGF1
dG8gcHRyU3RhcnRJbnRQYXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHdoaWxl
IChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQo
KnBhcnNpbmdCdWZmZXIpKQorICAgICAgICArK3BhcnNpbmdCdWZmZXI7IC8vIEFkdmFuY2UgdG8g
Zmlyc3Qgbm9uLWRpZ2l0LgogCi0gICAgaWYgKHB0ciAhPSBwdHJTdGFydEludFBhcnQpIHsKLSAg
ICAgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcHRyU2NhbkludFBhcnQgPSBwdHIgLSAxOworICAg
IGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgIT0gcHRyU3RhcnRJbnRQYXJ0KSB7CisgICAg
ICAgIGF1dG8gcHRyU2NhbkludFBhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSAxOwog
ICAgICAgICBGbG9hdFR5cGUgbXVsdGlwbGllciA9IDE7CiAgICAgICAgIHdoaWxlIChwdHJTY2Fu
SW50UGFydCA+PSBwdHJTdGFydEludFBhcnQpIHsKICAgICAgICAgICAgIGludGVnZXIgKz0gbXVs
dGlwbGllciAqIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oKihwdHJTY2FuSW50UGFydC0tKSAtICcw
Jyk7CkBAIC04MCwzOCArODEsMzkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUs
IHR5cGVuYQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBp
ZiAocHRyIDwgZW5kICYmICpwdHIgPT0gJy4nKSB7IC8vIHJlYWQgdGhlIGRlY2ltYWxzCi0gICAg
ICAgIHB0cisrOworICAgIC8vIHJlYWQgdGhlIGRlY2ltYWxzCisgICAgaWYgKHBhcnNpbmdCdWZm
ZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5nQnVmZmVyID09ICcuJykgewor
ICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0
IGJlIGEgbGVhc3Qgb25lIGRpZ2l0IGZvbGxvd2luZyB0aGUgLgotICAgICAgICBpZiAocHRyID49
IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5h
dEVuZCgpIHx8ICFpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpKQogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCi0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYg
aXNBU0NJSURpZ2l0KCpwdHIpKQotICAgICAgICAgICAgZGVjaW1hbCArPSAoKihwdHIrKykgLSAn
MCcpICogKGZyYWMgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsKKyAgICAgICAgd2hp
bGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdp
dCgqcGFyc2luZ0J1ZmZlcikpCisgICAgICAgICAgICBkZWNpbWFsICs9ICgqKHBhcnNpbmdCdWZm
ZXIrKykgLSAnMCcpICogKGZyYWMgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsKICAg
ICB9CiAKICAgICAvLyByZWFkIHRoZSBleHBvbmVudCBwYXJ0Ci0gICAgaWYgKHB0ciAhPSBzdGFy
dCAmJiBwdHIgKyAxIDwgZW5kICYmICgqcHRyID09ICdlJyB8fCAqcHRyID09ICdFJykgCi0gICAg
ICAgICYmIChwdHJbMV0gIT0gJ3gnICYmIHB0clsxXSAhPSAnbScpKSB7IAotICAgICAgICBwdHIr
KzsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpICE9IHN0YXJ0ICYmIHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKSArIDEgPCBwYXJzaW5nQnVmZmVyLmVuZCgpICYmICgqcGFyc2luZ0J1
ZmZlciA9PSAnZScgfHwgKnBhcnNpbmdCdWZmZXIgPT0gJ0UnKQorICAgICAgICAmJiAocGFyc2lu
Z0J1ZmZlclsxXSAhPSAneCcgJiYgcGFyc2luZ0J1ZmZlclsxXSAhPSAnbScpKSB7CisgICAgICAg
ICsrcGFyc2luZ0J1ZmZlcjsKIAogICAgICAgICAvLyByZWFkIHRoZSBzaWduIG9mIHRoZSBleHBv
bmVudAotICAgICAgICBpZiAoKnB0ciA9PSAnKycpCi0gICAgICAgICAgICBwdHIrKzsKLSAgICAg
ICAgZWxzZSBpZiAoKnB0ciA9PSAnLScpIHsKLSAgICAgICAgICAgIHB0cisrOworICAgICAgICBp
ZiAoKnBhcnNpbmdCdWZmZXIgPT0gJysnKQorICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVyOwor
ICAgICAgICBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAnLScpIHsKKyAgICAgICAgICAgICsr
cGFyc2luZ0J1ZmZlcjsKICAgICAgICAgICAgIGV4cHNpZ24gPSAtMTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhbiBleHBvbmVudAotICAgICAgICBpZiAo
cHRyID49IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQorICAgICAgICBpZiAocGFyc2luZ0J1
ZmZlci5hdEVuZCgpIHx8ICFpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpKQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlz
QVNDSUlEaWdpdCgqcHRyKSkgeworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkgJiYgaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkgewogICAg
ICAgICAgICAgZXhwb25lbnQgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigxMCk7Ci0gICAgICAg
ICAgICBleHBvbmVudCArPSAqcHRyIC0gJzAnOwotICAgICAgICAgICAgcHRyKys7CisgICAgICAg
ICAgICBleHBvbmVudCArPSAqcGFyc2luZ0J1ZmZlciAtICcwJzsKKyAgICAgICAgICAgICsrcGFy
c2luZ0J1ZmZlcjsKICAgICAgICAgfQogICAgICAgICAvLyBNYWtlIHN1cmUgZXhwb25lbnQgaXMg
dmFsaWQuCiAgICAgICAgIGlmICghaXNWYWxpZFJhbmdlKGV4cG9uZW50KSB8fCBleHBvbmVudCA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRUeXBlPjo6bWF4X2V4cG9uZW50KQpAQCAtMTI4LDQ0
ICsxMzAsNDQgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQogICAg
IGlmICghaXNWYWxpZFJhbmdlKG51bWJlcikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICBpZiAoc3RhcnQgPT0gcHRyKQorICAgIGlmIChzdGFydCA9PSBwYXJzaW5nQnVmZmVy
LnBvc2l0aW9uKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoc2tp
cCA9PSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyKTsKIAogICAgIHJldHVybiBudW1iZXI7CiB9CiAK
LU9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENo
YXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKK09wdGlvbmFsPGZsb2F0PiBwYXJz
ZU51bWJlcihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlciwgU3VmZml4
U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0
ciwgZW5kLCBza2lwKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHBhcnNpbmdCdWZm
ZXIsIHNraXApOwogfQogCi1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIq
JiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCitPcHRp
b25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNp
bmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7Ci0gICAgcmV0dXJuIGdlbmVy
aWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51
bWJlcihwYXJzaW5nQnVmZmVyLCBza2lwKTsKIH0KIAogT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVt
YmVyKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZywgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkK
IHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
OwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgYXV0
byByZXN1bHQgPSBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIHNraXApOwotICAgIGlmIChw
dHIgIT0gZW5kKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgW3Nr
aXBdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8ZmxvYXQ+IHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBnZW5lcmljUGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgc2tpcCk7CisgICAg
ICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9KTsKIH0KIAogLy8gb25seSB1
c2VkIHRvIHBhcnNlIGxhcmdlQXJjRmxhZyBhbmQgc3dlZXBGbGFnIHdoaWNoIG11c3QgYmUgYSAi
MCIgb3IgIjEiCiAvLyBhbmQgbWlnaHQgbm90IGhhdmUgYW55IHdoaXRlc3BhY2UvY29tbWEgYWZ0
ZXIgaXQKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxib29sPiBn
ZW5lcmljUGFyc2VBcmNGbGFnKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25h
bDxib29sPiBnZW5lcmljUGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKHB0ciA+PSBlbmQpCisgICAgaWYgKHBh
cnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IGNvbnN0IENoYXJhY3RlclR5cGUgZmxhZ0NoYXIgPSAqcHRyKys7CisgICAgY29uc3QgQ2hhcmFj
dGVyVHlwZSBmbGFnQ2hhciA9ICpwYXJzaW5nQnVmZmVyOworICAgICsrcGFyc2luZ0J1ZmZlcjsK
IAogICAgIGJvb2wgZmxhZzsKICAgICBpZiAoZmxhZ0NoYXIgPT0gJzAnKQpAQCAtMTc1LDE5ICsx
NzcsMTkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbgogICAgIGVs
c2UKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRl
bGltaXRlcihwYXJzaW5nQnVmZmVyKTsKICAgICAKICAgICByZXR1cm4gZmxhZzsKIH0KIAotT3B0
aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciog
ZW5kKQorT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENo
YXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKHB0
ciwgZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhwYXJzaW5nQnVmZmVyKTsK
IH0KIAotT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25z
dCBVQ2hhciogZW5kKQorT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdC
dWZmZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VB
cmNGbGFnKHB0ciwgZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhwYXJzaW5n
QnVmZmVyKTsKIH0KIAogT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQpAQCAtMTk1LDI1ICsx
OTcsMjMgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTgogICAgIGlm
IChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBj
b25zdCBVQ2hhciogZW5kID0gY3VyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgYXV0byB4ID0g
cGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgIGlmICgheCkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5n
LCBbXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxv
YXQ+PiB7CisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAg
ICAgICBpZiAoIXgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYg
KGN1ciA9PSBlbmQpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwgKngpOworICAg
ICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKCp4LCAqeCk7CiAKLSAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwg
U3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICBpZiAoIXkpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdC
dWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlmICgheSkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoY3VyICE9IGVuZCkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKCFwYXJzaW5nQnVmZmVy
LmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKCp4LCAqeSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigq
eCwgKnkpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZVBvaW50KGNv
bnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKQEAgLTIyMSwxMTcgKzIyMSwxMTMgQEAgT3B0aW9uYWw8
RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdAogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENo
YXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNo
YXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0g
Y3VyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMo
Y3VyLCBlbmQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBXVEY6
OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gcGFyc2luZ0J1ZmZlcikg
LT4gT3B0aW9uYWw8RmxvYXRQb2ludD4geworICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNWR1Nw
YWNlcyhwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBhdXRvIHBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1ciwgZW5kKTsKLSAgICBpZiAoIXBv
aW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHBvaW50ID0g
cGFyc2VGbG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAoIXBvaW50KQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIC8vIERpc2FsbG93IGFueXRoaW5n
IGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4KLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3Vy
LCBlbmQpOwotICAgIAotICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgLy8gRGlzYWxsb3cgYW55
dGhpbmcgZXhjZXB0IHNwYWNlcyBhdCB0aGUgZW5kLgorICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcG9pbnQ7Cisg
ICAgfSk7CiB9CiAKIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNvbnN0IFN0cmluZ1Zp
ZXcmIHN0cmluZykKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3Ro
KCk7Ci0gICAgCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKLSAgICAKLSAg
ICBhdXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7Ci0gICAgaWYgKCF4KQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsK
LSAgICBpZiAoIXkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byB3aWR0
aCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKLSAgICBpZiAoIXdpZHRoKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQs
IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Ci0gICAgaWYgKCFoZWlnaHQpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNG
b3JQYXJzaW5nKHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxGbG9h
dFJlY3Q+IHsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwor
ICAgICAgICAKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7Cisg
ICAgICAgIGlmICgheCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IGF1dG8geSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAoIXkpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHdpZHRoID0gcGFy
c2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICghd2lkdGgpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVy
KHBhcnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAg
IGlmICghaGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiBGbG9hdFJlY3QgeyAqeCwgKnksICp3aWR0aCwgKmhlaWdodCB9OworICAgICAgICByZXR1
cm4gRmxvYXRSZWN0IHsgKngsICp5LCAqd2lkdGgsICpoZWlnaHQgfTsKKyAgICB9KTsKIH0KIAog
T3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmdWaWV3
JiBzdHJpbmcpCiB7CiAgICAgLy8gRklYTUU6IFBhcnNpbmcgZXJyb3IgZGV0ZWN0aW9uIGlzIG1p
c3NpbmcuCiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0g
ICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKLQotICAgIEhhc2hTZXQ8U3RyaW5n
PiB2YWx1ZXM7Ci0KLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIC8vIExlYWRpbmcg
YW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2UgYmVmb3JlIGFuZCBhZnRl
ciBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1
dFN0YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gJywnKQot
ICAgICAgICAgICAgKytwdHI7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJz
aW5nKHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBIYXNoU2V0PFN0cmluZz4gewor
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAg
aWYgKHB0ciA9PSBpbnB1dFN0YXJ0KQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIEhhc2hT
ZXQ8U3RyaW5nPiB2YWx1ZXM7CiAKLSAgICAgICAgLy8gd2FsayBiYWNrd2FyZHMgZnJvbSB0aGUg
OyB0byBpZ25vcmUgYW55IHdoaXRlc3BhY2UKLSAgICAgICAgY29uc3QgVUNoYXIqIGlucHV0RW5k
ID0gcHRyIC0gMTsKLSAgICAgICAgd2hpbGUgKGlucHV0U3RhcnQgPCBpbnB1dEVuZCAmJiBpc1NW
R1NwYWNlKCppbnB1dEVuZCkpCi0gICAgICAgICAgICAtLWlucHV0RW5kOworICAgICAgICB3aGls
ZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAg
IC8vIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2UgYmVm
b3JlIGFuZCBhZnRlciBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCisgICAgICAgICAgICBh
dXRvIGlucHV0U3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAKLSAgICAgICAgdmFs
dWVzLmFkZChTdHJpbmcoaW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1dFN0YXJ0ICsgMSkpOwot
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCwgJywnKTsK
LSAgICB9CisgICAgICAgICAgICBza2lwVW50aWwocGFyc2luZ0J1ZmZlciwgJywnKTsKKworICAg
ICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA9PSBpbnB1dFN0YXJ0KQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9t
IHRoZSA7IHRvIGlnbm9yZSBhbnkgd2hpdGVzcGFjZQorICAgICAgICAgICAgYXV0byBpbnB1dEVu
ZCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIDE7CisgICAgICAgICAgICB3aGlsZSAoaW5w
dXRTdGFydCA8IGlucHV0RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5kKSkKKyAgICAgICAgICAg
ICAgICAtLWlucHV0RW5kOworCisgICAgICAgICAgICB2YWx1ZXMuYWRkKFN0cmluZyhpbnB1dFN0
YXJ0LCBpbnB1dEVuZCAtIGlucHV0U3RhcnQgKyAxKSk7CisgICAgICAgICAgICBza2lwT3B0aW9u
YWxTVkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyLCAnLCcpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgfSk7CiAKLSAgICByZXR1cm4gdmFsdWVzOwogfQog
Ci1zdGF0aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFVuaWNvZGVSYW5nZT4gcGFyc2VVbmljb2RlUmFu
Z2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewot
ICAgIGlmIChsZW5ndGggPCAyIHx8IGNoYXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJhY3RlcnNb
MV0gIT0gJysnKQorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVt
YWluaW5nKCk7CisgICAgaWYgKGxlbmd0aCA8IDIgfHwgcGFyc2luZ0J1ZmZlclswXSAhPSAnVScg
fHwgcGFyc2luZ0J1ZmZlclsxXSAhPSAnKycpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgCisKKyAgICBwYXJzaW5nQnVmZmVyLmFkdmFuY2VCeSgyKTsKKwogICAgIC8vIFBhcnNl
IHRoZSBzdGFydGluZyBoZXggbnVtYmVyIChvciBpdHMgcHJlZml4KS4KICAgICB1bnNpZ25lZCBz
dGFydFJhbmdlID0gMDsKICAgICB1bnNpZ25lZCBzdGFydExlbmd0aCA9IDA7CiAKLSAgICBjb25z
dCBVQ2hhciogcHRyID0gY2hhcmFjdGVycyArIDI7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGNo
YXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICBpZiAo
IWlzQVNDSUlIZXhEaWdpdCgqcHRyKSkKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKnBhcnNp
bmdCdWZmZXIpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAg
ICAgICAgIGlmIChzdGFydExlbmd0aCA+IDYpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgICAgICBzdGFydFJhbmdlID0gKHN0YXJ0UmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4
VmFsdWUoKnB0cik7Ci0gICAgICAgICsrcHRyOworICAgICAgICBzdGFydFJhbmdlID0gKHN0YXJ0
UmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnBhcnNpbmdCdWZmZXIpOworICAgICAgICAr
K3BhcnNpbmdCdWZmZXI7CiAgICAgfQogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIG9mIHJhbmdl
cyBzZXBhcmF0ZWQgYnkgIi0iIHNpZ24uCi0gICAgaWYgKDIgKyBzdGFydExlbmd0aCA8IGxlbmd0
aCAmJiAqcHRyID09ICctJykgeworICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5ndGggJiYg
KnBhcnNpbmdCdWZmZXIgPT0gJy0nKSB7CiAgICAgICAgIGlmICghc3RhcnRMZW5ndGgpCiAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgLy8gUGFyc2Ug
dGhlIGVuZGluZyBoZXggbnVtYmVyIChvciBpdHMgcHJlZml4KS4KICAgICAgICAgdW5zaWduZWQg
ZW5kUmFuZ2UgPSAwOwogICAgICAgICB1bnNpZ25lZCBlbmRMZW5ndGggPSAwOwotICAgICAgICAr
K3B0cjsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICAgICAgaWYgKCFpc0FT
Q0lJSGV4RGlnaXQoKnB0cikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgd2hp
bGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAg
ICBpZiAoIWlzQVNDSUlIZXhEaWdpdCgqcGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICArK2VuZExlbmd0aDsKICAgICAgICAgICAgIGlmIChlbmRMZW5n
dGggPiA2KQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAg
ICBlbmRSYW5nZSA9IChlbmRSYW5nZSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZSgqcHRyKTsKLSAg
ICAgICAgICAgICsrcHRyOworICAgICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkg
fCB0b0FTQ0lJSGV4VmFsdWUoKnBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgKytwYXJzaW5n
QnVmZmVyOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWVuZExlbmd0aCkKQEAg
LTM0NSwxNSArMzQxLDE1IEBAIHN0YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5p
Y28KICAgICAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2YgYSBudW1iZXIgd2l0aCBzb21lIG9w
dGlvbmFsIHRyYWlsaW5nIHF1ZXN0aW9uIG1hcmtzLgogICAgIHVuc2lnbmVkIGVuZFJhbmdlID0g
c3RhcnRSYW5nZTsKLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIGlmICgqcHRyICE9
ICc/JykKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkp
IHsKKyAgICAgICAgaWYgKCpwYXJzaW5nQnVmZmVyICE9ICc/JykKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICArK3N0YXJ0TGVuZ3RoOwogICAgICAgICBpZiAoc3RhcnRMZW5ndGggPiA2KQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgc3RhcnRSYW5nZSA8PD0g
NDsKICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCAweEY7Ci0gICAgICAgICsr
cHRyOworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgfQogICAgIAogICAgIGlmICghc3Rh
cnRMZW5ndGgpCkBAIC0zNjksNTMgKzM2NSw1MSBAQCBPcHRpb25hbDxzdGQ6OnBhaXI8VW5pY29k
ZVJhbmdlcywgSGFzaFNlCiB7CiAgICAgLy8gRklYTUU6IFBhcnNpbmcgZXJyb3IgZGV0ZWN0aW9u
IGlzIG1pc3NpbmcuCiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3Ro
KCk7Ci0KLSAgICBVbmljb2RlUmFuZ2VzIHJhbmdlTGlzdDsKLSAgICBIYXNoU2V0PFN0cmluZz4g
c3RyaW5nTGlzdDsKLQotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgY29uc3QgVUNo
YXIqIGlucHV0U3RhcnQgPSBwdHI7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAh
PSAnLCcpCi0gICAgICAgICAgICArK3B0cjsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVy
c0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IHN0ZDo6cGFpcjxV
bmljb2RlUmFuZ2VzLCBIYXNoU2V0PFN0cmluZz4+IHsKKyAgICAgICAgVW5pY29kZVJhbmdlcyBy
YW5nZUxpc3Q7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdMaXN0OwogCi0gICAgICAg
IGlmIChwdHIgPT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICB3aGls
ZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAg
IGF1dG8gaW5wdXRTdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKIAotICAgICAgICAv
LyBUcnkgdG8gcGFyc2UgdW5pY29kZSByYW5nZSBmaXJzdAotICAgICAgICBpZiAoYXV0byByYW5n
ZSA9IHBhcnNlVW5pY29kZVJhbmdlKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQpKQotICAg
ICAgICAgICAgcmFuZ2VMaXN0LmFwcGVuZChXVEZNb3ZlKCpyYW5nZSkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzdHJpbmdMaXN0LmFkZChTdHJpbmcoaW5wdXRTdGFydCwgcHRyIC0gaW5w
dXRTdGFydCkpOwotICAgICAgICArK3B0cjsKLSAgICB9CisgICAgICAgICAgICBza2lwVW50aWwo
cGFyc2luZ0J1ZmZlciwgJywnKTsKKworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKSA9PSBpbnB1dFN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAvLyBUcnkgdG8gcGFyc2UgdW5pY29kZSByYW5nZSBmaXJzdAorICAgICAgICAgICAgaWYg
KGF1dG8gcmFuZ2UgPSBwYXJzZVVuaWNvZGVSYW5nZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgaW5w
dXRTdGFydCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIH0pKQorICAgICAgICAgICAgICAgIHJh
bmdlTGlzdC5hcHBlbmQoV1RGTW92ZSgqcmFuZ2UpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBzdHJpbmdMaXN0LmFkZChTdHJpbmcoaW5wdXRTdGFydCwgcGFyc2luZ0J1ZmZl
ci5wb3NpdGlvbigpIC0gaW5wdXRTdGFydCkpOworICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVy
OworICAgICAgICB9CiAKLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmFuZ2VMaXN0LCBzdHJp
bmdMaXN0KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUocmFuZ2VMaXN0
KSwgV1RGTW92ZShzdHJpbmdMaXN0KSk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4gZ2VuZXJpY1BhcnNl
RmxvYXRQb2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVy
VHlwZSogZW5kKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRp
b25hbDxGbG9hdFBvaW50PiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KFN0cmluZ1BhcnNpbmdCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgYXV0byB4ID0gcGFyc2VO
dW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICBhdXRvIHggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVm
ZmVyKTsKICAgICBpZiAoIXgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBh
dXRvIHkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgIGF1dG8geSA9IHBhcnNlTnVt
YmVyKHBhcnNpbmdCdWZmZXIpOwogICAgIGlmICgheSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIHJldHVybiBGbG9hdFBvaW50IHsgKngsICp5IH07CiB9CiAKLU9wdGlvbmFs
PEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0
IExDaGFyKiBlbmQpCitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGdlbmVy
aWNQYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNl
RmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKIH0KIAotT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFy
c2VGbG9hdFBvaW50KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCkKK09w
dGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJzaW5nQnVmZmVyPFVD
aGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQb2lu
dChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KHBhcnNp
bmdCdWZmZXIpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxp
dGllcy5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2Vy
VXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDkgKzIxLDkgQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIHR5cGVkZWYgc3RkOjpwYWlyPFVDaGFyMzIsIFVDaGFyMzI+IFVuaWNvZGVSYW5n
ZTsKIHR5cGVkZWYgVmVjdG9yPFVuaWNvZGVSYW5nZT4gVW5pY29kZVJhbmdlczsKQEAgLTM4LDIw
ICszOCwyMCBAQCBlbnVtIGNsYXNzIFN1ZmZpeFNraXBwaW5nUG9saWN5IHsKICAgICBTa2lwCiB9
OwogCi1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgTENoYXIqJiBjdXJyZW50LCBj
b25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9s
aWN5OjpTa2lwKTsKLU9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBVQ2hhciomIGN1
cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tp
cHBpbmdQb2xpY3k6OlNraXApOworT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8TENoYXI+JiwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGlu
Z1BvbGljeTo6U2tpcCk7CitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxVQ2hhcj4mLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9s
aWN5OjpTa2lwKTsKIE9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmdWaWV3
JiwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7CiAK
IE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZU51bWJlck9wdGlvbmFsTnVt
YmVyKGNvbnN0IFN0cmluZ1ZpZXcmKTsKIAotT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNv
bnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7Ci1PcHRpb25hbDxib29sPiBw
YXJzZUFyY0ZsYWcoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kKTsKK09w
dGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOwor
T3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7
CiAKIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nVmlldyYpOwog
T3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVJlY3QoY29uc3QgU3RyaW5nVmlldyYpOwogCi1PcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBj
b25zdCBMQ2hhciogZW5kKTsKLU9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChj
b25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpOworT3B0aW9uYWw8RmxvYXRQ
b2ludD4gcGFyc2VGbG9hdFBvaW50KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CitPcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hh
cj4mKTsKIAogT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8U3RyaW5n
Pj4+IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYpOwogT3B0aW9u
YWw8SGFzaFNldDxTdHJpbmc+PiBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmdWaWV3Jik7CkBA
IC02NCwxMyArNjQsMjMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3Rl
eAogICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0g
J1xyJzsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJv
b2wgaXNTVkdTcGFjZU9yQ29tbWEoQ2hhcmFjdGVyVHlwZSBjKQoreworICAgIHJldHVybiBpc1NW
R1NwYWNlKGMpIHx8ICcsJzsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Y29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNvbnN0IENoYXJhY3RlclR5cGUq
JiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKLSAgICB3aGlsZSAocHRyIDwgZW5k
ICYmIGlzU1ZHU3BhY2UoKnB0cikpCi0gICAgICAgIHB0cisrOworICAgIHNraXBXaGlsZTxDaGFy
YWN0ZXJUeXBlLCBpc1NWR1NwYWNlPihwdHIsIGVuZCk7CiAgICAgcmV0dXJuIHB0ciA8IGVuZDsK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGNo
YXJhY3RlcnMpCit7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzU1ZHU3BhY2U+KGNo
YXJhY3RlcnMpOworICAgIHJldHVybiBjaGFyYWN0ZXJzLmhhc0NoYXJhY3RlcnNSZW1haW5pbmco
KTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0
ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjaGFyIGRlbGltaXRlciA9ICcsJykKIHsKICAg
ICBpZiAocHRyIDwgZW5kICYmICFpc1NWR1NwYWNlKCpwdHIpICYmICpwdHIgIT0gZGVsaW1pdGVy
KQpAQCAtODQsMjggKzk0LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNv
bnN0ZXgKICAgICByZXR1cm4gcHRyIDwgZW5kOwogfQogCi1jb25zdGV4cHIgYm9vbCBza2lwU3Ry
aW5nKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhciogbmFt
ZSwgaW50IGxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhw
ciBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKFN0cmluZ1BhcnNpbmdCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4mIGNoYXJhY3RlcnMsIGNoYXIgZGVsaW1pdGVyID0gJywnKQogewot
ICAgIGlmIChlbmQgLSBwdHIgPCBsZW5ndGgpCisgICAgaWYgKGNoYXJhY3RlcnMuaGFzQ2hhcmFj
dGVyc1JlbWFpbmluZygpICYmICFpc1NWR1NwYWNlKCpjaGFyYWN0ZXJzKSAmJiAqY2hhcmFjdGVy
cyAhPSBkZWxpbWl0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobWVtY21wKG5h
bWUsIHB0ciwgc2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBwdHIgKz0gbGVuZ3RoOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx1bnNp
Z25lZCBjaGFyYWN0ZXJDb3VudD4KLWlubGluZSBib29sIHNraXBTdHJpbmcoY29uc3QgVUNoYXIq
JiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgKCZzdHIpW2NoYXJhY3RlckNvdW50
XSkKLXsKLSAgICBpbnQgbGVuZ3RoID0gY2hhcmFjdGVyQ291bnQgLSAxOwotICAgIGlmIChlbmQg
LSBwdHIgPCBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChwdHJbaV0gIT0gc3RyW2ldKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChza2lwT3B0aW9uYWxTVkdTcGFjZXMoY2hh
cmFjdGVycykpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpICYmICpjaGFyYWN0ZXJzID09IGRlbGltaXRlcikgeworICAgICAgICAgICAgY2hhcmFjdGVy
cysrOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNoYXJhY3RlcnMpOworICAg
ICAgICB9CiAgICAgfQotICAgIHB0ciArPSBsZW5ndGg7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHJldmlz
aW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5LDExICsxOSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKIAogY2xhc3MgU1ZHUGF0aFNvdXJjZSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHUGF0aFNvdXJjZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAko
cmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3Vy
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIgogCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zMiwzMyArMzEsMzAgQEAgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6U1ZHUGF0aFN0
cmluZ1NvdXJjZQogewogICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7CiAKLSAgICBpZiAo
bV9pczhCaXRTb3VyY2UpIHsKLSAgICAgICAgbV9jdXJyZW50Lm1fY2hhcmFjdGVyOCA9IHN0cmlu
Zy5jaGFyYWN0ZXJzOCgpOwotICAgICAgICBtX2VuZC5tX2NoYXJhY3RlcjggPSBtX2N1cnJlbnQu
bV9jaGFyYWN0ZXI4ICsgc3RyaW5nLmxlbmd0aCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1f
Y3VycmVudC5tX2NoYXJhY3RlcjE2ID0gc3RyaW5nLmNoYXJhY3RlcnMxNigpOwotICAgICAgICBt
X2VuZC5tX2NoYXJhY3RlcjE2ID0gbV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYgKyBzdHJpbmcubGVu
Z3RoKCk7Ci0gICAgfQorICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKKyAgICAgICAgbV9wYXJzaW5n
QnVmZmVyOCA9IHsgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9OworICAg
IGVsc2UKKyAgICAgICAgbV9wYXJzaW5nQnVmZmVyMTYgPSB7IHN0cmluZy5jaGFyYWN0ZXJzMTYo
KSwgc3RyaW5nLmxlbmd0aCgpIH07CiB9CiAKIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6aGFz
TW9yZURhdGEoKSBjb25zdAogewogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0
dXJuIG1fY3VycmVudC5tX2NoYXJhY3RlcjggPCBtX2VuZC5tX2NoYXJhY3Rlcjg7Ci0gICAgcmV0
dXJuIG1fY3VycmVudC5tX2NoYXJhY3RlcjE2IDwgbV9lbmQubV9jaGFyYWN0ZXIxNjsKKyAgICAg
ICAgcmV0dXJuIG1fcGFyc2luZ0J1ZmZlcjguaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpOworICAg
IHJldHVybiBtX3BhcnNpbmdCdWZmZXIxNi5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCk7CiB9CiAK
IGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bW92ZVRvTmV4dFRva2VuKCkKIHsKICAgICBpZiAo
bV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBza2lwT3B0aW9uYWxTVkdTcGFjZXMobV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJh
Y3RlcjE2KTsKKyAgICAgICAgcmV0dXJuIHNraXBPcHRpb25hbFNWR1NwYWNlcyhtX3BhcnNpbmdC
dWZmZXI4KTsKKyAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1fcGFyc2luZ0J1ZmZl
cjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRp
b25hbDxTVkdQYXRoU2VnVHlwZT4gbmV4dENvbW1hbmRIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIGN1cnJlbnQsIFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IG5l
eHRDb21tYW5kSGVscGVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNp
bmdCdWZmZXIsIFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkKIHsKICAgICAvLyBDaGVj
ayBmb3IgcmVtYWluaW5nIGNvb3JkaW5hdGVzIGluIHRoZSBjdXJyZW50IGNvbW1hbmQuCi0gICAg
aWYgKCgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0nIHx8ICpjdXJyZW50ID09ICcu
JyB8fCBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQpKQorICAgIGlmICgoKnBhcnNpbmdCdWZmZXIgPT0g
JysnIHx8ICpwYXJzaW5nQnVmZmVyID09ICctJyB8fCAqcGFyc2luZ0J1ZmZlciA9PSAnLicgfHwg
aXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgJiYgcHJldmlvdXNDb21tYW5k
ICE9IFBhdGhTZWdDbG9zZVBhdGgpIHsKICAgICAgICAgaWYgKHByZXZpb3VzQ29tbWFuZCA9PSBQ
YXRoU2VnTW92ZVRvQWJzKQogICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9BYnM7CkBA
IC03MywxNTAgKzY5LDEzOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3Rh
dGljCiBTVkdQYXRoU2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29tbWFuZChTVkdQ
YXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpCiB7CiAgICAgaWYgKG1faXM4Qml0U291cmNlKSB7
Ci0gICAgICAgIGlmIChhdXRvIG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyOCwgcHJldmlvdXNDb21tYW5kKSkKKyAgICAgICAgaWYgKGF1dG8gbmV4
dENvbW1hbmQgPSBuZXh0Q29tbWFuZEhlbHBlcihtX3BhcnNpbmdCdWZmZXI4LCBwcmV2aW91c0Nv
bW1hbmQpKQogICAgICAgICAgICAgcmV0dXJuICpuZXh0Q29tbWFuZDsKICAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fY3VycmVu
dC5tX2NoYXJhY3RlcjE2LCBwcmV2aW91c0NvbW1hbmQpKQorICAgICAgICBpZiAoYXV0byBuZXh0
Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fcGFyc2luZ0J1ZmZlcjE2LCBwcmV2aW91c0Nv
bW1hbmQpKQogICAgICAgICAgICAgcmV0dXJuICpuZXh0Q29tbWFuZDsKICAgICB9CiAKICAgICBy
ZXR1cm4gKnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyBTVkdQYXRoU2VnVHlwZSBwYXJzZVNWR1NlZ21lbnRUeXBlSGVs
cGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50KQordGVtcGxhdGU8dHlwZW5hbWUgRj4g
ZGVjbHR5cGUoYXV0bykgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2UoRiYmIGZ1bmN0b3IpCiB7
Ci0gICAgc3dpdGNoICgqKGN1cnJlbnQrKykpIHsKLSAgICBjYXNlICdaJzoKLSAgICBjYXNlICd6
JzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDbG9zZVBhdGg7Ci0gICAgY2FzZSAnTSc6Ci0gICAg
ICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOwotICAgIGNhc2UgJ20nOgotICAgICAgICByZXR1
cm4gUGF0aFNlZ01vdmVUb1JlbDsKLSAgICBjYXNlICdMJzoKLSAgICAgICAgcmV0dXJuIFBhdGhT
ZWdMaW5lVG9BYnM7Ci0gICAgY2FzZSAnbCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRv
UmVsOwotICAgIGNhc2UgJ0MnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY0Fi
czsKLSAgICBjYXNlICdjJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw7
Ci0gICAgY2FzZSAnUSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0Fi
czsKLSAgICBjYXNlICdxJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGlj
UmVsOwotICAgIGNhc2UgJ0EnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0FyY0FiczsKLSAgICBj
YXNlICdhJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNSZWw7Ci0gICAgY2FzZSAnSCc6Ci0g
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFiczsKLSAgICBjYXNlICdoJzoK
LSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOwotICAgIGNhc2UgJ1Yn
OgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOwotICAgIGNhc2UgJ3Yn
OgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsUmVsOwotICAgIGNhc2UgJ1Mn
OgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFiczsKLSAgICBjYXNl
ICdzJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWw7Ci0gICAg
Y2FzZSAnVCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFi
czsKLSAgICBjYXNlICd0JzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGlj
U21vb3RoUmVsOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnVW5rbm93bjsK
LSAgICB9CisgICAgaWYgKG1faXM4Qml0U291cmNlKQorICAgICAgICByZXR1cm4gZnVuY3Rvciht
X3BhcnNpbmdCdWZmZXI4KTsKKyAgICByZXR1cm4gZnVuY3RvcihtX3BhcnNpbmdCdWZmZXIxNik7
CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJz
ZVNWR1NlZ21lbnRUeXBlKCkKIHsKLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJl
dHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgpOwot
ICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjE2KTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gU1ZHUGF0
aFNlZ1R5cGUgeworICAgICAgICBhdXRvIGNoYXJhY3RlciA9ICpwYXJzaW5nQnVmZmVyOworICAg
ICAgICBwYXJzaW5nQnVmZmVyKys7CisgICAgICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7CisgICAg
ICAgIGNhc2UgJ1onOgorICAgICAgICBjYXNlICd6JzoKKyAgICAgICAgICAgIHJldHVybiBQYXRo
U2VnQ2xvc2VQYXRoOworICAgICAgICBjYXNlICdNJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRo
U2VnTW92ZVRvQWJzOworICAgICAgICBjYXNlICdtJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRo
U2VnTW92ZVRvUmVsOworICAgICAgICBjYXNlICdMJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRo
U2VnTGluZVRvQWJzOworICAgICAgICBjYXNlICdsJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRo
U2VnTGluZVRvUmVsOworICAgICAgICBjYXNlICdDJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRo
U2VnQ3VydmVUb0N1YmljQWJzOworICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgIHJldHVy
biBQYXRoU2VnQ3VydmVUb0N1YmljUmVsOworICAgICAgICBjYXNlICdRJzoKKyAgICAgICAgICAg
IHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKKyAgICAgICAgY2FzZSAncSc6Cisg
ICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7CisgICAgICAgIGNh
c2UgJ0EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNBYnM7CisgICAgICAgIGNhc2Ug
J2EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNSZWw7CisgICAgICAgIGNhc2UgJ0gn
OgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOworICAgICAg
ICBjYXNlICdoJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJl
bDsKKyAgICAgICAgY2FzZSAnVic6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1Zl
cnRpY2FsQWJzOworICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2Vn
TGluZVRvVmVydGljYWxSZWw7CisgICAgICAgIGNhc2UgJ1MnOgorICAgICAgICAgICAgcmV0dXJu
IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnM7CisgICAgICAgIGNhc2UgJ3MnOgorICAgICAg
ICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWw7CisgICAgICAgIGNhc2Ug
J1QnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJz
OworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1
YWRyYXRpY1Ntb290aFJlbDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBQ
YXRoU2VnVW5rbm93bjsKKyAgICAgICAgfQorICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRo
U291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1Nl
Z21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNv
bnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4gewotICAgICAgICBhdXRv
IHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJu
IHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+
IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVm
ZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICBNb3ZlVG9TZWdtZW50IHNlZ21lbnQ7CiAgICAg
ICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7CiAgICAgICAg
IHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAg
ICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0
ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5t
X2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGlu
ZVRvU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KCkKIHsK
LSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBl
bmQpIC0+IE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB0YXJnZXRQb2lu
dCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShbXShh
dXRvJiBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiB7CisgICAgICAg
IGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAgICAg
ICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgICAgICAKICAgICAgICAgTGluZVRvU2VnbWVudCBzZWdtZW50OwogICAgICAgICBzZWdtZW50
LnRhcmdldFBvaW50ID0gV1RGTW92ZSgqdGFyZ2V0UG9pbnQpOwogICAgICAgICByZXR1cm4gc2Vn
bWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4g
aGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAg
cmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIx
Nik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250
YWxTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdt
ZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25z
dCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxTZWdtZW50PiB7Ci0gICAg
ICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNl
KFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxTZWdt
ZW50PiB7CisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOwogICAg
ICAgICBpZiAoIXgpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAK
ICAgICAgICAgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQgc2VnbWVudDsKICAgICAgICAgc2VnbWVu
dC54ID0gKng7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9p
czhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8
U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNl
OjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShj
b25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9W
ZXJ0aWNhbFNlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3VycmVudCwg
ZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9u
YWw8TGluZVRvVmVydGljYWxTZWdtZW50PiB7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVy
KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXkpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvVmVydGljYWxTZWdtZW50IHNlZ21l
bnQ7CiAgICAgICAgIHNlZ21lbnQueSA9ICp5OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAg
ICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhl
bHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAg
fSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ21lbnQ+IFNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCiB7Ci0gICAgYXV0
byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBP
cHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8gcG9pbnQxID0gcGFy
c2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBh
cnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHsKKyAgICAgICAg
YXV0byBwb2ludDEgPSBwYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlm
ICghcG9pbnQxKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBh
dXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRv
IHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFw
b2ludDIpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8g
dGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0
byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAg
aWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAg
LTIyNSwyMSArMjA5LDE3IEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Nl
Z20KICAgICAgICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOwogICAgICAgICBzZWdtZW50LnRh
cmdldFBvaW50ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9
OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBl
cihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7
CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+
IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7
Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byog
ZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiB7Ci0gICAgICAgIGF1
dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBh
cnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290
aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byBwb2ludDIgPSBwYXJzZUZsb2F0UG9pbnQocGFyc2lu
Z0J1ZmZlcik7CiAgICAgICAgIGlmICghcG9pbnQyKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1
cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQo
cGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCkBAIC0yNDcsMjEgKzIyNywxNyBAQCBPcHRpb25hbDxTVkdQ
YXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vCiAgICAgICAgIHNlZ21lbnQucG9pbnQyID0gKnBv
aW50MjsKICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKICAgICAg
ICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAg
ICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJh
Y3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5k
Lm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpD
dXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRv
UXVhZHJhdGljU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYg
Y3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudD4gewotICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBl
bmQpOworICAgIHJldHVybiBwYXJzZShbXShhdXRvJiBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25h
bDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNl
RmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFwb2ludDEpCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBw
YXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9
IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2lu
dCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAgLTI2OSw0OSArMjQ1LDQx
IEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWMKICAgICAgICAgc2Vn
bWVudC5wb2ludDEgPSAqcG9pbnQxOwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRh
cmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1f
aXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFs
PFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBh
dXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+
IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8g
dGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4g
cGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRp
Y1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQ
b2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290
aFNlZ21lbnQgc2VnbWVudDsKICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQ
b2ludDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmIChtX2lzOEJp
dFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBt
X2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQ
YXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9T
ZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBj
b25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gewotICAgICAgICBhdXRv
IHJ4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0
byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8QXJjVG9TZWdtZW50PiB7CisgICAgICAgIGF1
dG8gcnggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFyeCkKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1dG8gcnkgPSBwYXJzZU51
bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHJ5ID0gcGFyc2VOdW1iZXIocGFyc2lu
Z0J1ZmZlcik7CiAgICAgICAgIGlmICghcnkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgICAgICBhdXRvIGFuZ2xlID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAg
ICAgICAgYXV0byBhbmdsZSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBp
ZiAoIWFuZ2xlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0
byBsYXJnZUFyYyA9IHBhcnNlQXJjRmxhZyhjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIGxh
cmdlQXJjID0gcGFyc2VBcmNGbGFnKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIWxhcmdl
QXJjKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byBzd2Vl
cCA9IHBhcnNlQXJjRmxhZyhjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHN3ZWVwID0gcGFy
c2VBcmNGbGFnKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXN3ZWVwKQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNl
RmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFy
c2VGbG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXRhcmdldFBvaW50KQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMzIzLDExICsyOTEsNyBAQCBP
cHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWCiAgICAgICAgIHNlZ21lbnQu
c3dlZXAgPSAqc3dlZXA7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9p
bnQ7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRT
b3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9l
bmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHJl
dmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiU1ZHUGF0aFNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdC
dWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDUsMTcgKzQ2LDE1IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8Q3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQoKSBmaW5hbDsKICAgICBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50
KCkgZmluYWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGPiBkZWNsdHlwZShhdXRvKSBwYXJz
ZShGJiYpOworCiAgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIGJvb2wgbV9pczhCaXRTb3VyY2U7
CiAKICAgICB1bmlvbiB7Ci0gICAgICAgIGNvbnN0IExDaGFyKiBtX2NoYXJhY3Rlcjg7Ci0gICAg
ICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3RlcjE2OwotICAgIH0gbV9jdXJyZW50OwotICAgIHVu
aW9uIHsKLSAgICAgICAgY29uc3QgTENoYXIqIG1fY2hhcmFjdGVyODsKLSAgICAgICAgY29uc3Qg
VUNoYXIqIG1fY2hhcmFjdGVyMTY7Ci0gICAgfSBtX2VuZDsKKyAgICAgICAgU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxMQ2hhcj4gbV9wYXJzaW5nQnVmZmVyODsKKyAgICAgICAgU3RyaW5nUGFyc2luZ0J1
ZmZlcjxVQ2hhcj4gbV9wYXJzaW5nQnVmZmVyMTY7CisgICAgfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZHUG9pbnRMaXN0OjpwYXJzZShjb25zdCBTdHJpbmcm
IHZhbHVlKQoreworICAgIGNsZWFySXRlbXMoKTsKKworICAgIHJldHVybiBXVEY6OnJlYWRDaGFy
YWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisKKyAgICAgICAgYm9vbCBk
ZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7CisK
KyAgICAgICAgICAgIGF1dG8geFBvcyA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAg
ICAgICAgICAgaWYgKCF4UG9zKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICgheVBvcykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhwYXJzaW5nQnVmZmVyKTsKKworICAgICAgICAgICAgaWYgKHNraXBFeGFjdGx5KHBhcnNpbmdC
dWZmZXIsICcsJykpCisgICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOworCisgICAg
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisKKyAgICAgICAg
ICAgIGFwcGVuZChTVkdQb2ludDo6Y3JlYXRlKHsgKnhQb3MsICp5UG9zIH0pKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVhckl0ZW1zKCkgb24gZmFpbHVy
ZSBsaWtlIFNWR1RyYW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAgICByZXR1cm4gIWRlbGltUGFy
c2VkOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHUG9pbnRMaXN0Ojp2YWx1ZUFzU3RyaW5nKCkg
Y29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIHBvaW50IDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKKyAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
cG9pbnQtPngoKSwgJyAnLCBwb2ludC0+eSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRl
ci50b1N0cmluZygpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5oCShy
ZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDU1ICs1MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU1ZHUG9pbnRMaXN0KG90aGVyLCBhY2Nlc3MpKTsKICAgICB9CiAKLSAgICBi
b29sIHBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBjbGVhckl0ZW1z
KCk7Ci0KLSAgICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZh
bHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIGN1ciA9
IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciAr
IHZhbHVlLmxlbmd0aCgpOwotCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVu
ZCk7Ci0KLSAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICB3aGlsZSAo
Y3VyIDwgZW5kKSB7Ci0gICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOwotCi0gICAgICAg
ICAgICBhdXRvIHhQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAgICAgICAgICBpZiAo
IXhQb3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBhdXRv
IHlQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKLSAgICAgICAgICAgIGlmICgheVBvcykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAg
ICAgICAgICAgIGlmIChjdXIgPCBlbmQgJiYgKmN1ciA9PSAnLCcpIHsKLSAgICAgICAgICAgICAg
ICBkZWxpbVBhcnNlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY3VyKys7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwotCi0gICAg
ICAgICAgICBhcHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7ICp4UG9zLCAqeVBvcyB9KSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gIWRlbGltUGFyc2VkOwotICAgIH0KLQotICAgIFN0cmlu
ZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBvaW50IDogbV9pdGVt
cykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocG9pbnQt
PngoKSwgJyAnLCBwb2ludC0+eSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1
ZSk7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDcgKzM3LDcgQEAgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZQogewogfQogCi1TVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShjb25zdCBTdHJp
bmcmIHZhbHVlKQorU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCiB7CiAgICAgcGFyc2UodmFsdWUp
OwogfQpAQCAtNTksMTkgKzYwLDMwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8KICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlOjpwYXJzZShjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSkKIHsKLSAgICBhdXRv
IHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9IHVwY29udmVydGVkQ2hhcmFjdGVy
czsKLSAgICBwYXJzZUludGVybmFsKGJlZ2luLCBiZWdpbiArIHZhbHVlLmxlbmd0aCgpLCB0cnVl
KTsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShh
dXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlSW50ZXJuYWwocGFyc2lu
Z0J1ZmZlciwgdHJ1ZSk7CisgICAgfSk7CiB9CiAKLWJvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlOjpwYXJzZShjb25zdCBVQ2hhciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwg
Ym9vbCB2YWxpZGF0ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShT
dHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkK
IHsKLSAgICByZXR1cm4gcGFyc2VJbnRlcm5hbChjdXJyUGFyYW0sIGVuZCwgdmFsaWRhdGUpOwor
ICAgIHJldHVybiBwYXJzZUludGVybmFsKHBhcnNpbmdCdWZmZXIsIHZhbGlkYXRlKTsKIH0KIAot
Ym9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwoY29uc3QgVUNo
YXIqJiBjdXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCitib29sIFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hh
cj4mIHBhcnNpbmdCdWZmZXIsIGJvb2wgdmFsaWRhdGUpCit7CisgICAgcmV0dXJuIHBhcnNlSW50
ZXJuYWwocGFyc2luZ0J1ZmZlciwgdmFsaWRhdGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBkZWZlckRlc2NbXSA9ICB7J2Qn
LCAnZScsICdmJywgJ2UnLCAncid9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Y29uc3RleHByIENoYXJhY3RlclR5cGUgbm9uZURlc2NbXSA9ICB7J24nLCAnbycsICduJywgJ2Un
fTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJU
eXBlIG1lZXREZXNjW10gPSAgeydtJywgJ2UnLCAnZScsICd0J307Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBzbGljZURlc2NbXSA9ICB7
J3MnLCAnbCcsICdpJywgJ2MnLCAnZSd9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgorYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxp
ZGF0ZSkKIHsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBhbGlnbiA9IFNWR19QUkVT
RVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOwogICAgIFNWR01lZXRPclNsaWNlVHlwZSBtZWV0T3JT
bGljZSA9IFNWR19NRUVUT1JTTElDRV9NRUVUOwpAQCAtNzksMTAwICs5MSwxMDAgQEAgYm9vbCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSQogICAgIG1fYWxpZ24gPSBhbGlnbjsK
ICAgICBtX21lZXRPclNsaWNlID0gbWVldE9yU2xpY2U7CiAKLSAgICBpZiAoIXNraXBPcHRpb25h
bFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCkpCisgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFj
ZXMocGFyc2luZ0J1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICgqY3Vy
clBhcmFtID09ICdkJykgewotICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQs
ICJkZWZlciIpKSB7CisgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdkJykgeworICAgICAgICBp
ZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBkZWZlckRlc2M8Q2hhcmFj
dGVyVHlwZT4pKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8gcGFyc2UgZXhj
ZXB0IGZvciAqZGVmZXIqIHZhbHVlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IFdlIGp1c3QgaWdub3JlIHRoZSAiZGVmZXIiIGhl
cmUuCi0gICAgICAgIGlmIChjdXJyUGFyYW0gPT0gZW5kKQorICAgICAgICBpZiAocGFyc2luZ0J1
ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKCFz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpKQorICAgICAgICBpZiAoIXNraXBP
cHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBpZiAoKmN1cnJQYXJhbSA9PSAnbicpIHsKLSAgICAgICAgaWYgKCFz
a2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAibm9uZSIpKSB7CisgICAgaWYgKCpwYXJzaW5nQnVm
ZmVyID09ICduJykgeworICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5n
QnVmZmVyLCBub25lRGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgIExPR19FUlJP
UigiU2tpcHBlZCB0byBwYXJzZSBleGNlcHQgZm9yICpub25lKiB2YWx1ZS4iKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX05PTkU7Ci0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFy
YW0sIGVuZCk7Ci0gICAgfSBlbHNlIGlmICgqY3VyclBhcmFtID09ICd4JykgewotICAgICAgICBp
ZiAoKGVuZCAtIGN1cnJQYXJhbSkgPCA4KQorICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
cGFyc2luZ0J1ZmZlcik7CisgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAneCcpIHsK
KyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPCA4KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoY3VyclBhcmFtWzFdICE9ICdNJyB8fCBj
dXJyUGFyYW1bNF0gIT0gJ1knIHx8IGN1cnJQYXJhbVs1XSAhPSAnTScpCisgICAgICAgIGlmIChw
YXJzaW5nQnVmZmVyWzFdICE9ICdNJyB8fCBwYXJzaW5nQnVmZmVyWzRdICE9ICdZJyB8fCBwYXJz
aW5nQnVmZmVyWzVdICE9ICdNJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKGN1cnJQYXJhbVsyXSA9PSAnaScpIHsKLSAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bM10g
PT0gJ24nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAnaScpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAgIGlmIChw
YXJzaW5nQnVmZmVyWzJdID09ICdpJykgeworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJb
M10gPT0gJ24nKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbNl0gPT0gJ2kn
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzddID09ICduJykKICAg
ICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1J
TllNSU47Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJhbVs3XSA9PSAnZCcp
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbN10gPT0gJ2QnKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19Y
TUlOWU1JRDsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzZd
ID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnYScgJiYgcGFyc2luZ0J1ZmZlcls3XSA9PSAneCcpCiAg
ICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllN
QVg7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bM10gPT0gJ2QnKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAnaScpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNp
bmdCdWZmZXJbM10gPT0gJ2QnKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJb
Nl0gPT0gJ2knKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzddID09
ICduJykKICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNU
UkFUSU9fWE1JRFlNSU47Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJhbVs3
XSA9PSAnZCcpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbN10g
PT0gJ2QnKQogICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BF
Q1RSQVRJT19YTUlEWU1JRDsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Vy
clBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnYScgJiYgcGFyc2luZ0J1ZmZlcls3XSA9
PSAneCcpCiAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFU
SU9fWE1JRFlNQVg7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzJdID09ICdhJyAmJiBjdXJyUGFy
YW1bM10gPT0gJ3gnKSB7Ci0gICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdpJykgewot
ICAgICAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bN10gPT0gJ24nKQorICAgICAgICB9IGVsc2Ug
aWYgKHBhcnNpbmdCdWZmZXJbMl0gPT0gJ2EnICYmIHBhcnNpbmdCdWZmZXJbM10gPT0gJ3gnKSB7
CisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnaScpIHsKKyAgICAgICAgICAg
ICAgICBpZiAocGFyc2luZ0J1ZmZlcls3XSA9PSAnbicpCiAgICAgICAgICAgICAgICAgICAgIGFs
aWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU47Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoY3VyclBhcmFtWzddID09ICdkJykKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChw
YXJzaW5nQnVmZmVyWzddID09ICdkJykKICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdf
UFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRDsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Vy
clBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAgICAgfSBl
bHNlIGlmIChwYXJzaW5nQnVmZmVyWzZdID09ICdhJyAmJiBwYXJzaW5nQnVmZmVyWzddID09ICd4
JykKICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZ
TUFYOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGN1cnJQYXJh
bSArPSA4OwotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpOwor
ICAgICAgICBwYXJzaW5nQnVmZmVyLmFkdmFuY2VCeSg4KTsKKyAgICAgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoY3VyclBhcmFtIDwgZW5kKSB7Ci0gICAgICAgIGlmICgqY3VyclBhcmFt
ID09ICdtJykgewotICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAi
bWVldCIpKSB7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygp
KSB7CisgICAgICAgIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAnbScpIHsKKyAgICAgICAgICAgIGlm
ICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIG1lZXREZXNjPENoYXJhY3Rl
clR5cGU+KSkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJzZSBl
eGNlcHQgZm9yICptZWV0KiBvciAqc2xpY2UqIHZhbHVlLiIpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlcyhjdXJyUGFyYW0sIGVuZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJQYXJhbSA9PSAn
cycpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgInNsaWNl
IikpIHsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsK
KyAgICAgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAncycpIHsKKyAgICAgICAgICAg
IGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHNsaWNlRGVzYzxDaGFy
YWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8gcGFy
c2UgZXhjZXB0IGZvciAqbWVldCogb3IgKnNsaWNlKiB2YWx1ZS4iKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICAgICAgaWYgKGFsaWduICE9IFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX05PTkUpCiAgICAgICAgICAgICAgICAgbWVldE9yU2xpY2UgPSBTVkdfTUVF
VE9SU0xJQ0VfU0xJQ0U7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZW5kICE9IGN1cnJQ
YXJhbSAmJiB2YWxpZGF0ZSkKKyAgICBpZiAoIXBhcnNpbmdCdWZmZXIuYXRFbmQoKSAmJiB2YWxp
ZGF0ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9hbGlnbiA9IGFsaWduOwpAQCAt
MzI4LDUyICszNDAsNDQgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YQogCiBTdHJpbmcgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjp2YWx1ZUFzU3RyaW5nKCkg
Y29uc3QKIHsKLSAgICBTdHJpbmcgYWxpZ25UeXBlOworICAgIGF1dG8gYWxpZ25UeXBlID0gWyZd
KCkgeworICAgICAgICBzd2l0Y2ggKG1fYWxpZ24pIHsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VS
VkVBU1BFQ1RSQVRJT19OT05FOgorICAgICAgICAgICAgcmV0dXJuICJub25lIjsKKyAgICAgICAg
Y2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JTjoKKyAgICAgICAgICAgIHJldHVy
biAieE1pbllNaW4iOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZ
TUlOOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1pbiI7CisgICAgICAgIGNhc2UgU1ZHX1BS
RVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU46CisgICAgICAgICAgICByZXR1cm4gInhNYXhZTWlu
IjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JRDoKKyAgICAg
ICAgICAgIHJldHVybiAieE1pbllNaWQiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVD
VFJBVElPX1hNSURZTUlEOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1pZCI7CisgICAgICAg
IGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSUQ6CisgICAgICAgICAgICByZXR1
cm4gInhNYXhZTWlkIjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlO
WU1BWDoKKyAgICAgICAgICAgIHJldHVybiAieE1pbllNYXgiOworICAgICAgICBjYXNlIFNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUFYOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1h
eCI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNQVg6CisgICAg
ICAgICAgICByZXR1cm4gInhNYXhZTWF4IjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BF
Q1RSQVRJT19VTktOT1dOOgorICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKKyAgICAgICAg
fTsKIAotICAgIHN3aXRjaCAobV9hbGlnbikgewotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNU
UkFUSU9fTk9ORToKLSAgICAgICAgYWxpZ25UeXBlID0gIm5vbmUiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlOOgotICAgICAgICBhbGln
blR5cGUgPSAieE1pbllNaW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1hNSURZTUlOOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNaW4iOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlO
OgotICAgICAgICBhbGlnblR5cGUgPSAieE1heFlNaW4iOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlEOgotICAgICAgICBhbGlnblR5cGUg
PSAieE1pbllNaWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVD
VFJBVElPX1hNSURZTUlEOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNaWQiOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlEOgotICAg
ICAgICBhbGlnblR5cGUgPSAieE1heFlNaWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNW
R19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUFYOgotICAgICAgICBhbGlnblR5cGUgPSAieE1p
bllNYXgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElP
X1hNSURZTUFYOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNYXgiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUFYOgotICAgICAgICBh
bGlnblR5cGUgPSAieE1heFlNYXgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVT
RVJWRUFTUEVDVFJBVElPX1VOS05PV046Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ1bmtub3duIjsK
LSAgICAgICAgYnJlYWs7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gInVua25vd24iOwogICAgIH07CiAKICAgICBzd2l0Y2ggKG1fbWVldE9yU2xpY2UpIHsK
ICAgICBkZWZhdWx0OgogICAgIGNhc2UgU1ZHX01FRVRPUlNMSUNFX1VOS05PV046Ci0gICAgICAg
IHJldHVybiBhbGlnblR5cGU7CisgICAgICAgIHJldHVybiBhbGlnblR5cGUoKTsKICAgICBjYXNl
IFNWR19NRUVUT1JTTElDRV9NRUVUOgotICAgICAgICByZXR1cm4gYWxpZ25UeXBlICsgIiBtZWV0
IjsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYWxpZ25UeXBlKCksICIgbWVldCIpOwogICAg
IGNhc2UgU1ZHX01FRVRPUlNMSUNFX1NMSUNFOgotICAgICAgICByZXR1cm4gYWxpZ25UeXBlICsg
IiBzbGljZSI7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGFsaWduVHlwZSgpLCAiIHNsaWNl
Iik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZS5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDcgKzUyLDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWUoKTsKLSAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nJik7
CisgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0cmluZ1ZpZXcmKTsKIAog
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEFsaWduKHVuc2lnbmVkIHNob3J0KTsKICAgICB1bnNp
Z25lZCBzaG9ydCBhbGlnbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ247IH0KQEAgLTY0LDggKzY0
LDkgQEAgcHVibGljOgogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShmbG9hdCBsb2dpY2Fs
WCwgZmxvYXQgbG9naWNhbFksIGZsb2F0IGxvZ2ljYWxXaWR0aCwgZmxvYXQgbG9naWNhbEhlaWdo
dCwgZmxvYXQgcGh5c2ljYWxXaWR0aCwgZmxvYXQgcGh5c2ljYWxIZWlnaHQpIGNvbnN0OwogCi0g
ICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHBhcnNlKGNvbnN0IFVDaGFy
KiYgY3VyclBhcmFtLCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKTsKKyAgICBib29s
IHBhcnNlKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBib29sIHBhcnNlKFN0cmluZ1BhcnNpbmdC
dWZmZXI8TENoYXI+JiwgYm9vbCB2YWxpZGF0ZSk7CisgICAgYm9vbCBwYXJzZShTdHJpbmdQYXJz
aW5nQnVmZmVyPFVDaGFyPiYsIGJvb2wgdmFsaWRhdGUpOwogCiAgICAgU3RyaW5nIHZhbHVlQXNT
dHJpbmcoKSBjb25zdDsKIApAQCAtNzMsNyArNzQsOCBAQCBwcml2YXRlOgogICAgIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9UeXBlIG1fYWxpZ247CiAgICAgU1ZHTWVldE9yU2xpY2VUeXBlIG1fbWVl
dE9yU2xpY2U7CiAKLSAgICBib29sIHBhcnNlSW50ZXJuYWwoY29uc3QgVUNoYXIqJiBjdXJyUGFy
YW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+CisgICAgYm9vbCBwYXJzZUludGVybmFsKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4mLCBib29sIHZhbGlkYXRlKTsKIH07CiAKIHRlbXBsYXRlPD4g
c3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gewpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
VkdTdHJpbmdMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgU1ZHU3RyaW5nTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiBkYXRhLCBV
Q2hhciBkZWxpbWl0ZXIpCit7CisgICAgY2xlYXJJdGVtcygpOworCisgICAgYXV0byBpc1NWR1Nw
YWNlT3JEZWxpbWl0ZXIgPSBbZGVsaW1pdGVyXShhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIGlz
U1ZHU3BhY2UoYykgfHwgYyA9PSBkZWxpbWl0ZXI7CisgICAgfTsKKworICAgIHJldHVybiBXVEY6
OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhkYXRhLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7
CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkg
eworICAgICAgICAgICAgYXV0byBzdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGEgbmljZSBpbXBy
b3ZlbWVudCB0byBhZGQgYSB2YXJpYW50IG9mIHNraXBVbnRpbCB3aGljaCB3b3JrZWQKKyAgICAg
ICAgICAgIC8vIHdpdGggbGFtYmRhIHByZWRpY2F0ZXMuCisgICAgICAgICAgICB3aGlsZSAocGFy
c2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgIWlzU1ZHU3BhY2VPckRlbGlt
aXRlcigqcGFyc2luZ0J1ZmZlcikpCisgICAgICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVyOwor
CisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09IHN0YXJ0KQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5nKHN0
YXJ0LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBzdGFydCkpOworICAgICAgICAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlciwgZGVsaW1pdGVyKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVhckl0ZW1zKCkg
b24gZmFpbHVyZSBsaWtlIFNWR1RyYW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAgICByZXR1cm4g
cGFyc2luZ0J1ZmZlci5hdEVuZCgpOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHU3RyaW5nTGlz
dDo6dmFsdWVBc1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwor
CisgICAgZm9yIChjb25zdCBhdXRvJiBzdHJpbmcgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChi
dWlsZGVyLmxlbmd0aCgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAg
ICAgICBidWlsZGVyLmFwcGVuZChzdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVy
LnRvU3RyaW5nKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuaAko
cmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNTEsMzkgKzUxLDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9p
dGVtcy5hcHBlbmQoZW1wdHlTdHJpbmcoKSk7CiAgICAgfQogCi0gICAgYm9vbCBwYXJzZShjb25z
dCBTdHJpbmcmIGRhdGEsIFVDaGFyIGRlbGltaXRlcikKLSAgICB7Ci0gICAgICAgIGNsZWFySXRl
bXMoKTsKLQotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXco
ZGF0YSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBwdHIg
PSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIg
KyBkYXRhLmxlbmd0aCgpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgICAg
ICBjb25zdCBVQ2hhciogc3RhcnQgPSBwdHI7Ci0gICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5k
ICYmICpwdHIgIT0gZGVsaW1pdGVyICYmICFpc1NWR1NwYWNlKCpwdHIpKQotICAgICAgICAgICAg
ICAgIHB0cisrOwotICAgICAgICAgICAgaWYgKHB0ciA9PSBzdGFydCkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIG1faXRlbXMuYXBwZW5kKFN0cmluZyhzdGFydCwgcHRyIC0g
c3RhcnQpKTsKLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0
ciwgZW5kLCBkZWxpbWl0ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHB0ciA9PSBl
bmQ7Ci0gICAgfQotCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotCi0gICAgICAgIGZvciAoY29u
c3QgYXV0byYgc3RyaW5nIDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVu
Z3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoc3RyaW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBi
dWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiBk
YXRhLCBVQ2hhciBkZWxpbWl0ZXIpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qg
b3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdUcmFu
c2Zvcm1MaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0V4Y2VwdGlvbk9yPFJlZlB0cjxTVkdUcmFuc2Zvcm0+PiBTVkdUcmFuc2Zvcm1MaXN0
Ojpjb25zb2xpZGF0ZSgpCit7CisgICAgYXV0byByZXN1bHQgPSBjYW5BbHRlckxpc3QoKTsKKyAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKTsKKyAgICBBU1NFUlQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
KworICAgIC8vIFNwZWM6IElmIHRoZSBsaXN0IHdhcyBlbXB0eSwgdGhlbiBhIHZhbHVlIG9mIG51
bGwgaXMgcmV0dXJuZWQuCisgICAgaWYgKG1faXRlbXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGlmIChtX2l0ZW1zLnNpemUoKSA9PSAxKQorICAgICAgICByZXR1
cm4gbWFrZVJlZlB0cihhdCgwKS5nZXQoKSk7CisKKyAgICBhdXRvIG5ld0l0ZW0gPSBTVkdUcmFu
c2Zvcm06OmNyZWF0ZShjb25jYXRlbmF0ZSgpKTsKKyAgICBjbGVhckl0ZW1zKCk7CisKKyAgICBh
dXRvIGl0ZW0gPSBhcHBlbmQoV1RGTW92ZShuZXdJdGVtKSk7CisgICAgY29tbWl0Q2hhbmdlKCk7
CisgICAgcmV0dXJuIG1ha2VSZWZQdHIoaXRlbS5nZXQoKSk7Cit9CisKK0FmZmluZVRyYW5zZm9y
bSBTVkdUcmFuc2Zvcm1MaXN0Ojpjb25jYXRlbmF0ZSgpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJh
bnNmb3JtIHJlc3VsdDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zZm9ybSA6IG1faXRlbXMp
CisgICAgICAgIHJlc3VsdCAqPSB0cmFuc2Zvcm0tPm1hdHJpeCgpLT52YWx1ZSgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wg
U1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2VHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFj
dGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNl
OworICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgewor
ICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXMocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIAorICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9y
bVR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUocGFyc2luZ0J1ZmZl
cik7CisgICAgICAgIGlmICghcGFyc2VkVHJhbnNmb3JtVHlwZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9ybVZhbHVlID0gU1ZHVHJhbnNm
b3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSgqcGFyc2VkVHJhbnNmb3JtVHlwZSwgcGFyc2lu
Z0J1ZmZlcik7CisgICAgICAgIGlmICghcGFyc2VkVHJhbnNmb3JtVmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXBwZW5kKFNWR1RyYW5zZm9ybTo6Y3JlYXRlKCpw
YXJzZWRUcmFuc2Zvcm1WYWx1ZSkpOworCisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhw
YXJzaW5nQnVmZmVyKTsKKworICAgICAgICBpZiAoc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwg
JywnKSkKKyAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKKworICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgfQorICAgIHJldHVybiAhZGVsaW1Q
YXJzZWQ7Cit9CisKK3ZvaWQgU1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3sKKyAgICBjbGVhckl0ZW1zKCk7CisKKyAgICBib29sIHBhcnNpbmdTdWNjZWVkZWQg
PSBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1
ZmZlcikgeworICAgICAgICByZXR1cm4gcGFyc2VHZW5lcmljKHBhcnNpbmdCdWZmZXIpOworICAg
IH0pOworICAgIAorICAgIGlmICghcGFyc2luZ1N1Y2NlZWRlZCkKKyAgICAgICAgY2xlYXJJdGVt
cygpOworfQorCitib29sIFNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKFN0cmluZ1BhcnNpbmdCdWZm
ZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZUdlbmVyaWMocGFy
c2luZ0J1ZmZlcik7Cit9CisKK2Jvb2wgU1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNlR2Vu
ZXJpYyhwYXJzaW5nQnVmZmVyKTsKK30KKworU3RyaW5nIFNWR1RyYW5zZm9ybUxpc3Q6OnZhbHVl
QXNTdHJpbmcoKSBjb25zdAoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIHRyYW5zZnJvbSA6IG1faXRlbXMpIHsKKyAgICAgICAgaWYgKGJ1aWxkZXIu
bGVuZ3RoKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworCisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHRyYW5zZnJvbS0+dmFsdWUoKS52YWx1ZUFzU3RyaW5nKCkpOworICAgIH0K
KyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit9CisKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsODYgKzU2
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN2Z1RyYW5zZm9ybTsKICAgICB9CiAKLSAg
ICBFeGNlcHRpb25PcjxSZWZQdHI8U1ZHVHJhbnNmb3JtPj4gY29uc29saWRhdGUoKQotICAgIHsK
LSAgICAgICAgYXV0byByZXN1bHQgPSBjYW5BbHRlckxpc3QoKTsKLSAgICAgICAgaWYgKHJlc3Vs
dC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2Vw
dGlvbigpOwotICAgICAgICBBU1NFUlQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLQot
ICAgICAgICAvLyBTcGVjOiBJZiB0aGUgbGlzdCB3YXMgZW1wdHksIHRoZW4gYSB2YWx1ZSBvZiBu
dWxsIGlzIHJldHVybmVkLgotICAgICAgICBpZiAobV9pdGVtcy5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpZiAobV9pdGVtcy5zaXplKCkgPT0gMSkK
LSAgICAgICAgICAgIHJldHVybiBtYWtlUmVmUHRyKGF0KDApLmdldCgpKTsKLQotICAgICAgICBh
dXRvIG5ld0l0ZW0gPSBTVkdUcmFuc2Zvcm06OmNyZWF0ZShjb25jYXRlbmF0ZSgpKTsKLSAgICAg
ICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gaXRlbSA9IGFwcGVuZChXVEZNb3ZlKG5l
d0l0ZW0pKTsKLSAgICAgICAgY29tbWl0Q2hhbmdlKCk7Ci0gICAgICAgIHJldHVybiBtYWtlUmVm
UHRyKGl0ZW0uZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgcGFyc2UoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQotICAgICAgICBhdXRvIHVwY29u
dmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7
Ci0gICAgICAgIGlmICghcGFyc2Uoc3RhcnQsIHN0YXJ0ICsgdmFsdWUubGVuZ3RoKCkpKQotICAg
ICAgICAgICAgY2xlYXJJdGVtcygpOwotICAgIH0KLQotICAgIEFmZmluZVRyYW5zZm9ybSBjb25j
YXRlbmF0ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gcmVzdWx0Owot
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zZm9ybSA6IG1faXRlbXMpCi0gICAgICAgICAg
ICByZXN1bHQgKj0gdHJhbnNmb3JtLT5tYXRyaXgoKS0+dmFsdWUoKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIGZvciAo
Y29uc3QgYXV0byYgdHJhbnNmcm9tIDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxk
ZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQodHJhbnNmcm9tLT52YWx1ZSgpLnZhbHVlQXNTdHJpbmco
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9
CisgICAgRXhjZXB0aW9uT3I8UmVmUHRyPFNWR1RyYW5zZm9ybT4+IGNvbnNvbGlkYXRlKCk7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIGNvbmNhdGVuYXRlKCkgY29uc3Q7CisgICAgdm9pZCBwYXJzZShj
b25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRl
OwogCiBwcml2YXRlOgotICAgIGJvb2wgcGFyc2UoY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3Qg
VUNoYXIqIGVuZCkKLSAgICB7Ci0gICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAg
ICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0gICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZh
bHNlOwotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIHR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJz
ZUFuZFNraXBUeXBlKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYgKCF0eXBlKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgYXV0byBwYXJzZWRUcmFuc2Zv
cm1WYWx1ZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoKnR5cGUsIHN0
YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGFwcGVuZChTVkdUcmFuc2Zv
cm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKLQotICAgICAgICAgICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYgKHN0YXJ0IDwgZW5k
ICYmICpzdGFydCA9PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgKytzdGFydDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiAhZGVsaW1QYXJzZWQ7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGJvb2wgcGFyc2VHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4mKTsKKyAgICBib29sIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CisgICAg
Ym9vbCBwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNw
cAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4NSArMjcsODYgQEAKICNpbmNsdWRlICJTVkdF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGls
aXRpZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0
IFVDaGFyKiBlbmQsIGZsb2F0KiB2YWx1ZXMsIGludCByZXF1aXJlZCwgaW50IG9wdGlvbmFsKQor
U1ZHVHJhbnNmb3JtYWJsZTo6flNWR1RyYW5zZm9ybWFibGUoKSA9IGRlZmF1bHQ7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJh
bUxpc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwg
ZmxvYXQqIHZhbHVlcywgaW50IHJlcXVpcmVkLCBpbnQgb3B0aW9uYWwpCiB7CiAgICAgaW50IG9w
dGlvbmFsUGFyYW1zID0gMCwgcmVxdWlyZWRQYXJhbXMgPSAwOwogICAgIAotICAgIGlmICghc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKSB8fCAqcHRyICE9ICcoJykKKyAgICBpZiAoIXNr
aXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAn
KCcpCiAgICAgICAgIHJldHVybiAtMTsKICAgICAKLSAgICBwdHIrKzsKKyAgICArK3BhcnNpbmdC
dWZmZXI7CiAgICAKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOworICAgIHNr
aXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKIAogICAgIHdoaWxlIChyZXF1aXJl
ZFBhcmFtcyA8IHJlcXVpcmVkKSB7Ci0gICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICBp
ZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAg
ICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGlu
Z1BvbGljeTo6RG9udFNraXApOworICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVt
YmVyKHBhcnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CiAgICAg
ICAgIGlmICghcGFyc2VkTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB2
YWx1ZXNbcmVxdWlyZWRQYXJhbXNdID0gKnBhcnNlZE51bWJlcjsKICAgICAgICAgcmVxdWlyZWRQ
YXJhbXMrKzsKICAgICAgICAgaWYgKHJlcXVpcmVkUGFyYW1zIDwgcmVxdWlyZWQpCi0gICAgICAg
ICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgICAg
ICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyKTsKICAg
ICB9Ci0gICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpKQorICAgIGlmICgh
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpKQogICAgICAgICByZXR1cm4gLTE7
CiAgICAgCi0gICAgYm9vbCBkZWxpbVBhcnNlZCA9IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVs
aW1pdGVyKHB0ciwgZW5kKTsKKyAgICBib29sIGRlbGltUGFyc2VkID0gc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBpZiAocHRyID49IGVuZCkK
KyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAg
Ci0gICAgaWYgKCpwdHIgPT0gJyknKSB7IC8vIHNraXAgb3B0aW9uYWxzCi0gICAgICAgIHB0cisr
OworICAgIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAnKScpIHsKKyAgICAgICAgLy8gc2tpcCBvcHRp
b25hbHMKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgICAgICBpZiAoZGVsaW1QYXJzZWQp
CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgd2hpbGUgKG9w
dGlvbmFsUGFyYW1zIDwgb3B0aW9uYWwpIHsKLSAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQor
ICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gLTE7Ci0gICAgICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0
ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICAgICAgYXV0
byBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGlu
Z1BvbGljeTo6RG9udFNraXApOwogICAgICAgICAgICAgaWYgKCFwYXJzZWROdW1iZXIpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgdmFsdWVzW3JlcXVpcmVkUGFyYW1z
ICsgb3B0aW9uYWxQYXJhbXNdID0gKnBhcnNlZE51bWJlcjsKICAgICAgICAgICAgIG9wdGlvbmFs
UGFyYW1zKys7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxQYXJhbXMgPCBvcHRpb25hbCkKLSAg
ICAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7
CisgICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2lu
Z0J1ZmZlcik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKHB0ciwgZW5kKSkKKyAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMo
cGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIAotICAgICAg
ICBkZWxpbVBhcnNlZCA9IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5k
KTsKKyAgICAgICAgZGVsaW1QYXJzZWQgPSBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRl
cihwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgCi0gICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICpw
dHIgIT0gJyknIHx8IGRlbGltUGFyc2VkKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVu
ZCgpIHx8ICpwYXJzaW5nQnVmZmVyICE9ICcpJyB8fCBkZWxpbVBhcnNlZCkKICAgICAgICAgICAg
IHJldHVybiAtMTsKLSAgICAgICAgcHRyKys7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKICAg
ICB9CiAKICAgICByZXR1cm4gcmVxdWlyZWRQYXJhbXMgKyBvcHRpb25hbFBhcmFtczsKIH0KIAog
Ly8gVGhlc2Ugc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIGVudW0gU1ZHVHJhbnNmb3JtVHlw
ZQotc3RhdGljIGNvbnN0IGludCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbXSA9ICB7MCwgNiwgMSwg
MSwgMSwgMSwgMX07Ci1zdGF0aWMgY29uc3QgaW50IG9wdGlvbmFsVmFsdWVzRm9yVHlwZVtdID0g
IHswLCAwLCAxLCAxLCAyLCAwLCAwfTsKK2NvbnN0ZXhwciBpbnQgcmVxdWlyZWRWYWx1ZXNGb3JU
eXBlW10gPSAgezAsIDYsIDEsIDEsIDEsIDEsIDF9OworY29uc3RleHByIGludCBvcHRpb25hbFZh
bHVlc0ZvclR5cGVbXSA9ICB7MCwgMCwgMSwgMSwgMiwgMCwgMH07CiAKLS8vIFRoaXMgZGVzdHJ1
Y3RvciBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbGluayBjb3JyZWN0bHkgd2l0aCBJbnRlbCBJQ0Mu
Ci1TVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpID0gZGVmYXVsdDsKLQotT3B0
aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3Jt
VmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgVUNo
YXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFs
dWVHZW5lcmljKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIFN0cmlu
Z1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7CiAgICAgaWYg
KHR5cGUgPT0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGludCB2YWx1ZUNvdW50ID0gMDsKICAgICBm
bG9hdCB2YWx1ZXNbXSA9IHswLCAwLCAwLCAwLCAwLCAwfTsKLSAgICBpZiAoKHZhbHVlQ291bnQg
PSBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChwdHIsIGVuZCwgdmFsdWVzLCByZXF1aXJlZFZhbHVl
c0ZvclR5cGVbdHlwZV0sIG9wdGlvbmFsVmFsdWVzRm9yVHlwZVt0eXBlXSkpIDwgMCkKKyAgICBp
ZiAoKHZhbHVlQ291bnQgPSBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChwYXJzaW5nQnVmZmVyLCB2
YWx1ZXMsIHJlcXVpcmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JUeXBl
W3R5cGVdKSkgPCAwKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgU1ZHVHJh
bnNmb3JtVmFsdWUgdHJhbnNmb3JtOwpAQCAtMTQ1LDQyICsxNDYsNjMgQEAgT3B0aW9uYWw8U1ZH
VHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybQogICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAK
LXN0YXRpYyBjb25zdCBVQ2hhciBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAn
WCd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHNrZXdZRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAn
dycsICdZJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgc2NhbGVEZXNjW10gPSAgeydzJywgJ2MnLCAn
YScsICdsJywgJ2UnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB0cmFuc2xhdGVEZXNjW10gPSAgeyd0
JywgJ3InLCAnYScsICduJywgJ3MnLCAnbCcsICdhJywgJ3QnLCAnZSd9Owotc3RhdGljIGNvbnN0
IFVDaGFyIHJvdGF0ZURlc2NbXSA9ICB7J3InLCAnbycsICd0JywgJ2EnLCAndCcsICdlJ307Ci1z
dGF0aWMgY29uc3QgVUNoYXIgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3QnLCAncicsICdp
JywgJ3gnfTsKK09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm1hYmxlOjpw
YXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5
cGUsIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJl
dHVybiBwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyh0eXBlLCBwYXJzaW5nQnVmZmVyKTsKK30K
KworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJh
bnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIHBh
cnNlVHJhbnNmb3JtVmFsdWVHZW5lcmljKHR5cGUsIHBhcnNpbmdCdWZmZXIpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBza2V3
WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9OwordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgc2tld1lEZXNjW10gPSAgeydz
JywgJ2snLCAnZScsICd3JywgJ1knfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHNjYWxlRGVzY1tdID0gIHsncycsICdjJywgJ2EnLCAn
bCcsICdlJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hh
cmFjdGVyVHlwZSB0cmFuc2xhdGVEZXNjW10gPSAgeyd0JywgJ3InLCAnYScsICduJywgJ3MnLCAn
bCcsICdhJywgJ3QnLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29u
c3RleHByIENoYXJhY3RlclR5cGUgcm90YXRlRGVzY1tdID0gIHsncicsICdvJywgJ3QnLCAnYScs
ICd0JywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBD
aGFyYWN0ZXJUeXBlIG1hdHJpeERlc2NbXSA9ICB7J20nLCAnYScsICd0JywgJ3InLCAnaScsICd4
J307CiAKLU9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdU
cmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9y
bSwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0
YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VU
cmFuc2Zvcm1UeXBlR2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBw
YXJzaW5nQnVmZmVyKQogewotICAgIGlmIChjdXJyVHJhbnNmb3JtID49IGVuZCkKKyAgICBpZiAo
cGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgaWYgKCpjdXJyVHJhbnNmb3JtID09ICdzJykgewotICAgICAgICBpZiAoc2tpcFN0cmluZyhj
dXJyVHJhbnNmb3JtLCBlbmQsIHNrZXdYRGVzYywgV1RGX0FSUkFZX0xFTkdUSChza2V3WERlc2Mp
KSkKKyAgICBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ3MnKSB7CisgICAgICAgIGlmIChza2lwQ2hh
cmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgc2tld1hEZXNjPENoYXJhY3RlclR5cGU+KSkK
ICAgICAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TS0VX
WDsKLSAgICAgICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHNrZXdZ
RGVzYywgV1RGX0FSUkFZX0xFTkdUSChza2V3WURlc2MpKSkKKyAgICAgICAgaWYgKHNraXBDaGFy
YWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBza2V3WURlc2M8Q2hhcmFjdGVyVHlwZT4pKQog
ICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdZ
OwotICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2NhbGVE
ZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNjYWxlRGVzYykpKQorICAgICAgICBpZiAoc2tpcENoYXJh
Y3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHNjYWxlRGVzYzxDaGFyYWN0ZXJUeXBlPikpCiAg
ICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0NBTEU7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfSBl
bHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgdHJhbnNsYXRlRGVzYywgV1RG
X0FSUkFZX0xFTkdUSCh0cmFuc2xhdGVEZXNjKSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgfQorCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVy
LCB0cmFuc2xhdGVEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURTsKLSAgICBlbHNlIGlmIChza2lwU3Ry
aW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgcm90YXRlRGVzYywgV1RGX0FSUkFZX0xFTkdUSChyb3Rh
dGVEZXNjKSkpCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBy
b3RhdGVEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKLSAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJU
cmFuc2Zvcm0sIGVuZCwgbWF0cml4RGVzYywgV1RGX0FSUkFZX0xFTkdUSChtYXRyaXhEZXNjKSkp
CisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBtYXRyaXhEZXNj
PENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdf
VFJBTlNGT1JNX01BVFJJWDsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLVNWR1Ry
YW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJh
bnNmb3JtVHlwZShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCitPcHRpb25hbDxTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zv
cm1UeXBlKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKK3sKKyAgICByZXR1cm4gV1RGOjpyZWFk
Q2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAg
ICAgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVHlwZShwYXJzaW5nQnVmZmVyKTsKKyAgICB9KTsK
K30KKworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IFNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFy
PiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlR2VuZXJp
YyhwYXJzaW5nQnVmZmVyKTsKK30KKworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1Ry
YW5zZm9ybVR5cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShTdHJpbmdQ
YXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodHlwZVN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3Rl
cnM7Ci0gICAgcmV0dXJuIHBhcnNlQW5kU2tpcFR5cGUoY2hhcmFjdGVycywgY2hhcmFjdGVycyAr
IHR5cGVTdHJpbmcubGVuZ3RoKCkpLnZhbHVlT3IoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFO
U0ZPUk1fVU5LTk9XTik7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMocGFy
c2luZ0J1ZmZlcik7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zv
cm1hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFi
bGUuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9y
bWFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSAiU1ZH
TG9jYXRhYmxlLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtVmFsdWUuaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIApAQCAtMzIs
OSArMzEsMTIgQEAgY2xhc3MgU1ZHVHJhbnNmb3JtYWJsZSA6IHB1YmxpYyBTVkdMb2NhdAogcHVi
bGljOgogICAgIHZpcnR1YWwgflNWR1RyYW5zZm9ybWFibGUoKTsKIAotICAgIHN0YXRpYyBPcHRp
b25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1W
YWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBl
bmQpOwotICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBwYXJz
ZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFNWR1Ry
YW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVD
aGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgc3RhdGljIE9wdGlv
bmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworICAg
IHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgU3RyaW5nUGFyc2luZ0J1ZmZlcjxV
Q2hhcj4mKTsKKworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJh
bnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBz
dGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IHBhcnNl
VHJhbnNmb3JtVHlwZShTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBP
cHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zv
cm1UeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiAKICAgICBBZmZpbmVUcmFuc2Zv
cm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOyB9CiAgICAg
dmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0ID0g
MDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkocmV2aXNpb24gMjYzMzM1KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUg
IlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlLmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTYwLDk5ICs2MSw5MCBAQCB2b2lkIFNWR1ZpZXdTcGVjOjpyZXNldCgpCiAgICAg
U1ZHWm9vbUFuZFBhbjo6cmVzZXQoKTsKIH0KIAotc3RhdGljIGNvbnN0IFVDaGFyIHN2Z1ZpZXdT
cGVjW10gPSB7J3MnLCAndicsICdnJywgJ1YnLCAnaScsICdlJywgJ3cnfTsKLXN0YXRpYyBjb25z
dCBVQ2hhciB2aWV3Qm94U3BlY1tdID0geyd2JywgJ2knLCAnZScsICd3JywgJ0InLCAnbycsICd4
J307Ci1zdGF0aWMgY29uc3QgVUNoYXIgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWNbXSA9IHsncCcs
ICdyJywgJ2UnLCAncycsICdlJywgJ3InLCAndicsICdlJywgJ0EnLCAncycsICdwJywgJ2UnLCAn
YycsICd0JywgJ1InLCAnYScsICd0JywgJ2knLCAnbyd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHRy
YW5zZm9ybVNwZWNbXSA9IHsndCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2YnLCAnbycsICdyJywg
J20nfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB6b29tQW5kUGFuU3BlY1tdID0geyd6JywgJ28nLCAn
bycsICdtJywgJ0EnLCAnbicsICdkJywgJ1AnLCAnYScsICduJ307Ci1zdGF0aWMgY29uc3QgVUNo
YXIgdmlld1RhcmdldFNwZWNbXSA9ICB7J3YnLCAnaScsICdlJywgJ3cnLCAnVCcsICdhJywgJ3In
LCAnZycsICdlJywgJ3QnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0
ZXhwciBDaGFyYWN0ZXJUeXBlIHN2Z1ZpZXdTcGVjW10gPSB7J3MnLCAndicsICdnJywgJ1YnLCAn
aScsICdlJywgJ3cnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhw
ciBDaGFyYWN0ZXJUeXBlIHZpZXdCb3hTcGVjW10gPSB7J3YnLCAnaScsICdlJywgJ3cnLCAnQics
ICdvJywgJ3gnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBD
aGFyYWN0ZXJUeXBlIHByZXNlcnZlQXNwZWN0UmF0aW9TcGVjW10gPSB7J3AnLCAncicsICdlJywg
J3MnLCAnZScsICdyJywgJ3YnLCAnZScsICdBJywgJ3MnLCAncCcsICdlJywgJ2MnLCAndCcsICdS
JywgJ2EnLCAndCcsICdpJywgJ28nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHRyYW5zZm9ybVNwZWNbXSA9IHsndCcsICdyJywgJ2En
LCAnbicsICdzJywgJ2YnLCAnbycsICdyJywgJ20nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHpvb21BbmRQYW5TcGVjW10gPSB7J3on
LCAnbycsICdvJywgJ20nLCAnQScsICduJywgJ2QnLCAnUCcsICdhJywgJ24nfTsKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHZpZXdUYXJn
ZXRTcGVjW10gPSAgeyd2JywgJ2knLCAnZScsICd3JywgJ1QnLCAnYScsICdyJywgJ2cnLCAnZScs
ICd0J307CiAKLWJvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nJiB2
aWV3U3BlYykKK2Jvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nVmll
dyYgc3RyaW5nKQogewotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmll
dyh2aWV3U3BlYykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1
cnJWaWV3U3BlYyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5k
ID0gY3VyclZpZXdTcGVjICsgdmlld1NwZWMubGVuZ3RoKCk7Ci0KLSAgICBpZiAoY3VyclZpZXdT
cGVjID49IGVuZCB8fCAhbV9jb250ZXh0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKCFza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCBzdmdWaWV3U3BlYywgV1RG
X0FSUkFZX0xFTkdUSChzdmdWaWV3U3BlYykpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGN1cnJWaWV3U3BlYysrOwotCi0gICAgd2hpbGUgKGN1cnJW
aWV3U3BlYyA8IGVuZCAmJiAqY3VyclZpZXdTcGVjICE9ICcpJykgewotICAgICAgICBpZiAoKmN1
cnJWaWV3U3BlYyA9PSAndicpIHsKLSAgICAgICAgICAgIGlmIChza2lwU3RyaW5nKGN1cnJWaWV3
U3BlYywgZW5kLCB2aWV3Qm94U3BlYywgV1RGX0FSUkFZX0xFTkdUSCh2aWV3Qm94U3BlYykpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3Bl
YyAhPSAnKCcpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBhdXRvIHZpZXdCb3ggPSBTVkdG
aXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjdXJyVmlld1NwZWMsIGVuZCwgZmFsc2UpOwotICAg
ICAgICAgICAgICAgIGlmICghdmlld0JveCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIHNldFZpZXdCb3goV1RGTW92ZSgqdmlld0JveCkpOwotICAg
ICAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0g
JyknKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
Y3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclZp
ZXdTcGVjLCBlbmQsIHZpZXdUYXJnZXRTcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHZpZXdUYXJnZXRT
cGVjKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3Vy
clZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiB2aWV3VGFyZ2V0U3RhcnQgPSArK2N1cnJWaWV3U3Bl
YzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoY3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJyVmll
d1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAg
ICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCkKKyAgICByZXR1cm4gV1RGOjpyZWFk
Q2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBi
b29sIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKHBh
cnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBlOworCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVy
LmF0RW5kKCkgfHwgIW1fY29udGV4dEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgc3Zn
Vmlld1NwZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJygnKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0
ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgIT0gJyknKSB7CisgICAgICAgICAgICBp
ZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ3YnKSB7CisgICAgICAgICAgICAgICAgaWYgKHNraXBDaGFy
YWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCB2aWV3Qm94U3BlYzxDaGFyYWN0ZXJUeXBlPikp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAn
KCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICBhdXRvIHZpZXdCb3ggPSBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChwYXJz
aW5nQnVmZmVyLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdmlld0JveCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0Vmlld0JveChXVEZNb3ZlKCp2aWV3Qm94KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
c2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJyknKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBDaGFyYWN0ZXJz
RXhhY3RseShwYXJzaW5nQnVmZmVyLCB2aWV3VGFyZ2V0U3BlYzxDaGFyYWN0ZXJUeXBlPikpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKCcp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBhdXRvIHZpZXdUYXJnZXRTdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZmZXIsICcpJyk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1fdmlld1RhcmdldFN0
cmluZyA9IFN0cmluZyh2aWV3VGFyZ2V0U3RhcnQsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAt
IHZpZXdUYXJnZXRTdGFydCk7CisgICAgICAgICAgICAgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAneicpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCB6b29t
QW5kUGFuU3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICco
JykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBh
dXRvIHpvb21BbmRQYW4gPSBTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4ocGFyc2luZ0J1
ZmZlcik7CisgICAgICAgICAgICAgICAgaWYgKCF6b29tQW5kUGFuKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgc2V0Wm9vbUFuZFBhbigqem9vbUFu
ZFBhbik7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAn
KScpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdwJykgeworICAgICAgICAgICAgICAgIGlmICghc2tp
cENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHByZXNlcnZlQXNwZWN0UmF0aW9TcGVj
PENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJygnKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgICAgICAgICAgICAgIGlm
ICghcHJlc2VydmVBc3BlY3RSYXRpby5wYXJzZShwYXJzaW5nQnVmZmVyLCBmYWxzZSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBzZXRQcmVzZXJ2
ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgICAgICAgICAgICAgIGlmICgh
c2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJyknKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAndCcp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVm
ZmVyLCB0cmFuc2Zvcm1TcGVjPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1
ZmZlciwgJygnKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIG1fdHJhbnNmb3JtLT5wYXJzZShwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcpJykpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBtX3ZpZXdUYXJnZXRTdHJpbmcgPSBT
dHJpbmcodmlld1RhcmdldFN0YXJ0LCBjdXJyVmlld1NwZWMgLSB2aWV3VGFyZ2V0U3RhcnQpOwot
ICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwogICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKCpjdXJyVmlld1Nw
ZWMgPT0gJ3onKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBl
bmQsIHpvb21BbmRQYW5TcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHpvb21BbmRQYW5TcGVjKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3Bl
YyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICBpZiAoIVNW
R1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbihjdXJyVmlld1NwZWMsIGVuZCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBl
bmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJW
aWV3U3BlYyA9PSAncCcpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1Nw
ZWMsIGVuZCwgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWMsIFdURl9BUlJBWV9MRU5HVEgocHJlc2Vy
dmVBc3BlY3RSYXRpb1NwZWMpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMr
KzsKLSAgICAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2ZUFzcGVj
dFJhdGlvOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKGN1cnJW
aWV3U3BlYywgZW5kLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgc2V0UHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKLSAg
ICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJykn
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3Bl
YysrOwotICAgICAgICB9IGVsc2UgaWYgKCpjdXJyVmlld1NwZWMgPT0gJ3QnKSB7Ci0gICAgICAg
ICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHRyYW5zZm9ybVNwZWMsIFdU
Rl9BUlJBWV9MRU5HVEgodHJhbnNmb3JtU3BlYykpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1Nw
ZWMgIT0gJygnKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1
cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgbV90cmFuc2Zvcm0tPnBhcnNlKGN1cnJWaWV3U3Bl
YywgZW5kKTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmll
d1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGN1cnJWaWV3U3BlYysrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBpZiAoY3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJyVmlld1NwZWMgPT0g
JzsnKQotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgfQotICAgIAotICAgIGlmIChj
dXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnOycpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAqcGFyc2lu
Z0J1ZmZlciAhPSAnKScpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdWaWV3U3BlYy5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVmlld1NwZWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1ZpZXdTcGVjKGNvbnRleHRFbGVtZW50
KSk7CiAgICAgfQogCi0gICAgYm9vbCBwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZyYpOworICAg
IGJvb2wgcGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmdWaWV3Jik7CiAgICAgdm9pZCByZXNldCgp
OwogICAgIHZvaWQgcmVzZXRDb250ZXh0RWxlbWVudCgpIHsgbV9jb250ZXh0RWxlbWVudCA9IG51
bGxwdHI7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcAkocmV2aXNp
b24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiwyNSArMjIsMzAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTVkdab29tQW5kUGFuLmgiCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZU51bWJlcnMuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNWR1pvb21BbmRQ
YW46OnBhcnNlWm9vbUFuZFBhbihjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5k
KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5
cGUgZGlzYWJsZVtdID0geyAnZCcsICdpJywgJ3MnLCAnYScsICdiJywgJ2wnLCAnZScgfTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG1h
Z25pZnlbXSA9IHsgJ20nLCAnYScsICdnJywgJ24nLCAnaScsICdmJywgJ3knIH07CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdab29tQW5kUGFu
VHlwZT4gcGFyc2Vab29tQW5kUGFuR2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaXNhYmxl
W10gPSB7ICdkJywgJ2knLCAncycsICdhJywgJ2InLCAnbCcsICdlJyB9OwotICAgIGlmIChza2lw
U3RyaW5nKHN0YXJ0LCBlbmQsIGRpc2FibGUsIFdURl9BUlJBWV9MRU5HVEgoZGlzYWJsZSkpKSB7
Ci0gICAgICAgIG1fem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW5EaXNhYmxlOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgVUNoYXIgbWFnbmlmeVtdID0g
eyAnbScsICdhJywgJ2cnLCAnbicsICdpJywgJ2YnLCAneScgfTsKLSAgICBpZiAoc2tpcFN0cmlu
ZyhzdGFydCwgZW5kLCBtYWduaWZ5LCBXVEZfQVJSQVlfTEVOR1RIKG1hZ25pZnkpKSkgewotICAg
ICAgICBtX3pvb21BbmRQYW4gPSBTVkdab29tQW5kUGFuTWFnbmlmeTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQorICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZl
ciwgZGlzYWJsZTxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgIHJldHVybiBTVkdab29tQW5kUGFu
RGlzYWJsZTsKKworICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwg
bWFnbmlmeTxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgIHJldHVybiBTVkdab29tQW5kUGFuTWFn
bmlmeTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CiAKLSAgICByZXR1cm4gZmFsc2U7
CitPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5k
UGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJl
dHVybiBwYXJzZVpvb21BbmRQYW5HZW5lcmljKHBhcnNpbmdCdWZmZXIpOworfQorCitPcHRpb25h
bDxTVkdab29tQW5kUGFuVHlwZT4gU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBwYXJz
ZVpvb21BbmRQYW5HZW5lcmljKHBhcnNpbmdCdWZmZXIpOwogfQogCiB2b2lkIFNWR1pvb21BbmRQ
YW46OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNv
bnN0IEF0b21TdHJpbmcmIHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21B
bmRQYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5o
CShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAg
ICBTVkdab29tQW5kUGFuKCkgPSBkZWZhdWx0OwogCi0gICAgYm9vbCBwYXJzZVpvb21BbmRQYW4o
Y29uc3QgVUNoYXIqJiwgY29uc3QgVUNoYXIqKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHWm9v
bUFuZFBhblR5cGU+IHBhcnNlWm9vbUFuZFBhbihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYp
OworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gcGFyc2Vab29tQW5kUGFu
KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiAKIHByaXZhdGU6CiAgICAgU1ZHWm9vbUFu
ZFBhblR5cGUgbV96b29tQW5kUGFuIHsgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHWm9vbUFuZFBhblR5
cGU+Ojppbml0aWFsVmFsdWUoKSB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402665</attachid>
            <date>2020-06-24 11:38:34 -0700</date>
            <delta_ts>2020-06-24 12:09:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213460-20200624113833.patch</filename>
            <type>text/plain</type>
            <size>222499</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM0MzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA2LTIzICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIHVubmVjZXNzYXJ5IHVwY29udmVyc2lvbiBv
ZiBTdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTM0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbV0lQXQorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVm
ZmVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcpOgor
CiAyMDIwLTA2LTIzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIFdURjo6c2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZApJbmRleDogU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjMzMzUpCisrKyBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00NTIsNiArNDUyLDcgQEAKIAkJN0MxMzc5NDIyMjIzMjZENTAwRDdBODI0IC8qIGllZWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gaWVlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEz
Nzk0MzIyMjMyNkQ1MDBEN0E4MjQgLyogUkVBRE1FLm1kICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gbmV0LmRhcmluZ2ZpcmViYWxsLm1hcmtkb3duOyBw
YXRoID0gUkVBRE1FLm1kOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNBNDVEMDIz
Q0ZBODgzMDA3REUzQTYgLyogUGxhdGZvcm1IYXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtSGF2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QzNCMDZFODI0QTExNkU2MDBGRDI2QzcgLyogU3RyaW5nUGFyc2luZ0J1ZmZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHJpbmdQYXJzaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDM0Y3MjM5MUQ3ODgxMTkwMDY3NEUyNiAvKiBCcmlnYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJyaWdhbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M0MjMwNzEyM0NFMkQ4QTAwNkU1NEQwIC8qIFBsYXRmb3JtRW5hYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtRW5hYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNDIzMDcyMjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM5Niw2ICsxMzk3LDcgQEAKIAkJCQlBOEE0NzMyODE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQThBNDczMjkxNTFBODI1
QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCAqLywKIAkJCQlBOEE0NzMyQTE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nT3BlcmF0b3JzLmggKi8sCisJCQkJN0MzQjA2RTgyNEExMTZFNjAwRkQyNkM3
IC8qIFN0cmluZ1BhcnNpbmdCdWZmZXIuaCAqLywKIAkJCQlDRDAwMzYwRDIxNTAxRjc4MDBGNEVE
NEMgLyogU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oICovLAogCQkJCTkzRjE5OTNEMTlENzk1
OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCAqLywKIAkJCQkxQTZFQjFERjE4N0QwQkQzMDAz
MDEyNkYgLyogU3RyaW5nVmlldy5oICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0zMzgsNiArMzM4LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIHRleHQv
U3RyaW5nSGFzaGVyLmgKICAgICB0ZXh0L1N0cmluZ0ltcGwuaAogICAgIHRleHQvU3RyaW5nT3Bl
cmF0b3JzLmgKKyAgICB0ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAogICAgIHRleHQvU3RyaW5n
VG9JbnRlZ2VyQ29udmVyc2lvbi5oCiAgICAgdGV4dC9TdHJpbmdWaWV3LmgKICAgICB0ZXh0L1N5
bWJvbEltcGwuaApJbmRleDogU291cmNlL1dURi93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dU
Ri93dGYvRm9yd2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCA9IGFsaWdub2YoVCkKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lID0gRHVtYlB0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgPSBEdW1iUHRyVHJhaXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0
eXBlbmFtZT4gY2xhc3MgU3RyaW5nQnVmZmVyOwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0
cmluZ1BhcnNpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBj
bGFzcyBTdHJpbmdUeXBlQWRhcHRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBVbmlxdWVS
ZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgVmFyaWFudDsKQEAgLTEyMiw2ICsxMjMs
NyBAQCB1c2luZyBXVEY6OlN0cmluZzsKIHVzaW5nIFdURjo6U3RyaW5nQnVmZmVyOwogdXNpbmcg
V1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwordXNpbmcgV1RGOjpT
dHJpbmdQYXJzaW5nQnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpU
ZXh0UG9zaXRpb247CiB1c2luZyBXVEY6OlRleHRTdHJlYW07CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUhhdmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhh
dmUuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxMiwxNSArNjEyLDE1IEBACiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDE1MDApCi0jZGVmaW5lIEhBVkVfUEFTU0tJVF9CT1VORF9JTlRFUkZBQ0VfSURF
TlRJRklFUiAxCisjZGVmaW5lIEhBVkVfUEFTU0tJVF9CT1VORF9JTlRFUkZBQ0VfSURFTlRJRklF
UiAwCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE1MDApCi0jZGVmaW5lIEhBVkVfUEFT
U0tJVF9JTlNUQUxMTUVOVFMgMQorI2RlZmluZSBIQVZFX1BBU1NLSVRfSU5TVEFMTE1FTlRTIDAK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMCkKLSNkZWZpbmUgSEFWRV9QQVNTS0lU
X1BBWU1FTlRfTUVUSE9EX0JJTExJTkdfQUREUkVTUyAxCisjZGVmaW5lIEhBVkVfUEFTU0tJVF9Q
QVlNRU5UX01FVEhPRF9CSUxMSU5HX0FERFJFU1MgMAogI2VuZGlmCiAKICNpZiAoUExBVEZPUk0o
TUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMCkgfHwgUExB
VEZPUk0oSU9TKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQ29tbW9uLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
Y2xhc3MgU3RyaW5nUGFyc2luZ0J1ZmZlciBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IFQ7CisKKyAgICBjb25z
dGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlcigpCisgICAgeworICAgIH0KKworICAgIGNvbnN0ZXhw
ciBTdHJpbmdQYXJzaW5nQnVmZmVyKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uIHsgY2hhcmFjdGVycyB9CisgICAg
ICAgICwgbV9lbmQgeyBjaGFyYWN0ZXJzICsgbGVuZ3RoIH0KKyAgICB7CisgICAgfQorCisgICAg
Y29uc3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFj
dGVycywgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQorICAgICAgICA6IG1fcG9zaXRpb24geyBj
aGFyYWN0ZXJzIH0KKyAgICAgICAgLCBtX2VuZCB7IGVuZCB9CisgICAgeworICAgIH0KKworICAg
IGNvbnN0ZXhwciBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb247IH0KKyAgICBjb25zdGV4cHIgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KKworICAgIGNvbnN0ZXhwciBib29sIGhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uIDwgbV9lbmQ7IH0KKyAgICBj
b25zdGV4cHIgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24gPT0gbV9lbmQ7
IH0KKworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBsZW5ndGhSZW1haW5pbmcoKSBjb25zdCB7IHJl
dHVybiBtX2VuZCAtIG1fcG9zaXRpb247IH0KKyAgICBTdHJpbmdWaWV3IHN0cmluZ1ZpZXdPZkNo
YXJhY3RlcnNSZW1haW5pbmcoKSB7IHJldHVybiB7IG1fcG9zaXRpb24sIGxlbmd0aFJlbWFpbmlu
ZygpIH07IH0KKworICAgIENoYXJhY3RlclR5cGUgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fcG9zaXRpb24gKyBpIDwgbV9lbmQpOworICAgICAgICByZXR1
cm4gbV9wb3NpdGlvbltpXTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBv
cGVyYXRvciooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICptX3Bvc2l0aW9uOworICAg
IH0KKworICAgIGNvbnN0ZXhwciB2b2lkIGFkdmFuY2UoKQorICAgIHsKKyAgICAgICAgKyttX3Bv
c2l0aW9uOworICAgIH0KKworICAgIGNvbnN0ZXhwciB2b2lkIGFkdmFuY2VCeSh1bnNpZ25lZCBw
bGFjZXMpCisgICAgeworICAgICAgICBtX3Bvc2l0aW9uICs9IHBsYWNlczsKKyAgICB9CisKKyAg
ICBjb25zdGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlciYgb3BlcmF0b3IrKygpCisgICAgeworICAg
ICAgICBhZHZhbmNlKCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBjb25z
dGV4cHIgU3RyaW5nUGFyc2luZ0J1ZmZlciBvcGVyYXRvcisrKGludCkKKyAgICB7CisgICAgICAg
IGF1dG8gcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICsrKCp0aGlzKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogbV9w
b3NpdGlvbiB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBtX2VuZCB7IG51
bGxwdHIgfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUsIHR5cGVuYW1lIEZ1
bmN0aW9uPiBkZWNsdHlwZShhdXRvKSByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoU3RyaW5nVHlw
ZSYmIHN0cmluZywgRnVuY3Rpb24mJiBmdW5jdG9yKQoreworICAgIGlmIChzdHJpbmcuaXM4Qml0
KCkpCisgICAgICAgIHJldHVybiBmdW5jdG9yKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBzdHJpbmcu
Y2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH0pOworICAgIHJldHVybiBmdW5jdG9yKFN0
cmluZ1BhcnNpbmdCdWZmZXIgeyBzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgo
KSB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U3RyaW5nUGFyc2lu
Z0J1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzQzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NSBAQAorMjAyMC0wNi0y
MyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSB1bm5l
Y2Vzc2FyeSB1cGNvbnZlcnNpb24gb2YgU3RyaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9wYXJzZXIvUGFyc2lu
Z1V0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RBU0NJSVNwYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNraXBFeGFjdGx5KToKKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlclBy
ZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpza2lwVW50aWwpOgorICAgICAgICAoV2ViQ29y
ZTo6c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpza2lw
Q2hhcmFjdGVyc0V4YWN0bHkpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5j
aW5nUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdCk6CisgICAgICAg
ICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oOgorICAgICAgICAqIGxvYWRl
ci9TdWJyZXNvdXJjZUludGVncml0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcGxpdE9uU3Bh
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSW50ZWdyaXR5TWV0YWRhdGEpOgorICAgICAg
ICAqIGxvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZU1hbmlmZXN0KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xp
Y3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpkaWRSZWNl
aXZlSGVhZGVyKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rl
cik6CisgICAgICAgIChXZWJDb3JlOjppc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBh
cnNlRGlyZWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3Q6OnBhcnNlUmVwb3J0VVJJKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldENTUERpcmVjdGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphcHBseVNhbmRib3hQ
b2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDo6c2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0QmxvY2tBbGxNaXhlZENvbnRlbnRF
bmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OmFkZERpcmVjdGl2ZSk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdC5oOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc01lZGlh
VHlwZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lN
ZWRpYUxpc3REaXJlY3RpdmU6OnBhcnNlKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU291cmNlQ2hh
cmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzSG9zdENoYXJhY3Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjppc1BhdGhDb21wb25lbnRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNT
Y2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RDb2xv
bk9yU2xhc2gpOgorICAgICAgICAoV2ViQ29yZTo6aXNTb3VyY2VMaXN0Tm9uZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Ojpw
YXJzZVNjaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0OjpwYXJzZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGFyc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjppc05v
bmNlQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3Q6OnBhcnNlTm9uY2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VIYXNoU291cmNlKToKKyAgICAgICAgKiBwYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmg6CisgICAgICAgICogc3ZnL1NW
R0FuZ2xlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBbmdsZVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICog
c3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXlT
cGxpbmVzKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94R2VuZXJpYyk6CisgICAgICAgICogc3ZnL1NW
R0ZpdFRvVmlld0JveC5oOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhMaXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdMZW5ndGhMaXN0Ojp2YWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHTGVuZ3RoTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoTGlzdDo6cGFyc2Up
OiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUxlbmd0aFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoVmFs
dWU6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhWYWx1ZTo6c2V0VmFs
dWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aFZhbHVlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdMZW5ndGhWYWx1ZTo6U1ZHTGVuZ3RoVmFsdWUpOgorICAgICAgICAqIHN2Zy9T
VkdOdW1iZXJMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXJMaXN0
OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXJMaXN0Ojp2YWx1ZUFzU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHTnVtYmVyTGlzdDo6cGFyc2UpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4K
KyAgICAgICAgKiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyaWNQYXJzZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VBcmNGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlQXJjRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlck9wdGlvbmFsTnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlR2x5cGhOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlVW5pY29kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlS2Vy
bmluZ1VuaWNvZGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlRmxvYXRQ
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQpOgorICAgICAgICAqIHN2
Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU1ZHU3BhY2VPckNv
bW1hKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpza2lwU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNvdXJj
ZS5oOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRv
VmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU1ZHU2VnbWVu
dFR5cGVIZWxwZXIpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNl
Lmg6CisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUG9pbnRMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExp
c3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdQb2ludExpc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BvaW50TGlzdDo6cGFyc2UpOiBEZWxldGVkLgorICAgICAg
ICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlOjpwYXJzZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oOgorICAgICAgICAqIHN2Zy9TVkdTdHJp
bmdMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHJpbmdMaXN0OjpwYXJz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHJpbmdMaXN0Ojp2YWx1ZUFzU3RyaW5nIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHU3RyaW5nTGlzdC5oOgorICAgICAgICAqIHN2Zy9TVkdUcmFu
c2Zvcm1MaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1MaXN0
Ojpjb25zb2xpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1MaXN0Ojpjb25j
YXRlbmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1MaXN0OjpwYXJz
ZUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6dmFsdWVBc1N0cmluZyBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJh
bnNmb3JtYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVBhcmFtTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVj
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKToKKyAg
ICAgICAgKiBzdmcvU1ZHVmlld1NwZWMuaDoKKyAgICAgICAgKiBzdmcvU1ZHWm9vbUFuZFBhbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVpvb21BbmRQYW5HZW5lcmljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbik6CisgICAgICAgICogc3Zn
L1NWR1pvb21BbmRQYW4uaDoKKwogMjAyMC0wNi0yMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtNdWx0aWNvbF0gUmVzZXQgdGhlIGNoaWxkcmVuSW5saW5lIHN0
YXRlIG9uIHRoZSBSZW5kZXJCbG9ja0Zsb3cgd2hlbiBkZXN0cm95aW5nIHRoZSBtdWx0aWNvbHVt
biBjb250ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTY2NCw2ICs2NjQs
NyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBodG1sL2Zv
cm1zL0ZpbGVJY29uTG9hZGVyLmgKIAorICAgIGh0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMu
aAogICAgIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaAogCiAgICAgaHRtbC90cmFjay9B
dWRpb1RyYWNrLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjUzNyw2ICsyNTM3LDcg
QEAgc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAKIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCiBzdmcv
U1ZHSW1hZ2VMb2FkZXIuY3BwCiBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKK3N2Zy9TVkdMZW5n
dGhMaXN0LmNwcAogc3ZnL1NWR0xlbmd0aFZhbHVlLmNwcAogc3ZnL1NWR0xpbmVFbGVtZW50LmNw
cAogc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKQEAgLTI1NDYsNiArMjU0Nyw3IEBA
IHN2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAogc3ZnL1NWR01hc2tFbGVtZW50LmNwcAogc3ZnL1NW
R01ldGFkYXRhRWxlbWVudC5jcHAKIHN2Zy9TVkdNaXNzaW5nR2x5cGhFbGVtZW50LmNwcAorc3Zn
L1NWR051bWJlckxpc3QuY3BwCiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAogc3ZnL1NWR1Bh
dGhCbGVuZGVyLmNwcAogc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcApAQCAtMjU2MCw2ICsyNTYyLDcg
QEAgc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCiBzdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRl
QnVpbGRlci5jcHAKIHN2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAogc3ZnL1NWR1BhdHRlcm5FbGVt
ZW50LmNwcAorc3ZnL1NWR1BvaW50TGlzdC5jcHAKIHN2Zy9TVkdQb2x5RWxlbWVudC5jcHAKIHN2
Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKIHN2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCkBAIC0y
NTcwLDYgKzI1NzMsNyBAQCBzdmcvU1ZHU1ZHRWxlbWVudC5jcHAKIHN2Zy9TVkdTY3JpcHRFbGVt
ZW50LmNwcAogc3ZnL1NWR1NldEVsZW1lbnQuY3BwCiBzdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCitz
dmcvU1ZHU3RyaW5nTGlzdC5jcHAKIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCiBzdmcvU1ZHU3dp
dGNoRWxlbWVudC5jcHAKIHN2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcApAQCAtMjU4Myw2ICsyNTg3
LDcgQEAgc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCiBzdmcvU1ZHVGl0bGVFbGVt
ZW50LmNwcAogc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCiBzdmcvU1ZHVHJhbnNmb3Jt
RGlzdGFuY2UuY3BwCitzdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKIHN2Zy9TVkdUcmFuc2Zvcm1h
YmxlLmNwcAogc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAKIHN2Zy9TVkdVbmtub3duRWxlbWVudC5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU4OCw3ICsxNTg4LDcg
QEAKIAkJNTMyMDQyMDIxRjlBOUYxMDAwQjgxQjJBIC8qIFVzZXJBZ2VudFNjcmlwdHNEYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUI2RDMw
MTdDOTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRTY3JpcHRzRGF0YS5jcHAgKi87IH07CiAJCTUz
NTFENEIxMURGOTE2QjQwMDgwMTBDRCAvKiBGaWxlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUxRDRBRjFERjkxNkFDMDA4MDEwQ0QgLyog
RmlsZUhhbmRsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUzNkQ1QTIwMTkzRTE4RTkwMENFNENBQiAvKiBIVE1MU3Jjc2V0UGFyc2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzZENUExRjE5M0Ux
OEU5MDBDRTRDQUIgLyogSFRNTFNyY3NldFBhcnNlci5oICovOyB9OwotCQk1MzZENUEyMzE5M0U4
RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2RDVBMjIxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNp
bmdVdGlsaXRpZXMuaCAqLzsgfTsKKwkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNp
bmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzNkQ1QTIyMTkzRThFMEMwMENFNENBQiAvKiBQYXJzaW5nVXRpbGl0aWVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM4RUM4MDIxRjk2
QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRTb3VyY2UxLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0ZBMUY5NkFBNzAwMDREMjJBOCAvKiBVbmlm
aWVkU291cmNlMS5jcHAgKi87IH07CiAJCTUzOEVDODAzMUY5NkFGODEwMDREMjJBOCAvKiBVbmlm
aWVkU291cmNlMS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzOEVDN0YzMUY5NkFBNUIwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS1tbS5tbSAq
LzsgfTsKIAkJNTM4RUM4MDQxRjk2QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRTb3VyY2UyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0VFMUY5
NkFBNTYwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMi5jcHAgKi87IH07CkBAIC0xMDE4OCw2ICsx
MDE4OCwxMSBAQAogCQk3Q0QzNDQxMjFGMzEwOEUyMDAwRENENDkgLyogSlNNdXRhdGlvbkNhbGxi
YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTXV0YXRpb25DYWxsYmFjay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDQ5NENBMUE4NkVCMUQwMDBBODdFQyAvKiBSZW5k
ZXJBdHRhY2htZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlckF0dGFjaG1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Q0OTRD
QjFBODZFQjFEMDAwQTg3RUMgLyogUmVuZGVyQXR0YWNobWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJBdHRhY2htZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDRDcwQzNEMjRBMjhBM0EwMEU2MTA0MCAvKiBTVkdMZW5ndGhMaXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0xlbmd0aExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3Q0Q3MEM0MDI0QTI4QUM5MDBFNjEwNDAgLyogU1ZHTnVtYmVyTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdOdW1iZXJMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0NENzBDNDIyNEEyOEI3MDAwRTYxMDQwIC8qIFNWR1BvaW50TGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQb2ludExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3Q0Q3MEM0MzI0QTI4QkVDMDBFNjEwNDAgLyogU1ZHU3RyaW5nTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdTdHJpbmdMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0NENzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5zZm9ybUxpc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVHJhbnNmb3JtTGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDREU3Mzk2MUY5QkQ1OTUwMDM5MDMxMiAvKiBTZXR0aW5ncy55
YW1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNldHRpbmdzLnlhbWw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDREU4RUJDMUYxOTNCQzUwMDE2OEZFNyAvKiBDU1NTdHlsZURlY2xh
cmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1N0eWxl
RGVjbGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0UxOTE0NzFG
MkE5OEFGMDAyNzJGNzggLyogRmV0Y2hSZXF1ZXN0SW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGZXRjaFJlcXVlc3RJbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yNTEzMCw2ICsyNTEzNSw3IEBACiAJCQkJQjIyMjc4OUUwRDAwQkYyMDAwNzFCNzgy
IC8qIFNWR0xlbmd0aC5pZGwgKi8sCiAJCQkJNzEzNDQ5NkIxNDY5NDFCMzAwNzIwMzEyIC8qIFNW
R0xlbmd0aENvbnRleHQuY3BwICovLAogCQkJCTcxMzQ0OTZDMTQ2OTQxQjMwMDcyMDMxMiAvKiBT
VkdMZW5ndGhDb250ZXh0LmggKi8sCisJCQkJN0NENzBDM0QyNEEyOEEzQTAwRTYxMDQwIC8qIFNW
R0xlbmd0aExpc3QuY3BwICovLAogCQkJCUIyMjI3OEEwMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdM
ZW5ndGhMaXN0LmggKi8sCiAJCQkJQjIyMjc4QTEwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0
aExpc3QuaWRsICovLAogCQkJCTdDRTU4RDUyMUREN0IwOTMwMDEyODU1MiAvKiBTVkdMZW5ndGhW
YWx1ZS5jcHAgKi8sCkBAIC0yNTE2Miw2ICsyNTE2OCw3IEBACiAJCQkJNDREOERBOTgxMzk1NDVC
RTAwMzM3Qjc1IC8qIFNWR01QYXRoRWxlbWVudC5pZGwgKi8sCiAJCQkJN0NFNThENEYxREQ2OUEx
RTAwMTI4NTUyIC8qIFNWR051bWJlci5oICovLAogCQkJCUIyMjI3OEI5MEQwMEJGMjAwMDcxQjc4
MiAvKiBTVkdOdW1iZXIuaWRsICovLAorCQkJCTdDRDcwQzQwMjRBMjhBQzkwMEU2MTA0MCAvKiBT
VkdOdW1iZXJMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzhCQjBEMDBCRjIwMDA3MUI3ODIgLyogU1ZH
TnVtYmVyTGlzdC5oICovLAogCQkJCUIyMjI3OEJDMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdOdW1i
ZXJMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzhDMDBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHUGFyc2Vy
VXRpbGl0aWVzLmNwcCAqLywKQEAgLTI1MjI1LDYgKzI1MjMyLDcgQEAKIAkJCQlCMjIyNzhGMzBE
MDBCRjIxMDA3MUI3ODIgLyogU1ZHUGF0dGVybkVsZW1lbnQuaWRsICovLAogCQkJCTdDRTU4RDQ5
MURENjRBNUIwMDEyODU1MiAvKiBTVkdQb2ludC5oICovLAogCQkJCUIyMjI3OEY0MEQwMEJGMjEw
MDcxQjc4MiAvKiBTVkdQb2ludC5pZGwgKi8sCisJCQkJN0NENzBDNDIyNEEyOEI3MDAwRTYxMDQw
IC8qIFNWR1BvaW50TGlzdC5jcHAgKi8sCiAJCQkJQjIyMjc4RjYwRDAwQkYyMTAwNzFCNzgyIC8q
IFNWR1BvaW50TGlzdC5oICovLAogCQkJCUIyMjI3OEY3MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQ
b2ludExpc3QuaWRsICovLAogCQkJCUIyMjI3OEY4MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQb2x5
RWxlbWVudC5jcHAgKi8sCkBAIC0yNTI1OCw2ICsyNTI2Niw3IEBACiAJCQkJQjIyMjc5MTIwRDAw
QkYyMTAwNzFCNzgyIC8qIFNWR1N0b3BFbGVtZW50LmNwcCAqLywKIAkJCQlCMjIyNzkxMzBEMDBC
RjIxMDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaCAqLywKIAkJCQlCMjIyNzkxNDBEMDBCRjIx
MDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaWRsICovLAorCQkJCTdDRDcwQzQzMjRBMjhCRUMw
MEU2MTA0MCAvKiBTVkdTdHJpbmdMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzkxNjBEMDBCRjIxMDA3
MUI3ODIgLyogU1ZHU3RyaW5nTGlzdC5oICovLAogCQkJCUIyMjI3OTE3MEQwMEJGMjEwMDcxQjc4
MiAvKiBTVkdTdHJpbmdMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzkyMTBEMDBCRjIxMDA3MUI3ODIg
LyogU1ZHU3R5bGVFbGVtZW50LmNwcCAqLywKQEAgLTI1Mjk5LDYgKzI1MzA4LDcgQEAKIAkJCQlC
MjIyNzk0NDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtYWJsZS5oICovLAogCQkJCUIy
MjI3OTQ2MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgKi8sCiAJ
CQkJQjIyMjc5NDcwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmggKi8s
CisJCQkJN0NENzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5zZm9ybUxpc3QuY3BwICov
LAogCQkJCUIyMjI3OTQ5MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1MaXN0LmggKi8s
CiAJCQkJQjIyMjc5NEEwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybUxpc3QuaWRsICov
LAogCQkJCTdDRTU4RDU2MUREN0Q5NkQwMDEyODU1MiAvKiBTVkdUcmFuc2Zvcm1WYWx1ZS5oICov
LApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMu
aAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2lu
Z1V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTQgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1pbmxpbmUgYm9vbCBpc05vdEFTQ0lJU3BhY2UoVUNoYXIgYykKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgoraW5saW5lIGJvb2wgaXNOb3RBU0NJSVNwYWNlKENo
YXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7CiB9CiAgICAgCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KLWJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUq
JiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+Citib29sIHNr
aXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQs
IERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQogewogICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAq
cG9zaXRpb24gPT0gZGVsaW1pdGVyKSB7CiAgICAgICAgICsrcG9zaXRpb247CkBAIC00OSw2ICs1
MCwxNiBAQCBib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlwZW5hbWUgRGVs
aW1pdGVyVHlwZT4KK2Jvb2wgc2tpcEV4YWN0bHkoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlw
ZT4mIHBhcnNpbmdCdWZmZXIsIERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQoreworICAgIGlmIChw
YXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9
PSBkZWxpbWl0ZXIpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgogYm9vbCBza2lwRXhh
Y3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kKQogewpA
QCAtNTksMTMgKzcwLDMwIEBAIGJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3Np
dGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgot
dm9pZCBza2lwVW50aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUq
IGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJv
b2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK2Jvb2wgc2tpcEV4YWN0bHkoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgaWYgKHBhcnNp
bmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGNoYXJhY3RlclByZWRpY2F0ZSgq
cGFyc2luZ0J1ZmZlcikpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyVHlwZSwgdHlwZW5hbWUgRGVsaW1pdGVyVHlwZT4KK3ZvaWQgc2tpcFVudGlsKGNvbnN0
IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIERlbGltaXRlclR5cGUg
ZGVsaW1pdGVyKQogewogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gIT0g
ZGVsaW1pdGVyKQogICAgICAgICArK3Bvc2l0aW9uOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyVHlwZSwgdHlwZW5hbWUgRGVsaW1pdGVyVHlwZT4KK3ZvaWQgc2tpcFVudGlsKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyLCBEZWxpbWl0ZXJUeXBlIGRlbGlt
aXRlcikKK3sKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkgJiYgKnBhcnNpbmdCdWZmZXIgIT0gZGVsaW1pdGVyKQorICAgICAgICArK3BhcnNpbmdCdWZm
ZXI7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRp
Y2F0ZShDaGFyVHlwZSk+CiB2b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9u
LCBjb25zdCBDaGFyVHlwZSogZW5kKQogewpAQCAtNzQsNiArMTAyLDEzIEBAIHZvaWQgc2tpcFVu
dGlsKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
clR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK3ZvaWQgc2tpcFVudGls
KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHdo
aWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhY2hhcmFjdGVy
UHJlZGljYXRlKCpwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hh
clR5cGUpPgogdm9pZCBza2lwV2hpbGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3Qg
Q2hhclR5cGUqIGVuZCkKIHsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgY2hhcmFjdGVy
UHJlZGljYXRlKCpwb3NpdGlvbikpCkBAIC04MSw2ICsxMTYsMTMgQEAgdm9pZCBza2lwV2hpbGUo
Y29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlw
ZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgordm9pZCBza2lwV2hpbGUoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgd2hpbGUg
KHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGNoYXJhY3RlclByZWRp
Y2F0ZSgqcGFyc2luZ0J1ZmZlcikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBl
KT4KIHZvaWQgcmV2ZXJzZVNraXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25z
dCBDaGFyVHlwZSogc3RhcnQpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uID49IHN0YXJ0ICYmIGNo
YXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKQpAQCAtOTIsMTEgKzEzNCw0MSBAQCBib29sIHNr
aXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoY29uc3QgCiB7CiAgICAgaWYgKHBvc2l0aW9uICsg
bG93ZXJjYXNlTGV0dGVyc0xlbmd0aCA+IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgbG93ZXJj
YXNlTGV0dGVyc0xlbmd0aCAtIDEsIGxvd2VyY2FzZUxldHRlcnMpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcG9zaXRpb24gKz0gKGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGJvb2wgcmVzdWx0ID0gV1RGOjplcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEsIGxv
d2VyY2FzZUxldHRlcnMpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHBvc2l0aW9uICs9IChs
b3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5ndGg+
Citib29sIHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRl
cnMpW2xvd2VyY2FzZUxldHRlcnNMZW5ndGhdKQoreworICAgIGlmIChwYXJzaW5nQnVmZmVyLmxl
bmd0aFJlbWFpbmluZygpIDwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIVdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpLCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSwgbG93
ZXJjYXNlTGV0dGVycykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwYXJzaW5nQnVmZmVy
LmFkdmFuY2VCeShsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGNoYXJhY3Rl
ckNvdW50PiBjb25zdGV4cHIgYm9vbCBza2lwQ2hhcmFjdGVyc0V4YWN0bHkoY29uc3QgQ2hhcmFj
dGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKCZzdHIpW2NoYXJhY3RlckNvdW50XSkKK3sKKyAgICBpZiAoZW5kIC0gcHRyIDwgY2hhcmFj
dGVyQ291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobWVtY21wKHN0ciwgcHRy
LCBzaXplb2YoQ2hhcmFjdGVyVHlwZSkgKiBjaGFyYWN0ZXJDb3VudCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBwdHIgKz0gY2hhcmFjdGVyQ291bnQ7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGNoYXJhY3RlckNv
dW50PiBjb25zdGV4cHIgYm9vbCBza2lwQ2hhcmFjdGVyc0V4YWN0bHkoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgY29uc3QgQ2hhcmFjdGVyVHlwZSgm
c3RyKVtjaGFyYWN0ZXJDb3VudF0pCit7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVt
YWluaW5nKCkgPCBjaGFyYWN0ZXJDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtZW1jbXAoc3RyLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCksIHNpemVvZihDaGFyYWN0ZXJU
eXBlKSAqIGNoYXJhY3RlckNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBhcnNp
bmdCdWZmZXIuYWR2YW5jZUJ5KGNoYXJhY3RlckNvdW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9uIDI2MzMz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMDQgKzMwLDk2IEBACiAjaW5jbHVkZSA8cGFsL2Ny
eXB0by9DcnlwdG9EaWdlc3QuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVm
ZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLXN0YXRpYyBib29sIHBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9u
KGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5k
LCBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSYgYWxnb3JpdGhtKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtPiBwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQ
b3NpdGlvbihTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVy
KQogewogICAgIC8vIEZJWE1FOiBUaGlzIHdvdWxkIGJlIG11Y2ggY2xlYW5lciB3aXRoIGEgbG9v
a3VwIHRhYmxlIG9mIHBhaXJzIG9mIGxhYmVsIC8gYWxnb3JpdGhtIGVudW0gdmFsdWVzLCBidXQg
SSBjYW4ndAogICAgIC8vIGZpZ3VyZSBvdXQgaG93IHRvIGtlZXAgdGhlIGxhYmVscyBjb21waWxl
dGltZSBzdHJpbmdzIGZvciBza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlLgogCi0gICAgaWYg
KHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGVuZCwgInNoYTI1NiIpKSB7
Ci0gICAgICAgIGFsZ29yaXRobSA9IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3Jp
dGhtOjpTSEEyNTY7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoc2tpcEV4
YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgZW5kLCAic2hhMzg0IikpIHsKLSAgICAg
ICAgYWxnb3JpdGhtID0gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNI
QTM4NDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChza2lwRXhhY3RseUln
bm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBlbmQsICJzaGE1MTIiKSkgewotICAgICAgICBhbGdv
cml0aG0gPSBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hBNTEyOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdB
U0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgInNoYTI1NiIpKQorICAgICAgICByZXR1cm4gUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTI1NjsKKyAgICBpZiAoc2tpcEV4
YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAic2hhMzg0IikpCisgICAgICAg
IHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hBMzg0Owor
ICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICJzaGE1
MTIiKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3Jp
dGhtOjpTSEE1MTI7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBPcHRpb25h
bDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdElt
cGwoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBl
bmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8UmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKFN0
cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAg
aWYgKHBvc2l0aW9uID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVzb3VyY2VDcnlwdG9ncmFwaGljRGln
ZXN0OjpBbGdvcml0aG0gYWxnb3JpdGhtOwotICAgIGlmICghcGFyc2VIYXNoQWxnb3JpdGhtQWR2
YW5jaW5nUG9zaXRpb24ocG9zaXRpb24sIGVuZCwgYWxnb3JpdGhtKSkKKyAgICBhdXRvIGFsZ29y
aXRobSA9IHBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9uKHBhcnNpbmdCdWZmZXIp
OworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnLScpKQor
ICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy0nKSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGNvbnN0IENoYXJhY3RlclR5cGUq
IGJlZ2luSGFzaFZhbHVlID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotICAgIHNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICc9Jyk7Ci0gICAgc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz0nKTsKKyAgICBhdXRvIGJlZ2luSGFz
aFZhbHVlID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0
ZXJUeXBlLCBpc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKKyAg
ICBza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnPScpOworICAgIHNr
aXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc9Jyk7CiAKLSAgICBpZiAo
cG9zaXRpb24gPT0gYmVnaW5IYXNoVmFsdWUpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRp
b24oKSA9PSBiZWdpbkhhc2hWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0gICAgU3RyaW5nVmlldyBoYXNoVmFsdWUoYmVn
aW5IYXNoVmFsdWUsIHBvc2l0aW9uIC0gYmVnaW5IYXNoVmFsdWUpOworICAgIFN0cmluZ1ZpZXcg
aGFzaFZhbHVlKGJlZ2luSGFzaFZhbHVlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdp
bkhhc2hWYWx1ZSk7CiAgICAgaWYgKCFiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBkaWdlc3QsIEJh
c2U2NFZhbGlkYXRlUGFkZGluZykpIHsKICAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoaGFz
aFZhbHVlLCBkaWdlc3QpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9
CiAKLSAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgYWxnb3JpdGhtLCBX
VEZNb3ZlKGRpZ2VzdCkgfTsKKyAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
IHsgKmFsZ29yaXRobSwgV1RGTW92ZShkaWdlc3QpIH07CiB9CiAKLU9wdGlvbmFsPFJlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IFVDaGFy
KiYgYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpCitPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVD
aGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGljRGln
ZXN0SW1wbChiZWdpbiwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0
SW1wbChwYXJzaW5nQnVmZmVyKTsKIH0KIAotT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgTENoYXIqJiBiZWdpbiwgY29u
c3QgTENoYXIqIGVuZCkKK09wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFy
c2VDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5n
QnVmZmVyKQogewotICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJlZ2lu
LCBlbmQpOworICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKHBhcnNpbmdC
dWZmZXIpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIE9w
dGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENy
eXB0b2dyYXBoaWNEaWdlc3RJbXBsKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29u
c3QgQ2hhcmFjdGVyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIE9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNl
RW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFj
dGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkKKyAg
ICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtIGFs
Z29yaXRobTsKLSAgICBpZiAoIXBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9uKHBv
c2l0aW9uLCBlbmQsIGFsZ29yaXRobSkpCisgICAgYXV0byBhbGdvcml0aG0gPSBwYXJzZUhhc2hB
bGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihwYXJzaW5nQnVmZmVyKTsKKyAgICBpZiAoIWFsZ29y
aXRobSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJy0nKSkKKyAgICBpZiAoIXNraXBFeGFj
dGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICctJykpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbkhhc2hWYWx1ZSA9
IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0Jhc2U2NE9yQmFzZTY0
VVJMQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAgICBza2lwRXhhY3RseTxDaGFyYWN0ZXJU
eXBlPihwb3NpdGlvbiwgZW5kLCAnPScpOwotICAgIHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+
KHBvc2l0aW9uLCBlbmQsICc9Jyk7CisgICAgYXV0byBiZWdpbkhhc2hWYWx1ZSA9IHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNCYXNlNjRP
ckJhc2U2NFVSTENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CisgICAgc2tpcEV4YWN0bHk8Q2hh
cmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz0nKTsKKyAgICBza2lwRXhhY3RseTxDaGFyYWN0
ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnPScpOwogCi0gICAgaWYgKHBvc2l0aW9uID09IGJlZ2lu
SGFzaFZhbHVlKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gYmVnaW5IYXNo
VmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRW5jb2Rl
ZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGFsZ29yaXRobSwgU3RyaW5nKGJlZ2luSGFz
aFZhbHVlLCBwb3NpdGlvbiAtIGJlZ2luSGFzaFZhbHVlKSB9OworICAgIHJldHVybiBFbmNvZGVk
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgU3RyaW5nKGJlZ2luSGFz
aFZhbHVlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhhc2hWYWx1ZSkgfTsKIH0K
IAotT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNv
ZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBVQ2hhciomIGJlZ2luLCBjb25zdCBVQ2hhciog
ZW5kKQorT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VF
bmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFy
c2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNE
aWdlc3RJbXBsKHBhcnNpbmdCdWZmZXIpOwogfQogCi1PcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0
IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpCitPcHRpb25hbDxFbmNvZGVkUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KFN0
cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBw
YXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChiZWdpbiwgZW5kKTsKKyAgICByZXR1
cm4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwocGFyc2luZ0J1ZmZlcik7CiB9
CiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0JiBlbmNvZGVkRGlnZXN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaAkocmV2aXNpb24gMjYzMzM1KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NiwxMSArNjYsMTEgQEAgc3RydWN0IEVuY29kZWRSZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlcwogICAgIFN0cmluZyBkaWdlc3Q7CiB9OwogCi1PcHRpb25hbDxSZXNv
dXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBV
Q2hhciomIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKLU9wdGlvbmFsPFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVn
aW4sIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGln
ZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4m
KTsKK09wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFw
aGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CiAKLU9wdGlvbmFsPEVuY29k
ZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNE
aWdlc3QoY29uc3QgVUNoYXIqJiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7Ci1PcHRpb25hbDxF
bmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFw
aGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9u
YWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRv
Z3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOworT3B0aW9uYWw8RW5j
b2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOwogCiBPcHRpb25hbDxSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QoY29uc3QgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCYpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VJbnRlZ3JpdHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUludGVncml0eS5jcHAJKHJl
dmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUludGVn
cml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJQYXJz
aW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0Lmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFy
c2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDcgKzUxLDcgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ2hhcmFj
dGVyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCisgICAgYm9vbCBv
cGVyYXRvcigpKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZm
ZXIpCiAgICAgewogICAgICAgICAvLyBJbml0aWFsaXplIGhhc2hlcyB0byBiZSBzb21ldGhpbmcg
b3RoZXIgV1RGOjpudWxsb3B0LCB0byBpbmRpY2F0ZQogICAgICAgICAvLyB0aGF0IGF0IGxlYXN0
IG9uZSB0b2tlbiB3YXMgc2VlbiwgYW5kIHRodXMgc2V0dGluZyB0aGUgZW1wdHkgZmxhZwpAQCAt
NTgsMTkgKzU5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX2RpZ2VzdHMpCiAgICAgICAg
ICAgICBtX2RpZ2VzdHMgPSBWZWN0b3I8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dD4geyB9OwogCi0gICAgICAgIGF1dG8gZGlnZXN0ID0gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdChwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgYXV0byBkaWdlc3QgPSBwYXJzZUVuY29k
ZWRDcnlwdG9ncmFwaGljRGlnZXN0KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIWRpZ2Vz
dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyBUaGUgc3BlYyBhbGxv
d3MgZm9yIG9wdGlvbnMgZm9sbG93aW5nIHRoZSBkaWdlc3QsIGJ1dCBzbyBmYXIsIG5vCiAgICAg
ICAgIC8vIHNwZWNpZmljIG9wdGlvbnMgaGF2ZSBiZWVuIHNwZWNpZmllZC4gVGh1cywgd2UganVz
dCBwYXJzZSBhbmQgaWdub3JlCiAgICAgICAgIC8vIHRoZW0uIFRoZWlyIHN5bnRheCBpcyBhICc/
JyBmb2xsb3cgYnkgYW55IG51bWJlciBvZiBWQ0hBUnMuCi0gICAgICAgIGlmIChza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPycpKQotICAgICAgICAgICAgc2tpcFdo
aWxlPENoYXJhY3RlclR5cGUsIGlzVkNIQVI+KHBvc2l0aW9uLCBlbmQpOworICAgICAgICBpZiAo
c2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz8nKSkKKyAgICAgICAg
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1ZDSEFSPihwYXJzaW5nQnVmZmVyKTsKIAog
ICAgICAgICAvLyBBZnRlciB0aGUgYmFzZTY0IHZhbHVlIGFuZCBvcHRpb25zLCB0aGUgY3VycmVu
dCBjaGFyYWN0ZXIgcG9pbnRlZCB0byBieSBwb3NpdGlvbgogICAgICAgICAvLyBzaG91bGQgZWl0
aGVyIGJlIHRoZSBlbmQgb3IgYSBzcGFjZS4KLSAgICAgICAgaWYgKHBvc2l0aW9uICE9IGVuZCAm
JiAhaXNIVE1MU3BhY2UoKnBvc2l0aW9uKSkKKyAgICAgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0
RW5kKCkgJiYgIWlzSFRNTFNwYWNlKCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBtX2RpZ2VzdHMtPmFwcGVuZChXVEZNb3ZlKCpkaWdlc3QpKTsK
QEAgLTg0LDE3ICs4NSwxNCBAQCBwcml2YXRlOgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdE9u
U3BhY2VzKGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBl
bmQsIEZ1bmN0b3ImJiBmdW5jdG9yKQorc3RhdGljIGlubGluZSB2b2lkIHNwbGl0T25TcGFjZXMo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyLCBGdW5jdG9y
JiYgZnVuY3RvcikKIHsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwb3NpdGlvbiA9IGJlZ2lu
OworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0hUTUxTcGFjZT4ocGFyc2luZ0J1ZmZl
cik7CiAKLSAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNIVE1MU3BhY2U+KHBvc2l0aW9u
LCBlbmQpOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGlmICghZnVu
Y3Rvcihwb3NpdGlvbiwgZW5kKSkKLSAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc05vdEhUTUxTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0KLSAgICAgICAgc2tpcFdoaWxlPENo
YXJhY3RlclR5cGUsIGlzSFRNTFNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICB3aGlsZSAocGFy
c2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFmdW5j
dG9yKHBhcnNpbmdCdWZmZXIpKQorICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzTm90SFRNTFNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgc2tpcFdoaWxlPENoYXJh
Y3RlclR5cGUsIGlzSFRNTFNwYWNlPihwYXJzaW5nQnVmZmVyKTsKICAgICB9CiB9CiAKQEAgLTEw
NSwxMSArMTAzLDExIEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8RW5jb2RlZFJlc291cmNlQ3IK
IAogICAgIE9wdGlvbmFsPFZlY3RvcjxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
Pj4gcmVzdWx0OwogICAgIAotICAgIGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZ0ltcGwgPSAqaW50
ZWdyaXR5TWV0YWRhdGEuaW1wbCgpOwotICAgIGlmIChzdHJpbmdJbXBsLmlzOEJpdCgpKQotICAg
ICAgICBzcGxpdE9uU3BhY2VzKHN0cmluZ0ltcGwuY2hhcmFjdGVyczgoKSwgc3RyaW5nSW1wbC5j
aGFyYWN0ZXJzOCgpICsgc3RyaW5nSW1wbC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0YWRhdGFQYXJz
ZXI8TENoYXI+IHsgcmVzdWx0IH0pOwotICAgIGVsc2UKLSAgICAgICAgc3BsaXRPblNwYWNlcyhz
dHJpbmdJbXBsLmNoYXJhY3RlcnMxNigpLCBzdHJpbmdJbXBsLmNoYXJhY3RlcnMxNigpICsgc3Ry
aW5nSW1wbC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0YWRhdGFQYXJzZXI8VUNoYXI+IHsgcmVzdWx0
IH0pOworICAgIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKGludGVncml0eU1ldGFkYXRh
LCBbJnJlc3VsdF0gKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0
ZXJUeXBlID0gdHlwZW5hbWUgZGVjbHR5cGUocGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7
CisKKyAgICAgICAgc3BsaXRPblNwYWNlcyhwYXJzaW5nQnVmZmVyLCBJbnRlZ3JpdHlNZXRhZGF0
YVBhcnNlcjxDaGFyYWN0ZXJUeXBlPiB7IHJlc3VsdCB9KTsKKyAgICB9KTsKIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvTWFuaWZl
c3RQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9NYW5pZmVzdFBhcnNlci5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRl
IDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9D
aGFyYWN0ZXJOYW1lcy5oPgogCkBAIC02NywxMzcgKzY4LDE0MCBAQCBib29sIHBhcnNlTWFuaWZl
c3QoY29uc3QgVVJMJiBtYW5pZmVzdFVSCiAgICAgaWYgKCFtYW5pZmVzdFN0cmluZy5zdGFydHNX
aXRoKG1hbmlmZXN0U2lnbmF0dXJlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IFN0cmluZ1ZpZXcgbWFuaWZlc3RBZnRlclNpZ25hdHVyZSA9IFN0cmluZ1ZpZXcobWFuaWZlc3RT
dHJpbmcpLnN1YnN0cmluZyhzaXplb2YobWFuaWZlc3RTaWduYXR1cmUpIC0gMSk7Ci0gICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBtYW5pZmVzdEFmdGVyU2lnbmF0dXJlLnVwY29udmVy
dGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwID0gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwICsgbWFuaWZlc3RBZnRlclNpZ25hdHVyZS5s
ZW5ndGgoKTsKKyAgICBhdXRvIG1hbmlmZXN0QWZ0ZXJTaWduYXR1cmUgPSBTdHJpbmdWaWV3KG1h
bmlmZXN0U3RyaW5nKS5zdWJzdHJpbmcoc2l6ZW9mKG1hbmlmZXN0U2lnbmF0dXJlKSAtIDEpOwog
Ci0gICAgaWYgKHAgPCBlbmQgJiYgKnAgIT0gJyAnICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJ1xu
JyAmJiAqcCAhPSAnXHInKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRklYTUU6IFRo
aXMgcGFyc2VyIGNvdWxkIGJlIG11Y2ggY2xlYXJlciBpZiBpdCBhZG9wdGVkIHNvbWUgb2YgdGhl
IGNvbW1vbiBwYXJzaW5nIHV0aWxpdGllcworICAgIC8vIGZvciBza2lwcGluZyBhbmQgY29tcGFy
aW5nLgogCi0gICAgLy8gU2tpcCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgotICAgIHdoaWxlIChw
IDwgZW5kICYmICpwICE9ICdccicgJiYgKnAgIT0gJ1xuJykKLSAgICAgICAgcCsrOwotCi0gICAg
d2hpbGUgKDEpIHsKLSAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlCi0gICAgICAgIHdoaWxlIChw
IDwgZW5kICYmICgqcCA9PSAnXG4nIHx8ICpwID09ICdccicgfHwgKnAgPT0gJyAnIHx8ICpwID09
ICdcdCcpKQotICAgICAgICAgICAgcCsrOwotICAgICAgICAKLSAgICAgICAgaWYgKHAgPT0gZW5k
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBVQ2hhciogbGlu
ZVN0YXJ0ID0gcDsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbmQgdGhlIGVuZCBvZiB0aGUgbGlu
ZQotICAgICAgICB3aGlsZSAocCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCi0g
ICAgICAgICAgICBwKys7Ci0gICAgICAgIAotICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEg
Y29tbWVudAotICAgICAgICBpZiAoKmxpbmVTdGFydCA9PSAnIycpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEdldCByaWQgb2YgdHJhaWxpbmcgd2hpdGVzcGFj
ZQotICAgICAgICBjb25zdCBVQ2hhciogdG1wID0gcCAtIDE7Ci0gICAgICAgIHdoaWxlICh0bXAg
PiBsaW5lU3RhcnQgJiYgKCp0bXAgPT0gJyAnIHx8ICp0bXAgPT0gJ1x0JykpCi0gICAgICAgICAg
ICB0bXAtLTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBsaW5lKGxpbmVTdGFydCwgdG1wIC0g
bGluZVN0YXJ0ICsgMSk7Ci0KLSAgICAgICAgaWYgKGxpbmUgPT0gIkNBQ0hFOiIpIAotICAgICAg
ICAgICAgbW9kZSA9IEV4cGxpY2l0OwotICAgICAgICBlbHNlIGlmIChsaW5lID09ICJGQUxMQkFD
SzoiKQotICAgICAgICAgICAgbW9kZSA9IEZhbGxiYWNrOwotICAgICAgICBlbHNlIGlmIChsaW5l
ID09ICJORVRXT1JLOiIpCi0gICAgICAgICAgICBtb2RlID0gT25saW5lQWxsb3dsaXN0OwotICAg
ICAgICBlbHNlIGlmIChsaW5lLmVuZHNXaXRoKCc6JykpCi0gICAgICAgICAgICBtb2RlID0gVW5r
bm93bjsKLSAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBVbmtub3duKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gRXhwbGljaXQgfHwgbW9kZSA9PSBPbmxp
bmVBbGxvd2xpc3QpIHsKLSAgICAgICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVy
cyA9IFN0cmluZ1ZpZXcobGluZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgICAg
ICBjb25zdCBVQ2hhciogcCA9IHVwY29udmVydGVkTGluZUNoYXJhY3RlcnM7Ci0gICAgICAgICAg
ICBjb25zdCBVQ2hhciogbGluZUVuZCA9IHAgKyBsaW5lLmxlbmd0aCgpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTCBm
cm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCi0gICAgICAgICAgICB3aGlsZSAocCA8IGxp
bmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnICcpIAotICAgICAgICAgICAgICAgIHArKzsK
KyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcobWFuaWZlc3RBZnRlclNp
Z25hdHVyZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICBhdXRvIHAgPSBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIGF1dG8gZW5kID0gcGFyc2luZ0J1ZmZlci5l
bmQoKTsKIAotICAgICAgICAgICAgaWYgKG1vZGUgPT0gT25saW5lQWxsb3dsaXN0ICYmIHAgLSB1
cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzID09IDEgJiYgbGluZVswXSA9PSAnKicpIHsKLSAgICAg
ICAgICAgICAgICAvLyBXaWxkY2FyZCB3YXMgZm91bmQuCi0gICAgICAgICAgICAgICAgbWFuaWZl
c3QuYWxsb3dBbGxOZXR3b3JrUmVxdWVzdHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAocCA8IGVuZCAmJiAqcCAhPSAnICcgJiYg
KnAgIT0gJ1x0JyAmJiAqcCAhPSAnXG4nICYmICpwICE9ICdccicpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFVSTCB1cmwobWFuaWZlc3RVUkwsIGxpbmUuc3Vic3Ry
aW5nKDAsIHAgLSB1cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgLy8gU2tpcCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorICAgICAgICB3aGlsZSAo
cCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCisgICAgICAgICAgICBwKys7CiAK
LSAgICAgICAgICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHVybC5wcm90b2NvbCgp
LCBtYW5pZmVzdFVSTC5wcm90b2NvbCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZQorICAgICAg
ICAgICAgd2hpbGUgKHAgPCBlbmQgJiYgKCpwID09ICdcbicgfHwgKnAgPT0gJ1xyJyB8fCAqcCA9
PSAnICcgfHwgKnAgPT0gJ1x0JykpCisgICAgICAgICAgICAgICAgcCsrOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBFeHBsaWNpdCAmJiBtYW5pZmVzdFVSTC5wcm90b2Nv
bElzKCJodHRwcyIpICYmICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RVUkws
IHVybCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocCA9PSBl
bmQpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChtb2RlID09IEV4cGxpY2l0KQotICAgICAgICAgICAgICAgIG1hbmlmZXN0LmV4cGxpY2l0VVJM
cy5hZGQodXJsLnN0cmluZygpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBt
YW5pZmVzdC5vbmxpbmVBbGxvd2VkVVJMcy5hcHBlbmQodXJsKTsKLSAgICAgICAgICAgIAotICAg
ICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gRmFsbGJhY2spIHsKLSAgICAgICAgICAgIGF1dG8gdXBj
b252ZXJ0ZWRMaW5lQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcobGluZSkudXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCk7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogcCA9IHVwY29udmVydGVkTGluZUNo
YXJhY3RlcnM7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogbGluZUVuZCA9IHAgKyBsaW5lLmxl
bmd0aCgpOworICAgICAgICAgICAgYXV0byBsaW5lU3RhcnQgPSBwOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIHR3byBVUkxz
Ci0gICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAn
ICcpIAorICAgICAgICAgICAgLy8gRmluZCB0aGUgZW5kIG9mIHRoZSBsaW5lCisgICAgICAgICAg
ICB3aGlsZSAocCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCiAgICAgICAgICAg
ICAgICAgcCsrOwotCi0gICAgICAgICAgICBpZiAocCA9PSBsaW5lRW5kKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVGhlcmUgd2FzIG5vIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUgVVJMcy4KLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgVVJMIG5hbWVzcGFjZVVSTChtYW5pZmVzdFVSTCwgbGluZS5zdWJzdHJpbmcoMCwg
cCAtIHVwY29udmVydGVkTGluZUNoYXJhY3RlcnMpKTsKLSAgICAgICAgICAgIGlmICghbmFtZXNw
YWNlVVJMLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IG5hbWVzcGFjZVVSTC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLQotICAgICAgICAgICAg
aWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RVUkwsIG5hbWVzcGFjZVVS
TCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIEFsdGhvdWdo
IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vZmZsaW5lLmh0bWwjcGFy
c2luZy1jYWNoZS1tYW5pZmVzdHM+ICgwNy8wNi8yMDE3KSBzYWlkcwotICAgICAgICAgICAgLy8g
dGhhdCB3ZSBzaG91bGQgYWx3YXlzIHByZWZpeCBtYXRjaCB0aGUgbWFuaWZlc3QgcGF0aCB3ZSBv
bmx5IGRvIHNvIGlmIHRoZSBtYW5pZmVzdCB3YXMgc2VydmVkIHdpdGggYSBub24tCi0gICAgICAg
ICAgICAvLyBzdGFuZGFyZCBIVFRQIENvbnRlbnQtVHlwZSBoZWFkZXIgZm9yIHdlYiBjb21wYXRp
YmlsaXR5LgotICAgICAgICAgICAgaWYgKCFhbGxvd0ZhbGxiYWNrTmFtZXNwYWNlT3V0c2lkZU1h
bmZlc3RQYXRoICYmICFuYW1lc3BhY2VVUkwucGF0aCgpLnN0YXJ0c1dpdGgobWFuaWZlc3RQYXRo
KSkKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBjb21tZW50CisgICAgICAgICAg
ICBpZiAoKmxpbmVTdGFydCA9PSAnIycpCiAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEdldCByaWQgb2YgdHJhaWxpbmcgd2hpdGVzcGFjZQor
ICAgICAgICAgICAgYXV0byB0bXAgPSBwIC0gMTsKKyAgICAgICAgICAgIHdoaWxlICh0bXAgPiBs
aW5lU3RhcnQgJiYgKCp0bXAgPT0gJyAnIHx8ICp0bXAgPT0gJ1x0JykpCisgICAgICAgICAgICAg
ICAgdG1wLS07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZ1ZpZXcgbGluZShsaW5l
U3RhcnQsIHRtcCAtIGxpbmVTdGFydCArIDEpOworCisgICAgICAgICAgICBpZiAobGluZSA9PSAi
Q0FDSEU6IikKKyAgICAgICAgICAgICAgICBtb2RlID0gRXhwbGljaXQ7CisgICAgICAgICAgICBl
bHNlIGlmIChsaW5lID09ICJGQUxMQkFDSzoiKQorICAgICAgICAgICAgICAgIG1vZGUgPSBGYWxs
YmFjazsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxpbmUgPT0gIk5FVFdPUks6IikKKyAgICAgICAg
ICAgICAgICBtb2RlID0gT25saW5lQWxsb3dsaXN0OworICAgICAgICAgICAgZWxzZSBpZiAobGlu
ZS5lbmRzV2l0aCgnOicpKQorICAgICAgICAgICAgICAgIG1vZGUgPSBVbmtub3duOworICAgICAg
ICAgICAgZWxzZSBpZiAobW9kZSA9PSBVbmtub3duKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBFeHBsaWNpdCB8fCBtb2RlID09IE9ubGlu
ZUFsbG93bGlzdCkgeworICAgICAgICAgICAgICAgIGF1dG8gcCA9IGxpbmVTdGFydDsKKyAgICAg
ICAgICAgICAgICBhdXRvIGxpbmVFbmQgPSBwICsgbGluZS5sZW5ndGgoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcg
dGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCisgICAgICAgICAgICAgICAg
d2hpbGUgKHAgPCBsaW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKQorICAgICAgICAg
ICAgICAgICAgICBwKys7CisKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBPbmxpbmVBbGxv
d2xpc3QgJiYgcCAtIGxpbmVTdGFydCA9PSAxICYmIGxpbmVbMF0gPT0gJyonKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHdhcyBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAg
bWFuaWZlc3QuYWxsb3dBbGxOZXR3b3JrUmVxdWVzdHMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBVUkwg
dXJsKG1hbmlmZXN0VVJMLCBsaW5lLnN1YnN0cmluZygwLCBwIC0gbGluZVN0YXJ0KS50b1N0cmlu
ZygpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIXVybC5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdXJs
LnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2woKSwgbWFuaWZl
c3RVUkwucHJvdG9jb2woKSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEV4cGxpY2l0ICYmIG1hbmlm
ZXN0VVJMLnByb3RvY29sSXMoImh0dHBzIikgJiYgIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVh
bChtYW5pZmVzdFVSTCwgdXJsKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gRXhwbGljaXQpCisgICAg
ICAgICAgICAgICAgICAgIG1hbmlmZXN0LmV4cGxpY2l0VVJMcy5hZGQodXJsLnN0cmluZygpKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0Lm9ubGlu
ZUFsbG93ZWRVUkxzLmFwcGVuZCh1cmwpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
fSBlbHNlIGlmIChtb2RlID09IEZhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgYXV0byBwID0g
bGluZVN0YXJ0OworICAgICAgICAgICAgICAgIGF1dG8gbGluZUVuZCA9IHAgKyBsaW5lLmxlbmd0
aCgpOworCisgICAgICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5n
IHRoZSB0d28gVVJMcworICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAqcCAh
PSAnXHQnICYmICpwICE9ICcgJykKKyAgICAgICAgICAgICAgICAgICAgcCsrOworCisgICAgICAg
ICAgICAgICAgaWYgKHAgPT0gbGluZUVuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGVy
ZSB3YXMgbm8gd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSBVUkxzLgorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgVVJMIG5hbWVzcGFjZVVSTChtYW5pZmVzdFVSTCwgbGluZS5zdWJzdHJpbmco
MCwgcCAtIGxpbmVTdGFydCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFuYW1l
c3BhY2VVUkwuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBuYW1lc3BhY2VVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVS
TCwgbmFtZXNwYWNlVVJMKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICAvLyBBbHRob3VnaCA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0
aXBhZ2Uvb2ZmbGluZS5odG1sI3BhcnNpbmctY2FjaGUtbWFuaWZlc3RzPiAoMDcvMDYvMjAxNykg
c2FpZHMKKyAgICAgICAgICAgICAgICAvLyB0aGF0IHdlIHNob3VsZCBhbHdheXMgcHJlZml4IG1h
dGNoIHRoZSBtYW5pZmVzdCBwYXRoIHdlIG9ubHkgZG8gc28gaWYgdGhlIG1hbmlmZXN0IHdhcyBz
ZXJ2ZWQgd2l0aCBhIG5vbi0KKyAgICAgICAgICAgICAgICAvLyBzdGFuZGFyZCBIVFRQIENvbnRl
bnQtVHlwZSBoZWFkZXIgZm9yIHdlYiBjb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgIGlm
ICghYWxsb3dGYWxsYmFja05hbWVzcGFjZU91dHNpZGVNYW5mZXN0UGF0aCAmJiAhbmFtZXNwYWNl
VVJMLnBhdGgoKS5zdGFydHNXaXRoKG1hbmlmZXN0UGF0aCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlIHNlcGFyYXRp
bmcgZmFsbGJhY2sgbmFtZXNwYWNlIGZyb20gVVJMLgorICAgICAgICAgICAgICAgIHdoaWxlIChw
IDwgbGluZUVuZCAmJiAoKnAgPT0gJ1x0JyB8fCAqcCA9PSAnICcpKQorICAgICAgICAgICAgICAg
ICAgICBwKys7CisKKyAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFy
YXRpbmcgdGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCisgICAgICAgICAg
ICAgICAgYXV0byBmYWxsYmFja1N0YXJ0ID0gcDsKKyAgICAgICAgICAgICAgICB3aGlsZSAocCA8
IGxpbmVFbmQgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnICcpCisgICAgICAgICAgICAgICAgICAg
IHArKzsKKworICAgICAgICAgICAgICAgIFVSTCBmYWxsYmFja1VSTChtYW5pZmVzdFVSTCwgU3Ry
aW5nKGZhbGxiYWNrU3RhcnQsIHAgLSBmYWxsYmFja1N0YXJ0KSk7CisgICAgICAgICAgICAgICAg
aWYgKCFmYWxsYmFja1VSTC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIGZhbGxiYWNrVVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigp
OworCisgICAgICAgICAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFu
aWZlc3RVUkwsIGZhbGxiYWNrVVJMKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgICAgICBtYW5pZmVzdC5mYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKG5hbWVzcGFjZVVSTCwgZmFsbGJhY2tVUkwpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAKLSAgICAgICAg
ICAgIC8vIFNraXAgd2hpdGVzcGFjZSBzZXBhcmF0aW5nIGZhbGxiYWNrIG5hbWVzcGFjZSBmcm9t
IFVSTC4KLSAgICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAoKnAgPT0gJ1x0JyB8fCAq
cCA9PSAnICcpKQotICAgICAgICAgICAgICAgIHArKzsKLQotICAgICAgICAgICAgLy8gTG9vayBm
b3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSBVUkwgZnJvbSBzdWJzZXF1ZW50IGlnbm9yZWQg
dG9rZW5zLgotICAgICAgICAgICAgY29uc3QgVUNoYXIqIGZhbGxiYWNrU3RhcnQgPSBwOwotICAg
ICAgICAgICAgd2hpbGUgKHAgPCBsaW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKSAK
LSAgICAgICAgICAgICAgICBwKys7Ci0KLSAgICAgICAgICAgIFVSTCBmYWxsYmFja1VSTChtYW5p
ZmVzdFVSTCwgU3RyaW5nKGZhbGxiYWNrU3RhcnQsIHAgLSBmYWxsYmFja1N0YXJ0KSk7Ci0gICAg
ICAgICAgICBpZiAoIWZhbGxiYWNrVVJMLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGZhbGxiYWNrVVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigp
OwotCi0gICAgICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVz
dFVSTCwgZmFsbGJhY2tVUkwpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICBtYW5pZmVzdC5mYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5hbWVzcGFj
ZVVSTCwgZmFsbGJhY2tVUkwpKTsgICAgICAgICAgICAKLSAgICAgICAgfSBlbHNlIAotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJKHJldmlzaW9uIDI2
MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAKIApAQCAtMjEyLDIyICsy
MTMsMjMgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRpZFJlY2VpdmVIZQogICAgIC8v
IFJGQzI2MTYsIHNlY3Rpb24gNC4yIHNwZWNpZmllcyB0aGF0IGhlYWRlcnMgYXBwZWFyaW5nIG11
bHRpcGxlIHRpbWVzIGNhbgogICAgIC8vIGJlIGNvbWJpbmVkIHdpdGggYSBjb21tYS4gV2FsayB0
aGUgaGVhZGVyIHN0cmluZywgYW5kIHBhcnNlIGVhY2ggY29tbWEKICAgICAvLyBzZXBhcmF0ZWQg
Y2h1bmsgYXMgYSBzZXBhcmF0ZSBoZWFkZXIuCi0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5n
VmlldyhoZWFkZXIpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBi
ZWdpbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0g
ICAgY29uc3QgVUNoYXIqIGVuZCA9IGJlZ2luICsgaGVhZGVyLmxlbmd0aCgpOwotICAgIHdoaWxl
IChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBl
bmQsICcsJyk7Ci0KLSAgICAgICAgLy8gaGVhZGVyMSxoZWFkZXIyIE9SIGhlYWRlcjEKLSAgICAg
ICAgLy8gICAgICAgIF4gICAgICAgICAgICAgICAgICBeCi0gICAgICAgIG1fcG9saWNpZXMuYXBw
ZW5kKENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmNyZWF0ZSgqdGhpcywgU3Ry
aW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSwgdHlwZSwgcG9saWN5RnJvbSkpOwotCi0gICAg
ICAgIC8vIFNraXAgdGhlIGNvbW1hLCBhbmQgYmVnaW4gdGhlIG5leHQgaGVhZGVyIGZyb20gdGhl
IGN1cnJlbnQgcG9zaXRpb24uCi0gICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgKnBv
c2l0aW9uID09ICcsJyk7Ci0gICAgICAgIHNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5k
LCAnLCcpOwotICAgICAgICBiZWdpbiA9IHBvc2l0aW9uOwotICAgIH0KKyAgICBXVEY6OnJlYWRD
aGFyYWN0ZXJzRm9yUGFyc2luZyhoZWFkZXIsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAg
ICAgICAgYXV0byBiZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAKKyAgICAg
ICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAg
ICAgICAgICBza2lwVW50aWwocGFyc2luZ0J1ZmZlciwgJywnKTsKKworICAgICAgICAgICAgLy8g
aGVhZGVyMSxoZWFkZXIyIE9SIGhlYWRlcjEKKyAgICAgICAgICAgIC8vICAgICAgICBeICAgICAg
ICAgICAgICAgICAgXgorICAgICAgICAgICAgbV9wb2xpY2llcy5hcHBlbmQoQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y3JlYXRlKCp0aGlzLCBTdHJpbmcoYmVnaW4sIHBhcnNp
bmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSwgdHlwZSwgcG9saWN5RnJvbSkpOworCisgICAg
ICAgICAgICAvLyBTa2lwIHRoZSBjb21tYSwgYW5kIGJlZ2luIHRoZSBuZXh0IGhlYWRlciBmcm9t
IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICAgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIu
YXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09ICcsJyk7CisgICAgICAgICAg
ICBza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnLCcpOworICAgICAgICAgICAgYmVnaW4gPSBw
YXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICAKIAogICAg
IGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIGFwcGx5UG9saWN5VG9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcAko
cmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE1ICszMiwx
NiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5Q29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Bh
cnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpc0Rp
cmVjdGl2ZU5hbWVDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyBib29sIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBl
IGMpCiB7CiAgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnLSc7CiB9
CiAKLXN0YXRpYyBib29sIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzRGlyZWN0aXZlVmFsdWVD
aGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBpc0FTQ0lJU3BhY2UoYykg
fHwgKGMgPj0gMHgyMSAmJiBjIDw9IDB4N2UpOyAvLyBXaGl0ZXNwYWNlICsgVkNIQVIKIH0KQEAg
LTMzMywyMjQgKzMzNCwyMTggQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVM
aXN0OgogICAgIGlmIChwb2xpY3kuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHBvbGljeSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBV
Q2hhciogZW5kID0gcG9zaXRpb24gKyBwb2xpY3kubGVuZ3RoKCk7Ci0KLSAgICB3aGlsZSAocG9z
aXRpb24gPCBlbmQpIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGRpcmVjdGl2ZUJlZ2luID0gcG9z
aXRpb247Ci0gICAgICAgIHNraXBVbnRpbDxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJzsnKTsKLQot
ICAgICAgICBTdHJpbmcgbmFtZSwgdmFsdWU7Ci0gICAgICAgIGlmIChwYXJzZURpcmVjdGl2ZShk
aXJlY3RpdmVCZWdpbiwgcG9zaXRpb24sIG5hbWUsIHZhbHVlKSkgewotICAgICAgICAgICAgQVNT
RVJUKCFuYW1lLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBpZiAocG9saWN5RnJvbSA9PSBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZCkgewotICAgICAgICAgICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwb2xpY3lGcm9tID09IENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SFRUUEVxdWl2TWV0YSkgewotICAgICAg
ICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzYW5kYm94KQotICAgICAgICAgICAgICAgICAgICB8fCBl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZU5hbWVzOjpyZXBvcnRVUkkpCi0gICAgICAgICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1l
QW5jZXN0b3JzKSkgewotICAgICAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlk
RGlyZWN0aXZlSW5IVFRQRXF1aXZNZXRhKG5hbWUpOwotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhwb2xpY3ksIFsmXShhdXRv
IHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFj
dGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBhdXRvIGRpcmVjdGl2ZUJlZ2luID0gcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZm
ZXIsICc7Jyk7CisKKyAgICAgICAgICAgIGlmIChhdXRvIGRpcmVjdGl2ZSA9IHBhcnNlRGlyZWN0
aXZlKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBkaXJlY3RpdmVCZWdpbiwgcGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpIH0pKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFkaXJlY3RpdmUtPm5hbWUu
aXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZCkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpIVFRQRXF1
aXZNZXRhKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGRpcmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNh
bmRib3gpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGRpcmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJl
cG9ydFVSSSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
ZnJhbWVBbmNlc3RvcnMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBv
cnRJbnZhbGlkRGlyZWN0aXZlSW5IVFRQRXF1aXZNZXRhKGRpcmVjdGl2ZS0+bmFtZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OlBvbGljeUZyb206OkluaGVyaXRlZEZvclBsdWdpbkRvY3VtZW50KSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICYmICFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS0+bmFt
ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xp
Y3lGcm9tOjpJbmhlcml0ZWRGb3JQbHVnaW5Eb2N1bWVudCkgewotICAgICAgICAgICAgICAgIGlm
ICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6cGx1Z2luVHlwZXMpCi0gICAgICAgICAgICAgICAgICAgICYmICFlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVz
OjpyZXBvcnRVUkkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBhZGREaXJlY3RpdmUoV1RGTW92ZSgqZGlyZWN0aXZlKSk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBhZGREaXJlY3RpdmUobmFtZSwgdmFsdWUpOwotICAgICAgICB9CiAKLSAgICAg
ICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJzsnKTsKLSAgICAgICAg
c2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0gICAgfQorICAgICAgICAg
ICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciA9PSAnOycp
OworICAgICAgICAgICAgc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJzsnKTsKKyAgICAgICAg
fQorICAgIH0pOwogfQogCiAvLyBkaXJlY3RpdmUgICAgICAgICA9ICpXU1AgWyBkaXJlY3RpdmUt
bmFtZSBbIFdTUCBkaXJlY3RpdmUtdmFsdWUgXSBdCiAvLyBkaXJlY3RpdmUtbmFtZSAgICA9IDEq
KCBBTFBIQSAvIERJR0lUIC8gIi0iICkKIC8vIGRpcmVjdGl2ZS12YWx1ZSAgID0gKiggV1NQIC8g
PFZDSEFSIGV4Y2VwdCAiOyI+ICkKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIq
IGVuZCwgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gYXV0byBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJz
ZURpcmVjdGl2ZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZm
ZXIpIC0+IE9wdGlvbmFsPFBhcnNlZERpcmVjdGl2ZT4KIHsKLSAgICBBU1NFUlQobmFtZS5pc0Vt
cHR5KCkpOwotICAgIEFTU0VSVCh2YWx1ZS5pc0VtcHR5KCkpOwotCi0gICAgY29uc3QgVUNoYXIq
IHBvc2l0aW9uID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBv
c2l0aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+
KHBhcnNpbmdCdWZmZXIpOwogCiAgICAgLy8gRW1wdHkgZGlyZWN0aXZlIChlLmcuICI7OzsiKS4g
RXhpdCBlYXJseS4KLSAgICBpZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIGNvbnN0IFVDaGFyKiBuYW1lQmVnaW4gPSBwb3NpdGlvbjsKLSAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7
CisgICAgYXV0byBuYW1lQmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tp
cFdoaWxlPENoYXJhY3RlclR5cGUsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4ocGFyc2luZ0J1
ZmZlcik7CiAKICAgICAvLyBUaGUgZGlyZWN0aXZlLW5hbWUgbXVzdCBiZSBub24tZW1wdHkuCi0g
ICAgaWYgKG5hbWVCZWdpbiA9PSBwb3NpdGlvbikgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIs
IGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9y
dFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJl
Z2luKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobmFtZUJlZ2luID09IHBhcnNp
bmdCdWZmZXIucG9zaXRpb24oKSkgeworICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0
VW5zdXBwb3J0ZWREaXJlY3RpdmUoU3RyaW5nKG5hbWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpIC0gbmFtZUJlZ2luKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQogCi0gICAgbmFtZSA9IFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJlZ2luKTsK
KyAgICBhdXRvIG5hbWUgPSBTdHJpbmcobmFtZUJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9u
KCkgLSBuYW1lQmVnaW4pOwogCi0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJu
IFBhcnNlZERpcmVjdGl2ZSB7IFdURk1vdmUobmFtZSksIHsgfSB9OwogCi0gICAgaWYgKCFza2lw
RXhhY3RseTxVQ2hhciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKSkgewotICAgICAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAg
IG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBv
c2l0aW9uIC0gbmFtZUJlZ2luKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXNr
aXBFeGFjdGx5PENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcikpIHsK
KyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocGFyc2lu
Z0J1ZmZlcik7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0
cmluZyhuYW1lQmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIG5hbWVCZWdpbikpOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIHNraXBXaGlsZTxVQ2hh
ciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKIAotICAgIGNvbnN0IFVDaGFyKiB2
YWx1ZUJlZ2luID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0RpcmVjdGl2ZVZh
bHVlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIHZhbHVlQmVnaW4gPSBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzRGly
ZWN0aXZlVmFsdWVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgaWYgKHBvc2l0aW9u
ICE9IGVuZCkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlVmFsdWVD
aGFyYWN0ZXIobmFtZSwgU3RyaW5nKHZhbHVlQmVnaW4sIGVuZCAtIHZhbHVlQmVnaW4pKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKSB7Cisg
ICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihuYW1l
LCBTdHJpbmcodmFsdWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5lbmQoKSAtIHZhbHVlQmVnaW4pKTsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICAvLyBUaGUgZGlyZWN0
aXZlLXZhbHVlIG1heSBiZSBlbXB0eS4KLSAgICBpZiAodmFsdWVCZWdpbiA9PSBwb3NpdGlvbikK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHZhbHVlQmVnaW4gPT0gcGFyc2luZ0J1ZmZl
ci5wb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gUGFyc2VkRGlyZWN0aXZlIHsgV1RGTW92ZShu
YW1lKSwgeyB9IH07CiAKLSAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZUJlZ2luLCBwb3NpdGlvbiAt
IHZhbHVlQmVnaW4pOwotICAgIHJldHVybiB0cnVlOworICAgIGF1dG8gdmFsdWUgPSBTdHJpbmco
dmFsdWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gdmFsdWVCZWdpbik7CisgICAg
cmV0dXJuIFBhcnNlZERpcmVjdGl2ZSB7IFdURk1vdmUobmFtZSksIFdURk1vdmUodmFsdWUpIH07
CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBv
cnRVUkkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZVJlcG9ydFVSSShQYXJzZWREaXJl
Y3RpdmUmJiBkaXJlY3RpdmUpCiB7CiAgICAgaWYgKCFtX3JlcG9ydFVSSXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAg
ICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZS5uYW1lKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXco
dmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlv
biA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9uICsgdmFsdWUu
bGVuZ3RoKCk7CisgICAgV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoZGlyZWN0aXZlLnZh
bHVlLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5
cGUgPSB0eXBlbmFtZSBkZWNsdHlwZShwYXJzaW5nQnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKIAot
ICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlz
QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAgY29uc3QgVUNoYXIqIHVy
bEJlZ2luID0gcG9zaXRpb247Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNw
YWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgIGF1dG8gdXJsQmVnaW4gPSBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKIAotICAgICAgICBpZiAodXJsQmVnaW4g
PCBwb3NpdGlvbikKLSAgICAgICAgICAgIG1fcmVwb3J0VVJJcy5hcHBlbmQodmFsdWUuc3Vic3Ry
aW5nKHVybEJlZ2luIC0gY2hhcmFjdGVycywgcG9zaXRpb24gLSB1cmxCZWdpbikpOwotICAgIH0K
KyAgICAgICAgICAgIGlmICh1cmxCZWdpbiA8IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSkKKyAg
ICAgICAgICAgICAgICBtX3JlcG9ydFVSSXMuYXBwZW5kKGRpcmVjdGl2ZS52YWx1ZS5zdWJzdHJp
bmcodXJsQmVnaW4gLSBiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gdXJsQmVnaW4p
KTsKKyAgICAgICAgfQorICAgIH0pOwogfQogCiAKIHRlbXBsYXRlPGNsYXNzIENTUERpcmVjdGl2
ZVR5cGU+Ci12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldENTUERp
cmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIHN0ZDo6dW5p
cXVlX3B0cjxDU1BEaXJlY3RpdmVUeXBlPiYgZGlyZWN0aXZlKQordm9pZCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRDU1BEaXJlY3RpdmUoUGFyc2VkRGlyZWN0aXZlJiYg
ZGlyZWN0aXZlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlwZT4mIGV4aXN0aW5nRGly
ZWN0aXZlKQogewotICAgIGlmIChkaXJlY3RpdmUpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0
RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgIGlmIChleGlzdGluZ0RpcmVjdGl2ZSkgewor
ICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoZGlyZWN0aXZlLm5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRpcmVjdGl2ZSA9IG1ha2VVbmlxdWU8Q1NQ
RGlyZWN0aXZlVHlwZT4oKnRoaXMsIG5hbWUsIHZhbHVlKTsKKyAgICBleGlzdGluZ0RpcmVjdGl2
ZSA9IG1ha2VVbmlxdWU8Q1NQRGlyZWN0aXZlVHlwZT4oKnRoaXMsIFdURk1vdmUoZGlyZWN0aXZl
Lm5hbWUpLCBXVEZNb3ZlKGRpcmVjdGl2ZS52YWx1ZSkpOwogfQogCi12b2lkIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgc2FuZGJveFBvbGljeSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdDo6YXBwbHlTYW5kYm94UG9saWN5KFBhcnNlZERpcmVjdGl2ZSYm
IGRpcmVjdGl2ZSkKIHsKICAgICBpZiAobV9yZXBvcnRPbmx5KSB7Ci0gICAgICAgIG1fcG9saWN5
LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKG5hbWUpOworICAgICAgICBt
X3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShkaXJlY3RpdmUu
bmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1faGF2ZVNhbmRib3hQb2xp
Y3kpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOwor
ICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoZGlyZWN0aXZlLm5hbWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1faGF2ZVNhbmRib3hQb2xpY3kgPSB0cnVl
OwogICAgIFN0cmluZyBpbnZhbGlkVG9rZW5zOwotICAgIG1fcG9saWN5LmVuZm9yY2VTYW5kYm94
RmxhZ3MoU2VjdXJpdHlDb250ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koc2FuZGJveFBvbGljeSwg
aW52YWxpZFRva2VucykpOworICAgIG1fcG9saWN5LmVuZm9yY2VTYW5kYm94RmxhZ3MoU2VjdXJp
dHlDb250ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koV1RGTW92ZShkaXJlY3RpdmUudmFsdWUpLCBp
bnZhbGlkVG9rZW5zKSk7CiAgICAgaWYgKCFpbnZhbGlkVG9rZW5zLmlzTnVsbCgpKQogICAgICAg
ICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkU2FuZGJveEZsYWdzKGludmFsaWRUb2tlbnMpOwogfQog
Ci12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldFVwZ3JhZGVJbnNl
Y3VyZVJlcXVlc3RzKGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTGlzdDo6c2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMoUGFyc2VkRGlyZWN0
aXZlJiYgZGlyZWN0aXZlKQogewogICAgIGlmIChtX3JlcG9ydE9ubHkpIHsKLSAgICAgICAgbV9w
b2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUobmFtZSk7CisgICAg
ICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKFdURk1v
dmUoZGlyZWN0aXZlLm5hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV91
cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykgewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNh
dGVEaXJlY3RpdmUobmFtZSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVj
dGl2ZShXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgbV91cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyA9IHRydWU7CiAgICAgbV9wb2xpY3kuc2V0VXBn
cmFkZUluc2VjdXJlUmVxdWVzdHModHJ1ZSk7CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTGlzdDo6c2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKGNvbnN0IFN0
cmluZyYgbmFtZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0
QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKFBhcnNlZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkK
IHsKICAgICBpZiAobV9oYXNCbG9ja0FsbE1peGVkQ29udGVudERpcmVjdGl2ZSkgewotICAgICAg
ICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CisgICAgICAgIG1fcG9s
aWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9oYXNCbG9ja0FsbE1peGVkQ29udGVudERpcmVj
dGl2ZSA9IHRydWU7CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlz
dDo6YWRkRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWRkRGlyZWN0aXZlKFBh
cnNlZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkKIHsKLSAgICBBU1NFUlQoIW5hbWUuaXNFbXB0eSgp
KTsKKyAgICBBU1NFUlQoIWRpcmVjdGl2ZS5uYW1lLmlzRW1wdHkoKSk7CiAKLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVO
YW1lczo6ZGVmYXVsdFNyYykpIHsKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2RlZmF1bHRTcmMp
OworICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZGVmYXVsdFNyYykpIHsKKyAgICAgICAgc2V0
Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdU
Rk1vdmUoZGlyZWN0aXZlKSwgbV9kZWZhdWx0U3JjKTsKICAgICAgICAgbV9wb2xpY3kuYWRkSGFz
aEFsZ29yaXRobXNGb3JJbmxpbmVTY3JpcHRzKG1fZGVmYXVsdFNyYy0+aGFzaEFsZ29yaXRobXNV
c2VkKCkpOwogICAgICAgICBtX3BvbGljeS5hZGRIYXNoQWxnb3JpdGhtc0ZvcklubGluZVN0eWxl
c2hlZXRzKG1fZGVmYXVsdFNyYy0+aGFzaEFsZ29yaXRobXNVc2VkKCkpOwotICAgIH0gZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6c2NyaXB0U3JjKSkgewotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fc2NyaXB0
U3JjKTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzY3JpcHRTcmMpKSB7Cisg
ICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGly
ZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fc2NyaXB0U3JjKTsKICAgICAgICAgbV9wb2xp
Y3kuYWRkSGFzaEFsZ29yaXRobXNGb3JJbmxpbmVTY3JpcHRzKG1fc2NyaXB0U3JjLT5oYXNoQWxn
b3JpdGhtc1VzZWQoKSk7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNyYykpIHsKLSAg
ICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJl
Y3RpdmU+KG5hbWUsIHZhbHVlLCBtX3N0eWxlU3JjKTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpzdHlsZVNyYykpIHsKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9z
dHlsZVNyYyk7CiAgICAgICAgIG1fcG9saWN5LmFkZEhhc2hBbGdvcml0aG1zRm9ySW5saW5lU3R5
bGVzaGVldHMobV9zdHlsZVNyYy0+aGFzaEFsZ29yaXRobXNVc2VkKCkpOwotICAgIH0gZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6b2JqZWN0U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX29iamVjdFNy
Yyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJhbWVTcmMpKSB7CisgICAgfSBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6b2JqZWN0U3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZl
KSwgbV9vYmplY3RTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGly
ZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZVNy
YykpIHsKICAgICAgICAgLy8gRklYTUU6IExvZyB0byBjb25zb2xlICJUaGUgZnJhbWUtc3JjIGRp
cmVjdGl2ZSBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIGNoaWxkLXNyYyBkaXJlY3RpdmUgaW5zdGVh
ZC4iCiAgICAgICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NTc3Mz4uCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9mcmFtZVNyYyk7Ci0gICAgfSBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjppbWdTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1faW1nU3Jj
KTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmb250U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0
aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVl
LCBtX2ZvbnRTcmMpOworICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZyYW1lU3JjKTsK
KyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjppbWdTcmMpKQorICAgICAgICBzZXRD
U1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RG
TW92ZShkaXJlY3RpdmUpLCBtX2ltZ1NyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6OmZvbnRTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZvbnRTcmMpOwog
I2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKLSAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpt
YW5pZmVzdFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9tYW5pZmVzdFNyYyk7CisgICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6Om1hbmlmZXN0U3JjKSkKKyAgICAgICAgc2V0Q1NQ
RGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1v
dmUoZGlyZWN0aXZlKSwgbV9tYW5pZmVzdFNyYyk7CiAjZW5kaWYKLSAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjptZWRpYVNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9tZWRpYVNyYyk7Ci0gICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6Y29ubmVjdFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9j
b25uZWN0U3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjaGlsZFNyYykpCi0gICAgICAgIHNl
dENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihu
YW1lLCB2YWx1ZSwgbV9jaGlsZFNyYyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9ybUFjdGlv
bikpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9mb3JtQWN0aW9uKTsKLSAgICBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZU5hbWVzOjpiYXNlVVJJKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2Jhc2VVUkkpOwotICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1lQW5jZXN0b3JzKSkgeworICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZU5hbWVzOjptZWRpYVNyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1f
bWVkaWFTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZl
Lm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjb25uZWN0U3JjKSkK
KyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3RE
aXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9jb25uZWN0U3JjKTsKKyAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVOYW1lczo6Y2hpbGRTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3Rp
dmUpLCBtX2NoaWxkU3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRp
cmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9ybUFj
dGlvbikpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fZm9ybUFjdGlvbik7CisgICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmJhc2VVUkkpKQorICAgICAgICBzZXRDU1BEaXJl
Y3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShk
aXJlY3RpdmUpLCBtX2Jhc2VVUkkpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpm
cmFtZUFuY2VzdG9ycykpIHsKICAgICAgICAgaWYgKG1fcmVwb3J0T25seSkgewotICAgICAgICAg
ICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUobmFtZSk7
CisgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5
TW9kZShkaXJlY3RpdmUubmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJl
Y3RpdmU+KG5hbWUsIHZhbHVlLCBtX2ZyYW1lQW5jZXN0b3JzKTsKLSAgICB9IGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TmFtZXM6OnBsdWdpblR5cGVzKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1
cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fcGx1Z2luVHlwZXMp
OwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRib3gpKQotICAgICAgICBhcHBseVNhbmRib3hQ
b2xpY3kobmFtZSwgdmFsdWUpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCi0g
ICAgICAgIHBhcnNlUmVwb3J0VVJJKG5hbWUsIHZhbHVlKTsKLSAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVz
Ojp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCi0gICAgICAgIHNldFVwZ3JhZGVJbnNlY3VyZVJl
cXVlc3RzKG5hbWUpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmJsb2NrQWxsTWl4ZWRDb250ZW50
KSkKLSAgICAgICAgc2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKG5hbWUpOworICAgICAg
ICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2
ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZyYW1lQW5jZXN0b3JzKTsKKyAgICB9IGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykpCisgICAgICAgIHNldENTUERpcmVjdGl2
ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0
aXZlKSwgbV9wbHVnaW5UeXBlcyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNh
bmRib3gpKQorICAgICAgICBhcHBseVNhbmRib3hQb2xpY3koV1RGTW92ZShkaXJlY3RpdmUpKTsK
KyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKSkKKyAgICAgICAgcGFy
c2VSZXBvcnRVUkkoV1RGTW92ZShkaXJlY3RpdmUpKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQorICAgICAgICBzZXRVcGdyYWRlSW5z
ZWN1cmVSZXF1ZXN0cyhXVEZNb3ZlKGRpcmVjdGl2ZSkpOworICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpibG9ja0FsbE1peGVkQ29udGVudCkpCisgICAgICAgIHNldEJsb2NrQWxsTWl4
ZWRDb250ZW50RW5hYmxlZChXVEZNb3ZlKGRpcmVjdGl2ZSkpOwogICAgIGVsc2UKLSAgICAgICAg
bV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUobmFtZSk7CisgICAgICAgIG1fcG9s
aWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFdURk1vdmUoZGlyZWN0aXZlLm5hbWUpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9j
c3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Qu
aAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxNiArODks
MTkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlKGNvbnN0IFN0cmluZyYsIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbSk7CiAKLSAgICBib29sIHBhcnNlRGlyZWN0
aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBuYW1lLCBT
dHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIHBhcnNlUmVwb3J0VVJJKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBwYXJzZVBsdWdpblR5cGVzKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBhZGREaXJlY3Rp
dmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIGFw
cGx5U2FuZGJveFBvbGljeShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc2FuZGJv
eFBvbGljeSk7Ci0gICAgdm9pZCBzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhjb25zdCBTdHJp
bmcmIG5hbWUpOwotICAgIHZvaWQgc2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKGNvbnN0
IFN0cmluZyYgbmFtZSk7CisgICAgc3RydWN0IFBhcnNlZERpcmVjdGl2ZSB7CisgICAgICAgIFN0
cmluZyBuYW1lOworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgfTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxQYXJzZWREaXJlY3RpdmU+IHBhcnNlRGly
ZWN0aXZlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOworICAgIHZvaWQgcGFy
c2VSZXBvcnRVUkkoUGFyc2VkRGlyZWN0aXZlJiYpOworICAgIHZvaWQgYWRkRGlyZWN0aXZlKFBh
cnNlZERpcmVjdGl2ZSYmKTsKKyAgICB2b2lkIGFwcGx5U2FuZGJveFBvbGljeShQYXJzZWREaXJl
Y3RpdmUmJik7CisgICAgdm9pZCBzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhQYXJzZWREaXJl
Y3RpdmUmJik7CisgICAgdm9pZCBzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQoUGFyc2Vk
RGlyZWN0aXZlJiYpOwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIENTUERpcmVjdGl2ZVR5cGU+Ci0g
ICAgdm9pZCBzZXRDU1BEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlwZT4mKTsKKyAgICB2b2lkIHNl
dENTUERpcmVjdGl2ZShQYXJzZWREaXJlY3RpdmUmJiwgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVj
dGl2ZVR5cGU+Jik7CiAKICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0
aXZlKiBvcGVyYXRpdmVEaXJlY3RpdmUoQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERp
cmVjdGl2ZSopIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2
ZS5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRl
bnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDEwICszMSwxMiBAQAogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3QuaCIKICNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpc01lZGlhVHlwZUNoYXJh
Y3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBi
b29sIGlzTWVkaWFUeXBlQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4g
IWlzQVNDSUlTcGFjZShjKSAmJiBjICE9ICcvJzsKIH0KQEAgLTUyLDYyICs1NCw2MSBAQCBib29s
IENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjCiAKIHZvaWQgQ29udGVudFNlY3Vy
aXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlOjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29u
c3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGJlZ2lu
ICsgdmFsdWUubGVuZ3RoKCk7Ci0KICAgICAvLyAncGx1Z2luLXR5cGVzIF9fX187JyBPUiAncGx1
Z2luLXR5cGVzOycKICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRpcmVjdGl2
ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXModmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAg
IC8vIF9fX19fIE9SIF9fX19fbWltZTEvbWltZTEKLSAgICAgICAgLy8gXiAgICAgICAgXgotICAg
ICAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAg
ICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
Ly8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8gXgotICAgICAgICBiZWdpbiA9
IHBvc2l0aW9uOwotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc01lZGlhVHlwZUNo
YXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxp
c3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3Np
dGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICBza2lwV2hpbGU8VUNoYXIsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsK
KyAgICBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2lu
Z0J1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlwZW5hbWUgZGVjbHR5
cGUocGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7CiAKLSAgICAgICAgLy8gbWltZTEvbWlt
ZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8gICAgICBeCi0gICAgICAgIGlmICghc2tpcEV4YWN0
bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJykpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxV
Q2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVj
dGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2lu
LCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQor
ICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsK
KyAgICAgICAgICAgIC8vIF9fX19fIE9SIF9fX19fbWltZTEvbWltZTEKKyAgICAgICAgICAgIC8v
IF4gICAgICAgIF4KKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJ
U3BhY2U+KHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRF
bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIG1pbWUxL21p
bWUxIG1pbWUyL21pbWUyCisgICAgICAgICAgICAvLyBeCisgICAgICAgICAgICBhdXRvIGJlZ2lu
ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAgICAgaWYgKCFza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcikpIHsK
KyAgICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNl
PihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5
KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNo
YXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CisKKyAgICAgICAgICAgIC8vIG1pbWUxL21pbWUxIG1p
bWUyL21pbWUyCisgICAgICAgICAgICAvLyAgICAgIF4KKyAgICAgICAgICAgIGlmICghc2tpcEV4
YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy8nKSkgeworICAgICAgICAgICAg
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNpbmdCdWZm
ZXIpOworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZh
bGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBi
ZWdpbikpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMgorICAgICAgICAgICAgLy8gICAgICAg
XgorICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlw
ZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICBza2lwV2hpbGU8
Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVz
KFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNraXBXaGls
ZTxDaGFyYWN0ZXJUeXBlLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CisK
KyAgICAgICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyIE9SIG1pbWUxL21pbWUxICBP
UiBtaW1lMS9taW1lMS9lcnJvcgorICAgICAgICAgICAgLy8gICAgICAgICAgICBeICAgICAgICAg
ICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgaWYgKHBhcnNp
bmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzTm90QVNDSUlTcGFjZSgqcGFy
c2luZ0J1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJlY3Rp
dmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwg
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcGx1Z2luVHlwZXMuYWRkKFN0cmlu
ZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pKTsKIAotICAgICAgICAv
LyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMgotICAgICAgICAvLyAgICAgICBeCi0gICAgICAgIGlm
ICghc2tpcEV4YWN0bHk8VUNoYXIsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5k
KSkgewotICAgICAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0
aW9uLCBlbmQpOwotICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydElu
dmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQo
KSB8fCBpc0FTQ0lJU3BhY2UoKnBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSkpOwogICAgICAgICB9
Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9u
LCBlbmQpOwotCi0gICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyIE9SIG1pbWUxL21p
bWUxICBPUiBtaW1lMS9taW1lMS9lcnJvcgotICAgICAgICAvLyAgICAgICAgICAgIF4gICAgICAg
ICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICBeCi0gICAgICAgIGlmIChwb3NpdGlv
biA8IGVuZCAmJiBpc05vdEFTQ0lJU3BhY2UoKnBvc2l0aW9uKSkgewotICAgICAgICAgICAgc2tp
cFdoaWxlPFVDaGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICAg
ICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJp
bmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0gICAgICAgIG1fcGx1Z2luVHlwZXMuYWRkKFN0cmluZyhiZWdpbiwgcG9zaXRpb24g
LSBiZWdpbikpOwotCi0gICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNw
YWNlKCpwb3NpdGlvbikpOwotICAgIH0KKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2
NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC01Niw0OCArNTcsNDEgQEAgc3RhdGljIGJvb2wgaXNDU1BEaXJl
Y3RpdmVOYW1lKGNvbnN0IFN0cgogICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNyYyk7CiB9CiAK
LXN0YXRpYyBib29sIGlzU291cmNlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1NvdXJjZUNoYXJhY3RlcihDaGFyYWN0ZXJU
eXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7CiB9CiAKLXN0YXRpYyBib29s
IGlzSG9zdENoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gc3RhdGljIGJvb2wgaXNIb3N0Q2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICBy
ZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICctJzsKIH0KIAotc3RhdGljIGJv
b2wgaXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1BhdGhDb21wb25lbnRDaGFyYWN0ZXIoQ2hhcmFj
dGVyVHlwZSBjKQogewogICAgIHJldHVybiBjICE9ICc/JyAmJiBjICE9ICcjJzsKIH0KIAotc3Rh
dGljIGJvb2wgaXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzU2NoZW1lQ29udGludWF0aW9u
Q2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVt
ZXJpYyhjKSB8fCBjID09ICcrJyB8fCBjID09ICctJyB8fCBjID09ICcuJzsKIH0KIAotc3RhdGlj
IGJvb2wgaXNOb3RDb2xvbk9yU2xhc2goVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBib29sIGlzTm90Q29sb25PclNsYXNoKENoYXJhY3RlclR5cGUgYykK
IHsKICAgICByZXR1cm4gYyAhPSAnOicgJiYgYyAhPSAnLyc7CiB9CiAKLXN0YXRpYyBib29sIGlz
U291cmNlTGlzdE5vbmUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzU291cmNlTGlzdE5vbmUoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAgIGF1dG8gY2hhcmFjdGVy
cyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0
IFVDaGFyKiBiZWdpbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGNoYXJh
Y3RlcnMgKyB2YWx1ZS5sZW5ndGgoKTsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFj
ZT4oYmVnaW4sIGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFj
ZT4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsK
LSAgICBza2lwV2hpbGU8VUNoYXIsIGlzU291cmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsK
LSAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBwb3NpdGlvbiAt
IGJlZ2luLCAiJ25vbmUnIikpCisgICAgaWYgKCFza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNl
KHBhcnNpbmdCdWZmZXIsICInbm9uZSciKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
c2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgIGlmIChw
b3NpdGlvbiAhPSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBza2lwV2hpbGU8Q2hh
cmFjdGVyVHlwZSwgaXNBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKICAgICAKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gcGFyc2luZ0J1ZmZlci5hdEVuZCgpOwogfQogCiBDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
KGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgcG9saWN5LCBjb25zdCBTdHJpbmcmIGRpcmVj
dGl2ZU5hbWUpCkBAIC0xMDgsMTIgKzEwMiwxNCBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0OjpDb250ZW50CiAKIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6
cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoaXNTb3VyY2VMaXN0Tm9uZSh2
YWx1ZSkpIHsKLSAgICAgICAgbV9pc05vbmUgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOwotICAgIHBhcnNlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5n
dGgoKSk7CisgICAgV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRv
IHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgaWYgKGlzU291cmNlTGlzdE5vbmUocGFyc2luZ0J1
ZmZlcikpIHsKKyAgICAgICAgICAgIG1faXNOb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHBhcnNlKHBhcnNpbmdCdWZmZXIpOworICAgIH0pOwog
fQogCiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OmlzUHJvdG9jb2xBbGxv
d2VkQnlTdGFyKGNvbnN0IFVSTCYgdXJsKSBjb25zdApAQCAtMTYwLDMwICsxNTYsMjggQEAgYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjptYQogLy8gc291cmNlLWxpc3QgICAg
ICAgPSAqV1NQIFsgc291cmNlICooIDEqV1NQIHNvdXJjZSApICpXU1AgXQogLy8gICAgICAgICAg
ICAgICAgICAgLyAqV1NQICInbm9uZSciICpXU1AKIC8vCi12b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhcnNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVu
ZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgQ29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdDo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiBwYXJzaW5nQnVmZmVyKQogewotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwot
Ci0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uID09IGVu
ZCkKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsK
KyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1
ZmZlcik7CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgY29uc3QgVUNoYXIqIGJlZ2luU291cmNlID0gcG9zaXRpb247Ci0g
ICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQp
OworICAgICAgICBhdXRvIGJlZ2luU291cmNlID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwor
ICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBhcnNp
bmdCdWZmZXIpOwogCiAgICAgICAgIFN0cmluZyBzY2hlbWUsIGhvc3QsIHBhdGg7CiAgICAgICAg
IE9wdGlvbmFsPHVpbnQxNl90PiBwb3J0OwogICAgICAgICBib29sIGhvc3RIYXNXaWxkY2FyZCA9
IGZhbHNlOwogICAgICAgICBib29sIHBvcnRIYXNXaWxkY2FyZCA9IGZhbHNlOwogCi0gICAgICAg
IGlmIChwYXJzZU5vbmNlU291cmNlKGJlZ2luU291cmNlLCBwb3NpdGlvbikpCisgICAgICAgIGlm
IChwYXJzZU5vbmNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblNvdXJjZSwgcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpIH0pKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgaWYgKHBhcnNlSGFzaFNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24pKQorICAgICAgICBp
ZiAocGFyc2VIYXNoU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblNvdXJjZSwgcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpIH0pKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgaWYgKHBhcnNlU291cmNlKGJlZ2luU291cmNlLCBwb3NpdGlvbiwgc2NoZW1lLCBob3N0LCBw
b3J0LCBwYXRoLCBob3N0SGFzV2lsZGNhcmQsIHBvcnRIYXNXaWxkY2FyZCkpIHsKKyAgICAgICAg
aWYgKHBhcnNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblNvdXJjZSwgcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpIH0sIHNjaGVtZSwgaG9zdCwgcG9ydCwgcGF0aCwgaG9zdEhhc1dp
bGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKSB7CiAgICAgICAgICAgICAvLyBXaWxkY2FyZCBob3N0
cyBhbmQga2V5d29yZCBzb3VyY2VzICgnc2VsZicsICd1bnNhZmUtaW5saW5lJywKICAgICAgICAg
ICAgIC8vIGV0Yy4pIGFyZW4ndCBzdG9yZWQgaW4gbV9saXN0LCBidXQgYXMgYXR0cmlidXRlcyBv
biB0aGUgc291cmNlCiAgICAgICAgICAgICAvLyBsaXN0IGl0c2VsZi4KQEAgLTE5Myw5ICsxODcs
OSBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAgICAgICAgICAg
ICAgICAgbV9wb2xpY3kucmVwb3J0RGlyZWN0aXZlQXNTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0
aXZlTmFtZSwgaG9zdCk7CiAgICAgICAgICAgICBtX2xpc3QuYXBwZW5kKENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZShtX3BvbGljeSwgc2NoZW1lLCBob3N0LCBwb3J0LCBwYXRoLCBob3N0SGFz
V2lsZGNhcmQsIHBvcnRIYXNXaWxkY2FyZCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IG1fcG9saWN5LnJlcG9ydEludmFsaWRTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0aXZlTmFtZSwg
U3RyaW5nKGJlZ2luU291cmNlLCBwb3NpdGlvbiAtIGJlZ2luU291cmNlKSk7CisgICAgICAgICAg
ICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkU291cmNlRXhwcmVzc2lvbihtX2RpcmVjdGl2ZU5hbWUs
IFN0cmluZyhiZWdpblNvdXJjZSwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5Tb3Vy
Y2UpKTsKIAotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8IGlzQVNDSUlTcGFjZSgq
cG9zaXRpb24pKTsKKyAgICAgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCBpc0FT
Q0lJU3BhY2UoKnBhcnNpbmdCdWZmZXIpKTsKICAgICB9CiAgICAgCiAgICAgbV9saXN0LnNocmlu
a1RvRml0KCk7CkBAIC0yMDUsMTAzICsxOTksMTAzIEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGEKIC8vICAgICAgICAgICAgICAgICAgIC8gKCBbIHNjaGVtZSAiOi8v
IiBdIGhvc3QgWyBwb3J0IF0gWyBwYXRoIF0gKQogLy8gICAgICAgICAgICAgICAgICAgLyAiJ3Nl
bGYnIgogLy8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTb3Vy
Y2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNjaGVtZSwg
U3RyaW5nJiBob3N0LCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIFN0cmluZyYgcGF0aCwgYm9v
bCYgaG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNhcmQpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6
OnBhcnNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1
ZmZlciwgU3RyaW5nJiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBw
b3J0LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dp
bGRjYXJkKQogewotICAgIGlmIChiZWdpbiA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIu
YXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIidub25lJyIpKQorICAgIGlmIChz
a2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICInbm9uZSciKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2lu
ID09ICcqJykgeworICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEg
JiYgKnBhcnNpbmdCdWZmZXIgPT0gJyonKSB7CiAgICAgICAgIG1fYWxsb3dTdGFyID0gdHJ1ZTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIidzZWxmJyIpKSB7CisgICAgaWYgKHNr
aXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgIidzZWxmJyIpKSB7CiAg
ICAgICAgIG1fYWxsb3dTZWxmID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdp
biwgIid1bnNhZmUtaW5saW5lJyIpKSB7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJ
SUNhc2UocGFyc2luZ0J1ZmZlciwgIid1bnNhZmUtaW5saW5lJyIpKSB7CiAgICAgICAgIG1fYWxs
b3dJbmxpbmUgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAtIGJlZ2luLCAiJ3Vuc2Fm
ZS1ldmFsJyIpKSB7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2lu
Z0J1ZmZlciwgIid1bnNhZmUtZXZhbCciKSkgewogICAgICAgICBtX2FsbG93RXZhbCA9IHRydWU7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlv
biA9IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbkhvc3QgPSBiZWdpbjsKLSAgICBjb25z
dCBVQ2hhciogYmVnaW5QYXRoID0gZW5kOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpblBvcnQgPSBu
dWxscHRyOworICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAg
YXV0byBiZWdpbkhvc3QgPSBiZWdpbjsKKyAgICBhdXRvIGJlZ2luUGF0aCA9IHBhcnNpbmdCdWZm
ZXIuZW5kKCk7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW5Qb3J0ID0gbnVsbHB0cjsK
IAotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBlbmQp
OworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdENvbG9uT3JTbGFzaD4ocGFyc2lu
Z0J1ZmZlcik7CiAKLSAgICBpZiAocG9zaXRpb24gPT0gZW5kKSB7CisgICAgaWYgKHBhcnNpbmdC
dWZmZXIuYXRFbmQoKSkgewogICAgICAgICAvLyBob3N0CiAgICAgICAgIC8vICAgICBeCi0gICAg
ICAgIHJldHVybiBwYXJzZUhvc3QoYmVnaW5Ib3N0LCBwb3NpdGlvbiwgaG9zdCwgaG9zdEhhc1dp
bGRjYXJkKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlSG9zdChTdHJpbmdQYXJzaW5nQnVmZmVyIHsg
YmVnaW5Ib3N0LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgfSwgaG9zdCwgaG9zdEhhc1dpbGRj
YXJkKTsKICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICcv
JykgeworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAq
cGFyc2luZ0J1ZmZlciA9PSAnLycpIHsKICAgICAgICAgLy8gaG9zdC9wYXRoIHx8IGhvc3QvIHx8
IC8KICAgICAgICAgLy8gICAgIF4gICAgICAgICAgICBeICAgIF4KLSAgICAgICAgcmV0dXJuIHBh
cnNlSG9zdChiZWdpbkhvc3QsIHBvc2l0aW9uLCBob3N0LCBob3N0SGFzV2lsZGNhcmQpICYmIHBh
cnNlUGF0aChwb3NpdGlvbiwgZW5kLCBwYXRoKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlSG9zdChT
dHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5Ib3N0LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkg
fSwgaG9zdCwgaG9zdEhhc1dpbGRjYXJkKSAmJiBwYXJzZVBhdGgocGFyc2luZ0J1ZmZlciwgcGF0
aCk7CiAgICAgfQogCi0gICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSAnOicp
IHsKLSAgICAgICAgaWYgKGVuZCAtIHBvc2l0aW9uID09IDEpIHsKKyAgICBpZiAocGFyc2luZ0J1
ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJzonKSB7
CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEpIHsKICAg
ICAgICAgICAgIC8vIHNjaGVtZToKICAgICAgICAgICAgIC8vICAgICAgIF4KLSAgICAgICAgICAg
IHJldHVybiBwYXJzZVNjaGVtZShiZWdpbiwgcG9zaXRpb24sIHNjaGVtZSk7CisgICAgICAgICAg
ICByZXR1cm4gcGFyc2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luLCBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCkgfSwgc2NoZW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChw
b3NpdGlvblsxXSA9PSAnLycpIHsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbMV0gPT0gJy8n
KSB7CiAgICAgICAgICAgICAvLyBzY2hlbWU6Ly9ob3N0IHx8IHNjaGVtZTovLwogICAgICAgICAg
ICAgLy8gICAgICAgXiAgICAgICAgICAgICAgICBeCi0gICAgICAgICAgICBpZiAoIXBhcnNlU2No
ZW1lKGJlZ2luLCBwb3NpdGlvbiwgc2NoZW1lKQotICAgICAgICAgICAgICAgIHx8ICFza2lwRXhh
Y3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJzonKQotICAgICAgICAgICAgICAgIHx8ICFza2lw
RXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKQotICAgICAgICAgICAgICAgIHx8ICFz
a2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKSkKKyAgICAgICAgICAgIGlmICgh
cGFyc2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBv
c2l0aW9uKCkgfSwgc2NoZW1lKQorICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseTxDaGFy
YWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnOicpCisgICAgICAgICAgICAgICAgfHwgIXNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJykKKyAgICAgICAgICAgICAg
ICB8fCAhc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy8nKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gPT0g
ZW5kKQorICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBiZWdpbkhvc3QgPSBwb3NpdGlvbjsKLSAg
ICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBl
bmQpOworICAgICAgICAgICAgYmVnaW5Ib3N0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwor
ICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90Q29sb25PclNsYXNoPihw
YXJzaW5nQnVmZmVyKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAm
JiAqcG9zaXRpb24gPT0gJzonKSB7CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAnOicpIHsKICAgICAgICAgICAg
IC8vIGhvc3Q6cG9ydCB8fCBzY2hlbWU6Ly9ob3N0OnBvcnQKICAgICAgICAgICAgIC8vICAgICBe
ICAgICAgICAgICAgICAgICAgICAgXgotICAgICAgICAgICAgYmVnaW5Qb3J0ID0gcG9zaXRpb247
Ci0gICAgICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJyk7CisgICAg
ICAgICAgICBiZWdpblBvcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAg
ICBza2lwVW50aWw8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy8nKTsKICAgICAgICAg
fQogICAgIH0KIAotICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gJy8nKSB7
CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJz
aW5nQnVmZmVyID09ICcvJykgewogICAgICAgICAvLyBzY2hlbWU6Ly9ob3N0L3BhdGggfHwgc2No
ZW1lOi8vaG9zdDpwb3J0L3BhdGgKICAgICAgICAgLy8gICAgICAgICAgICAgIF4gICAgICAgICAg
ICAgICAgICAgICAgICAgIF4KLSAgICAgICAgaWYgKHBvc2l0aW9uID09IGJlZ2luSG9zdCkKKyAg
ICAgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA9PSBiZWdpbkhvc3QpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgYmVnaW5QYXRoID0gcG9zaXRpb247CisgICAg
ICAgIGJlZ2luUGF0aCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKICAgICB9CiAKLSAgICBp
ZiAoIXBhcnNlSG9zdChiZWdpbkhvc3QsIGJlZ2luUG9ydCA/IGJlZ2luUG9ydCA6IGJlZ2luUGF0
aCwgaG9zdCwgaG9zdEhhc1dpbGRjYXJkKSkKKyAgICBpZiAoIXBhcnNlSG9zdChTdHJpbmdQYXJz
aW5nQnVmZmVyIHsgYmVnaW5Ib3N0LCBiZWdpblBvcnQgPyBiZWdpblBvcnQgOiBiZWdpblBhdGgg
fSwgaG9zdCwgaG9zdEhhc1dpbGRjYXJkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKCFiZWdpblBvcnQpCiAgICAgICAgIHBvcnQgPSBXVEY6Om51bGxvcHQ7CiAgICAgZWxzZSB7
Ci0gICAgICAgIGlmICghcGFyc2VQb3J0KGJlZ2luUG9ydCwgYmVnaW5QYXRoLCBwb3J0LCBwb3J0
SGFzV2lsZGNhcmQpKQorICAgICAgICBpZiAoIXBhcnNlUG9ydChTdHJpbmdQYXJzaW5nQnVmZmVy
IHsgYmVnaW5Qb3J0LCBiZWdpblBhdGggfSwgcG9ydCwgcG9ydEhhc1dpbGRjYXJkKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoYmVnaW5QYXRoICE9IGVuZCkg
ewotICAgICAgICBpZiAoIXBhcnNlUGF0aChiZWdpblBhdGgsIGVuZCwgcGF0aCkpCisgICAgaWYg
KGJlZ2luUGF0aCAhPSBwYXJzaW5nQnVmZmVyLmVuZCgpKSB7CisgICAgICAgIGlmICghcGFyc2VQ
YXRoKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblBhdGgsIHBhcnNpbmdCdWZmZXIuZW5kKCkg
fSwgcGF0aCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0zMTEsMjUg
KzMwNSwyNSBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAvLyAg
ICAgICAgICAgICAgICAgICAgIDsgPHNjaGVtZT4gcHJvZHVjdGlvbiBmcm9tIFJGQyAzOTg2CiAv
LyBzY2hlbWUgICAgICA9IEFMUEhBICooIEFMUEhBIC8gRElHSVQgLyAiKyIgLyAiLSIgLyAiLiIg
KQogLy8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTY2hlbWUo
Y29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNjaGVtZSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdDo6cGFyc2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiBwYXJzaW5nQnVmZmVyLCBTdHJpbmcmIHNjaGVtZSkKIHsKLSAgICBBU1NFUlQoYmVnaW4gPD0g
ZW5kKTsKKyAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZm
ZXIuZW5kKCkpOwogICAgIEFTU0VSVChzY2hlbWUuaXNFbXB0eSgpKTsKIAotICAgIGlmIChiZWdp
biA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47CisgICAgYXV0byBi
ZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKIAotICAgIGlmICghc2tpcEV4YWN0bHk8
VUNoYXIsIGlzQVNDSUlBbHBoYT4ocG9zaXRpb24sIGVuZCkpCisgICAgaWYgKCFza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJQWxwaGE+KHBhcnNpbmdCdWZmZXIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzU2NoZW1lQ29udGludWF0aW9u
Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgaWYg
KHBvc2l0aW9uICE9IGVuZCkKKyAgICBpZiAoIXBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2NoZW1lID0gU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdp
bik7CisgICAgc2NoZW1lID0gU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkg
LSBiZWdpbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMzNyw5MSArMzMxLDg5IEBAIGJv
b2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGEKIC8vICAgICAgICAgICAgICAg
ICAgIC8gIioiCiAvLyBob3N0LWNoYXIgICAgICAgICA9IEFMUEhBIC8gRElHSVQgLyAiLSIKIC8v
Ci1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSG9zdChjb25zdCBV
Q2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhh
c1dpbGRjYXJkKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhvc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNX
aWxkY2FyZCkKIHsKLSAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKKyAgICBBU1NFUlQocGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIuZW5kKCkpOwogICAgIEFTU0VSVCho
b3N0LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFob3N0SGFzV2lsZGNhcmQpOwogCi0gICAgaWYg
KGJlZ2luID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLQotICAg
IGlmIChza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJyonKSkgeworICAgIGlmIChz
a2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnKicpKSB7CiAgICAgICAg
IGhvc3RIYXNXaWxkY2FyZCA9IHRydWU7CiAKLSAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkK
KyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcu
JykpCisgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZl
ciwgJy4nKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjb25zdCBV
Q2hhciogaG9zdEJlZ2luID0gcG9zaXRpb247CisgICAgYXV0byBob3N0QmVnaW4gPSBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCk7CiAKLSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAg
ICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5k
KSkKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsK
KyAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc0hvc3RDaGFyYWN0ZXI+
KHBhcnNpbmdCdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHNr
aXBXaGlsZTxVQ2hhciwgaXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAg
c2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzSG9zdENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7
CiAKLSAgICAgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICFza2lwRXhhY3RseTxVQ2hhcj4ocG9z
aXRpb24sIGVuZCwgJy4nKSkKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpICYmICFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVy
LCAnLicpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEFTU0VSVChw
b3NpdGlvbiA9PSBlbmQpOwotICAgIGhvc3QgPSBTdHJpbmcoaG9zdEJlZ2luLCBlbmQgLSBob3N0
QmVnaW4pOworICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpOworICAgIGhvc3QgPSBT
dHJpbmcoaG9zdEJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBob3N0QmVnaW4pOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3Q6OnBhcnNlUGF0aChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmlu
ZyYgcGF0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQYXRoKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlciwgU3RyaW5nJiBwYXRoKQogewotICAgIEFTU0VSVChi
ZWdpbiA8PSBlbmQpOworICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPD0gcGFy
c2luZ0J1ZmZlci5lbmQoKSk7CiAgICAgQVNTRVJUKHBhdGguaXNFbXB0eSgpKTsKICAgICAKLSAg
ICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlz
UGF0aENvbXBvbmVudENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBiZWdpbiA9
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKICAgICAvLyBwYXRoL3Rv
L2ZpbGUuanM/cXVlcnk9c3RyaW5nIHx8IHBhdGgvdG8vZmlsZS5qcyNhbmNob3IKICAgICAvLyAg
ICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLSAgICBpZiAo
cG9zaXRpb24gPCBlbmQpCi0gICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRQYXRoQ2hhcmFj
dGVyKG1fZGlyZWN0aXZlTmFtZSwgU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdpbiksICpwb3NpdGlv
bik7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKQorICAg
ICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUGF0aENoYXJhY3RlcihtX2RpcmVjdGl2ZU5hbWUs
IFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5lbmQoKSAtIGJlZ2luKSwgKnBhcnNpbmdCdWZm
ZXIpOwogICAgIAotICAgIHBhdGggPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nKGJl
Z2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7CisgICAgcGF0aCA9IGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CiAg
ICAgCi0gICAgQVNTRVJUKHBvc2l0aW9uIDw9IGVuZCk7Ci0gICAgQVNTRVJUKHBvc2l0aW9uID09
IGVuZCB8fCAoKnBvc2l0aW9uID09ICcjJyB8fCAqcG9zaXRpb24gPT0gJz8nKSk7CisgICAgQVNT
RVJUKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsKKyAg
ICBBU1NFUlQocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICgqcGFyc2luZ0J1ZmZlciA9PSAnIycg
fHwgKnBhcnNpbmdCdWZmZXIgPT0gJz8nKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIHBv
cnQgICAgICAgICAgICAgID0gIjoiICggMSpESUdJVCAvICIqIiApCiAvLwotYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBj
b25zdCBVQ2hhciogZW5kLCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIGJvb2wmIHBvcnRIYXNX
aWxkY2FyZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQb3J0KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlciwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29s
JiBwb3J0SGFzV2lsZGNhcmQpCiB7Ci0gICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CisgICAgQVNT
RVJUKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsKICAg
ICBBU1NFUlQoIXBvcnQpOwogICAgIEFTU0VSVCghcG9ydEhhc1dpbGRjYXJkKTsKICAgICAKLSAg
ICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihiZWdpbiwgZW5kLCAnOicpKQorICAgIGlmICghc2tp
cEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJzonKSkKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgCi0gICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICBpZiAo
cGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAg
aWYgKGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2luID09ICcqJykgeworICAgIGlmIChwYXJzaW5n
QnVmZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJyonKSB7
CiAgICAgICAgIHBvcnQgPSBXVEY6Om51bGxvcHQ7CiAgICAgICAgIHBvcnRIYXNXaWxkY2FyZCA9
IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBjb25zdCBVQ2hh
ciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlEaWdpdD4o
cG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBiZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24o
KTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSURpZ2l0PihwYXJzaW5nQnVm
ZmVyKTsKICAgICAKLSAgICBpZiAocG9zaXRpb24gIT0gZW5kKQorICAgIGlmICghcGFyc2luZ0J1
ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgYm9vbCBvazsK
LSAgICBpbnQgcG9ydEludCA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChiZWdpbiwgZW5kIC0gYmVn
aW4sICZvayk7CisgICAgaW50IHBvcnRJbnQgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoYmVnaW4s
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luLCAmb2spOwogICAgIGlmIChwb3J0SW50
IDwgMCB8fCBwb3J0SW50ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcG9ydCA9IHBvcnRJbnQ7CkBAIC00MzEsNDQgKzQy
Myw0MiBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAvLyBNYXRj
aCBCbGluaydzIGJlaGF2aW9yIG9mIGFsbG93aW5nIGFuIGVxdWFsIHNpZ24gdG8gYXBwZWFyIGFu
eXdoZXJlIGluIHRoZSB2YWx1ZSBvZiB0aGUgbm9uY2UKIC8vIGV2ZW4gdGhvdWdoIHRoaXMgZG9l
cyBub3QgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IExldmVs
IDMgc3BlYy4sCiAvLyA8aHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1jc3AvPiAoMjkg
RmVicnVhcnkgMjAxNikuCi1zdGF0aWMgYm9vbCBpc05vbmNlQ2hhcmFjdGVyKFVDaGFyIGMpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc05vbmNlQ2hhcmFj
dGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNCYXNlNjRPckJhc2U2NFVSTENo
YXJhY3RlcihjKSB8fCBjID09ICc9JzsKIH0KIAogLy8gbm9uY2Utc291cmNlICAgID0gIidub25j
ZS0iIG5vbmNlLXZhbHVlICInIgogLy8gbm9uY2UtdmFsdWUgICAgID0gYmFzZTY0LXZhbHVlCi1i
b29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlTm9uY2VTb3VyY2UoY29u
c3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZU5v
bmNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZl
cikKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBub25jZVByZWZpeExlbmd0aCA9IDc7Ci0gICAgaWYg
KCFTdHJpbmdWaWV3KGJlZ2luLCBlbmQgLSBiZWdpbikuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlD
YXNlKCInbm9uY2UtIikpCisgICAgaWYgKCFza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBh
cnNpbmdCdWZmZXIsICInbm9uY2UtIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25z
dCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbiArIG5vbmNlUHJlZml4TGVuZ3RoOwotICAgIGNvbnN0
IFVDaGFyKiBiZWdpbk5vbmNlVmFsdWUgPSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8VUNoYXIs
IGlzTm9uY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotICAgIGlmIChwb3NpdGlvbiA+PSBl
bmQgfHwgcG9zaXRpb24gPT0gYmVnaW5Ob25jZVZhbHVlIHx8ICpwb3NpdGlvbiAhPSAnXCcnKQor
CisgICAgYXV0byBiZWdpbk5vbmNlVmFsdWUgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7Cisg
ICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm9uY2VDaGFyYWN0ZXI+KHBhcnNpbmdCdWZm
ZXIpOworICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgcGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpID09IGJlZ2luTm9uY2VWYWx1ZSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAnXCcnKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9ub25jZXMuYWRkKFN0cmluZyhiZWdpbk5vbmNlVmFs
dWUsIHBvc2l0aW9uIC0gYmVnaW5Ob25jZVZhbHVlKSk7CisgICAgbV9ub25jZXMuYWRkKFN0cmlu
ZyhiZWdpbk5vbmNlVmFsdWUsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luTm9uY2VW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBoYXNoLXNvdXJjZSAgICA9ICInIiBo
YXNoLWFsZ29yaXRobSAiLSIgYmFzZTY0LXZhbHVlICInIgogLy8gaGFzaC1hbGdvcml0aG0gPSAi
c2hhMjU2IiAvICJzaGEzODQiIC8gInNoYTUxMiIKIC8vIGJhc2U2NC12YWx1ZSAgPSAxKiggQUxQ
SEEgLyBESUdJVCAvICIrIiAvICIvIiAvICItIiAvICJfIiApKjIoICI9IiApCi1ib29sIENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZShjb25zdCBVQ2hhciog
YmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZShT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAg
aWYgKGJlZ2luID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAg
ICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnXCcnKSkKKyAgICBpZiAo
IXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICdcJycpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdChwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdChwYXJzaW5nQnVmZmVyKTsKICAgICBpZiAoIWRpZ2VzdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKHBvc2l0aW9uID49IGVuZCB8fCAqcG9zaXRpb24gIT0gJ1wnJykK
KyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICpwYXJzaW5nQnVmZmVyICE9ICdcJycp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkaWdlc3QtPnZhbHVlLnNpemUoKSA+
IENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2g6Om1heGltdW1EaWdlc3RMZW5ndGgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDE5ICs1NSwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc05vbmUoKSBjb25zdCB7IHJldHVy
biBtX2lzTm9uZTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgcGFyc2UoY29uc3QgVUNoYXIqIGJl
Z2luLCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiB2b2lkIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOwogCi0g
ICAgYm9vbCBwYXJzZVNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQs
IFN0cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwg
U3RyaW5nJiBwYXRoLCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBvcnRIYXNXaWxkY2Fy
ZCk7Ci0gICAgYm9vbCBwYXJzZVNjaGVtZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFy
KiBlbmQsIFN0cmluZyYgc2NoZW1lKTsKLSAgICBib29sIHBhcnNlSG9zdChjb25zdCBVQ2hhciog
YmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhhc1dpbGRj
YXJkKTsKLSAgICBib29sIHBhcnNlUG9ydChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFy
KiBlbmQsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsK
LSAgICBib29sIHBhcnNlUGF0aChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQs
IFN0cmluZyYgcGF0aCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9v
bCBwYXJzZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+LCBTdHJpbmcm
IHNjaGVtZSwgU3RyaW5nJiBob3N0LCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIFN0cmluZyYg
cGF0aCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNhcmQpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VTY2hlbWUoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiwgU3RyaW5nJiBzY2hlbWUpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VIb3N0KFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4sIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJk
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlUG9ydChT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+LCBPcHRpb25hbDx1aW50MTZfdD4mIHBv
cnQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gYm9vbCBwYXJzZVBhdGgoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiwgU3RyaW5nJiBwYXRoKTsKIAotICAgIGJvb2wgcGFyc2VOb25jZVNvdXJjZShjb25zdCBVQ2hh
ciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGJvb2wgcGFyc2VOb25jZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJh
Y3RlclR5cGU+KTsKIAogICAgIGJvb2wgaXNQcm90b2NvbEFsbG93ZWRCeVN0YXIoY29uc3QgVVJM
JikgY29uc3Q7CiAKLSAgICBib29sIHBhcnNlSGFzaFNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4s
IGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGJvb2wgcGFyc2VIYXNoU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4p
OwogCiAgICAgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBtX3BvbGljeTsKICAgICBWZWN0
b3I8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlPiBtX2xpc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAK
ICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC04MCwxOSArODEsMTkgQEAgU3RyaW5nIFNWR0FuZ2xlVmFsdWU6OnZhbHVlQXNT
dHJpbmcoKSBjbwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5n
bGVUeXBlKGNvbnN0IENoYXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5k
KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBTVkdBbmds
ZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBzd2l0Y2ggKGVuZCAtIHB0cikgeworICAgIHN3
aXRjaCAocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSkgewogICAgIGNhc2UgMDoKICAg
ICAgICAgcmV0dXJuIFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfVU5TUEVDSUZJRUQ7CiAg
ICAgY2FzZSAzOgotICAgICAgICBpZiAocHRyWzBdID09ICdkJyAmJiBwdHJbMV0gPT0gJ2UnICYm
IHB0clsyXSA9PSAnZycpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzBdID09ICdkJyAmJiBw
YXJzaW5nQnVmZmVyWzFdID09ICdlJyAmJiBwYXJzaW5nQnVmZmVyWzJdID09ICdnJykKICAgICAg
ICAgICAgIHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5HTEVUWVBFX0RFRzsKLSAgICAgICAg
aWYgKHB0clswXSA9PSAncicgJiYgcHRyWzFdID09ICdhJyAmJiBwdHJbMl0gPT0gJ2QnKQorICAg
ICAgICBpZiAocGFyc2luZ0J1ZmZlclswXSA9PSAncicgJiYgcGFyc2luZ0J1ZmZlclsxXSA9PSAn
YScgJiYgcGFyc2luZ0J1ZmZlclsyXSA9PSAnZCcpCiAgICAgICAgICAgICByZXR1cm4gU1ZHQW5n
bGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9SQUQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoK
LSAgICAgICAgaWYgKHB0clswXSA9PSAnZycgJiYgcHRyWzFdID09ICdyJyAmJiBwdHJbMl0gPT0g
J2EnICYmIHB0clszXSA9PSAnZCcpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzBdID09ICdn
JyAmJiBwYXJzaW5nQnVmZmVyWzFdID09ICdyJyAmJiBwYXJzaW5nQnVmZmVyWzJdID09ICdhJyAm
JiBwYXJzaW5nQnVmZmVyWzNdID09ICdkJykKICAgICAgICAgICAgIHJldHVybiBTVkdBbmdsZVZh
bHVlOjpTVkdfQU5HTEVUWVBFX0dSQUQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEwNiwy
NyArMTA3LDE5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFsdWU6OnNldFZhbHUKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRvIGhlbHBlciA9IFsmXShhdXRvKiBw
dHIsIGF1dG8qIGVuZCkgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewotICAgICAgICBhdXRvIHZhbHVl
SW5TcGVjaWZpZWRVbml0cyA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1Bv
bGljeTo6RG9udFNraXApOworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2lu
Zyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewor
ICAgICAgICBhdXRvIHZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IHBhcnNlTnVtYmVyKHBhcnNpbmdC
dWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CiAgICAgICAgIGlmICghdmFs
dWVJblNwZWNpZmllZFVuaXRzKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CiAKLSAgICAgICAgYXV0byB1bml0VHlwZSA9IHBhcnNlQW5nbGVUeXBlKHB0ciwg
ZW5kKTsKKyAgICAgICAgYXV0byB1bml0VHlwZSA9IHBhcnNlQW5nbGVUeXBlKHBhcnNpbmdCdWZm
ZXIpOwogICAgICAgICBpZiAodW5pdFR5cGUgPT0gU1ZHQW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQ
RV9VTktOT1dOKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07
CiAKICAgICAgICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOwogICAgICAgICBtX3ZhbHVlSW5TcGVj
aWZpZWRVbml0cyA9ICp2YWx1ZUluU3BlY2lmaWVkVW5pdHM7CiAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgfTsKLQotICAgIGlmICh2YWx1ZS5pczhCaXQoKSkgewotICAgICAgICBhdXRvKiBwdHIg
PSB2YWx1ZS5jaGFyYWN0ZXJzOCgpOwotICAgICAgICByZXR1cm4gaGVscGVyKHB0ciwgcHRyICsg
dmFsdWUubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGF1dG8qIHB0ciA9IHZhbHVlLmNoYXJhY3Rl
cnMxNigpOwotICAgIHJldHVybiBoZWxwZXIocHRyLCBwdHIgKyB2YWx1ZS5sZW5ndGgoKSk7Cisg
ICAgfSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFsdWU6Om5ld1ZhbHVlU3Bl
Y2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZp
ZWRVbml0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyAr
NTcsNyBAQCBib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYXNWYWxpCiB2b2lkIFNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBT
VkdOYW1lczo6dHlwZUF0dHIpIHsKLSAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtYWJsZTo6
cGFyc2VUcmFuc2Zvcm1UeXBlKHZhbHVlKTsKKyAgICAgICAgbV90eXBlID0gU1ZHVHJhbnNmb3Jt
YWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKHZhbHVlKS52YWx1ZU9yKFNWR1RyYW5zZm9ybVZhbHVl
OjpTVkdfVFJBTlNGT1JNX1VOS05PV04pOwogICAgICAgICBpZiAobV90eXBlID09IFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX01BVFJJWCkKICAgICAgICAgICAgIG1fdHlwZSA9IFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV047CiAgICAgICAgIHJldHVybjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlz
aW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC03Nyw1NCArNzgsNTAgQEAgZmFpbDoKICAgICByZXN1bHQuY2xlYXIoKTsKIH0KIAot
c3RhdGljIE9wdGlvbmFsPFZlY3RvcjxVbml0QmV6aWVyPj4gcGFyc2VLZXlTcGxpbmVzKGNvbnN0
IFN0cmluZ1ZpZXcmIHBhcnNlKQorc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxVbml0QmV6aWVyPj4g
cGFyc2VLZXlTcGxpbmVzKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKIHsKLSAgICBpZiAocGFy
c2UuaXNFbXB0eSgpKQorICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBwYXJzZS51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBwYXJzZS5sZW5ndGgo
KTsKLQotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAgICBWZWN0b3I8
VW5pdEJlemllcj4gcmVzdWx0OwotCi0gICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAg
IHdoaWxlIChjdXIgPCBlbmQpIHsKLSAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICAg
ICAgYXV0byBwb3NBID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgICAgICBpZiAoIXBvc0Ep
Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBXVEY6OnJlYWRD
aGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IE9w
dGlvbmFsPFZlY3RvcjxVbml0QmV6aWVyPj4geworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXMocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAgYXV0byBwb3NCID0gcGFyc2VOdW1iZXIoY3Vy
LCBlbmQpOwotICAgICAgICBpZiAoIXBvc0IpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICBWZWN0b3I8VW5pdEJlemllcj4gcmVzdWx0OwogCi0gICAgICAgIGF1dG8g
cG9zQyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NDKQotICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZh
bHNlOworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkpIHsKKyAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7CisgICAgICAgICAgICBhdXRv
IHBvc0EgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgIGlmICghcG9z
QSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8g
cG9zRCA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNr
aXApOwotICAgICAgICBpZiAoIXBvc0QpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICAgICAgYXV0byBwb3NCID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7Cisg
ICAgICAgICAgICBpZiAoIXBvc0IpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOworICAgICAgICAg
ICAgYXV0byBwb3NDID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICBp
ZiAoIXBvc0MpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAg
ICBpZiAoY3VyIDwgZW5kICYmICpjdXIgPT0gJzsnKSB7Ci0gICAgICAgICAgICBkZWxpbVBhcnNl
ZCA9IHRydWU7Ci0gICAgICAgICAgICBjdXIrKzsKLSAgICAgICAgfQorICAgICAgICAgICAgYXV0
byBwb3NEID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6
OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICghcG9zRCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVu
ZCk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CiAK
LSAgICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6aWVyIHsgKnBvc0EsICpwb3NCLCAqcG9zQywg
KnBvc0QgfSk7Ci0gICAgfQorICAgICAgICAgICAgaWYgKHNraXBFeGFjdGx5KHBhcnNpbmdCdWZm
ZXIsICc7JykpCisgICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwogCi0gICAgaWYg
KCEoY3VyID09IGVuZCAmJiAhZGVsaW1QYXJzZWQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwor
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpw
b3NDLCAqcG9zRCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKHBhcnNpbmdCdWZmZXIu
YXRFbmQoKSAmJiAhZGVsaW1QYXJzZWQpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSk7
CiB9CiAKIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0
VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1
ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg2LDI3ICs4NywzNyBAQCBib29sIFNWR0ZpdFRvVmll
d0JveDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAKIE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9W
aWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCiB7Ci0gICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB2YWx1ZS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsK
LSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAg
ICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5n
dGgoKSk7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBb
Jl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHJldHVybiBwYXJzZVZpZXdCb3hHZW5l
cmljKHBhcnNpbmdCdWZmZXIpOworICAgIH0pOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IFNW
R0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBw
YXJzaW5nQnVmZmVyLCBib29sIHZhbGlkYXRlKQoreworICAgIHJldHVybiBwYXJzZVZpZXdCb3hH
ZW5lcmljKHBhcnNpbmdCdWZmZXIsIHZhbGlkYXRlKTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0
PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFy
PiYgcGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKK3sKKyAgICByZXR1cm4gcGFyc2VWaWV3
Qm94R2VuZXJpYyhwYXJzaW5nQnVmZmVyLCB2YWxpZGF0ZSk7CiB9CiAKLU9wdGlvbmFsPEZsb2F0
UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBjLCBjb25z
dCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveEdl
bmVyaWMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwg
Ym9vbCB2YWxpZGF0ZSkKIHsKLSAgICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKKyAgICBT
dHJpbmdWaWV3IHN0cmluZ1RvUGFyc2UgPSBwYXJzaW5nQnVmZmVyLnN0cmluZ1ZpZXdPZkNoYXJh
Y3RlcnNSZW1haW5pbmcoKTsKIAotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjLCBlbmQpOwor
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKIAotICAgIGF1dG8geCA9
IHBhcnNlTnVtYmVyKGMsIGVuZCk7Ci0gICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsK
LSAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKLSAgICBhdXRvIGhlaWdodCA9
IHBhcnNlTnVtYmVyKGMsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAg
ICBhdXRvIHggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICBhdXRvIHkgPSBwYXJz
ZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIocGFy
c2luZ0J1ZmZlcik7CisgICAgYXV0byBoZWlnaHQgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVy
LCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwogCiAgICAgaWYgKHZhbGlkYXRlKSB7
CiAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG1fdmlld0JveC0+Y29udGV4dEVsZW1lbnQo
KS0+ZG9jdW1lbnQoKTsKIAogICAgICAgICBpZiAoIXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWln
aHQpIHsKLSAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRX
YXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIi
KSk7CisgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fy
bmluZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0cmluZ1RvUGFy
c2UsICJcIiIpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0K
IApAQCAtMTIzLDkgKzEzNCw5IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94
OjpwYXIKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vdGhpbmcgc2hvdWxkIGNvbWUgYWZ0ZXIg
dGhlIGxhc3QsIGZvdXJ0aCBudW1iZXIuCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhj
LCBlbmQpOwotICAgICAgICBpZiAoYyA8IGVuZCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcobWFrZVN0cmluZygiUHJvYmxlbSBwYXJz
aW5nIHZpZXdCb3g9XCIiLCBzdHIsICJcIiIpKTsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0
ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwi
Iiwgc3RyaW5nVG9QYXJzZSwgIlwiIikpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1Zp
ZXdCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94
LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOSArNjYsMTIgQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgcmVzZXQoKTsKICAgICBib29sIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9tU3RyaW5nJik7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdC
b3goY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFy
c2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFs
aWRhdGUgPSB0cnVlKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChTdHJp
bmdQYXJzaW5nQnVmZmVyPExDaGFyPiYsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYs
IGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveEdlbmVyaWMo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYsIGJvb2wgdmFsaWRhdGUgPSB0cnVl
KTsKKwogICAgIFJlZjxTVkdBbmltYXRlZFJlY3Q+IG1fdmlld0JveDsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CiAgICAgYm9v
bCBtX2lzVmlld0JveFZhbGlkIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMZW5ndGhMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVu
Z3RoTGlzdC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0
aExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Bh
cnNpbmdCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNWR0xlbmd0aExp
c3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgY2xlYXJJdGVtcygpOworCisg
ICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBw
YXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSB0eXBlbmFtZSBk
ZWNsdHlwZShwYXJzaW5nQnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKKworICAgICAgICB3aGlsZSAo
cGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGF1
dG8gc3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisKKyAgICAgICAgICAgIHNraXBV
bnRpbDxDaGFyYWN0ZXJUeXBlLCBpc1NWR1NwYWNlT3JDb21tYT4ocGFyc2luZ0J1ZmZlcik7CisK
KyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBTVkdMZW5ndGhWYWx1ZTo6Y29uc3Ry
dWN0KG1fbGVuZ3RoTW9kZSwgU3RyaW5nVmlldyhzdGFydCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpIC0gc3RhcnQpKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGFwcGVuZChTVkdMZW5ndGg6OmNyZWF0ZShXVEZNb3ZlKCp2
YWx1ZSkpKTsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHBh
cnNpbmdCdWZmZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlz
IGNsZWFySXRlbXMoKSBvbiBmYWlsdXJlIGxpa2UgU1ZHVHJhbnNmb3JtTGlzdCBkb2VzPworCisg
ICAgICAgIHJldHVybiBwYXJzaW5nQnVmZmVyLmF0RW5kKCk7CisgICAgfSk7Cit9CisKK1N0cmlu
ZyBTVkdMZW5ndGhMaXN0Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxlbmd0aCA6IG1faXRlbXMpIHsK
KyAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgnICcpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxlbmd0aC0+dmFsdWUoKS52YWx1ZUFz
U3RyaW5nKCkpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisK
K30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuaAkocmV2aXNpb24gMjYzMzM1KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHVmFs
dWVQcm9wZXJ0eUxpc3QuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTMsNDUgKzUyLDkgQEAgcHVibGljOgogCiAgICAg
U1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGhNb2RlOyB9
CiAKLSAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBj
bGVhckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJp
bmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNo
YXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVu
ZCA9IHB0ciArIHZhbHVlLmxlbmd0aCgpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0g
ICAgICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBwdHI7Ci0gICAgICAgICAgICB3aGlsZSAo
cHRyIDwgZW5kICYmICpwdHIgIT0gJywnICYmICFpc1NWR1NwYWNlKCpwdHIpKQotICAgICAgICAg
ICAgICAgIHB0cisrOwotICAgICAgICAgICAgaWYgKHB0ciA9PSBzdGFydCkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nKHN0YXJ0LCBwdHIg
LSBzdGFydCk7Ci0gICAgICAgICAgICBTVkdMZW5ndGhWYWx1ZSB2YWx1ZShtX2xlbmd0aE1vZGUp
OwotICAgICAgICAgICAgaWYgKHZhbHVlLnNldFZhbHVlQXNTdHJpbmcodmFsdWVTdHJpbmcpLmhh
c0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBhcHBl
bmQoU1ZHTGVuZ3RoOjpjcmVhdGUodmFsdWUpKTsKLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBwdHIgPT0gZW5kOwotICAgIH0KKyAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUp
OwogCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYg
bGVuZ3RoIDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0g
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQobGVuZ3RoLT52YWx1ZSgpLnZhbHVlQXNTdHJpbmcoKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICBTdHJpbmcgdmFs
dWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogICAgIAogcHJpdmF0ZToKICAgICBTVkdMZW5n
dGhMaXN0KFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMZW5ndGhWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xlbmd0aFZhbHVlLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIlNWR0xlbmd0aENvbnRleHQuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MSwxOSArNjIsMjEgQEAg
c3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBsZW5ndGhUeXBlVG9TdAogICAgIHJldHVybiAiIjsK
IH0KIAotc3RhdGljIGlubGluZSBTVkdMZW5ndGhUeXBlIHBhcnNlTGVuZ3RoVHlwZShjb25zdCBV
Q2hhciogcHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gc3RhdGljIGlubGluZSBTVkdMZW5ndGhUeXBlIHBhcnNlTGVuZ3RoVHlwZShTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChw
dHIgPT0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVy
biBTVkdMZW5ndGhUeXBlOjpOdW1iZXI7CiAKLSAgICBjb25zdCBVQ2hhciBmaXJzdENoYXIgPSAq
cHRyOworICAgIGF1dG8gZmlyc3RDaGFyID0gKnBhcnNpbmdCdWZmZXI7CisgICAgKytwYXJzaW5n
QnVmZmVyOwogCi0gICAgaWYgKCsrcHRyID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5h
dEVuZCgpKQogICAgICAgICByZXR1cm4gZmlyc3RDaGFyID09ICclJyA/IFNWR0xlbmd0aFR5cGU6
OlBlcmNlbnRhZ2UgOiBTVkdMZW5ndGhUeXBlOjpVbmtub3duOwogCi0gICAgY29uc3QgVUNoYXIg
c2Vjb25kQ2hhciA9ICpwdHI7CisgICAgYXV0byBzZWNvbmRDaGFyID0gKnBhcnNpbmdCdWZmZXI7
CisgICAgKytwYXJzaW5nQnVmZmVyOwogCi0gICAgaWYgKCsrcHRyICE9IGVuZCkKKyAgICBpZiAo
IXBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFNWR0xlbmd0aFR5cGU6OlVu
a25vd247CiAKICAgICBpZiAoZmlyc3RDaGFyID09ICdlJyAmJiBzZWNvbmRDaGFyID09ICdtJykK
QEAgLTE4MCw3ICsxODMsMTUgQEAgU1ZHTGVuZ3RoVmFsdWU6OlNWR0xlbmd0aFZhbHVlKGNvbnN0
IFNWRwogICAgIHNldFZhbHVlKGNvbnRleHQsIHZhbHVlKTsKIH0KIAotU1ZHTGVuZ3RoVmFsdWUg
U1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVjdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0
IFN0cmluZyYgdmFsdWVBc1N0cmluZywgU1ZHUGFyc2luZ0Vycm9yJiBwYXJzZUVycm9yLCBTVkdM
ZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgbmVnYXRpdmVWYWx1ZXNNb2RlKQorT3B0aW9uYWw8U1ZH
TGVuZ3RoVmFsdWU+IFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5n
dGhNb2RlLCBjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFzU3RyaW5nKQoreworICAgIFNWR0xlbmd0
aFZhbHVlIGxlbmd0aCB7IGxlbmd0aE1vZGUgfTsKKyAgICBpZiAobGVuZ3RoLnNldFZhbHVlQXNT
dHJpbmcodmFsdWVBc1N0cmluZykuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKworU1ZHTGVuZ3RoVmFsdWUgU1ZHTGVu
Z3RoVmFsdWU6OmNvbnN0cnVjdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0IFN0cmlu
Z1ZpZXcmIHZhbHVlQXNTdHJpbmcsIFNWR1BhcnNpbmdFcnJvciYgcGFyc2VFcnJvciwgU1ZHTGVu
Z3RoTmVnYXRpdmVWYWx1ZXNNb2RlIG5lZ2F0aXZlVmFsdWVzTW9kZSkKIHsKICAgICBTVkdMZW5n
dGhWYWx1ZSBsZW5ndGgobGVuZ3RoTW9kZSk7CiAKQEAgLTIzOSw3ICsyNTAsNyBAQCBSZWY8Q1NT
UHJpbWl0aXZlVmFsdWU+IFNWR0xlbmd0aFZhbHVlOjp0CiAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUobGVuZ3RoLnZhbHVlSW5TcGVjaWZpZWRVbml0cygpLCBsZW5ndGhUeXBl
VG9QcmltaXRpdmVUeXBlKGxlbmd0aC5sZW5ndGhUeXBlKCkpKTsKIH0KIAotRXhjZXB0aW9uT3I8
dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZUFzU3RyaW5nLCBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBT
VkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFz
U3RyaW5nLCBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCiB7CiAgICAgbV92YWx1ZUluU3BlY2lm
aWVkVW5pdHMgPSAwOwogICAgIG1fbGVuZ3RoTW9kZSA9IGxlbmd0aE1vZGU7CkBAIC0yODYsMjYg
KzI5NywyNCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsCiAgICAg
cmV0dXJuIHNldFZhbHVlKGNvbnRleHQsIHZhbHVlKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4g
U1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCitF
eGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBT
dHJpbmdWaWV3JiBzdHJpbmcpCiB7CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1Zp
ZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRy
ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBz
dHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBhdXRvIGNvbnZlcnRlZE51bWJlciA9IHBhcnNlTnVtYmVy
KHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwotICAgIGlmICghY29u
dmVydGVkTnVtYmVyKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsK
LQotICAgIGF1dG8gbGVuZ3RoVHlwZSA9IHBhcnNlTGVuZ3RoVHlwZShwdHIsIGVuZCk7Ci0gICAg
aWYgKGxlbmd0aFR5cGUgPT0gU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bikKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3Rl
cnNGb3JQYXJzaW5nKHN0cmluZywgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gRXhjZXB0aW9u
T3I8dm9pZD4geworICAgICAgICBhdXRvIGNvbnZlcnRlZE51bWJlciA9IHBhcnNlTnVtYmVyKHBh
cnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlm
ICghY29udmVydGVkTnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CisKKyAgICAgICAgYXV0byBsZW5ndGhUeXBlID0gcGFyc2VMZW5ndGhUeXBlKHBh
cnNpbmdCdWZmZXIpOworICAgICAgICBpZiAobGVuZ3RoVHlwZSA9PSBTVkdMZW5ndGhUeXBlOjpV
bmtub3duKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAK
LSAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwotICAgIG1fdmFsdWVJblNwZWNpZmllZFVu
aXRzID0gKmNvbnZlcnRlZE51bWJlcjsKLSAgICByZXR1cm4geyB9OworICAgICAgICBtX2xlbmd0
aFR5cGUgPSBsZW5ndGhUeXBlOworICAgICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9ICpj
b252ZXJ0ZWROdW1iZXI7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfSk7CiB9CiAKIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhjb25z
dCBTVkdMZW5ndGhDb250ZXh0JiBjb250ZXh0LCBTVkdMZW5ndGhUeXBlIGxlbmd0aFR5cGUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuaAkocmV2aXNpb24gMjYzMzM1KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDEzICs1OCwxNCBAQCBlbnVtIGNsYXNzIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA6CiBj
bGFzcyBTVkdMZW5ndGhWYWx1ZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgU1ZHTGVuZ3RoVmFsdWUoU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90
aGVyLCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcgPSBTdHJpbmcoKSk7CisgICAgU1ZHTGVu
Z3RoVmFsdWUoU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVyLCBjb25zdCBTdHJp
bmcmIHZhbHVlQXNTdHJpbmcgPSB7IH0pOwogICAgIFNWR0xlbmd0aFZhbHVlKGZsb2F0IHZhbHVl
SW5TcGVjaWZpZWRVbml0cywgU1ZHTGVuZ3RoVHlwZSwgU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0
aE1vZGU6Ok90aGVyKTsKICAgICBTVkdMZW5ndGhWYWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0
JiwgZmxvYXQsIFNWR0xlbmd0aFR5cGUgPSBTVkdMZW5ndGhUeXBlOjpOdW1iZXIsIFNWR0xlbmd0
aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlcik7CiAKLSAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFs
dWUgY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZyYsIFNWR1BhcnNpbmdFcnJv
ciYsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA9IFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVz
TW9kZTo6QWxsb3cpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdMZW5ndGhWYWx1ZT4gY29uc3Ry
dWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBzdGF0aWMgU1ZHTGVu
Z3RoVmFsdWUgY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1ZpZXcmLCBTVkdQ
YXJzaW5nRXJyb3ImLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgPSBTVkdMZW5ndGhOZWdh
dGl2ZVZhbHVlc01vZGU6OkFsbG93KTsKICAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFsdWUgYmxlbmQo
Y29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0bywgZmxv
YXQgcHJvZ3Jlc3MpOwotICAgIAorCiAgICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGZyb21DU1NQ
cmltaXRpdmVWYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYpOwogICAgIHN0YXRpYyBSZWY8
Q1NTUHJpbWl0aXZlVmFsdWU+IHRvQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgU1ZHTGVuZ3RoVmFs
dWUmKTsKIApAQCAtODUsOCArODYsOCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4g
c2V0VmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZsb2F0KTsKICAgICBFeGNlcHRpb25P
cjx2b2lkPiBzZXRWYWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0JiwgZmxvYXQsIFNWR0xlbmd0
aFR5cGUsIFNWR0xlbmd0aE1vZGUpOwogCi0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVB
c1N0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFz
U3RyaW5nKGNvbnN0IFN0cmluZyYsIFNWR0xlbmd0aE1vZGUpOworICAgIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYpOworICAgIEV4Y2VwdGlvbk9y
PHZvaWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYsIFNWR0xlbmd0aE1vZGUp
OwogCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gY29udmVydFRvU3BlY2lmaWVkVW5pdHMoY29uc3Qg
U1ZHTGVuZ3RoQ29udGV4dCYsIFNWR0xlbmd0aFR5cGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTnVtYmVyTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR051bWJlckxpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdOdW1iZXJMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR051bWJlckxpc3QuaCIKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdQYXJzaW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTVkdO
dW1iZXJMaXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNsZWFySXRlbXMo
KTsKKworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZd
KGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICAvLyBUaGUgc3BlYyAoc2VjdGlvbiA0LjEp
IHN0cmFuZ2VseSBkb2Vzbid0IGFsbG93IGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAgLy8g
V2UgbWlnaHQgY2hvb3NlIHRvIHZpb2xhdGUgdGhhdCBpbnRlbnRpb25hbGx5LgorICAgICAgICB3
aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAg
ICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAg
ICBpZiAoIW51bWJlcikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFwcGVu
ZChTVkdOdW1iZXI6OmNyZWF0ZSgqbnVtYmVyKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHRoaXMgY2xlYXJJdGVtcygpIG9uIGZhaWx1cmUgbGlrZSBTVkdUcmFuc2Zv
cm1MaXN0IGRvZXM/CisKKyAgICAgICAgcmV0dXJuIHBhcnNpbmdCdWZmZXIuYXRFbmQoKTsKKyAg
ICB9KTsKK30KKworU3RyaW5nIFNWR051bWJlckxpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAor
eworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZvciAoY29uc3QgYXV0byYgbnVt
YmVyIDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobnVtYmVy
LT52YWx1ZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQor
Cit9CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuaAkocmV2aXNpb24gMjYzMzM1
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsMzkgKzUwLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
VkdOdW1iZXJMaXN0KG90aGVyLCBhY2Nlc3MpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBjbGVhckl0ZW1zKCk7Ci0KLSAgICAg
ICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVk
Q2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHZhbHVlLmxlbmd0
aCgpOwotCi0gICAgICAgIC8vIFRoZSBzcGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNu
J3QgYWxsb3cgbGVhZGluZyB3aGl0ZXNwYWNlLgotICAgICAgICAvLyBXZSBtaWdodCBjaG9vc2Ug
dG8gdmlvbGF0ZSB0aGF0IGludGVudGlvbmFsbHkuCi0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQp
IHsKLSAgICAgICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAg
ICAgICAgICAgaWYgKCFudW1iZXIpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBhcHBlbmQoU1ZHTnVtYmVyOjpjcmVhdGUoKm51bWJlcikpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIHB0ciA9PSBlbmQ7Ci0gICAgfQotCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmco
KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgbnVtYmVyIDogbV9pdGVtcykgewotICAgICAgICAg
ICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
JyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobnVtYmVyLT52YWx1ZSgpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAg
IGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBj
b25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPGxp
bWl0cz4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzQyLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZsb2F0VHlwZT4gc3RhdGljIGlubAogLy8gYXQgYSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFs
bHksIHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IHJ1bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21w
bGV4aXR5LgogLy8gRklYTUU6IENhbiB0aGlzIGJlIHNoYXJlZC9yZXBsYWNlZCB3aXRoIG51bWJl
ciBwYXJzaW5nIGluIFdURj8KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBl
bmFtZSBGbG9hdFR5cGUgPSBmbG9hdD4gc3RhdGljIE9wdGlvbmFsPEZsb2F0VHlwZT4gZ2VuZXJp
Y1BhcnNlTnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5
cGUqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCA9IFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpTa2lwKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0
VHlwZSA9IGZsb2F0PiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRUeXBlPiBnZW5lcmljUGFyc2VOdW1i
ZXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgU3Vm
Zml4U2tpcHBpbmdQb2xpY3kgc2tpcCA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQogewog
ICAgIEZsb2F0VHlwZSBudW1iZXIgPSAwOwogICAgIEZsb2F0VHlwZSBpbnRlZ2VyID0gMDsKQEAg
LTUwLDI2ICs1MSwyNiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5h
CiAgICAgRmxvYXRUeXBlIGV4cG9uZW50ID0gMDsKICAgICBpbnQgc2lnbiA9IDE7CiAgICAgaW50
IGV4cHNpZ24gPSAxOwotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0YXJ0ID0gcHRyOworICAg
IGF1dG8gc3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAKICAgICAvLyByZWFkIHRo
ZSBzaWduCi0gICAgaWYgKHB0ciA8IGVuZCAmJiAqcHRyID09ICcrJykKLSAgICAgICAgcHRyKys7
Ci0gICAgZWxzZSBpZiAocHRyIDwgZW5kICYmICpwdHIgPT0gJy0nKSB7Ci0gICAgICAgIHB0cisr
OworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFy
c2luZ0J1ZmZlciA9PSAnKycpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICBlbHNlIGlm
IChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZl
ciA9PSAnLScpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgICAgICBzaWduID0gLTE7
CiAgICAgfSAKICAgICAKLSAgICBpZiAocHRyID09IGVuZCB8fCAoIWlzQVNDSUlEaWdpdCgqcHRy
KSAmJiAqcHRyICE9ICcuJykpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAoIWlz
QVNDSUlEaWdpdCgqcGFyc2luZ0J1ZmZlcikgJiYgKnBhcnNpbmdCdWZmZXIgIT0gJy4nKSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIHJlYWQgdGhlIGludGVnZXIgcGFy
dCwgYnVpbGQgcmlnaHQtdG8tbGVmdAotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHB0clN0YXJ0
SW50UGFydCA9IHB0cjsKLSAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzQVNDSUlEaWdpdCgqcHRy
KSkKLSAgICAgICAgKytwdHI7IC8vIEFkdmFuY2UgdG8gZmlyc3Qgbm9uLWRpZ2l0LgorICAgIGF1
dG8gcHRyU3RhcnRJbnRQYXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHdoaWxl
IChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQo
KnBhcnNpbmdCdWZmZXIpKQorICAgICAgICArK3BhcnNpbmdCdWZmZXI7IC8vIEFkdmFuY2UgdG8g
Zmlyc3Qgbm9uLWRpZ2l0LgogCi0gICAgaWYgKHB0ciAhPSBwdHJTdGFydEludFBhcnQpIHsKLSAg
ICAgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcHRyU2NhbkludFBhcnQgPSBwdHIgLSAxOworICAg
IGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgIT0gcHRyU3RhcnRJbnRQYXJ0KSB7CisgICAg
ICAgIGF1dG8gcHRyU2NhbkludFBhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSAxOwog
ICAgICAgICBGbG9hdFR5cGUgbXVsdGlwbGllciA9IDE7CiAgICAgICAgIHdoaWxlIChwdHJTY2Fu
SW50UGFydCA+PSBwdHJTdGFydEludFBhcnQpIHsKICAgICAgICAgICAgIGludGVnZXIgKz0gbXVs
dGlwbGllciAqIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oKihwdHJTY2FuSW50UGFydC0tKSAtICcw
Jyk7CkBAIC04MCwzOCArODEsMzkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUs
IHR5cGVuYQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBp
ZiAocHRyIDwgZW5kICYmICpwdHIgPT0gJy4nKSB7IC8vIHJlYWQgdGhlIGRlY2ltYWxzCi0gICAg
ICAgIHB0cisrOworICAgIC8vIHJlYWQgdGhlIGRlY2ltYWxzCisgICAgaWYgKHBhcnNpbmdCdWZm
ZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5nQnVmZmVyID09ICcuJykgewor
ICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0
IGJlIGEgbGVhc3Qgb25lIGRpZ2l0IGZvbGxvd2luZyB0aGUgLgotICAgICAgICBpZiAocHRyID49
IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5h
dEVuZCgpIHx8ICFpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpKQogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCi0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYg
aXNBU0NJSURpZ2l0KCpwdHIpKQotICAgICAgICAgICAgZGVjaW1hbCArPSAoKihwdHIrKykgLSAn
MCcpICogKGZyYWMgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsKKyAgICAgICAgd2hp
bGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdp
dCgqcGFyc2luZ0J1ZmZlcikpCisgICAgICAgICAgICBkZWNpbWFsICs9ICgqKHBhcnNpbmdCdWZm
ZXIrKykgLSAnMCcpICogKGZyYWMgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsKICAg
ICB9CiAKICAgICAvLyByZWFkIHRoZSBleHBvbmVudCBwYXJ0Ci0gICAgaWYgKHB0ciAhPSBzdGFy
dCAmJiBwdHIgKyAxIDwgZW5kICYmICgqcHRyID09ICdlJyB8fCAqcHRyID09ICdFJykgCi0gICAg
ICAgICYmIChwdHJbMV0gIT0gJ3gnICYmIHB0clsxXSAhPSAnbScpKSB7IAotICAgICAgICBwdHIr
KzsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpICE9IHN0YXJ0ICYmIHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKSArIDEgPCBwYXJzaW5nQnVmZmVyLmVuZCgpICYmICgqcGFyc2luZ0J1
ZmZlciA9PSAnZScgfHwgKnBhcnNpbmdCdWZmZXIgPT0gJ0UnKQorICAgICAgICAmJiAocGFyc2lu
Z0J1ZmZlclsxXSAhPSAneCcgJiYgcGFyc2luZ0J1ZmZlclsxXSAhPSAnbScpKSB7CisgICAgICAg
ICsrcGFyc2luZ0J1ZmZlcjsKIAogICAgICAgICAvLyByZWFkIHRoZSBzaWduIG9mIHRoZSBleHBv
bmVudAotICAgICAgICBpZiAoKnB0ciA9PSAnKycpCi0gICAgICAgICAgICBwdHIrKzsKLSAgICAg
ICAgZWxzZSBpZiAoKnB0ciA9PSAnLScpIHsKLSAgICAgICAgICAgIHB0cisrOworICAgICAgICBp
ZiAoKnBhcnNpbmdCdWZmZXIgPT0gJysnKQorICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVyOwor
ICAgICAgICBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAnLScpIHsKKyAgICAgICAgICAgICsr
cGFyc2luZ0J1ZmZlcjsKICAgICAgICAgICAgIGV4cHNpZ24gPSAtMTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhbiBleHBvbmVudAotICAgICAgICBpZiAo
cHRyID49IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQorICAgICAgICBpZiAocGFyc2luZ0J1
ZmZlci5hdEVuZCgpIHx8ICFpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpKQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlz
QVNDSUlEaWdpdCgqcHRyKSkgeworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkgJiYgaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkgewogICAg
ICAgICAgICAgZXhwb25lbnQgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigxMCk7Ci0gICAgICAg
ICAgICBleHBvbmVudCArPSAqcHRyIC0gJzAnOwotICAgICAgICAgICAgcHRyKys7CisgICAgICAg
ICAgICBleHBvbmVudCArPSAqcGFyc2luZ0J1ZmZlciAtICcwJzsKKyAgICAgICAgICAgICsrcGFy
c2luZ0J1ZmZlcjsKICAgICAgICAgfQogICAgICAgICAvLyBNYWtlIHN1cmUgZXhwb25lbnQgaXMg
dmFsaWQuCiAgICAgICAgIGlmICghaXNWYWxpZFJhbmdlKGV4cG9uZW50KSB8fCBleHBvbmVudCA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRUeXBlPjo6bWF4X2V4cG9uZW50KQpAQCAtMTI4LDQ0
ICsxMzAsNDQgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQogICAg
IGlmICghaXNWYWxpZFJhbmdlKG51bWJlcikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICBpZiAoc3RhcnQgPT0gcHRyKQorICAgIGlmIChzdGFydCA9PSBwYXJzaW5nQnVmZmVy
LnBvc2l0aW9uKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoc2tp
cCA9PSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyKTsKIAogICAgIHJldHVybiBudW1iZXI7CiB9CiAK
LU9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENo
YXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKK09wdGlvbmFsPGZsb2F0PiBwYXJz
ZU51bWJlcihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlciwgU3VmZml4
U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0
ciwgZW5kLCBza2lwKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHBhcnNpbmdCdWZm
ZXIsIHNraXApOwogfQogCi1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIq
JiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCitPcHRp
b25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNp
bmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7Ci0gICAgcmV0dXJuIGdlbmVy
aWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51
bWJlcihwYXJzaW5nQnVmZmVyLCBza2lwKTsKIH0KIAogT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVt
YmVyKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZywgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkK
IHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
OwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgYXV0
byByZXN1bHQgPSBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIHNraXApOwotICAgIGlmIChw
dHIgIT0gZW5kKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgW3Nr
aXBdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8ZmxvYXQ+IHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBnZW5lcmljUGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgc2tpcCk7CisgICAg
ICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9KTsKIH0KIAogLy8gb25seSB1
c2VkIHRvIHBhcnNlIGxhcmdlQXJjRmxhZyBhbmQgc3dlZXBGbGFnIHdoaWNoIG11c3QgYmUgYSAi
MCIgb3IgIjEiCiAvLyBhbmQgbWlnaHQgbm90IGhhdmUgYW55IHdoaXRlc3BhY2UvY29tbWEgYWZ0
ZXIgaXQKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxib29sPiBn
ZW5lcmljUGFyc2VBcmNGbGFnKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25h
bDxib29sPiBnZW5lcmljUGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKHB0ciA+PSBlbmQpCisgICAgaWYgKHBh
cnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IGNvbnN0IENoYXJhY3RlclR5cGUgZmxhZ0NoYXIgPSAqcHRyKys7CisgICAgY29uc3QgQ2hhcmFj
dGVyVHlwZSBmbGFnQ2hhciA9ICpwYXJzaW5nQnVmZmVyOworICAgICsrcGFyc2luZ0J1ZmZlcjsK
IAogICAgIGJvb2wgZmxhZzsKICAgICBpZiAoZmxhZ0NoYXIgPT0gJzAnKQpAQCAtMTc1LDE5ICsx
NzcsMTkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbgogICAgIGVs
c2UKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRl
bGltaXRlcihwYXJzaW5nQnVmZmVyKTsKICAgICAKICAgICByZXR1cm4gZmxhZzsKIH0KIAotT3B0
aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciog
ZW5kKQorT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENo
YXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKHB0
ciwgZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhwYXJzaW5nQnVmZmVyKTsK
IH0KIAotT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25z
dCBVQ2hhciogZW5kKQorT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdC
dWZmZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VB
cmNGbGFnKHB0ciwgZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhwYXJzaW5n
QnVmZmVyKTsKIH0KIAogT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQpAQCAtMTk1LDI1ICsx
OTcsMjMgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTgogICAgIGlm
IChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBj
b25zdCBVQ2hhciogZW5kID0gY3VyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgYXV0byB4ID0g
cGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgIGlmICgheCkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5n
LCBbXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxv
YXQ+PiB7CisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAg
ICAgICBpZiAoIXgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYg
KGN1ciA9PSBlbmQpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwgKngpOworICAg
ICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKCp4LCAqeCk7CiAKLSAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwg
U3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICBpZiAoIXkpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdC
dWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlmICgheSkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoY3VyICE9IGVuZCkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKCFwYXJzaW5nQnVmZmVy
LmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKCp4LCAqeSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigq
eCwgKnkpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZVBvaW50KGNv
bnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKQEAgLTIyMSwxMTcgKzIyMSwxMTMgQEAgT3B0aW9uYWw8
RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdAogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENo
YXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNo
YXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0g
Y3VyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMo
Y3VyLCBlbmQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBXVEY6
OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gcGFyc2luZ0J1ZmZlcikg
LT4gT3B0aW9uYWw8RmxvYXRQb2ludD4geworICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNWR1Nw
YWNlcyhwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBhdXRvIHBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1ciwgZW5kKTsKLSAgICBpZiAoIXBv
aW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHBvaW50ID0g
cGFyc2VGbG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAoIXBvaW50KQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIC8vIERpc2FsbG93IGFueXRoaW5n
IGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4KLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3Vy
LCBlbmQpOwotICAgIAotICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgLy8gRGlzYWxsb3cgYW55
dGhpbmcgZXhjZXB0IHNwYWNlcyBhdCB0aGUgZW5kLgorICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcG9pbnQ7Cisg
ICAgfSk7CiB9CiAKIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNvbnN0IFN0cmluZ1Zp
ZXcmIHN0cmluZykKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3Ro
KCk7Ci0gICAgCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKLSAgICAKLSAg
ICBhdXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7Ci0gICAgaWYgKCF4KQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsK
LSAgICBpZiAoIXkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byB3aWR0
aCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKLSAgICBpZiAoIXdpZHRoKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQs
IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Ci0gICAgaWYgKCFoZWlnaHQpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNG
b3JQYXJzaW5nKHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxGbG9h
dFJlY3Q+IHsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwor
ICAgICAgICAKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7Cisg
ICAgICAgIGlmICgheCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IGF1dG8geSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAoIXkpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHdpZHRoID0gcGFy
c2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICghd2lkdGgpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVy
KHBhcnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAg
IGlmICghaGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiBGbG9hdFJlY3QgeyAqeCwgKnksICp3aWR0aCwgKmhlaWdodCB9OworICAgICAgICByZXR1
cm4gRmxvYXRSZWN0IHsgKngsICp5LCAqd2lkdGgsICpoZWlnaHQgfTsKKyAgICB9KTsKIH0KIAog
T3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmdWaWV3
JiBzdHJpbmcpCiB7CiAgICAgLy8gRklYTUU6IFBhcnNpbmcgZXJyb3IgZGV0ZWN0aW9uIGlzIG1p
c3NpbmcuCiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0g
ICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKLQotICAgIEhhc2hTZXQ8U3RyaW5n
PiB2YWx1ZXM7Ci0KLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIC8vIExlYWRpbmcg
YW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2UgYmVmb3JlIGFuZCBhZnRl
ciBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1
dFN0YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gJywnKQot
ICAgICAgICAgICAgKytwdHI7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJz
aW5nKHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBIYXNoU2V0PFN0cmluZz4gewor
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAg
aWYgKHB0ciA9PSBpbnB1dFN0YXJ0KQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIEhhc2hT
ZXQ8U3RyaW5nPiB2YWx1ZXM7CiAKLSAgICAgICAgLy8gd2FsayBiYWNrd2FyZHMgZnJvbSB0aGUg
OyB0byBpZ25vcmUgYW55IHdoaXRlc3BhY2UKLSAgICAgICAgY29uc3QgVUNoYXIqIGlucHV0RW5k
ID0gcHRyIC0gMTsKLSAgICAgICAgd2hpbGUgKGlucHV0U3RhcnQgPCBpbnB1dEVuZCAmJiBpc1NW
R1NwYWNlKCppbnB1dEVuZCkpCi0gICAgICAgICAgICAtLWlucHV0RW5kOworICAgICAgICB3aGls
ZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAg
IC8vIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2UgYmVm
b3JlIGFuZCBhZnRlciBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCisgICAgICAgICAgICBh
dXRvIGlucHV0U3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAKLSAgICAgICAgdmFs
dWVzLmFkZChTdHJpbmcoaW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1dFN0YXJ0ICsgMSkpOwot
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCwgJywnKTsK
LSAgICB9CisgICAgICAgICAgICBza2lwVW50aWwocGFyc2luZ0J1ZmZlciwgJywnKTsKKworICAg
ICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA9PSBpbnB1dFN0YXJ0KQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9t
IHRoZSA7IHRvIGlnbm9yZSBhbnkgd2hpdGVzcGFjZQorICAgICAgICAgICAgYXV0byBpbnB1dEVu
ZCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIDE7CisgICAgICAgICAgICB3aGlsZSAoaW5w
dXRTdGFydCA8IGlucHV0RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5kKSkKKyAgICAgICAgICAg
ICAgICAtLWlucHV0RW5kOworCisgICAgICAgICAgICB2YWx1ZXMuYWRkKFN0cmluZyhpbnB1dFN0
YXJ0LCBpbnB1dEVuZCAtIGlucHV0U3RhcnQgKyAxKSk7CisgICAgICAgICAgICBza2lwT3B0aW9u
YWxTVkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyLCAnLCcpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgfSk7CiAKLSAgICByZXR1cm4gdmFsdWVzOwogfQog
Ci1zdGF0aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFVuaWNvZGVSYW5nZT4gcGFyc2VVbmljb2RlUmFu
Z2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewot
ICAgIGlmIChsZW5ndGggPCAyIHx8IGNoYXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJhY3RlcnNb
MV0gIT0gJysnKQorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVt
YWluaW5nKCk7CisgICAgaWYgKGxlbmd0aCA8IDIgfHwgcGFyc2luZ0J1ZmZlclswXSAhPSAnVScg
fHwgcGFyc2luZ0J1ZmZlclsxXSAhPSAnKycpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgCisKKyAgICBwYXJzaW5nQnVmZmVyLmFkdmFuY2VCeSgyKTsKKwogICAgIC8vIFBhcnNl
IHRoZSBzdGFydGluZyBoZXggbnVtYmVyIChvciBpdHMgcHJlZml4KS4KICAgICB1bnNpZ25lZCBz
dGFydFJhbmdlID0gMDsKICAgICB1bnNpZ25lZCBzdGFydExlbmd0aCA9IDA7CiAKLSAgICBjb25z
dCBVQ2hhciogcHRyID0gY2hhcmFjdGVycyArIDI7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGNo
YXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICBpZiAo
IWlzQVNDSUlIZXhEaWdpdCgqcHRyKSkKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKnBhcnNp
bmdCdWZmZXIpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAg
ICAgICAgIGlmIChzdGFydExlbmd0aCA+IDYpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgICAgICBzdGFydFJhbmdlID0gKHN0YXJ0UmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4
VmFsdWUoKnB0cik7Ci0gICAgICAgICsrcHRyOworICAgICAgICBzdGFydFJhbmdlID0gKHN0YXJ0
UmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnBhcnNpbmdCdWZmZXIpOworICAgICAgICAr
K3BhcnNpbmdCdWZmZXI7CiAgICAgfQogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIG9mIHJhbmdl
cyBzZXBhcmF0ZWQgYnkgIi0iIHNpZ24uCi0gICAgaWYgKDIgKyBzdGFydExlbmd0aCA8IGxlbmd0
aCAmJiAqcHRyID09ICctJykgeworICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5ndGggJiYg
KnBhcnNpbmdCdWZmZXIgPT0gJy0nKSB7CiAgICAgICAgIGlmICghc3RhcnRMZW5ndGgpCiAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgLy8gUGFyc2Ug
dGhlIGVuZGluZyBoZXggbnVtYmVyIChvciBpdHMgcHJlZml4KS4KICAgICAgICAgdW5zaWduZWQg
ZW5kUmFuZ2UgPSAwOwogICAgICAgICB1bnNpZ25lZCBlbmRMZW5ndGggPSAwOwotICAgICAgICAr
K3B0cjsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICAgICAgaWYgKCFpc0FT
Q0lJSGV4RGlnaXQoKnB0cikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgd2hp
bGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAg
ICBpZiAoIWlzQVNDSUlIZXhEaWdpdCgqcGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICArK2VuZExlbmd0aDsKICAgICAgICAgICAgIGlmIChlbmRMZW5n
dGggPiA2KQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAg
ICBlbmRSYW5nZSA9IChlbmRSYW5nZSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZSgqcHRyKTsKLSAg
ICAgICAgICAgICsrcHRyOworICAgICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkg
fCB0b0FTQ0lJSGV4VmFsdWUoKnBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgKytwYXJzaW5n
QnVmZmVyOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWVuZExlbmd0aCkKQEAg
LTM0NSwxNSArMzQxLDE1IEBAIHN0YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5p
Y28KICAgICAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2YgYSBudW1iZXIgd2l0aCBzb21lIG9w
dGlvbmFsIHRyYWlsaW5nIHF1ZXN0aW9uIG1hcmtzLgogICAgIHVuc2lnbmVkIGVuZFJhbmdlID0g
c3RhcnRSYW5nZTsKLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIGlmICgqcHRyICE9
ICc/JykKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkp
IHsKKyAgICAgICAgaWYgKCpwYXJzaW5nQnVmZmVyICE9ICc/JykKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICArK3N0YXJ0TGVuZ3RoOwogICAgICAgICBpZiAoc3RhcnRMZW5ndGggPiA2KQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgc3RhcnRSYW5nZSA8PD0g
NDsKICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCAweEY7Ci0gICAgICAgICsr
cHRyOworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgfQogICAgIAogICAgIGlmICghc3Rh
cnRMZW5ndGgpCkBAIC0zNjksNTMgKzM2NSw1MSBAQCBPcHRpb25hbDxzdGQ6OnBhaXI8VW5pY29k
ZVJhbmdlcywgSGFzaFNlCiB7CiAgICAgLy8gRklYTUU6IFBhcnNpbmcgZXJyb3IgZGV0ZWN0aW9u
IGlzIG1pc3NpbmcuCiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3Ro
KCk7Ci0KLSAgICBVbmljb2RlUmFuZ2VzIHJhbmdlTGlzdDsKLSAgICBIYXNoU2V0PFN0cmluZz4g
c3RyaW5nTGlzdDsKLQotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgY29uc3QgVUNo
YXIqIGlucHV0U3RhcnQgPSBwdHI7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAh
PSAnLCcpCi0gICAgICAgICAgICArK3B0cjsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVy
c0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IHN0ZDo6cGFpcjxV
bmljb2RlUmFuZ2VzLCBIYXNoU2V0PFN0cmluZz4+IHsKKyAgICAgICAgVW5pY29kZVJhbmdlcyBy
YW5nZUxpc3Q7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdMaXN0OwogCi0gICAgICAg
IGlmIChwdHIgPT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICB3aGls
ZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAg
IGF1dG8gaW5wdXRTdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKIAotICAgICAgICAv
LyBUcnkgdG8gcGFyc2UgdW5pY29kZSByYW5nZSBmaXJzdAotICAgICAgICBpZiAoYXV0byByYW5n
ZSA9IHBhcnNlVW5pY29kZVJhbmdlKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQpKQotICAg
ICAgICAgICAgcmFuZ2VMaXN0LmFwcGVuZChXVEZNb3ZlKCpyYW5nZSkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzdHJpbmdMaXN0LmFkZChTdHJpbmcoaW5wdXRTdGFydCwgcHRyIC0gaW5w
dXRTdGFydCkpOwotICAgICAgICArK3B0cjsKLSAgICB9CisgICAgICAgICAgICBza2lwVW50aWwo
cGFyc2luZ0J1ZmZlciwgJywnKTsKKworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKSA9PSBpbnB1dFN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAvLyBUcnkgdG8gcGFyc2UgdW5pY29kZSByYW5nZSBmaXJzdAorICAgICAgICAgICAgaWYg
KGF1dG8gcmFuZ2UgPSBwYXJzZVVuaWNvZGVSYW5nZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgaW5w
dXRTdGFydCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIH0pKQorICAgICAgICAgICAgICAgIHJh
bmdlTGlzdC5hcHBlbmQoV1RGTW92ZSgqcmFuZ2UpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBzdHJpbmdMaXN0LmFkZChTdHJpbmcoaW5wdXRTdGFydCwgcGFyc2luZ0J1ZmZl
ci5wb3NpdGlvbigpIC0gaW5wdXRTdGFydCkpOworICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVy
OworICAgICAgICB9CiAKLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmFuZ2VMaXN0LCBzdHJp
bmdMaXN0KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUocmFuZ2VMaXN0
KSwgV1RGTW92ZShzdHJpbmdMaXN0KSk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4gZ2VuZXJpY1BhcnNl
RmxvYXRQb2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVy
VHlwZSogZW5kKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRp
b25hbDxGbG9hdFBvaW50PiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KFN0cmluZ1BhcnNpbmdCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgYXV0byB4ID0gcGFyc2VO
dW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICBhdXRvIHggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVm
ZmVyKTsKICAgICBpZiAoIXgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBh
dXRvIHkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgIGF1dG8geSA9IHBhcnNlTnVt
YmVyKHBhcnNpbmdCdWZmZXIpOwogICAgIGlmICgheSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIHJldHVybiBGbG9hdFBvaW50IHsgKngsICp5IH07CiB9CiAKLU9wdGlvbmFs
PEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0
IExDaGFyKiBlbmQpCitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGdlbmVy
aWNQYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNl
RmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKIH0KIAotT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFy
c2VGbG9hdFBvaW50KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCkKK09w
dGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJzaW5nQnVmZmVyPFVD
aGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQb2lu
dChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KHBhcnNp
bmdCdWZmZXIpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxp
dGllcy5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2Vy
VXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDkgKzIxLDkgQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIHR5cGVkZWYgc3RkOjpwYWlyPFVDaGFyMzIsIFVDaGFyMzI+IFVuaWNvZGVSYW5n
ZTsKIHR5cGVkZWYgVmVjdG9yPFVuaWNvZGVSYW5nZT4gVW5pY29kZVJhbmdlczsKQEAgLTM4LDIw
ICszOCwyMCBAQCBlbnVtIGNsYXNzIFN1ZmZpeFNraXBwaW5nUG9saWN5IHsKICAgICBTa2lwCiB9
OwogCi1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgTENoYXIqJiBjdXJyZW50LCBj
b25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9s
aWN5OjpTa2lwKTsKLU9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBVQ2hhciomIGN1
cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tp
cHBpbmdQb2xpY3k6OlNraXApOworT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8TENoYXI+JiwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGlu
Z1BvbGljeTo6U2tpcCk7CitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxVQ2hhcj4mLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9s
aWN5OjpTa2lwKTsKIE9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmdWaWV3
JiwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7CiAK
IE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZU51bWJlck9wdGlvbmFsTnVt
YmVyKGNvbnN0IFN0cmluZ1ZpZXcmKTsKIAotT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNv
bnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7Ci1PcHRpb25hbDxib29sPiBw
YXJzZUFyY0ZsYWcoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kKTsKK09w
dGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOwor
T3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7
CiAKIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nVmlldyYpOwog
T3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVJlY3QoY29uc3QgU3RyaW5nVmlldyYpOwogCi1PcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBj
b25zdCBMQ2hhciogZW5kKTsKLU9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChj
b25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpOworT3B0aW9uYWw8RmxvYXRQ
b2ludD4gcGFyc2VGbG9hdFBvaW50KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CitPcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hh
cj4mKTsKIAogT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8U3RyaW5n
Pj4+IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYpOwogT3B0aW9u
YWw8SGFzaFNldDxTdHJpbmc+PiBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmdWaWV3Jik7CkBA
IC02NCwxMyArNjQsMjMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3Rl
eAogICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0g
J1xyJzsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJv
b2wgaXNTVkdTcGFjZU9yQ29tbWEoQ2hhcmFjdGVyVHlwZSBjKQoreworICAgIHJldHVybiBpc1NW
R1NwYWNlKGMpIHx8IGMgPT0gJywnOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBjb25zdGV4cHIgYm9vbCBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY29uc3QgQ2hhcmFjdGVy
VHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewotICAgIHdoaWxlIChwdHIg
PCBlbmQgJiYgaXNTVkdTcGFjZSgqcHRyKSkKLSAgICAgICAgcHRyKys7CisgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzU1ZHU3BhY2U+KHB0ciwgZW5kKTsKICAgICByZXR1cm4gcHRyIDwg
ZW5kOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgYm9v
bCBza2lwT3B0aW9uYWxTVkdTcGFjZXMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiYgY2hhcmFjdGVycykKK3sKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNTVkdTcGFj
ZT4oY2hhcmFjdGVycyk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFp
bmluZygpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIg
Ym9vbCBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGNoYXIgZGVsaW1pdGVyID0gJywnKQog
ewogICAgIGlmIChwdHIgPCBlbmQgJiYgIWlzU1ZHU3BhY2UoKnB0cikgJiYgKnB0ciAhPSBkZWxp
bWl0ZXIpCkBAIC04NCwyOCArOTQsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gY29uc3RleAogICAgIHJldHVybiBwdHIgPCBlbmQ7CiB9CiAKLWNvbnN0ZXhwciBib29sIHNr
aXBTdHJpbmcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFy
KiBuYW1lLCBpbnQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29u
c3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgY2hhcmFjdGVycywgY2hhciBkZWxpbWl0ZXIgPSAnLCcp
CiB7Ci0gICAgaWYgKGVuZCAtIHB0ciA8IGxlbmd0aCkKKyAgICBpZiAoY2hhcmFjdGVycy5oYXND
aGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgIWlzU1ZHU3BhY2UoKmNoYXJhY3RlcnMpICYmICpjaGFy
YWN0ZXJzICE9IGRlbGltaXRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtZW1j
bXAobmFtZSwgcHRyLCBzaXplb2YoVUNoYXIpICogbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHB0ciArPSBsZW5ndGg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRl
PHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PgotaW5saW5lIGJvb2wgc2tpcFN0cmluZyhjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgY2hhciAoJnN0cilbY2hhcmFjdGVy
Q291bnRdKQotewotICAgIGludCBsZW5ndGggPSBjaGFyYWN0ZXJDb3VudCAtIDE7Ci0gICAgaWYg
KGVuZCAtIHB0ciA8IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKHB0cltpXSAhPSBzdHJbaV0p
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjaGFyYWN0ZXJzKSkgeworICAgICAgICBpZiAoY2hhcmFjdGVycy5oYXNDaGFyYWN0ZXJzUmVt
YWluaW5nKCkgJiYgKmNoYXJhY3RlcnMgPT0gZGVsaW1pdGVyKSB7CisgICAgICAgICAgICBjaGFy
YWN0ZXJzKys7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY2hhcmFjdGVycyk7
CisgICAgICAgIH0KICAgICB9Ci0gICAgcHRyICs9IGxlbmd0aDsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gY2hhcmFjdGVycy5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291
cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAko
cmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTksMTEgKzE5LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWcuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwogCiBjbGFzcyBTVkdQYXRoU291cmNlIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdQYXRoU291cmNlKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2Uu
Y3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTVkdQYXRoU3RyaW5nU291cmNlLmgiCiAKLSNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTMyLDMzICszMSwzMCBAQCBTVkdQYXRoU3RyaW5nU291cmNlOjpTVkdQ
YXRoU3RyaW5nU291cmNlCiB7CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKIAotICAg
IGlmIChtX2lzOEJpdFNvdXJjZSkgewotICAgICAgICBtX2N1cnJlbnQubV9jaGFyYWN0ZXI4ID0g
c3RyaW5nLmNoYXJhY3RlcnM4KCk7Ci0gICAgICAgIG1fZW5kLm1fY2hhcmFjdGVyOCA9IG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjggKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgbV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYgPSBzdHJpbmcuY2hhcmFjdGVyczE2KCk7Ci0gICAg
ICAgIG1fZW5kLm1fY2hhcmFjdGVyMTYgPSBtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiArIHN0cmlu
Zy5sZW5ndGgoKTsKLSAgICB9CisgICAgaWYgKG1faXM4Qml0U291cmNlKQorICAgICAgICBtX3Bh
cnNpbmdCdWZmZXI4ID0geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIH07
CisgICAgZWxzZQorICAgICAgICBtX3BhcnNpbmdCdWZmZXIxNiA9IHsgc3RyaW5nLmNoYXJhY3Rl
cnMxNigpLCBzdHJpbmcubGVuZ3RoKCkgfTsKIH0KIAogYm9vbCBTVkdQYXRoU3RyaW5nU291cmNl
OjpoYXNNb3JlRGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAg
ICByZXR1cm4gbV9jdXJyZW50Lm1fY2hhcmFjdGVyOCA8IG1fZW5kLm1fY2hhcmFjdGVyODsKLSAg
ICByZXR1cm4gbV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYgPCBtX2VuZC5tX2NoYXJhY3RlcjE2Owor
ICAgICAgICByZXR1cm4gbV9wYXJzaW5nQnVmZmVyOC5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCk7
CisgICAgcmV0dXJuIG1fcGFyc2luZ0J1ZmZlcjE2Lmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKTsK
IH0KIAogYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjptb3ZlVG9OZXh0VG9rZW4oKQogewogICAg
IGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVy
biBza2lwT3B0aW9uYWxTVkdTcGFjZXMobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1f
Y2hhcmFjdGVyMTYpOworICAgICAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1fcGFy
c2luZ0J1ZmZlcjgpOworICAgIHJldHVybiBza2lwT3B0aW9uYWxTVkdTcGFjZXMobV9wYXJzaW5n
QnVmZmVyMTYpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IE9wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBuZXh0Q29tbWFuZEhlbHBlcihjb25zdCBDaGFyYWN0
ZXJUeXBlKiYgY3VycmVudCwgU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKQordGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdQYXRoU2VnVHlw
ZT4gbmV4dENvbW1hbmRIZWxwZXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYg
cGFyc2luZ0J1ZmZlciwgU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKQogewogICAgIC8v
IENoZWNrIGZvciByZW1haW5pbmcgY29vcmRpbmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29tbWFuZC4K
LSAgICBpZiAoKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1cnJlbnQg
PT0gJy4nIHx8IGlzQVNDSUlEaWdpdCgqY3VycmVudCkpCisgICAgaWYgKCgqcGFyc2luZ0J1ZmZl
ciA9PSAnKycgfHwgKnBhcnNpbmdCdWZmZXIgPT0gJy0nIHx8ICpwYXJzaW5nQnVmZmVyID09ICcu
JyB8fCBpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpKQogICAgICAgICAmJiBwcmV2aW91c0Nv
bW1hbmQgIT0gUGF0aFNlZ0Nsb3NlUGF0aCkgewogICAgICAgICBpZiAocHJldmlvdXNDb21tYW5k
ID09IFBhdGhTZWdNb3ZlVG9BYnMpCiAgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0Fi
czsKQEAgLTczLDE1MCArNjksMTM4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBzdGF0aWMKIFNWR1BhdGhTZWdUeXBlIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om5leHRDb21tYW5k
KFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkKIHsKICAgICBpZiAobV9pczhCaXRTb3Vy
Y2UpIHsKLSAgICAgICAgaWYgKGF1dG8gbmV4dENvbW1hbmQgPSBuZXh0Q29tbWFuZEhlbHBlciht
X2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBwcmV2aW91c0NvbW1hbmQpKQorICAgICAgICBpZiAoYXV0
byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fcGFyc2luZ0J1ZmZlcjgsIHByZXZp
b3VzQ29tbWFuZCkpCiAgICAgICAgICAgICByZXR1cm4gKm5leHRDb21tYW5kOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChhdXRvIG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyMTYsIHByZXZpb3VzQ29tbWFuZCkpCisgICAgICAgIGlmIChhdXRv
IG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9wYXJzaW5nQnVmZmVyMTYsIHByZXZp
b3VzQ29tbWFuZCkpCiAgICAgICAgICAgICByZXR1cm4gKm5leHRDb21tYW5kOwogICAgIH0KIAog
ICAgIHJldHVybiAqcGFyc2VTVkdTZWdtZW50VHlwZSgpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIFNWR1BhdGhTZWdUeXBlIHBhcnNlU1ZHU2VnbWVudFR5
cGVIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGPiBkZWNsdHlwZShhdXRvKSBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZShGJiYgZnVuY3Rv
cikKIHsKLSAgICBzd2l0Y2ggKCooY3VycmVudCsrKSkgewotICAgIGNhc2UgJ1onOgotICAgIGNh
c2UgJ3onOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0Nsb3NlUGF0aDsKLSAgICBjYXNlICdNJzoK
LSAgICAgICAgcmV0dXJuIFBhdGhTZWdNb3ZlVG9BYnM7Ci0gICAgY2FzZSAnbSc6Ci0gICAgICAg
IHJldHVybiBQYXRoU2VnTW92ZVRvUmVsOwotICAgIGNhc2UgJ0wnOgotICAgICAgICByZXR1cm4g
UGF0aFNlZ0xpbmVUb0FiczsKLSAgICBjYXNlICdsJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdM
aW5lVG9SZWw7Ci0gICAgY2FzZSAnQyc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1
YmljQWJzOwotICAgIGNhc2UgJ2MnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJp
Y1JlbDsKLSAgICBjYXNlICdRJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJh
dGljQWJzOwotICAgIGNhc2UgJ3EnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFk
cmF0aWNSZWw7Ci0gICAgY2FzZSAnQSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQXJjQWJzOwot
ICAgIGNhc2UgJ2EnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0FyY1JlbDsKLSAgICBjYXNlICdI
JzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOwotICAgIGNhc2Ug
J2gnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWw7Ci0gICAgY2Fz
ZSAnVic6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxBYnM7Ci0gICAgY2Fz
ZSAndic6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw7Ci0gICAgY2Fz
ZSAnUyc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzOwotICAg
IGNhc2UgJ3MnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDsK
LSAgICBjYXNlICdUJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoQWJzOwotICAgIGNhc2UgJ3QnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFk
cmF0aWNTbW9vdGhSZWw7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdVbmtu
b3duOwotICAgIH0KKyAgICBpZiAobV9pczhCaXRTb3VyY2UpCisgICAgICAgIHJldHVybiBmdW5j
dG9yKG1fcGFyc2luZ0J1ZmZlcjgpOworICAgIHJldHVybiBmdW5jdG9yKG1fcGFyc2luZ0J1ZmZl
cjE2KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlU1ZHU2VnbWVudFR5cGUoKQogewotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAg
ICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCk7Ci0gICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hh
cmFjdGVyMTYpOworICAgIHJldHVybiBwYXJzZShbXShhdXRvJiBwYXJzaW5nQnVmZmVyKSAtPiBT
VkdQYXRoU2VnVHlwZSB7CisgICAgICAgIGF1dG8gY2hhcmFjdGVyID0gKnBhcnNpbmdCdWZmZXI7
CisgICAgICAgIHBhcnNpbmdCdWZmZXIrKzsKKyAgICAgICAgc3dpdGNoIChjaGFyYWN0ZXIpIHsK
KyAgICAgICAgY2FzZSAnWic6CisgICAgICAgIGNhc2UgJ3onOgorICAgICAgICAgICAgcmV0dXJu
IFBhdGhTZWdDbG9zZVBhdGg7CisgICAgICAgIGNhc2UgJ00nOgorICAgICAgICAgICAgcmV0dXJu
IFBhdGhTZWdNb3ZlVG9BYnM7CisgICAgICAgIGNhc2UgJ20nOgorICAgICAgICAgICAgcmV0dXJu
IFBhdGhTZWdNb3ZlVG9SZWw7CisgICAgICAgIGNhc2UgJ0wnOgorICAgICAgICAgICAgcmV0dXJu
IFBhdGhTZWdMaW5lVG9BYnM7CisgICAgICAgIGNhc2UgJ2wnOgorICAgICAgICAgICAgcmV0dXJu
IFBhdGhTZWdMaW5lVG9SZWw7CisgICAgICAgIGNhc2UgJ0MnOgorICAgICAgICAgICAgcmV0dXJu
IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnM7CisgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAg
cmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw7CisgICAgICAgIGNhc2UgJ1EnOgorICAgICAg
ICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzOworICAgICAgICBjYXNlICdx
JzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1JlbDsKKyAgICAg
ICAgY2FzZSAnQSc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0FyY0FiczsKKyAgICAgICAg
Y2FzZSAnYSc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0FyY1JlbDsKKyAgICAgICAgY2Fz
ZSAnSCc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxBYnM7Cisg
ICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9u
dGFsUmVsOworICAgICAgICBjYXNlICdWJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGlu
ZVRvVmVydGljYWxBYnM7CisgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgcmV0dXJuIFBh
dGhTZWdMaW5lVG9WZXJ0aWNhbFJlbDsKKyAgICAgICAgY2FzZSAnUyc6CisgICAgICAgICAgICBy
ZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFiczsKKyAgICAgICAgY2FzZSAncyc6Cisg
ICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDsKKyAgICAgICAg
Y2FzZSAnVCc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9v
dGhBYnM7CisgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2
ZVRvUXVhZHJhdGljU21vb3RoUmVsOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIFBhdGhTZWdVbmtub3duOworICAgICAgICB9CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNW
R1BhdGhTb3VyY2U6Ok1vdmVUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTW92
ZVRvU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVu
dCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxNb3ZlVG9TZWdtZW50PiB7Ci0gICAgICAg
IGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICBy
ZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8TW92ZVRvU2Vn
bWVudD4geworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KHBhcnNp
bmdCdWZmZXIpOwogICAgICAgICBpZiAoIXRhcmdldFBvaW50KQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICAgICAgCiAgICAgICAgIE1vdmVUb1NlZ21lbnQgc2VnbWVudDsK
ICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IFdURk1vdmUoKnRhcmdldFBvaW50KTsKICAg
ICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkK
LSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2No
YXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1f
ZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNl
OjpMaW5lVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQo
KQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1
dG8qIGVuZCkgLT4gT3B0aW9uYWw8TGluZVRvU2VnbWVudD4gewotICAgICAgICBhdXRvIHRhcmdl
dFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNl
KFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHsKKyAg
ICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsK
ICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIAogICAgICAgICBMaW5lVG9TZWdtZW50IHNlZ21lbnQ7CiAgICAgICAgIHNl
Z21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7CiAgICAgICAgIHJldHVy
biBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJl
dHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsK
LSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJh
Y3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQs
IGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IHsK
LSAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4g
cGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7
CiAgICAgICAgIGlmICgheCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIAogICAgICAgICBMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCBzZWdtZW50OwogICAgICAgICBz
ZWdtZW50LnggPSAqeDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlm
IChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFy
YWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50
Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRp
b25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdT
b3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9
IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExp
bmVUb1ZlcnRpY2FsU2VnbWVudD4gewotICAgICAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXJy
ZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShbXShhdXRvJiBwYXJzaW5nQnVmZmVyKSAtPiBP
cHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB5ID0gcGFyc2VO
dW1iZXIocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICgheSkKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICBMaW5lVG9WZXJ0aWNhbFNlZ21lbnQg
c2VnbWVudDsKICAgICAgICAgc2VnbWVudC55ID0gKnk7CiAgICAgICAgIHJldHVybiBzZWdtZW50
OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxw
ZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1
cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsK
KyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU2VnbWVu
dD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKIHsKLSAg
ICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQp
IC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHsKLSAgICAgICAgYXV0byBwb2ludDEg
PSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0
byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU2VnbWVudD4geworICAg
ICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAg
ICAgaWYgKCFwb2ludDEpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ICAgIGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAg
IGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBp
ZiAoIXBvaW50MikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAg
YXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAg
ICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOwogICAg
ICAgICBpZiAoIXRhcmdldFBvaW50KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IApAQCAtMjI1LDIxICsyMDksMTcgQEAgT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1
YmljU2VnbQogICAgICAgICBzZWdtZW50LnBvaW50MiA9ICpwb2ludDI7CiAgICAgICAgIHNlZ21l
bnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CiAgICAgICAgIHJldHVybiBzZWdtZW50Owot
ICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4g
aGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAg
ICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU21vb3RoU2Vn
bWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50
KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBh
dXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IHsKLSAgICAg
ICAgYXV0byBwb2ludDIgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1
cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8Q3VydmVUb0N1Ymlj
U21vb3RoU2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChw
YXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFwb2ludDIpCiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9p
bnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQ
b2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAgLTI0NywyMSArMjI3LDE3IEBAIE9wdGlvbmFs
PFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Ntb28KICAgICAgICAgc2VnbWVudC5wb2ludDIg
PSAqcG9pbnQyOwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50Owog
ICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNl
KQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1f
Y2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwg
bV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3Vy
Y2U6OkN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1
dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0
aWNTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJl
bnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9w
dGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiB7CisgICAgICAgIGF1dG8gcG9pbnQxID0g
cGFyc2VGbG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXBvaW50MSkKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgYXV0byB0YXJnZXRQb2lu
dCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHRhcmdldFBv
aW50ID0gcGFyc2VGbG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXRhcmdl
dFBvaW50KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMjY5LDQ5ICsy
NDUsNDEgQEAgT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpYwogICAgICAg
ICBzZWdtZW50LnBvaW50MSA9ICpwb2ludDE7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQg
PSAqdGFyZ2V0UG9pbnQ7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBp
ZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hh
cmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVu
dC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0
aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IFNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogewot
ICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVu
ZCkgLT4gT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHsKLSAgICAgICAg
YXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJl
dHVybiBwYXJzZShbXShhdXRvJiBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoU2VnbWVudD4geworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VG
bG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXRhcmdldFBvaW50KQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBDdXJ2ZVRvUXVhZHJhdGlj
U21vb3RoU2VnbWVudCBzZWdtZW50OwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRh
cmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1f
aXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFs
PFNWR1BhdGhTb3VyY2U6OkFyY1RvU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VB
cmNUb1NlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJl
bnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8QXJjVG9TZWdtZW50PiB7Ci0gICAgICAg
IGF1dG8gcnggPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShb
XShhdXRvJiBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHsKKyAgICAg
ICAgYXV0byByeCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXJ4
KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byByeSA9IHBh
cnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8gcnkgPSBwYXJzZU51bWJlcihw
YXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFyeSkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgICAgIGF1dG8gYW5nbGUgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQp
OworICAgICAgICBhdXRvIGFuZ2xlID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CiAgICAg
ICAgIGlmICghYW5nbGUpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAg
ICBhdXRvIGxhcmdlQXJjID0gcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1
dG8gbGFyZ2VBcmMgPSBwYXJzZUFyY0ZsYWcocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICgh
bGFyZ2VBcmMpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBhdXRv
IHN3ZWVwID0gcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8gc3dlZXAg
PSBwYXJzZUFyY0ZsYWcocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghc3dlZXApCiAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0g
cGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQg
PSBwYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9p
bnQpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCkBAIC0zMjMsMTEgKzI5MSw3
IEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkFyY1RvU2VnbWVudD4gU1YKICAgICAgICAgc2Vn
bWVudC5zd2VlcCA9ICpzd2VlcDsKICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJn
ZXRQb2ludDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4
LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hh
cmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2Uu
aAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdT
b3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJTVkdQYXRoU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFy
c2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC00NSwxNyArNDYsMTUgQEAgcHJpdmF0ZToKICAgICBPcHRpb25hbDxD
dXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudCgpIGZpbmFsOwogICAgIE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gcGFyc2VBcmNUb1Nl
Z21lbnQoKSBmaW5hbDsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEY+IGRlY2x0eXBlKGF1dG8p
IHBhcnNlKEYmJik7CisKICAgICBTdHJpbmcgbV9zdHJpbmc7CiAgICAgYm9vbCBtX2lzOEJpdFNv
dXJjZTsKIAogICAgIHVuaW9uIHsKLSAgICAgICAgY29uc3QgTENoYXIqIG1fY2hhcmFjdGVyODsK
LSAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyMTY7Ci0gICAgfSBtX2N1cnJlbnQ7Ci0g
ICAgdW5pb24gewotICAgICAgICBjb25zdCBMQ2hhciogbV9jaGFyYWN0ZXI4OwotICAgICAgICBj
b25zdCBVQ2hhciogbV9jaGFyYWN0ZXIxNjsKLSAgICB9IG1fZW5kOworICAgICAgICBTdHJpbmdQ
YXJzaW5nQnVmZmVyPExDaGFyPiBtX3BhcnNpbmdCdWZmZXI4OworICAgICAgICBTdHJpbmdQYXJz
aW5nQnVmZmVyPFVDaGFyPiBtX3BhcnNpbmdCdWZmZXIxNjsKKyAgICB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTVkdQb2ludExpc3QuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTVkdQb2ludExpc3Q6OnBhcnNlKGNvbnN0IFN0
cmluZyYgdmFsdWUpCit7CisgICAgY2xlYXJJdGVtcygpOworCisgICAgcmV0dXJuIFdURjo6cmVh
ZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7Cisg
ICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKworICAgICAgICBi
b29sIGRlbGltUGFyc2VkID0gZmFsc2U7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhh
c0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxz
ZTsKKworICAgICAgICAgICAgYXV0byB4UG9zID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7
CisgICAgICAgICAgICBpZiAoIXhQb3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICBhdXRvIHlQb3MgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZm
aXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICAgICAgaWYgKCF5UG9zKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKHBhcnNpbmdCdWZmZXIpOworCisgICAgICAgICAgICBpZiAoc2tpcEV4YWN0bHkocGFy
c2luZ0J1ZmZlciwgJywnKSkKKyAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7CisK
KyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKworICAg
ICAgICAgICAgYXBwZW5kKFNWR1BvaW50OjpjcmVhdGUoeyAqeFBvcywgKnlQb3MgfSkpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNsZWFySXRlbXMoKSBvbiBm
YWlsdXJlIGxpa2UgU1ZHVHJhbnNmb3JtTGlzdCBkb2VzPworCisgICAgICAgIHJldHVybiAhZGVs
aW1QYXJzZWQ7CisgICAgfSk7Cit9CisKK1N0cmluZyBTVkdQb2ludExpc3Q6OnZhbHVlQXNTdHJp
bmcoKSBjb25zdAoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZvciAoY29u
c3QgYXV0byYgcG9pbnQgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgp
KQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBidWlsZGVyLmFw
cGVuZChwb2ludC0+eCgpLCAnICcsIHBvaW50LT55KCkpOworICAgIH0KKworICAgIHJldHVybiBi
dWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
b2ludExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0
LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNTAsNTUgKzUwLDggQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTVkdQb2ludExpc3Qob3RoZXIsIGFjY2VzcykpOwogICAgIH0KIAot
ICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGNsZWFy
SXRlbXMoKTsKLQotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1Zp
ZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25zdCBVQ2hhciog
Y3VyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgICAgICBjb25zdCBVQ2hhciogZW5kID0g
Y3VyICsgdmFsdWUubGVuZ3RoKCk7Ci0KLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1
ciwgZW5kKTsKLQotICAgICAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIHdo
aWxlIChjdXIgPCBlbmQpIHsKLSAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGF1dG8geFBvcyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAgICAg
IGlmICgheFBvcykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAg
IGF1dG8geVBvcyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6
RG9udFNraXApOwotICAgICAgICAgICAgaWYgKCF5UG9zKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsK
LQotICAgICAgICAgICAgaWYgKGN1ciA8IGVuZCAmJiAqY3VyID09ICcsJykgewotICAgICAgICAg
ICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjdXIrKzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0K
LSAgICAgICAgICAgIGFwcGVuZChTVkdQb2ludDo6Y3JlYXRlKHsgKnhQb3MsICp5UG9zIH0pKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7Ci0gICAgfQotCi0gICAg
U3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgcG9pbnQgOiBt
X2l0ZW1zKSB7Ci0gICAgICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKLSAgICAgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChw
b2ludC0+eCgpLCAnICcsIHBvaW50LT55KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9CisgICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcm
IHZhbHVlKTsKKyAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogfTsK
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZS5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0
aWVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYsNyArMzcsNyBA
QCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlCiB7CiB9CiAKLVNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCitTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZShjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSkKIHsKICAgICBwYXJzZSh2
YWx1ZSk7CiB9CkBAIC01OSwxOSArNjAsMzAgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpbwogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlOjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQorYm9vbCBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlKGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKQogewotICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luID0gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzOwotICAgIHBhcnNlSW50ZXJuYWwoYmVnaW4sIGJlZ2luICsgdmFsdWUubGVuZ3RoKCks
IHRydWUpOworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwg
WyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICByZXR1cm4gcGFyc2VJbnRlcm5hbChw
YXJzaW5nQnVmZmVyLCB0cnVlKTsKKyAgICB9KTsKIH0KIAotYm9vbCBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWU6OnBhcnNlKGNvbnN0IFVDaGFyKiYgY3VyclBhcmFtLCBjb25zdCBVQ2hhciog
ZW5kLCBib29sIHZhbGlkYXRlKQorYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBh
cnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyLCBib29sIHZhbGlk
YXRlKQogewotICAgIHJldHVybiBwYXJzZUludGVybmFsKGN1cnJQYXJhbSwgZW5kLCB2YWxpZGF0
ZSk7CisgICAgcmV0dXJuIHBhcnNlSW50ZXJuYWwocGFyc2luZ0J1ZmZlciwgdmFsaWRhdGUpOwog
fQogCi1ib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJbnRlcm5hbChjb25z
dCBVQ2hhciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKK2Jv
b2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVy
PFVDaGFyPiYgcGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKK3sKKyAgICByZXR1cm4gcGFy
c2VJbnRlcm5hbChwYXJzaW5nQnVmZmVyLCB2YWxpZGF0ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIGRlZmVyRGVzY1tdID0g
IHsnZCcsICdlJywgJ2YnLCAnZScsICdyJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBub25lRGVzY1tdID0gIHsnbicsICdvJywgJ24n
LCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJh
Y3RlclR5cGUgbWVldERlc2NbXSA9ICB7J20nLCAnZScsICdlJywgJ3QnfTsKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHNsaWNlRGVzY1td
ID0gIHsncycsICdsJywgJ2knLCAnYycsICdlJ307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Citib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJbnRlcm5h
bChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyLCBib29s
IHZhbGlkYXRlKQogewogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlIGFsaWduID0gU1ZH
X1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSUQ7CiAgICAgU1ZHTWVldE9yU2xpY2VUeXBlIG1l
ZXRPclNsaWNlID0gU1ZHX01FRVRPUlNMSUNFX01FRVQ7CkBAIC03OSwxMDAgKzkxLDEwMCBAQCBi
b29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJCiAgICAgbV9hbGlnbiA9IGFs
aWduOwogICAgIG1fbWVldE9yU2xpY2UgPSBtZWV0T3JTbGljZTsKIAotICAgIGlmICghc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKGN1cnJQYXJhbSwgZW5kKSkKKyAgICBpZiAoIXNraXBPcHRpb25hbFNW
R1NwYWNlcyhwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KCpjdXJyUGFyYW0gPT0gJ2QnKSB7Ci0gICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0s
IGVuZCwgImRlZmVyIikpIHsKKyAgICBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ2QnKSB7CisgICAg
ICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIGRlZmVyRGVzYzxD
aGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJz
ZSBleGNlcHQgZm9yICpkZWZlciogdmFsdWUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGSVhNRTogV2UganVzdCBpZ25vcmUgdGhlICJkZWZl
ciIgaGVyZS4KLSAgICAgICAgaWYgKGN1cnJQYXJhbSA9PSBlbmQpCisgICAgICAgIGlmIChwYXJz
aW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBp
ZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCkpCisgICAgICAgIGlmICgh
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIGlmICgqY3VyclBhcmFtID09ICduJykgewotICAgICAgICBp
ZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJub25lIikpIHsKKyAgICBpZiAoKnBhcnNp
bmdCdWZmZXIgPT0gJ24nKSB7CisgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBh
cnNpbmdCdWZmZXIsIG5vbmVEZXNjPENoYXJhY3RlclR5cGU+KSkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJTa2lwcGVkIHRvIHBhcnNlIGV4Y2VwdCBmb3IgKm5vbmUqIHZhbHVlLiIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGFsaWduID0gU1ZHX1BS
RVNFUlZFQVNQRUNUUkFUSU9fTk9ORTsKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1
cnJQYXJhbSwgZW5kKTsKLSAgICB9IGVsc2UgaWYgKCpjdXJyUGFyYW0gPT0gJ3gnKSB7Ci0gICAg
ICAgIGlmICgoZW5kIC0gY3VyclBhcmFtKSA8IDgpCisgICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlcyhwYXJzaW5nQnVmZmVyKTsKKyAgICB9IGVsc2UgaWYgKCpwYXJzaW5nQnVmZmVyID09ICd4
JykgeworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA8IDgpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjdXJyUGFyYW1bMV0gIT0gJ00n
IHx8IGN1cnJQYXJhbVs0XSAhPSAnWScgfHwgY3VyclBhcmFtWzVdICE9ICdNJykKKyAgICAgICAg
aWYgKHBhcnNpbmdCdWZmZXJbMV0gIT0gJ00nIHx8IHBhcnNpbmdCdWZmZXJbNF0gIT0gJ1knIHx8
IHBhcnNpbmdCdWZmZXJbNV0gIT0gJ00nKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBpZiAoY3VyclBhcmFtWzJdID09ICdpJykgewotICAgICAgICAgICAgaWYgKGN1cnJQYXJh
bVszXSA9PSAnbicpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdpJykg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzddID09ICduJykKKyAgICAgICAg
aWYgKHBhcnNpbmdCdWZmZXJbMl0gPT0gJ2knKSB7CisgICAgICAgICAgICBpZiAocGFyc2luZ0J1
ZmZlclszXSA9PSAnbicpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlcls2XSA9
PSAnaScpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbN10gPT0gJ24n
KQogICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJ
T19YTUlOWU1JTjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBhcmFtWzddID09
ICdkJykKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyc2luZ0J1ZmZlcls3XSA9PSAn
ZCcpCiAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJB
VElPX1hNSU5ZTUlEOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFy
YW1bNl0gPT0gJ2EnICYmIGN1cnJQYXJhbVs3XSA9PSAneCcpCisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChwYXJzaW5nQnVmZmVyWzZdID09ICdhJyAmJiBwYXJzaW5nQnVmZmVyWzddID09ICd4
JykKICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19Y
TUlOWU1BWDsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJQYXJhbVszXSA9PSAnZCcpIHsK
LSAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdpJykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoY3VyclBhcmFtWzddID09ICduJykKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
cGFyc2luZ0J1ZmZlclszXSA9PSAnZCcpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2luZ0J1
ZmZlcls2XSA9PSAnaScpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJb
N10gPT0gJ24nKQogICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVB
U1BFQ1RSQVRJT19YTUlEWU1JTjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBh
cmFtWzddID09ICdkJykKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyc2luZ0J1ZmZl
cls3XSA9PSAnZCcpCiAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1hNSURZTUlEOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjdXJyUGFyYW1bNl0gPT0gJ2EnICYmIGN1cnJQYXJhbVs3XSA9PSAneCcpCisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChwYXJzaW5nQnVmZmVyWzZdID09ICdhJyAmJiBwYXJzaW5nQnVmZmVy
WzddID09ICd4JykKICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BF
Q1RSQVRJT19YTUlEWU1BWDsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bMl0gPT0gJ2EnICYmIGN1
cnJQYXJhbVszXSA9PSAneCcpIHsKLSAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bNl0gPT0gJ2kn
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAgIH0g
ZWxzZSBpZiAocGFyc2luZ0J1ZmZlclsyXSA9PSAnYScgJiYgcGFyc2luZ0J1ZmZlclszXSA9PSAn
eCcpIHsKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzZdID09ICdpJykgeworICAgICAg
ICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzddID09ICduJykKICAgICAgICAgICAgICAgICAg
ICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JTjsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChjdXJyUGFyYW1bN10gPT0gJ2QnKQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHBhcnNpbmdCdWZmZXJbN10gPT0gJ2QnKQogICAgICAgICAgICAgICAgICAgICBhbGlnbiA9
IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlEOwogICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChjdXJyUGFyYW1bNl0gPT0gJ2EnICYmIGN1cnJQYXJhbVs3XSA9PSAneCcpCisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbNl0gPT0gJ2EnICYmIHBhcnNpbmdCdWZmZXJbN10g
PT0gJ3gnKQogICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9f
WE1BWFlNQVg7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3Vy
clBhcmFtICs9IDg7Ci0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVu
ZCk7CisgICAgICAgIHBhcnNpbmdCdWZmZXIuYWR2YW5jZUJ5KDgpOworICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChjdXJyUGFyYW0gPCBlbmQpIHsKLSAgICAgICAgaWYgKCpjdXJy
UGFyYW0gPT0gJ20nKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBl
bmQsICJtZWV0IikpIHsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWlu
aW5nKCkpIHsKKyAgICAgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdtJykgeworICAgICAgICAg
ICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgbWVldERlc2M8Q2hh
cmFjdGVyVHlwZT4pKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJTa2lwcGVkIHRvIHBh
cnNlIGV4Y2VwdCBmb3IgKm1lZXQqIG9yICpzbGljZSogdmFsdWUuIik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKGN1cnJQYXJhbSwgZW5kKTsKLSAgICAgICAgfSBlbHNlIGlmICgqY3VyclBhcmFt
ID09ICdzJykgewotICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAi
c2xpY2UiKSkgeworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZm
ZXIpOworICAgICAgICB9IGVsc2UgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdzJykgeworICAgICAg
ICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgc2xpY2VEZXNj
PENoYXJhY3RlclR5cGU+KSkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0
byBwYXJzZSBleGNlcHQgZm9yICptZWV0KiBvciAqc2xpY2UqIHZhbHVlLiIpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNraXBPcHRp
b25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgICAgICBpZiAoYWxpZ24gIT0gU1ZHX1BS
RVNFUlZFQVNQRUNUUkFUSU9fTk9ORSkKICAgICAgICAgICAgICAgICBtZWV0T3JTbGljZSA9IFNW
R19NRUVUT1JTTElDRV9TTElDRTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChlbmQgIT0g
Y3VyclBhcmFtICYmIHZhbGlkYXRlKQorICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpICYm
IHZhbGlkYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2FsaWduID0gYWxpZ247
CkBAIC0zMjgsNTIgKzM0MCw0NCBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhCiAKIFN0cmluZyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnZhbHVlQXNTdHJp
bmcoKSBjb25zdAogewotICAgIFN0cmluZyBhbGlnblR5cGU7CisgICAgYXV0byBhbGlnblR5cGUg
PSBbJl0oKSB7CisgICAgICAgIHN3aXRjaCAobV9hbGlnbikgeworICAgICAgICBjYXNlIFNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX05PTkU6CisgICAgICAgICAgICByZXR1cm4gIm5vbmUiOworICAg
ICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlOOgorICAgICAgICAgICAg
cmV0dXJuICJ4TWluWU1pbiI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9f
WE1JRFlNSU46CisgICAgICAgICAgICByZXR1cm4gInhNaWRZTWluIjsKKyAgICAgICAgY2FzZSBT
VkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JTjoKKyAgICAgICAgICAgIHJldHVybiAieE1h
eFlNaW4iOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlEOgor
ICAgICAgICAgICAgcmV0dXJuICJ4TWluWU1pZCI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1JRFlNSUQ6CisgICAgICAgICAgICByZXR1cm4gInhNaWRZTWlkIjsKKyAg
ICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRDoKKyAgICAgICAgICAg
IHJldHVybiAieE1heFlNaWQiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElP
X1hNSU5ZTUFYOgorICAgICAgICAgICAgcmV0dXJuICJ4TWluWU1heCI7CisgICAgICAgIGNhc2Ug
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNQVg6CisgICAgICAgICAgICByZXR1cm4gInhN
aWRZTWF4IjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1BWDoK
KyAgICAgICAgICAgIHJldHVybiAieE1heFlNYXgiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1VOS05PV046CisgICAgICAgICAgICByZXR1cm4gInVua25vd24iOworICAg
ICAgICB9OwogCi0gICAgc3dpdGNoIChtX2FsaWduKSB7Ci0gICAgY2FzZSBTVkdfUFJFU0VSVkVB
U1BFQ1RSQVRJT19OT05FOgotICAgICAgICBhbGlnblR5cGUgPSAibm9uZSI7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSU46Ci0gICAgICAg
IGFsaWduVHlwZSA9ICJ4TWluWU1pbiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BS
RVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSU46Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlkWU1p
biI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1B
WFlNSU46Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWF4WU1pbiI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSUQ6Ci0gICAgICAgIGFsaWdu
VHlwZSA9ICJ4TWluWU1pZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1JRFlNSUQ6Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlkWU1pZCI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSUQ6
Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWF4WU1pZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNQVg6Ci0gICAgICAgIGFsaWduVHlwZSA9
ICJ4TWluWU1heCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNU
UkFUSU9fWE1JRFlNQVg6Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlkWU1heCI7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNQVg6Ci0gICAg
ICAgIGFsaWduVHlwZSA9ICJ4TWF4WU1heCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZH
X1BSRVNFUlZFQVNQRUNUUkFUSU9fVU5LTk9XTjoKLSAgICAgICAgYWxpZ25UeXBlID0gInVua25v
d24iOwotICAgICAgICBicmVhazsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiAidW5rbm93biI7CiAgICAgfTsKIAogICAgIHN3aXRjaCAobV9tZWV0T3JTbGlj
ZSkgewogICAgIGRlZmF1bHQ6CiAgICAgY2FzZSBTVkdfTUVFVE9SU0xJQ0VfVU5LTk9XTjoKLSAg
ICAgICAgcmV0dXJuIGFsaWduVHlwZTsKKyAgICAgICAgcmV0dXJuIGFsaWduVHlwZSgpOwogICAg
IGNhc2UgU1ZHX01FRVRPUlNMSUNFX01FRVQ6Ci0gICAgICAgIHJldHVybiBhbGlnblR5cGUgKyAi
IG1lZXQiOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhhbGlnblR5cGUoKSwgIiBtZWV0Iik7
CiAgICAgY2FzZSBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0U6Ci0gICAgICAgIHJldHVybiBhbGlnblR5
cGUgKyAiIHNsaWNlIjsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYWxpZ25UeXBlKCksICIg
c2xpY2UiKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSgpOwotICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShjb25zdCBTdHJp
bmcmKTsKKyAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nVmlldyYp
OwogCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0QWxpZ24odW5zaWduZWQgc2hvcnQpOwogICAg
IHVuc2lnbmVkIHNob3J0IGFsaWduKCkgY29uc3QgeyByZXR1cm4gbV9hbGlnbjsgfQpAQCAtNjQs
OCArNjQsOSBAQCBwdWJsaWM6CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKGZsb2F0IGxv
Z2ljYWxYLCBmbG9hdCBsb2dpY2FsWSwgZmxvYXQgbG9naWNhbFdpZHRoLCBmbG9hdCBsb2dpY2Fs
SGVpZ2h0LCBmbG9hdCBwaHlzaWNhbFdpZHRoLCBmbG9hdCBwaHlzaWNhbEhlaWdodCkgY29uc3Q7
CiAKLSAgICB2b2lkIHBhcnNlKGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgcGFyc2UoY29uc3Qg
VUNoYXIqJiBjdXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpOworICAg
IGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nVmlldyYpOworICAgIGJvb2wgcGFyc2UoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxMQ2hhcj4mLCBib29sIHZhbGlkYXRlKTsKKyAgICBib29sIHBhcnNlKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8VUNoYXI+JiwgYm9vbCB2YWxpZGF0ZSk7CiAKICAgICBTdHJpbmcgdmFs
dWVBc1N0cmluZygpIGNvbnN0OwogCkBAIC03Myw3ICs3NCw4IEBAIHByaXZhdGU6CiAgICAgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1R5cGUgbV9hbGlnbjsKICAgICBTVkdNZWV0T3JTbGljZVR5cGUg
bV9tZWV0T3JTbGljZTsKIAotICAgIGJvb2wgcGFyc2VJbnRlcm5hbChjb25zdCBVQ2hhciomIGN1
cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBib29sIHBhcnNlSW50ZXJuYWwoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYsIGJvb2wgdmFsaWRhdGUpOwogfTsKIAogdGVtcGxh
dGU8PiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
PiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNWR1N0cmluZ0xpc3QuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworYm9vbCBTVkdTdHJpbmdMaXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIGRh
dGEsIFVDaGFyIGRlbGltaXRlcikKK3sKKyAgICBjbGVhckl0ZW1zKCk7CisKKyAgICBhdXRvIGlz
U1ZHU3BhY2VPckRlbGltaXRlciA9IFtkZWxpbWl0ZXJdKGF1dG8gYykgeworICAgICAgICByZXR1
cm4gaXNTVkdTcGFjZShjKSB8fCBjID09IGRlbGltaXRlcjsKKyAgICB9OworCisgICAgcmV0dXJu
IFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKGRhdGEsIFsmXShhdXRvIHBhcnNpbmdCdWZm
ZXIpIHsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpKSB7CisgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgYSBuaWNl
IGltcHJvdmVtZW50IHRvIGFkZCBhIHZhcmlhbnQgb2Ygc2tpcFVudGlsIHdoaWNoIHdvcmtlZAor
ICAgICAgICAgICAgLy8gd2l0aCBsYW1iZGEgcHJlZGljYXRlcy4KKyAgICAgICAgICAgIHdoaWxl
IChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhaXNTVkdTcGFjZU9y
RGVsaW1pdGVyKCpwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgICAgICAgICArK3BhcnNpbmdCdWZm
ZXI7CisKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gc3RhcnQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtX2l0ZW1zLmFwcGVuZChTdHJp
bmcoc3RhcnQsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIHN0YXJ0KSk7CisgICAgICAgICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyLCBkZWxpbWl0
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNsZWFySXRl
bXMoKSBvbiBmYWlsdXJlIGxpa2UgU1ZHVHJhbnNmb3JtTGlzdCBkb2VzPworCisgICAgICAgIHJl
dHVybiBwYXJzaW5nQnVmZmVyLmF0RW5kKCk7CisgICAgfSk7Cit9CisKK1N0cmluZyBTVkdTdHJp
bmdMaXN0Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6IG1faXRlbXMpIHsKKyAgICAgICAg
aWYgKGJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwor
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1
aWxkZXIudG9TdHJpbmcoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0
cmluZ0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlz
dC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwzOSArNTEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtX2l0ZW1zLmFwcGVuZChlbXB0eVN0cmluZygpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNl
KGNvbnN0IFN0cmluZyYgZGF0YSwgVUNoYXIgZGVsaW1pdGVyKQotICAgIHsKLSAgICAgICAgY2xl
YXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5n
VmlldyhkYXRhKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIq
IHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9
IHB0ciArIGRhdGEubGVuZ3RoKCk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAg
ICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IHB0cjsKLSAgICAgICAgICAgIHdoaWxlIChwdHIg
PCBlbmQgJiYgKnB0ciAhPSBkZWxpbWl0ZXIgJiYgIWlzU1ZHU3BhY2UoKnB0cikpCi0gICAgICAg
ICAgICAgICAgcHRyKys7Ci0gICAgICAgICAgICBpZiAocHRyID09IHN0YXJ0KQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5nKHN0YXJ0LCBw
dHIgLSBzdGFydCkpOwotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0
ZXIocHRyLCBlbmQsIGRlbGltaXRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcHRy
ID09IGVuZDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0KLSAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBzdHJpbmcgOiBtX2l0ZW1zKSB7Ci0gICAgICAgICAgICBpZiAoYnVpbGRl
ci5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotCi0gICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJpbmcpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9CisgICAgYm9vbCBwYXJzZShjb25zdCBTdHJp
bmcmIGRhdGEsIFVDaGFyIGRlbGltaXRlcik7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBj
b25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNW
R1RyYW5zZm9ybUxpc3QuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRXhjZXB0aW9uT3I8UmVmUHRyPFNWR1RyYW5zZm9ybT4+IFNWR1RyYW5zZm9y
bUxpc3Q6OmNvbnNvbGlkYXRlKCkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGNhbkFsdGVyTGlzdCgp
OworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpOworICAgIEFTU0VSVChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVl
KCkpOworCisgICAgLy8gU3BlYzogSWYgdGhlIGxpc3Qgd2FzIGVtcHR5LCB0aGVuIGEgdmFsdWUg
b2YgbnVsbCBpcyByZXR1cm5lZC4KKyAgICBpZiAobV9pdGVtcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKG1faXRlbXMuc2l6ZSgpID09IDEpCisgICAgICAg
IHJldHVybiBtYWtlUmVmUHRyKGF0KDApLmdldCgpKTsKKworICAgIGF1dG8gbmV3SXRlbSA9IFNW
R1RyYW5zZm9ybTo6Y3JlYXRlKGNvbmNhdGVuYXRlKCkpOworICAgIGNsZWFySXRlbXMoKTsKKwor
ICAgIGF1dG8gaXRlbSA9IGFwcGVuZChXVEZNb3ZlKG5ld0l0ZW0pKTsKKyAgICBjb21taXRDaGFu
Z2UoKTsKKyAgICByZXR1cm4gbWFrZVJlZlB0cihpdGVtLmdldCgpKTsKK30KKworQWZmaW5lVHJh
bnNmb3JtIFNWR1RyYW5zZm9ybUxpc3Q6OmNvbmNhdGVuYXRlKCkgY29uc3QKK3sKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gcmVzdWx0OworICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNmb3JtIDogbV9p
dGVtcykKKyAgICAgICAgcmVzdWx0ICo9IHRyYW5zZm9ybS0+bWF0cml4KCktPnZhbHVlKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Ym9vbCBTVkdUcmFuc2Zvcm1MaXN0OjpwYXJzZUdlbmVyaWMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICBib29sIGRlbGltUGFyc2VkID0g
ZmFsc2U7CisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygp
KSB7CisgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7CisgICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gcGFyc2VkVHJh
bnNmb3JtVHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShwYXJzaW5n
QnVmZmVyKTsKKyAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1UeXBlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3JtVmFsdWUgPSBTVkdU
cmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKCpwYXJzZWRUcmFuc2Zvcm1UeXBlLCBw
YXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhcHBlbmQoU1ZHVHJhbnNmb3JtOjpjcmVh
dGUoKnBhcnNlZFRyYW5zZm9ybVZhbHVlKSk7CisKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKHBhcnNpbmdCdWZmZXIpOworCisgICAgICAgIGlmIChza2lwRXhhY3RseShwYXJzaW5nQnVm
ZmVyLCAnLCcpKQorICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOworCisgICAgICAgIHNr
aXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKyAgICB9CisgICAgcmV0dXJuICFk
ZWxpbVBhcnNlZDsKK30KKwordm9pZCBTVkdUcmFuc2Zvcm1MaXN0OjpwYXJzZShjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIGNsZWFySXRlbXMoKTsKKworICAgIGJvb2wgcGFyc2luZ1N1Y2Nl
ZWRlZCA9IFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBwYXJz
aW5nQnVmZmVyKSB7CisgICAgICAgIHJldHVybiBwYXJzZUdlbmVyaWMocGFyc2luZ0J1ZmZlcik7
CisgICAgfSk7CisgICAgCisgICAgaWYgKCFwYXJzaW5nU3VjY2VlZGVkKQorICAgICAgICBjbGVh
ckl0ZW1zKCk7Cit9CisKK2Jvb2wgU1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNlR2VuZXJp
YyhwYXJzaW5nQnVmZmVyKTsKK30KKworYm9vbCBTVkdUcmFuc2Zvcm1MaXN0OjpwYXJzZShTdHJp
bmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICByZXR1cm4gcGFy
c2VHZW5lcmljKHBhcnNpbmdCdWZmZXIpOworfQorCitTdHJpbmcgU1ZHVHJhbnNmb3JtTGlzdDo6
dmFsdWVBc1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IGZvciAoY29uc3QgYXV0byYgdHJhbnNmcm9tIDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVp
bGRlci5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQodHJhbnNmcm9tLT52YWx1ZSgpLnZhbHVlQXNTdHJpbmcoKSk7Cisg
ICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30KKwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4
NiArNTYsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3ZnVHJhbnNmb3JtOwogICAgIH0K
IAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxTVkdUcmFuc2Zvcm0+PiBjb25zb2xpZGF0ZSgpCi0g
ICAgewotICAgICAgICBhdXRvIHJlc3VsdCA9IGNhbkFsdGVyTGlzdCgpOwotICAgICAgICBpZiAo
cmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCk7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkp
OwotCi0gICAgICAgIC8vIFNwZWM6IElmIHRoZSBsaXN0IHdhcyBlbXB0eSwgdGhlbiBhIHZhbHVl
IG9mIG51bGwgaXMgcmV0dXJuZWQuCi0gICAgICAgIGlmIChtX2l0ZW1zLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGlmIChtX2l0ZW1zLnNpemUoKSA9
PSAxKQotICAgICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoYXQoMCkuZ2V0KCkpOwotCi0gICAg
ICAgIGF1dG8gbmV3SXRlbSA9IFNWR1RyYW5zZm9ybTo6Y3JlYXRlKGNvbmNhdGVuYXRlKCkpOwot
ICAgICAgICBjbGVhckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0byBpdGVtID0gYXBwZW5kKFdURk1v
dmUobmV3SXRlbSkpOwotICAgICAgICBjb21taXRDaGFuZ2UoKTsKLSAgICAgICAgcmV0dXJuIG1h
a2VSZWZQdHIoaXRlbS5nZXQoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBwYXJzZShjb25zdCBTdHJp
bmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IHVwY29udmVydGVkQ2hhcmFj
dGVyczsKLSAgICAgICAgaWYgKCFwYXJzZShzdGFydCwgc3RhcnQgKyB2YWx1ZS5sZW5ndGgoKSkp
Ci0gICAgICAgICAgICBjbGVhckl0ZW1zKCk7Ci0gICAgfQotCi0gICAgQWZmaW5lVHJhbnNmb3Jt
IGNvbmNhdGVuYXRlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSByZXN1
bHQ7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNmb3JtIDogbV9pdGVtcykKLSAgICAg
ICAgICAgIHJlc3VsdCAqPSB0cmFuc2Zvcm0tPm1hdHJpeCgpLT52YWx1ZSgpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qg
b3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiB0cmFuc2Zyb20gOiBtX2l0ZW1zKSB7Ci0gICAgICAgICAgICBpZiAo
YnVpbGRlci5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwot
Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh0cmFuc2Zyb20tPnZhbHVlKCkudmFsdWVBc1N0
cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwot
ICAgIH0KKyAgICBFeGNlcHRpb25PcjxSZWZQdHI8U1ZHVHJhbnNmb3JtPj4gY29uc29saWRhdGUo
KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY29uY2F0ZW5hdGUoKSBjb25zdDsKKyAgICB2b2lkIHBh
cnNlKGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBwYXJzZShjb25zdCBVQ2hhciomIHN0YXJ0LCBj
b25zdCBVQ2hhciogZW5kKQotICAgIHsKLSAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNl
OwotICAgICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLSAgICAgICAgICAgIGRlbGltUGFyc2Vk
ID0gZmFsc2U7Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gdHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6
OnBhcnNlQW5kU2tpcFR5cGUoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoIXR5cGUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBhdXRvIHBhcnNlZFRy
YW5zZm9ybVZhbHVlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSgqdHlw
ZSwgc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlZFRyYW5zZm9ybVZhbHVlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgYXBwZW5kKFNWR1Ry
YW5zZm9ybTo6Y3JlYXRlKCpwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkpOwotCi0gICAgICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoc3RhcnQg
PCBlbmQgJiYgKnN0YXJ0ID09ICcsJykgewotICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICArK3N0YXJ0OwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuICFkZWxpbVBhcnNlZDsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gYm9vbCBwYXJzZUdlbmVyaWMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0
ZXJUeXBlPiYpOworICAgIGJvb2wgcGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsK
KyAgICBib29sIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3Jt
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFi
bGUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNm
b3JtYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDg1ICsyNyw4NiBAQAogI2luY2x1ZGUg
IlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNl
clV0aWxpdGllcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIGludCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdCBVQ2hhciomIHB0ciwg
Y29uc3QgVUNoYXIqIGVuZCwgZmxvYXQqIHZhbHVlcywgaW50IHJlcXVpcmVkLCBpbnQgb3B0aW9u
YWwpCitTVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpID0gZGVmYXVsdDsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGludCBwYXJzZVRyYW5zZm9y
bVBhcmFtTGlzdChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVm
ZmVyLCBmbG9hdCogdmFsdWVzLCBpbnQgcmVxdWlyZWQsIGludCBvcHRpb25hbCkKIHsKICAgICBp
bnQgb3B0aW9uYWxQYXJhbXMgPSAwLCByZXF1aXJlZFBhcmFtcyA9IDA7CiAgICAgCi0gICAgaWYg
KCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpIHx8ICpwdHIgIT0gJygnKQorICAgIGlm
ICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpIHx8ICpwYXJzaW5nQnVmZmVy
ICE9ICcoJykKICAgICAgICAgcmV0dXJuIC0xOwogICAgIAotICAgIHB0cisrOworICAgICsrcGFy
c2luZ0J1ZmZlcjsKICAgIAotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7Cisg
ICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwogCiAgICAgd2hpbGUgKHJl
cXVpcmVkUGFyYW1zIDwgcmVxdWlyZWQpIHsKLSAgICAgICAgaWYgKHB0ciA+PSBlbmQpCisgICAg
ICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0g
ICAgICAgIGF1dG8gcGFyc2VkTnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNr
aXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGF1dG8gcGFyc2VkTnVtYmVyID0gcGFy
c2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsK
ICAgICAgICAgaWYgKCFwYXJzZWROdW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAg
ICAgIHZhbHVlc1tyZXF1aXJlZFBhcmFtc10gPSAqcGFyc2VkTnVtYmVyOwogICAgICAgICByZXF1
aXJlZFBhcmFtcysrOwogICAgICAgICBpZiAocmVxdWlyZWRQYXJhbXMgPCByZXF1aXJlZCkKLSAg
ICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAg
ICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHBhcnNpbmdCdWZmZXIp
OwogICAgIH0KLSAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCkpCisgICAg
aWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcikpCiAgICAgICAgIHJldHVy
biAtMTsKICAgICAKLSAgICBib29sIGRlbGltUGFyc2VkID0gc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
T3JEZWxpbWl0ZXIocHRyLCBlbmQpOworICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBza2lwT3B0aW9u
YWxTVkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyKTsKIAotICAgIGlmIChwdHIgPj0g
ZW5kKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiAtMTsK
ICAgICAKLSAgICBpZiAoKnB0ciA9PSAnKScpIHsgLy8gc2tpcCBvcHRpb25hbHMKLSAgICAgICAg
cHRyKys7CisgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICcpJykgeworICAgICAgICAvLyBza2lw
IG9wdGlvbmFscworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgICAgIGlmIChkZWxpbVBh
cnNlZCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9IGVsc2UgewogICAgICAgICB3aGls
ZSAob3B0aW9uYWxQYXJhbXMgPCBvcHRpb25hbCkgewotICAgICAgICAgICAgaWYgKHB0ciA+PSBl
bmQpCisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGF1dG8gcGFyc2VkTnVtYmVyID0gcGFyc2VOdW1i
ZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgICAg
ICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIsIFN1ZmZpeFNr
aXBwaW5nUG9saWN5OjpEb250U2tpcCk7CiAgICAgICAgICAgICBpZiAoIXBhcnNlZE51bWJlcikK
ICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB2YWx1ZXNbcmVxdWlyZWRQ
YXJhbXMgKyBvcHRpb25hbFBhcmFtc10gPSAqcGFyc2VkTnVtYmVyOwogICAgICAgICAgICAgb3B0
aW9uYWxQYXJhbXMrKzsKICAgICAgICAgICAgIGlmIChvcHRpb25hbFBhcmFtcyA8IG9wdGlvbmFs
KQotICAgICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwg
ZW5kKTsKKyAgICAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihw
YXJzaW5nQnVmZmVyKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFza2lwT3B0
aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpKQorICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNWR1Nw
YWNlcyhwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgCi0g
ICAgICAgIGRlbGltUGFyc2VkID0gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRy
LCBlbmQpOworICAgICAgICBkZWxpbVBhcnNlZCA9IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVs
aW1pdGVyKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICAKLSAgICAgICAgaWYgKHB0ciA+PSBlbmQg
fHwgKnB0ciAhPSAnKScgfHwgZGVsaW1QYXJzZWQpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVy
LmF0RW5kKCkgfHwgKnBhcnNpbmdCdWZmZXIgIT0gJyknIHx8IGRlbGltUGFyc2VkKQogICAgICAg
ICAgICAgcmV0dXJuIC0xOwotICAgICAgICBwdHIrKzsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVy
OwogICAgIH0KIAogICAgIHJldHVybiByZXF1aXJlZFBhcmFtcyArIG9wdGlvbmFsUGFyYW1zOwog
fQogCiAvLyBUaGVzZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggZW51bSBTVkdUcmFuc2Zv
cm1UeXBlCi1zdGF0aWMgY29uc3QgaW50IHJlcXVpcmVkVmFsdWVzRm9yVHlwZVtdID0gIHswLCA2
LCAxLCAxLCAxLCAxLCAxfTsKLXN0YXRpYyBjb25zdCBpbnQgb3B0aW9uYWxWYWx1ZXNGb3JUeXBl
W10gPSAgezAsIDAsIDEsIDEsIDIsIDAsIDB9OworY29uc3RleHByIGludCByZXF1aXJlZFZhbHVl
c0ZvclR5cGVbXSA9ICB7MCwgNiwgMSwgMSwgMSwgMSwgMX07Citjb25zdGV4cHIgaW50IG9wdGlv
bmFsVmFsdWVzRm9yVHlwZVtdID0gIHswLCAwLCAxLCAxLCAyLCAwLCAwfTsKIAotLy8gVGhpcyBk
ZXN0cnVjdG9yIGlzIG5lZWRlZCBpbiBvcmRlciB0byBsaW5rIGNvcnJlY3RseSB3aXRoIEludGVs
IElDQy4KLVNWR1RyYW5zZm9ybWFibGU6On5TVkdUcmFuc2Zvcm1hYmxlKCkgPSBkZWZhdWx0Owot
Ci1PcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFu
c2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlLCBjb25z
dCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zv
cm1WYWx1ZUdlbmVyaWMoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwg
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKIHsKICAg
ICBpZiAodHlwZSA9PSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaW50IHZhbHVlQ291bnQgPSAwOwog
ICAgIGZsb2F0IHZhbHVlc1tdID0gezAsIDAsIDAsIDAsIDAsIDB9OwotICAgIGlmICgodmFsdWVD
b3VudCA9IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KHB0ciwgZW5kLCB2YWx1ZXMsIHJlcXVpcmVk
VmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW3R5cGVdKSkgPCAwKQor
ICAgIGlmICgodmFsdWVDb3VudCA9IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KHBhcnNpbmdCdWZm
ZXIsIHZhbHVlcywgcmVxdWlyZWRWYWx1ZXNGb3JUeXBlW3R5cGVdLCBvcHRpb25hbFZhbHVlc0Zv
clR5cGVbdHlwZV0pKSA8IDApCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBT
VkdUcmFuc2Zvcm1WYWx1ZSB0cmFuc2Zvcm07CkBAIC0xNDUsNDIgKzE0Niw2MyBAQCBPcHRpb25h
bDxTVkdUcmFuc2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3JtCiAgICAgcmV0dXJuIHRyYW5zZm9ybTsK
IH0KIAotc3RhdGljIGNvbnN0IFVDaGFyIHNrZXdYRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAn
dycsICdYJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgc2tld1lEZXNjW10gPSAgeydzJywgJ2snLCAn
ZScsICd3JywgJ1knfTsKLXN0YXRpYyBjb25zdCBVQ2hhciBzY2FsZURlc2NbXSA9ICB7J3MnLCAn
YycsICdhJywgJ2wnLCAnZSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zbGF0ZURlc2NbXSA9
ICB7J3QnLCAncicsICdhJywgJ24nLCAncycsICdsJywgJ2EnLCAndCcsICdlJ307Ci1zdGF0aWMg
Y29uc3QgVUNoYXIgcm90YXRlRGVzY1tdID0gIHsncicsICdvJywgJ3QnLCAnYScsICd0JywgJ2Un
fTsKLXN0YXRpYyBjb25zdCBVQ2hhciBtYXRyaXhEZXNjW10gPSAgeydtJywgJ2EnLCAndCcsICdy
JywgJ2knLCAneCd9OworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFi
bGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5
cGUgdHlwZSwgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7Cisg
ICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVmFsdWVHZW5lcmljKHR5cGUsIHBhcnNpbmdCdWZmZXIp
OworfQorCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFy
c2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBl
LCBTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICByZXR1
cm4gcGFyc2VUcmFuc2Zvcm1WYWx1ZUdlbmVyaWModHlwZSwgcGFyc2luZ0J1ZmZlcik7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBl
IHNrZXdYRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycsICdYJ307Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBza2V3WURlc2NbXSA9
ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgc2NhbGVEZXNjW10gPSAgeydzJywgJ2MnLCAn
YScsICdsJywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhw
ciBDaGFyYWN0ZXJUeXBlIHRyYW5zbGF0ZURlc2NbXSA9ICB7J3QnLCAncicsICdhJywgJ24nLCAn
cycsICdsJywgJ2EnLCAndCcsICdlJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSByb3RhdGVEZXNjW10gPSAgeydyJywgJ28nLCAndCcs
ICdhJywgJ3QnLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3Rl
eHByIENoYXJhY3RlclR5cGUgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3QnLCAncicsICdp
JywgJ3gnfTsKIAotT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+
IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUoY29uc3QgVUNoYXIqJiBjdXJyVHJh
bnNmb3JtLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBw
YXJzZVRyYW5zZm9ybVR5cGVHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKGN1cnJUcmFuc2Zvcm0gPj0gZW5kKQorICAg
IGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICBpZiAoKmN1cnJUcmFuc2Zvcm0gPT0gJ3MnKSB7Ci0gICAgICAgIGlmIChza2lwU3Ry
aW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1hEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdY
RGVzYykpKQorICAgIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAncycpIHsKKyAgICAgICAgaWYgKHNr
aXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBza2V3WERlc2M8Q2hhcmFjdGVyVHlw
ZT4pKQogICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JN
X1NLRVdYOwotICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwg
c2tld1lEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdZRGVzYykpKQorICAgICAgICBpZiAoc2tp
cENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHNrZXdZRGVzYzxDaGFyYWN0ZXJUeXBl
PikpCiAgICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1f
U0tFV1k7Ci0gICAgICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBz
Y2FsZURlc2MsIFdURl9BUlJBWV9MRU5HVEgoc2NhbGVEZXNjKSkpCisgICAgICAgIGlmIChza2lw
Q2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgc2NhbGVEZXNjPENoYXJhY3RlclR5cGU+
KSkKICAgICAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9T
Q0FMRTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICB9IGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCB0cmFuc2xhdGVEZXNj
LCBXVEZfQVJSQVlfTEVOR1RIKHRyYW5zbGF0ZURlc2MpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdC
dWZmZXIsIHRyYW5zbGF0ZURlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICByZXR1cm4gU1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwotICAgIGVsc2UgaWYgKHNr
aXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCByb3RhdGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RI
KHJvdGF0ZURlc2MpKSkKKyAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZm
ZXIsIHJvdGF0ZURlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICByZXR1cm4gU1ZHVHJhbnNm
b3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fUk9UQVRFOwotICAgIGVsc2UgaWYgKHNraXBTdHJpbmco
Y3VyclRyYW5zZm9ybSwgZW5kLCBtYXRyaXhEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKG1hdHJpeERl
c2MpKSkKKyAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIG1hdHJp
eERlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6
OlNWR19UUkFOU0ZPUk1fTUFUUklYOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAot
U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgU1ZHVHJhbnNmb3JtYWJsZTo6cGFy
c2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKK09wdGlvbmFsPFNWR1Ry
YW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRy
YW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQoreworICAgIHJldHVybiBXVEY6
OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gcGFyc2luZ0J1ZmZlcikg
eworICAgICAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlKHBhcnNpbmdCdWZmZXIpOworICAg
IH0pOworfQorCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4g
U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8
TENoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVR5cGVH
ZW5lcmljKHBhcnNpbmdCdWZmZXIpOworfQorCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6
U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKFN0
cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGF1dG8gdXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh0eXBlU3RyaW5nKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VBbmRTa2lwVHlwZShjaGFyYWN0ZXJzLCBjaGFyYWN0
ZXJzICsgdHlwZVN0cmluZy5sZW5ndGgoKSkudmFsdWVPcihTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
X1RSQU5TRk9STV9VTktOT1dOKTsKKyAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlR2VuZXJp
YyhwYXJzaW5nQnVmZmVyKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Ry
YW5zZm9ybWFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNm
b3JtYWJsZS5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJh
bnNmb3JtYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRl
ICJTVkdMb2NhdGFibGUuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1WYWx1ZS5oIgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCkBA
IC0zMiw5ICszMSwxMiBAQCBjbGFzcyBTVkdUcmFuc2Zvcm1hYmxlIDogcHVibGljIFNWR0xvY2F0
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1ZHVHJhbnNmb3JtYWJsZSgpOwogCi0gICAgc3RhdGlj
IE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNo
YXIqIGVuZCk7Ci0gICAgc3RhdGljIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBl
IHBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8
U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IHBhcnNlQW5kU2tpcFR5cGUoY29u
c3QgVUNoYXIqJiBjdXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICBzdGF0aWMg
T3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNm
b3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUsIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7
CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZh
bHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBTdHJpbmdQYXJzaW5nQnVm
ZmVyPFVDaGFyPiYpOworCisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdUcmFuc2Zvcm1UeXBlPiBwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nVmlldyYpOwor
ICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4g
cGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CisgICAgc3Rh
dGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZVRy
YW5zZm9ybVR5cGUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKIAogICAgIEFmZmluZVRy
YW5zZm9ybSBsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNj
b3BlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7IH0K
ICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29u
c3QgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCShyZXZpc2lvbiAyNjMz
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGUuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNjAsOTkgKzYxLDkwIEBAIHZvaWQgU1ZHVmlld1NwZWM6OnJlc2V0KCkK
ICAgICBTVkdab29tQW5kUGFuOjpyZXNldCgpOwogfQogCi1zdGF0aWMgY29uc3QgVUNoYXIgc3Zn
Vmlld1NwZWNbXSA9IHsncycsICd2JywgJ2cnLCAnVicsICdpJywgJ2UnLCAndyd9Owotc3RhdGlj
IGNvbnN0IFVDaGFyIHZpZXdCb3hTcGVjW10gPSB7J3YnLCAnaScsICdlJywgJ3cnLCAnQicsICdv
JywgJ3gnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciBwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlY1tdID0g
eydwJywgJ3InLCAnZScsICdzJywgJ2UnLCAncicsICd2JywgJ2UnLCAnQScsICdzJywgJ3AnLCAn
ZScsICdjJywgJ3QnLCAnUicsICdhJywgJ3QnLCAnaScsICdvJ307Ci1zdGF0aWMgY29uc3QgVUNo
YXIgdHJhbnNmb3JtU3BlY1tdID0geyd0JywgJ3InLCAnYScsICduJywgJ3MnLCAnZicsICdvJywg
J3InLCAnbSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHpvb21BbmRQYW5TcGVjW10gPSB7J3onLCAn
bycsICdvJywgJ20nLCAnQScsICduJywgJ2QnLCAnUCcsICdhJywgJ24nfTsKLXN0YXRpYyBjb25z
dCBVQ2hhciB2aWV3VGFyZ2V0U3BlY1tdID0gIHsndicsICdpJywgJ2UnLCAndycsICdUJywgJ2En
LCAncicsICdnJywgJ2UnLCAndCd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Y29uc3RleHByIENoYXJhY3RlclR5cGUgc3ZnVmlld1NwZWNbXSA9IHsncycsICd2JywgJ2cnLCAn
VicsICdpJywgJ2UnLCAndyd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29u
c3RleHByIENoYXJhY3RlclR5cGUgdmlld0JveFNwZWNbXSA9IHsndicsICdpJywgJ2UnLCAndycs
ICdCJywgJ28nLCAneCd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3Rl
eHByIENoYXJhY3RlclR5cGUgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWNbXSA9IHsncCcsICdyJywg
J2UnLCAncycsICdlJywgJ3InLCAndicsICdlJywgJ0EnLCAncycsICdwJywgJ2UnLCAnYycsICd0
JywgJ1InLCAnYScsICd0JywgJ2knLCAnbyd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgdHJhbnNmb3JtU3BlY1tdID0geyd0JywgJ3In
LCAnYScsICduJywgJ3MnLCAnZicsICdvJywgJ3InLCAnbSd9OwordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgem9vbUFuZFBhblNwZWNbXSA9
IHsneicsICdvJywgJ28nLCAnbScsICdBJywgJ24nLCAnZCcsICdQJywgJ2EnLCAnbid9OwordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgdmll
d1RhcmdldFNwZWNbXSA9ICB7J3YnLCAnaScsICdlJywgJ3cnLCAnVCcsICdhJywgJ3InLCAnZycs
ICdlJywgJ3QnfTsKIAotYm9vbCBTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyhjb25zdCBTdHJp
bmcmIHZpZXdTcGVjKQorYm9vbCBTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyhjb25zdCBTdHJp
bmdWaWV3JiBzdHJpbmcpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJp
bmdWaWV3KHZpZXdTcGVjKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hh
ciogY3VyclZpZXdTcGVjID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFy
KiBlbmQgPSBjdXJyVmlld1NwZWMgKyB2aWV3U3BlYy5sZW5ndGgoKTsKLQotICAgIGlmIChjdXJy
Vmlld1NwZWMgPj0gZW5kIHx8ICFtX2NvbnRleHRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHN2Z1ZpZXdTcGVj
LCBXVEZfQVJSQVlfTEVOR1RIKHN2Z1ZpZXdTcGVjKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY3VyclZpZXdTcGVjKys7Ci0KLSAgICB3aGlsZSAo
Y3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJyVmlld1NwZWMgIT0gJyknKSB7Ci0gICAgICAgIGlm
ICgqY3VyclZpZXdTcGVjID09ICd2JykgewotICAgICAgICAgICAgaWYgKHNraXBTdHJpbmcoY3Vy
clZpZXdTcGVjLCBlbmQsIHZpZXdCb3hTcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHZpZXdCb3hTcGVj
KSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZp
ZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgICAgIGF1dG8gdmlld0JveCA9
IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGN1cnJWaWV3U3BlYywgZW5kLCBmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCF2aWV3Qm94KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgc2V0Vmlld0JveChXVEZNb3ZlKCp2aWV3Qm94KSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3Bl
YyAhPSAnKScpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2tpcFN0cmluZyhj
dXJyVmlld1NwZWMsIGVuZCwgdmlld1RhcmdldFNwZWMsIFdURl9BUlJBWV9MRU5HVEgodmlld1Rh
cmdldFNwZWMpKSkgewotICAgICAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8
ICpjdXJyVmlld1NwZWMgIT0gJygnKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIHZpZXdUYXJnZXRTdGFydCA9ICsrY3VyclZp
ZXdTcGVjOwotICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyVmlld1NwZWMgPCBlbmQgJiYgKmN1
cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwot
ICAgICAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kKQorICAgIHJldHVybiBXVEY6
OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIp
IC0+IGJvb2wgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlwZW5hbWUgZGVjbHR5
cGUocGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7CisKKyAgICAgICAgaWYgKHBhcnNpbmdC
dWZmZXIuYXRFbmQoKSB8fCAhbV9jb250ZXh0RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVy
LCBzdmdWaWV3U3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKCcpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0No
YXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciAhPSAnKScpIHsKKyAgICAgICAg
ICAgIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAndicpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2tp
cENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHZpZXdCb3hTcGVjPENoYXJhY3RlclR5
cGU+KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZm
ZXIsICcoJykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gdmlld0JveCA9IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94
KHBhcnNpbmdCdWZmZXIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF2aWV3Qm94
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBzZXRWaWV3Qm94KFdURk1vdmUoKnZpZXdCb3gpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKScpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2tpcENoYXJh
Y3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHZpZXdUYXJnZXRTcGVjPENoYXJhY3RlclR5cGU+
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIs
ICcoJykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gdmlld1RhcmdldFN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigp
OworICAgICAgICAgICAgICAgICAgICBza2lwVW50aWwocGFyc2luZ0J1ZmZlciwgJyknKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbV92aWV3VGFy
Z2V0U3RyaW5nID0gU3RyaW5nKHZpZXdUYXJnZXRTdGFydCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpIC0gdmlld1RhcmdldFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgKytwYXJzaW5nQnVm
ZmVyOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpwYXJzaW5nQnVmZmVyID09ICd6Jykgewor
ICAgICAgICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIs
IHpvb21BbmRQYW5TcGVjPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZl
ciwgJygnKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIGF1dG8gem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbihwYXJz
aW5nQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXpvb21BbmRQYW4pCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBzZXRab29tQW5kUGFuKCp6
b29tQW5kUGFuKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZm
ZXIsICcpJykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ3AnKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgcHJlc2VydmVBc3BlY3RSYXRp
b1NwZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKCcpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgICAgICAgICAg
ICAgaWYgKCFwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKHBhcnNpbmdCdWZmZXIsIGZhbHNlKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNldFBy
ZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbyk7CisgICAgICAgICAgICAgICAg
aWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKScpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpwYXJzaW5nQnVmZmVyID09
ICd0JykgeworICAgICAgICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNp
bmdCdWZmZXIsIHRyYW5zZm9ybVNwZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJz
aW5nQnVmZmVyLCAnKCcpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgbV90cmFuc2Zvcm0tPnBhcnNlKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAg
ICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJyknKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIG1fdmlld1RhcmdldFN0cmlu
ZyA9IFN0cmluZyh2aWV3VGFyZ2V0U3RhcnQsIGN1cnJWaWV3U3BlYyAtIHZpZXdUYXJnZXRTdGFy
dCk7Ci0gICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7CiAgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJW
aWV3U3BlYyA9PSAneicpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1Nw
ZWMsIGVuZCwgem9vbUFuZFBhblNwZWMsIFdURl9BUlJBWV9MRU5HVEgoem9vbUFuZFBhblNwZWMp
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZp
ZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgIGlm
ICghU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKGN1cnJWaWV3U3BlYywgZW5kKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVj
ID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcpJykKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgfSBlbHNlIGlmICgq
Y3VyclZpZXdTcGVjID09ICdwJykgewotICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJW
aWV3U3BlYywgZW5kLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlYywgV1RGX0FSUkFZX0xFTkdUSChw
cmVzZXJ2ZUFzcGVjdFJhdGlvU3BlYykpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0g
JygnKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3
U3BlYysrOwotICAgICAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZl
QXNwZWN0UmF0aW87Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2Uo
Y3VyclZpZXdTcGVjLCBlbmQsIGZhbHNlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8p
OwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAh
PSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZp
ZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJWaWV3U3BlYyA9PSAndCcpIHsKLSAg
ICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgdHJhbnNmb3JtU3Bl
YywgV1RGX0FSUkFZX0xFTkdUSCh0cmFuc2Zvcm1TcGVjKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJW
aWV3U3BlYyAhPSAnKCcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICBtX3RyYW5zZm9ybS0+cGFyc2UoY3VyclZp
ZXdTcGVjLCBlbmQpOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1
cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIGlmIChjdXJyVmlld1NwZWMgPCBlbmQgJiYgKmN1cnJWaWV3U3Bl
YyA9PSAnOycpCi0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICc7
Jyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICpw
YXJzaW5nQnVmZmVyICE9ICcpJykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdWaWV3U3BlYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVmlld1NwZWMoY29udGV4dEVs
ZW1lbnQpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nJik7
CisgICAgYm9vbCBwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZ1ZpZXcmKTsKICAgICB2b2lkIHJl
c2V0KCk7CiAgICAgdm9pZCByZXNldENvbnRleHRFbGVtZW50KCkgeyBtX2NvbnRleHRFbGVtZW50
ID0gbnVsbHB0cjsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCShy
ZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDI1ICsyMiwzMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNWR1pvb21BbmRQYW4uaCIKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlTnVtYmVycy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgU1ZHWm9v
bUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFy
KiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFj
dGVyVHlwZSBkaXNhYmxlW10gPSB7ICdkJywgJ2knLCAncycsICdhJywgJ2InLCAnbCcsICdlJyB9
OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5
cGUgbWFnbmlmeVtdID0geyAnbScsICdhJywgJ2cnLCAnbicsICdpJywgJ2YnLCAneScgfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNWR1pvb21B
bmRQYW5UeXBlPiBwYXJzZVpvb21BbmRQYW5HZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgc3RhdGljIGNvbnN0IFVDaGFyIGRp
c2FibGVbXSA9IHsgJ2QnLCAnaScsICdzJywgJ2EnLCAnYicsICdsJywgJ2UnIH07Ci0gICAgaWYg
KHNraXBTdHJpbmcoc3RhcnQsIGVuZCwgZGlzYWJsZSwgV1RGX0FSUkFZX0xFTkdUSChkaXNhYmxl
KSkpIHsKLSAgICAgICAgbV96b29tQW5kUGFuID0gU1ZHWm9vbUFuZFBhbkRpc2FibGU7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBtYWduaWZ5
W10gPSB7ICdtJywgJ2EnLCAnZycsICduJywgJ2knLCAnZicsICd5JyB9OwotICAgIGlmIChza2lw
U3RyaW5nKHN0YXJ0LCBlbmQsIG1hZ25pZnksIFdURl9BUlJBWV9MRU5HVEgobWFnbmlmeSkpKSB7
Ci0gICAgICAgIG1fem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW5NYWduaWZ5OwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5n
QnVmZmVyLCBkaXNhYmxlPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgcmV0dXJuIFNWR1pvb21B
bmRQYW5EaXNhYmxlOworCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVm
ZmVyLCBtYWduaWZ5PENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgcmV0dXJuIFNWR1pvb21BbmRQ
YW5NYWduaWZ5OworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KIAotICAgIHJldHVybiBm
YWxzZTsKK09wdGlvbmFsPFNWR1pvb21BbmRQYW5UeXBlPiBTVkdab29tQW5kUGFuOjpwYXJzZVpv
b21BbmRQYW4oU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7Cisg
ICAgcmV0dXJuIHBhcnNlWm9vbUFuZFBhbkdlbmVyaWMocGFyc2luZ0J1ZmZlcik7Cit9CisKK09w
dGlvbmFsPFNWR1pvb21BbmRQYW5UeXBlPiBTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4o
U3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0dXJu
IHBhcnNlWm9vbUFuZFBhbkdlbmVyaWMocGFyc2luZ0J1ZmZlcik7CiB9CiAKIHZvaWQgU1ZHWm9v
bUFuZFBhbjo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFt
ZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Wm9vbUFuZFBhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5k
UGFuLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5k
UGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDggQEAgcHVibGljOgogcHJvdGVjdGVk
OgogICAgIFNWR1pvb21BbmRQYW4oKSA9IGRlZmF1bHQ7CiAKLSAgICBib29sIHBhcnNlWm9vbUFu
ZFBhbihjb25zdCBVQ2hhciomLCBjb25zdCBVQ2hhciopOworICAgIHN0YXRpYyBPcHRpb25hbDxT
Vkdab29tQW5kUGFuVHlwZT4gcGFyc2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENo
YXI+Jik7CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1pvb21BbmRQYW5UeXBlPiBwYXJzZVpvb21B
bmRQYW4oU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKIAogcHJpdmF0ZToKICAgICBTVkda
b29tQW5kUGFuVHlwZSBtX3pvb21BbmRQYW4geyBTVkdQcm9wZXJ0eVRyYWl0czxTVkdab29tQW5k
UGFuVHlwZT46OmluaXRpYWxWYWx1ZSgpIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402670</attachid>
            <date>2020-06-24 12:09:37 -0700</date>
            <delta_ts>2020-06-24 13:56:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213460-20200624120936.patch</filename>
            <type>text/plain</type>
            <size>221588</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM0MzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA2LTIzICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIHVubmVjZXNzYXJ5IHVwY29udmVyc2lvbiBv
ZiBTdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTM0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbV0lQXQorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVm
ZmVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcpOgor
CiAyMDIwLTA2LTIzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIFdURjo6c2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZApJbmRleDogU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjMzMzUpCisrKyBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00NTIsNiArNDUyLDcgQEAKIAkJN0MxMzc5NDIyMjIzMjZENTAwRDdBODI0IC8qIGllZWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gaWVlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEz
Nzk0MzIyMjMyNkQ1MDBEN0E4MjQgLyogUkVBRE1FLm1kICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gbmV0LmRhcmluZ2ZpcmViYWxsLm1hcmtkb3duOyBw
YXRoID0gUkVBRE1FLm1kOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNBNDVEMDIz
Q0ZBODgzMDA3REUzQTYgLyogUGxhdGZvcm1IYXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtSGF2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QzNCMDZFODI0QTExNkU2MDBGRDI2QzcgLyogU3RyaW5nUGFyc2luZ0J1ZmZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHJpbmdQYXJzaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDM0Y3MjM5MUQ3ODgxMTkwMDY3NEUyNiAvKiBCcmlnYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJyaWdhbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M0MjMwNzEyM0NFMkQ4QTAwNkU1NEQwIC8qIFBsYXRmb3JtRW5hYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtRW5hYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNDIzMDcyMjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM5Niw2ICsxMzk3LDcgQEAKIAkJCQlBOEE0NzMyODE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQThBNDczMjkxNTFBODI1
QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCAqLywKIAkJCQlBOEE0NzMyQTE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nT3BlcmF0b3JzLmggKi8sCisJCQkJN0MzQjA2RTgyNEExMTZFNjAwRkQyNkM3
IC8qIFN0cmluZ1BhcnNpbmdCdWZmZXIuaCAqLywKIAkJCQlDRDAwMzYwRDIxNTAxRjc4MDBGNEVE
NEMgLyogU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oICovLAogCQkJCTkzRjE5OTNEMTlENzk1
OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCAqLywKIAkJCQkxQTZFQjFERjE4N0QwQkQzMDAz
MDEyNkYgLyogU3RyaW5nVmlldy5oICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0zMzgsNiArMzM4LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIHRleHQv
U3RyaW5nSGFzaGVyLmgKICAgICB0ZXh0L1N0cmluZ0ltcGwuaAogICAgIHRleHQvU3RyaW5nT3Bl
cmF0b3JzLmgKKyAgICB0ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAogICAgIHRleHQvU3RyaW5n
VG9JbnRlZ2VyQ29udmVyc2lvbi5oCiAgICAgdGV4dC9TdHJpbmdWaWV3LmgKICAgICB0ZXh0L1N5
bWJvbEltcGwuaApJbmRleDogU291cmNlL1dURi93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dU
Ri93dGYvRm9yd2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCA9IGFsaWdub2YoVCkKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lID0gRHVtYlB0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgPSBEdW1iUHRyVHJhaXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0
eXBlbmFtZT4gY2xhc3MgU3RyaW5nQnVmZmVyOwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0
cmluZ1BhcnNpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBj
bGFzcyBTdHJpbmdUeXBlQWRhcHRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBVbmlxdWVS
ZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgVmFyaWFudDsKQEAgLTEyMiw2ICsxMjMs
NyBAQCB1c2luZyBXVEY6OlN0cmluZzsKIHVzaW5nIFdURjo6U3RyaW5nQnVmZmVyOwogdXNpbmcg
V1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwordXNpbmcgV1RGOjpT
dHJpbmdQYXJzaW5nQnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpU
ZXh0UG9zaXRpb247CiB1c2luZyBXVEY6OlRleHRTdHJlYW07CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0NvbW1vbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2NsYXNzIFN0cmluZ1BhcnNpbmdCdWZmZXIgZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSBUOworCisgICAgY29u
c3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXIoKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdGV4
cHIgU3RyaW5nUGFyc2luZ0J1ZmZlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIDogbV9wb3NpdGlvbiB7IGNoYXJhY3RlcnMgfQorICAg
ICAgICAsIG1fZW5kIHsgY2hhcmFjdGVycyArIGxlbmd0aCB9CisgICAgeworICAgIH0KKworICAg
IGNvbnN0ZXhwciBTdHJpbmdQYXJzaW5nQnVmZmVyKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJh
Y3RlcnMsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uIHsg
Y2hhcmFjdGVycyB9CisgICAgICAgICwgbV9lbmQgeyBlbmQgfQorICAgIHsKKyAgICB9CisKKyAg
ICBjb25zdGV4cHIgY29uc3QgQ2hhcmFjdGVyVHlwZSogcG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Bvc2l0aW9uOyB9CisgICAgY29uc3RleHByIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CisKKyAgICBjb25zdGV4cHIgYm9vbCBoYXNDaGFyYWN0
ZXJzUmVtYWluaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbiA8IG1fZW5kOyB9CisgICAg
Y29uc3RleHByIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uID09IG1fZW5k
OyB9CisKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgbGVuZ3RoUmVtYWluaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmQgLSBtX3Bvc2l0aW9uOyB9CisgICAgU3RyaW5nVmlldyBzdHJpbmdWaWV3T2ZD
aGFyYWN0ZXJzUmVtYWluaW5nKCkgeyByZXR1cm4geyBtX3Bvc2l0aW9uLCBsZW5ndGhSZW1haW5p
bmcoKSB9OyB9CisKKyAgICBDaGFyYWN0ZXJUeXBlIG9wZXJhdG9yW10odW5zaWduZWQgaSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3Bvc2l0aW9uICsgaSA8IG1fZW5kKTsKKyAgICAgICAgcmV0
dXJuIG1fcG9zaXRpb25baV07CisgICAgfQorCisgICAgY29uc3RleHByIENoYXJhY3RlclR5cGUg
b3BlcmF0b3IqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqbV9wb3NpdGlvbjsKKyAg
ICB9CisKKyAgICBjb25zdGV4cHIgdm9pZCBhZHZhbmNlKCkKKyAgICB7CisgICAgICAgICsrbV9w
b3NpdGlvbjsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgdm9pZCBhZHZhbmNlQnkodW5zaWduZWQg
cGxhY2VzKQorICAgIHsKKyAgICAgICAgbV9wb3NpdGlvbiArPSBwbGFjZXM7CisgICAgfQorCisg
ICAgY29uc3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXImIG9wZXJhdG9yKysoKQorICAgIHsKKyAg
ICAgICAgYWR2YW5jZSgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgY29u
c3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXIgb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAg
ICBhdXRvIHJlc3VsdCA9ICp0aGlzOworICAgICAgICArKygqdGhpcyk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIG1f
cG9zaXRpb24geyBudWxscHRyIH07CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogbV9lbmQgeyBu
dWxscHRyIH07Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlLCB0eXBlbmFtZSBG
dW5jdGlvbj4gZGVjbHR5cGUoYXV0bykgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKFN0cmluZ1R5
cGUmJiBzdHJpbmcsIEZ1bmN0aW9uJiYgZnVuY3RvcikKK3sKKyAgICBpZiAoc3RyaW5nLmlzOEJp
dCgpKQorICAgICAgICByZXR1cm4gZnVuY3RvcihTdHJpbmdQYXJzaW5nQnVmZmVyIHsgc3RyaW5n
LmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9KTsKKyAgICByZXR1cm4gZnVuY3RvcihT
dHJpbmdQYXJzaW5nQnVmZmVyIHsgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3Ro
KCkgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlN0cmluZ1BhcnNp
bmdCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM0MzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNjUgQEAKKzIwMjAtMDYt
MjMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgdW5u
ZWNlc3NhcnkgdXBjb252ZXJzaW9uIG9mIFN0cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzQ2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvcGFyc2VyL1BhcnNp
bmdVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTm90QVNDSUlTcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpza2lwRXhhY3RseSk6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJQ
cmVkaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcFVudGlsKToKKyAgICAgICAgKFdlYkNv
cmU6OnNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UpOgorICAgICAgICAoV2ViQ29yZTo6c2tp
cENoYXJhY3RlcnNFeGFjdGx5KToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSGFzaEFsZ29yaXRobUFkdmFu
Y2luZ1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAg
ICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaDoKKyAgICAgICAgKiBsb2Fk
ZXIvU3VicmVzb3VyY2VJbnRlZ3JpdHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3BsaXRPblNw
YWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUludGVncml0eU1ldGFkYXRhKToKKyAgICAg
ICAgKiBsb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VNYW5pZmVzdCk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6ZGlkUmVj
ZWl2ZUhlYWRlcik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0RpcmVjdGl2ZU5hbWVDaGFyYWN0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojpw
YXJzZURpcmVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVMaXN0OjpwYXJzZVJlcG9ydFVSSSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRDU1BEaXJlY3RpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YXBwbHlTYW5kYm94
UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OnNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldEJsb2NrQWxsTWl4ZWRDb250ZW50
RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0OjphZGREaXJlY3RpdmUpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3QuaDoKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNNZWRp
YVR5cGVDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5
TWVkaWFMaXN0RGlyZWN0aXZlOjpwYXJzZSk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1NvdXJjZUNo
YXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc0hvc3RDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6aXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omlz
U2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm90Q29s
b25PclNsYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU291cmNlTGlzdE5vbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6
cGFyc2VTY2hlbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdDo6cGFyc2VIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhcnNlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNO
b25jZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0OjpwYXJzZU5vbmNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZSk6CisgICAgICAgICogcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oOgorICAgICAgICAqIHN2Zy9T
VkdBbmdsZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQW5nbGVUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuZ2xlVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAq
IHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlS2V5
U3BsaW5lcyk6CisgICAgICAgICogc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveEdlbmVyaWMpOgorICAgICAgICAqIHN2Zy9T
VkdGaXRUb1ZpZXdCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoTGlzdC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoTGlzdDo6cGFyc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTGVuZ3RoTGlzdDo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgICogc3Zn
L1NWR0xlbmd0aExpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aExpc3Q6OnBhcnNl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VMZW5ndGhUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZh
bHVlOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoVmFsdWU6OnNldFZh
bHVlQXNTdHJpbmcpOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhWYWx1ZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGVuZ3RoVmFsdWU6OlNWR0xlbmd0aFZhbHVlKToKKyAgICAgICAgKiBzdmcv
U1ZHTnVtYmVyTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlz
dDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6dmFsdWVBc1N0cmlu
ZyBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR051bWJlckxpc3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR051bWJlckxpc3Q6OnBhcnNlKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQu
CisgICAgICAgICogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZW5lcmljUGFyc2VOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlQXJjRmxhZyk6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOdW1iZXJPcHRpb25hbE51
bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUdseXBoTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZVVuaWNvZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUtl
cm5pbmdVbmljb2RlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyaWNQYXJzZUZsb2F0
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKiBz
dmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjppc1NWR1NwYWNlT3JD
b21tYSk6CisgICAgICAgIChXZWJDb3JlOjpza2lwT3B0aW9uYWxTVkdTcGFjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2tpcFN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhTb3Vy
Y2UuaDoKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVU
b1ZlcnRpY2FsU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNl
OjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291
cmNlOjpwYXJzZUFyY1RvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNWR1NlZ21l
bnRUeXBlSGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGF0aFN0cmluZ1NvdXJj
ZS5oOgorICAgICAgICAqIHN2Zy9TVkdQb2ludExpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BvaW50TGlzdDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRM
aXN0Ojp2YWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHUG9pbnRMaXN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExpc3Q6OnBhcnNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaDoKKyAgICAgICAgKiBzdmcvU1ZHU3Ry
aW5nTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3RyaW5nTGlzdDo6cGFy
c2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3RyaW5nTGlzdDo6dmFsdWVBc1N0cmluZyBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR1N0cmluZ0xpc3QuaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJh
bnNmb3JtTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlz
dDo6Y29uc29saWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6Y29u
Y2F0ZW5hdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6cGFy
c2VHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybUxpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3Qp
OgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1MaXN0Lmg6CisgICAgICAgICogc3ZnL1NWR1Ry
YW5zZm9ybWFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VUcmFuc2Zvcm1QYXJhbUxp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZUdlbmVyaWMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVR5cGVHZW5lcmljKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3Bl
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6Cisg
ICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmg6CisgICAgICAgICogc3ZnL1NWR1pvb21BbmRQYW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2Vab29tQW5kUGFuR2VuZXJpYyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4pOgorICAgICAgICAqIHN2
Zy9TVkdab29tQW5kUGFuLmg6CisKIDIwMjAtMDYtMjMgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbTXVsdGljb2xdIFJlc2V0IHRoZSBjaGlsZHJlbklubGluZSBz
dGF0ZSBvbiB0aGUgUmVuZGVyQmxvY2tGbG93IHdoZW4gZGVzdHJveWluZyB0aGUgbXVsdGljb2x1
bW4gY29udGV4dApJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNjMzMzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC02NjQsNiArNjY0
LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgaHRtbC9m
b3Jtcy9GaWxlSWNvbkxvYWRlci5oCiAKKyAgICBodG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVz
LmgKICAgICBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmgKIAogICAgIGh0bWwvdHJhY2sv
QXVkaW9UcmFjay5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjYzMzM1KQorKysgU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI1MzcsNiArMjUzNyw3
IEBAIHN2Zy9TVkdIS2VybkVsZW1lbnQuY3BwCiBzdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAogc3Zn
L1NWR0ltYWdlTG9hZGVyLmNwcAogc3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwCitzdmcvU1ZHTGVu
Z3RoTGlzdC5jcHAKIHN2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAKIHN2Zy9TVkdMaW5lRWxlbWVudC5j
cHAKIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCkBAIC0yNTQ2LDYgKzI1NDcsNyBA
QCBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAKIHN2Zy9TVkdNYXNrRWxlbWVudC5jcHAKIHN2Zy9T
VkdNZXRhZGF0YUVsZW1lbnQuY3BwCiBzdmcvU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5jcHAKK3N2
Zy9TVkdOdW1iZXJMaXN0LmNwcAogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAKIHN2Zy9TVkdQ
YXRoQmxlbmRlci5jcHAKIHN2Zy9TVkdQYXRoQnVpbGRlci5jcHAKQEAgLTI1NjAsNiArMjU2Miw3
IEBAIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAogc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXIuY3BwCiBzdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHAKIHN2Zy9TVkdQYXR0ZXJuRWxl
bWVudC5jcHAKK3N2Zy9TVkdQb2ludExpc3QuY3BwCiBzdmcvU1ZHUG9seUVsZW1lbnQuY3BwCiBz
dmcvU1ZHUG9seWdvbkVsZW1lbnQuY3BwCiBzdmcvU1ZHUG9seWxpbmVFbGVtZW50LmNwcApAQCAt
MjU3MCw2ICsyNTczLDcgQEAgc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCiBzdmcvU1ZHU2NyaXB0RWxl
bWVudC5jcHAKIHN2Zy9TVkdTZXRFbGVtZW50LmNwcAogc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAor
c3ZnL1NWR1N0cmluZ0xpc3QuY3BwCiBzdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAogc3ZnL1NWR1N3
aXRjaEVsZW1lbnQuY3BwCiBzdmcvU1ZHU3ltYm9sRWxlbWVudC5jcHAKQEAgLTI1ODMsNiArMjU4
Nyw3IEBAIHN2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAogc3ZnL1NWR1RpdGxlRWxl
bWVudC5jcHAKIHN2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAogc3ZnL1NWR1RyYW5zZm9y
bURpc3RhbmNlLmNwcAorc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCiBzdmcvU1ZHVHJhbnNmb3Jt
YWJsZS5jcHAKIHN2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCiBzdmcvU1ZHVW5rbm93bkVsZW1lbnQu
Y3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1ODgsNyArMTU4OCw3
IEBACiAJCTUzMjA0MjAyMUY5QTlGMTAwMEI4MUIyQSAvKiBVc2VyQWdlbnRTY3JpcHRzRGF0YS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREFCNkQz
MDE3QzkyNTk1MDBDNjBCMzQgLyogVXNlckFnZW50U2NyaXB0c0RhdGEuY3BwICovOyB9OwogCQk1
MzUxRDRCMTFERjkxNkI0MDA4MDEwQ0QgLyogRmlsZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1MUQ0QUYxREY5MTZBQzAwODAxMENEIC8q
IEZpbGVIYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MzZENUEyMDE5M0UxOEU5MDBDRTRDQUIgLyogSFRNTFNyY3NldFBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2RDVBMUYxOTNF
MThFOTAwQ0U0Q0FCIC8qIEhUTUxTcmNzZXRQYXJzZXIuaCAqLzsgfTsKLQkJNTM2RDVBMjMxOTNF
OEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkQ1QTIyMTkzRThFMEMwMENFNENBQiAvKiBQYXJz
aW5nVXRpbGl0aWVzLmggKi87IH07CisJCTUzNkQ1QTIzMTkzRThFMEMwMENFNENBQiAvKiBQYXJz
aW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzZENUEyMjE5M0U4RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGllcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzOEVDODAyMUY5
NkFGODEwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzhFQzdGQTFGOTZBQTcwMDA0RDIyQTggLyogVW5p
ZmllZFNvdXJjZTEuY3BwICovOyB9OwogCQk1MzhFQzgwMzFGOTZBRjgxMDA0RDIyQTggLyogVW5p
ZmllZFNvdXJjZTEtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzhFQzdGMzFGOTZBQTVCMDA0RDIyQTggLyogVW5pZmllZFNvdXJjZTEtbW0ubW0g
Ki87IH07CiAJCTUzOEVDODA0MUY5NkFGODEwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzhFQzdFRTFG
OTZBQTU2MDA0RDIyQTggLyogVW5pZmllZFNvdXJjZTIuY3BwICovOyB9OwpAQCAtMTAxODgsNiAr
MTAxODgsMTEgQEAKIAkJN0NEMzQ0MTIxRjMxMDhFMjAwMERDRDQ5IC8qIEpTTXV0YXRpb25DYWxs
YmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU011dGF0aW9uQ2FsbGJhY2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Q0OTRDQTFBODZFQjFEMDAwQTg3RUMgLyogUmVu
ZGVyQXR0YWNobWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJBdHRhY2htZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NENDk0
Q0IxQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyQXR0YWNobWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3Q0Q3MEMzRDI0QTI4QTNBMDBFNjEwNDAgLyogU1ZHTGVuZ3RoTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdMZW5ndGhMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0NENzBDNDAyNEEyOEFDOTAwRTYxMDQwIC8qIFNWR051bWJlckxpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHTnVtYmVyTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDRDcwQzQyMjRBMjhCNzAwMEU2MTA0MCAvKiBTVkdQb2ludExpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUG9pbnRMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0NENzBDNDMyNEEyOEJFQzAwRTYxMDQwIC8qIFNWR1N0cmluZ0xpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHU3RyaW5nTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDRDcwQzQ2MjRBMjhDRDcwMEU2MTA0MCAvKiBTVkdUcmFuc2Zvcm1MaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RyYW5zZm9ybUxpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3Q0RFNzM5NjFGOUJENTk1MDAzOTAzMTIgLyogU2V0dGluZ3Mu
eWFtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTZXR0aW5ncy55YW1sOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0RFOEVCQzFGMTkzQkM1MDAxNjhGRTcgLyogQ1NTU3R5bGVEZWNs
YXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NTdHls
ZURlY2xhcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFMTkxNDcx
RjJBOThBRjAwMjcyRjc4IC8qIEZldGNoUmVxdWVzdEluaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmV0Y2hSZXF1ZXN0SW5pdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjUxMzAsNiArMjUxMzUsNyBAQAogCQkJCUIyMjI3ODlFMEQwMEJGMjAwMDcxQjc4
MiAvKiBTVkdMZW5ndGguaWRsICovLAogCQkJCTcxMzQ0OTZCMTQ2OTQxQjMwMDcyMDMxMiAvKiBT
VkdMZW5ndGhDb250ZXh0LmNwcCAqLywKIAkJCQk3MTM0NDk2QzE0Njk0MUIzMDA3MjAzMTIgLyog
U1ZHTGVuZ3RoQ29udGV4dC5oICovLAorCQkJCTdDRDcwQzNEMjRBMjhBM0EwMEU2MTA0MCAvKiBT
VkdMZW5ndGhMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzhBMDBEMDBCRjIwMDA3MUI3ODIgLyogU1ZH
TGVuZ3RoTGlzdC5oICovLAogCQkJCUIyMjI3OEExMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdMZW5n
dGhMaXN0LmlkbCAqLywKIAkJCQk3Q0U1OEQ1MjFERDdCMDkzMDAxMjg1NTIgLyogU1ZHTGVuZ3Ro
VmFsdWUuY3BwICovLApAQCAtMjUxNjIsNiArMjUxNjgsNyBAQAogCQkJCTQ0RDhEQTk4MTM5NTQ1
QkUwMDMzN0I3NSAvKiBTVkdNUGF0aEVsZW1lbnQuaWRsICovLAogCQkJCTdDRTU4RDRGMURENjlB
MUUwMDEyODU1MiAvKiBTVkdOdW1iZXIuaCAqLywKIAkJCQlCMjIyNzhCOTBEMDBCRjIwMDA3MUI3
ODIgLyogU1ZHTnVtYmVyLmlkbCAqLywKKwkJCQk3Q0Q3MEM0MDI0QTI4QUM5MDBFNjEwNDAgLyog
U1ZHTnVtYmVyTGlzdC5jcHAgKi8sCiAJCQkJQjIyMjc4QkIwRDAwQkYyMDAwNzFCNzgyIC8qIFNW
R051bWJlckxpc3QuaCAqLywKIAkJCQlCMjIyNzhCQzBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHTnVt
YmVyTGlzdC5pZGwgKi8sCiAJCQkJQjIyMjc4QzAwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR1BhcnNl
clV0aWxpdGllcy5jcHAgKi8sCkBAIC0yNTIyNSw2ICsyNTIzMiw3IEBACiAJCQkJQjIyMjc4RjMw
RDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BhdHRlcm5FbGVtZW50LmlkbCAqLywKIAkJCQk3Q0U1OEQ0
OTFERDY0QTVCMDAxMjg1NTIgLyogU1ZHUG9pbnQuaCAqLywKIAkJCQlCMjIyNzhGNDBEMDBCRjIx
MDA3MUI3ODIgLyogU1ZHUG9pbnQuaWRsICovLAorCQkJCTdDRDcwQzQyMjRBMjhCNzAwMEU2MTA0
MCAvKiBTVkdQb2ludExpc3QuY3BwICovLAogCQkJCUIyMjI3OEY2MEQwMEJGMjEwMDcxQjc4MiAv
KiBTVkdQb2ludExpc3QuaCAqLywKIAkJCQlCMjIyNzhGNzBEMDBCRjIxMDA3MUI3ODIgLyogU1ZH
UG9pbnRMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzhGODBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUG9s
eUVsZW1lbnQuY3BwICovLApAQCAtMjUyNTgsNiArMjUyNjYsNyBAQAogCQkJCUIyMjI3OTEyMEQw
MEJGMjEwMDcxQjc4MiAvKiBTVkdTdG9wRWxlbWVudC5jcHAgKi8sCiAJCQkJQjIyMjc5MTMwRDAw
QkYyMTAwNzFCNzgyIC8qIFNWR1N0b3BFbGVtZW50LmggKi8sCiAJCQkJQjIyMjc5MTQwRDAwQkYy
MTAwNzFCNzgyIC8qIFNWR1N0b3BFbGVtZW50LmlkbCAqLywKKwkJCQk3Q0Q3MEM0MzI0QTI4QkVD
MDBFNjEwNDAgLyogU1ZHU3RyaW5nTGlzdC5jcHAgKi8sCiAJCQkJQjIyMjc5MTYwRDAwQkYyMTAw
NzFCNzgyIC8qIFNWR1N0cmluZ0xpc3QuaCAqLywKIAkJCQlCMjIyNzkxNzBEMDBCRjIxMDA3MUI3
ODIgLyogU1ZHU3RyaW5nTGlzdC5pZGwgKi8sCiAJCQkJQjIyMjc5MjEwRDAwQkYyMTAwNzFCNzgy
IC8qIFNWR1N0eWxlRWxlbWVudC5jcHAgKi8sCkBAIC0yNTI5OSw2ICsyNTMwOCw3IEBACiAJCQkJ
QjIyMjc5NDQwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybWFibGUuaCAqLywKIAkJCQlC
MjIyNzk0NjBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwICovLAog
CQkJCUIyMjI3OTQ3MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oICov
LAorCQkJCTdDRDcwQzQ2MjRBMjhDRDcwMEU2MTA0MCAvKiBTVkdUcmFuc2Zvcm1MaXN0LmNwcCAq
LywKIAkJCQlCMjIyNzk0OTBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtTGlzdC5oICov
LAogCQkJCUIyMjI3OTRBMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1MaXN0LmlkbCAq
LywKIAkJCQk3Q0U1OEQ1NjFERDdEOTZEMDAxMjg1NTIgLyogU1ZHVHJhbnNmb3JtVmFsdWUuaCAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVz
LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNp
bmdVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDE0IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIGJvb2wgaXNOb3RBU0NJSVNwYWNlKFVDaGFyIGMpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KK2lubGluZSBib29sIGlzTm90QVNDSUlTcGFjZShD
aGFyVHlwZSBjKQogewogICAgIHJldHVybiAhaXNBU0NJSVNwYWNlKGMpOwogfQogICAgIAotdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+Ci1ib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBl
KiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIENoYXJUeXBlIGRlbGltaXRlcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCB0eXBlbmFtZSBEZWxpbWl0ZXJUeXBlPgorYm9vbCBz
a2lwRXhhY3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5k
LCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikKIHsKICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYg
KnBvc2l0aW9uID09IGRlbGltaXRlcikgewogICAgICAgICArK3Bvc2l0aW9uOwpAQCAtNDksNiAr
NTAsMTYgQEAgYm9vbCBza2lwRXhhY3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIHR5cGVuYW1lIERl
bGltaXRlclR5cGU+Citib29sIHNraXBFeGFjdGx5KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhclR5
cGU+JiBwYXJzaW5nQnVmZmVyLCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikKK3sKKyAgICBpZiAo
cGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIg
PT0gZGVsaW1pdGVyKSB7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KIGJvb2wgc2tpcEV4
YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCkKIHsK
QEAgLTU5LDEzICs3MCwzMCBAQCBib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9z
aXRpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4K
LXZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBl
KiBlbmQsIENoYXJUeXBlIGRlbGltaXRlcikKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBi
b29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Citib29sIHNraXBFeGFjdGx5KFN0cmlu
Z1BhcnNpbmdCdWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIGlmIChwYXJz
aW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBjaGFyYWN0ZXJQcmVkaWNhdGUo
KnBhcnNpbmdCdWZmZXIpKSB7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+Cit2b2lkIHNraXBVbnRpbChjb25z
dCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kLCBEZWxpbWl0ZXJUeXBl
IGRlbGltaXRlcikKIHsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uICE9
IGRlbGltaXRlcikKICAgICAgICAgKytwb3NpdGlvbjsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+Cit2b2lkIHNraXBVbnRpbChTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgRGVsaW1pdGVyVHlwZSBkZWxp
bWl0ZXIpCit7CisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpICYmICpwYXJzaW5nQnVmZmVyICE9IGRlbGltaXRlcikKKyAgICAgICAgKytwYXJzaW5nQnVm
ZmVyOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVk
aWNhdGUoQ2hhclR5cGUpPgogdm9pZCBza2lwVW50aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlv
biwgY29uc3QgQ2hhclR5cGUqIGVuZCkKIHsKQEAgLTc0LDYgKzEwMiwxMyBAQCB2b2lkIHNraXBV
bnRpbChjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Cit2b2lkIHNraXBVbnRp
bChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICB3
aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgIWNoYXJhY3Rl
clByZWRpY2F0ZSgqcGFyc2luZ0J1ZmZlcikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENo
YXJUeXBlKT4KIHZvaWQgc2tpcFdoaWxlKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0
IENoYXJUeXBlKiBlbmQpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmIGNoYXJhY3Rl
clByZWRpY2F0ZSgqcG9zaXRpb24pKQpAQCAtODEsNiArMTE2LDEzIEBAIHZvaWQgc2tpcFdoaWxl
KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5
cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK3ZvaWQgc2tpcFdoaWxlKFN0
cmluZ1BhcnNpbmdCdWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHdoaWxl
IChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBjaGFyYWN0ZXJQcmVk
aWNhdGUoKnBhcnNpbmdCdWZmZXIpKQorICAgICAgICArK3BhcnNpbmdCdWZmZXI7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlw
ZSk+CiB2b2lkIHJldmVyc2VTa2lwV2hpbGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29u
c3QgQ2hhclR5cGUqIHN0YXJ0KQogewogICAgIHdoaWxlIChwb3NpdGlvbiA+PSBzdGFydCAmJiBj
aGFyYWN0ZXJQcmVkaWNhdGUoKnBvc2l0aW9uKSkKQEAgLTkyLDExICsxMzQsNDEgQEAgYm9vbCBz
a2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IAogewogICAgIGlmIChwb3NpdGlvbiAr
IGxvd2VyY2FzZUxldHRlcnNMZW5ndGggPiBlbmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIVdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGxvd2Vy
Y2FzZUxldHRlcnNMZW5ndGggLSAxLCBsb3dlcmNhc2VMZXR0ZXJzKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHBvc2l0aW9uICs9IChsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBib29sIHJlc3VsdCA9IFdURjo6ZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxLCBs
b3dlcmNhc2VMZXR0ZXJzKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICBwb3NpdGlvbiArPSAo
bG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEpOwotICAgIHJldHVybiByZXN1bHQ7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB1bnNpZ25lZCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3Ro
PgorYm9vbCBza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0
ZXJzKVtsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoXSkKK3sKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5s
ZW5ndGhSZW1haW5pbmcoKSA8IGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFXVEY6OmVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEsIGxv
d2VyY2FzZUxldHRlcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcGFyc2luZ0J1ZmZl
ci5hZHZhbmNlQnkobG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEpOworICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB1bnNpZ25lZCBjaGFyYWN0
ZXJDb3VudD4gY29uc3RleHByIGJvb2wgc2tpcENoYXJhY3RlcnNFeGFjdGx5KGNvbnN0IENoYXJh
Y3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgQ2hhcmFjdGVy
VHlwZSgmc3RyKVtjaGFyYWN0ZXJDb3VudF0pCit7CisgICAgaWYgKGVuZCAtIHB0ciA8IGNoYXJh
Y3RlckNvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1lbWNtcChzdHIsIHB0
ciwgc2l6ZW9mKENoYXJhY3RlclR5cGUpICogY2hhcmFjdGVyQ291bnQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcHRyICs9IGNoYXJhY3RlckNvdW50OworICAgIHJldHVybiB0cnVlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB1bnNpZ25lZCBjaGFyYWN0ZXJD
b3VudD4gY29uc3RleHByIGJvb2wgc2tpcENoYXJhY3RlcnNFeGFjdGx5KFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIsIGNvbnN0IENoYXJhY3RlclR5cGUo
JnN0cilbY2hhcmFjdGVyQ291bnRdKQoreworICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJl
bWFpbmluZygpIDwgY2hhcmFjdGVyQ291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobWVtY21wKHN0ciwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpLCBzaXplb2YoQ2hhcmFjdGVy
VHlwZSkgKiBjaGFyYWN0ZXJDb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwYXJz
aW5nQnVmZmVyLmFkdmFuY2VCeShjaGFyYWN0ZXJDb3VudCk7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCShyZXZpc2lvbiAyNjMz
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTA0ICszMCw5NiBAQAogI2luY2x1ZGUgPHBhbC9j
cnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1
ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlv
bihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0mIGFsZ29yaXRobSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxSZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobT4gcGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5jaW5n
UG9zaXRpb24oU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZl
cikKIHsKICAgICAvLyBGSVhNRTogVGhpcyB3b3VsZCBiZSBtdWNoIGNsZWFuZXIgd2l0aCBhIGxv
b2t1cCB0YWJsZSBvZiBwYWlycyBvZiBsYWJlbCAvIGFsZ29yaXRobSBlbnVtIHZhbHVlcywgYnV0
IEkgY2FuJ3QKICAgICAvLyBmaWd1cmUgb3V0IGhvdyB0byBrZWVwIHRoZSBsYWJlbHMgY29tcGls
ZXRpbWUgc3RyaW5ncyBmb3Igc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZS4KIAotICAgIGlm
IChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBlbmQsICJzaGEyNTYiKSkg
ewotICAgICAgICBhbGdvcml0aG0gPSBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29y
aXRobTo6U0hBMjU2OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHNraXBF
eGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGVuZCwgInNoYTM4NCIpKSB7Ci0gICAg
ICAgIGFsZ29yaXRobSA9IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtOjpT
SEEzODQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoc2tpcEV4YWN0bHlJ
Z25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgZW5kLCAic2hhNTEyIikpIHsKLSAgICAgICAgYWxn
b3JpdGhtID0gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTUxMjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5n
QVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICJzaGEyNTYiKSkKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEEyNTY7CisgICAgaWYgKHNraXBF
eGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgInNoYTM4NCIpKQorICAgICAg
ICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTM4NDsK
KyAgICBpZiAoc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAic2hh
NTEyIikpCisgICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29y
aXRobTo6U0hBNTEyOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgT3B0aW9u
YWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJ
bXBsKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSog
ZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFJl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAg
IGlmIChwb3NpdGlvbiA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdDo6QWxnb3JpdGhtIGFsZ29yaXRobTsKLSAgICBpZiAoIXBhcnNlSGFzaEFsZ29yaXRobUFk
dmFuY2luZ1Bvc2l0aW9uKHBvc2l0aW9uLCBlbmQsIGFsZ29yaXRobSkpCisgICAgYXV0byBhbGdv
cml0aG0gPSBwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihwYXJzaW5nQnVmZmVy
KTsKKyAgICBpZiAoIWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJy0nKSkK
KyAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICctJykp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBiZWdpbkhhc2hWYWx1ZSA9IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAgICBza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPScpOwotICAgIHNraXBFeGFj
dGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICc9Jyk7CisgICAgYXV0byBiZWdpbkhh
c2hWYWx1ZSA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFj
dGVyVHlwZSwgaXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7Cisg
ICAgc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz0nKTsKKyAgICBz
a2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnPScpOwogCi0gICAgaWYg
KHBvc2l0aW9uID09IGJlZ2luSGFzaFZhbHVlKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0
aW9uKCkgPT0gYmVnaW5IYXNoVmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
ICAgICBWZWN0b3I8dWludDhfdD4gZGlnZXN0OwotICAgIFN0cmluZ1ZpZXcgaGFzaFZhbHVlKGJl
Z2luSGFzaFZhbHVlLCBwb3NpdGlvbiAtIGJlZ2luSGFzaFZhbHVlKTsKKyAgICBTdHJpbmdWaWV3
IGhhc2hWYWx1ZShiZWdpbkhhc2hWYWx1ZSwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVn
aW5IYXNoVmFsdWUpOwogICAgIGlmICghYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgZGlnZXN0LCBC
YXNlNjRWYWxpZGF0ZVBhZGRpbmcpKSB7CiAgICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGhh
c2hWYWx1ZSwgZGlnZXN0KSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQogCi0gICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGFsZ29yaXRobSwg
V1RGTW92ZShkaWdlc3QpIH07CisgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dCB7ICphbGdvcml0aG0sIFdURk1vdmUoZGlnZXN0KSB9OwogfQogCi1PcHRpb25hbDxSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBVQ2hh
ciomIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKQorT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxV
Q2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIHBhcnNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dEltcGwocGFyc2luZ0J1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNv
bnN0IExDaGFyKiBlbmQpCitPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBh
cnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2lu
Z0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChiZWdp
biwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChwYXJzaW5n
QnVmZmVyKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBP
cHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRD
cnlwdG9ncmFwaGljRGlnZXN0SW1wbChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNv
bnN0IENoYXJhY3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHN0YXRpYyBPcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJz
ZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJh
Y3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCisg
ICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBh
bGdvcml0aG07Ci0gICAgaWYgKCFwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihw
b3NpdGlvbiwgZW5kLCBhbGdvcml0aG0pKQorICAgIGF1dG8gYWxnb3JpdGhtID0gcGFyc2VIYXNo
QWxnb3JpdGhtQWR2YW5jaW5nUG9zaXRpb24ocGFyc2luZ0J1ZmZlcik7CisgICAgaWYgKCFhbGdv
cml0aG0pCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoIXNraXBFeGFj
dGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICctJykpCisgICAgaWYgKCFza2lwRXhh
Y3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnLScpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW5IYXNoVmFsdWUg
PSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNCYXNlNjRPckJhc2U2
NFVSTENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Ci0gICAgc2tpcEV4YWN0bHk8Q2hhcmFjdGVy
VHlwZT4ocG9zaXRpb24sIGVuZCwgJz0nKTsKLSAgICBza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBl
Pihwb3NpdGlvbiwgZW5kLCAnPScpOworICAgIGF1dG8gYmVnaW5IYXNoVmFsdWUgPSBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQmFzZTY0
T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOworICAgIHNraXBFeGFjdGx5PENo
YXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc9Jyk7CisgICAgc2tpcEV4YWN0bHk8Q2hhcmFj
dGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz0nKTsKIAotICAgIGlmIChwb3NpdGlvbiA9PSBiZWdp
bkhhc2hWYWx1ZSkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09IGJlZ2luSGFz
aFZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEVuY29k
ZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyBhbGdvcml0aG0sIFN0cmluZyhiZWdpbkhh
c2hWYWx1ZSwgcG9zaXRpb24gLSBiZWdpbkhhc2hWYWx1ZSkgfTsKKyAgICByZXR1cm4gRW5jb2Rl
ZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFN0cmluZyhiZWdpbkhh
c2hWYWx1ZSwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5IYXNoVmFsdWUpIH07CiB9
CiAKLU9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5j
b2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgVUNoYXIqJiBiZWdpbiwgY29uc3QgVUNoYXIq
IGVuZCkKK09wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNl
RW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBh
cnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdl
c3RJbXBsKGJlZ2luLCBlbmQpOworICAgIHJldHVybiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGlj
RGlnZXN0SW1wbChwYXJzaW5nQnVmZmVyKTsKIH0KIAotT3B0aW9uYWw8RW5jb2RlZFJlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25z
dCBMQ2hhciomIGJlZ2luLCBjb25zdCBMQ2hhciogZW5kKQorT3B0aW9uYWw8RW5jb2RlZFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChT
dHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4g
cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0
dXJuIHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKHBhcnNpbmdCdWZmZXIpOwog
fQogCiBPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZUVuY29kZWRS
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdCYgZW5jb2RlZERpZ2VzdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgJKHJldmlzaW9uIDI2MzMzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNjYsMTEgKzY2LDExIEBAIHN0cnVjdCBFbmNvZGVkUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXMKICAgICBTdHJpbmcgZGlnZXN0OwogfTsKIAotT3B0aW9uYWw8UmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3Qg
VUNoYXIqJiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7Ci1PcHRpb25hbDxSZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBMQ2hhciomIGJl
Z2luLCBjb25zdCBMQ2hhciogZW5kKTsKK09wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+
Jik7CitPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOwogCi1PcHRpb25hbDxFbmNv
ZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGlj
RGlnZXN0KGNvbnN0IFVDaGFyKiYgYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOwotT3B0aW9uYWw8
RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdChjb25zdCBMQ2hhciomIGJlZ2luLCBjb25zdCBMQ2hhciogZW5kKTsKK09wdGlv
bmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0
b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKK09wdGlvbmFsPEVu
Y29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBo
aWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsKIAogT3B0aW9uYWw8UmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0KGNvbnN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QmKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlSW50ZWdyaXR5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VJbnRlZ3JpdHkuY3BwCShy
ZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VJbnRl
Z3JpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUGFy
c2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIlJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5o
IgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Bh
cnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCw3ICs1MSw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENoYXJh
Y3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQorICAgIGJvb2wg
b3BlcmF0b3IoKShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVm
ZmVyKQogICAgIHsKICAgICAgICAgLy8gSW5pdGlhbGl6ZSBoYXNoZXMgdG8gYmUgc29tZXRoaW5n
IG90aGVyIFdURjo6bnVsbG9wdCwgdG8gaW5kaWNhdGUKICAgICAgICAgLy8gdGhhdCBhdCBsZWFz
dCBvbmUgdG9rZW4gd2FzIHNlZW4sIGFuZCB0aHVzIHNldHRpbmcgdGhlIGVtcHR5IGZsYWcKQEAg
LTU4LDE5ICs1OSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghbV9kaWdlc3RzKQogICAgICAg
ICAgICAgbV9kaWdlc3RzID0gVmVjdG9yPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdl
c3Q+IHsgfTsKIAotICAgICAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBo
aWNEaWdlc3QocG9zaXRpb24sIGVuZCk7CisgICAgICAgIGF1dG8gZGlnZXN0ID0gcGFyc2VFbmNv
ZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFkaWdl
c3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gVGhlIHNwZWMgYWxs
b3dzIGZvciBvcHRpb25zIGZvbGxvd2luZyB0aGUgZGlnZXN0LCBidXQgc28gZmFyLCBubwogICAg
ICAgICAvLyBzcGVjaWZpYyBvcHRpb25zIGhhdmUgYmVlbiBzcGVjaWZpZWQuIFRodXMsIHdlIGp1
c3QgcGFyc2UgYW5kIGlnbm9yZQogICAgICAgICAvLyB0aGVtLiBUaGVpciBzeW50YXggaXMgYSAn
PycgZm9sbG93IGJ5IGFueSBudW1iZXIgb2YgVkNIQVJzLgotICAgICAgICBpZiAoc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz8nKSkKLSAgICAgICAgICAgIHNraXBX
aGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1ZDSEFSPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgaWYg
KHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc/JykpCisgICAgICAg
ICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNWQ0hBUj4ocGFyc2luZ0J1ZmZlcik7CiAK
ICAgICAgICAgLy8gQWZ0ZXIgdGhlIGJhc2U2NCB2YWx1ZSBhbmQgb3B0aW9ucywgdGhlIGN1cnJl
bnQgY2hhcmFjdGVyIHBvaW50ZWQgdG8gYnkgcG9zaXRpb24KICAgICAgICAgLy8gc2hvdWxkIGVp
dGhlciBiZSB0aGUgZW5kIG9yIGEgc3BhY2UuCi0gICAgICAgIGlmIChwb3NpdGlvbiAhPSBlbmQg
JiYgIWlzSFRNTFNwYWNlKCpwb3NpdGlvbikpCisgICAgICAgIGlmICghcGFyc2luZ0J1ZmZlci5h
dEVuZCgpICYmICFpc0hUTUxTcGFjZSgqcGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgbV9kaWdlc3RzLT5hcHBlbmQoV1RGTW92ZSgqZGlnZXN0KSk7
CkBAIC04NCwxNyArODUsMTQgQEAgcHJpdmF0ZToKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci1zdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRP
blNwYWNlcyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSog
ZW5kLCBGdW5jdG9yJiYgZnVuY3RvcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdE9uU3BhY2Vz
KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlciwgRnVuY3Rv
ciYmIGZ1bmN0b3IpCiB7Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcG9zaXRpb24gPSBiZWdp
bjsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNIVE1MU3BhY2U+KHBhcnNpbmdCdWZm
ZXIpOwogCi0gICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzSFRNTFNwYWNlPihwb3NpdGlv
biwgZW5kKTsKLQotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBpZiAoIWZ1
bmN0b3IocG9zaXRpb24sIGVuZCkpCi0gICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlw
ZSwgaXNOb3RIVE1MU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotCi0gICAgICAgIHNraXBXaGlsZTxD
aGFyYWN0ZXJUeXBlLCBpc0hUTUxTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgd2hpbGUgKHBh
cnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgIGlmICghZnVu
Y3RvcihwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc05vdEhUTUxTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIHNraXBXaGlsZTxDaGFy
YWN0ZXJUeXBlLCBpc0hUTUxTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAgICAgfQogfQogCkBAIC0x
MDUsMTEgKzEwMywxMSBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPEVuY29kZWRSZXNvdXJjZUNy
CiAKICAgICBPcHRpb25hbDxWZWN0b3I8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dD4+IHJlc3VsdDsKICAgICAKLSAgICBjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmdJbXBsID0gKmlu
dGVncml0eU1ldGFkYXRhLmltcGwoKTsKLSAgICBpZiAoc3RyaW5nSW1wbC5pczhCaXQoKSkKLSAg
ICAgICAgc3BsaXRPblNwYWNlcyhzdHJpbmdJbXBsLmNoYXJhY3RlcnM4KCksIHN0cmluZ0ltcGwu
Y2hhcmFjdGVyczgoKSArIHN0cmluZ0ltcGwubGVuZ3RoKCksIEludGVncml0eU1ldGFkYXRhUGFy
c2VyPExDaGFyPiB7IHJlc3VsdCB9KTsKLSAgICBlbHNlCi0gICAgICAgIHNwbGl0T25TcGFjZXMo
c3RyaW5nSW1wbC5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nSW1wbC5jaGFyYWN0ZXJzMTYoKSArIHN0
cmluZ0ltcGwubGVuZ3RoKCksIEludGVncml0eU1ldGFkYXRhUGFyc2VyPFVDaGFyPiB7IHJlc3Vs
dCB9KTsKKyAgICBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhpbnRlZ3JpdHlNZXRhZGF0
YSwgWyZyZXN1bHRdIChhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFj
dGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBl
OworCisgICAgICAgIHNwbGl0T25TcGFjZXMocGFyc2luZ0J1ZmZlciwgSW50ZWdyaXR5TWV0YWRh
dGFQYXJzZXI8Q2hhcmFjdGVyVHlwZT4geyByZXN1bHQgfSk7CisgICAgfSk7CiAKICAgICByZXR1
cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL01hbmlm
ZXN0UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvTWFuaWZlc3RQYXJzZXIuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUv
Q2hhcmFjdGVyTmFtZXMuaD4KIApAQCAtNjcsMTM3ICs2OCwxNDAgQEAgYm9vbCBwYXJzZU1hbmlm
ZXN0KGNvbnN0IFVSTCYgbWFuaWZlc3RVUgogICAgIGlmICghbWFuaWZlc3RTdHJpbmcuc3RhcnRz
V2l0aChtYW5pZmVzdFNpZ25hdHVyZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBTdHJpbmdWaWV3IG1hbmlmZXN0QWZ0ZXJTaWduYXR1cmUgPSBTdHJpbmdWaWV3KG1hbmlmZXN0
U3RyaW5nKS5zdWJzdHJpbmcoc2l6ZW9mKG1hbmlmZXN0U2lnbmF0dXJlKSAtIDEpOwotICAgIGF1
dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gbWFuaWZlc3RBZnRlclNpZ25hdHVyZS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcCA9IHVwY29udmVydGVkQ2hhcmFj
dGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcCArIG1hbmlmZXN0QWZ0ZXJTaWduYXR1cmUu
bGVuZ3RoKCk7CisgICAgYXV0byBtYW5pZmVzdEFmdGVyU2lnbmF0dXJlID0gU3RyaW5nVmlldyht
YW5pZmVzdFN0cmluZykuc3Vic3RyaW5nKHNpemVvZihtYW5pZmVzdFNpZ25hdHVyZSkgLSAxKTsK
IAotICAgIGlmIChwIDwgZW5kICYmICpwICE9ICcgJyAmJiAqcCAhPSAnXHQnICYmICpwICE9ICdc
bicgJiYgKnAgIT0gJ1xyJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEZJWE1FOiBU
aGlzIHBhcnNlciBjb3VsZCBiZSBtdWNoIGNsZWFyZXIgaWYgaXQgYWRvcHRlZCBzb21lIG9mIHRo
ZSBjb21tb24gcGFyc2luZyB1dGlsaXRpZXMKKyAgICAvLyBmb3Igc2tpcHBpbmcgYW5kIGNvbXBh
cmluZy4KIAotICAgIC8vIFNraXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KLSAgICB3aGlsZSAo
cCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCi0gICAgICAgIHArKzsKLQotICAg
IHdoaWxlICgxKSB7Ci0gICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZQotICAgICAgICB3aGlsZSAo
cCA8IGVuZCAmJiAoKnAgPT0gJ1xuJyB8fCAqcCA9PSAnXHInIHx8ICpwID09ICcgJyB8fCAqcCA9
PSAnXHQnKSkKLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgCi0gICAgICAgIGlmIChwID09IGVu
ZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgY29uc3QgVUNoYXIqIGxp
bmVTdGFydCA9IHA7Ci0gICAgICAgIAotICAgICAgICAvLyBGaW5kIHRoZSBlbmQgb2YgdGhlIGxp
bmUKLSAgICAgICAgd2hpbGUgKHAgPCBlbmQgJiYgKnAgIT0gJ1xyJyAmJiAqcCAhPSAnXG4nKQot
ICAgICAgICAgICAgcCsrOwotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBh
IGNvbW1lbnQKLSAgICAgICAgaWYgKCpsaW5lU3RhcnQgPT0gJyMnKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIAotICAgICAgICAvLyBHZXQgcmlkIG9mIHRyYWlsaW5nIHdoaXRlc3Bh
Y2UKLSAgICAgICAgY29uc3QgVUNoYXIqIHRtcCA9IHAgLSAxOwotICAgICAgICB3aGlsZSAodG1w
ID4gbGluZVN0YXJ0ICYmICgqdG1wID09ICcgJyB8fCAqdG1wID09ICdcdCcpKQotICAgICAgICAg
ICAgdG1wLS07Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgbGluZShsaW5lU3RhcnQsIHRtcCAt
IGxpbmVTdGFydCArIDEpOwotCi0gICAgICAgIGlmIChsaW5lID09ICJDQUNIRToiKSAKLSAgICAg
ICAgICAgIG1vZGUgPSBFeHBsaWNpdDsKLSAgICAgICAgZWxzZSBpZiAobGluZSA9PSAiRkFMTEJB
Q0s6IikKLSAgICAgICAgICAgIG1vZGUgPSBGYWxsYmFjazsKLSAgICAgICAgZWxzZSBpZiAobGlu
ZSA9PSAiTkVUV09SSzoiKQotICAgICAgICAgICAgbW9kZSA9IE9ubGluZUFsbG93bGlzdDsKLSAg
ICAgICAgZWxzZSBpZiAobGluZS5lbmRzV2l0aCgnOicpKQotICAgICAgICAgICAgbW9kZSA9IFVu
a25vd247Ci0gICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gVW5rbm93bikKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBlbHNlIGlmIChtb2RlID09IEV4cGxpY2l0IHx8IG1vZGUgPT0gT25s
aW5lQWxsb3dsaXN0KSB7Ci0gICAgICAgICAgICBhdXRvIHVwY29udmVydGVkTGluZUNoYXJhY3Rl
cnMgPSBTdHJpbmdWaWV3KGxpbmUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICAg
ICAgY29uc3QgVUNoYXIqIHAgPSB1cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzOwotICAgICAgICAg
ICAgY29uc3QgVUNoYXIqIGxpbmVFbmQgPSBwICsgbGluZS5sZW5ndGgoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSBVUkwg
ZnJvbSBzdWJzZXF1ZW50IGlnbm9yZWQgdG9rZW5zLgotICAgICAgICAgICAgd2hpbGUgKHAgPCBs
aW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKSAKLSAgICAgICAgICAgICAgICBwKys7
CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKG1hbmlmZXN0QWZ0ZXJT
aWduYXR1cmUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgYXV0byBwID0gcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICBhdXRvIGVuZCA9IHBhcnNpbmdCdWZmZXIu
ZW5kKCk7CiAKLSAgICAgICAgICAgIGlmIChtb2RlID09IE9ubGluZUFsbG93bGlzdCAmJiBwIC0g
dXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVycyA9PSAxICYmIGxpbmVbMF0gPT0gJyonKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gV2lsZGNhcmQgd2FzIGZvdW5kLgotICAgICAgICAgICAgICAgIG1hbmlm
ZXN0LmFsbG93QWxsTmV0d29ya1JlcXVlc3RzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHAgPCBlbmQgJiYgKnAgIT0gJyAnICYm
ICpwICE9ICdcdCcgJiYgKnAgIT0gJ1xuJyAmJiAqcCAhPSAnXHInKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBVUkwgdXJsKG1hbmlmZXN0VVJMLCBsaW5lLnN1YnN0
cmluZygwLCBwIC0gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVycykpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIC8vIFNraXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKyAgICAgICAgd2hpbGUg
KHAgPCBlbmQgJiYgKnAgIT0gJ1xyJyAmJiAqcCAhPSAnXG4nKQorICAgICAgICAgICAgcCsrOwog
Ci0gICAgICAgICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2wo
KSwgbWFuaWZlc3RVUkwucHJvdG9jb2woKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2UKKyAgICAg
ICAgICAgIHdoaWxlIChwIDwgZW5kICYmICgqcCA9PSAnXG4nIHx8ICpwID09ICdccicgfHwgKnAg
PT0gJyAnIHx8ICpwID09ICdcdCcpKQorICAgICAgICAgICAgICAgIHArKzsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKG1vZGUgPT0gRXhwbGljaXQgJiYgbWFuaWZlc3RVUkwucHJvdG9j
b2xJcygiaHR0cHMiKSAmJiAhcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1hbmlmZXN0VVJM
LCB1cmwpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHAgPT0g
ZW5kKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAobW9kZSA9PSBFeHBsaWNpdCkKLSAgICAgICAgICAgICAgICBtYW5pZmVzdC5leHBsaWNpdFVS
THMuYWRkKHVybC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bWFuaWZlc3Qub25saW5lQWxsb3dlZFVSTHMuYXBwZW5kKHVybCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgfSBlbHNlIGlmIChtb2RlID09IEZhbGxiYWNrKSB7Ci0gICAgICAgICAgICBhdXRvIHVw
Y29udmVydGVkTGluZUNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGxpbmUpLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOwotICAgICAgICAgICAgY29uc3QgVUNoYXIqIHAgPSB1cGNvbnZlcnRlZExpbmVD
aGFyYWN0ZXJzOwotICAgICAgICAgICAgY29uc3QgVUNoYXIqIGxpbmVFbmQgPSBwICsgbGluZS5s
ZW5ndGgoKTsKKyAgICAgICAgICAgIGF1dG8gbGluZVN0YXJ0ID0gcDsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSB0d28gVVJM
cwotICAgICAgICAgICAgd2hpbGUgKHAgPCBsaW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0g
JyAnKSAKKyAgICAgICAgICAgIC8vIEZpbmQgdGhlIGVuZCBvZiB0aGUgbGluZQorICAgICAgICAg
ICAgd2hpbGUgKHAgPCBlbmQgJiYgKnAgIT0gJ1xyJyAmJiAqcCAhPSAnXG4nKQogICAgICAgICAg
ICAgICAgIHArKzsKLQotICAgICAgICAgICAgaWYgKHAgPT0gbGluZUVuZCkgewotICAgICAgICAg
ICAgICAgIC8vIFRoZXJlIHdhcyBubyB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTHMuCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIFVSTCBuYW1lc3BhY2VVUkwobWFuaWZlc3RVUkwsIGxpbmUuc3Vic3RyaW5nKDAs
IHAgLSB1cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzKSk7Ci0gICAgICAgICAgICBpZiAoIW5hbWVz
cGFjZVVSTC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBuYW1lc3BhY2VVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0KLSAgICAgICAgICAg
IGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1hbmlmZXN0VVJMLCBuYW1lc3BhY2VV
UkwpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyBBbHRob3Vn
aCA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb2ZmbGluZS5odG1sI3Bh
cnNpbmctY2FjaGUtbWFuaWZlc3RzPiAoMDcvMDYvMjAxNykgc2FpZHMKLSAgICAgICAgICAgIC8v
IHRoYXQgd2Ugc2hvdWxkIGFsd2F5cyBwcmVmaXggbWF0Y2ggdGhlIG1hbmlmZXN0IHBhdGggd2Ug
b25seSBkbyBzbyBpZiB0aGUgbWFuaWZlc3Qgd2FzIHNlcnZlZCB3aXRoIGEgbm9uLQotICAgICAg
ICAgICAgLy8gc3RhbmRhcmQgSFRUUCBDb250ZW50LVR5cGUgaGVhZGVyIGZvciB3ZWIgY29tcGF0
aWJpbGl0eS4KLSAgICAgICAgICAgIGlmICghYWxsb3dGYWxsYmFja05hbWVzcGFjZU91dHNpZGVN
YW5mZXN0UGF0aCAmJiAhbmFtZXNwYWNlVVJMLnBhdGgoKS5zdGFydHNXaXRoKG1hbmlmZXN0UGF0
aCkpCisgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgY29tbWVudAorICAgICAgICAg
ICAgaWYgKCpsaW5lU3RhcnQgPT0gJyMnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBHZXQgcmlkIG9mIHRyYWlsaW5nIHdoaXRlc3BhY2UK
KyAgICAgICAgICAgIGF1dG8gdG1wID0gcCAtIDE7CisgICAgICAgICAgICB3aGlsZSAodG1wID4g
bGluZVN0YXJ0ICYmICgqdG1wID09ICcgJyB8fCAqdG1wID09ICdcdCcpKQorICAgICAgICAgICAg
ICAgIHRtcC0tOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmdWaWV3IGxpbmUobGlu
ZVN0YXJ0LCB0bXAgLSBsaW5lU3RhcnQgKyAxKTsKKworICAgICAgICAgICAgaWYgKGxpbmUgPT0g
IkNBQ0hFOiIpCisgICAgICAgICAgICAgICAgbW9kZSA9IEV4cGxpY2l0OworICAgICAgICAgICAg
ZWxzZSBpZiAobGluZSA9PSAiRkFMTEJBQ0s6IikKKyAgICAgICAgICAgICAgICBtb2RlID0gRmFs
bGJhY2s7CisgICAgICAgICAgICBlbHNlIGlmIChsaW5lID09ICJORVRXT1JLOiIpCisgICAgICAg
ICAgICAgICAgbW9kZSA9IE9ubGluZUFsbG93bGlzdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxp
bmUuZW5kc1dpdGgoJzonKSkKKyAgICAgICAgICAgICAgICBtb2RlID0gVW5rbm93bjsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gVW5rbm93bikKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gRXhwbGljaXQgfHwgbW9kZSA9PSBPbmxp
bmVBbGxvd2xpc3QpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHAgPSBsaW5lU3RhcnQ7CisgICAg
ICAgICAgICAgICAgYXV0byBsaW5lRW5kID0gcCArIGxpbmUubGVuZ3RoKCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5n
IHRoZSBVUkwgZnJvbSBzdWJzZXF1ZW50IGlnbm9yZWQgdG9rZW5zLgorICAgICAgICAgICAgICAg
IHdoaWxlIChwIDwgbGluZUVuZCAmJiAqcCAhPSAnXHQnICYmICpwICE9ICcgJykKKyAgICAgICAg
ICAgICAgICAgICAgcCsrOworCisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gT25saW5lQWxs
b3dsaXN0ICYmIHAgLSBsaW5lU3RhcnQgPT0gMSAmJiBsaW5lWzBdID09ICcqJykgeworICAgICAg
ICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB3YXMgZm91bmQuCisgICAgICAgICAgICAgICAgICAg
IG1hbmlmZXN0LmFsbG93QWxsTmV0d29ya1JlcXVlc3RzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgVVJM
IHVybChtYW5pZmVzdFVSTCwgbGluZS5zdWJzdHJpbmcoMCwgcCAtIGxpbmVTdGFydCkudG9TdHJp
bmcoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCF1cmwuaXNWYWxp
ZCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIHVy
bC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UodXJsLnByb3RvY29sKCksIG1hbmlm
ZXN0VVJMLnByb3RvY29sKCkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBFeHBsaWNpdCAmJiBtYW5p
ZmVzdFVSTC5wcm90b2NvbElzKCJodHRwcyIpICYmICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1
YWwobWFuaWZlc3RVUkwsIHVybCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEV4cGxpY2l0KQorICAg
ICAgICAgICAgICAgICAgICBtYW5pZmVzdC5leHBsaWNpdFVSTHMuYWRkKHVybC5zdHJpbmcoKSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdC5vbmxp
bmVBbGxvd2VkVVJMcy5hcHBlbmQodXJsKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobW9kZSA9PSBGYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGF1dG8gcCA9
IGxpbmVTdGFydDsKKyAgICAgICAgICAgICAgICBhdXRvIGxpbmVFbmQgPSBwICsgbGluZS5sZW5n
dGgoKTsKKworICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2Ugc2VwYXJhdGlu
ZyB0aGUgdHdvIFVSTHMKKyAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAg
IT0gJ1x0JyAmJiAqcCAhPSAnICcpCisgICAgICAgICAgICAgICAgICAgIHArKzsKKworICAgICAg
ICAgICAgICAgIGlmIChwID09IGxpbmVFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhl
cmUgd2FzIG5vIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUgVVJMcy4KKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIFVSTCBuYW1lc3BhY2VVUkwobWFuaWZlc3RVUkwsIGxpbmUuc3Vic3RyaW5n
KDAsIHAgLSBsaW5lU3RhcnQpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGlmICghbmFt
ZXNwYWNlVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgbmFtZXNwYWNlVVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOworCisg
ICAgICAgICAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RV
UkwsIG5hbWVzcGFjZVVSTCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgLy8gQWx0aG91Z2ggPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVs
dGlwYWdlL29mZmxpbmUuaHRtbCNwYXJzaW5nLWNhY2hlLW1hbmlmZXN0cz4gKDA3LzA2LzIwMTcp
IHNhaWRzCisgICAgICAgICAgICAgICAgLy8gdGhhdCB3ZSBzaG91bGQgYWx3YXlzIHByZWZpeCBt
YXRjaCB0aGUgbWFuaWZlc3QgcGF0aCB3ZSBvbmx5IGRvIHNvIGlmIHRoZSBtYW5pZmVzdCB3YXMg
c2VydmVkIHdpdGggYSBub24tCisgICAgICAgICAgICAgICAgLy8gc3RhbmRhcmQgSFRUUCBDb250
ZW50LVR5cGUgaGVhZGVyIGZvciB3ZWIgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICAgICAgICBp
ZiAoIWFsbG93RmFsbGJhY2tOYW1lc3BhY2VPdXRzaWRlTWFuZmVzdFBhdGggJiYgIW5hbWVzcGFj
ZVVSTC5wYXRoKCkuc3RhcnRzV2l0aChtYW5pZmVzdFBhdGgpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZSBzZXBhcmF0
aW5nIGZhbGxiYWNrIG5hbWVzcGFjZSBmcm9tIFVSTC4KKyAgICAgICAgICAgICAgICB3aGlsZSAo
cCA8IGxpbmVFbmQgJiYgKCpwID09ICdcdCcgfHwgKnAgPT0gJyAnKSkKKyAgICAgICAgICAgICAg
ICAgICAgcCsrOworCisgICAgICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBh
cmF0aW5nIHRoZSBVUkwgZnJvbSBzdWJzZXF1ZW50IGlnbm9yZWQgdG9rZW5zLgorICAgICAgICAg
ICAgICAgIGF1dG8gZmFsbGJhY2tTdGFydCA9IHA7CisgICAgICAgICAgICAgICAgd2hpbGUgKHAg
PCBsaW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKQorICAgICAgICAgICAgICAgICAg
ICBwKys7CisKKyAgICAgICAgICAgICAgICBVUkwgZmFsbGJhY2tVUkwobWFuaWZlc3RVUkwsIFN0
cmluZyhmYWxsYmFja1N0YXJ0LCBwIC0gZmFsbGJhY2tTdGFydCkpOworICAgICAgICAgICAgICAg
IGlmICghZmFsbGJhY2tVUkwuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBmYWxsYmFja1VSTC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIo
KTsKKworICAgICAgICAgICAgICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1h
bmlmZXN0VVJMLCBmYWxsYmFja1VSTCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAgICAgbWFuaWZlc3QuZmFsbGJhY2tVUkxzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihuYW1lc3BhY2VVUkwsIGZhbGxiYWNrVVJMKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogCi0gICAgICAg
ICAgICAvLyBTa2lwIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyBmYWxsYmFjayBuYW1lc3BhY2UgZnJv
bSBVUkwuCi0gICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKCpwID09ICdcdCcgfHwg
KnAgPT0gJyAnKSkKLSAgICAgICAgICAgICAgICBwKys7Ci0KLSAgICAgICAgICAgIC8vIExvb2sg
Zm9yIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUgVVJMIGZyb20gc3Vic2VxdWVudCBpZ25vcmVk
IHRva2Vucy4KLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBmYWxsYmFja1N0YXJ0ID0gcDsKLSAg
ICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAqcCAhPSAnXHQnICYmICpwICE9ICcgJykg
Ci0gICAgICAgICAgICAgICAgcCsrOwotCi0gICAgICAgICAgICBVUkwgZmFsbGJhY2tVUkwobWFu
aWZlc3RVUkwsIFN0cmluZyhmYWxsYmFja1N0YXJ0LCBwIC0gZmFsbGJhY2tTdGFydCkpOwotICAg
ICAgICAgICAgaWYgKCFmYWxsYmFja1VSTC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBmYWxsYmFja1VSTC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIo
KTsKLQotICAgICAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZl
c3RVUkwsIGZhbGxiYWNrVVJMKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgbWFuaWZlc3QuZmFsbGJhY2tVUkxzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihuYW1lc3Bh
Y2VVUkwsIGZhbGxiYWNrVVJMKSk7ICAgICAgICAgICAgCi0gICAgICAgIH0gZWxzZSAKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCShyZXZpc2lvbiAy
NjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3ku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogCiAKQEAgLTIxMiwyMiAr
MjEzLDIzIEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpkaWRSZWNlaXZlSGUKICAgICAv
LyBSRkMyNjE2LCBzZWN0aW9uIDQuMiBzcGVjaWZpZXMgdGhhdCBoZWFkZXJzIGFwcGVhcmluZyBt
dWx0aXBsZSB0aW1lcyBjYW4KICAgICAvLyBiZSBjb21iaW5lZCB3aXRoIGEgY29tbWEuIFdhbGsg
dGhlIGhlYWRlciBzdHJpbmcsIGFuZCBwYXJzZSBlYWNoIGNvbW1hCiAgICAgLy8gc2VwYXJhdGVk
IGNodW5rIGFzIGEgc2VwYXJhdGUgaGVhZGVyLgotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmlu
Z1ZpZXcoaGVhZGVyKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciog
YmVnaW4gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwot
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBiZWdpbiArIGhlYWRlci5sZW5ndGgoKTsKLSAgICB3aGls
ZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgc2tpcFVudGlsPFVDaGFyPihwb3NpdGlvbiwg
ZW5kLCAnLCcpOwotCi0gICAgICAgIC8vIGhlYWRlcjEsaGVhZGVyMiBPUiBoZWFkZXIxCi0gICAg
ICAgIC8vICAgICAgICBeICAgICAgICAgICAgICAgICAgXgotICAgICAgICBtX3BvbGljaWVzLmFw
cGVuZChDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpjcmVhdGUoKnRoaXMsIFN0
cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbiksIHR5cGUsIHBvbGljeUZyb20pKTsKLQotICAg
ICAgICAvLyBTa2lwIHRoZSBjb21tYSwgYW5kIGJlZ2luIHRoZSBuZXh0IGhlYWRlciBmcm9tIHRo
ZSBjdXJyZW50IHBvc2l0aW9uLgotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8ICpw
b3NpdGlvbiA9PSAnLCcpOwotICAgICAgICBza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVu
ZCwgJywnKTsKLSAgICAgICAgYmVnaW4gPSBwb3NpdGlvbjsKLSAgICB9CisgICAgV1RGOjpyZWFk
Q2hhcmFjdGVyc0ZvclBhcnNpbmcoaGVhZGVyLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7Cisg
ICAgICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgCisgICAg
ICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAg
ICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZmZXIsICcsJyk7CisKKyAgICAgICAgICAgIC8v
IGhlYWRlcjEsaGVhZGVyMiBPUiBoZWFkZXIxCisgICAgICAgICAgICAvLyAgICAgICAgXiAgICAg
ICAgICAgICAgICAgIF4KKyAgICAgICAgICAgIG1fcG9saWNpZXMuYXBwZW5kKENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmNyZWF0ZSgqdGhpcywgU3RyaW5nKGJlZ2luLCBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbiksIHR5cGUsIHBvbGljeUZyb20pKTsKKworICAg
ICAgICAgICAgLy8gU2tpcCB0aGUgY29tbWEsIGFuZCBiZWdpbiB0aGUgbmV4dCBoZWFkZXIgZnJv
bSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVChwYXJzaW5nQnVmZmVy
LmF0RW5kKCkgfHwgKnBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA9PSAnLCcpOworICAgICAgICAg
ICAgc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJywnKTsKKyAgICAgICAgICAgIGJlZ2luID0g
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICB9CisgICAgfSk7CisgICAgCiAKICAg
ICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICBhcHBseVBvbGljeVRvU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAJ
KHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIs
MTYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhcnNpbmdVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJTZWN1cml0eUNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQ
YXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNE
aXJlY3RpdmVOYW1lQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlw
ZSBjKQogewogICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJy0nOwog
fQogCi1zdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZVZhbHVl
Q2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJSVNwYWNlKGMp
IHx8IChjID49IDB4MjEgJiYgYyA8PSAweDdlKTsgLy8gV2hpdGVzcGFjZSArIFZDSEFSCiB9CkBA
IC0zMzMsMjI0ICszMzQsMjE4IEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDoKICAgICBpZiAocG9saWN5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhwb2xpY3kpLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3Qg
VUNoYXIqIGVuZCA9IHBvc2l0aW9uICsgcG9saWN5Lmxlbmd0aCgpOwotCi0gICAgd2hpbGUgKHBv
c2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBkaXJlY3RpdmVCZWdpbiA9IHBv
c2l0aW9uOwotICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0K
LSAgICAgICAgU3RyaW5nIG5hbWUsIHZhbHVlOwotICAgICAgICBpZiAocGFyc2VEaXJlY3RpdmUo
ZGlyZWN0aXZlQmVnaW4sIHBvc2l0aW9uLCBuYW1lLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgIEFT
U0VSVCghbmFtZS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgaWYgKHBvbGljeUZyb20gPT0gQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpJbmhlcml0ZWQpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkhUVFBFcXVpdk1ldGEpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2FuZGJveCkKLSAgICAgICAgICAgICAgICAgICAgfHwg
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6cmVwb3J0VVJJKQotICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFt
ZUFuY2VzdG9ycykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxp
ZERpcmVjdGl2ZUluSFRUUEVxdWl2TWV0YShuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcocG9saWN5LCBbJl0oYXV0
byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgYXV0byBkaXJlY3RpdmVCZWdpbiA9IHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIHNraXBVbnRpbChwYXJzaW5nQnVm
ZmVyLCAnOycpOworCisgICAgICAgICAgICBpZiAoYXV0byBkaXJlY3RpdmUgPSBwYXJzZURpcmVj
dGl2ZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgZGlyZWN0aXZlQmVnaW4sIHBhcnNpbmdCdWZmZXIu
cG9zaXRpb24oKSB9KSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghZGlyZWN0aXZlLT5uYW1l
LmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpJbmhlcml0ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChwb2xpY3lGcm9tID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SFRUUEVx
dWl2TWV0YSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaXJlY3RpdmUtPm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpz
YW5kYm94KQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaXJlY3RpdmUtPm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpy
ZXBvcnRVUkkpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGRpcmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6
OmZyYW1lQW5jZXN0b3JzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9wb2xpY3kucmVw
b3J0SW52YWxpZERpcmVjdGl2ZUluSFRUUEVxdWl2TWV0YShkaXJlY3RpdmUtPm5hbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpQb2xpY3lGcm9tOjpJbmhlcml0ZWRGb3JQbHVnaW5Eb2N1bWVudCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLT5uYW1lLCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cGx1Z2luVHlwZXMpCisgICAgICAg
ICAgICAgICAgICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpyZXBvcnRVUkkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIGlmIChwb2xpY3lGcm9tID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9s
aWN5RnJvbTo6SW5oZXJpdGVkRm9yUGx1Z2luRG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OnBsdWdpblR5cGVzKQotICAgICAgICAgICAgICAgICAgICAmJiAhZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6cmVwb3J0VVJJKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgYWRkRGlyZWN0aXZlKFdURk1vdmUoKmRpcmVjdGl2ZSkpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYWRkRGlyZWN0aXZlKG5hbWUsIHZhbHVlKTsKLSAgICAgICAgfQogCi0gICAg
ICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgKnBvc2l0aW9uID09ICc7Jyk7Ci0gICAgICAg
IHNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnOycpOwotICAgIH0KKyAgICAgICAg
ICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgKnBhcnNpbmdCdWZmZXIgPT0gJzsn
KTsKKyAgICAgICAgICAgIHNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICc7Jyk7CisgICAgICAg
IH0KKyAgICB9KTsKIH0KIAogLy8gZGlyZWN0aXZlICAgICAgICAgPSAqV1NQIFsgZGlyZWN0aXZl
LW5hbWUgWyBXU1AgZGlyZWN0aXZlLXZhbHVlIF0gXQogLy8gZGlyZWN0aXZlLW5hbWUgICAgPSAx
KiggQUxQSEEgLyBESUdJVCAvICItIiApCiAvLyBkaXJlY3RpdmUtdmFsdWUgICA9ICooIFdTUCAv
IDxWQ0hBUiBleGNlcHQgIjsiPiApCiAvLwotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0OjpwYXJzZURpcmVjdGl2ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFy
KiBlbmQsIFN0cmluZyYgbmFtZSwgU3RyaW5nJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGF1dG8gQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFy
c2VEaXJlY3RpdmUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVm
ZmVyKSAtPiBPcHRpb25hbDxQYXJzZWREaXJlY3RpdmU+CiB7Ci0gICAgQVNTRVJUKG5hbWUuaXNF
bXB0eSgpKTsKLSAgICBBU1NFUlQodmFsdWUuaXNFbXB0eSgpKTsKLQotICAgIGNvbnN0IFVDaGFy
KiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSVNwYWNlPihw
b3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSVNwYWNl
PihwYXJzaW5nQnVmZmVyKTsKIAogICAgIC8vIEVtcHR5IGRpcmVjdGl2ZSAoZS5nLiAiOzs7Iiku
IEV4aXQgZWFybHkuCi0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICBjb25zdCBVQ2hhciogbmFtZUJlZ2luID0gcG9zaXRpb247Ci0gICAg
c2tpcFdoaWxlPFVDaGFyLCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQp
OworICAgIGF1dG8gbmFtZUJlZ2luID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNr
aXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXI+KHBhcnNpbmdC
dWZmZXIpOwogCiAgICAgLy8gVGhlIGRpcmVjdGl2ZS1uYW1lIG11c3QgYmUgbm9uLWVtcHR5Lgot
ICAgIGlmIChuYW1lQmVnaW4gPT0gcG9zaXRpb24pIHsKLSAgICAgICAgc2tpcFdoaWxlPFVDaGFy
LCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICBtX3BvbGljeS5yZXBv
cnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVC
ZWdpbikpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG5hbWVCZWdpbiA9PSBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCkpIHsKKyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIG1fcG9saWN5LnJlcG9y
dFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKSAtIG5hbWVCZWdpbikpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IH0KIAotICAgIG5hbWUgPSBTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVCZWdpbik7
CisgICAgYXV0byBuYW1lID0gU3RyaW5nKG5hbWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpIC0gbmFtZUJlZ2luKTsKIAotICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVy
biBQYXJzZWREaXJlY3RpdmUgeyBXVEZNb3ZlKG5hbWUpLCB7IH0gfTsKIAotICAgIGlmICghc2tp
cEV4YWN0bHk8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCkpIHsKLSAgICAgICAg
c2tpcFdoaWxlPFVDaGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAg
ICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBw
b3NpdGlvbiAtIG5hbWVCZWdpbikpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFz
a2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpKSB7
CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNp
bmdCdWZmZXIpOworICAgICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShT
dHJpbmcobmFtZUJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBuYW1lQmVnaW4pKTsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBza2lwV2hpbGU8VUNo
YXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBjb25zdCBVQ2hhciog
dmFsdWVCZWdpbiA9IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNEaXJlY3RpdmVW
YWx1ZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byB2YWx1ZUJlZ2luID0gcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0Rp
cmVjdGl2ZVZhbHVlQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKIAotICAgIGlmIChwb3NpdGlv
biAhPSBlbmQpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZVZhbHVl
Q2hhcmFjdGVyKG5hbWUsIFN0cmluZyh2YWx1ZUJlZ2luLCBlbmQgLSB2YWx1ZUJlZ2luKSk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXBhcnNpbmdCdWZmZXIuYXRFbmQoKSkgewor
ICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIobmFt
ZSwgU3RyaW5nKHZhbHVlQmVnaW4sIHBhcnNpbmdCdWZmZXIuZW5kKCkgLSB2YWx1ZUJlZ2luKSk7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgLy8gVGhlIGRpcmVj
dGl2ZS12YWx1ZSBtYXkgYmUgZW1wdHkuCi0gICAgaWYgKHZhbHVlQmVnaW4gPT0gcG9zaXRpb24p
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh2YWx1ZUJlZ2luID09IHBhcnNpbmdCdWZm
ZXIucG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIFBhcnNlZERpcmVjdGl2ZSB7IFdURk1vdmUo
bmFtZSksIHsgfSB9OwogCi0gICAgdmFsdWUgPSBTdHJpbmcodmFsdWVCZWdpbiwgcG9zaXRpb24g
LSB2YWx1ZUJlZ2luKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBhdXRvIHZhbHVlID0gU3RyaW5n
KHZhbHVlQmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIHZhbHVlQmVnaW4pOworICAg
IHJldHVybiBQYXJzZWREaXJlY3RpdmUgeyBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHZhbHVlKSB9
OwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVw
b3J0VVJJKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBvcnRVUkkoUGFyc2VkRGly
ZWN0aXZlJiYgZGlyZWN0aXZlKQogewogICAgIGlmICghbV9yZXBvcnRVUklzLmlzRW1wdHkoKSkg
ewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CisgICAg
ICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShkaXJlY3RpdmUubmFtZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3
KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRp
b24gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIHZhbHVl
Lmxlbmd0aCgpOworICAgIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKGRpcmVjdGl2ZS52
YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJU
eXBlID0gdHlwZW5hbWUgZGVjbHR5cGUocGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7CiAK
LSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBp
c0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOworICAgICAgICBhdXRvIGJlZ2luID0gcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgICAgIGNvbnN0IFVDaGFyKiB1
cmxCZWdpbiA9IHBvc2l0aW9uOwotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlT
cGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgICAgICBhdXRvIHVybEJlZ2luID0gcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAgaWYgKHVybEJlZ2lu
IDwgcG9zaXRpb24pCi0gICAgICAgICAgICBtX3JlcG9ydFVSSXMuYXBwZW5kKHZhbHVlLnN1YnN0
cmluZyh1cmxCZWdpbiAtIGNoYXJhY3RlcnMsIHBvc2l0aW9uIC0gdXJsQmVnaW4pKTsKLSAgICB9
CisgICAgICAgICAgICBpZiAodXJsQmVnaW4gPCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkpCisg
ICAgICAgICAgICAgICAgbV9yZXBvcnRVUklzLmFwcGVuZChkaXJlY3RpdmUudmFsdWUuc3Vic3Ry
aW5nKHVybEJlZ2luIC0gYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIHVybEJlZ2lu
KSk7CisgICAgICAgIH0KKyAgICB9KTsKIH0KIAogCiB0ZW1wbGF0ZTxjbGFzcyBDU1BEaXJlY3Rp
dmVUeXBlPgotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRDU1BE
aXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBzdGQ6OnVu
aXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlwZT4mIGRpcmVjdGl2ZSkKK3ZvaWQgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0Q1NQRGlyZWN0aXZlKFBhcnNlZERpcmVjdGl2ZSYm
IGRpcmVjdGl2ZSwgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZVR5cGU+JiBleGlzdGluZ0Rp
cmVjdGl2ZSkKIHsKLSAgICBpZiAoZGlyZWN0aXZlKSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9y
dER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICBpZiAoZXhpc3RpbmdEaXJlY3RpdmUpIHsK
KyAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZS5uYW1l
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBkaXJlY3RpdmUgPSBtYWtlVW5pcXVlPENT
UERpcmVjdGl2ZVR5cGU+KCp0aGlzLCBuYW1lLCB2YWx1ZSk7CisgICAgZXhpc3RpbmdEaXJlY3Rp
dmUgPSBtYWtlVW5pcXVlPENTUERpcmVjdGl2ZVR5cGU+KCp0aGlzLCBXVEZNb3ZlKGRpcmVjdGl2
ZS5uYW1lKSwgV1RGTW92ZShkaXJlY3RpdmUudmFsdWUpKTsKIH0KIAotdm9pZCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphcHBseVNhbmRib3hQb2xpY3koY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHNhbmRib3hQb2xpY3kpCit2b2lkIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeShQYXJzZWREaXJlY3RpdmUm
JiBkaXJlY3RpdmUpCiB7CiAgICAgaWYgKG1fcmVwb3J0T25seSkgewotICAgICAgICBtX3BvbGlj
eS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShuYW1lKTsKKyAgICAgICAg
bV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUoZGlyZWN0aXZl
Lm5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX2hhdmVTYW5kYm94UG9s
aWN5KSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsK
KyAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZS5uYW1l
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2hhdmVTYW5kYm94UG9saWN5ID0gdHJ1
ZTsKICAgICBTdHJpbmcgaW52YWxpZFRva2VuczsKLSAgICBtX3BvbGljeS5lbmZvcmNlU2FuZGJv
eEZsYWdzKFNlY3VyaXR5Q29udGV4dDo6cGFyc2VTYW5kYm94UG9saWN5KHNhbmRib3hQb2xpY3ks
IGludmFsaWRUb2tlbnMpKTsKKyAgICBtX3BvbGljeS5lbmZvcmNlU2FuZGJveEZsYWdzKFNlY3Vy
aXR5Q29udGV4dDo6cGFyc2VTYW5kYm94UG9saWN5KFdURk1vdmUoZGlyZWN0aXZlLnZhbHVlKSwg
aW52YWxpZFRva2VucykpOwogICAgIGlmICghaW52YWxpZFRva2Vucy5pc051bGwoKSkKICAgICAg
ICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFNhbmRib3hGbGFncyhpbnZhbGlkVG9rZW5zKTsKIH0K
IAotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRVcGdyYWRlSW5z
ZWN1cmVSZXF1ZXN0cyhjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZUxpc3Q6OnNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKFBhcnNlZERpcmVj
dGl2ZSYmIGRpcmVjdGl2ZSkKIHsKICAgICBpZiAobV9yZXBvcnRPbmx5KSB7Ci0gICAgICAgIG1f
cG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKG5hbWUpOworICAg
ICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShXVEZN
b3ZlKGRpcmVjdGl2ZS5uYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1f
dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGlj
YXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJl
Y3RpdmUoV1RGTW92ZShkaXJlY3RpdmUubmFtZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIG1fdXBncmFkZUluc2VjdXJlUmVxdWVzdHMgPSB0cnVlOwogICAgIG1fcG9saWN5LnNldFVw
Z3JhZGVJbnNlY3VyZVJlcXVlc3RzKHRydWUpOwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZUxpc3Q6OnNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChjb25zdCBT
dHJpbmcmIG5hbWUpCit2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNl
dEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChQYXJzZWREaXJlY3RpdmUmJiBkaXJlY3RpdmUp
CiB7CiAgICAgaWYgKG1faGFzQmxvY2tBbGxNaXhlZENvbnRlbnREaXJlY3RpdmUpIHsKLSAgICAg
ICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAgICBtX3Bv
bGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoV1RGTW92ZShkaXJlY3RpdmUubmFtZSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1faGFzQmxvY2tBbGxNaXhlZENvbnRlbnREaXJl
Y3RpdmUgPSB0cnVlOwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxp
c3Q6OmFkZERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFkZERpcmVjdGl2ZShQ
YXJzZWREaXJlY3RpdmUmJiBkaXJlY3RpdmUpCiB7Ci0gICAgQVNTRVJUKCFuYW1lLmlzRW1wdHko
KSk7CisgICAgQVNTRVJUKCFkaXJlY3RpdmUubmFtZS5pc0VtcHR5KCkpOwogCi0gICAgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TmFtZXM6OmRlZmF1bHRTcmMpKSB7Ci0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9kZWZhdWx0U3Jj
KTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmRlZmF1bHRTcmMpKSB7CisgICAgICAgIHNl
dENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihX
VEZNb3ZlKGRpcmVjdGl2ZSksIG1fZGVmYXVsdFNyYyk7CiAgICAgICAgIG1fcG9saWN5LmFkZEhh
c2hBbGdvcml0aG1zRm9ySW5saW5lU2NyaXB0cyhtX2RlZmF1bHRTcmMtPmhhc2hBbGdvcml0aG1z
VXNlZCgpKTsKICAgICAgICAgbV9wb2xpY3kuYWRkSGFzaEFsZ29yaXRobXNGb3JJbmxpbmVTdHls
ZXNoZWV0cyhtX2RlZmF1bHRTcmMtPmhhc2hBbGdvcml0aG1zVXNlZCgpKTsKLSAgICB9IGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OnNjcmlwdFNyYykpIHsKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX3Njcmlw
dFNyYyk7CisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5u
YW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2NyaXB0U3JjKSkgewor
ICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERp
cmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX3NjcmlwdFNyYyk7CiAgICAgICAgIG1fcG9s
aWN5LmFkZEhhc2hBbGdvcml0aG1zRm9ySW5saW5lU2NyaXB0cyhtX3NjcmlwdFNyYy0+aGFzaEFs
Z29yaXRobXNVc2VkKCkpOwotICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShu
YW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c3R5bGVTcmMpKSB7Ci0g
ICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGly
ZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9zdHlsZVNyYyk7CisgICAgfSBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6c3R5bGVTcmMpKSB7CisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1f
c3R5bGVTcmMpOwogICAgICAgICBtX3BvbGljeS5hZGRIYXNoQWxnb3JpdGhtc0ZvcklubGluZVN0
eWxlc2hlZXRzKG1fc3R5bGVTcmMtPmhhc2hBbGdvcml0aG1zVXNlZCgpKTsKLSAgICB9IGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6Om9iamVjdFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9vYmplY3RT
cmMpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1lU3JjKSkgeworICAgIH0gZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTmFtZXM6Om9iamVjdFNyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2
ZSksIG1fb2JqZWN0U3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRp
cmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJhbWVT
cmMpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBMb2cgdG8gY29uc29sZSAiVGhlIGZyYW1lLXNyYyBk
aXJlY3RpdmUgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBjaGlsZC1zcmMgZGlyZWN0aXZlIGluc3Rl
YWQuIgogICAgICAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTU3NzM+LgotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZnJhbWVTcmMpOwotICAgIH0g
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6aW1nU3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2ltZ1Ny
Yyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9udFNyYykpCi0gICAgICAgIHNldENTUERpcmVj
dGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1
ZSwgbV9mb250U3JjKTsKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9mcmFtZVNyYyk7
CisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6aW1nU3JjKSkKKyAgICAgICAgc2V0
Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdU
Rk1vdmUoZGlyZWN0aXZlKSwgbV9pbWdTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjpmb250U3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9mb250U3JjKTsK
ICNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCi0gICAgZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
bWFuaWZlc3RTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fbWFuaWZlc3RTcmMpOworICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjptYW5pZmVzdFNyYykpCisgICAgICAgIHNldENT
UERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZN
b3ZlKGRpcmVjdGl2ZSksIG1fbWFuaWZlc3RTcmMpOwogI2VuZGlmCi0gICAgZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVO
YW1lczo6bWVkaWFTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fbWVkaWFTcmMpOwotICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTmFtZXM6OmNvbm5lY3RTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1f
Y29ubmVjdFNyYyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Y2hpbGRTcmMpKQotICAgICAgICBz
ZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4o
bmFtZSwgdmFsdWUsIG1fY2hpbGRTcmMpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvcm1BY3Rp
b24pKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZm9ybUFjdGlvbik7Ci0gICAgZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6YmFzZVVSSSkpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9iYXNlVVJJKTsKLSAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKKyAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVOYW1lczo6bWVkaWFTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBt
X21lZGlhU3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2
ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Y29ubmVjdFNyYykp
CisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fY29ubmVjdFNyYyk7CisgICAgZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTmFtZXM6OmNoaWxkU3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZl
PENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0
aXZlKSwgbV9jaGlsZFNyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShk
aXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvcm1B
Y3Rpb24pKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2Zvcm1BY3Rpb24pOworICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpiYXNlVVJJKSkKKyAgICAgICAgc2V0Q1NQRGly
ZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUo
ZGlyZWN0aXZlKSwgbV9iYXNlVVJJKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
ZnJhbWVBbmNlc3RvcnMpKSB7CiAgICAgICAgIGlmIChtX3JlcG9ydE9ubHkpIHsKLSAgICAgICAg
ICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKG5hbWUp
OworICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25s
eU1vZGUoZGlyZWN0aXZlLm5hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGly
ZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9mcmFtZUFuY2VzdG9ycyk7Ci0gICAgfSBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZU5hbWVzOjpwbHVnaW5UeXBlcykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2Vj
dXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX3BsdWdpblR5cGVz
KTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzYW5kYm94KSkKLSAgICAgICAgYXBwbHlTYW5kYm94
UG9saWN5KG5hbWUsIHZhbHVlKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpyZXBvcnRVUkkpKQot
ICAgICAgICBwYXJzZVJlcG9ydFVSSShuYW1lLCB2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQotICAgICAgICBzZXRVcGdyYWRlSW5zZWN1cmVS
ZXF1ZXN0cyhuYW1lKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUs
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpibG9ja0FsbE1peGVkQ29udGVu
dCkpCi0gICAgICAgIHNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChuYW1lKTsKKyAgICAg
ICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3Rp
dmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9mcmFtZUFuY2VzdG9ycyk7CisgICAgfSBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVOYW1lczo6cGx1Z2luVHlwZXMpKQorICAgICAgICBzZXRDU1BEaXJlY3Rp
dmU8Q29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVj
dGl2ZSksIG1fcGx1Z2luVHlwZXMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpz
YW5kYm94KSkKKyAgICAgICAgYXBwbHlTYW5kYm94UG9saWN5KFdURk1vdmUoZGlyZWN0aXZlKSk7
CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCisgICAgICAgIHBh
cnNlUmVwb3J0VVJJKFdURk1vdmUoZGlyZWN0aXZlKSk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTmFtZXM6OnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKSkKKyAgICAgICAgc2V0VXBncmFkZUlu
c2VjdXJlUmVxdWVzdHMoV1RGTW92ZShkaXJlY3RpdmUpKTsKKyAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6YmxvY2tBbGxNaXhlZENvbnRlbnQpKQorICAgICAgICBzZXRCbG9ja0FsbE1p
eGVkQ29udGVudEVuYWJsZWQoV1RGTW92ZShkaXJlY3RpdmUpKTsKICAgICBlbHNlCi0gICAgICAg
IG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKG5hbWUpOworICAgICAgICBtX3Bv
bGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODksMTYgKzg5
LDE5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmLCBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb20pOwogCi0gICAgYm9vbCBwYXJzZURpcmVj
dGl2ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgbmFtZSwg
U3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBwYXJzZVJlcG9ydFVSSShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgcGFyc2VQbHVnaW5UeXBlcyhjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgYWRkRGlyZWN0
aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBh
cHBseVNhbmRib3hQb2xpY3koY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHNhbmRi
b3hQb2xpY3kpOwotICAgIHZvaWQgc2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMoY29uc3QgU3Ry
aW5nJiBuYW1lKTsKLSAgICB2b2lkIHNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChjb25z
dCBTdHJpbmcmIG5hbWUpOworICAgIHN0cnVjdCBQYXJzZWREaXJlY3RpdmUgeworICAgICAgICBT
dHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgIH07CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8UGFyc2VkRGlyZWN0aXZlPiBwYXJzZURp
cmVjdGl2ZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+KTsKKyAgICB2b2lkIHBh
cnNlUmVwb3J0VVJJKFBhcnNlZERpcmVjdGl2ZSYmKTsKKyAgICB2b2lkIGFkZERpcmVjdGl2ZShQ
YXJzZWREaXJlY3RpdmUmJik7CisgICAgdm9pZCBhcHBseVNhbmRib3hQb2xpY3koUGFyc2VkRGly
ZWN0aXZlJiYpOworICAgIHZvaWQgc2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMoUGFyc2VkRGly
ZWN0aXZlJiYpOworICAgIHZvaWQgc2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKFBhcnNl
ZERpcmVjdGl2ZSYmKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBDU1BEaXJlY3RpdmVUeXBlPgot
ICAgIHZvaWQgc2V0Q1NQRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZVR5cGU+Jik7CisgICAgdm9pZCBz
ZXRDU1BEaXJlY3RpdmUoUGFyc2VkRGlyZWN0aXZlJiYsIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJl
Y3RpdmVUeXBlPiYpOwogCiAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVj
dGl2ZSogb3BlcmF0aXZlRGlyZWN0aXZlKENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3RE
aXJlY3RpdmUqKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVu
dFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3Rp
dmUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxMCArMzEsMTIgQEAKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0LmgiCiAjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNNZWRpYVR5cGVDaGFy
YWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMg
Ym9vbCBpc01lZGlhVHlwZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJu
ICFpc0FTQ0lJU3BhY2UoYykgJiYgYyAhPSAnLyc7CiB9CkBAIC01Miw2MiArNTQsNjEgQEAgYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlYwogCiB2b2lkIENvbnRlbnRTZWN1
cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
IHsKLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogYmVnaW4gPSBjaGFyYWN0ZXJzOwotICAgIGNv
bnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBiZWdp
biArIHZhbHVlLmxlbmd0aCgpOwotCiAgICAgLy8gJ3BsdWdpbi10eXBlcyBfX19fOycgT1IgJ3Bs
dWdpbi10eXBlczsnCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBkaXJlY3Rp
dmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKHZhbHVlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAg
ICAvLyBfX19fXyBPUiBfX19fX21pbWUxL21pbWUxCi0gICAgICAgIC8vIF4gICAgICAgIF4KLSAg
ICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAg
ICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vIF4KLSAgICAgICAgYmVnaW4g
PSBwb3NpdGlvbjsKLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNNZWRpYVR5cGVD
aGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIs
IGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJlY3RpdmVM
aXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9z
aXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgc2tpcFdoaWxlPFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7
CisgICAgV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIHBhcnNp
bmdCdWZmZXIpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0
eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBlOwogCi0gICAgICAgIC8vIG1pbWUxL21p
bWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vICAgICAgXgotICAgICAgICBpZiAoIXNraXBFeGFj
dGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpKSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8
VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJl
Y3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdp
biwgcG9zaXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
KyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7
CisgICAgICAgICAgICAvLyBfX19fXyBPUiBfX19fX21pbWUxL21pbWUxCisgICAgICAgICAgICAv
LyBeICAgICAgICBeCisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJ
SVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0
RW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBtaW1lMS9t
aW1lMSBtaW1lMi9taW1lMgorICAgICAgICAgICAgLy8gXgorICAgICAgICAgICAgYXV0byBiZWdp
biA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIGlmICghc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpKSB7
CisgICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFj
ZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGlj
eSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIu
cG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVD
aGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOworCisgICAgICAgICAgICAvLyBtaW1lMS9taW1lMSBt
aW1lMi9taW1lMgorICAgICAgICAgICAgLy8gICAgICBeCisgICAgICAgICAgICBpZiAoIXNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJykpIHsKKyAgICAgICAgICAg
ICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52
YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0g
YmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKKyAgICAgICAgICAgIC8vICAgICAg
IF4KKyAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5
cGVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAg
ICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBl
cyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBza2lwV2hp
bGU8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwor
CisgICAgICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMiBPUiBtaW1lMS9taW1lMSAg
T1IgbWltZTEvbWltZTEvZXJyb3IKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgXiAgICAgICAg
ICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgIF4KKyAgICAgICAgICAgIGlmIChwYXJz
aW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc05vdEFTQ0lJU3BhY2UoKnBh
cnNpbmdCdWZmZXIpKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICAgICAgZGlyZWN0
aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4s
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BsdWdpblR5cGVzLmFkZChTdHJp
bmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CiAKLSAgICAgICAg
Ly8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8gICAgICAgXgotICAgICAgICBp
ZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVu
ZCkpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3Np
dGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJ
bnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5k
KCkgfHwgaXNBU0NJSVNwYWNlKCpwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkpKTsKICAgICAgICAg
fQotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlv
biwgZW5kKTsKLQotICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMiBPUiBtaW1lMS9t
aW1lMSAgT1IgbWltZTEvbWltZTEvZXJyb3IKLSAgICAgICAgLy8gICAgICAgICAgICBeICAgICAg
ICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgXgotICAgICAgICBpZiAocG9zaXRp
b24gPCBlbmQgJiYgaXNOb3RBU0NJSVNwYWNlKCpwb3NpdGlvbikpIHsKLSAgICAgICAgICAgIHNr
aXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAg
ICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3Ry
aW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICBtX3BsdWdpblR5cGVzLmFkZChTdHJpbmcoYmVnaW4sIHBvc2l0aW9u
IC0gYmVnaW4pKTsKLQotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8IGlzQVNDSUlT
cGFjZSgqcG9zaXRpb24pKTsKLSAgICB9CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNl
NjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNTYsNDggKzU3LDQxIEBAIHN0YXRpYyBib29sIGlzQ1NQRGly
ZWN0aXZlTmFtZShjb25zdCBTdHIKICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShu
YW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c3R5bGVTcmMpOwogfQog
Ci1zdGF0aWMgYm9vbCBpc1NvdXJjZUNoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNTb3VyY2VDaGFyYWN0ZXIoQ2hhcmFjdGVy
VHlwZSBjKQogewogICAgIHJldHVybiAhaXNBU0NJSVNwYWNlKGMpOwogfQogCi1zdGF0aWMgYm9v
bCBpc0hvc3RDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyBib29sIGlzSG9zdENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAg
cmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnLSc7CiB9CiAKLXN0YXRpYyBi
b29sIGlzUGF0aENvbXBvbmVudENoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyKENoYXJh
Y3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gYyAhPSAnPycgJiYgYyAhPSAnIyc7CiB9CiAKLXN0
YXRpYyBib29sIGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1NjaGVtZUNvbnRpbnVhdGlv
bkNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51
bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLScgfHwgYyA9PSAnLic7CiB9CiAKLXN0YXRp
YyBib29sIGlzTm90Q29sb25PclNsYXNoKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc05vdENvbG9uT3JTbGFzaChDaGFyYWN0ZXJUeXBlIGMp
CiB7CiAgICAgcmV0dXJuIGMgIT0gJzonICYmIGMgIT0gJy8nOwogfQogCi1zdGF0aWMgYm9vbCBp
c1NvdXJjZUxpc3ROb25lKGNvbnN0IFN0cmluZyYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1NvdXJjZUxpc3ROb25lKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBhdXRvIGNoYXJhY3Rl
cnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25z
dCBVQ2hhciogYmVnaW4gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjaGFy
YWN0ZXJzICsgdmFsdWUubGVuZ3RoKCk7Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3Bh
Y2U+KGJlZ2luLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3Bh
Y2U+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47
Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc1NvdXJjZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7
Ci0gICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShiZWdpbiwgcG9zaXRpb24g
LSBiZWdpbiwgIidub25lJyIpKQorICAgIGlmICghc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2Fz
ZShwYXJzaW5nQnVmZmVyLCAiJ25vbmUnIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICBpZiAo
cG9zaXRpb24gIT0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc2tpcFdoaWxlPENo
YXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAgICAgCi0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHBhcnNpbmdCdWZmZXIuYXRFbmQoKTsKIH0KIAogQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dChjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIHBvbGljeSwgY29uc3QgU3RyaW5nJiBkaXJl
Y3RpdmVOYW1lKQpAQCAtMTA4LDEyICsxMDIsMTQgQEAgQ29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdDo6Q29udGVudAogCiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6
OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKGlzU291cmNlTGlzdE5vbmUo
dmFsdWUpKSB7Ci0gICAgICAgIG1faXNOb25lID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKLSAgICBwYXJzZShjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVu
Z3RoKCkpOworICAgIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0
byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIGlmIChpc1NvdXJjZUxpc3ROb25lKHBhcnNpbmdC
dWZmZXIpKSB7CisgICAgICAgICAgICBtX2lzTm9uZSA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBwYXJzZShwYXJzaW5nQnVmZmVyKTsKKyAgICB9KTsK
IH0KIAogYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Ojppc1Byb3RvY29sQWxs
b3dlZEJ5U3Rhcihjb25zdCBVUkwmIHVybCkgY29uc3QKQEAgLTE2MCwzMCArMTU2LDI4IEBAIGJv
b2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6bWEKIC8vIHNvdXJjZS1saXN0ICAg
ICAgID0gKldTUCBbIHNvdXJjZSAqKCAxKldTUCBzb3VyY2UgKSAqV1NQIF0KIC8vICAgICAgICAg
ICAgICAgICAgIC8gKldTUCAiJ25vbmUnIiAqV1NQCiAvLwotdm9pZCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0OjpwYXJzZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBl
bmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsK
LQotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIs
IGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBl
bmQpCisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7
CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdC
dWZmZXIpOworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGNvbnN0IFVDaGFyKiBiZWdpblNvdXJjZSA9IHBvc2l0aW9uOwot
ICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzU291cmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5k
KTsKKyAgICAgICAgYXV0byBiZWdpblNvdXJjZSA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsK
KyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzU291cmNlQ2hhcmFjdGVyPihwYXJz
aW5nQnVmZmVyKTsKIAogICAgICAgICBTdHJpbmcgc2NoZW1lLCBob3N0LCBwYXRoOwogICAgICAg
ICBPcHRpb25hbDx1aW50MTZfdD4gcG9ydDsKICAgICAgICAgYm9vbCBob3N0SGFzV2lsZGNhcmQg
PSBmYWxzZTsKICAgICAgICAgYm9vbCBwb3J0SGFzV2lsZGNhcmQgPSBmYWxzZTsKIAotICAgICAg
ICBpZiAocGFyc2VOb25jZVNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24pKQorICAgICAgICBp
ZiAocGFyc2VOb25jZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5Tb3VyY2UsIHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKSB9KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGlmIChwYXJzZUhhc2hTb3VyY2UoYmVnaW5Tb3VyY2UsIHBvc2l0aW9uKSkKKyAgICAgICAg
aWYgKHBhcnNlSGFzaFNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5Tb3VyY2UsIHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKSB9KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGlmIChwYXJzZVNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24sIHNjaGVtZSwgaG9zdCwg
cG9ydCwgcGF0aCwgaG9zdEhhc1dpbGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKSB7CisgICAgICAg
IGlmIChwYXJzZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5Tb3VyY2UsIHBhcnNp
bmdCdWZmZXIucG9zaXRpb24oKSB9LCBzY2hlbWUsIGhvc3QsIHBvcnQsIHBhdGgsIGhvc3RIYXNX
aWxkY2FyZCwgcG9ydEhhc1dpbGRjYXJkKSkgewogICAgICAgICAgICAgLy8gV2lsZGNhcmQgaG9z
dHMgYW5kIGtleXdvcmQgc291cmNlcyAoJ3NlbGYnLCAndW5zYWZlLWlubGluZScsCiAgICAgICAg
ICAgICAvLyBldGMuKSBhcmVuJ3Qgc3RvcmVkIGluIG1fbGlzdCwgYnV0IGFzIGF0dHJpYnV0ZXMg
b24gdGhlIHNvdXJjZQogICAgICAgICAgICAgLy8gbGlzdCBpdHNlbGYuCkBAIC0xOTMsOSArMTg3
LDkgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogICAgICAgICAg
ICAgICAgIG1fcG9saWN5LnJlcG9ydERpcmVjdGl2ZUFzU291cmNlRXhwcmVzc2lvbihtX2RpcmVj
dGl2ZU5hbWUsIGhvc3QpOwogICAgICAgICAgICAgbV9saXN0LmFwcGVuZChDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2UobV9wb2xpY3ksIHNjaGVtZSwgaG9zdCwgcG9ydCwgcGF0aCwgaG9zdEhh
c1dpbGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkU291cmNlRXhwcmVzc2lvbihtX2RpcmVjdGl2ZU5hbWUs
IFN0cmluZyhiZWdpblNvdXJjZSwgcG9zaXRpb24gLSBiZWdpblNvdXJjZSkpOworICAgICAgICAg
ICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFNvdXJjZUV4cHJlc3Npb24obV9kaXJlY3RpdmVOYW1l
LCBTdHJpbmcoYmVnaW5Tb3VyY2UsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luU291
cmNlKSk7CiAKLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCBpc0FTQ0lJU3BhY2Uo
KnBvc2l0aW9uKSk7CisgICAgICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgaXNB
U0NJSVNwYWNlKCpwYXJzaW5nQnVmZmVyKSk7CiAgICAgfQogICAgIAogICAgIG1fbGlzdC5zaHJp
bmtUb0ZpdCgpOwpAQCAtMjA1LDEwMyArMTk5LDEwMyBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhCiAvLyAgICAgICAgICAgICAgICAgICAvICggWyBzY2hlbWUgIjov
LyIgXSBob3N0IFsgcG9ydCBdIFsgcGF0aCBdICkKIC8vICAgICAgICAgICAgICAgICAgIC8gIidz
ZWxmJyIKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU291
cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUs
IFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBTdHJpbmcmIHBhdGgsIGJv
b2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKQordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
OjpwYXJzZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdC
dWZmZXIsIFN0cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIE9wdGlvbmFsPHVpbnQxNl90PiYg
cG9ydCwgU3RyaW5nJiBwYXRoLCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBvcnRIYXNX
aWxkY2FyZCkKIHsKLSAgICBpZiAoYmVnaW4gPT0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVmZmVy
LmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICInbm9uZSciKSkKKyAgICBpZiAo
c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAiJ25vbmUnIikpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbmQgLSBiZWdpbiA9PSAxICYmICpiZWdp
biA9PSAnKicpIHsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA9PSAx
ICYmICpwYXJzaW5nQnVmZmVyID09ICcqJykgewogICAgICAgICBtX2FsbG93U3RhciA9IHRydWU7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICInc2VsZiciKSkgeworICAgIGlmIChz
a2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICInc2VsZiciKSkgewog
ICAgICAgICBtX2FsbG93U2VsZiA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVn
aW4sICIndW5zYWZlLWlubGluZSciKSkgeworICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVND
SUlDYXNlKHBhcnNpbmdCdWZmZXIsICIndW5zYWZlLWlubGluZSciKSkgewogICAgICAgICBtX2Fs
bG93SW5saW5lID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIid1bnNh
ZmUtZXZhbCciKSkgeworICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNp
bmdCdWZmZXIsICIndW5zYWZlLWV2YWwnIikpIHsKICAgICAgICAgbV9hbGxvd0V2YWwgPSB0cnVl
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRp
b24gPSBiZWdpbjsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5Ib3N0ID0gYmVnaW47Ci0gICAgY29u
c3QgVUNoYXIqIGJlZ2luUGF0aCA9IGVuZDsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5Qb3J0ID0g
bnVsbHB0cjsKKyAgICBhdXRvIGJlZ2luID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAg
IGF1dG8gYmVnaW5Ib3N0ID0gYmVnaW47CisgICAgYXV0byBiZWdpblBhdGggPSBwYXJzaW5nQnVm
ZmVyLmVuZCgpOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luUG9ydCA9IG51bGxwdHI7
CiAKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90Q29sb25PclNsYXNoPihwb3NpdGlvbiwgZW5k
KTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RDb2xvbk9yU2xhc2g+KHBhcnNp
bmdCdWZmZXIpOwogCi0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkgeworICAgIGlmIChwYXJzaW5n
QnVmZmVyLmF0RW5kKCkpIHsKICAgICAgICAgLy8gaG9zdAogICAgICAgICAvLyAgICAgXgotICAg
ICAgICByZXR1cm4gcGFyc2VIb3N0KGJlZ2luSG9zdCwgcG9zaXRpb24sIGhvc3QsIGhvc3RIYXNX
aWxkY2FyZCk7CisgICAgICAgIHJldHVybiBwYXJzZUhvc3QoU3RyaW5nUGFyc2luZ0J1ZmZlciB7
IGJlZ2luSG9zdCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIH0sIGhvc3QsIGhvc3RIYXNXaWxk
Y2FyZCk7CiAgICAgfQogCi0gICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSAn
LycpIHsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYg
KnBhcnNpbmdCdWZmZXIgPT0gJy8nKSB7CiAgICAgICAgIC8vIGhvc3QvcGF0aCB8fCBob3N0LyB8
fCAvCiAgICAgICAgIC8vICAgICBeICAgICAgICAgICAgXiAgICBeCi0gICAgICAgIHJldHVybiBw
YXJzZUhvc3QoYmVnaW5Ib3N0LCBwb3NpdGlvbiwgaG9zdCwgaG9zdEhhc1dpbGRjYXJkKSAmJiBw
YXJzZVBhdGgocG9zaXRpb24sIGVuZCwgcGF0aCk7CisgICAgICAgIHJldHVybiBwYXJzZUhvc3Qo
U3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luSG9zdCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigp
IH0sIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkgJiYgcGFyc2VQYXRoKHBhcnNpbmdCdWZmZXIsIHBh
dGgpOwogICAgIH0KIAotICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gJzon
KSB7Ci0gICAgICAgIGlmIChlbmQgLSBwb3NpdGlvbiA9PSAxKSB7CisgICAgaWYgKHBhcnNpbmdC
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5nQnVmZmVyID09ICc6Jykg
eworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA9PSAxKSB7CiAg
ICAgICAgICAgICAvLyBzY2hlbWU6CiAgICAgICAgICAgICAvLyAgICAgICBeCi0gICAgICAgICAg
ICByZXR1cm4gcGFyc2VTY2hlbWUoYmVnaW4sIHBvc2l0aW9uLCBzY2hlbWUpOworICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlU2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpbiwgcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpIH0sIHNjaGVtZSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
cG9zaXRpb25bMV0gPT0gJy8nKSB7CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzFdID09ICcv
JykgewogICAgICAgICAgICAgLy8gc2NoZW1lOi8vaG9zdCB8fCBzY2hlbWU6Ly8KICAgICAgICAg
ICAgIC8vICAgICAgIF4gICAgICAgICAgICAgICAgXgotICAgICAgICAgICAgaWYgKCFwYXJzZVNj
aGVtZShiZWdpbiwgcG9zaXRpb24sIHNjaGVtZSkKLSAgICAgICAgICAgICAgICB8fCAhc2tpcEV4
YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc6JykKLSAgICAgICAgICAgICAgICB8fCAhc2tp
cEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJykKLSAgICAgICAgICAgICAgICB8fCAh
c2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJykpCisgICAgICAgICAgICBpZiAo
IXBhcnNlU2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpbiwgcGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpIH0sIHNjaGVtZSkKKyAgICAgICAgICAgICAgICB8fCAhc2tpcEV4YWN0bHk8Q2hh
cmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJzonKQorICAgICAgICAgICAgICAgIHx8ICFza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnLycpCisgICAgICAgICAgICAg
ICAgfHwgIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJykpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09
IGVuZCkKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYmVnaW5Ib3N0ID0gcG9zaXRpb247Ci0g
ICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90Q29sb25PclNsYXNoPihwb3NpdGlvbiwg
ZW5kKTsKKyAgICAgICAgICAgIGJlZ2luSG9zdCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsK
KyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdENvbG9uT3JTbGFzaD4o
cGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocG9zaXRpb24gPCBlbmQg
JiYgKnBvc2l0aW9uID09ICc6JykgeworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJzonKSB7CiAgICAgICAgICAg
ICAvLyBob3N0OnBvcnQgfHwgc2NoZW1lOi8vaG9zdDpwb3J0CiAgICAgICAgICAgICAvLyAgICAg
XiAgICAgICAgICAgICAgICAgICAgIF4KLSAgICAgICAgICAgIGJlZ2luUG9ydCA9IHBvc2l0aW9u
OwotICAgICAgICAgICAgc2tpcFVudGlsPFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpOworICAg
ICAgICAgICAgYmVnaW5Qb3J0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAg
ICAgc2tpcFVudGlsPENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJyk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICcvJykg
eworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFy
c2luZ0J1ZmZlciA9PSAnLycpIHsKICAgICAgICAgLy8gc2NoZW1lOi8vaG9zdC9wYXRoIHx8IHNj
aGVtZTovL2hvc3Q6cG9ydC9wYXRoCiAgICAgICAgIC8vICAgICAgICAgICAgICBeICAgICAgICAg
ICAgICAgICAgICAgICAgICBeCi0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBiZWdpbkhvc3QpCisg
ICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gYmVnaW5Ib3N0KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGJlZ2luUGF0aCA9IHBvc2l0aW9uOworICAg
ICAgICBiZWdpblBhdGggPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAgICAgfQogCi0gICAg
aWYgKCFwYXJzZUhvc3QoYmVnaW5Ib3N0LCBiZWdpblBvcnQgPyBiZWdpblBvcnQgOiBiZWdpblBh
dGgsIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkpCisgICAgaWYgKCFwYXJzZUhvc3QoU3RyaW5nUGFy
c2luZ0J1ZmZlciB7IGJlZ2luSG9zdCwgYmVnaW5Qb3J0ID8gYmVnaW5Qb3J0IDogYmVnaW5QYXRo
IH0sIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICghYmVnaW5Qb3J0KQogICAgICAgICBwb3J0ID0gV1RGOjpudWxsb3B0OwogICAgIGVsc2Ug
ewotICAgICAgICBpZiAoIXBhcnNlUG9ydChiZWdpblBvcnQsIGJlZ2luUGF0aCwgcG9ydCwgcG9y
dEhhc1dpbGRjYXJkKSkKKyAgICAgICAgaWYgKCFwYXJzZVBvcnQoU3RyaW5nUGFyc2luZ0J1ZmZl
ciB7IGJlZ2luUG9ydCwgYmVnaW5QYXRoIH0sIHBvcnQsIHBvcnRIYXNXaWxkY2FyZCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKGJlZ2luUGF0aCAhPSBlbmQp
IHsKLSAgICAgICAgaWYgKCFwYXJzZVBhdGgoYmVnaW5QYXRoLCBlbmQsIHBhdGgpKQorICAgIGlm
IChiZWdpblBhdGggIT0gcGFyc2luZ0J1ZmZlci5lbmQoKSkgeworICAgICAgICBpZiAoIXBhcnNl
UGF0aChTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5QYXRoLCBwYXJzaW5nQnVmZmVyLmVuZCgp
IH0sIHBhdGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMzExLDI1
ICszMDUsMjUgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogLy8g
ICAgICAgICAgICAgICAgICAgICA7IDxzY2hlbWU+IHByb2R1Y3Rpb24gZnJvbSBSRkMgMzk4Ngog
Ly8gc2NoZW1lICAgICAgPSBBTFBIQSAqKCBBTFBIQSAvIERJR0lUIC8gIisiIC8gIi0iIC8gIi4i
ICkKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU2NoZW1l
KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3Q6OnBhcnNlU2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4gcGFyc2luZ0J1ZmZlciwgU3RyaW5nJiBzY2hlbWUpCiB7Ci0gICAgQVNTRVJUKGJlZ2luIDw9
IGVuZCk7CisgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVm
ZmVyLmVuZCgpKTsKICAgICBBU1NFUlQoc2NoZW1lLmlzRW1wdHkoKSk7CiAKLSAgICBpZiAoYmVn
aW4gPT0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOworICAgIGF1dG8g
YmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAKLSAgICBpZiAoIXNraXBFeGFjdGx5
PFVDaGFyLCBpc0FTQ0lJQWxwaGE+KHBvc2l0aW9uLCBlbmQpKQorICAgIGlmICghc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSUFscGhhPihwYXJzaW5nQnVmZmVyKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc1NjaGVtZUNvbnRpbnVhdGlv
bkNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKIAotICAgIGlm
IChwb3NpdGlvbiAhPSBlbmQpCisgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNjaGVtZSA9IFN0cmluZyhiZWdpbiwgZW5kIC0gYmVn
aW4pOworICAgIHNjaGVtZSA9IFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigp
IC0gYmVnaW4pOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zMzcsOTEgKzMzMSw4OSBAQCBi
b29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAvLyAgICAgICAgICAgICAg
ICAgICAvICIqIgogLy8gaG9zdC1jaGFyICAgICAgICAgPSBBTFBIQSAvIERJR0lUIC8gIi0iCiAv
LwotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhvc3QoY29uc3Qg
VUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RI
YXNXaWxkY2FyZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VIb3N0KFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlciwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFz
V2lsZGNhcmQpCiB7Ci0gICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CisgICAgQVNTRVJUKHBhcnNp
bmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsKICAgICBBU1NFUlQo
aG9zdC5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCghaG9zdEhhc1dpbGRjYXJkKTsKIAotICAgIGlm
IChiZWdpbiA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0KLSAg
ICBpZiAoc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcqJykpIHsKKyAgICBpZiAo
c2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJyonKSkgewogICAgICAg
ICBob3N0SGFzV2lsZGNhcmQgPSB0cnVlOwogCi0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQp
CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAn
LicpKQorICAgICAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZm
ZXIsICcuJykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29uc3Qg
VUNoYXIqIGhvc3RCZWdpbiA9IHBvc2l0aW9uOworICAgIGF1dG8gaG9zdEJlZ2luID0gcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpOwogCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAg
ICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXIsIGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24sIGVu
ZCkpCisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7
CisgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNIb3N0Q2hhcmFjdGVy
PihwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgICAg
IHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0hvc3RDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIp
OwogCi0gICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAhc2tpcEV4YWN0bHk8VUNoYXI+KHBv
c2l0aW9uLCBlbmQsICcuJykpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSAmJiAhc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZl
ciwgJy4nKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBBU1NFUlQo
cG9zaXRpb24gPT0gZW5kKTsKLSAgICBob3N0ID0gU3RyaW5nKGhvc3RCZWdpbiwgZW5kIC0gaG9z
dEJlZ2luKTsKKyAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5hdEVuZCgpKTsKKyAgICBob3N0ID0g
U3RyaW5nKGhvc3RCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gaG9zdEJlZ2luKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYXJzZVBhdGgoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJp
bmcmIHBhdGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUGF0aChTdHJpbmdQYXJzaW5nQnVmZmVyPENo
YXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIsIFN0cmluZyYgcGF0aCkKIHsKLSAgICBBU1NFUlQo
YmVnaW4gPD0gZW5kKTsKKyAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIDw9IHBh
cnNpbmdCdWZmZXIuZW5kKCkpOwogICAgIEFTU0VSVChwYXRoLmlzRW1wdHkoKSk7CiAgICAgCi0g
ICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBp
c1BhdGhDb21wb25lbnRDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgIGF1dG8gYmVnaW4g
PSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzUGF0aENvbXBvbmVudENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CiAgICAgLy8gcGF0aC90
by9maWxlLmpzP3F1ZXJ5PXN0cmluZyB8fCBwYXRoL3RvL2ZpbGUuanMjYW5jaG9yCiAgICAgLy8g
ICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0gICAgaWYg
KHBvc2l0aW9uIDwgZW5kKQotICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUGF0aENoYXJh
Y3RlcihtX2RpcmVjdGl2ZU5hbWUsIFN0cmluZyhiZWdpbiwgZW5kIC0gYmVnaW4pLCAqcG9zaXRp
b24pOworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkKKyAg
ICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFBhdGhDaGFyYWN0ZXIobV9kaXJlY3RpdmVOYW1l
LCBTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIuZW5kKCkgLSBiZWdpbiksICpwYXJzaW5nQnVm
ZmVyKTsKICAgICAKLSAgICBwYXRoID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKFN0cmluZyhi
ZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOworICAgIHBhdGggPSBkZWNvZGVVUkxFc2NhcGVTZXF1
ZW5jZXMoU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbikpOwog
ICAgIAotICAgIEFTU0VSVChwb3NpdGlvbiA8PSBlbmQpOwotICAgIEFTU0VSVChwb3NpdGlvbiA9
PSBlbmQgfHwgKCpwb3NpdGlvbiA9PSAnIycgfHwgKnBvc2l0aW9uID09ICc/JykpOworICAgIEFT
U0VSVChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPD0gcGFyc2luZ0J1ZmZlci5lbmQoKSk7Cisg
ICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAoKnBhcnNpbmdCdWZmZXIgPT0gJyMn
IHx8ICpwYXJzaW5nQnVmZmVyID09ICc/JykpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBw
b3J0ICAgICAgICAgICAgICA9ICI6IiAoIDEqRElHSVQgLyAiKiIgKQogLy8KLWJvb2wgQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQb3J0KGNvbnN0IFVDaGFyKiBiZWdpbiwg
Y29uc3QgVUNoYXIqIGVuZCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29sJiBwb3J0SGFz
V2lsZGNhcmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUG9ydChTdHJpbmdQYXJzaW5nQnVmZmVyPENo
YXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgYm9v
bCYgcG9ydEhhc1dpbGRjYXJkKQogewotICAgIEFTU0VSVChiZWdpbiA8PSBlbmQpOworICAgIEFT
U0VSVChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPD0gcGFyc2luZ0J1ZmZlci5lbmQoKSk7CiAg
ICAgQVNTRVJUKCFwb3J0KTsKICAgICBBU1NFUlQoIXBvcnRIYXNXaWxkY2FyZCk7CiAgICAgCi0g
ICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhcj4oYmVnaW4sIGVuZCwgJzonKSkKKyAgICBpZiAoIXNr
aXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc6JykpCiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIAotICAgIGlmIChiZWdpbiA9PSBlbmQpCisgICAgaWYg
KHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IGlmIChlbmQgLSBiZWdpbiA9PSAxICYmICpiZWdpbiA9PSAnKicpIHsKKyAgICBpZiAocGFyc2lu
Z0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA9PSAxICYmICpwYXJzaW5nQnVmZmVyID09ICcqJykg
ewogICAgICAgICBwb3J0ID0gV1RGOjpudWxsb3B0OwogICAgICAgICBwb3J0SGFzV2lsZGNhcmQg
PSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgY29uc3QgVUNo
YXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJRGlnaXQ+
KHBvc2l0aW9uLCBlbmQpOworICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9u
KCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlEaWdpdD4ocGFyc2luZ0J1
ZmZlcik7CiAgICAgCi0gICAgaWYgKHBvc2l0aW9uICE9IGVuZCkKKyAgICBpZiAoIXBhcnNpbmdC
dWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGJvb2wgb2s7
Ci0gICAgaW50IHBvcnRJbnQgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoYmVnaW4sIGVuZCAtIGJl
Z2luLCAmb2spOworICAgIGludCBwb3J0SW50ID0gY2hhcmFjdGVyc1RvSW50U3RyaWN0KGJlZ2lu
LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbiwgJm9rKTsKICAgICBpZiAocG9ydElu
dCA8IDAgfHwgcG9ydEludCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHBvcnQgPSBwb3J0SW50OwpAQCAtNDMxLDQ0ICs0
MjMsNDIgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogLy8gTWF0
Y2ggQmxpbmsncyBiZWhhdmlvciBvZiBhbGxvd2luZyBhbiBlcXVhbCBzaWduIHRvIGFwcGVhciBh
bnl3aGVyZSBpbiB0aGUgdmFsdWUgb2YgdGhlIG5vbmNlCiAvLyBldmVuIHRob3VnaCB0aGlzIGRv
ZXMgbm90IG1hdGNoIHRoZSBiZWhhdmlvciBvZiBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBMZXZl
bCAzIHNwZWMuLAogLy8gPGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtY3NwLz4gKDI5
IEZlYnJ1YXJ5IDIwMTYpLgotc3RhdGljIGJvb2wgaXNOb25jZUNoYXJhY3RlcihVQ2hhciBjKQor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNOb25jZUNoYXJh
Y3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGlzQmFzZTY0T3JCYXNlNjRVUkxD
aGFyYWN0ZXIoYykgfHwgYyA9PSAnPSc7CiB9CiAKIC8vIG5vbmNlLXNvdXJjZSAgICA9ICInbm9u
Y2UtIiBub25jZS12YWx1ZSAiJyIKIC8vIG5vbmNlLXZhbHVlICAgICA9IGJhc2U2NC12YWx1ZQot
Ym9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZU5vbmNlU291cmNlKGNv
bnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VO
b25jZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZm
ZXIpCiB7Ci0gICAgY29uc3QgdW5zaWduZWQgbm9uY2VQcmVmaXhMZW5ndGggPSA3OwotICAgIGlm
ICghU3RyaW5nVmlldyhiZWdpbiwgZW5kIC0gYmVnaW4pLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZSgiJ25vbmNlLSIpKQorICAgIGlmICghc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShw
YXJzaW5nQnVmZmVyLCAiJ25vbmNlLSIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29u
c3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW4gKyBub25jZVByZWZpeExlbmd0aDsKLSAgICBjb25z
dCBVQ2hhciogYmVnaW5Ob25jZVZhbHVlID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPFVDaGFy
LCBpc05vbmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAgICBpZiAocG9zaXRpb24gPj0g
ZW5kIHx8IHBvc2l0aW9uID09IGJlZ2luTm9uY2VWYWx1ZSB8fCAqcG9zaXRpb24gIT0gJ1wnJykK
KworICAgIGF1dG8gYmVnaW5Ob25jZVZhbHVlID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwor
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vbmNlQ2hhcmFjdGVyPihwYXJzaW5nQnVm
ZmVyKTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8IHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKSA9PSBiZWdpbk5vbmNlVmFsdWUgfHwgKnBhcnNpbmdCdWZmZXIgIT0gJ1wnJykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbm9uY2VzLmFkZChTdHJpbmcoYmVnaW5Ob25jZVZh
bHVlLCBwb3NpdGlvbiAtIGJlZ2luTm9uY2VWYWx1ZSkpOworICAgIG1fbm9uY2VzLmFkZChTdHJp
bmcoYmVnaW5Ob25jZVZhbHVlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbk5vbmNl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gaGFzaC1zb3VyY2UgICAgPSAiJyIg
aGFzaC1hbGdvcml0aG0gIi0iIGJhc2U2NC12YWx1ZSAiJyIKIC8vIGhhc2gtYWxnb3JpdGhtID0g
InNoYTI1NiIgLyAic2hhMzg0IiAvICJzaGE1MTIiCiAvLyBiYXNlNjQtdmFsdWUgID0gMSooIEFM
UEhBIC8gRElHSVQgLyAiKyIgLyAiLyIgLyAiLSIgLyAiXyIgKSoyKCAiPSIgKQotYm9vbCBDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhhc2hTb3VyY2UoY29uc3QgVUNoYXIq
IGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhhc2hTb3VyY2Uo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAg
IGlmIChiZWdpbiA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0g
ICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJ1wnJykpCisgICAgaWYg
KCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnXCcnKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBkaWdlc3QgPSBwYXJzZUNyeXB0b2dyYXBoaWNE
aWdlc3QocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBkaWdlc3QgPSBwYXJzZUNyeXB0b2dyYXBo
aWNEaWdlc3QocGFyc2luZ0J1ZmZlcik7CiAgICAgaWYgKCFkaWdlc3QpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChwb3NpdGlvbiA+PSBlbmQgfHwgKnBvc2l0aW9uICE9ICdcJycp
CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAnXCcn
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGlnZXN0LT52YWx1ZS5zaXplKCkg
PiBDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoOjptYXhpbXVtRGlnZXN0TGVuZ3RoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwxOSArNTUsMTkgQEAgcHVibGljOgogICAgIGJvb2wgaXNOb25lKCkgY29uc3QgeyByZXR1
cm4gbV9pc05vbmU7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIHBhcnNlKGNvbnN0IFVDaGFyKiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gdm9pZCBwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+KTsKIAot
ICAgIGJvb2wgcGFyc2VTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
LCBTdHJpbmcmIHNjaGVtZSwgU3RyaW5nJiBob3N0LCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQs
IFN0cmluZyYgcGF0aCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNh
cmQpOwotICAgIGJvb2wgcGFyc2VTY2hlbWUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kLCBTdHJpbmcmIHNjaGVtZSk7Ci0gICAgYm9vbCBwYXJzZUhvc3QoY29uc3QgVUNoYXIq
IGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxk
Y2FyZCk7Ci0gICAgYm9vbCBwYXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kLCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7
Ci0gICAgYm9vbCBwYXJzZVBhdGgoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
LCBTdHJpbmcmIHBhdGgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJv
b2wgcGFyc2VTb3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiwgU3RyaW5n
JiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBTdHJpbmcm
IHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlU2NoZW1lKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4sIFN0cmluZyYgc2NoZW1lKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlSG9zdChTdHJpbmdQYXJzaW5n
QnVmZmVyPENoYXJhY3RlclR5cGU+LCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxkY2Fy
ZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVBvcnQo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiwgT3B0aW9uYWw8dWludDE2X3Q+JiBw
b3J0LCBib29sJiBwb3J0SGFzV2lsZGNhcmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGJvb2wgcGFyc2VQYXRoKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4sIFN0cmluZyYgcGF0aCk7CiAKLSAgICBib29sIHBhcnNlTm9uY2VTb3VyY2UoY29uc3QgVUNo
YXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBib29sIHBhcnNlTm9uY2VTb3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFy
YWN0ZXJUeXBlPik7CiAKICAgICBib29sIGlzUHJvdG9jb2xBbGxvd2VkQnlTdGFyKGNvbnN0IFVS
TCYpIGNvbnN0OwogCi0gICAgYm9vbCBwYXJzZUhhc2hTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2lu
LCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIHBhcnNlSGFzaFNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+
KTsKIAogICAgIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgbV9wb2xpY3k7CiAgICAgVmVj
dG9yPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZT4gbV9saXN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmdsZVZhbHVlLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtODAsMTkgKzgxLDE5IEBAIFN0cmluZyBTVkdBbmdsZVZhbHVlOjp2YWx1ZUFz
U3RyaW5nKCkgY28KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgU1ZHQW5nbGVWYWx1ZTo6VHlwZSBwYXJzZUFu
Z2xlVHlwZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgU1ZHQW5n
bGVWYWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgc3dpdGNoIChlbmQgLSBwdHIpIHsKKyAgICBz
d2l0Y2ggKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkpIHsKICAgICBjYXNlIDA6CiAg
ICAgICAgIHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5HTEVUWVBFX1VOU1BFQ0lGSUVEOwog
ICAgIGNhc2UgMzoKLSAgICAgICAgaWYgKHB0clswXSA9PSAnZCcgJiYgcHRyWzFdID09ICdlJyAm
JiBwdHJbMl0gPT0gJ2cnKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlclswXSA9PSAnZCcgJiYg
cGFyc2luZ0J1ZmZlclsxXSA9PSAnZScgJiYgcGFyc2luZ0J1ZmZlclsyXSA9PSAnZycpCiAgICAg
ICAgICAgICByZXR1cm4gU1ZHQW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9ERUc7Ci0gICAgICAg
IGlmIChwdHJbMF0gPT0gJ3InICYmIHB0clsxXSA9PSAnYScgJiYgcHRyWzJdID09ICdkJykKKyAg
ICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbMF0gPT0gJ3InICYmIHBhcnNpbmdCdWZmZXJbMV0gPT0g
J2EnICYmIHBhcnNpbmdCdWZmZXJbMl0gPT0gJ2QnKQogICAgICAgICAgICAgcmV0dXJuIFNWR0Fu
Z2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfUkFEOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDQ6
Ci0gICAgICAgIGlmIChwdHJbMF0gPT0gJ2cnICYmIHB0clsxXSA9PSAncicgJiYgcHRyWzJdID09
ICdhJyAmJiBwdHJbM10gPT0gJ2QnKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlclswXSA9PSAn
ZycgJiYgcGFyc2luZ0J1ZmZlclsxXSA9PSAncicgJiYgcGFyc2luZ0J1ZmZlclsyXSA9PSAnYScg
JiYgcGFyc2luZ0J1ZmZlclszXSA9PSAnZCcpCiAgICAgICAgICAgICByZXR1cm4gU1ZHQW5nbGVW
YWx1ZTo6U1ZHX0FOR0xFVFlQRV9HUkFEOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMDYs
MjcgKzEwNywxOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTVkdBbmdsZVZhbHVlOjpzZXRWYWx1CiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgYXV0byBoZWxwZXIgPSBbJl0oYXV0byog
cHRyLCBhdXRvKiBlbmQpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKLSAgICAgICAgYXV0byB2YWx1
ZUluU3BlY2lmaWVkVW5pdHMgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQ
b2xpY3k6OkRvbnRTa2lwKTsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNp
bmcodmFsdWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsK
KyAgICAgICAgYXV0byB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSBwYXJzZU51bWJlcihwYXJzaW5n
QnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwogICAgICAgICBpZiAoIXZh
bHVlSW5TcGVjaWZpZWRVbml0cykKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50
YXhFcnJvciB9OwogCi0gICAgICAgIGF1dG8gdW5pdFR5cGUgPSBwYXJzZUFuZ2xlVHlwZShwdHIs
IGVuZCk7CisgICAgICAgIGF1dG8gdW5pdFR5cGUgPSBwYXJzZUFuZ2xlVHlwZShwYXJzaW5nQnVm
ZmVyKTsKICAgICAgICAgaWYgKHVuaXRUeXBlID09IFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZ
UEVfVU5LTk9XTikKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9
OwogCiAgICAgICAgIG1fdW5pdFR5cGUgPSB1bml0VHlwZTsKICAgICAgICAgbV92YWx1ZUluU3Bl
Y2lmaWVkVW5pdHMgPSAqdmFsdWVJblNwZWNpZmllZFVuaXRzOwogICAgICAgICByZXR1cm4geyB9
OwotICAgIH07Ci0KLSAgICBpZiAodmFsdWUuaXM4Qml0KCkpIHsKLSAgICAgICAgYXV0byogcHRy
ID0gdmFsdWUuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgcmV0dXJuIGhlbHBlcihwdHIsIHB0ciAr
IHZhbHVlLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBwdHIgPSB2YWx1ZS5jaGFyYWN0
ZXJzMTYoKTsKLSAgICByZXR1cm4gaGVscGVyKHB0ciwgcHRyICsgdmFsdWUubGVuZ3RoKCkpOwor
ICAgIH0pOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdBbmdsZVZhbHVlOjpuZXdWYWx1ZVNw
ZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCB2YWx1ZUluU3BlY2lm
aWVkVW5pdHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDcgQEAgYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6aGFzVmFsaQogdm9pZCBT
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0g
U1ZHTmFtZXM6OnR5cGVBdHRyKSB7Ci0gICAgICAgIG1fdHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6
OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSk7CisgICAgICAgIG1fdHlwZSA9IFNWR1RyYW5zZm9y
bWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSkudmFsdWVPcihTVkdUcmFuc2Zvcm1WYWx1
ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKTsKICAgICAgICAgaWYgKG1fdHlwZSA9PSBTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVgpCiAgICAgICAgICAgICBtX3R5cGUgPSBT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNzcsNTQgKzc4LDUwIEBAIGZhaWw6CiAgICAgcmVzdWx0LmNsZWFyKCk7CiB9CiAK
LXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25z
dCBTdHJpbmdWaWV3JiBwYXJzZSkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+
IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCiB7Ci0gICAgaWYgKHBh
cnNlLmlzRW1wdHkoKSkKKyAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gcGFyc2Uu
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcGFyc2UubGVuZ3Ro
KCk7Ci0KLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwotCi0gICAgVmVjdG9y
PFVuaXRCZXppZXI+IHJlc3VsdDsKLQotICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAg
ICB3aGlsZSAoY3VyIDwgZW5kKSB7Ci0gICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAg
ICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NB
KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gV1RGOjpyZWFk
Q2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBP
cHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+IHsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKHBhcnNpbmdCdWZmZXIpOwogCi0gICAgICAgIGF1dG8gcG9zQiA9IHBhcnNlTnVtYmVyKGN1
ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NCKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgVmVjdG9yPFVuaXRCZXppZXI+IHJlc3VsdDsKIAotICAgICAgICBhdXRv
IHBvc0MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAgICAgIGlmICghcG9zQykKLSAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBm
YWxzZTsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpKSB7CisgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICAgICAgYXV0
byBwb3NBID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICBpZiAoIXBv
c0EpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRv
IHBvc0QgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKLSAgICAgICAgaWYgKCFwb3NEKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgICAgIGF1dG8gcG9zQiA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOwor
ICAgICAgICAgICAgaWYgKCFwb3NCKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKKyAgICAgICAg
ICAgIGF1dG8gcG9zQyA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAg
aWYgKCFwb3NDKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAg
ICAgaWYgKGN1ciA8IGVuZCAmJiAqY3VyID09ICc7JykgewotICAgICAgICAgICAgZGVsaW1QYXJz
ZWQgPSB0cnVlOwotICAgICAgICAgICAgY3VyKys7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGF1
dG8gcG9zRCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpEb250U2tpcCk7CisgICAgICAgICAgICBpZiAoIXBvc0QpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBl
bmQpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwog
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoVW5pdEJlemllciB7ICpwb3NBLCAqcG9zQiwgKnBvc0Ms
ICpwb3NEIH0pOwotICAgIH0KKyAgICAgICAgICAgIGlmIChza2lwRXhhY3RseShwYXJzaW5nQnVm
ZmVyLCAnOycpKQorICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKIAotICAgIGlm
ICghKGN1ciA9PSBlbmQgJiYgIWRlbGltUGFyc2VkKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsK
KworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6aWVyIHsgKnBvc0EsICpwb3NCLCAq
cG9zQywgKnBvc0QgfSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShwYXJzaW5nQnVmZmVy
LmF0RW5kKCkgJiYgIWRlbGltUGFyc2VkKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0p
OwogfQogCiBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpdFRvVmlld0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zp
dFRvVmlld0JveC5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaXRUb1ZpZXdCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04NiwyNyArODcsMzcgQEAgYm9vbCBTVkdGaXRUb1Zp
ZXdCb3g6OnBhcnNlQXR0cmlidXRlKGNvbgogCiBPcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRv
Vmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKQogewotICAgIGF1
dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gdmFsdWUudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0g
ICAgcmV0dXJuIHBhcnNlVmlld0JveChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVu
Z3RoKCkpOworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwg
WyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICByZXR1cm4gcGFyc2VWaWV3Qm94R2Vu
ZXJpYyhwYXJzaW5nQnVmZmVyKTsKKyAgICB9KTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBT
VkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYg
cGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKK3sKKyAgICByZXR1cm4gcGFyc2VWaWV3Qm94
R2VuZXJpYyhwYXJzaW5nQnVmZmVyLCB2YWxpZGF0ZSk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVj
dD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hh
cj4mIHBhcnNpbmdCdWZmZXIsIGJvb2wgdmFsaWRhdGUpCit7CisgICAgcmV0dXJuIHBhcnNlVmll
d0JveEdlbmVyaWMocGFyc2luZ0J1ZmZlciwgdmFsaWRhdGUpOwogfQogCi1PcHRpb25hbDxGbG9h
dFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29u
c3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3hH
ZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIs
IGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAgU3RyaW5nVmlldyBzdHIoYywgZW5kIC0gYyk7CisgICAg
U3RyaW5nVmlldyBzdHJpbmdUb1BhcnNlID0gcGFyc2luZ0J1ZmZlci5zdHJpbmdWaWV3T2ZDaGFy
YWN0ZXJzUmVtYWluaW5nKCk7CiAKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYywgZW5kKTsK
KyAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBhdXRvIHgg
PSBwYXJzZU51bWJlcihjLCBlbmQpOwotICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7
Ci0gICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7Ci0gICAgYXV0byBoZWlnaHQg
PSBwYXJzZU51bWJlcihjLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Cisg
ICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgYXV0byB5ID0gcGFy
c2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKHBh
cnNpbmdCdWZmZXIpOworICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZl
ciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKIAogICAgIGlmICh2YWxpZGF0ZSkg
ewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBtX3ZpZXdCb3gtPmNvbnRleHRFbGVtZW50
KCktPmRvY3VtZW50KCk7CiAKICAgICAgICAgaWYgKCF4IHx8ICF5IHx8ICF3aWR0aCB8fCAhaGVp
Z2h0KSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0
V2FybmluZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0ciwgIlwi
IikpOworICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdh
cm5pbmcobWFrZVN0cmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdCb3g9XCIiLCBzdHJpbmdUb1Bh
cnNlLCAiXCIiKSk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9
CiAKQEAgLTEyMyw5ICsxMzQsOSBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0Jv
eDo6cGFyCiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3RoaW5nIHNob3VsZCBjb21lIGFmdGVy
IHRoZSBsYXN0LCBmb3VydGggbnVtYmVyLgotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
YywgZW5kKTsKLSAgICAgICAgaWYgKGMgPCBlbmQpIHsKLSAgICAgICAgICAgIGRvY3VtZW50LmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFy
c2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlcyhwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFj
dGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1c
IiIsIHN0cmluZ1RvUGFyc2UsICJcIiIpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9W
aWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0Jv
eC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDkgKzY2LDEyIEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIHJlc2V0KCk7CiAgICAgYm9vbCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbVN0cmluZyYpOwogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VWaWV3
Qm94KGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBh
cnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZh
bGlkYXRlID0gdHJ1ZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mLCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4m
LCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3hHZW5lcmlj
KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mLCBib29sIHZhbGlkYXRlID0gdHJ1
ZSk7CisKICAgICBSZWY8U1ZHQW5pbWF0ZWRSZWN0PiBtX3ZpZXdCb3g7CiAgICAgUmVmPFNWR0Fu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4gbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvOwogICAgIGJv
b2wgbV9pc1ZpZXdCb3hWYWxpZCB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xl
bmd0aExpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5n
dGhMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKKworI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQ
YXJzaW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTVkdMZW5ndGhM
aXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNsZWFySXRlbXMoKTsKKwor
ICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8g
cGFyc2luZ0J1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlwZW5hbWUg
ZGVjbHR5cGUocGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7CisKKyAgICAgICAgd2hpbGUg
KHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBh
dXRvIHN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworCisgICAgICAgICAgICBza2lw
VW50aWw8Q2hhcmFjdGVyVHlwZSwgaXNTVkdTcGFjZU9yQ29tbWE+KHBhcnNpbmdCdWZmZXIpOwor
CisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBhdXRvIHZhbHVlID0gU1ZHTGVuZ3RoVmFsdWU6OmNvbnN0
cnVjdChtX2xlbmd0aE1vZGUsIFN0cmluZ1ZpZXcoc3RhcnQsIHBhcnNpbmdCdWZmZXIucG9zaXRp
b24oKSAtIHN0YXJ0KSk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBhcHBlbmQoU1ZHTGVuZ3RoOjpjcmVhdGUoV1RGTW92ZSgq
dmFsdWUpKSk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihw
YXJzaW5nQnVmZmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhp
cyBjbGVhckl0ZW1zKCkgb24gZmFpbHVyZSBsaWtlIFNWR1RyYW5zZm9ybUxpc3QgZG9lcz8KKwor
ICAgICAgICByZXR1cm4gcGFyc2luZ0J1ZmZlci5hdEVuZCgpOworICAgIH0pOworfQorCitTdHJp
bmcgU1ZHTGVuZ3RoTGlzdDo6dmFsdWVBc1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOworCisgICAgZm9yIChjb25zdCBhdXRvJiBsZW5ndGggOiBtX2l0ZW1zKSB7
CisgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoJyAnKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZChsZW5ndGgtPnZhbHVlKCkudmFsdWVB
c1N0cmluZygpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQor
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmgJKHJldmlzaW9uIDI2MzMzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR1Zh
bHVlUHJvcGVydHlMaXN0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDQ1ICs1Miw5IEBAIHB1YmxpYzoKIAogICAg
IFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoTW9kZTsg
fQogCi0gICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
Y2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3Ry
aW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVD
aGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBl
bmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewot
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gcHRyOwotICAgICAgICAgICAgd2hpbGUg
KHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJyAmJiAhaXNTVkdTcGFjZSgqcHRyKSkKLSAgICAgICAg
ICAgICAgICBwdHIrKzsKLSAgICAgICAgICAgIGlmIChwdHIgPT0gc3RhcnQpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZyhzdGFydCwgcHRy
IC0gc3RhcnQpOwotICAgICAgICAgICAgU1ZHTGVuZ3RoVmFsdWUgdmFsdWUobV9sZW5ndGhNb2Rl
KTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlU3RyaW5nKS5o
YXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgYXBw
ZW5kKFNWR0xlbmd0aDo6Y3JlYXRlKHZhbHVlKSk7Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gcHRyID09IGVuZDsKLSAgICB9CisgICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVl
KTsKIAotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IGxlbmd0aCA6IG1faXRlbXMpIHsKLSAgICAgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQot
ICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGxlbmd0aC0+dmFsdWUoKS52YWx1ZUFzU3RyaW5nKCkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9CisgICAgU3RyaW5nIHZh
bHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZTsKICAgICAKIHByaXZhdGU6CiAgICAgU1ZHTGVu
Z3RoTGlzdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMZW5ndGhWYWx1ZS5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMZW5ndGhWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJTVkdMZW5ndGhDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEsMTkgKzYyLDIxIEBA
IHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogbGVuZ3RoVHlwZVRvU3QKICAgICByZXR1cm4gIiI7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgU1ZHTGVuZ3RoVHlwZSBwYXJzZUxlbmd0aFR5cGUoY29uc3Qg
VUNoYXIqIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyBpbmxpbmUgU1ZHTGVuZ3RoVHlwZSBwYXJzZUxlbmd0aFR5cGUoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBpZiAo
cHRyID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1
cm4gU1ZHTGVuZ3RoVHlwZTo6TnVtYmVyOwogCi0gICAgY29uc3QgVUNoYXIgZmlyc3RDaGFyID0g
KnB0cjsKKyAgICBhdXRvIGZpcnN0Q2hhciA9ICpwYXJzaW5nQnVmZmVyOworICAgICsrcGFyc2lu
Z0J1ZmZlcjsKIAotICAgIGlmICgrK3B0ciA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIu
YXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZpcnN0Q2hhciA9PSAnJScgPyBTVkdMZW5ndGhUeXBl
OjpQZXJjZW50YWdlIDogU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bjsKIAotICAgIGNvbnN0IFVDaGFy
IHNlY29uZENoYXIgPSAqcHRyOworICAgIGF1dG8gc2Vjb25kQ2hhciA9ICpwYXJzaW5nQnVmZmVy
OworICAgICsrcGFyc2luZ0J1ZmZlcjsKIAotICAgIGlmICgrK3B0ciAhPSBlbmQpCisgICAgaWYg
KCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBTVkdMZW5ndGhUeXBlOjpV
bmtub3duOwogCiAgICAgaWYgKGZpcnN0Q2hhciA9PSAnZScgJiYgc2Vjb25kQ2hhciA9PSAnbScp
CkBAIC0xODAsNyArMTgzLDE1IEBAIFNWR0xlbmd0aFZhbHVlOjpTVkdMZW5ndGhWYWx1ZShjb25z
dCBTVkcKICAgICBzZXRWYWx1ZShjb250ZXh0LCB2YWx1ZSk7CiB9CiAKLVNWR0xlbmd0aFZhbHVl
IFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlLCBjb25z
dCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcsIFNWR1BhcnNpbmdFcnJvciYgcGFyc2VFcnJvciwgU1ZH
TGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlIG5lZ2F0aXZlVmFsdWVzTW9kZSkKK09wdGlvbmFsPFNW
R0xlbmd0aFZhbHVlPiBTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0KFNWR0xlbmd0aE1vZGUgbGVu
Z3RoTW9kZSwgY29uc3QgU3RyaW5nVmlldyYgdmFsdWVBc1N0cmluZykKK3sKKyAgICBTVkdMZW5n
dGhWYWx1ZSBsZW5ndGggeyBsZW5ndGhNb2RlIH07CisgICAgaWYgKGxlbmd0aC5zZXRWYWx1ZUFz
U3RyaW5nKHZhbHVlQXNTdHJpbmcpLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIHJldHVybiBsZW5ndGg7Cit9CisKK1NWR0xlbmd0aFZhbHVlIFNWR0xl
bmd0aFZhbHVlOjpjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlLCBjb25zdCBTdHJp
bmdWaWV3JiB2YWx1ZUFzU3RyaW5nLCBTVkdQYXJzaW5nRXJyb3ImIHBhcnNlRXJyb3IsIFNWR0xl
bmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSBuZWdhdGl2ZVZhbHVlc01vZGUpCiB7CiAgICAgU1ZHTGVu
Z3RoVmFsdWUgbGVuZ3RoKGxlbmd0aE1vZGUpOwogCkBAIC0yMzksNyArMjUwLDcgQEAgUmVmPENT
U1ByaW1pdGl2ZVZhbHVlPiBTVkdMZW5ndGhWYWx1ZTo6dAogICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKGxlbmd0aC52YWx1ZUluU3BlY2lmaWVkVW5pdHMoKSwgbGVuZ3RoVHlw
ZVRvUHJpbWl0aXZlVHlwZShsZW5ndGgubGVuZ3RoVHlwZSgpKSk7CiB9CiAKLUV4Y2VwdGlvbk9y
PHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWVBc1N0cmluZywgU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlKQorRXhjZXB0aW9uT3I8dm9pZD4g
U1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYgdmFsdWVB
c1N0cmluZywgU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlKQogewogICAgIG1fdmFsdWVJblNwZWNp
ZmllZFVuaXRzID0gMDsKICAgICBtX2xlbmd0aE1vZGUgPSBsZW5ndGhNb2RlOwpAQCAtMjg2LDI2
ICsyOTcsMjQgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbAogICAg
IHJldHVybiBzZXRWYWx1ZShjb250ZXh0LCB2YWx1ZSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+
IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
RXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3Qg
U3RyaW5nVmlldyYgc3RyaW5nKQogewogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4geyB9OwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdW
aWV3KHN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0
ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsg
c3RyaW5nLmxlbmd0aCgpOwotCi0gICAgYXV0byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJzZU51bWJl
cihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICBpZiAoIWNv
bnZlcnRlZE51bWJlcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07
Ci0KLSAgICBhdXRvIGxlbmd0aFR5cGUgPSBwYXJzZUxlbmd0aFR5cGUocHRyLCBlbmQpOwotICAg
IGlmIChsZW5ndGhUeXBlID09IFNWR0xlbmd0aFR5cGU6OlVua25vd24pCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0
ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IEV4Y2VwdGlv
bk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJzZU51bWJlcihw
YXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBp
ZiAoIWNvbnZlcnRlZE51bWJlcikKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50
YXhFcnJvciB9OworCisgICAgICAgIGF1dG8gbGVuZ3RoVHlwZSA9IHBhcnNlTGVuZ3RoVHlwZShw
YXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKGxlbmd0aFR5cGUgPT0gU1ZHTGVuZ3RoVHlwZTo6
VW5rbm93bikKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9Owog
Ci0gICAgbV9sZW5ndGhUeXBlID0gbGVuZ3RoVHlwZTsKLSAgICBtX3ZhbHVlSW5TcGVjaWZpZWRV
bml0cyA9ICpjb252ZXJ0ZWROdW1iZXI7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICAgICAgbV9sZW5n
dGhUeXBlID0gbGVuZ3RoVHlwZTsKKyAgICAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAq
Y29udmVydGVkTnVtYmVyOworICAgICAgICByZXR1cm4geyB9OworICAgIH0pOwogfQogCiBFeGNl
cHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMoY29u
c3QgU1ZHTGVuZ3RoQ29udGV4dCYgY29udGV4dCwgU1ZHTGVuZ3RoVHlwZSBsZW5ndGhUeXBlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmgJKHJldmlzaW9uIDI2MzMzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OCwxMyArNTgsMTQgQEAgZW51bSBjbGFzcyBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgOgog
Y2xhc3MgU1ZHTGVuZ3RoVmFsdWUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIFNWR0xlbmd0aFZhbHVlKFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpP
dGhlciwgY29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nID0gU3RyaW5nKCkpOworICAgIFNWR0xl
bmd0aFZhbHVlKFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlciwgY29uc3QgU3Ry
aW5nJiB2YWx1ZUFzU3RyaW5nID0geyB9KTsKICAgICBTVkdMZW5ndGhWYWx1ZShmbG9hdCB2YWx1
ZUluU3BlY2lmaWVkVW5pdHMsIFNWR0xlbmd0aFR5cGUsIFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5n
dGhNb2RlOjpPdGhlcik7CiAgICAgU1ZHTGVuZ3RoVmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4
dCYsIGZsb2F0LCBTVkdMZW5ndGhUeXBlID0gU1ZHTGVuZ3RoVHlwZTo6TnVtYmVyLCBTVkdMZW5n
dGhNb2RlID0gU1ZHTGVuZ3RoTW9kZTo6T3RoZXIpOwogCi0gICAgc3RhdGljIFNWR0xlbmd0aFZh
bHVlIGNvbnN0cnVjdChTVkdMZW5ndGhNb2RlLCBjb25zdCBTdHJpbmcmLCBTVkdQYXJzaW5nRXJy
b3ImLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgPSBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVl
c01vZGU6OkFsbG93KTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHTGVuZ3RoVmFsdWU+IGNvbnN0
cnVjdChTVkdMZW5ndGhNb2RlLCBjb25zdCBTdHJpbmdWaWV3Jik7CisgICAgc3RhdGljIFNWR0xl
bmd0aFZhbHVlIGNvbnN0cnVjdChTVkdMZW5ndGhNb2RlLCBjb25zdCBTdHJpbmdWaWV3JiwgU1ZH
UGFyc2luZ0Vycm9yJiwgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlID0gU1ZHTGVuZ3RoTmVn
YXRpdmVWYWx1ZXNNb2RlOjpBbGxvdyk7CiAgICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGJsZW5k
KGNvbnN0IFNWR0xlbmd0aFZhbHVlJiBmcm9tLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgdG8sIGZs
b2F0IHByb2dyZXNzKTsKLSAgICAKKwogICAgIHN0YXRpYyBTVkdMZW5ndGhWYWx1ZSBmcm9tQ1NT
UHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKICAgICBzdGF0aWMgUmVm
PENTU1ByaW1pdGl2ZVZhbHVlPiB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFNWR0xlbmd0aFZh
bHVlJik7CiAKQEAgLTg1LDggKzg2LDggQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+
IHNldFZhbHVlKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBmbG9hdCk7CiAgICAgRXhjZXB0aW9u
T3I8dm9pZD4gc2V0VmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZsb2F0LCBTVkdMZW5n
dGhUeXBlLCBTVkdMZW5ndGhNb2RlKTsKIAotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVl
QXNTdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVB
c1N0cmluZyhjb25zdCBTdHJpbmcmLCBTVkdMZW5ndGhNb2RlKTsKKyAgICBFeGNlcHRpb25Pcjx2
b2lkPiBzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBFeGNlcHRpb25P
cjx2b2lkPiBzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmLCBTVkdMZW5ndGhNb2Rl
KTsKIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKGNvbnN0
IFNWR0xlbmd0aENvbnRleHQmLCBTVkdMZW5ndGhUeXBlKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR051bWJlckxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdOdW1iZXJMaXN0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTnVtYmVyTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdOdW1iZXJMaXN0LmgiCisK
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZH
TnVtYmVyTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjbGVhckl0ZW1z
KCk7CisKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsm
XShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8gVGhlIHNwZWMgKHNlY3Rpb24gNC4x
KSBzdHJhbmdlbHkgZG9lc24ndCBhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2UuCisgICAgICAgIC8v
IFdlIG1pZ2h0IGNob29zZSB0byB2aW9sYXRlIHRoYXQgaW50ZW50aW9uYWxseS4KKyAgICAgICAg
d2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAg
ICAgICBhdXRvIG51bWJlciA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAg
ICAgaWYgKCFudW1iZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBhcHBl
bmQoU1ZHTnVtYmVyOjpjcmVhdGUoKm51bWJlcikpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
RklYTUU6IFNob3VsZCB0aGlzIGNsZWFySXRlbXMoKSBvbiBmYWlsdXJlIGxpa2UgU1ZHVHJhbnNm
b3JtTGlzdCBkb2VzPworCisgICAgICAgIHJldHVybiBwYXJzaW5nQnVmZmVyLmF0RW5kKCk7Cisg
ICAgfSk7Cit9CisKK1N0cmluZyBTVkdOdW1iZXJMaXN0Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIG51
bWJlciA6IG1faXRlbXMpIHsKKyAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG51bWJl
ci0+dmFsdWUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30K
KworfQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHJldmlzaW9uIDI2MzMz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDM5ICs1MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U1ZHTnVtYmVyTGlzdChvdGhlciwgYWNjZXNzKSk7CiAgICAgfQogCi0gICAgYm9vbCBwYXJzZShj
b25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAg
ICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRl
ZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5n
dGgoKTsKLQotICAgICAgICAvLyBUaGUgc3BlYyAoc2VjdGlvbiA0LjEpIHN0cmFuZ2VseSBkb2Vz
bid0IGFsbG93IGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgLy8gV2UgbWlnaHQgY2hvb3Nl
IHRvIHZpb2xhdGUgdGhhdCBpbnRlbnRpb25hbGx5LgotICAgICAgICB3aGlsZSAocHRyIDwgZW5k
KSB7Ci0gICAgICAgICAgICBhdXRvIG51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKLSAg
ICAgICAgICAgIGlmICghbnVtYmVyKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgYXBwZW5kKFNWR051bWJlcjo6Y3JlYXRlKCpudW1iZXIpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBwdHIgPT0gZW5kOwotICAgIH0KLQotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5n
KCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
LQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG51bWJlciA6IG1faXRlbXMpIHsKLSAgICAgICAg
ICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCcgJyk7Ci0KLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG51bWJlci0+dmFsdWUoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAg
ICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkg
Y29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzMzM1KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDxs
aW1pdHM+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MSw3ICs0Miw3IEBAIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGbG9hdFR5cGU+IHN0YXRpYyBpbmwKIC8vIGF0IGEgaGlnaGVyIHByZWNpc2lvbiBpbnRlcm5h
bGx5LCB3aXRob3V0IGFueSB1bm5lY2Vzc2FyeSBydW50aW1lIGNvc3Qgb3IgY29kZQogLy8gY29t
cGxleGl0eS4KIC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBzaGFyZWQvcmVwbGFjZWQgd2l0aCBudW1i
ZXIgcGFyc2luZyBpbiBXVEY/Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlw
ZW5hbWUgRmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBPcHRpb25hbDxGbG9hdFR5cGU+IGdlbmVy
aWNQYXJzZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXAgPSBTdWZmaXhTa2lwcGluZ1BvbGlj
eTo6U2tpcCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBGbG9h
dFR5cGUgPSBmbG9hdD4gc3RhdGljIE9wdGlvbmFsPEZsb2F0VHlwZT4gZ2VuZXJpY1BhcnNlTnVt
YmVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIsIFN1
ZmZpeFNraXBwaW5nUG9saWN5IHNraXAgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKIHsK
ICAgICBGbG9hdFR5cGUgbnVtYmVyID0gMDsKICAgICBGbG9hdFR5cGUgaW50ZWdlciA9IDA7CkBA
IC01MCwyNiArNTEsMjYgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVu
YQogICAgIEZsb2F0VHlwZSBleHBvbmVudCA9IDA7CiAgICAgaW50IHNpZ24gPSAxOwogICAgIGlu
dCBleHBzaWduID0gMTsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBzdGFydCA9IHB0cjsKKyAg
ICBhdXRvIHN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwogCiAgICAgLy8gcmVhZCB0
aGUgc2lnbgotICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnKycpCi0gICAgICAgIHB0cisr
OwotICAgIGVsc2UgaWYgKHB0ciA8IGVuZCAmJiAqcHRyID09ICctJykgewotICAgICAgICBwdHIr
KzsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBh
cnNpbmdCdWZmZXIgPT0gJysnKQorICAgICAgICArK3BhcnNpbmdCdWZmZXI7CisgICAgZWxzZSBp
ZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZm
ZXIgPT0gJy0nKSB7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKICAgICAgICAgc2lnbiA9IC0x
OwogICAgIH0gCiAgICAgCi0gICAgaWYgKHB0ciA9PSBlbmQgfHwgKCFpc0FTQ0lJRGlnaXQoKnB0
cikgJiYgKnB0ciAhPSAnLicpKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgKCFp
c0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpICYmICpwYXJzaW5nQnVmZmVyICE9ICcuJykpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyByZWFkIHRoZSBpbnRlZ2VyIHBh
cnQsIGJ1aWxkIHJpZ2h0LXRvLWxlZnQKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHJTdGFy
dEludFBhcnQgPSBwdHI7Ci0gICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBpc0FTQ0lJRGlnaXQoKnB0
cikpCi0gICAgICAgICsrcHRyOyAvLyBBZHZhbmNlIHRvIGZpcnN0IG5vbi1kaWdpdC4KKyAgICBh
dXRvIHB0clN0YXJ0SW50UGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICB3aGls
ZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgaXNBU0NJSURpZ2l0
KCpwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOyAvLyBBZHZhbmNlIHRv
IGZpcnN0IG5vbi1kaWdpdC4KIAotICAgIGlmIChwdHIgIT0gcHRyU3RhcnRJbnRQYXJ0KSB7Ci0g
ICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHB0clNjYW5JbnRQYXJ0ID0gcHRyIC0gMTsKKyAg
ICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpICE9IHB0clN0YXJ0SW50UGFydCkgeworICAg
ICAgICBhdXRvIHB0clNjYW5JbnRQYXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gMTsK
ICAgICAgICAgRmxvYXRUeXBlIG11bHRpcGxpZXIgPSAxOwogICAgICAgICB3aGlsZSAocHRyU2Nh
bkludFBhcnQgPj0gcHRyU3RhcnRJbnRQYXJ0KSB7CiAgICAgICAgICAgICBpbnRlZ2VyICs9IG11
bHRpcGxpZXIgKiBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KCoocHRyU2NhbkludFBhcnQtLSkgLSAn
MCcpOwpAQCAtODAsMzggKzgxLDM5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
LCB0eXBlbmEKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAg
aWYgKHB0ciA8IGVuZCAmJiAqcHRyID09ICcuJykgeyAvLyByZWFkIHRoZSBkZWNpbWFscwotICAg
ICAgICBwdHIrKzsKKyAgICAvLyByZWFkIHRoZSBkZWNpbWFscworICAgIGlmIChwYXJzaW5nQnVm
ZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAnLicpIHsK
KyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgICAgICAKICAgICAgICAgLy8gVGhlcmUgbXVz
dCBiZSBhIGxlYXN0IG9uZSBkaWdpdCBmb2xsb3dpbmcgdGhlIC4KLSAgICAgICAgaWYgKHB0ciA+
PSBlbmQgfHwgIWlzQVNDSUlEaWdpdCgqcHRyKSkKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIu
YXRFbmQoKSB8fCAhaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYm
IGlzQVNDSUlEaWdpdCgqcHRyKSkKLSAgICAgICAgICAgIGRlY2ltYWwgKz0gKCoocHRyKyspIC0g
JzAnKSAqIChmcmFjICo9IHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4xKSk7CisgICAgICAgIHdo
aWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGln
aXQoKnBhcnNpbmdCdWZmZXIpKQorICAgICAgICAgICAgZGVjaW1hbCArPSAoKihwYXJzaW5nQnVm
ZmVyKyspIC0gJzAnKSAqIChmcmFjICo9IHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4xKSk7CiAg
ICAgfQogCiAgICAgLy8gcmVhZCB0aGUgZXhwb25lbnQgcGFydAotICAgIGlmIChwdHIgIT0gc3Rh
cnQgJiYgcHRyICsgMSA8IGVuZCAmJiAoKnB0ciA9PSAnZScgfHwgKnB0ciA9PSAnRScpIAotICAg
ICAgICAmJiAocHRyWzFdICE9ICd4JyAmJiBwdHJbMV0gIT0gJ20nKSkgeyAKLSAgICAgICAgcHRy
Kys7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAhPSBzdGFydCAmJiBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCkgKyAxIDwgcGFyc2luZ0J1ZmZlci5lbmQoKSAmJiAoKnBhcnNpbmdC
dWZmZXIgPT0gJ2UnIHx8ICpwYXJzaW5nQnVmZmVyID09ICdFJykKKyAgICAgICAgJiYgKHBhcnNp
bmdCdWZmZXJbMV0gIT0gJ3gnICYmIHBhcnNpbmdCdWZmZXJbMV0gIT0gJ20nKSkgeworICAgICAg
ICArK3BhcnNpbmdCdWZmZXI7CiAKICAgICAgICAgLy8gcmVhZCB0aGUgc2lnbiBvZiB0aGUgZXhw
b25lbnQKLSAgICAgICAgaWYgKCpwdHIgPT0gJysnKQotICAgICAgICAgICAgcHRyKys7Ci0gICAg
ICAgIGVsc2UgaWYgKCpwdHIgPT0gJy0nKSB7Ci0gICAgICAgICAgICBwdHIrKzsKKyAgICAgICAg
aWYgKCpwYXJzaW5nQnVmZmVyID09ICcrJykKKyAgICAgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsK
KyAgICAgICAgZWxzZSBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJy0nKSB7CisgICAgICAgICAgICAr
K3BhcnNpbmdCdWZmZXI7CiAgICAgICAgICAgICBleHBzaWduID0gLTE7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIC8vIFRoZXJlIG11c3QgYmUgYW4gZXhwb25lbnQKLSAgICAgICAgaWYg
KHB0ciA+PSBlbmQgfHwgIWlzQVNDSUlEaWdpdCgqcHRyKSkKKyAgICAgICAgaWYgKHBhcnNpbmdC
dWZmZXIuYXRFbmQoKSB8fCAhaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBp
c0FTQ0lJRGlnaXQoKnB0cikpIHsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgqcGFyc2luZ0J1ZmZlcikpIHsKICAg
ICAgICAgICAgIGV4cG9uZW50ICo9IHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMTApOwotICAgICAg
ICAgICAgZXhwb25lbnQgKz0gKnB0ciAtICcwJzsKLSAgICAgICAgICAgIHB0cisrOworICAgICAg
ICAgICAgZXhwb25lbnQgKz0gKnBhcnNpbmdCdWZmZXIgLSAnMCc7CisgICAgICAgICAgICArK3Bh
cnNpbmdCdWZmZXI7CiAgICAgICAgIH0KICAgICAgICAgLy8gTWFrZSBzdXJlIGV4cG9uZW50IGlz
IHZhbGlkLgogICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShleHBvbmVudCkgfHwgZXhwb25lbnQg
PiBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46Om1heF9leHBvbmVudCkKQEAgLTEyOCw0
NCArMTMwLDQ0IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKICAg
ICBpZiAoIWlzVmFsaWRSYW5nZShudW1iZXIpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgaWYgKHN0YXJ0ID09IHB0cikKKyAgICBpZiAoc3RhcnQgPT0gcGFyc2luZ0J1ZmZl
ci5wb3NpdGlvbigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKHNr
aXAgPT0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApCi0gICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7CiAKICAgICByZXR1cm4gbnVtYmVyOwogfQog
Ci1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0IExD
aGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCitPcHRpb25hbDxmbG9hdD4gcGFy
c2VOdW1iZXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIsIFN1ZmZp
eFNraXBwaW5nUG9saWN5IHNraXApCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihw
dHIsIGVuZCwgc2tpcCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwYXJzaW5nQnVm
ZmVyLCBza2lwKTsKIH0KIAotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFy
KiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQorT3B0
aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBwYXJz
aW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQogewotICAgIHJldHVybiBnZW5l
cmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIHNraXApOworICAgIHJldHVybiBnZW5lcmljUGFyc2VO
dW1iZXIocGFyc2luZ0J1ZmZlciwgc2tpcCk7CiB9CiAKIE9wdGlvbmFsPGZsb2F0PiBwYXJzZU51
bWJlcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXAp
CiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVy
czsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwotICAgIGF1
dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKLSAgICBpZiAo
cHRyICE9IGVuZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtz
a2lwXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPGZsb2F0PiB7CisgICAgICAgIGF1
dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIsIHNraXApOworICAg
ICAgICBpZiAoIXBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSk7CiB9CiAKIC8vIG9ubHkg
dXNlZCB0byBwYXJzZSBsYXJnZUFyY0ZsYWcgYW5kIHN3ZWVwRmxhZyB3aGljaCBtdXN0IGJlIGEg
IjAiIG9yICIxIgogLy8gYW5kIG1pZ2h0IG5vdCBoYXZlIGFueSB3aGl0ZXNwYWNlL2NvbW1hIGFm
dGVyIGl0Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8Ym9vbD4g
Z2VuZXJpY1BhcnNlQXJjRmxhZyhjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFy
YWN0ZXJUeXBlKiBlbmQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9u
YWw8Ym9vbD4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChwdHIgPj0gZW5kKQorICAgIGlmIChw
YXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBjb25zdCBDaGFyYWN0ZXJUeXBlIGZsYWdDaGFyID0gKnB0cisrOworICAgIGNvbnN0IENoYXJh
Y3RlclR5cGUgZmxhZ0NoYXIgPSAqcGFyc2luZ0J1ZmZlcjsKKyAgICArK3BhcnNpbmdCdWZmZXI7
CiAKICAgICBib29sIGZsYWc7CiAgICAgaWYgKGZsYWdDaGFyID09ICcwJykKQEAgLTE3NSwxOSAr
MTc3LDE5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb24KICAgICBl
bHNlCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JE
ZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7CiAgICAgCiAgICAgcmV0dXJuIGZsYWc7CiB9CiAKLU9w
dGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIq
IGVuZCkKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVyPExD
aGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhw
dHIsIGVuZCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocGFyc2luZ0J1ZmZlcik7
CiB9CiAKLU9wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29u
c3QgVUNoYXIqIGVuZCkKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5n
QnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNl
QXJjRmxhZyhwdHIsIGVuZCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocGFyc2lu
Z0J1ZmZlcik7CiB9CiAKIE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZU51
bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKQEAgLTE5NSwyNSAr
MTk3LDIzIEBAIE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZU4KICAgICBp
ZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAg
Y29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGF1dG8geCA9
IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICBpZiAoIXgpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmlu
ZywgW10oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0Pj4geworICAgICAgICBhdXRvIHggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAg
ICAgICAgaWYgKCF4KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlm
IChjdXIgPT0gZW5kKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp4KTsKKyAg
ICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcigqeCwgKngpOwogCi0gICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQs
IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Ci0gICAgaWYgKCF5KQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihwYXJzaW5n
QnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAoIXkp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKGN1ciAhPSBlbmQp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICghcGFyc2luZ0J1ZmZl
ci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcigqeCwgKnkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
KngsICp5KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChj
b25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCkBAIC0yMjEsMTE3ICsyMjEsMTEzIEBAIE9wdGlvbmFs
PEZsb2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3QKICAgICBpZiAoc3RyaW5nLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVD
aGFyKiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9
IGN1ciArIHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGN1ciwgZW5kKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gV1RG
OjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIHBhcnNpbmdCdWZmZXIp
IC0+IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHsKKyAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdT
cGFjZXMocGFyc2luZ0J1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXIsIGVuZCk7Ci0gICAgaWYgKCFw
b2ludCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBwb2ludCA9
IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKCFwb2ludCkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAvLyBEaXNhbGxvdyBhbnl0aGlu
ZyBleGNlcHQgc3BhY2VzIGF0IHRoZSBlbmQuCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1
ciwgZW5kKTsKLSAgICAKLSAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgIC8vIERpc2FsbG93IGFu
eXRoaW5nIGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4KKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHBvaW50Owor
ICAgIH0pOwogfQogCiBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJpbmdW
aWV3JiBzdHJpbmcpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcu
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0
aCgpOwotICAgIAotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7Ci0gICAgCi0g
ICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAgIGlmICgheCkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7
Ci0gICAgaWYgKCF5KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gd2lk
dGggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7Ci0gICAgaWYgKCF3aWR0aCkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5k
LCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwotICAgIGlmICghaGVpZ2h0KQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJz
Rm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8Rmxv
YXRSZWN0PiB7CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsK
KyAgICAgICAgCisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOwor
ICAgICAgICBpZiAoIXgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICBhdXRvIHkgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKCF5KQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byB3aWR0aCA9IHBh
cnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAoIXdpZHRoKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBwYXJzZU51bWJl
cihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAg
ICBpZiAoIWhlaWdodCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0IHsgKngsICp5LCAqd2lkdGgsICpoZWlnaHQgfTsKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCB7ICp4LCAqeSwgKndpZHRoLCAqaGVpZ2h0IH07CisgICAgfSk7CiB9CiAK
IE9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nVmll
dyYgc3RyaW5nKQogewogICAgIC8vIEZJWE1FOiBQYXJzaW5nIGVycm9yIGRldGVjdGlvbiBpcyBt
aXNzaW5nLgogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwot
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7Ci0KLSAgICBIYXNoU2V0PFN0cmlu
Zz4gdmFsdWVzOwotCi0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICAvLyBMZWFkaW5n
IGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRlIHNwYWNlIGJlZm9yZSBhbmQgYWZ0
ZXIgc2VwYXJhdG9ycywgd2lsbCBiZSBpZ25vcmVkLgotICAgICAgICBjb25zdCBVQ2hhciogaW5w
dXRTdGFydCA9IHB0cjsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJykK
LSAgICAgICAgICAgICsrcHRyOworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFy
c2luZyhzdHJpbmcsIFtdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gSGFzaFNldDxTdHJpbmc+IHsK
KyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwogCi0gICAgICAg
IGlmIChwdHIgPT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBIYXNo
U2V0PFN0cmluZz4gdmFsdWVzOwogCi0gICAgICAgIC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhl
IDsgdG8gaWdub3JlIGFueSB3aGl0ZXNwYWNlCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dEVu
ZCA9IHB0ciAtIDE7Ci0gICAgICAgIHdoaWxlIChpbnB1dFN0YXJ0IDwgaW5wdXRFbmQgJiYgaXNT
VkdTcGFjZSgqaW5wdXRFbmQpKQotICAgICAgICAgICAgLS1pbnB1dEVuZDsKKyAgICAgICAgd2hp
bGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAg
ICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRlIHNwYWNlIGJl
Zm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdG9ycywgd2lsbCBiZSBpZ25vcmVkLgorICAgICAgICAgICAg
YXV0byBpbnB1dFN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwogCi0gICAgICAgIHZh
bHVlcy5hZGQoU3RyaW5nKGlucHV0U3RhcnQsIGlucHV0RW5kIC0gaW5wdXRTdGFydCArIDEpKTsK
LSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQsICcsJyk7
Ci0gICAgfQorICAgICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZmZXIsICcsJyk7CisKKyAg
ICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gaW5wdXRTdGFydCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gd2FsayBiYWNrd2FyZHMgZnJv
bSB0aGUgOyB0byBpZ25vcmUgYW55IHdoaXRlc3BhY2UKKyAgICAgICAgICAgIGF1dG8gaW5wdXRF
bmQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSAxOworICAgICAgICAgICAgd2hpbGUgKGlu
cHV0U3RhcnQgPCBpbnB1dEVuZCAmJiBpc1NWR1NwYWNlKCppbnB1dEVuZCkpCisgICAgICAgICAg
ICAgICAgLS1pbnB1dEVuZDsKKworICAgICAgICAgICAgdmFsdWVzLmFkZChTdHJpbmcoaW5wdXRT
dGFydCwgaW5wdXRFbmQgLSBpbnB1dFN0YXJ0ICsgMSkpOworICAgICAgICAgICAgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlciwgJywnKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdmFsdWVzOworICAgIH0pOwogCi0gICAgcmV0dXJuIHZhbHVlczsKIH0K
IAotc3RhdGljIE9wdGlvbmFsPFVuaWNvZGVSYW5nZT4gcGFyc2VVbmljb2RlUmFuZ2UoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY29kZVJh
bmdlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlcikKIHsK
LSAgICBpZiAobGVuZ3RoIDwgMiB8fCBjaGFyYWN0ZXJzWzBdICE9ICdVJyB8fCBjaGFyYWN0ZXJz
WzFdICE9ICcrJykKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBwYXJzaW5nQnVmZmVyLmxlbmd0aFJl
bWFpbmluZygpOworICAgIGlmIChsZW5ndGggPCAyIHx8IHBhcnNpbmdCdWZmZXJbMF0gIT0gJ1Un
IHx8IHBhcnNpbmdCdWZmZXJbMV0gIT0gJysnKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIAorCisgICAgcGFyc2luZ0J1ZmZlci5hZHZhbmNlQnkoMik7CisKICAgICAvLyBQYXJz
ZSB0aGUgc3RhcnRpbmcgaGV4IG51bWJlciAob3IgaXRzIHByZWZpeCkuCiAgICAgdW5zaWduZWQg
c3RhcnRSYW5nZSA9IDA7CiAgICAgdW5zaWduZWQgc3RhcnRMZW5ndGggPSAwOwogCi0gICAgY29u
c3QgVUNoYXIqIHB0ciA9IGNoYXJhY3RlcnMgKyAyOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBj
aGFyYWN0ZXJzICsgbGVuZ3RoOwotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgaWYg
KCFpc0FTQ0lJSGV4RGlnaXQoKnB0cikpCisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpwYXJz
aW5nQnVmZmVyKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICArK3N0YXJ0TGVuZ3RoOwog
ICAgICAgICBpZiAoc3RhcnRMZW5ndGggPiA2KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICAgICAgc3RhcnRSYW5nZSA9IChzdGFydFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhl
eFZhbHVlKCpwdHIpOwotICAgICAgICArK3B0cjsKKyAgICAgICAgc3RhcnRSYW5nZSA9IChzdGFy
dFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKCpwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAg
KytwYXJzaW5nQnVmZmVyOwogICAgIH0KIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiByYW5n
ZXMgc2VwYXJhdGVkIGJ5ICItIiBzaWduLgotICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5n
dGggJiYgKnB0ciA9PSAnLScpIHsKKyAgICBpZiAoMiArIHN0YXJ0TGVuZ3RoIDwgbGVuZ3RoICYm
ICpwYXJzaW5nQnVmZmVyID09ICctJykgewogICAgICAgICBpZiAoIXN0YXJ0TGVuZ3RoKQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCiAgICAgICAgIC8vIFBhcnNl
IHRoZSBlbmRpbmcgaGV4IG51bWJlciAob3IgaXRzIHByZWZpeCkuCiAgICAgICAgIHVuc2lnbmVk
IGVuZFJhbmdlID0gMDsKICAgICAgICAgdW5zaWduZWQgZW5kTGVuZ3RoID0gMDsKLSAgICAgICAg
KytwdHI7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGlmICghaXNB
U0NJSUhleERpZ2l0KCpwdHIpKQorICAgICAgICArK3BhcnNpbmdCdWZmZXI7CisgICAgICAgIHdo
aWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAg
ICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKnBhcnNpbmdCdWZmZXIpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgKytlbmRMZW5ndGg7CiAgICAgICAgICAgICBpZiAoZW5kTGVu
Z3RoID4gNikKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAg
ICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7Ci0g
ICAgICAgICAgICArK3B0cjsKKyAgICAgICAgICAgIGVuZFJhbmdlID0gKGVuZFJhbmdlIDw8IDQp
IHwgdG9BU0NJSUhleFZhbHVlKCpwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgICsrcGFyc2lu
Z0J1ZmZlcjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFlbmRMZW5ndGgpCkBA
IC0zNDUsMTUgKzM0MSwxNSBAQCBzdGF0aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBwYXJzZVVu
aWNvCiAgICAgCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIG9mIGEgbnVtYmVyIHdpdGggc29tZSBv
cHRpb25hbCB0cmFpbGluZyBxdWVzdGlvbiBtYXJrcy4KICAgICB1bnNpZ25lZCBlbmRSYW5nZSA9
IHN0YXJ0UmFuZ2U7Ci0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICBpZiAoKnB0ciAh
PSAnPycpCisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygp
KSB7CisgICAgICAgIGlmICgqcGFyc2luZ0J1ZmZlciAhPSAnPycpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgKytzdGFydExlbmd0aDsKICAgICAgICAgaWYgKHN0YXJ0TGVuZ3RoID4gNikK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIHN0YXJ0UmFuZ2UgPDw9
IDQ7CiAgICAgICAgIGVuZFJhbmdlID0gKGVuZFJhbmdlIDw8IDQpIHwgMHhGOwotICAgICAgICAr
K3B0cjsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgIH0KICAgICAKICAgICBpZiAoIXN0
YXJ0TGVuZ3RoKQpAQCAtMzY5LDUzICszNjUsNTEgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNv
ZGVSYW5nZXMsIEhhc2hTZQogewogICAgIC8vIEZJWE1FOiBQYXJzaW5nIGVycm9yIGRldGVjdGlv
biBpcyBtaXNzaW5nLgogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcu
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0
aCgpOwotCi0gICAgVW5pY29kZVJhbmdlcyByYW5nZUxpc3Q7Ci0gICAgSGFzaFNldDxTdHJpbmc+
IHN0cmluZ0xpc3Q7Ci0KLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIGNvbnN0IFVD
aGFyKiBpbnB1dFN0YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIg
IT0gJywnKQotICAgICAgICAgICAgKytwdHI7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3Rl
cnNGb3JQYXJzaW5nKHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBzdGQ6OnBhaXI8
VW5pY29kZVJhbmdlcywgSGFzaFNldDxTdHJpbmc+PiB7CisgICAgICAgIFVuaWNvZGVSYW5nZXMg
cmFuZ2VMaXN0OworICAgICAgICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nTGlzdDsKIAotICAgICAg
ICBpZiAocHRyID09IGlucHV0U3RhcnQpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgd2hp
bGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAg
ICBhdXRvIGlucHV0U3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAKLSAgICAgICAg
Ly8gVHJ5IHRvIHBhcnNlIHVuaWNvZGUgcmFuZ2UgZmlyc3QKLSAgICAgICAgaWYgKGF1dG8gcmFu
Z2UgPSBwYXJzZVVuaWNvZGVSYW5nZShpbnB1dFN0YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSkKLSAg
ICAgICAgICAgIHJhbmdlTGlzdC5hcHBlbmQoV1RGTW92ZSgqcmFuZ2UpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgc3RyaW5nTGlzdC5hZGQoU3RyaW5nKGlucHV0U3RhcnQsIHB0ciAtIGlu
cHV0U3RhcnQpKTsKLSAgICAgICAgKytwdHI7Ci0gICAgfQorICAgICAgICAgICAgc2tpcFVudGls
KHBhcnNpbmdCdWZmZXIsICcsJyk7CisKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLnBv
c2l0aW9uKCkgPT0gaW5wdXRTdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgLy8gVHJ5IHRvIHBhcnNlIHVuaWNvZGUgcmFuZ2UgZmlyc3QKKyAgICAgICAgICAgIGlm
IChhdXRvIHJhbmdlID0gcGFyc2VVbmljb2RlUmFuZ2UoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGlu
cHV0U3RhcnQsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSB9KSkKKyAgICAgICAgICAgICAgICBy
YW5nZUxpc3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgc3RyaW5nTGlzdC5hZGQoU3RyaW5nKGlucHV0U3RhcnQsIHBhcnNpbmdCdWZm
ZXIucG9zaXRpb24oKSAtIGlucHV0U3RhcnQpKTsKKyAgICAgICAgICAgICsrcGFyc2luZ0J1ZmZl
cjsKKyAgICAgICAgfQogCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJhbmdlTGlzdCwgc3Ry
aW5nTGlzdCk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihXVEZNb3ZlKHJhbmdlTGlz
dCksIFdURk1vdmUoc3RyaW5nTGlzdCkpOworICAgIH0pOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IGdlbmVyaWNQYXJz
ZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJhY3Rl
clR5cGUqIGVuZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0
aW9uYWw8RmxvYXRQb2ludD4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJzaW5nQnVm
ZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGF1dG8geCA9IHBhcnNl
TnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1
ZmZlcik7CiAgICAgaWYgKCF4KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
YXV0byB5ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICBhdXRvIHkgPSBwYXJzZU51
bWJlcihwYXJzaW5nQnVmZmVyKTsKICAgICBpZiAoIXkpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICByZXR1cm4gRmxvYXRQb2ludCB7ICp4LCAqeSB9OwogfQogCi1PcHRpb25h
bDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25z
dCBMQ2hhciogZW5kKQorT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KFN0cmlu
Z1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBnZW5l
cmljUGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJz
ZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBh
cnNlRmxvYXRQb2ludChjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpCitP
cHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5nUGFyc2luZ0J1ZmZlcjxV
Q2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZUZsb2F0UG9p
bnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChwYXJz
aW5nQnVmZmVyKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0
aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGls
aXRpZXMuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNl
clV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw5ICsyMSw5IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiB0eXBlZGVmIHN0ZDo6cGFpcjxVQ2hhcjMyLCBVQ2hhcjMyPiBVbmljb2RlUmFu
Z2U7CiB0eXBlZGVmIFZlY3RvcjxVbmljb2RlUmFuZ2U+IFVuaWNvZGVSYW5nZXM7CkBAIC0zOCwy
MCArMzgsMjAgQEAgZW51bSBjbGFzcyBTdWZmaXhTa2lwcGluZ1BvbGljeSB7CiAgICAgU2tpcAog
fTsKIAotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFyKiYgY3VycmVudCwg
Y29uc3QgTENoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1Bv
bGljeTo6U2tpcCk7Ci1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBj
dXJyZW50LCBjb25zdCBVQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNr
aXBwaW5nUG9saWN5OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihTdHJpbmdQ
YXJzaW5nQnVmZmVyPExDaGFyPiYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBp
bmdQb2xpY3k6OlNraXApOworT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKFN0cmluZ1BhcnNp
bmdCdWZmZXI8VUNoYXI+JiwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1Bv
bGljeTo6U2tpcCk7CiBPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgU3RyaW5nVmll
dyYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApOwog
CiBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51
bWJlcihjb25zdCBTdHJpbmdWaWV3Jik7CiAKLU9wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhj
b25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpOwotT3B0aW9uYWw8Ym9vbD4g
cGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCk7CitP
cHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsK
K09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYp
OwogCiBPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZVBvaW50KGNvbnN0IFN0cmluZ1ZpZXcmKTsK
IE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNvbnN0IFN0cmluZ1ZpZXcmKTsKIAotT3B0
aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwg
Y29uc3QgTENoYXIqIGVuZCk7Ci1PcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQo
Y29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kKTsKK09wdGlvbmFsPEZsb2F0
UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworT3B0
aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNo
YXI+Jik7CiAKIE9wdGlvbmFsPHN0ZDo6cGFpcjxVbmljb2RlUmFuZ2VzLCBIYXNoU2V0PFN0cmlu
Zz4+PiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmKTsKIE9wdGlv
bmFsPEhhc2hTZXQ8U3RyaW5nPj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nVmlldyYpOwpA
QCAtNjQsMTMgKzY0LDIzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0
ZXgKICAgICByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09
ICdccic7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBi
b29sIGlzU1ZHU3BhY2VPckNvbW1hKENoYXJhY3RlclR5cGUgYykKK3sKKyAgICByZXR1cm4gaXNT
VkdTcGFjZShjKSB8fCBjID09ICcsJzsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNvbnN0IENoYXJhY3Rl
clR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKLSAgICB3aGlsZSAocHRy
IDwgZW5kICYmIGlzU1ZHU3BhY2UoKnB0cikpCi0gICAgICAgIHB0cisrOworICAgIHNraXBXaGls
ZTxDaGFyYWN0ZXJUeXBlLCBpc1NWR1NwYWNlPihwdHIsIGVuZCk7CiAgICAgcmV0dXJuIHB0ciA8
IGVuZDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJv
b2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4mIGNoYXJhY3RlcnMpCit7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzU1ZHU3Bh
Y2U+KGNoYXJhY3RlcnMpOworICAgIHJldHVybiBjaGFyYWN0ZXJzLmhhc0NoYXJhY3RlcnNSZW1h
aW5pbmcoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHBy
IGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjaGFyIGRlbGltaXRlciA9ICcsJykK
IHsKICAgICBpZiAocHRyIDwgZW5kICYmICFpc1NWR1NwYWNlKCpwdHIpICYmICpwdHIgIT0gZGVs
aW1pdGVyKQpAQCAtODQsMjggKzk0LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGNvbnN0ZXgKICAgICByZXR1cm4gcHRyIDwgZW5kOwogfQogCi1jb25zdGV4cHIgYm9vbCBz
a2lwU3RyaW5nKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hh
ciogbmFtZSwgaW50IGxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNv
bnN0ZXhwciBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKFN0cmluZ1BhcnNp
bmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGNoYXJhY3RlcnMsIGNoYXIgZGVsaW1pdGVyID0gJywn
KQogewotICAgIGlmIChlbmQgLSBwdHIgPCBsZW5ndGgpCisgICAgaWYgKGNoYXJhY3RlcnMuaGFz
Q2hhcmFjdGVyc1JlbWFpbmluZygpICYmICFpc1NWR1NwYWNlKCpjaGFyYWN0ZXJzKSAmJiAqY2hh
cmFjdGVycyAhPSBkZWxpbWl0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobWVt
Y21wKG5hbWUsIHB0ciwgc2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBwdHIgKz0gbGVuZ3RoOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0
ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KLWlubGluZSBib29sIHNraXBTdHJpbmcoY29uc3Qg
VUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgKCZzdHIpW2NoYXJhY3Rl
ckNvdW50XSkKLXsKLSAgICBpbnQgbGVuZ3RoID0gY2hhcmFjdGVyQ291bnQgLSAxOwotICAgIGlm
IChlbmQgLSBwdHIgPCBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChwdHJbaV0gIT0gc3RyW2ld
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChza2lwT3B0aW9uYWxTVkdTcGFj
ZXMoY2hhcmFjdGVycykpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1Jl
bWFpbmluZygpICYmICpjaGFyYWN0ZXJzID09IGRlbGltaXRlcikgeworICAgICAgICAgICAgY2hh
cmFjdGVycysrOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNoYXJhY3RlcnMp
OworICAgICAgICB9CiAgICAgfQotICAgIHB0ciArPSBsZW5ndGg7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJ
KHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5LDExICsxOSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKIAogY2xhc3MgU1ZHUGF0aFNvdXJjZSB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHUGF0aFNvdXJjZSk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNl
LmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJp
bmdTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIgogCi0jaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zMiwzMyArMzEsMzAgQEAgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6U1ZH
UGF0aFN0cmluZ1NvdXJjZQogewogICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7CiAKLSAg
ICBpZiAobV9pczhCaXRTb3VyY2UpIHsKLSAgICAgICAgbV9jdXJyZW50Lm1fY2hhcmFjdGVyOCA9
IHN0cmluZy5jaGFyYWN0ZXJzOCgpOwotICAgICAgICBtX2VuZC5tX2NoYXJhY3RlcjggPSBtX2N1
cnJlbnQubV9jaGFyYWN0ZXI4ICsgc3RyaW5nLmxlbmd0aCgpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG1fY3VycmVudC5tX2NoYXJhY3RlcjE2ID0gc3RyaW5nLmNoYXJhY3RlcnMxNigpOwotICAg
ICAgICBtX2VuZC5tX2NoYXJhY3RlcjE2ID0gbV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYgKyBzdHJp
bmcubGVuZ3RoKCk7Ci0gICAgfQorICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKKyAgICAgICAgbV9w
YXJzaW5nQnVmZmVyOCA9IHsgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9
OworICAgIGVsc2UKKyAgICAgICAgbV9wYXJzaW5nQnVmZmVyMTYgPSB7IHN0cmluZy5jaGFyYWN0
ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpIH07CiB9CiAKIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJj
ZTo6aGFzTW9yZURhdGEoKSBjb25zdAogewogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAg
ICAgcmV0dXJuIG1fY3VycmVudC5tX2NoYXJhY3RlcjggPCBtX2VuZC5tX2NoYXJhY3Rlcjg7Ci0g
ICAgcmV0dXJuIG1fY3VycmVudC5tX2NoYXJhY3RlcjE2IDwgbV9lbmQubV9jaGFyYWN0ZXIxNjsK
KyAgICAgICAgcmV0dXJuIG1fcGFyc2luZ0J1ZmZlcjguaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygp
OworICAgIHJldHVybiBtX3BhcnNpbmdCdWZmZXIxNi5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCk7
CiB9CiAKIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bW92ZVRvTmV4dFRva2VuKCkKIHsKICAg
ICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBza2lwT3B0aW9uYWxTVkdTcGFj
ZXMobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1
cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5t
X2NoYXJhY3RlcjE2KTsKKyAgICAgICAgcmV0dXJuIHNraXBPcHRpb25hbFNWR1NwYWNlcyhtX3Bh
cnNpbmdCdWZmZXI4KTsKKyAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1fcGFyc2lu
Z0J1ZmZlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRp
YyBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gbmV4dENvbW1hbmRIZWxwZXIoY29uc3QgQ2hhcmFj
dGVyVHlwZSomIGN1cnJlbnQsIFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5
cGU+IG5leHRDb21tYW5kSGVscGVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
IHBhcnNpbmdCdWZmZXIsIFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkKIHsKICAgICAv
LyBDaGVjayBmb3IgcmVtYWluaW5nIGNvb3JkaW5hdGVzIGluIHRoZSBjdXJyZW50IGNvbW1hbmQu
Ci0gICAgaWYgKCgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0nIHx8ICpjdXJyZW50
ID09ICcuJyB8fCBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQpKQorICAgIGlmICgoKnBhcnNpbmdCdWZm
ZXIgPT0gJysnIHx8ICpwYXJzaW5nQnVmZmVyID09ICctJyB8fCAqcGFyc2luZ0J1ZmZlciA9PSAn
LicgfHwgaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgJiYgcHJldmlvdXND
b21tYW5kICE9IFBhdGhTZWdDbG9zZVBhdGgpIHsKICAgICAgICAgaWYgKHByZXZpb3VzQ29tbWFu
ZCA9PSBQYXRoU2VnTW92ZVRvQWJzKQogICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9B
YnM7CkBAIC03MywxNTAgKzY5LDEzOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gc3RhdGljCiBTVkdQYXRoU2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29tbWFu
ZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpCiB7CiAgICAgaWYgKG1faXM4Qml0U291
cmNlKSB7Ci0gICAgICAgIGlmIChhdXRvIG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgcHJldmlvdXNDb21tYW5kKSkKKyAgICAgICAgaWYgKGF1
dG8gbmV4dENvbW1hbmQgPSBuZXh0Q29tbWFuZEhlbHBlcihtX3BhcnNpbmdCdWZmZXI4LCBwcmV2
aW91c0NvbW1hbmQpKQogICAgICAgICAgICAgcmV0dXJuICpuZXh0Q29tbWFuZDsKICAgICB9IGVs
c2UgewotICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjE2LCBwcmV2aW91c0NvbW1hbmQpKQorICAgICAgICBpZiAoYXV0
byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fcGFyc2luZ0J1ZmZlcjE2LCBwcmV2
aW91c0NvbW1hbmQpKQogICAgICAgICAgICAgcmV0dXJuICpuZXh0Q29tbWFuZDsKICAgICB9CiAK
ICAgICByZXR1cm4gKnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBTVkdQYXRoU2VnVHlwZSBwYXJzZVNWR1NlZ21lbnRU
eXBlSGVscGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50KQordGVtcGxhdGU8dHlwZW5h
bWUgRj4gZGVjbHR5cGUoYXV0bykgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2UoRiYmIGZ1bmN0
b3IpCiB7Ci0gICAgc3dpdGNoICgqKGN1cnJlbnQrKykpIHsKLSAgICBjYXNlICdaJzoKLSAgICBj
YXNlICd6JzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDbG9zZVBhdGg7Ci0gICAgY2FzZSAnTSc6
Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOwotICAgIGNhc2UgJ20nOgotICAgICAg
ICByZXR1cm4gUGF0aFNlZ01vdmVUb1JlbDsKLSAgICBjYXNlICdMJzoKLSAgICAgICAgcmV0dXJu
IFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAgY2FzZSAnbCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2Vn
TGluZVRvUmVsOwotICAgIGNhc2UgJ0MnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9D
dWJpY0FiczsKLSAgICBjYXNlICdjJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3Vi
aWNSZWw7Ci0gICAgY2FzZSAnUSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRy
YXRpY0FiczsKLSAgICBjYXNlICdxJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVh
ZHJhdGljUmVsOwotICAgIGNhc2UgJ0EnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0FyY0FiczsK
LSAgICBjYXNlICdhJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNSZWw7Ci0gICAgY2FzZSAn
SCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFiczsKLSAgICBjYXNl
ICdoJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOwotICAgIGNh
c2UgJ1YnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOwotICAgIGNh
c2UgJ3YnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsUmVsOwotICAgIGNh
c2UgJ1MnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFiczsKLSAg
ICBjYXNlICdzJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWw7
Ci0gICAgY2FzZSAnVCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Nt
b290aEFiczsKLSAgICBjYXNlICd0JzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoUmVsOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnVW5r
bm93bjsKLSAgICB9CisgICAgaWYgKG1faXM4Qml0U291cmNlKQorICAgICAgICByZXR1cm4gZnVu
Y3RvcihtX3BhcnNpbmdCdWZmZXI4KTsKKyAgICByZXR1cm4gZnVuY3RvcihtX3BhcnNpbmdCdWZm
ZXIxNik7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBTVkdQYXRoU3RyaW5nU291cmNl
OjpwYXJzZVNWR1NlZ21lbnRUeXBlKCkKIHsKLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAg
ICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgpOwotICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2KTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4g
U1ZHUGF0aFNlZ1R5cGUgeworICAgICAgICBhdXRvIGNoYXJhY3RlciA9ICpwYXJzaW5nQnVmZmVy
OworICAgICAgICBwYXJzaW5nQnVmZmVyKys7CisgICAgICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7
CisgICAgICAgIGNhc2UgJ1onOgorICAgICAgICBjYXNlICd6JzoKKyAgICAgICAgICAgIHJldHVy
biBQYXRoU2VnQ2xvc2VQYXRoOworICAgICAgICBjYXNlICdNJzoKKyAgICAgICAgICAgIHJldHVy
biBQYXRoU2VnTW92ZVRvQWJzOworICAgICAgICBjYXNlICdtJzoKKyAgICAgICAgICAgIHJldHVy
biBQYXRoU2VnTW92ZVRvUmVsOworICAgICAgICBjYXNlICdMJzoKKyAgICAgICAgICAgIHJldHVy
biBQYXRoU2VnTGluZVRvQWJzOworICAgICAgICBjYXNlICdsJzoKKyAgICAgICAgICAgIHJldHVy
biBQYXRoU2VnTGluZVRvUmVsOworICAgICAgICBjYXNlICdDJzoKKyAgICAgICAgICAgIHJldHVy
biBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOworICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAg
IHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljUmVsOworICAgICAgICBjYXNlICdRJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKKyAgICAgICAgY2FzZSAn
cSc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7CisgICAg
ICAgIGNhc2UgJ0EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNBYnM7CisgICAgICAg
IGNhc2UgJ2EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNSZWw7CisgICAgICAgIGNh
c2UgJ0gnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOwor
ICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpv
bnRhbFJlbDsKKyAgICAgICAgY2FzZSAnVic6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xp
bmVUb1ZlcnRpY2FsQWJzOworICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgIHJldHVybiBQ
YXRoU2VnTGluZVRvVmVydGljYWxSZWw7CisgICAgICAgIGNhc2UgJ1MnOgorICAgICAgICAgICAg
cmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnM7CisgICAgICAgIGNhc2UgJ3MnOgor
ICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWw7CisgICAgICAg
IGNhc2UgJ1QnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoQWJzOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3Vy
dmVUb1F1YWRyYXRpY1Ntb290aFJlbDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBQYXRoU2VnVW5rbm93bjsKKyAgICAgICAgfQorICAgIH0pOwogfQogCiBPcHRpb25hbDxT
VkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1v
dmVUb1NlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJl
bnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4gewotICAgICAg
ICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAg
cmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPE1vdmVUb1Nl
Z21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJz
aW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICBNb3ZlVG9TZWdtZW50IHNlZ21lbnQ7
CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7CiAg
ICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2Up
Ci0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9j
aGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBt
X2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6TGluZVRvU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50
KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBh
dXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB0YXJn
ZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBwYXJz
ZShbXShhdXRvJiBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiB7Cisg
ICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7
CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvU2VnbWVudCBzZWdtZW50OwogICAgICAgICBz
ZWdtZW50LnRhcmdldFBvaW50ID0gV1RGTW92ZSgqdGFyZ2V0UG9pbnQpOwogICAgICAgICByZXR1
cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICBy
ZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7
Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFy
YWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hv
cml6b250YWxTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250
YWxTZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50
LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxTZWdtZW50PiB7
Ci0gICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJu
IHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPExpbmVUb0hvcml6b250
YWxTZWdtZW50PiB7CisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIp
OwogICAgICAgICBpZiAoIXgpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICAKICAgICAgICAgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQgc2VnbWVudDsKICAgICAgICAg
c2VnbWVudC54ID0gKng7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBp
ZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hh
cmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVu
dC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0
aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdtZW50PiBTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIg
PSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxM
aW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3Vy
cmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4g
T3B0aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50PiB7CisgICAgICAgIGF1dG8geSA9IHBhcnNl
TnVtYmVyKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXkpCiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvVmVydGljYWxTZWdtZW50
IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21lbnQueSA9ICp5OwogICAgICAgICByZXR1cm4gc2VnbWVu
dDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0
dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7
CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ21l
bnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCiB7Ci0g
ICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5k
KSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8gcG9pbnQx
ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1
dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHsKKyAg
ICAgICAgYXV0byBwb2ludDEgPSBwYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAgICAg
ICAgIGlmICghcG9pbnQxKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
ICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAg
ICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAg
aWYgKCFwb2ludDIpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAg
IGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAg
ICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAg
ICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKQEAgLTIyNSwyMSArMjA5LDE3IEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9D
dWJpY1NlZ20KICAgICAgICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOwogICAgICAgICBzZWdt
ZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsK
LSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVy
KG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJu
IGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7Cisg
ICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Ntb290aFNl
Z21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVu
dCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3Qg
YXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiB7Ci0gICAg
ICAgIGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0
dXJuIHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byBwb2ludDIgPSBwYXJzZUZsb2F0UG9pbnQo
cGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghcG9pbnQyKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBv
aW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0
UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCkBAIC0yNDcsMjEgKzIyNywxNyBAQCBPcHRpb25h
bDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vCiAgICAgICAgIHNlZ21lbnQucG9pbnQy
ID0gKnBvaW50MjsKICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsK
ICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmIChtX2lzOEJpdFNvdXJj
ZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5t
X2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYs
IG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291
cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VD
dXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBh
dXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudD4gewotICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChjdXJy
ZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShbXShhdXRvJiBwYXJzaW5nQnVmZmVyKSAtPiBP
cHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MSA9
IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFwb2ludDEpCiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8gdGFyZ2V0UG9p
bnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byB0YXJnZXRQ
b2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJn
ZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAgLTI2OSw0OSAr
MjQ1LDQxIEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWMKICAgICAg
ICAgc2VnbWVudC5wb2ludDEgPSAqcG9pbnQxOwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50
ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAg
aWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJl
bnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9w
dGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsK
LSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBl
bmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiB7Ci0gICAgICAg
IGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICBy
ZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8Q3VydmVUb1F1
YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNl
RmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgQ3VydmVUb1F1YWRyYXRp
Y1Ntb290aFNlZ21lbnQgc2VnbWVudDsKICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0
YXJnZXRQb2ludDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmICht
X2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0
ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25h
bDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNl
QXJjVG9TZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJy
ZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gewotICAgICAg
ICBhdXRvIHJ4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2Uo
W10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8QXJjVG9TZWdtZW50PiB7CisgICAg
ICAgIGF1dG8gcnggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFy
eCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1dG8gcnkgPSBw
YXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHJ5ID0gcGFyc2VOdW1iZXIo
cGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghcnkpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotICAgICAgICBhdXRvIGFuZ2xlID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5k
KTsKKyAgICAgICAgYXV0byBhbmdsZSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOwogICAg
ICAgICBpZiAoIWFuZ2xlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAg
ICAgYXV0byBsYXJnZUFyYyA9IHBhcnNlQXJjRmxhZyhjdXJyZW50LCBlbmQpOworICAgICAgICBh
dXRvIGxhcmdlQXJjID0gcGFyc2VBcmNGbGFnKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAo
IWxhcmdlQXJjKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0
byBzd2VlcCA9IHBhcnNlQXJjRmxhZyhjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHN3ZWVw
ID0gcGFyc2VBcmNGbGFnKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXN3ZWVwKQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9
IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHRhcmdldFBvaW50
ID0gcGFyc2VGbG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXRhcmdldFBv
aW50KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMzIzLDExICsyOTEs
NyBAQCBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWCiAgICAgICAgIHNl
Z21lbnQuc3dlZXAgPSAqc3dlZXA7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFy
Z2V0UG9pbnQ7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9p
czhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNl
LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5n
U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiU1ZHUGF0aFNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Bh
cnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNDUsMTcgKzQ2LDE1IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8
Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290
aFNlZ21lbnQoKSBmaW5hbDsKICAgICBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9T
ZWdtZW50KCkgZmluYWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGPiBkZWNsdHlwZShhdXRv
KSBwYXJzZShGJiYpOworCiAgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIGJvb2wgbV9pczhCaXRT
b3VyY2U7CiAKICAgICB1bmlvbiB7Ci0gICAgICAgIGNvbnN0IExDaGFyKiBtX2NoYXJhY3Rlcjg7
Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3RlcjE2OwotICAgIH0gbV9jdXJyZW50Owot
ICAgIHVuaW9uIHsKLSAgICAgICAgY29uc3QgTENoYXIqIG1fY2hhcmFjdGVyODsKLSAgICAgICAg
Y29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyMTY7Ci0gICAgfSBtX2VuZDsKKyAgICAgICAgU3RyaW5n
UGFyc2luZ0J1ZmZlcjxMQ2hhcj4gbV9wYXJzaW5nQnVmZmVyODsKKyAgICAgICAgU3RyaW5nUGFy
c2luZ0J1ZmZlcjxVQ2hhcj4gbV9wYXJzaW5nQnVmZmVyMTY7CisgICAgfTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZHUG9pbnRMaXN0OjpwYXJzZShjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGNsZWFySXRlbXMoKTsKKworICAgIHJldHVybiBXVEY6OnJl
YWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgewor
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisKKyAgICAgICAg
Ym9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5o
YXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFs
c2U7CisKKyAgICAgICAgICAgIGF1dG8geFBvcyA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIp
OworICAgICAgICAgICAgaWYgKCF4UG9zKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgU3Vm
Zml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICgheVBvcykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKworICAgICAgICAgICAgaWYgKHNraXBFeGFjdGx5KHBh
cnNpbmdCdWZmZXIsICcsJykpCisgICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwor
CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisKKyAg
ICAgICAgICAgIGFwcGVuZChTVkdQb2ludDo6Y3JlYXRlKHsgKnhQb3MsICp5UG9zIH0pKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVhckl0ZW1zKCkgb24g
ZmFpbHVyZSBsaWtlIFNWR1RyYW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAgICByZXR1cm4gIWRl
bGltUGFyc2VkOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHUG9pbnRMaXN0Ojp2YWx1ZUFzU3Ry
aW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHBvaW50IDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgo
KSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQocG9pbnQtPngoKSwgJyAnLCBwb2ludC0+eSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UG9pbnRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlz
dC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDU1ICs1MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU1ZHUG9pbnRMaXN0KG90aGVyLCBhY2Nlc3MpKTsKICAgICB9CiAK
LSAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBjbGVh
ckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdW
aWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIq
IGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9
IGN1ciArIHZhbHVlLmxlbmd0aCgpOwotCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhj
dXIsIGVuZCk7Ci0KLSAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICB3
aGlsZSAoY3VyIDwgZW5kKSB7Ci0gICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOwotCi0g
ICAgICAgICAgICBhdXRvIHhQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAgICAgICAg
ICBpZiAoIXhQb3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAg
ICBhdXRvIHlQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6
OkRvbnRTa2lwKTsKLSAgICAgICAgICAgIGlmICgheVBvcykKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7
Ci0KLSAgICAgICAgICAgIGlmIChjdXIgPCBlbmQgJiYgKmN1ciA9PSAnLCcpIHsKLSAgICAgICAg
ICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY3VyKys7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwot
Ci0gICAgICAgICAgICBhcHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7ICp4UG9zLCAqeVBvcyB9KSk7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gIWRlbGltUGFyc2VkOwotICAgIH0KLQotICAg
IFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBvaW50IDog
bV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
cG9pbnQtPngoKSwgJyAnLCBwb2ludC0+eSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5n
JiB2YWx1ZSk7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZTsKIH07
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxp
dGllcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDcgKzM3LDcg
QEAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZQogewogfQogCi1TVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShjb25z
dCBTdHJpbmcmIHZhbHVlKQorU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCiB7CiAgICAgcGFyc2Uo
dmFsdWUpOwogfQpAQCAtNTksMTkgKzYwLDMwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW8KICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK2Jvb2wgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSkKIHsKLSAg
ICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVy
dGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICBwYXJzZUludGVybmFsKGJlZ2luLCBiZWdpbiArIHZhbHVlLmxlbmd0aCgp
LCB0cnVlKTsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUs
IFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlSW50ZXJuYWwo
cGFyc2luZ0J1ZmZlciwgdHJ1ZSk7CisgICAgfSk7CiB9CiAKLWJvb2wgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlOjpwYXJzZShjb25zdCBVQ2hhciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIq
IGVuZCwgYm9vbCB2YWxpZGF0ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpw
YXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxp
ZGF0ZSkKIHsKLSAgICByZXR1cm4gcGFyc2VJbnRlcm5hbChjdXJyUGFyYW0sIGVuZCwgdmFsaWRh
dGUpOworICAgIHJldHVybiBwYXJzZUludGVybmFsKHBhcnNpbmdCdWZmZXIsIHZhbGlkYXRlKTsK
IH0KIAotYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwoY29u
c3QgVUNoYXIqJiBjdXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCiti
b29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIsIGJvb2wgdmFsaWRhdGUpCit7CisgICAgcmV0dXJuIHBh
cnNlSW50ZXJuYWwocGFyc2luZ0J1ZmZlciwgdmFsaWRhdGUpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBkZWZlckRlc2NbXSA9
ICB7J2QnLCAnZScsICdmJywgJ2UnLCAncid9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgbm9uZURlc2NbXSA9ICB7J24nLCAnbycsICdu
JywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFy
YWN0ZXJUeXBlIG1lZXREZXNjW10gPSAgeydtJywgJ2UnLCAnZScsICd0J307Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBzbGljZURlc2Nb
XSA9ICB7J3MnLCAnbCcsICdpJywgJ2MnLCAnZSd9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgorYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJu
YWwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgYm9v
bCB2YWxpZGF0ZSkKIHsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBhbGlnbiA9IFNW
R19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOwogICAgIFNWR01lZXRPclNsaWNlVHlwZSBt
ZWV0T3JTbGljZSA9IFNWR19NRUVUT1JTTElDRV9NRUVUOwpAQCAtNzksMTAwICs5MSwxMDAgQEAg
Ym9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSQogICAgIG1fYWxpZ24gPSBh
bGlnbjsKICAgICBtX21lZXRPclNsaWNlID0gbWVldE9yU2xpY2U7CiAKLSAgICBpZiAoIXNraXBP
cHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCkpCisgICAgaWYgKCFza2lwT3B0aW9uYWxT
VkdTcGFjZXMocGFyc2luZ0J1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
ICgqY3VyclBhcmFtID09ICdkJykgewotICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFt
LCBlbmQsICJkZWZlciIpKSB7CisgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdkJykgeworICAg
ICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBkZWZlckRlc2M8
Q2hhcmFjdGVyVHlwZT4pKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8gcGFy
c2UgZXhjZXB0IGZvciAqZGVmZXIqIHZhbHVlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IFdlIGp1c3QgaWdub3JlIHRoZSAiZGVm
ZXIiIGhlcmUuCi0gICAgICAgIGlmIChjdXJyUGFyYW0gPT0gZW5kKQorICAgICAgICBpZiAocGFy
c2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAg
aWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpKQorICAgICAgICBpZiAo
IXNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoKmN1cnJQYXJhbSA9PSAnbicpIHsKLSAgICAgICAg
aWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAibm9uZSIpKSB7CisgICAgaWYgKCpwYXJz
aW5nQnVmZmVyID09ICduJykgeworICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShw
YXJzaW5nQnVmZmVyLCBub25lRGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiU2tpcHBlZCB0byBwYXJzZSBleGNlcHQgZm9yICpub25lKiB2YWx1ZS4iKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBhbGlnbiA9IFNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX05PTkU7Ci0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhj
dXJyUGFyYW0sIGVuZCk7Ci0gICAgfSBlbHNlIGlmICgqY3VyclBhcmFtID09ICd4JykgewotICAg
ICAgICBpZiAoKGVuZCAtIGN1cnJQYXJhbSkgPCA4KQorICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAn
eCcpIHsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPCA4KQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoY3VyclBhcmFtWzFdICE9ICdN
JyB8fCBjdXJyUGFyYW1bNF0gIT0gJ1knIHx8IGN1cnJQYXJhbVs1XSAhPSAnTScpCisgICAgICAg
IGlmIChwYXJzaW5nQnVmZmVyWzFdICE9ICdNJyB8fCBwYXJzaW5nQnVmZmVyWzRdICE9ICdZJyB8
fCBwYXJzaW5nQnVmZmVyWzVdICE9ICdNJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKGN1cnJQYXJhbVsyXSA9PSAnaScpIHsKLSAgICAgICAgICAgIGlmIChjdXJyUGFy
YW1bM10gPT0gJ24nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAnaScp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAg
IGlmIChwYXJzaW5nQnVmZmVyWzJdID09ICdpJykgeworICAgICAgICAgICAgaWYgKHBhcnNpbmdC
dWZmZXJbM10gPT0gJ24nKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbNl0g
PT0gJ2knKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzddID09ICdu
JykKICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFU
SU9fWE1JTllNSU47Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJhbVs3XSA9
PSAnZCcpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbN10gPT0g
J2QnKQogICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RS
QVRJT19YTUlOWU1JRDsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBh
cmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnYScgJiYgcGFyc2luZ0J1ZmZlcls3XSA9PSAn
eCcpCiAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9f
WE1JTllNQVg7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bM10gPT0gJ2QnKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAnaScpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAgICAgICB9IGVsc2UgaWYg
KHBhcnNpbmdCdWZmZXJbM10gPT0gJ2QnKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdC
dWZmZXJbNl0gPT0gJ2knKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVy
WzddID09ICduJykKICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1JRFlNSU47Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQ
YXJhbVs3XSA9PSAnZCcpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNpbmdCdWZm
ZXJbN10gPT0gJ2QnKQogICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VS
VkVBU1BFQ1RSQVRJT19YTUlEWU1JRDsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnYScgJiYgcGFyc2luZ0J1ZmZl
cls3XSA9PSAneCcpCiAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQ
RUNUUkFUSU9fWE1JRFlNQVg7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzJdID09ICdhJyAmJiBj
dXJyUGFyYW1bM10gPT0gJ3gnKSB7Ci0gICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdp
JykgewotICAgICAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bN10gPT0gJ24nKQorICAgICAgICB9
IGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbMl0gPT0gJ2EnICYmIHBhcnNpbmdCdWZmZXJbM10gPT0g
J3gnKSB7CisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnaScpIHsKKyAgICAg
ICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlcls3XSA9PSAnbicpCiAgICAgICAgICAgICAgICAg
ICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU47Ci0gICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY3VyclBhcmFtWzddID09ICdkJykKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChwYXJzaW5nQnVmZmVyWzddID09ICdkJykKICAgICAgICAgICAgICAgICAgICAgYWxpZ24g
PSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRDsKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAg
ICAgfSBlbHNlIGlmIChwYXJzaW5nQnVmZmVyWzZdID09ICdhJyAmJiBwYXJzaW5nQnVmZmVyWzdd
ID09ICd4JykKICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElP
X1hNQVhZTUFYOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGN1
cnJQYXJhbSArPSA4OwotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBl
bmQpOworICAgICAgICBwYXJzaW5nQnVmZmVyLmFkdmFuY2VCeSg4KTsKKyAgICAgICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwogICAgIH0gZWxzZQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoY3VyclBhcmFtIDwgZW5kKSB7Ci0gICAgICAgIGlmICgqY3Vy
clBhcmFtID09ICdtJykgewotICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwg
ZW5kLCAibWVldCIpKSB7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFp
bmluZygpKSB7CisgICAgICAgIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAnbScpIHsKKyAgICAgICAg
ICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIG1lZXREZXNjPENo
YXJhY3RlclR5cGU+KSkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBw
YXJzZSBleGNlcHQgZm9yICptZWV0KiBvciAqc2xpY2UqIHZhbHVlLiIpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJQYXJh
bSA9PSAncycpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwg
InNsaWNlIikpIHsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVm
ZmVyKTsKKyAgICAgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAncycpIHsKKyAgICAg
ICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHNsaWNlRGVz
YzxDaGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQg
dG8gcGFyc2UgZXhjZXB0IGZvciAqbWVldCogb3IgKnNsaWNlKiB2YWx1ZS4iKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICAgICAgaWYgKGFsaWduICE9IFNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX05PTkUpCiAgICAgICAgICAgICAgICAgbWVldE9yU2xpY2UgPSBT
VkdfTUVFVE9SU0xJQ0VfU0xJQ0U7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZW5kICE9
IGN1cnJQYXJhbSAmJiB2YWxpZGF0ZSkKKyAgICBpZiAoIXBhcnNpbmdCdWZmZXIuYXRFbmQoKSAm
JiB2YWxpZGF0ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9hbGlnbiA9IGFsaWdu
OwpAQCAtMzI4LDUyICszNDAsNDQgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYQogCiBTdHJpbmcgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjp2YWx1ZUFzU3Ry
aW5nKCkgY29uc3QKIHsKLSAgICBTdHJpbmcgYWxpZ25UeXBlOworICAgIGF1dG8gYWxpZ25UeXBl
ID0gWyZdKCkgeworICAgICAgICBzd2l0Y2ggKG1fYWxpZ24pIHsKKyAgICAgICAgY2FzZSBTVkdf
UFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FOgorICAgICAgICAgICAgcmV0dXJuICJub25lIjsKKyAg
ICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JTjoKKyAgICAgICAgICAg
IHJldHVybiAieE1pbllNaW4iOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElP
X1hNSURZTUlOOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1pbiI7CisgICAgICAgIGNhc2Ug
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU46CisgICAgICAgICAgICByZXR1cm4gInhN
YXhZTWluIjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JRDoK
KyAgICAgICAgICAgIHJldHVybiAieE1pbllNaWQiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1hNSURZTUlEOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1pZCI7Cisg
ICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSUQ6CisgICAgICAgICAg
ICByZXR1cm4gInhNYXhZTWlkIjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJ
T19YTUlOWU1BWDoKKyAgICAgICAgICAgIHJldHVybiAieE1pbllNYXgiOworICAgICAgICBjYXNl
IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUFYOgorICAgICAgICAgICAgcmV0dXJuICJ4
TWlkWU1heCI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNQVg6
CisgICAgICAgICAgICByZXR1cm4gInhNYXhZTWF4IjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VS
VkVBU1BFQ1RSQVRJT19VTktOT1dOOgorICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKKyAg
ICAgICAgfTsKIAotICAgIHN3aXRjaCAobV9hbGlnbikgewotICAgIGNhc2UgU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fTk9ORToKLSAgICAgICAgYWxpZ25UeXBlID0gIm5vbmUiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlOOgotICAgICAg
ICBhbGlnblR5cGUgPSAieE1pbllNaW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlOOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlN
aW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hN
QVhZTUlOOgotICAgICAgICBhbGlnblR5cGUgPSAieE1heFlNaW4iOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlEOgotICAgICAgICBhbGln
blR5cGUgPSAieE1pbllNaWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1hNSURZTUlEOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNaWQiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlE
OgotICAgICAgICBhbGlnblR5cGUgPSAieE1heFlNaWQiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUFYOgotICAgICAgICBhbGlnblR5cGUg
PSAieE1pbllNYXgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVD
VFJBVElPX1hNSURZTUFYOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNYXgiOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUFYOgotICAg
ICAgICBhbGlnblR5cGUgPSAieE1heFlNYXgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNW
R19QUkVTRVJWRUFTUEVDVFJBVElPX1VOS05PV046Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ1bmtu
b3duIjsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gInVua25vd24iOwogICAgIH07CiAKICAgICBzd2l0Y2ggKG1fbWVldE9yU2xp
Y2UpIHsKICAgICBkZWZhdWx0OgogICAgIGNhc2UgU1ZHX01FRVRPUlNMSUNFX1VOS05PV046Ci0g
ICAgICAgIHJldHVybiBhbGlnblR5cGU7CisgICAgICAgIHJldHVybiBhbGlnblR5cGUoKTsKICAg
ICBjYXNlIFNWR19NRUVUT1JTTElDRV9NRUVUOgotICAgICAgICByZXR1cm4gYWxpZ25UeXBlICsg
IiBtZWV0IjsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYWxpZ25UeXBlKCksICIgbWVldCIp
OwogICAgIGNhc2UgU1ZHX01FRVRPUlNMSUNFX1NMSUNFOgotICAgICAgICByZXR1cm4gYWxpZ25U
eXBlICsgIiBzbGljZSI7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGFsaWduVHlwZSgpLCAi
IHNsaWNlIik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUoKTsKLSAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3Ry
aW5nJik7CisgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0cmluZ1ZpZXcm
KTsKIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEFsaWduKHVuc2lnbmVkIHNob3J0KTsKICAg
ICB1bnNpZ25lZCBzaG9ydCBhbGlnbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ247IH0KQEAgLTY0
LDggKzY0LDkgQEAgcHVibGljOgogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShmbG9hdCBs
b2dpY2FsWCwgZmxvYXQgbG9naWNhbFksIGZsb2F0IGxvZ2ljYWxXaWR0aCwgZmxvYXQgbG9naWNh
bEhlaWdodCwgZmxvYXQgcGh5c2ljYWxXaWR0aCwgZmxvYXQgcGh5c2ljYWxIZWlnaHQpIGNvbnN0
OwogCi0gICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHBhcnNlKGNvbnN0
IFVDaGFyKiYgY3VyclBhcmFtLCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKTsKKyAg
ICBib29sIHBhcnNlKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBib29sIHBhcnNlKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8TENoYXI+JiwgYm9vbCB2YWxpZGF0ZSk7CisgICAgYm9vbCBwYXJzZShTdHJp
bmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYsIGJvb2wgdmFsaWRhdGUpOwogCiAgICAgU3RyaW5nIHZh
bHVlQXNTdHJpbmcoKSBjb25zdDsKIApAQCAtNzMsNyArNzQsOCBAQCBwcml2YXRlOgogICAgIFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlIG1fYWxpZ247CiAgICAgU1ZHTWVldE9yU2xpY2VUeXBl
IG1fbWVldE9yU2xpY2U7CiAKLSAgICBib29sIHBhcnNlSW50ZXJuYWwoY29uc3QgVUNoYXIqJiBj
dXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CisgICAgYm9vbCBwYXJzZUludGVybmFsKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mLCBib29sIHZhbGlkYXRlKTsKIH07CiAKIHRlbXBs
YXRlPD4gc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZT4gewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTVkdTdHJpbmdMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZHU3RyaW5nTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiBk
YXRhLCBVQ2hhciBkZWxpbWl0ZXIpCit7CisgICAgY2xlYXJJdGVtcygpOworCisgICAgYXV0byBp
c1NWR1NwYWNlT3JEZWxpbWl0ZXIgPSBbZGVsaW1pdGVyXShhdXRvIGMpIHsKKyAgICAgICAgcmV0
dXJuIGlzU1ZHU3BhY2UoYykgfHwgYyA9PSBkZWxpbWl0ZXI7CisgICAgfTsKKworICAgIHJldHVy
biBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhkYXRhLCBbJl0oYXV0byBwYXJzaW5nQnVm
ZmVyKSB7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5p
bmcoKSkgeworICAgICAgICAgICAgYXV0byBzdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24o
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGEgbmlj
ZSBpbXByb3ZlbWVudCB0byBhZGQgYSB2YXJpYW50IG9mIHNraXBVbnRpbCB3aGljaCB3b3JrZWQK
KyAgICAgICAgICAgIC8vIHdpdGggbGFtYmRhIHByZWRpY2F0ZXMuCisgICAgICAgICAgICB3aGls
ZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgIWlzU1ZHU3BhY2VP
ckRlbGltaXRlcigqcGFyc2luZ0J1ZmZlcikpCisgICAgICAgICAgICAgICAgKytwYXJzaW5nQnVm
ZmVyOworCisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09IHN0YXJ0
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoU3Ry
aW5nKHN0YXJ0LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBzdGFydCkpOworICAgICAgICAg
ICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlciwgZGVsaW1p
dGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVhckl0
ZW1zKCkgb24gZmFpbHVyZSBsaWtlIFNWR1RyYW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAgICBy
ZXR1cm4gcGFyc2luZ0J1ZmZlci5hdEVuZCgpOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHU3Ry
aW5nTGlzdDo6dmFsdWVBc1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOworCisgICAgZm9yIChjb25zdCBhdXRvJiBzdHJpbmcgOiBtX2l0ZW1zKSB7CisgICAgICAg
IGlmIChidWlsZGVyLmxlbmd0aCgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsK
KworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiBi
dWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdT
dHJpbmdMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xp
c3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMzkgKzUxLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgbV9pdGVtcy5hcHBlbmQoZW1wdHlTdHJpbmcoKSk7CiAgICAgfQogCi0gICAgYm9vbCBwYXJz
ZShjb25zdCBTdHJpbmcmIGRhdGEsIFVDaGFyIGRlbGltaXRlcikKLSAgICB7Ci0gICAgICAgIGNs
ZWFySXRlbXMoKTsKLQotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmlu
Z1ZpZXcoZGF0YSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFy
KiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBlbmQg
PSBwdHIgKyBkYXRhLmxlbmd0aCgpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAg
ICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBwdHI7Ci0gICAgICAgICAgICB3aGlsZSAocHRy
IDwgZW5kICYmICpwdHIgIT0gZGVsaW1pdGVyICYmICFpc1NWR1NwYWNlKCpwdHIpKQotICAgICAg
ICAgICAgICAgIHB0cisrOwotICAgICAgICAgICAgaWYgKHB0ciA9PSBzdGFydCkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1faXRlbXMuYXBwZW5kKFN0cmluZyhzdGFydCwg
cHRyIC0gc3RhcnQpKTsKLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1p
dGVyKHB0ciwgZW5kLCBkZWxpbWl0ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHB0
ciA9PSBlbmQ7Ci0gICAgfQotCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotCi0gICAgICAgIGZv
ciAoY29uc3QgYXV0byYgc3RyaW5nIDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxk
ZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyaW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgIGJvb2wgcGFyc2UoY29uc3QgU3Ry
aW5nJiBkYXRhLCBVQ2hhciBkZWxpbWl0ZXIpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkg
Y29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
VkdUcmFuc2Zvcm1MaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0V4Y2VwdGlvbk9yPFJlZlB0cjxTVkdUcmFuc2Zvcm0+PiBTVkdUcmFuc2Zv
cm1MaXN0Ojpjb25zb2xpZGF0ZSgpCit7CisgICAgYXV0byByZXN1bHQgPSBjYW5BbHRlckxpc3Qo
KTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICBBU1NFUlQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKKworICAgIC8vIFNwZWM6IElmIHRoZSBsaXN0IHdhcyBlbXB0eSwgdGhlbiBhIHZhbHVl
IG9mIG51bGwgaXMgcmV0dXJuZWQuCisgICAgaWYgKG1faXRlbXMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChtX2l0ZW1zLnNpemUoKSA9PSAxKQorICAgICAg
ICByZXR1cm4gbWFrZVJlZlB0cihhdCgwKS5nZXQoKSk7CisKKyAgICBhdXRvIG5ld0l0ZW0gPSBT
VkdUcmFuc2Zvcm06OmNyZWF0ZShjb25jYXRlbmF0ZSgpKTsKKyAgICBjbGVhckl0ZW1zKCk7CisK
KyAgICBhdXRvIGl0ZW0gPSBhcHBlbmQoV1RGTW92ZShuZXdJdGVtKSk7CisgICAgY29tbWl0Q2hh
bmdlKCk7CisgICAgcmV0dXJuIG1ha2VSZWZQdHIoaXRlbS5nZXQoKSk7Cit9CisKK0FmZmluZVRy
YW5zZm9ybSBTVkdUcmFuc2Zvcm1MaXN0Ojpjb25jYXRlbmF0ZSgpIGNvbnN0Cit7CisgICAgQWZm
aW5lVHJhbnNmb3JtIHJlc3VsdDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zZm9ybSA6IG1f
aXRlbXMpCisgICAgICAgIHJlc3VsdCAqPSB0cmFuc2Zvcm0tPm1hdHJpeCgpLT52YWx1ZSgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGJvb2wgU1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2VHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgYm9vbCBkZWxpbVBhcnNlZCA9
IGZhbHNlOworICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmco
KSkgeworICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIAorICAgICAgICBhdXRvIHBhcnNlZFRy
YW5zZm9ybVR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUocGFyc2lu
Z0J1ZmZlcik7CisgICAgICAgIGlmICghcGFyc2VkVHJhbnNmb3JtVHlwZSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9ybVZhbHVlID0gU1ZH
VHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSgqcGFyc2VkVHJhbnNmb3JtVHlwZSwg
cGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICghcGFyc2VkVHJhbnNmb3JtVmFsdWUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXBwZW5kKFNWR1RyYW5zZm9ybTo6Y3Jl
YXRlKCpwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkpOworCisgICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlcyhwYXJzaW5nQnVmZmVyKTsKKworICAgICAgICBpZiAoc2tpcEV4YWN0bHkocGFyc2luZ0J1
ZmZlciwgJywnKSkKKyAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKKworICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgfQorICAgIHJldHVybiAh
ZGVsaW1QYXJzZWQ7Cit9CisKK3ZvaWQgU1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBjbGVhckl0ZW1zKCk7CisKKyAgICBib29sIHBhcnNpbmdTdWNj
ZWVkZWQgPSBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFy
c2luZ0J1ZmZlcikgeworICAgICAgICByZXR1cm4gcGFyc2VHZW5lcmljKHBhcnNpbmdCdWZmZXIp
OworICAgIH0pOworICAgIAorICAgIGlmICghcGFyc2luZ1N1Y2NlZWRlZCkKKyAgICAgICAgY2xl
YXJJdGVtcygpOworfQorCitib29sIFNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKFN0cmluZ1BhcnNp
bmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZUdlbmVy
aWMocGFyc2luZ0J1ZmZlcik7Cit9CisKK2Jvb2wgU1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIHBh
cnNlR2VuZXJpYyhwYXJzaW5nQnVmZmVyKTsKK30KKworU3RyaW5nIFNWR1RyYW5zZm9ybUxpc3Q6
OnZhbHVlQXNTdHJpbmcoKSBjb25zdAoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zZnJvbSA6IG1faXRlbXMpIHsKKyAgICAgICAgaWYgKGJ1
aWxkZXIubGVuZ3RoKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworCisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKHRyYW5zZnJvbS0+dmFsdWUoKS52YWx1ZUFzU3RyaW5nKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit9CisKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
ODYgKzU2LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN2Z1RyYW5zZm9ybTsKICAgICB9
CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8U1ZHVHJhbnNmb3JtPj4gY29uc29saWRhdGUoKQot
ICAgIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBjYW5BbHRlckxpc3QoKTsKLSAgICAgICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFz
ZUV4Y2VwdGlvbigpOwotICAgICAgICBBU1NFUlQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
KTsKLQotICAgICAgICAvLyBTcGVjOiBJZiB0aGUgbGlzdCB3YXMgZW1wdHksIHRoZW4gYSB2YWx1
ZSBvZiBudWxsIGlzIHJldHVybmVkLgotICAgICAgICBpZiAobV9pdGVtcy5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpZiAobV9pdGVtcy5zaXplKCkg
PT0gMSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlUmVmUHRyKGF0KDApLmdldCgpKTsKLQotICAg
ICAgICBhdXRvIG5ld0l0ZW0gPSBTVkdUcmFuc2Zvcm06OmNyZWF0ZShjb25jYXRlbmF0ZSgpKTsK
LSAgICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gaXRlbSA9IGFwcGVuZChXVEZN
b3ZlKG5ld0l0ZW0pKTsKLSAgICAgICAgY29tbWl0Q2hhbmdlKCk7Ci0gICAgICAgIHJldHVybiBt
YWtlUmVmUHRyKGl0ZW0uZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgcGFyc2UoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQotICAgICAgICBhdXRv
IHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOwotICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSB1cGNvbnZlcnRlZENoYXJh
Y3RlcnM7Ci0gICAgICAgIGlmICghcGFyc2Uoc3RhcnQsIHN0YXJ0ICsgdmFsdWUubGVuZ3RoKCkp
KQotICAgICAgICAgICAgY2xlYXJJdGVtcygpOwotICAgIH0KLQotICAgIEFmZmluZVRyYW5zZm9y
bSBjb25jYXRlbmF0ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gcmVz
dWx0OwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zZm9ybSA6IG1faXRlbXMpCi0gICAg
ICAgICAgICByZXN1bHQgKj0gdHJhbnNmb3JtLT5tYXRyaXgoKS0+dmFsdWUoKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0
IG92ZXJyaWRlCi0gICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAg
IGZvciAoY29uc3QgYXV0byYgdHJhbnNmcm9tIDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYg
KGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsK
LQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQodHJhbnNmcm9tLT52YWx1ZSgpLnZhbHVlQXNT
dHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsK
LSAgICB9CisgICAgRXhjZXB0aW9uT3I8UmVmUHRyPFNWR1RyYW5zZm9ybT4+IGNvbnNvbGlkYXRl
KCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGNvbmNhdGVuYXRlKCkgY29uc3Q7CisgICAgdm9pZCBw
YXJzZShjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92
ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIGJvb2wgcGFyc2UoY29uc3QgVUNoYXIqJiBzdGFydCwg
Y29uc3QgVUNoYXIqIGVuZCkKLSAgICB7Ci0gICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxz
ZTsKLSAgICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0gICAgICAgICAgICBkZWxpbVBhcnNl
ZCA9IGZhbHNlOwotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIHR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxl
OjpwYXJzZUFuZFNraXBUeXBlKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYgKCF0eXBlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgYXV0byBwYXJzZWRU
cmFuc2Zvcm1WYWx1ZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoKnR5
cGUsIHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGFwcGVuZChTVkdU
cmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKLQotICAgICAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYgKHN0YXJ0
IDwgZW5kICYmICpzdGFydCA9PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgKytzdGFydDsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgcGFyc2VHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFj
dGVyVHlwZT4mKTsKKyAgICBib29sIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7
CisgICAgYm9vbCBwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9y
bWFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1h
YmxlLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5z
Zm9ybWFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4NSArMjcsODYgQEAKICNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJz
ZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoY29uc3QgVUNoYXIqJiBwdHIs
IGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0KiB2YWx1ZXMsIGludCByZXF1aXJlZCwgaW50IG9wdGlv
bmFsKQorU1ZHVHJhbnNmb3JtYWJsZTo6flNWR1RyYW5zZm9ybWFibGUoKSA9IGRlZmF1bHQ7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zv
cm1QYXJhbUxpc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1
ZmZlciwgZmxvYXQqIHZhbHVlcywgaW50IHJlcXVpcmVkLCBpbnQgb3B0aW9uYWwpCiB7CiAgICAg
aW50IG9wdGlvbmFsUGFyYW1zID0gMCwgcmVxdWlyZWRQYXJhbXMgPSAwOwogICAgIAotICAgIGlm
ICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKSB8fCAqcHRyICE9ICcoJykKKyAgICBp
ZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKSB8fCAqcGFyc2luZ0J1ZmZl
ciAhPSAnKCcpCiAgICAgICAgIHJldHVybiAtMTsKICAgICAKLSAgICBwdHIrKzsKKyAgICArK3Bh
cnNpbmdCdWZmZXI7CiAgICAKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOwor
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKIAogICAgIHdoaWxlIChy
ZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVkKSB7Ci0gICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAg
ICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwot
ICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhT
a2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBh
cnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7
CiAgICAgICAgIGlmICghcGFyc2VkTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAg
ICAgICB2YWx1ZXNbcmVxdWlyZWRQYXJhbXNdID0gKnBhcnNlZE51bWJlcjsKICAgICAgICAgcmVx
dWlyZWRQYXJhbXMrKzsKICAgICAgICAgaWYgKHJlcXVpcmVkUGFyYW1zIDwgcmVxdWlyZWQpCi0g
ICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7Cisg
ICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVy
KTsKICAgICB9Ci0gICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpKQorICAg
IGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpKQogICAgICAgICByZXR1
cm4gLTE7CiAgICAgCi0gICAgYm9vbCBkZWxpbVBhcnNlZCA9IHNraXBPcHRpb25hbFNWR1NwYWNl
c09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICBib29sIGRlbGltUGFyc2VkID0gc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBpZiAocHRyID49
IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gLTE7
CiAgICAgCi0gICAgaWYgKCpwdHIgPT0gJyknKSB7IC8vIHNraXAgb3B0aW9uYWxzCi0gICAgICAg
IHB0cisrOworICAgIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAnKScpIHsKKyAgICAgICAgLy8gc2tp
cCBvcHRpb25hbHMKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgICAgICBpZiAoZGVsaW1Q
YXJzZWQpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgd2hp
bGUgKG9wdGlvbmFsUGFyYW1zIDwgb3B0aW9uYWwpIHsKLSAgICAgICAgICAgIGlmIChwdHIgPj0g
ZW5kKQorICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVt
YmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICAg
ICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhT
a2lwcGluZ1BvbGljeTo6RG9udFNraXApOwogICAgICAgICAgICAgaWYgKCFwYXJzZWROdW1iZXIp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgdmFsdWVzW3JlcXVpcmVk
UGFyYW1zICsgb3B0aW9uYWxQYXJhbXNdID0gKnBhcnNlZE51bWJlcjsKICAgICAgICAgICAgIG9w
dGlvbmFsUGFyYW1zKys7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxQYXJhbXMgPCBvcHRpb25h
bCkKLSAgICAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIs
IGVuZCk7CisgICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIo
cGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKSkKKyAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdT
cGFjZXMocGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIAot
ICAgICAgICBkZWxpbVBhcnNlZCA9IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0
ciwgZW5kKTsKKyAgICAgICAgZGVsaW1QYXJzZWQgPSBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRl
bGltaXRlcihwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgCi0gICAgICAgIGlmIChwdHIgPj0gZW5k
IHx8ICpwdHIgIT0gJyknIHx8IGRlbGltUGFyc2VkKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZl
ci5hdEVuZCgpIHx8ICpwYXJzaW5nQnVmZmVyICE9ICcpJyB8fCBkZWxpbVBhcnNlZCkKICAgICAg
ICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgcHRyKys7CisgICAgICAgICsrcGFyc2luZ0J1ZmZl
cjsKICAgICB9CiAKICAgICByZXR1cm4gcmVxdWlyZWRQYXJhbXMgKyBvcHRpb25hbFBhcmFtczsK
IH0KIAogLy8gVGhlc2Ugc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIGVudW0gU1ZHVHJhbnNm
b3JtVHlwZQotc3RhdGljIGNvbnN0IGludCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbXSA9ICB7MCwg
NiwgMSwgMSwgMSwgMSwgMX07Ci1zdGF0aWMgY29uc3QgaW50IG9wdGlvbmFsVmFsdWVzRm9yVHlw
ZVtdID0gIHswLCAwLCAxLCAxLCAyLCAwLCAwfTsKK2NvbnN0ZXhwciBpbnQgcmVxdWlyZWRWYWx1
ZXNGb3JUeXBlW10gPSAgezAsIDYsIDEsIDEsIDEsIDEsIDF9OworY29uc3RleHByIGludCBvcHRp
b25hbFZhbHVlc0ZvclR5cGVbXSA9ICB7MCwgMCwgMSwgMSwgMiwgMCwgMH07CiAKLS8vIFRoaXMg
ZGVzdHJ1Y3RvciBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbGluayBjb3JyZWN0bHkgd2l0aCBJbnRl
bCBJQ0MuCi1TVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpID0gZGVmYXVsdDsK
LQotT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJh
bnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29u
c3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNm
b3JtVmFsdWVHZW5lcmljKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUs
IFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7CiAg
ICAgaWYgKHR5cGUgPT0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGludCB2YWx1ZUNvdW50ID0gMDsK
ICAgICBmbG9hdCB2YWx1ZXNbXSA9IHswLCAwLCAwLCAwLCAwLCAwfTsKLSAgICBpZiAoKHZhbHVl
Q291bnQgPSBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChwdHIsIGVuZCwgdmFsdWVzLCByZXF1aXJl
ZFZhbHVlc0ZvclR5cGVbdHlwZV0sIG9wdGlvbmFsVmFsdWVzRm9yVHlwZVt0eXBlXSkpIDwgMCkK
KyAgICBpZiAoKHZhbHVlQ291bnQgPSBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChwYXJzaW5nQnVm
ZmVyLCB2YWx1ZXMsIHJlcXVpcmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNG
b3JUeXBlW3R5cGVdKSkgPCAwKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
U1ZHVHJhbnNmb3JtVmFsdWUgdHJhbnNmb3JtOwpAQCAtMTQ1LDQyICsxNDYsNjMgQEAgT3B0aW9u
YWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybQogICAgIHJldHVybiB0cmFuc2Zvcm07
CiB9CiAKLXN0YXRpYyBjb25zdCBVQ2hhciBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywg
J3cnLCAnWCd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHNrZXdZRGVzY1tdID0gIHsncycsICdrJywg
J2UnLCAndycsICdZJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgc2NhbGVEZXNjW10gPSAgeydzJywg
J2MnLCAnYScsICdsJywgJ2UnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB0cmFuc2xhdGVEZXNjW10g
PSAgeyd0JywgJ3InLCAnYScsICduJywgJ3MnLCAnbCcsICdhJywgJ3QnLCAnZSd9Owotc3RhdGlj
IGNvbnN0IFVDaGFyIHJvdGF0ZURlc2NbXSA9ICB7J3InLCAnbycsICd0JywgJ2EnLCAndCcsICdl
J307Ci1zdGF0aWMgY29uc3QgVUNoYXIgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3QnLCAn
cicsICdpJywgJ3gnfTsKK09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm1h
YmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1U
eXBlIHR5cGUsIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQorewor
ICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyh0eXBlLCBwYXJzaW5nQnVmZmVy
KTsKK30KKworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBh
cnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlw
ZSwgU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0
dXJuIHBhcnNlVHJhbnNmb3JtVmFsdWVHZW5lcmljKHR5cGUsIHBhcnNpbmdCdWZmZXIpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlw
ZSBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9OwordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgc2tld1lEZXNjW10g
PSAgeydzJywgJ2snLCAnZScsICd3JywgJ1knfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHNjYWxlRGVzY1tdID0gIHsncycsICdjJywg
J2EnLCAnbCcsICdlJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4
cHIgQ2hhcmFjdGVyVHlwZSB0cmFuc2xhdGVEZXNjW10gPSAgeyd0JywgJ3InLCAnYScsICduJywg
J3MnLCAnbCcsICdhJywgJ3QnLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgcm90YXRlRGVzY1tdID0gIHsncicsICdvJywgJ3Qn
LCAnYScsICd0JywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0
ZXhwciBDaGFyYWN0ZXJUeXBlIG1hdHJpeERlc2NbXSA9ICB7J20nLCAnYScsICd0JywgJ3InLCAn
aScsICd4J307CiAKLU9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBl
PiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRy
YW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4g
cGFyc2VUcmFuc2Zvcm1UeXBlR2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5
cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChjdXJyVHJhbnNmb3JtID49IGVuZCkKKyAg
ICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgaWYgKCpjdXJyVHJhbnNmb3JtID09ICdzJykgewotICAgICAgICBpZiAoc2tpcFN0
cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHNrZXdYRGVzYywgV1RGX0FSUkFZX0xFTkdUSChza2V3
WERlc2MpKSkKKyAgICBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ3MnKSB7CisgICAgICAgIGlmIChz
a2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgc2tld1hEZXNjPENoYXJhY3RlclR5
cGU+KSkKICAgICAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9S
TV9TS0VXWDsKLSAgICAgICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQs
IHNrZXdZRGVzYywgV1RGX0FSUkFZX0xFTkdUSChza2V3WURlc2MpKSkKKyAgICAgICAgaWYgKHNr
aXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBza2V3WURlc2M8Q2hhcmFjdGVyVHlw
ZT4pKQogICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JN
X1NLRVdZOwotICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwg
c2NhbGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNjYWxlRGVzYykpKQorICAgICAgICBpZiAoc2tp
cENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHNjYWxlRGVzYzxDaGFyYWN0ZXJUeXBl
PikpCiAgICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1f
U0NBTEU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgfSBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgdHJhbnNsYXRlRGVz
YywgV1RGX0FSUkFZX0xFTkdUSCh0cmFuc2xhdGVEZXNjKSkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5n
QnVmZmVyLCB0cmFuc2xhdGVEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURTsKLSAgICBlbHNlIGlmIChz
a2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgcm90YXRlRGVzYywgV1RGX0FSUkFZX0xFTkdU
SChyb3RhdGVEZXNjKSkpCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVm
ZmVyLCByb3RhdGVEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKLSAgICBlbHNlIGlmIChza2lwU3RyaW5n
KGN1cnJUcmFuc2Zvcm0sIGVuZCwgbWF0cml4RGVzYywgV1RGX0FSUkFZX0xFTkdUSChtYXRyaXhE
ZXNjKSkpCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBtYXRy
aXhEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVl
OjpTVkdfVFJBTlNGT1JNX01BVFJJWDsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAK
LVNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIFNWR1RyYW5zZm9ybWFibGU6OnBh
cnNlVHJhbnNmb3JtVHlwZShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCitPcHRpb25hbDxTVkdU
cmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VU
cmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKK3sKKyAgICByZXR1cm4gV1RG
OjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIHBhcnNpbmdCdWZmZXIp
IHsKKyAgICAgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVHlwZShwYXJzaW5nQnVmZmVyKTsKKyAg
ICB9KTsKK30KKworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+
IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShTdHJpbmdQYXJzaW5nQnVmZmVy
PExDaGFyPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBl
R2VuZXJpYyhwYXJzaW5nQnVmZmVyKTsKK30KKworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6
OlNWR1RyYW5zZm9ybVR5cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShT
dHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBhdXRvIHVw
Y29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodHlwZVN0cmluZykudXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENo
YXJhY3RlcnM7Ci0gICAgcmV0dXJuIHBhcnNlQW5kU2tpcFR5cGUoY2hhcmFjdGVycywgY2hhcmFj
dGVycyArIHR5cGVTdHJpbmcubGVuZ3RoKCkpLnZhbHVlT3IoU1ZHVHJhbnNmb3JtVmFsdWU6OlNW
R19UUkFOU0ZPUk1fVU5LTk9XTik7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVHlwZUdlbmVy
aWMocGFyc2luZ0J1ZmZlcik7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
cmFuc2Zvcm1hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5z
Zm9ybWFibGUuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Ry
YW5zZm9ybWFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVk
ZSAiU1ZHTG9jYXRhYmxlLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtVmFsdWUuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIApA
QCAtMzIsOSArMzEsMTIgQEAgY2xhc3MgU1ZHVHJhbnNmb3JtYWJsZSA6IHB1YmxpYyBTVkdMb2Nh
dAogcHVibGljOgogICAgIHZpcnR1YWwgflNWR1RyYW5zZm9ybWFibGUoKTsKIAotICAgIHN0YXRp
YyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVD
aGFyKiBlbmQpOwotICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlw
ZSBwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIE9wdGlvbmFs
PFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZUFuZFNraXBUeXBlKGNv
bnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgc3RhdGlj
IE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYp
OworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1W
YWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgU3RyaW5nUGFyc2luZ0J1
ZmZlcjxVQ2hhcj4mKTsKKworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6
U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZ1ZpZXcmKTsK
KyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+
IHBhcnNlVHJhbnNmb3JtVHlwZShTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0
YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VU
cmFuc2Zvcm1UeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiAKICAgICBBZmZpbmVU
cmFuc2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1T
Y29wZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOyB9
CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNv
bnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkocmV2aXNpb24gMjYz
MzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTYwLDk5ICs2MSw5MCBAQCB2b2lkIFNWR1ZpZXdTcGVjOjpyZXNldCgp
CiAgICAgU1ZHWm9vbUFuZFBhbjo6cmVzZXQoKTsKIH0KIAotc3RhdGljIGNvbnN0IFVDaGFyIHN2
Z1ZpZXdTcGVjW10gPSB7J3MnLCAndicsICdnJywgJ1YnLCAnaScsICdlJywgJ3cnfTsKLXN0YXRp
YyBjb25zdCBVQ2hhciB2aWV3Qm94U3BlY1tdID0geyd2JywgJ2knLCAnZScsICd3JywgJ0InLCAn
bycsICd4J307Ci1zdGF0aWMgY29uc3QgVUNoYXIgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWNbXSA9
IHsncCcsICdyJywgJ2UnLCAncycsICdlJywgJ3InLCAndicsICdlJywgJ0EnLCAncycsICdwJywg
J2UnLCAnYycsICd0JywgJ1InLCAnYScsICd0JywgJ2knLCAnbyd9Owotc3RhdGljIGNvbnN0IFVD
aGFyIHRyYW5zZm9ybVNwZWNbXSA9IHsndCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2YnLCAnbycs
ICdyJywgJ20nfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB6b29tQW5kUGFuU3BlY1tdID0geyd6Jywg
J28nLCAnbycsICdtJywgJ0EnLCAnbicsICdkJywgJ1AnLCAnYScsICduJ307Ci1zdGF0aWMgY29u
c3QgVUNoYXIgdmlld1RhcmdldFNwZWNbXSA9ICB7J3YnLCAnaScsICdlJywgJ3cnLCAnVCcsICdh
JywgJ3InLCAnZycsICdlJywgJ3QnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHN2Z1ZpZXdTcGVjW10gPSB7J3MnLCAndicsICdnJywg
J1YnLCAnaScsICdlJywgJ3cnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNv
bnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHZpZXdCb3hTcGVjW10gPSB7J3YnLCAnaScsICdlJywgJ3cn
LCAnQicsICdvJywgJ3gnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0
ZXhwciBDaGFyYWN0ZXJUeXBlIHByZXNlcnZlQXNwZWN0UmF0aW9TcGVjW10gPSB7J3AnLCAncics
ICdlJywgJ3MnLCAnZScsICdyJywgJ3YnLCAnZScsICdBJywgJ3MnLCAncCcsICdlJywgJ2MnLCAn
dCcsICdSJywgJ2EnLCAndCcsICdpJywgJ28nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHRyYW5zZm9ybVNwZWNbXSA9IHsndCcsICdy
JywgJ2EnLCAnbicsICdzJywgJ2YnLCAnbycsICdyJywgJ20nfTsKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHpvb21BbmRQYW5TcGVjW10g
PSB7J3onLCAnbycsICdvJywgJ20nLCAnQScsICduJywgJ2QnLCAnUCcsICdhJywgJ24nfTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHZp
ZXdUYXJnZXRTcGVjW10gPSAgeyd2JywgJ2knLCAnZScsICd3JywgJ1QnLCAnYScsICdyJywgJ2cn
LCAnZScsICd0J307CiAKLWJvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3Ry
aW5nJiB2aWV3U3BlYykKK2Jvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3Ry
aW5nVmlldyYgc3RyaW5nKQogewotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3Ry
aW5nVmlldyh2aWV3U3BlYykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNo
YXIqIGN1cnJWaWV3U3BlYyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hh
ciogZW5kID0gY3VyclZpZXdTcGVjICsgdmlld1NwZWMubGVuZ3RoKCk7Ci0KLSAgICBpZiAoY3Vy
clZpZXdTcGVjID49IGVuZCB8fCAhbV9jb250ZXh0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKCFza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCBzdmdWaWV3U3Bl
YywgV1RGX0FSUkFZX0xFTkdUSChzdmdWaWV3U3BlYykpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGN1cnJWaWV3U3BlYysrOwotCi0gICAgd2hpbGUg
KGN1cnJWaWV3U3BlYyA8IGVuZCAmJiAqY3VyclZpZXdTcGVjICE9ICcpJykgewotICAgICAgICBp
ZiAoKmN1cnJWaWV3U3BlYyA9PSAndicpIHsKLSAgICAgICAgICAgIGlmIChza2lwU3RyaW5nKGN1
cnJWaWV3U3BlYywgZW5kLCB2aWV3Qm94U3BlYywgV1RGX0FSUkFZX0xFTkdUSCh2aWV3Qm94U3Bl
YykpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJW
aWV3U3BlYyAhPSAnKCcpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBhdXRvIHZpZXdCb3gg
PSBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjdXJyVmlld1NwZWMsIGVuZCwgZmFsc2Up
OwotICAgICAgICAgICAgICAgIGlmICghdmlld0JveCkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHNldFZpZXdCb3goV1RGTW92ZSgqdmlld0JveCkp
OwotICAgICAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1Nw
ZWMgIT0gJyknKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBTdHJpbmco
Y3VyclZpZXdTcGVjLCBlbmQsIHZpZXdUYXJnZXRTcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHZpZXdU
YXJnZXRTcGVjKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8
fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiB2aWV3VGFyZ2V0U3RhcnQgPSArK2N1cnJW
aWV3U3BlYzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoY3VyclZpZXdTcGVjIDwgZW5kICYmICpj
dXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsK
LSAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCkKKyAgICByZXR1cm4gV1RG
OjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVy
KSAtPiBib29sIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0
eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBlOworCisgICAgICAgIGlmIChwYXJzaW5n
QnVmZmVyLmF0RW5kKCkgfHwgIW1fY29udGV4dEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZl
ciwgc3ZnVmlld1NwZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJygnKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXND
aGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgIT0gJyknKSB7CisgICAgICAg
ICAgICBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ3YnKSB7CisgICAgICAgICAgICAgICAgaWYgKHNr
aXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCB2aWV3Qm94U3BlYzxDaGFyYWN0ZXJU
eXBlPikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVm
ZmVyLCAnKCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHZpZXdCb3ggPSBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0Jv
eChwYXJzaW5nQnVmZmVyLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdmlld0Jv
eCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgc2V0Vmlld0JveChXVEZNb3ZlKCp2aWV3Qm94KSk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJyknKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBDaGFy
YWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCB2aWV3VGFyZ2V0U3BlYzxDaGFyYWN0ZXJUeXBl
PikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVy
LCAnKCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICBhdXRvIHZpZXdUYXJnZXRTdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24o
KTsKKyAgICAgICAgICAgICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZmZXIsICcpJyk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1fdmlld1Rh
cmdldFN0cmluZyA9IFN0cmluZyh2aWV3VGFyZ2V0U3RhcnQsIHBhcnNpbmdCdWZmZXIucG9zaXRp
b24oKSAtIHZpZXdUYXJnZXRTdGFydCk7CisgICAgICAgICAgICAgICAgICAgICsrcGFyc2luZ0J1
ZmZlcjsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAneicpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVy
LCB6b29tQW5kUGFuU3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZm
ZXIsICcoJykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHpvb21BbmRQYW4gPSBTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4ocGFy
c2luZ0J1ZmZlcik7CisgICAgICAgICAgICAgICAgaWYgKCF6b29tQW5kUGFuKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgc2V0Wm9vbUFuZFBhbigq
em9vbUFuZFBhbik7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVm
ZmVyLCAnKScpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdwJykgeworICAgICAgICAgICAgICAgIGlm
ICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHByZXNlcnZlQXNwZWN0UmF0
aW9TcGVjPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJygnKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgICAgICAgICAg
ICAgIGlmICghcHJlc2VydmVBc3BlY3RSYXRpby5wYXJzZShwYXJzaW5nQnVmZmVyLCBmYWxzZSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBzZXRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgICAgICAgICAgICAg
IGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJyknKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9
PSAndCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJz
aW5nQnVmZmVyLCB0cmFuc2Zvcm1TcGVjPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFy
c2luZ0J1ZmZlciwgJygnKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIG1fdHJhbnNmb3JtLT5wYXJzZShwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcpJykpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBtX3ZpZXdUYXJnZXRTdHJp
bmcgPSBTdHJpbmcodmlld1RhcmdldFN0YXJ0LCBjdXJyVmlld1NwZWMgLSB2aWV3VGFyZ2V0U3Rh
cnQpOwotICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwogICAgICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKCpjdXJy
Vmlld1NwZWMgPT0gJ3onKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdT
cGVjLCBlbmQsIHpvb21BbmRQYW5TcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHpvb21BbmRQYW5TcGVj
KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1cnJW
aWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICBp
ZiAoIVNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbihjdXJyVmlld1NwZWMsIGVuZCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3Bl
YyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZSBpZiAo
KmN1cnJWaWV3U3BlYyA9PSAncCcpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJy
Vmlld1NwZWMsIGVuZCwgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWMsIFdURl9BUlJBWV9MRU5HVEgo
cHJlc2VydmVBc3BlY3RSYXRpb1NwZWMpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9
ICcoJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjdXJyVmll
d1NwZWMrKzsKLSAgICAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2
ZUFzcGVjdFJhdGlvOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNl
KGN1cnJWaWV3U3BlYywgZW5kLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgc2V0UHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlv
KTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMg
IT0gJyknKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJW
aWV3U3BlYysrOwotICAgICAgICB9IGVsc2UgaWYgKCpjdXJyVmlld1NwZWMgPT0gJ3QnKSB7Ci0g
ICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHRyYW5zZm9ybVNw
ZWMsIFdURl9BUlJBWV9MRU5HVEgodHJhbnNmb3JtU3BlYykpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJy
Vmlld1NwZWMgIT0gJygnKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgbV90cmFuc2Zvcm0tPnBhcnNlKGN1cnJW
aWV3U3BlYywgZW5kKTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpj
dXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICBpZiAoY3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJyVmlld1Nw
ZWMgPT0gJzsnKQotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgfQotICAgIAotICAg
IGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAn
OycpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAq
cGFyc2luZ0J1ZmZlciAhPSAnKScpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CiB9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVmlld1NwZWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1ZpZXdTcGVjKGNvbnRleHRF
bGVtZW50KSk7CiAgICAgfQogCi0gICAgYm9vbCBwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZyYp
OworICAgIGJvb2wgcGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmdWaWV3Jik7CiAgICAgdm9pZCBy
ZXNldCgpOwogICAgIHZvaWQgcmVzZXRDb250ZXh0RWxlbWVudCgpIHsgbV9jb250ZXh0RWxlbWVu
dCA9IG51bGxwdHI7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcAko
cmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiwyNSArMjIsMzAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTVkdab29tQW5kUGFuLmgiCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZU51bWJlcnMuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNWR1pv
b21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbihjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hh
ciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJh
Y3RlclR5cGUgZGlzYWJsZVtdID0geyAnZCcsICdpJywgJ3MnLCAnYScsICdiJywgJ2wnLCAnZScg
fTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJU
eXBlIG1hZ25pZnlbXSA9IHsgJ20nLCAnYScsICdnJywgJ24nLCAnaScsICdmJywgJ3knIH07CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdab29t
QW5kUGFuVHlwZT4gcGFyc2Vab29tQW5kUGFuR2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENo
YXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBk
aXNhYmxlW10gPSB7ICdkJywgJ2knLCAncycsICdhJywgJ2InLCAnbCcsICdlJyB9OwotICAgIGlm
IChza2lwU3RyaW5nKHN0YXJ0LCBlbmQsIGRpc2FibGUsIFdURl9BUlJBWV9MRU5HVEgoZGlzYWJs
ZSkpKSB7Ci0gICAgICAgIG1fem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW5EaXNhYmxlOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgVUNoYXIgbWFnbmlm
eVtdID0geyAnbScsICdhJywgJ2cnLCAnbicsICdpJywgJ2YnLCAneScgfTsKLSAgICBpZiAoc2tp
cFN0cmluZyhzdGFydCwgZW5kLCBtYWduaWZ5LCBXVEZfQVJSQVlfTEVOR1RIKG1hZ25pZnkpKSkg
ewotICAgICAgICBtX3pvb21BbmRQYW4gPSBTVkdab29tQW5kUGFuTWFnbmlmeTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2lu
Z0J1ZmZlciwgZGlzYWJsZTxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgIHJldHVybiBTVkdab29t
QW5kUGFuRGlzYWJsZTsKKworICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1
ZmZlciwgbWFnbmlmeTxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgIHJldHVybiBTVkdab29tQW5k
UGFuTWFnbmlmeTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CiAKLSAgICByZXR1cm4g
ZmFsc2U7CitPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gU1ZHWm9vbUFuZFBhbjo6cGFyc2Va
b29tQW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQorewor
ICAgIHJldHVybiBwYXJzZVpvb21BbmRQYW5HZW5lcmljKHBhcnNpbmdCdWZmZXIpOworfQorCitP
cHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFu
KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVy
biBwYXJzZVpvb21BbmRQYW5HZW5lcmljKHBhcnNpbmdCdWZmZXIpOwogfQogCiB2b2lkIFNWR1pv
b21BbmRQYW46OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1pvb21BbmRQYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFu
ZFBhbi5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFu
ZFBhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw4IEBAIHB1YmxpYzoKIHByb3RlY3Rl
ZDoKICAgICBTVkdab29tQW5kUGFuKCkgPSBkZWZhdWx0OwogCi0gICAgYm9vbCBwYXJzZVpvb21B
bmRQYW4oY29uc3QgVUNoYXIqJiwgY29uc3QgVUNoYXIqKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8
U1ZHWm9vbUFuZFBhblR5cGU+IHBhcnNlWm9vbUFuZFBhbihTdHJpbmdQYXJzaW5nQnVmZmVyPExD
aGFyPiYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gcGFyc2Vab29t
QW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiAKIHByaXZhdGU6CiAgICAgU1ZH
Wm9vbUFuZFBhblR5cGUgbV96b29tQW5kUGFuIHsgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHWm9vbUFu
ZFBhblR5cGU+Ojppbml0aWFsVmFsdWUoKSB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402682</attachid>
            <date>2020-06-24 13:56:58 -0700</date>
            <delta_ts>2020-06-30 12:03:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213460-20200624135657.patch</filename>
            <type>text/plain</type>
            <size>221600</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM0MzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA2LTIzICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIHVubmVjZXNzYXJ5IHVwY29udmVyc2lvbiBv
ZiBTdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTM0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbV0lQXQorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVm
ZmVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcpOgor
CiAyMDIwLTA2LTIzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIFdURjo6c2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZApJbmRleDogU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjMzMzUpCisrKyBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00NTIsNiArNDUyLDcgQEAKIAkJN0MxMzc5NDIyMjIzMjZENTAwRDdBODI0IC8qIGllZWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gaWVlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEz
Nzk0MzIyMjMyNkQ1MDBEN0E4MjQgLyogUkVBRE1FLm1kICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gbmV0LmRhcmluZ2ZpcmViYWxsLm1hcmtkb3duOyBw
YXRoID0gUkVBRE1FLm1kOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNBNDVEMDIz
Q0ZBODgzMDA3REUzQTYgLyogUGxhdGZvcm1IYXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtSGF2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QzNCMDZFODI0QTExNkU2MDBGRDI2QzcgLyogU3RyaW5nUGFyc2luZ0J1ZmZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHJpbmdQYXJzaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDM0Y3MjM5MUQ3ODgxMTkwMDY3NEUyNiAvKiBCcmlnYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJyaWdhbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M0MjMwNzEyM0NFMkQ4QTAwNkU1NEQwIC8qIFBsYXRmb3JtRW5hYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtRW5hYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNDIzMDcyMjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM5Niw2ICsxMzk3LDcgQEAKIAkJCQlBOEE0NzMyODE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQThBNDczMjkxNTFBODI1
QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCAqLywKIAkJCQlBOEE0NzMyQTE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nT3BlcmF0b3JzLmggKi8sCisJCQkJN0MzQjA2RTgyNEExMTZFNjAwRkQyNkM3
IC8qIFN0cmluZ1BhcnNpbmdCdWZmZXIuaCAqLywKIAkJCQlDRDAwMzYwRDIxNTAxRjc4MDBGNEVE
NEMgLyogU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oICovLAogCQkJCTkzRjE5OTNEMTlENzk1
OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCAqLywKIAkJCQkxQTZFQjFERjE4N0QwQkQzMDAz
MDEyNkYgLyogU3RyaW5nVmlldy5oICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0zMzgsNiArMzM4LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIHRleHQv
U3RyaW5nSGFzaGVyLmgKICAgICB0ZXh0L1N0cmluZ0ltcGwuaAogICAgIHRleHQvU3RyaW5nT3Bl
cmF0b3JzLmgKKyAgICB0ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAogICAgIHRleHQvU3RyaW5n
VG9JbnRlZ2VyQ29udmVyc2lvbi5oCiAgICAgdGV4dC9TdHJpbmdWaWV3LmgKICAgICB0ZXh0L1N5
bWJvbEltcGwuaApJbmRleDogU291cmNlL1dURi93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dU
Ri93dGYvRm9yd2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCA9IGFsaWdub2YoVCkKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lID0gRHVtYlB0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgPSBEdW1iUHRyVHJhaXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0
eXBlbmFtZT4gY2xhc3MgU3RyaW5nQnVmZmVyOwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0
cmluZ1BhcnNpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBj
bGFzcyBTdHJpbmdUeXBlQWRhcHRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBVbmlxdWVS
ZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgVmFyaWFudDsKQEAgLTEyMiw2ICsxMjMs
NyBAQCB1c2luZyBXVEY6OlN0cmluZzsKIHVzaW5nIFdURjo6U3RyaW5nQnVmZmVyOwogdXNpbmcg
V1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwordXNpbmcgV1RGOjpT
dHJpbmdQYXJzaW5nQnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpU
ZXh0UG9zaXRpb247CiB1c2luZyBXVEY6OlRleHRTdHJlYW07CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0NvbW1vbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2NsYXNzIFN0cmluZ1BhcnNpbmdCdWZmZXIgZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSBUOworCisgICAgY29u
c3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXIoKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdGV4
cHIgU3RyaW5nUGFyc2luZ0J1ZmZlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIDogbV9wb3NpdGlvbiB7IGNoYXJhY3RlcnMgfQorICAg
ICAgICAsIG1fZW5kIHsgY2hhcmFjdGVycyArIGxlbmd0aCB9CisgICAgeworICAgIH0KKworICAg
IGNvbnN0ZXhwciBTdHJpbmdQYXJzaW5nQnVmZmVyKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJh
Y3RlcnMsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uIHsg
Y2hhcmFjdGVycyB9CisgICAgICAgICwgbV9lbmQgeyBlbmQgfQorICAgIHsKKyAgICB9CisKKyAg
ICBjb25zdGV4cHIgY29uc3QgQ2hhcmFjdGVyVHlwZSogcG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Bvc2l0aW9uOyB9CisgICAgY29uc3RleHByIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CisKKyAgICBjb25zdGV4cHIgYm9vbCBoYXNDaGFyYWN0
ZXJzUmVtYWluaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbiA8IG1fZW5kOyB9CisgICAg
Y29uc3RleHByIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uID09IG1fZW5k
OyB9CisKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgbGVuZ3RoUmVtYWluaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmQgLSBtX3Bvc2l0aW9uOyB9CisgICAgU3RyaW5nVmlldyBzdHJpbmdWaWV3T2ZD
aGFyYWN0ZXJzUmVtYWluaW5nKCkgeyByZXR1cm4geyBtX3Bvc2l0aW9uLCBsZW5ndGhSZW1haW5p
bmcoKSB9OyB9CisKKyAgICBDaGFyYWN0ZXJUeXBlIG9wZXJhdG9yW10odW5zaWduZWQgaSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3Bvc2l0aW9uICsgaSA8IG1fZW5kKTsKKyAgICAgICAgcmV0
dXJuIG1fcG9zaXRpb25baV07CisgICAgfQorCisgICAgY29uc3RleHByIENoYXJhY3RlclR5cGUg
b3BlcmF0b3IqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqbV9wb3NpdGlvbjsKKyAg
ICB9CisKKyAgICBjb25zdGV4cHIgdm9pZCBhZHZhbmNlKCkKKyAgICB7CisgICAgICAgICsrbV9w
b3NpdGlvbjsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgdm9pZCBhZHZhbmNlQnkodW5zaWduZWQg
cGxhY2VzKQorICAgIHsKKyAgICAgICAgbV9wb3NpdGlvbiArPSBwbGFjZXM7CisgICAgfQorCisg
ICAgY29uc3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXImIG9wZXJhdG9yKysoKQorICAgIHsKKyAg
ICAgICAgYWR2YW5jZSgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgY29u
c3RleHByIFN0cmluZ1BhcnNpbmdCdWZmZXIgb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAg
ICBhdXRvIHJlc3VsdCA9ICp0aGlzOworICAgICAgICArKygqdGhpcyk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIG1f
cG9zaXRpb24geyBudWxscHRyIH07CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogbV9lbmQgeyBu
dWxscHRyIH07Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlLCB0eXBlbmFtZSBG
dW5jdGlvbj4gZGVjbHR5cGUoYXV0bykgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKFN0cmluZ1R5
cGUmJiBzdHJpbmcsIEZ1bmN0aW9uJiYgZnVuY3RvcikKK3sKKyAgICBpZiAoc3RyaW5nLmlzOEJp
dCgpKQorICAgICAgICByZXR1cm4gZnVuY3RvcihTdHJpbmdQYXJzaW5nQnVmZmVyIHsgc3RyaW5n
LmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9KTsKKyAgICByZXR1cm4gZnVuY3RvcihT
dHJpbmdQYXJzaW5nQnVmZmVyIHsgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3Ro
KCkgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlN0cmluZ1BhcnNp
bmdCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM0MzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNjUgQEAKKzIwMjAtMDYt
MjMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgdW5u
ZWNlc3NhcnkgdXBjb252ZXJzaW9uIG9mIFN0cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzQ2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvcGFyc2VyL1BhcnNp
bmdVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTm90QVNDSUlTcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpza2lwRXhhY3RseSk6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJQ
cmVkaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcFVudGlsKToKKyAgICAgICAgKFdlYkNv
cmU6OnNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UpOgorICAgICAgICAoV2ViQ29yZTo6c2tp
cENoYXJhY3RlcnNFeGFjdGx5KToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSGFzaEFsZ29yaXRobUFkdmFu
Y2luZ1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAg
ICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaDoKKyAgICAgICAgKiBsb2Fk
ZXIvU3VicmVzb3VyY2VJbnRlZ3JpdHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3BsaXRPblNw
YWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUludGVncml0eU1ldGFkYXRhKToKKyAgICAg
ICAgKiBsb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VNYW5pZmVzdCk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6ZGlkUmVj
ZWl2ZUhlYWRlcik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0RpcmVjdGl2ZU5hbWVDaGFyYWN0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojpw
YXJzZURpcmVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVMaXN0OjpwYXJzZVJlcG9ydFVSSSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRDU1BEaXJlY3RpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YXBwbHlTYW5kYm94
UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OnNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldEJsb2NrQWxsTWl4ZWRDb250ZW50
RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0OjphZGREaXJlY3RpdmUpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3QuaDoKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNNZWRp
YVR5cGVDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5
TWVkaWFMaXN0RGlyZWN0aXZlOjpwYXJzZSk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1NvdXJjZUNo
YXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc0hvc3RDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6aXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omlz
U2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm90Q29s
b25PclNsYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU291cmNlTGlzdE5vbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6
cGFyc2VTY2hlbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdDo6cGFyc2VIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhcnNlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNO
b25jZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0OjpwYXJzZU5vbmNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZSk6CisgICAgICAgICogcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oOgorICAgICAgICAqIHN2Zy9T
VkdBbmdsZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQW5nbGVUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuZ2xlVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAq
IHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlS2V5
U3BsaW5lcyk6CisgICAgICAgICogc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveEdlbmVyaWMpOgorICAgICAgICAqIHN2Zy9T
VkdGaXRUb1ZpZXdCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoTGlzdC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoTGlzdDo6cGFyc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTGVuZ3RoTGlzdDo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgICogc3Zn
L1NWR0xlbmd0aExpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aExpc3Q6OnBhcnNl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VMZW5ndGhUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZh
bHVlOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoVmFsdWU6OnNldFZh
bHVlQXNTdHJpbmcpOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhWYWx1ZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGVuZ3RoVmFsdWU6OlNWR0xlbmd0aFZhbHVlKToKKyAgICAgICAgKiBzdmcv
U1ZHTnVtYmVyTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlz
dDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6dmFsdWVBc1N0cmlu
ZyBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR051bWJlckxpc3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR051bWJlckxpc3Q6OnBhcnNlKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQu
CisgICAgICAgICogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZW5lcmljUGFyc2VOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlQXJjRmxhZyk6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOdW1iZXJPcHRpb25hbE51
bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUdseXBoTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZVVuaWNvZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUtl
cm5pbmdVbmljb2RlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyaWNQYXJzZUZsb2F0
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKiBz
dmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjppc1NWR1NwYWNlT3JD
b21tYSk6CisgICAgICAgIChXZWJDb3JlOjpza2lwT3B0aW9uYWxTVkdTcGFjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2tpcFN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhTb3Vy
Y2UuaDoKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVU
b1ZlcnRpY2FsU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNl
OjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291
cmNlOjpwYXJzZUFyY1RvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNWR1NlZ21l
bnRUeXBlSGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGF0aFN0cmluZ1NvdXJj
ZS5oOgorICAgICAgICAqIHN2Zy9TVkdQb2ludExpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BvaW50TGlzdDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRM
aXN0Ojp2YWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHUG9pbnRMaXN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExpc3Q6OnBhcnNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaDoKKyAgICAgICAgKiBzdmcvU1ZHU3Ry
aW5nTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3RyaW5nTGlzdDo6cGFy
c2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3RyaW5nTGlzdDo6dmFsdWVBc1N0cmluZyBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR1N0cmluZ0xpc3QuaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJh
bnNmb3JtTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlz
dDo6Y29uc29saWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6Y29u
Y2F0ZW5hdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6cGFy
c2VHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybUxpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3Qp
OgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1MaXN0Lmg6CisgICAgICAgICogc3ZnL1NWR1Ry
YW5zZm9ybWFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VUcmFuc2Zvcm1QYXJhbUxp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZUdlbmVyaWMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVR5cGVHZW5lcmljKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3Bl
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6Cisg
ICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmg6CisgICAgICAgICogc3ZnL1NWR1pvb21BbmRQYW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2Vab29tQW5kUGFuR2VuZXJpYyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4pOgorICAgICAgICAqIHN2
Zy9TVkdab29tQW5kUGFuLmg6CisKIDIwMjAtMDYtMjMgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbTXVsdGljb2xdIFJlc2V0IHRoZSBjaGlsZHJlbklubGluZSBz
dGF0ZSBvbiB0aGUgUmVuZGVyQmxvY2tGbG93IHdoZW4gZGVzdHJveWluZyB0aGUgbXVsdGljb2x1
bW4gY29udGV4dApJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNjMzMzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC02NjQsNiArNjY0
LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgaHRtbC9m
b3Jtcy9GaWxlSWNvbkxvYWRlci5oCiAKKyAgICBodG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVz
LmgKICAgICBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmgKIAogICAgIGh0bWwvdHJhY2sv
QXVkaW9UcmFjay5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjYzMzM1KQorKysgU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI1MzcsNiArMjUzNyw3
IEBAIHN2Zy9TVkdIS2VybkVsZW1lbnQuY3BwCiBzdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAogc3Zn
L1NWR0ltYWdlTG9hZGVyLmNwcAogc3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwCitzdmcvU1ZHTGVu
Z3RoTGlzdC5jcHAKIHN2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAKIHN2Zy9TVkdMaW5lRWxlbWVudC5j
cHAKIHN2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCkBAIC0yNTQ2LDYgKzI1NDcsNyBA
QCBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAKIHN2Zy9TVkdNYXNrRWxlbWVudC5jcHAKIHN2Zy9T
VkdNZXRhZGF0YUVsZW1lbnQuY3BwCiBzdmcvU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5jcHAKK3N2
Zy9TVkdOdW1iZXJMaXN0LmNwcAogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAKIHN2Zy9TVkdQ
YXRoQmxlbmRlci5jcHAKIHN2Zy9TVkdQYXRoQnVpbGRlci5jcHAKQEAgLTI1NjAsNiArMjU2Miw3
IEBAIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAogc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXIuY3BwCiBzdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHAKIHN2Zy9TVkdQYXR0ZXJuRWxl
bWVudC5jcHAKK3N2Zy9TVkdQb2ludExpc3QuY3BwCiBzdmcvU1ZHUG9seUVsZW1lbnQuY3BwCiBz
dmcvU1ZHUG9seWdvbkVsZW1lbnQuY3BwCiBzdmcvU1ZHUG9seWxpbmVFbGVtZW50LmNwcApAQCAt
MjU3MCw2ICsyNTczLDcgQEAgc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCiBzdmcvU1ZHU2NyaXB0RWxl
bWVudC5jcHAKIHN2Zy9TVkdTZXRFbGVtZW50LmNwcAogc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAor
c3ZnL1NWR1N0cmluZ0xpc3QuY3BwCiBzdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAogc3ZnL1NWR1N3
aXRjaEVsZW1lbnQuY3BwCiBzdmcvU1ZHU3ltYm9sRWxlbWVudC5jcHAKQEAgLTI1ODMsNiArMjU4
Nyw3IEBAIHN2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAogc3ZnL1NWR1RpdGxlRWxl
bWVudC5jcHAKIHN2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAogc3ZnL1NWR1RyYW5zZm9y
bURpc3RhbmNlLmNwcAorc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCiBzdmcvU1ZHVHJhbnNmb3Jt
YWJsZS5jcHAKIHN2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCiBzdmcvU1ZHVW5rbm93bkVsZW1lbnQu
Y3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1ODgsNyArMTU4OCw3
IEBACiAJCTUzMjA0MjAyMUY5QTlGMTAwMEI4MUIyQSAvKiBVc2VyQWdlbnRTY3JpcHRzRGF0YS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREFCNkQz
MDE3QzkyNTk1MDBDNjBCMzQgLyogVXNlckFnZW50U2NyaXB0c0RhdGEuY3BwICovOyB9OwogCQk1
MzUxRDRCMTFERjkxNkI0MDA4MDEwQ0QgLyogRmlsZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1MUQ0QUYxREY5MTZBQzAwODAxMENEIC8q
IEZpbGVIYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MzZENUEyMDE5M0UxOEU5MDBDRTRDQUIgLyogSFRNTFNyY3NldFBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2RDVBMUYxOTNF
MThFOTAwQ0U0Q0FCIC8qIEhUTUxTcmNzZXRQYXJzZXIuaCAqLzsgfTsKLQkJNTM2RDVBMjMxOTNF
OEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkQ1QTIyMTkzRThFMEMwMENFNENBQiAvKiBQYXJz
aW5nVXRpbGl0aWVzLmggKi87IH07CisJCTUzNkQ1QTIzMTkzRThFMEMwMENFNENBQiAvKiBQYXJz
aW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzZENUEyMjE5M0U4RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGllcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzOEVDODAyMUY5
NkFGODEwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzhFQzdGQTFGOTZBQTcwMDA0RDIyQTggLyogVW5p
ZmllZFNvdXJjZTEuY3BwICovOyB9OwogCQk1MzhFQzgwMzFGOTZBRjgxMDA0RDIyQTggLyogVW5p
ZmllZFNvdXJjZTEtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzhFQzdGMzFGOTZBQTVCMDA0RDIyQTggLyogVW5pZmllZFNvdXJjZTEtbW0ubW0g
Ki87IH07CiAJCTUzOEVDODA0MUY5NkFGODEwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzhFQzdFRTFG
OTZBQTU2MDA0RDIyQTggLyogVW5pZmllZFNvdXJjZTIuY3BwICovOyB9OwpAQCAtMTAxODgsNiAr
MTAxODgsMTEgQEAKIAkJN0NEMzQ0MTIxRjMxMDhFMjAwMERDRDQ5IC8qIEpTTXV0YXRpb25DYWxs
YmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU011dGF0aW9uQ2FsbGJhY2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Q0OTRDQTFBODZFQjFEMDAwQTg3RUMgLyogUmVu
ZGVyQXR0YWNobWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJBdHRhY2htZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NENDk0
Q0IxQTg2RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyQXR0YWNobWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3Q0Q3MEMzRDI0QTI4QTNBMDBFNjEwNDAgLyogU1ZHTGVuZ3RoTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdMZW5ndGhMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0NENzBDNDAyNEEyOEFDOTAwRTYxMDQwIC8qIFNWR051bWJlckxpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHTnVtYmVyTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDRDcwQzQyMjRBMjhCNzAwMEU2MTA0MCAvKiBTVkdQb2ludExpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUG9pbnRMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0NENzBDNDMyNEEyOEJFQzAwRTYxMDQwIC8qIFNWR1N0cmluZ0xpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHU3RyaW5nTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDRDcwQzQ2MjRBMjhDRDcwMEU2MTA0MCAvKiBTVkdUcmFuc2Zvcm1MaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RyYW5zZm9ybUxpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3Q0RFNzM5NjFGOUJENTk1MDAzOTAzMTIgLyogU2V0dGluZ3Mu
eWFtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTZXR0aW5ncy55YW1sOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0RFOEVCQzFGMTkzQkM1MDAxNjhGRTcgLyogQ1NTU3R5bGVEZWNs
YXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NTdHls
ZURlY2xhcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFMTkxNDcx
RjJBOThBRjAwMjcyRjc4IC8qIEZldGNoUmVxdWVzdEluaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmV0Y2hSZXF1ZXN0SW5pdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjUxMzAsNiArMjUxMzUsNyBAQAogCQkJCUIyMjI3ODlFMEQwMEJGMjAwMDcxQjc4
MiAvKiBTVkdMZW5ndGguaWRsICovLAogCQkJCTcxMzQ0OTZCMTQ2OTQxQjMwMDcyMDMxMiAvKiBT
VkdMZW5ndGhDb250ZXh0LmNwcCAqLywKIAkJCQk3MTM0NDk2QzE0Njk0MUIzMDA3MjAzMTIgLyog
U1ZHTGVuZ3RoQ29udGV4dC5oICovLAorCQkJCTdDRDcwQzNEMjRBMjhBM0EwMEU2MTA0MCAvKiBT
VkdMZW5ndGhMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzhBMDBEMDBCRjIwMDA3MUI3ODIgLyogU1ZH
TGVuZ3RoTGlzdC5oICovLAogCQkJCUIyMjI3OEExMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdMZW5n
dGhMaXN0LmlkbCAqLywKIAkJCQk3Q0U1OEQ1MjFERDdCMDkzMDAxMjg1NTIgLyogU1ZHTGVuZ3Ro
VmFsdWUuY3BwICovLApAQCAtMjUxNjIsNiArMjUxNjgsNyBAQAogCQkJCTQ0RDhEQTk4MTM5NTQ1
QkUwMDMzN0I3NSAvKiBTVkdNUGF0aEVsZW1lbnQuaWRsICovLAogCQkJCTdDRTU4RDRGMURENjlB
MUUwMDEyODU1MiAvKiBTVkdOdW1iZXIuaCAqLywKIAkJCQlCMjIyNzhCOTBEMDBCRjIwMDA3MUI3
ODIgLyogU1ZHTnVtYmVyLmlkbCAqLywKKwkJCQk3Q0Q3MEM0MDI0QTI4QUM5MDBFNjEwNDAgLyog
U1ZHTnVtYmVyTGlzdC5jcHAgKi8sCiAJCQkJQjIyMjc4QkIwRDAwQkYyMDAwNzFCNzgyIC8qIFNW
R051bWJlckxpc3QuaCAqLywKIAkJCQlCMjIyNzhCQzBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHTnVt
YmVyTGlzdC5pZGwgKi8sCiAJCQkJQjIyMjc4QzAwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR1BhcnNl
clV0aWxpdGllcy5jcHAgKi8sCkBAIC0yNTIyNSw2ICsyNTIzMiw3IEBACiAJCQkJQjIyMjc4RjMw
RDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BhdHRlcm5FbGVtZW50LmlkbCAqLywKIAkJCQk3Q0U1OEQ0
OTFERDY0QTVCMDAxMjg1NTIgLyogU1ZHUG9pbnQuaCAqLywKIAkJCQlCMjIyNzhGNDBEMDBCRjIx
MDA3MUI3ODIgLyogU1ZHUG9pbnQuaWRsICovLAorCQkJCTdDRDcwQzQyMjRBMjhCNzAwMEU2MTA0
MCAvKiBTVkdQb2ludExpc3QuY3BwICovLAogCQkJCUIyMjI3OEY2MEQwMEJGMjEwMDcxQjc4MiAv
KiBTVkdQb2ludExpc3QuaCAqLywKIAkJCQlCMjIyNzhGNzBEMDBCRjIxMDA3MUI3ODIgLyogU1ZH
UG9pbnRMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzhGODBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUG9s
eUVsZW1lbnQuY3BwICovLApAQCAtMjUyNTgsNiArMjUyNjYsNyBAQAogCQkJCUIyMjI3OTEyMEQw
MEJGMjEwMDcxQjc4MiAvKiBTVkdTdG9wRWxlbWVudC5jcHAgKi8sCiAJCQkJQjIyMjc5MTMwRDAw
QkYyMTAwNzFCNzgyIC8qIFNWR1N0b3BFbGVtZW50LmggKi8sCiAJCQkJQjIyMjc5MTQwRDAwQkYy
MTAwNzFCNzgyIC8qIFNWR1N0b3BFbGVtZW50LmlkbCAqLywKKwkJCQk3Q0Q3MEM0MzI0QTI4QkVD
MDBFNjEwNDAgLyogU1ZHU3RyaW5nTGlzdC5jcHAgKi8sCiAJCQkJQjIyMjc5MTYwRDAwQkYyMTAw
NzFCNzgyIC8qIFNWR1N0cmluZ0xpc3QuaCAqLywKIAkJCQlCMjIyNzkxNzBEMDBCRjIxMDA3MUI3
ODIgLyogU1ZHU3RyaW5nTGlzdC5pZGwgKi8sCiAJCQkJQjIyMjc5MjEwRDAwQkYyMTAwNzFCNzgy
IC8qIFNWR1N0eWxlRWxlbWVudC5jcHAgKi8sCkBAIC0yNTI5OSw2ICsyNTMwOCw3IEBACiAJCQkJ
QjIyMjc5NDQwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybWFibGUuaCAqLywKIAkJCQlC
MjIyNzk0NjBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwICovLAog
CQkJCUIyMjI3OTQ3MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oICov
LAorCQkJCTdDRDcwQzQ2MjRBMjhDRDcwMEU2MTA0MCAvKiBTVkdUcmFuc2Zvcm1MaXN0LmNwcCAq
LywKIAkJCQlCMjIyNzk0OTBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtTGlzdC5oICov
LAogCQkJCUIyMjI3OTRBMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1MaXN0LmlkbCAq
LywKIAkJCQk3Q0U1OEQ1NjFERDdEOTZEMDAxMjg1NTIgLyogU1ZHVHJhbnNmb3JtVmFsdWUuaCAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVz
LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNp
bmdVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDE0IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIGJvb2wgaXNOb3RBU0NJSVNwYWNlKFVDaGFyIGMpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KK2lubGluZSBib29sIGlzTm90QVNDSUlTcGFjZShD
aGFyVHlwZSBjKQogewogICAgIHJldHVybiAhaXNBU0NJSVNwYWNlKGMpOwogfQogICAgIAotdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+Ci1ib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBl
KiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIENoYXJUeXBlIGRlbGltaXRlcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCB0eXBlbmFtZSBEZWxpbWl0ZXJUeXBlPgorYm9vbCBz
a2lwRXhhY3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5k
LCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikKIHsKICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYg
KnBvc2l0aW9uID09IGRlbGltaXRlcikgewogICAgICAgICArK3Bvc2l0aW9uOwpAQCAtNDksNiAr
NTAsMTYgQEAgYm9vbCBza2lwRXhhY3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIHR5cGVuYW1lIERl
bGltaXRlclR5cGU+Citib29sIHNraXBFeGFjdGx5KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhclR5
cGU+JiBwYXJzaW5nQnVmZmVyLCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikKK3sKKyAgICBpZiAo
cGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIg
PT0gZGVsaW1pdGVyKSB7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KIGJvb2wgc2tpcEV4
YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCkKIHsK
QEAgLTU5LDEzICs3MCwzMCBAQCBib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9z
aXRpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4K
LXZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBl
KiBlbmQsIENoYXJUeXBlIGRlbGltaXRlcikKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBi
b29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Citib29sIHNraXBFeGFjdGx5KFN0cmlu
Z1BhcnNpbmdCdWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIGlmIChwYXJz
aW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBjaGFyYWN0ZXJQcmVkaWNhdGUo
KnBhcnNpbmdCdWZmZXIpKSB7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+Cit2b2lkIHNraXBVbnRpbChjb25z
dCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kLCBEZWxpbWl0ZXJUeXBl
IGRlbGltaXRlcikKIHsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uICE9
IGRlbGltaXRlcikKICAgICAgICAgKytwb3NpdGlvbjsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+Cit2b2lkIHNraXBVbnRpbChTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgRGVsaW1pdGVyVHlwZSBkZWxp
bWl0ZXIpCit7CisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpICYmICpwYXJzaW5nQnVmZmVyICE9IGRlbGltaXRlcikKKyAgICAgICAgKytwYXJzaW5nQnVm
ZmVyOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVk
aWNhdGUoQ2hhclR5cGUpPgogdm9pZCBza2lwVW50aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlv
biwgY29uc3QgQ2hhclR5cGUqIGVuZCkKIHsKQEAgLTc0LDYgKzEwMiwxMyBAQCB2b2lkIHNraXBV
bnRpbChjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Cit2b2lkIHNraXBVbnRp
bChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICB3
aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgIWNoYXJhY3Rl
clByZWRpY2F0ZSgqcGFyc2luZ0J1ZmZlcikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENo
YXJUeXBlKT4KIHZvaWQgc2tpcFdoaWxlKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0
IENoYXJUeXBlKiBlbmQpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmIGNoYXJhY3Rl
clByZWRpY2F0ZSgqcG9zaXRpb24pKQpAQCAtODEsNiArMTE2LDEzIEBAIHZvaWQgc2tpcFdoaWxl
KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5
cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK3ZvaWQgc2tpcFdoaWxlKFN0
cmluZ1BhcnNpbmdCdWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHdoaWxl
IChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBjaGFyYWN0ZXJQcmVk
aWNhdGUoKnBhcnNpbmdCdWZmZXIpKQorICAgICAgICArK3BhcnNpbmdCdWZmZXI7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlw
ZSk+CiB2b2lkIHJldmVyc2VTa2lwV2hpbGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29u
c3QgQ2hhclR5cGUqIHN0YXJ0KQogewogICAgIHdoaWxlIChwb3NpdGlvbiA+PSBzdGFydCAmJiBj
aGFyYWN0ZXJQcmVkaWNhdGUoKnBvc2l0aW9uKSkKQEAgLTkyLDExICsxMzQsNDEgQEAgYm9vbCBz
a2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IAogewogICAgIGlmIChwb3NpdGlvbiAr
IGxvd2VyY2FzZUxldHRlcnNMZW5ndGggPiBlbmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIVdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGxvd2Vy
Y2FzZUxldHRlcnNMZW5ndGggLSAxLCBsb3dlcmNhc2VMZXR0ZXJzKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHBvc2l0aW9uICs9IChsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBib29sIHJlc3VsdCA9IFdURjo6ZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxLCBs
b3dlcmNhc2VMZXR0ZXJzKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICBwb3NpdGlvbiArPSAo
bG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEpOwotICAgIHJldHVybiByZXN1bHQ7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB1bnNpZ25lZCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3Ro
PgorYm9vbCBza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0
ZXJzKVtsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoXSkKK3sKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5s
ZW5ndGhSZW1haW5pbmcoKSA8IGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFXVEY6OmVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEsIGxv
d2VyY2FzZUxldHRlcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcGFyc2luZ0J1ZmZl
ci5hZHZhbmNlQnkobG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEpOworICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB1bnNpZ25lZCBjaGFyYWN0
ZXJDb3VudD4gY29uc3RleHByIGJvb2wgc2tpcENoYXJhY3RlcnNFeGFjdGx5KGNvbnN0IENoYXJh
Y3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgQ2hhcmFjdGVy
VHlwZSgmc3RyKVtjaGFyYWN0ZXJDb3VudF0pCit7CisgICAgaWYgKGVuZCAtIHB0ciA8IGNoYXJh
Y3RlckNvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1lbWNtcChzdHIsIHB0
ciwgc2l6ZW9mKENoYXJhY3RlclR5cGUpICogY2hhcmFjdGVyQ291bnQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcHRyICs9IGNoYXJhY3RlckNvdW50OworICAgIHJldHVybiB0cnVlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB1bnNpZ25lZCBjaGFyYWN0ZXJD
b3VudD4gY29uc3RleHByIGJvb2wgc2tpcENoYXJhY3RlcnNFeGFjdGx5KFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIsIGNvbnN0IENoYXJhY3RlclR5cGUo
JnN0cilbY2hhcmFjdGVyQ291bnRdKQoreworICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJl
bWFpbmluZygpIDwgY2hhcmFjdGVyQ291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobWVtY21wKHN0ciwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpLCBzaXplb2YoQ2hhcmFjdGVy
VHlwZSkgKiBjaGFyYWN0ZXJDb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwYXJz
aW5nQnVmZmVyLmFkdmFuY2VCeShjaGFyYWN0ZXJDb3VudCk7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCShyZXZpc2lvbiAyNjMz
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTA0ICszMCw5NiBAQAogI2luY2x1ZGUgPHBhbC9j
cnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1
ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlv
bihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0mIGFsZ29yaXRobSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxSZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobT4gcGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5jaW5n
UG9zaXRpb24oU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZl
cikKIHsKICAgICAvLyBGSVhNRTogVGhpcyB3b3VsZCBiZSBtdWNoIGNsZWFuZXIgd2l0aCBhIGxv
b2t1cCB0YWJsZSBvZiBwYWlycyBvZiBsYWJlbCAvIGFsZ29yaXRobSBlbnVtIHZhbHVlcywgYnV0
IEkgY2FuJ3QKICAgICAvLyBmaWd1cmUgb3V0IGhvdyB0byBrZWVwIHRoZSBsYWJlbHMgY29tcGls
ZXRpbWUgc3RyaW5ncyBmb3Igc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZS4KIAotICAgIGlm
IChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBlbmQsICJzaGEyNTYiKSkg
ewotICAgICAgICBhbGdvcml0aG0gPSBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29y
aXRobTo6U0hBMjU2OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHNraXBF
eGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGVuZCwgInNoYTM4NCIpKSB7Ci0gICAg
ICAgIGFsZ29yaXRobSA9IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtOjpT
SEEzODQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoc2tpcEV4YWN0bHlJ
Z25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgZW5kLCAic2hhNTEyIikpIHsKLSAgICAgICAgYWxn
b3JpdGhtID0gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTUxMjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5n
QVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICJzaGEyNTYiKSkKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEEyNTY7CisgICAgaWYgKHNraXBF
eGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgInNoYTM4NCIpKQorICAgICAg
ICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTM4NDsK
KyAgICBpZiAoc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAic2hh
NTEyIikpCisgICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29y
aXRobTo6U0hBNTEyOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgT3B0aW9u
YWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJ
bXBsKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSog
ZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFJl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAg
IGlmIChwb3NpdGlvbiA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdDo6QWxnb3JpdGhtIGFsZ29yaXRobTsKLSAgICBpZiAoIXBhcnNlSGFzaEFsZ29yaXRobUFk
dmFuY2luZ1Bvc2l0aW9uKHBvc2l0aW9uLCBlbmQsIGFsZ29yaXRobSkpCisgICAgYXV0byBhbGdv
cml0aG0gPSBwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihwYXJzaW5nQnVmZmVy
KTsKKyAgICBpZiAoIWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJy0nKSkK
KyAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICctJykp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBiZWdpbkhhc2hWYWx1ZSA9IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAgICBza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPScpOwotICAgIHNraXBFeGFj
dGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICc9Jyk7CisgICAgYXV0byBiZWdpbkhh
c2hWYWx1ZSA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFj
dGVyVHlwZSwgaXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7Cisg
ICAgc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz0nKTsKKyAgICBz
a2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnPScpOwogCi0gICAgaWYg
KHBvc2l0aW9uID09IGJlZ2luSGFzaFZhbHVlKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0
aW9uKCkgPT0gYmVnaW5IYXNoVmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
ICAgICBWZWN0b3I8dWludDhfdD4gZGlnZXN0OwotICAgIFN0cmluZ1ZpZXcgaGFzaFZhbHVlKGJl
Z2luSGFzaFZhbHVlLCBwb3NpdGlvbiAtIGJlZ2luSGFzaFZhbHVlKTsKKyAgICBTdHJpbmdWaWV3
IGhhc2hWYWx1ZShiZWdpbkhhc2hWYWx1ZSwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVn
aW5IYXNoVmFsdWUpOwogICAgIGlmICghYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgZGlnZXN0LCBC
YXNlNjRWYWxpZGF0ZVBhZGRpbmcpKSB7CiAgICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGhh
c2hWYWx1ZSwgZGlnZXN0KSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQogCi0gICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGFsZ29yaXRobSwg
V1RGTW92ZShkaWdlc3QpIH07CisgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dCB7ICphbGdvcml0aG0sIFdURk1vdmUoZGlnZXN0KSB9OwogfQogCi1PcHRpb25hbDxSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBVQ2hh
ciomIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKQorT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxV
Q2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIHBhcnNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dEltcGwocGFyc2luZ0J1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNv
bnN0IExDaGFyKiBlbmQpCitPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBh
cnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2lu
Z0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChiZWdp
biwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChwYXJzaW5n
QnVmZmVyKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBP
cHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRD
cnlwdG9ncmFwaGljRGlnZXN0SW1wbChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNv
bnN0IENoYXJhY3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHN0YXRpYyBPcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJz
ZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJh
Y3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCisg
ICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBh
bGdvcml0aG07Ci0gICAgaWYgKCFwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihw
b3NpdGlvbiwgZW5kLCBhbGdvcml0aG0pKQorICAgIGF1dG8gYWxnb3JpdGhtID0gcGFyc2VIYXNo
QWxnb3JpdGhtQWR2YW5jaW5nUG9zaXRpb24ocGFyc2luZ0J1ZmZlcik7CisgICAgaWYgKCFhbGdv
cml0aG0pCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoIXNraXBFeGFj
dGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICctJykpCisgICAgaWYgKCFza2lwRXhh
Y3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnLScpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW5IYXNoVmFsdWUg
PSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNCYXNlNjRPckJhc2U2
NFVSTENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Ci0gICAgc2tpcEV4YWN0bHk8Q2hhcmFjdGVy
VHlwZT4ocG9zaXRpb24sIGVuZCwgJz0nKTsKLSAgICBza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBl
Pihwb3NpdGlvbiwgZW5kLCAnPScpOworICAgIGF1dG8gYmVnaW5IYXNoVmFsdWUgPSBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQmFzZTY0
T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOworICAgIHNraXBFeGFjdGx5PENo
YXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc9Jyk7CisgICAgc2tpcEV4YWN0bHk8Q2hhcmFj
dGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz0nKTsKIAotICAgIGlmIChwb3NpdGlvbiA9PSBiZWdp
bkhhc2hWYWx1ZSkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09IGJlZ2luSGFz
aFZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEVuY29k
ZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyBhbGdvcml0aG0sIFN0cmluZyhiZWdpbkhh
c2hWYWx1ZSwgcG9zaXRpb24gLSBiZWdpbkhhc2hWYWx1ZSkgfTsKKyAgICByZXR1cm4gRW5jb2Rl
ZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFN0cmluZyhiZWdpbkhh
c2hWYWx1ZSwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5IYXNoVmFsdWUpIH07CiB9
CiAKLU9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5j
b2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgVUNoYXIqJiBiZWdpbiwgY29uc3QgVUNoYXIq
IGVuZCkKK09wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNl
RW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBh
cnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdl
c3RJbXBsKGJlZ2luLCBlbmQpOworICAgIHJldHVybiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGlj
RGlnZXN0SW1wbChwYXJzaW5nQnVmZmVyKTsKIH0KIAotT3B0aW9uYWw8RW5jb2RlZFJlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25z
dCBMQ2hhciomIGJlZ2luLCBjb25zdCBMQ2hhciogZW5kKQorT3B0aW9uYWw8RW5jb2RlZFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChT
dHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4g
cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0
dXJuIHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKHBhcnNpbmdCdWZmZXIpOwog
fQogCiBPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZUVuY29kZWRS
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdCYgZW5jb2RlZERpZ2VzdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgJKHJldmlzaW9uIDI2MzMzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNjYsMTEgKzY2LDExIEBAIHN0cnVjdCBFbmNvZGVkUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXMKICAgICBTdHJpbmcgZGlnZXN0OwogfTsKIAotT3B0aW9uYWw8UmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3Qg
VUNoYXIqJiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7Ci1PcHRpb25hbDxSZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBMQ2hhciomIGJl
Z2luLCBjb25zdCBMQ2hhciogZW5kKTsKK09wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+
Jik7CitPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOwogCi1PcHRpb25hbDxFbmNv
ZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGlj
RGlnZXN0KGNvbnN0IFVDaGFyKiYgYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOwotT3B0aW9uYWw8
RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdChjb25zdCBMQ2hhciomIGJlZ2luLCBjb25zdCBMQ2hhciogZW5kKTsKK09wdGlv
bmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0
b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKK09wdGlvbmFsPEVu
Y29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBo
aWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsKIAogT3B0aW9uYWw8UmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0KGNvbnN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QmKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlSW50ZWdyaXR5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VJbnRlZ3JpdHkuY3BwCShy
ZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VJbnRl
Z3JpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUGFy
c2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIlJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5o
IgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Bh
cnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCw3ICs1MSw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENoYXJh
Y3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQorICAgIGJvb2wg
b3BlcmF0b3IoKShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVm
ZmVyKQogICAgIHsKICAgICAgICAgLy8gSW5pdGlhbGl6ZSBoYXNoZXMgdG8gYmUgc29tZXRoaW5n
IG90aGVyIFdURjo6bnVsbG9wdCwgdG8gaW5kaWNhdGUKICAgICAgICAgLy8gdGhhdCBhdCBsZWFz
dCBvbmUgdG9rZW4gd2FzIHNlZW4sIGFuZCB0aHVzIHNldHRpbmcgdGhlIGVtcHR5IGZsYWcKQEAg
LTU4LDE5ICs1OSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghbV9kaWdlc3RzKQogICAgICAg
ICAgICAgbV9kaWdlc3RzID0gVmVjdG9yPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdl
c3Q+IHsgfTsKIAotICAgICAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBo
aWNEaWdlc3QocG9zaXRpb24sIGVuZCk7CisgICAgICAgIGF1dG8gZGlnZXN0ID0gcGFyc2VFbmNv
ZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFkaWdl
c3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gVGhlIHNwZWMgYWxs
b3dzIGZvciBvcHRpb25zIGZvbGxvd2luZyB0aGUgZGlnZXN0LCBidXQgc28gZmFyLCBubwogICAg
ICAgICAvLyBzcGVjaWZpYyBvcHRpb25zIGhhdmUgYmVlbiBzcGVjaWZpZWQuIFRodXMsIHdlIGp1
c3QgcGFyc2UgYW5kIGlnbm9yZQogICAgICAgICAvLyB0aGVtLiBUaGVpciBzeW50YXggaXMgYSAn
PycgZm9sbG93IGJ5IGFueSBudW1iZXIgb2YgVkNIQVJzLgotICAgICAgICBpZiAoc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz8nKSkKLSAgICAgICAgICAgIHNraXBX
aGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1ZDSEFSPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgaWYg
KHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc/JykpCisgICAgICAg
ICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNWQ0hBUj4ocGFyc2luZ0J1ZmZlcik7CiAK
ICAgICAgICAgLy8gQWZ0ZXIgdGhlIGJhc2U2NCB2YWx1ZSBhbmQgb3B0aW9ucywgdGhlIGN1cnJl
bnQgY2hhcmFjdGVyIHBvaW50ZWQgdG8gYnkgcG9zaXRpb24KICAgICAgICAgLy8gc2hvdWxkIGVp
dGhlciBiZSB0aGUgZW5kIG9yIGEgc3BhY2UuCi0gICAgICAgIGlmIChwb3NpdGlvbiAhPSBlbmQg
JiYgIWlzSFRNTFNwYWNlKCpwb3NpdGlvbikpCisgICAgICAgIGlmICghcGFyc2luZ0J1ZmZlci5h
dEVuZCgpICYmICFpc0hUTUxTcGFjZSgqcGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgbV9kaWdlc3RzLT5hcHBlbmQoV1RGTW92ZSgqZGlnZXN0KSk7
CkBAIC04NCwxNyArODUsMTQgQEAgcHJpdmF0ZToKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci1zdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRP
blNwYWNlcyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSog
ZW5kLCBGdW5jdG9yJiYgZnVuY3RvcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdE9uU3BhY2Vz
KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlciwgRnVuY3Rv
ciYmIGZ1bmN0b3IpCiB7Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcG9zaXRpb24gPSBiZWdp
bjsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNIVE1MU3BhY2U+KHBhcnNpbmdCdWZm
ZXIpOwogCi0gICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzSFRNTFNwYWNlPihwb3NpdGlv
biwgZW5kKTsKLQotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBpZiAoIWZ1
bmN0b3IocG9zaXRpb24sIGVuZCkpCi0gICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlw
ZSwgaXNOb3RIVE1MU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotCi0gICAgICAgIHNraXBXaGlsZTxD
aGFyYWN0ZXJUeXBlLCBpc0hUTUxTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgd2hpbGUgKHBh
cnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgIGlmICghZnVu
Y3RvcihwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc05vdEhUTUxTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIHNraXBXaGlsZTxDaGFy
YWN0ZXJUeXBlLCBpc0hUTUxTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAgICAgfQogfQogCkBAIC0x
MDUsMTEgKzEwMywxMSBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPEVuY29kZWRSZXNvdXJjZUNy
CiAKICAgICBPcHRpb25hbDxWZWN0b3I8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dD4+IHJlc3VsdDsKICAgICAKLSAgICBjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmdJbXBsID0gKmlu
dGVncml0eU1ldGFkYXRhLmltcGwoKTsKLSAgICBpZiAoc3RyaW5nSW1wbC5pczhCaXQoKSkKLSAg
ICAgICAgc3BsaXRPblNwYWNlcyhzdHJpbmdJbXBsLmNoYXJhY3RlcnM4KCksIHN0cmluZ0ltcGwu
Y2hhcmFjdGVyczgoKSArIHN0cmluZ0ltcGwubGVuZ3RoKCksIEludGVncml0eU1ldGFkYXRhUGFy
c2VyPExDaGFyPiB7IHJlc3VsdCB9KTsKLSAgICBlbHNlCi0gICAgICAgIHNwbGl0T25TcGFjZXMo
c3RyaW5nSW1wbC5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nSW1wbC5jaGFyYWN0ZXJzMTYoKSArIHN0
cmluZ0ltcGwubGVuZ3RoKCksIEludGVncml0eU1ldGFkYXRhUGFyc2VyPFVDaGFyPiB7IHJlc3Vs
dCB9KTsKKyAgICBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhpbnRlZ3JpdHlNZXRhZGF0
YSwgWyZyZXN1bHRdIChhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFj
dGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBl
OworCisgICAgICAgIHNwbGl0T25TcGFjZXMocGFyc2luZ0J1ZmZlciwgSW50ZWdyaXR5TWV0YWRh
dGFQYXJzZXI8Q2hhcmFjdGVyVHlwZT4geyByZXN1bHQgfSk7CisgICAgfSk7CiAKICAgICByZXR1
cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL01hbmlm
ZXN0UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvTWFuaWZlc3RQYXJzZXIuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUv
Q2hhcmFjdGVyTmFtZXMuaD4KIApAQCAtNjcsMTM3ICs2OCwxNDAgQEAgYm9vbCBwYXJzZU1hbmlm
ZXN0KGNvbnN0IFVSTCYgbWFuaWZlc3RVUgogICAgIGlmICghbWFuaWZlc3RTdHJpbmcuc3RhcnRz
V2l0aChtYW5pZmVzdFNpZ25hdHVyZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBTdHJpbmdWaWV3IG1hbmlmZXN0QWZ0ZXJTaWduYXR1cmUgPSBTdHJpbmdWaWV3KG1hbmlmZXN0
U3RyaW5nKS5zdWJzdHJpbmcoc2l6ZW9mKG1hbmlmZXN0U2lnbmF0dXJlKSAtIDEpOwotICAgIGF1
dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gbWFuaWZlc3RBZnRlclNpZ25hdHVyZS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcCA9IHVwY29udmVydGVkQ2hhcmFj
dGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcCArIG1hbmlmZXN0QWZ0ZXJTaWduYXR1cmUu
bGVuZ3RoKCk7CisgICAgYXV0byBtYW5pZmVzdEFmdGVyU2lnbmF0dXJlID0gU3RyaW5nVmlldyht
YW5pZmVzdFN0cmluZykuc3Vic3RyaW5nKHNpemVvZihtYW5pZmVzdFNpZ25hdHVyZSkgLSAxKTsK
IAotICAgIGlmIChwIDwgZW5kICYmICpwICE9ICcgJyAmJiAqcCAhPSAnXHQnICYmICpwICE9ICdc
bicgJiYgKnAgIT0gJ1xyJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEZJWE1FOiBU
aGlzIHBhcnNlciBjb3VsZCBiZSBtdWNoIGNsZWFyZXIgaWYgaXQgYWRvcHRlZCBzb21lIG9mIHRo
ZSBjb21tb24gcGFyc2luZyB1dGlsaXRpZXMKKyAgICAvLyBmb3Igc2tpcHBpbmcgYW5kIGNvbXBh
cmluZy4KIAotICAgIC8vIFNraXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KLSAgICB3aGlsZSAo
cCA8IGVuZCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCi0gICAgICAgIHArKzsKLQotICAg
IHdoaWxlICgxKSB7Ci0gICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZQotICAgICAgICB3aGlsZSAo
cCA8IGVuZCAmJiAoKnAgPT0gJ1xuJyB8fCAqcCA9PSAnXHInIHx8ICpwID09ICcgJyB8fCAqcCA9
PSAnXHQnKSkKLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgCi0gICAgICAgIGlmIChwID09IGVu
ZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgY29uc3QgVUNoYXIqIGxp
bmVTdGFydCA9IHA7Ci0gICAgICAgIAotICAgICAgICAvLyBGaW5kIHRoZSBlbmQgb2YgdGhlIGxp
bmUKLSAgICAgICAgd2hpbGUgKHAgPCBlbmQgJiYgKnAgIT0gJ1xyJyAmJiAqcCAhPSAnXG4nKQot
ICAgICAgICAgICAgcCsrOwotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBh
IGNvbW1lbnQKLSAgICAgICAgaWYgKCpsaW5lU3RhcnQgPT0gJyMnKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIAotICAgICAgICAvLyBHZXQgcmlkIG9mIHRyYWlsaW5nIHdoaXRlc3Bh
Y2UKLSAgICAgICAgY29uc3QgVUNoYXIqIHRtcCA9IHAgLSAxOwotICAgICAgICB3aGlsZSAodG1w
ID4gbGluZVN0YXJ0ICYmICgqdG1wID09ICcgJyB8fCAqdG1wID09ICdcdCcpKQotICAgICAgICAg
ICAgdG1wLS07Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgbGluZShsaW5lU3RhcnQsIHRtcCAt
IGxpbmVTdGFydCArIDEpOwotCi0gICAgICAgIGlmIChsaW5lID09ICJDQUNIRToiKSAKLSAgICAg
ICAgICAgIG1vZGUgPSBFeHBsaWNpdDsKLSAgICAgICAgZWxzZSBpZiAobGluZSA9PSAiRkFMTEJB
Q0s6IikKLSAgICAgICAgICAgIG1vZGUgPSBGYWxsYmFjazsKLSAgICAgICAgZWxzZSBpZiAobGlu
ZSA9PSAiTkVUV09SSzoiKQotICAgICAgICAgICAgbW9kZSA9IE9ubGluZUFsbG93bGlzdDsKLSAg
ICAgICAgZWxzZSBpZiAobGluZS5lbmRzV2l0aCgnOicpKQotICAgICAgICAgICAgbW9kZSA9IFVu
a25vd247Ci0gICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gVW5rbm93bikKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBlbHNlIGlmIChtb2RlID09IEV4cGxpY2l0IHx8IG1vZGUgPT0gT25s
aW5lQWxsb3dsaXN0KSB7Ci0gICAgICAgICAgICBhdXRvIHVwY29udmVydGVkTGluZUNoYXJhY3Rl
cnMgPSBTdHJpbmdWaWV3KGxpbmUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICAg
ICAgY29uc3QgVUNoYXIqIHAgPSB1cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzOwotICAgICAgICAg
ICAgY29uc3QgVUNoYXIqIGxpbmVFbmQgPSBwICsgbGluZS5sZW5ndGgoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSBVUkwg
ZnJvbSBzdWJzZXF1ZW50IGlnbm9yZWQgdG9rZW5zLgotICAgICAgICAgICAgd2hpbGUgKHAgPCBs
aW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKSAKLSAgICAgICAgICAgICAgICBwKys7
CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKG1hbmlmZXN0QWZ0ZXJT
aWduYXR1cmUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgYXV0byBwID0gcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICBhdXRvIGVuZCA9IHBhcnNpbmdCdWZmZXIu
ZW5kKCk7CiAKLSAgICAgICAgICAgIGlmIChtb2RlID09IE9ubGluZUFsbG93bGlzdCAmJiBwIC0g
dXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVycyA9PSAxICYmIGxpbmVbMF0gPT0gJyonKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gV2lsZGNhcmQgd2FzIGZvdW5kLgotICAgICAgICAgICAgICAgIG1hbmlm
ZXN0LmFsbG93QWxsTmV0d29ya1JlcXVlc3RzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHAgPCBlbmQgJiYgKnAgIT0gJyAnICYm
ICpwICE9ICdcdCcgJiYgKnAgIT0gJ1xuJyAmJiAqcCAhPSAnXHInKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBVUkwgdXJsKG1hbmlmZXN0VVJMLCBsaW5lLnN1YnN0
cmluZygwLCBwIC0gdXBjb252ZXJ0ZWRMaW5lQ2hhcmFjdGVycykpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIC8vIFNraXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKyAgICAgICAgd2hpbGUg
KHAgPCBlbmQgJiYgKnAgIT0gJ1xyJyAmJiAqcCAhPSAnXG4nKQorICAgICAgICAgICAgcCsrOwog
Ci0gICAgICAgICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2wo
KSwgbWFuaWZlc3RVUkwucHJvdG9jb2woKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2UKKyAgICAg
ICAgICAgIHdoaWxlIChwIDwgZW5kICYmICgqcCA9PSAnXG4nIHx8ICpwID09ICdccicgfHwgKnAg
PT0gJyAnIHx8ICpwID09ICdcdCcpKQorICAgICAgICAgICAgICAgIHArKzsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKG1vZGUgPT0gRXhwbGljaXQgJiYgbWFuaWZlc3RVUkwucHJvdG9j
b2xJcygiaHR0cHMiKSAmJiAhcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1hbmlmZXN0VVJM
LCB1cmwpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHAgPT0g
ZW5kKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAobW9kZSA9PSBFeHBsaWNpdCkKLSAgICAgICAgICAgICAgICBtYW5pZmVzdC5leHBsaWNpdFVS
THMuYWRkKHVybC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bWFuaWZlc3Qub25saW5lQWxsb3dlZFVSTHMuYXBwZW5kKHVybCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgfSBlbHNlIGlmIChtb2RlID09IEZhbGxiYWNrKSB7Ci0gICAgICAgICAgICBhdXRvIHVw
Y29udmVydGVkTGluZUNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGxpbmUpLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOwotICAgICAgICAgICAgY29uc3QgVUNoYXIqIHAgPSB1cGNvbnZlcnRlZExpbmVD
aGFyYWN0ZXJzOwotICAgICAgICAgICAgY29uc3QgVUNoYXIqIGxpbmVFbmQgPSBwICsgbGluZS5s
ZW5ndGgoKTsKKyAgICAgICAgICAgIGF1dG8gbGluZVN0YXJ0ID0gcDsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSB0d28gVVJM
cwotICAgICAgICAgICAgd2hpbGUgKHAgPCBsaW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0g
JyAnKSAKKyAgICAgICAgICAgIC8vIEZpbmQgdGhlIGVuZCBvZiB0aGUgbGluZQorICAgICAgICAg
ICAgd2hpbGUgKHAgPCBlbmQgJiYgKnAgIT0gJ1xyJyAmJiAqcCAhPSAnXG4nKQogICAgICAgICAg
ICAgICAgIHArKzsKLQotICAgICAgICAgICAgaWYgKHAgPT0gbGluZUVuZCkgewotICAgICAgICAg
ICAgICAgIC8vIFRoZXJlIHdhcyBubyB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTHMuCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIFVSTCBuYW1lc3BhY2VVUkwobWFuaWZlc3RVUkwsIGxpbmUuc3Vic3RyaW5nKDAs
IHAgLSB1cGNvbnZlcnRlZExpbmVDaGFyYWN0ZXJzKSk7Ci0gICAgICAgICAgICBpZiAoIW5hbWVz
cGFjZVVSTC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBuYW1lc3BhY2VVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0KLSAgICAgICAgICAg
IGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1hbmlmZXN0VVJMLCBuYW1lc3BhY2VV
UkwpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyBBbHRob3Vn
aCA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb2ZmbGluZS5odG1sI3Bh
cnNpbmctY2FjaGUtbWFuaWZlc3RzPiAoMDcvMDYvMjAxNykgc2FpZHMKLSAgICAgICAgICAgIC8v
IHRoYXQgd2Ugc2hvdWxkIGFsd2F5cyBwcmVmaXggbWF0Y2ggdGhlIG1hbmlmZXN0IHBhdGggd2Ug
b25seSBkbyBzbyBpZiB0aGUgbWFuaWZlc3Qgd2FzIHNlcnZlZCB3aXRoIGEgbm9uLQotICAgICAg
ICAgICAgLy8gc3RhbmRhcmQgSFRUUCBDb250ZW50LVR5cGUgaGVhZGVyIGZvciB3ZWIgY29tcGF0
aWJpbGl0eS4KLSAgICAgICAgICAgIGlmICghYWxsb3dGYWxsYmFja05hbWVzcGFjZU91dHNpZGVN
YW5mZXN0UGF0aCAmJiAhbmFtZXNwYWNlVVJMLnBhdGgoKS5zdGFydHNXaXRoKG1hbmlmZXN0UGF0
aCkpCisgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgY29tbWVudAorICAgICAgICAg
ICAgaWYgKCpsaW5lU3RhcnQgPT0gJyMnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBHZXQgcmlkIG9mIHRyYWlsaW5nIHdoaXRlc3BhY2UK
KyAgICAgICAgICAgIGF1dG8gdG1wID0gcCAtIDE7CisgICAgICAgICAgICB3aGlsZSAodG1wID4g
bGluZVN0YXJ0ICYmICgqdG1wID09ICcgJyB8fCAqdG1wID09ICdcdCcpKQorICAgICAgICAgICAg
ICAgIHRtcC0tOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmdWaWV3IGxpbmUobGlu
ZVN0YXJ0LCB0bXAgLSBsaW5lU3RhcnQgKyAxKTsKKworICAgICAgICAgICAgaWYgKGxpbmUgPT0g
IkNBQ0hFOiIpCisgICAgICAgICAgICAgICAgbW9kZSA9IEV4cGxpY2l0OworICAgICAgICAgICAg
ZWxzZSBpZiAobGluZSA9PSAiRkFMTEJBQ0s6IikKKyAgICAgICAgICAgICAgICBtb2RlID0gRmFs
bGJhY2s7CisgICAgICAgICAgICBlbHNlIGlmIChsaW5lID09ICJORVRXT1JLOiIpCisgICAgICAg
ICAgICAgICAgbW9kZSA9IE9ubGluZUFsbG93bGlzdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxp
bmUuZW5kc1dpdGgoJzonKSkKKyAgICAgICAgICAgICAgICBtb2RlID0gVW5rbm93bjsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gVW5rbm93bikKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gRXhwbGljaXQgfHwgbW9kZSA9PSBPbmxp
bmVBbGxvd2xpc3QpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHAgPSBsaW5lU3RhcnQ7CisgICAg
ICAgICAgICAgICAgYXV0byBsaW5lRW5kID0gcCArIGxpbmUubGVuZ3RoKCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5n
IHRoZSBVUkwgZnJvbSBzdWJzZXF1ZW50IGlnbm9yZWQgdG9rZW5zLgorICAgICAgICAgICAgICAg
IHdoaWxlIChwIDwgbGluZUVuZCAmJiAqcCAhPSAnXHQnICYmICpwICE9ICcgJykKKyAgICAgICAg
ICAgICAgICAgICAgcCsrOworCisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gT25saW5lQWxs
b3dsaXN0ICYmIHAgLSBsaW5lU3RhcnQgPT0gMSAmJiBsaW5lWzBdID09ICcqJykgeworICAgICAg
ICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB3YXMgZm91bmQuCisgICAgICAgICAgICAgICAgICAg
IG1hbmlmZXN0LmFsbG93QWxsTmV0d29ya1JlcXVlc3RzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgVVJM
IHVybChtYW5pZmVzdFVSTCwgbGluZS5zdWJzdHJpbmcoMCwgcCAtIGxpbmVTdGFydCkudG9TdHJp
bmcoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCF1cmwuaXNWYWxp
ZCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIHVy
bC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UodXJsLnByb3RvY29sKCksIG1hbmlm
ZXN0VVJMLnByb3RvY29sKCkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBFeHBsaWNpdCAmJiBtYW5p
ZmVzdFVSTC5wcm90b2NvbElzKCJodHRwcyIpICYmICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1
YWwobWFuaWZlc3RVUkwsIHVybCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEV4cGxpY2l0KQorICAg
ICAgICAgICAgICAgICAgICBtYW5pZmVzdC5leHBsaWNpdFVSTHMuYWRkKHVybC5zdHJpbmcoKSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdC5vbmxp
bmVBbGxvd2VkVVJMcy5hcHBlbmQodXJsKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobW9kZSA9PSBGYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGF1dG8gcCA9
IGxpbmVTdGFydDsKKyAgICAgICAgICAgICAgICBhdXRvIGxpbmVFbmQgPSBwICsgbGluZS5sZW5n
dGgoKTsKKworICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2Ugc2VwYXJhdGlu
ZyB0aGUgdHdvIFVSTHMKKyAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKnAg
IT0gJ1x0JyAmJiAqcCAhPSAnICcpCisgICAgICAgICAgICAgICAgICAgIHArKzsKKworICAgICAg
ICAgICAgICAgIGlmIChwID09IGxpbmVFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhl
cmUgd2FzIG5vIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUgVVJMcy4KKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIFVSTCBuYW1lc3BhY2VVUkwobWFuaWZlc3RVUkwsIGxpbmUuc3Vic3RyaW5n
KDAsIHAgLSBsaW5lU3RhcnQpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGlmICghbmFt
ZXNwYWNlVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgbmFtZXNwYWNlVVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOworCisg
ICAgICAgICAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RV
UkwsIG5hbWVzcGFjZVVSTCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgLy8gQWx0aG91Z2ggPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVs
dGlwYWdlL29mZmxpbmUuaHRtbCNwYXJzaW5nLWNhY2hlLW1hbmlmZXN0cz4gKDA3LzA2LzIwMTcp
IHNhaWRzCisgICAgICAgICAgICAgICAgLy8gdGhhdCB3ZSBzaG91bGQgYWx3YXlzIHByZWZpeCBt
YXRjaCB0aGUgbWFuaWZlc3QgcGF0aCB3ZSBvbmx5IGRvIHNvIGlmIHRoZSBtYW5pZmVzdCB3YXMg
c2VydmVkIHdpdGggYSBub24tCisgICAgICAgICAgICAgICAgLy8gc3RhbmRhcmQgSFRUUCBDb250
ZW50LVR5cGUgaGVhZGVyIGZvciB3ZWIgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICAgICAgICBp
ZiAoIWFsbG93RmFsbGJhY2tOYW1lc3BhY2VPdXRzaWRlTWFuZmVzdFBhdGggJiYgIW5hbWVzcGFj
ZVVSTC5wYXRoKCkuc3RhcnRzV2l0aChtYW5pZmVzdFBhdGgpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZSBzZXBhcmF0
aW5nIGZhbGxiYWNrIG5hbWVzcGFjZSBmcm9tIFVSTC4KKyAgICAgICAgICAgICAgICB3aGlsZSAo
cCA8IGxpbmVFbmQgJiYgKCpwID09ICdcdCcgfHwgKnAgPT0gJyAnKSkKKyAgICAgICAgICAgICAg
ICAgICAgcCsrOworCisgICAgICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBh
cmF0aW5nIHRoZSBVUkwgZnJvbSBzdWJzZXF1ZW50IGlnbm9yZWQgdG9rZW5zLgorICAgICAgICAg
ICAgICAgIGF1dG8gZmFsbGJhY2tTdGFydCA9IHA7CisgICAgICAgICAgICAgICAgd2hpbGUgKHAg
PCBsaW5lRW5kICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJyAnKQorICAgICAgICAgICAgICAgICAg
ICBwKys7CisKKyAgICAgICAgICAgICAgICBVUkwgZmFsbGJhY2tVUkwobWFuaWZlc3RVUkwsIFN0
cmluZyhmYWxsYmFja1N0YXJ0LCBwIC0gZmFsbGJhY2tTdGFydCkpOworICAgICAgICAgICAgICAg
IGlmICghZmFsbGJhY2tVUkwuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBmYWxsYmFja1VSTC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIo
KTsKKworICAgICAgICAgICAgICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1h
bmlmZXN0VVJMLCBmYWxsYmFja1VSTCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAgICAgbWFuaWZlc3QuZmFsbGJhY2tVUkxzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihuYW1lc3BhY2VVUkwsIGZhbGxiYWNrVVJMKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogCi0gICAgICAg
ICAgICAvLyBTa2lwIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyBmYWxsYmFjayBuYW1lc3BhY2UgZnJv
bSBVUkwuCi0gICAgICAgICAgICB3aGlsZSAocCA8IGxpbmVFbmQgJiYgKCpwID09ICdcdCcgfHwg
KnAgPT0gJyAnKSkKLSAgICAgICAgICAgICAgICBwKys7Ci0KLSAgICAgICAgICAgIC8vIExvb2sg
Zm9yIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUgVVJMIGZyb20gc3Vic2VxdWVudCBpZ25vcmVk
IHRva2Vucy4KLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBmYWxsYmFja1N0YXJ0ID0gcDsKLSAg
ICAgICAgICAgIHdoaWxlIChwIDwgbGluZUVuZCAmJiAqcCAhPSAnXHQnICYmICpwICE9ICcgJykg
Ci0gICAgICAgICAgICAgICAgcCsrOwotCi0gICAgICAgICAgICBVUkwgZmFsbGJhY2tVUkwobWFu
aWZlc3RVUkwsIFN0cmluZyhmYWxsYmFja1N0YXJ0LCBwIC0gZmFsbGJhY2tTdGFydCkpOwotICAg
ICAgICAgICAgaWYgKCFmYWxsYmFja1VSTC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBmYWxsYmFja1VSTC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIo
KTsKLQotICAgICAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZl
c3RVUkwsIGZhbGxiYWNrVVJMKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgbWFuaWZlc3QuZmFsbGJhY2tVUkxzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihuYW1lc3Bh
Y2VVUkwsIGZhbGxiYWNrVVJMKSk7ICAgICAgICAgICAgCi0gICAgICAgIH0gZWxzZSAKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCShyZXZpc2lvbiAy
NjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3ku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogCiAKQEAgLTIxMiwyMiAr
MjEzLDIzIEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpkaWRSZWNlaXZlSGUKICAgICAv
LyBSRkMyNjE2LCBzZWN0aW9uIDQuMiBzcGVjaWZpZXMgdGhhdCBoZWFkZXJzIGFwcGVhcmluZyBt
dWx0aXBsZSB0aW1lcyBjYW4KICAgICAvLyBiZSBjb21iaW5lZCB3aXRoIGEgY29tbWEuIFdhbGsg
dGhlIGhlYWRlciBzdHJpbmcsIGFuZCBwYXJzZSBlYWNoIGNvbW1hCiAgICAgLy8gc2VwYXJhdGVk
IGNodW5rIGFzIGEgc2VwYXJhdGUgaGVhZGVyLgotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmlu
Z1ZpZXcoaGVhZGVyKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciog
YmVnaW4gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwot
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBiZWdpbiArIGhlYWRlci5sZW5ndGgoKTsKLSAgICB3aGls
ZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgc2tpcFVudGlsPFVDaGFyPihwb3NpdGlvbiwg
ZW5kLCAnLCcpOwotCi0gICAgICAgIC8vIGhlYWRlcjEsaGVhZGVyMiBPUiBoZWFkZXIxCi0gICAg
ICAgIC8vICAgICAgICBeICAgICAgICAgICAgICAgICAgXgotICAgICAgICBtX3BvbGljaWVzLmFw
cGVuZChDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpjcmVhdGUoKnRoaXMsIFN0
cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbiksIHR5cGUsIHBvbGljeUZyb20pKTsKLQotICAg
ICAgICAvLyBTa2lwIHRoZSBjb21tYSwgYW5kIGJlZ2luIHRoZSBuZXh0IGhlYWRlciBmcm9tIHRo
ZSBjdXJyZW50IHBvc2l0aW9uLgotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8ICpw
b3NpdGlvbiA9PSAnLCcpOwotICAgICAgICBza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVu
ZCwgJywnKTsKLSAgICAgICAgYmVnaW4gPSBwb3NpdGlvbjsKLSAgICB9CisgICAgV1RGOjpyZWFk
Q2hhcmFjdGVyc0ZvclBhcnNpbmcoaGVhZGVyLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7Cisg
ICAgICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgCisgICAg
ICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAg
ICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZmZXIsICcsJyk7CisKKyAgICAgICAgICAgIC8v
IGhlYWRlcjEsaGVhZGVyMiBPUiBoZWFkZXIxCisgICAgICAgICAgICAvLyAgICAgICAgXiAgICAg
ICAgICAgICAgICAgIF4KKyAgICAgICAgICAgIG1fcG9saWNpZXMuYXBwZW5kKENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmNyZWF0ZSgqdGhpcywgU3RyaW5nKGJlZ2luLCBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbiksIHR5cGUsIHBvbGljeUZyb20pKTsKKworICAg
ICAgICAgICAgLy8gU2tpcCB0aGUgY29tbWEsIGFuZCBiZWdpbiB0aGUgbmV4dCBoZWFkZXIgZnJv
bSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVChwYXJzaW5nQnVmZmVy
LmF0RW5kKCkgfHwgKnBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA9PSAnLCcpOworICAgICAgICAg
ICAgc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJywnKTsKKyAgICAgICAgICAgIGJlZ2luID0g
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICB9CisgICAgfSk7CisgICAgCiAKICAg
ICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICBhcHBseVBvbGljeVRvU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAJ
KHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIs
MTYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhcnNpbmdVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJTZWN1cml0eUNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQ
YXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNE
aXJlY3RpdmVOYW1lQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlw
ZSBjKQogewogICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJy0nOwog
fQogCi1zdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZVZhbHVl
Q2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJSVNwYWNlKGMp
IHx8IChjID49IDB4MjEgJiYgYyA8PSAweDdlKTsgLy8gV2hpdGVzcGFjZSArIFZDSEFSCiB9CkBA
IC0zMzMsMjI0ICszMzQsMjE4IEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDoKICAgICBpZiAocG9saWN5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhwb2xpY3kpLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3Qg
VUNoYXIqIGVuZCA9IHBvc2l0aW9uICsgcG9saWN5Lmxlbmd0aCgpOwotCi0gICAgd2hpbGUgKHBv
c2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBkaXJlY3RpdmVCZWdpbiA9IHBv
c2l0aW9uOwotICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0K
LSAgICAgICAgU3RyaW5nIG5hbWUsIHZhbHVlOwotICAgICAgICBpZiAocGFyc2VEaXJlY3RpdmUo
ZGlyZWN0aXZlQmVnaW4sIHBvc2l0aW9uLCBuYW1lLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgIEFT
U0VSVCghbmFtZS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgaWYgKHBvbGljeUZyb20gPT0gQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpJbmhlcml0ZWQpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkhUVFBFcXVpdk1ldGEpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2FuZGJveCkKLSAgICAgICAgICAgICAgICAgICAgfHwg
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6cmVwb3J0VVJJKQotICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFt
ZUFuY2VzdG9ycykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxp
ZERpcmVjdGl2ZUluSFRUUEVxdWl2TWV0YShuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcocG9saWN5LCBbJl0oYXV0
byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgYXV0byBkaXJlY3RpdmVCZWdpbiA9IHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIHNraXBVbnRpbChwYXJzaW5nQnVm
ZmVyLCAnOycpOworCisgICAgICAgICAgICBpZiAoYXV0byBkaXJlY3RpdmUgPSBwYXJzZURpcmVj
dGl2ZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgZGlyZWN0aXZlQmVnaW4sIHBhcnNpbmdCdWZmZXIu
cG9zaXRpb24oKSB9KSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghZGlyZWN0aXZlLT5uYW1l
LmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpJbmhlcml0ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChwb2xpY3lGcm9tID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SFRUUEVx
dWl2TWV0YSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaXJlY3RpdmUtPm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpz
YW5kYm94KQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaXJlY3RpdmUtPm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpy
ZXBvcnRVUkkpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGRpcmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6
OmZyYW1lQW5jZXN0b3JzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9wb2xpY3kucmVw
b3J0SW52YWxpZERpcmVjdGl2ZUluSFRUUEVxdWl2TWV0YShkaXJlY3RpdmUtPm5hbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpQb2xpY3lGcm9tOjpJbmhlcml0ZWRGb3JQbHVnaW5Eb2N1bWVudCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLT5uYW1lLCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cGx1Z2luVHlwZXMpCisgICAgICAg
ICAgICAgICAgICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpyZXBvcnRVUkkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIGlmIChwb2xpY3lGcm9tID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9s
aWN5RnJvbTo6SW5oZXJpdGVkRm9yUGx1Z2luRG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OnBsdWdpblR5cGVzKQotICAgICAgICAgICAgICAgICAgICAmJiAhZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6cmVwb3J0VVJJKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgYWRkRGlyZWN0aXZlKFdURk1vdmUoKmRpcmVjdGl2ZSkpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYWRkRGlyZWN0aXZlKG5hbWUsIHZhbHVlKTsKLSAgICAgICAgfQogCi0gICAg
ICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgKnBvc2l0aW9uID09ICc7Jyk7Ci0gICAgICAg
IHNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnOycpOwotICAgIH0KKyAgICAgICAg
ICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgKnBhcnNpbmdCdWZmZXIgPT0gJzsn
KTsKKyAgICAgICAgICAgIHNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICc7Jyk7CisgICAgICAg
IH0KKyAgICB9KTsKIH0KIAogLy8gZGlyZWN0aXZlICAgICAgICAgPSAqV1NQIFsgZGlyZWN0aXZl
LW5hbWUgWyBXU1AgZGlyZWN0aXZlLXZhbHVlIF0gXQogLy8gZGlyZWN0aXZlLW5hbWUgICAgPSAx
KiggQUxQSEEgLyBESUdJVCAvICItIiApCiAvLyBkaXJlY3RpdmUtdmFsdWUgICA9ICooIFdTUCAv
IDxWQ0hBUiBleGNlcHQgIjsiPiApCiAvLwotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0OjpwYXJzZURpcmVjdGl2ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFy
KiBlbmQsIFN0cmluZyYgbmFtZSwgU3RyaW5nJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGF1dG8gQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFy
c2VEaXJlY3RpdmUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVm
ZmVyKSAtPiBPcHRpb25hbDxQYXJzZWREaXJlY3RpdmU+CiB7Ci0gICAgQVNTRVJUKG5hbWUuaXNF
bXB0eSgpKTsKLSAgICBBU1NFUlQodmFsdWUuaXNFbXB0eSgpKTsKLQotICAgIGNvbnN0IFVDaGFy
KiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSVNwYWNlPihw
b3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSVNwYWNl
PihwYXJzaW5nQnVmZmVyKTsKIAogICAgIC8vIEVtcHR5IGRpcmVjdGl2ZSAoZS5nLiAiOzs7Iiku
IEV4aXQgZWFybHkuCi0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICBjb25zdCBVQ2hhciogbmFtZUJlZ2luID0gcG9zaXRpb247Ci0gICAg
c2tpcFdoaWxlPFVDaGFyLCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQp
OworICAgIGF1dG8gbmFtZUJlZ2luID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNr
aXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXI+KHBhcnNpbmdC
dWZmZXIpOwogCiAgICAgLy8gVGhlIGRpcmVjdGl2ZS1uYW1lIG11c3QgYmUgbm9uLWVtcHR5Lgot
ICAgIGlmIChuYW1lQmVnaW4gPT0gcG9zaXRpb24pIHsKLSAgICAgICAgc2tpcFdoaWxlPFVDaGFy
LCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICBtX3BvbGljeS5yZXBv
cnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVC
ZWdpbikpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG5hbWVCZWdpbiA9PSBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCkpIHsKKyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIG1fcG9saWN5LnJlcG9y
dFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKSAtIG5hbWVCZWdpbikpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IH0KIAotICAgIG5hbWUgPSBTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVCZWdpbik7
CisgICAgYXV0byBuYW1lID0gU3RyaW5nKG5hbWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpIC0gbmFtZUJlZ2luKTsKIAotICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVy
biBQYXJzZWREaXJlY3RpdmUgeyBXVEZNb3ZlKG5hbWUpLCB7IH0gfTsKIAotICAgIGlmICghc2tp
cEV4YWN0bHk8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCkpIHsKLSAgICAgICAg
c2tpcFdoaWxlPFVDaGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAg
ICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBw
b3NpdGlvbiAtIG5hbWVCZWdpbikpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFz
a2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpKSB7
CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNp
bmdCdWZmZXIpOworICAgICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShT
dHJpbmcobmFtZUJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBuYW1lQmVnaW4pKTsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBza2lwV2hpbGU8VUNo
YXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBjb25zdCBVQ2hhciog
dmFsdWVCZWdpbiA9IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNEaXJlY3RpdmVW
YWx1ZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byB2YWx1ZUJlZ2luID0gcGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0Rp
cmVjdGl2ZVZhbHVlQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKIAotICAgIGlmIChwb3NpdGlv
biAhPSBlbmQpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZVZhbHVl
Q2hhcmFjdGVyKG5hbWUsIFN0cmluZyh2YWx1ZUJlZ2luLCBlbmQgLSB2YWx1ZUJlZ2luKSk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXBhcnNpbmdCdWZmZXIuYXRFbmQoKSkgewor
ICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIobmFt
ZSwgU3RyaW5nKHZhbHVlQmVnaW4sIHBhcnNpbmdCdWZmZXIuZW5kKCkgLSB2YWx1ZUJlZ2luKSk7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgLy8gVGhlIGRpcmVj
dGl2ZS12YWx1ZSBtYXkgYmUgZW1wdHkuCi0gICAgaWYgKHZhbHVlQmVnaW4gPT0gcG9zaXRpb24p
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh2YWx1ZUJlZ2luID09IHBhcnNpbmdCdWZm
ZXIucG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIFBhcnNlZERpcmVjdGl2ZSB7IFdURk1vdmUo
bmFtZSksIHsgfSB9OwogCi0gICAgdmFsdWUgPSBTdHJpbmcodmFsdWVCZWdpbiwgcG9zaXRpb24g
LSB2YWx1ZUJlZ2luKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBhdXRvIHZhbHVlID0gU3RyaW5n
KHZhbHVlQmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIHZhbHVlQmVnaW4pOworICAg
IHJldHVybiBQYXJzZWREaXJlY3RpdmUgeyBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHZhbHVlKSB9
OwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVw
b3J0VVJJKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBvcnRVUkkoUGFyc2VkRGly
ZWN0aXZlJiYgZGlyZWN0aXZlKQogewogICAgIGlmICghbV9yZXBvcnRVUklzLmlzRW1wdHkoKSkg
ewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CisgICAg
ICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShkaXJlY3RpdmUubmFtZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3
KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRp
b24gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIHZhbHVl
Lmxlbmd0aCgpOworICAgIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKGRpcmVjdGl2ZS52
YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJU
eXBlID0gdHlwZW5hbWUgZGVjbHR5cGUocGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7CiAK
LSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBp
c0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOworICAgICAgICBhdXRvIGJlZ2luID0gcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgICAgIGNvbnN0IFVDaGFyKiB1
cmxCZWdpbiA9IHBvc2l0aW9uOwotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlT
cGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgICAgICBhdXRvIHVybEJlZ2luID0gcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAgaWYgKHVybEJlZ2lu
IDwgcG9zaXRpb24pCi0gICAgICAgICAgICBtX3JlcG9ydFVSSXMuYXBwZW5kKHZhbHVlLnN1YnN0
cmluZyh1cmxCZWdpbiAtIGNoYXJhY3RlcnMsIHBvc2l0aW9uIC0gdXJsQmVnaW4pKTsKLSAgICB9
CisgICAgICAgICAgICBpZiAodXJsQmVnaW4gPCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkpCisg
ICAgICAgICAgICAgICAgbV9yZXBvcnRVUklzLmFwcGVuZChkaXJlY3RpdmUudmFsdWUuc3Vic3Ry
aW5nKHVybEJlZ2luIC0gYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIHVybEJlZ2lu
KSk7CisgICAgICAgIH0KKyAgICB9KTsKIH0KIAogCiB0ZW1wbGF0ZTxjbGFzcyBDU1BEaXJlY3Rp
dmVUeXBlPgotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRDU1BE
aXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBzdGQ6OnVu
aXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlwZT4mIGRpcmVjdGl2ZSkKK3ZvaWQgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0Q1NQRGlyZWN0aXZlKFBhcnNlZERpcmVjdGl2ZSYm
IGRpcmVjdGl2ZSwgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZVR5cGU+JiBleGlzdGluZ0Rp
cmVjdGl2ZSkKIHsKLSAgICBpZiAoZGlyZWN0aXZlKSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9y
dER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICBpZiAoZXhpc3RpbmdEaXJlY3RpdmUpIHsK
KyAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZS5uYW1l
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBkaXJlY3RpdmUgPSBtYWtlVW5pcXVlPENT
UERpcmVjdGl2ZVR5cGU+KCp0aGlzLCBuYW1lLCB2YWx1ZSk7CisgICAgZXhpc3RpbmdEaXJlY3Rp
dmUgPSBtYWtlVW5pcXVlPENTUERpcmVjdGl2ZVR5cGU+KCp0aGlzLCBXVEZNb3ZlKGRpcmVjdGl2
ZS5uYW1lKSwgV1RGTW92ZShkaXJlY3RpdmUudmFsdWUpKTsKIH0KIAotdm9pZCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphcHBseVNhbmRib3hQb2xpY3koY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHNhbmRib3hQb2xpY3kpCit2b2lkIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeShQYXJzZWREaXJlY3RpdmUm
JiBkaXJlY3RpdmUpCiB7CiAgICAgaWYgKG1fcmVwb3J0T25seSkgewotICAgICAgICBtX3BvbGlj
eS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShuYW1lKTsKKyAgICAgICAg
bV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUoZGlyZWN0aXZl
Lm5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX2hhdmVTYW5kYm94UG9s
aWN5KSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsK
KyAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZS5uYW1l
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2hhdmVTYW5kYm94UG9saWN5ID0gdHJ1
ZTsKICAgICBTdHJpbmcgaW52YWxpZFRva2VuczsKLSAgICBtX3BvbGljeS5lbmZvcmNlU2FuZGJv
eEZsYWdzKFNlY3VyaXR5Q29udGV4dDo6cGFyc2VTYW5kYm94UG9saWN5KHNhbmRib3hQb2xpY3ks
IGludmFsaWRUb2tlbnMpKTsKKyAgICBtX3BvbGljeS5lbmZvcmNlU2FuZGJveEZsYWdzKFNlY3Vy
aXR5Q29udGV4dDo6cGFyc2VTYW5kYm94UG9saWN5KFdURk1vdmUoZGlyZWN0aXZlLnZhbHVlKSwg
aW52YWxpZFRva2VucykpOwogICAgIGlmICghaW52YWxpZFRva2Vucy5pc051bGwoKSkKICAgICAg
ICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFNhbmRib3hGbGFncyhpbnZhbGlkVG9rZW5zKTsKIH0K
IAotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRVcGdyYWRlSW5z
ZWN1cmVSZXF1ZXN0cyhjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZUxpc3Q6OnNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKFBhcnNlZERpcmVj
dGl2ZSYmIGRpcmVjdGl2ZSkKIHsKICAgICBpZiAobV9yZXBvcnRPbmx5KSB7Ci0gICAgICAgIG1f
cG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKG5hbWUpOworICAg
ICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShXVEZN
b3ZlKGRpcmVjdGl2ZS5uYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1f
dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGlj
YXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJl
Y3RpdmUoV1RGTW92ZShkaXJlY3RpdmUubmFtZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIG1fdXBncmFkZUluc2VjdXJlUmVxdWVzdHMgPSB0cnVlOwogICAgIG1fcG9saWN5LnNldFVw
Z3JhZGVJbnNlY3VyZVJlcXVlc3RzKHRydWUpOwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZUxpc3Q6OnNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChjb25zdCBT
dHJpbmcmIG5hbWUpCit2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNl
dEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChQYXJzZWREaXJlY3RpdmUmJiBkaXJlY3RpdmUp
CiB7CiAgICAgaWYgKG1faGFzQmxvY2tBbGxNaXhlZENvbnRlbnREaXJlY3RpdmUpIHsKLSAgICAg
ICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAgICBtX3Bv
bGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoV1RGTW92ZShkaXJlY3RpdmUubmFtZSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1faGFzQmxvY2tBbGxNaXhlZENvbnRlbnREaXJl
Y3RpdmUgPSB0cnVlOwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxp
c3Q6OmFkZERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFkZERpcmVjdGl2ZShQ
YXJzZWREaXJlY3RpdmUmJiBkaXJlY3RpdmUpCiB7Ci0gICAgQVNTRVJUKCFuYW1lLmlzRW1wdHko
KSk7CisgICAgQVNTRVJUKCFkaXJlY3RpdmUubmFtZS5pc0VtcHR5KCkpOwogCi0gICAgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TmFtZXM6OmRlZmF1bHRTcmMpKSB7Ci0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9kZWZhdWx0U3Jj
KTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmRlZmF1bHRTcmMpKSB7CisgICAgICAgIHNl
dENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihX
VEZNb3ZlKGRpcmVjdGl2ZSksIG1fZGVmYXVsdFNyYyk7CiAgICAgICAgIG1fcG9saWN5LmFkZEhh
c2hBbGdvcml0aG1zRm9ySW5saW5lU2NyaXB0cyhtX2RlZmF1bHRTcmMtPmhhc2hBbGdvcml0aG1z
VXNlZCgpKTsKICAgICAgICAgbV9wb2xpY3kuYWRkSGFzaEFsZ29yaXRobXNGb3JJbmxpbmVTdHls
ZXNoZWV0cyhtX2RlZmF1bHRTcmMtPmhhc2hBbGdvcml0aG1zVXNlZCgpKTsKLSAgICB9IGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OnNjcmlwdFNyYykpIHsKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX3Njcmlw
dFNyYyk7CisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5u
YW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2NyaXB0U3JjKSkgewor
ICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERp
cmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX3NjcmlwdFNyYyk7CiAgICAgICAgIG1fcG9s
aWN5LmFkZEhhc2hBbGdvcml0aG1zRm9ySW5saW5lU2NyaXB0cyhtX3NjcmlwdFNyYy0+aGFzaEFs
Z29yaXRobXNVc2VkKCkpOwotICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShu
YW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c3R5bGVTcmMpKSB7Ci0g
ICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGly
ZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9zdHlsZVNyYyk7CisgICAgfSBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6c3R5bGVTcmMpKSB7CisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1f
c3R5bGVTcmMpOwogICAgICAgICBtX3BvbGljeS5hZGRIYXNoQWxnb3JpdGhtc0ZvcklubGluZVN0
eWxlc2hlZXRzKG1fc3R5bGVTcmMtPmhhc2hBbGdvcml0aG1zVXNlZCgpKTsKLSAgICB9IGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6Om9iamVjdFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9vYmplY3RT
cmMpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1lU3JjKSkgeworICAgIH0gZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTmFtZXM6Om9iamVjdFNyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2
ZSksIG1fb2JqZWN0U3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRp
cmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJhbWVT
cmMpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBMb2cgdG8gY29uc29sZSAiVGhlIGZyYW1lLXNyYyBk
aXJlY3RpdmUgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBjaGlsZC1zcmMgZGlyZWN0aXZlIGluc3Rl
YWQuIgogICAgICAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTU3NzM+LgotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZnJhbWVTcmMpOwotICAgIH0g
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6aW1nU3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2ltZ1Ny
Yyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9udFNyYykpCi0gICAgICAgIHNldENTUERpcmVj
dGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1
ZSwgbV9mb250U3JjKTsKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9mcmFtZVNyYyk7
CisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6aW1nU3JjKSkKKyAgICAgICAgc2V0
Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdU
Rk1vdmUoZGlyZWN0aXZlKSwgbV9pbWdTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjpmb250U3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9mb250U3JjKTsK
ICNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCi0gICAgZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
bWFuaWZlc3RTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fbWFuaWZlc3RTcmMpOworICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjptYW5pZmVzdFNyYykpCisgICAgICAgIHNldENT
UERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZN
b3ZlKGRpcmVjdGl2ZSksIG1fbWFuaWZlc3RTcmMpOwogI2VuZGlmCi0gICAgZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVO
YW1lczo6bWVkaWFTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fbWVkaWFTcmMpOwotICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTmFtZXM6OmNvbm5lY3RTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1f
Y29ubmVjdFNyYyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Y2hpbGRTcmMpKQotICAgICAgICBz
ZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4o
bmFtZSwgdmFsdWUsIG1fY2hpbGRTcmMpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvcm1BY3Rp
b24pKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZm9ybUFjdGlvbik7Ci0gICAgZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6YmFzZVVSSSkpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9iYXNlVVJJKTsKLSAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKKyAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVOYW1lczo6bWVkaWFTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBt
X21lZGlhU3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2
ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Y29ubmVjdFNyYykp
CisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fY29ubmVjdFNyYyk7CisgICAgZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTmFtZXM6OmNoaWxkU3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZl
PENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0
aXZlKSwgbV9jaGlsZFNyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShk
aXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvcm1B
Y3Rpb24pKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2Zvcm1BY3Rpb24pOworICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpiYXNlVVJJKSkKKyAgICAgICAgc2V0Q1NQRGly
ZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUo
ZGlyZWN0aXZlKSwgbV9iYXNlVVJJKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
ZnJhbWVBbmNlc3RvcnMpKSB7CiAgICAgICAgIGlmIChtX3JlcG9ydE9ubHkpIHsKLSAgICAgICAg
ICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKG5hbWUp
OworICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25s
eU1vZGUoZGlyZWN0aXZlLm5hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGly
ZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9mcmFtZUFuY2VzdG9ycyk7Ci0gICAgfSBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZU5hbWVzOjpwbHVnaW5UeXBlcykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2Vj
dXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX3BsdWdpblR5cGVz
KTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzYW5kYm94KSkKLSAgICAgICAgYXBwbHlTYW5kYm94
UG9saWN5KG5hbWUsIHZhbHVlKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpyZXBvcnRVUkkpKQot
ICAgICAgICBwYXJzZVJlcG9ydFVSSShuYW1lLCB2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQotICAgICAgICBzZXRVcGdyYWRlSW5zZWN1cmVS
ZXF1ZXN0cyhuYW1lKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUs
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpibG9ja0FsbE1peGVkQ29udGVu
dCkpCi0gICAgICAgIHNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChuYW1lKTsKKyAgICAg
ICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3Rp
dmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9mcmFtZUFuY2VzdG9ycyk7CisgICAgfSBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVOYW1lczo6cGx1Z2luVHlwZXMpKQorICAgICAgICBzZXRDU1BEaXJlY3Rp
dmU8Q29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVj
dGl2ZSksIG1fcGx1Z2luVHlwZXMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpz
YW5kYm94KSkKKyAgICAgICAgYXBwbHlTYW5kYm94UG9saWN5KFdURk1vdmUoZGlyZWN0aXZlKSk7
CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCisgICAgICAgIHBh
cnNlUmVwb3J0VVJJKFdURk1vdmUoZGlyZWN0aXZlKSk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTmFtZXM6OnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKSkKKyAgICAgICAgc2V0VXBncmFkZUlu
c2VjdXJlUmVxdWVzdHMoV1RGTW92ZShkaXJlY3RpdmUpKTsKKyAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6YmxvY2tBbGxNaXhlZENvbnRlbnQpKQorICAgICAgICBzZXRCbG9ja0FsbE1p
eGVkQ29udGVudEVuYWJsZWQoV1RGTW92ZShkaXJlY3RpdmUpKTsKICAgICBlbHNlCi0gICAgICAg
IG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKG5hbWUpOworICAgICAgICBtX3Bv
bGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
LmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODksMTYgKzg5
LDE5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmLCBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb20pOwogCi0gICAgYm9vbCBwYXJzZURpcmVj
dGl2ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgbmFtZSwg
U3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBwYXJzZVJlcG9ydFVSSShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgcGFyc2VQbHVnaW5UeXBlcyhjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgYWRkRGlyZWN0
aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBh
cHBseVNhbmRib3hQb2xpY3koY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHNhbmRi
b3hQb2xpY3kpOwotICAgIHZvaWQgc2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMoY29uc3QgU3Ry
aW5nJiBuYW1lKTsKLSAgICB2b2lkIHNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChjb25z
dCBTdHJpbmcmIG5hbWUpOworICAgIHN0cnVjdCBQYXJzZWREaXJlY3RpdmUgeworICAgICAgICBT
dHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgIH07CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8UGFyc2VkRGlyZWN0aXZlPiBwYXJzZURp
cmVjdGl2ZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+KTsKKyAgICB2b2lkIHBh
cnNlUmVwb3J0VVJJKFBhcnNlZERpcmVjdGl2ZSYmKTsKKyAgICB2b2lkIGFkZERpcmVjdGl2ZShQ
YXJzZWREaXJlY3RpdmUmJik7CisgICAgdm9pZCBhcHBseVNhbmRib3hQb2xpY3koUGFyc2VkRGly
ZWN0aXZlJiYpOworICAgIHZvaWQgc2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMoUGFyc2VkRGly
ZWN0aXZlJiYpOworICAgIHZvaWQgc2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKFBhcnNl
ZERpcmVjdGl2ZSYmKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBDU1BEaXJlY3RpdmVUeXBlPgot
ICAgIHZvaWQgc2V0Q1NQRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZVR5cGU+Jik7CisgICAgdm9pZCBz
ZXRDU1BEaXJlY3RpdmUoUGFyc2VkRGlyZWN0aXZlJiYsIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJl
Y3RpdmVUeXBlPiYpOwogCiAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVj
dGl2ZSogb3BlcmF0aXZlRGlyZWN0aXZlKENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3RE
aXJlY3RpdmUqKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVu
dFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3Rp
dmUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxMCArMzEsMTIgQEAKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0LmgiCiAjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNNZWRpYVR5cGVDaGFy
YWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMg
Ym9vbCBpc01lZGlhVHlwZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJu
ICFpc0FTQ0lJU3BhY2UoYykgJiYgYyAhPSAnLyc7CiB9CkBAIC01Miw2MiArNTQsNjEgQEAgYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlYwogCiB2b2lkIENvbnRlbnRTZWN1
cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
IHsKLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogYmVnaW4gPSBjaGFyYWN0ZXJzOwotICAgIGNv
bnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBiZWdp
biArIHZhbHVlLmxlbmd0aCgpOwotCiAgICAgLy8gJ3BsdWdpbi10eXBlcyBfX19fOycgT1IgJ3Bs
dWdpbi10eXBlczsnCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBkaXJlY3Rp
dmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKHZhbHVlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAg
ICAvLyBfX19fXyBPUiBfX19fX21pbWUxL21pbWUxCi0gICAgICAgIC8vIF4gICAgICAgIF4KLSAg
ICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAg
ICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vIF4KLSAgICAgICAgYmVnaW4g
PSBwb3NpdGlvbjsKLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNNZWRpYVR5cGVD
aGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIs
IGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJlY3RpdmVM
aXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9z
aXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgc2tpcFdoaWxlPFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7
CisgICAgV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIHBhcnNp
bmdCdWZmZXIpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0
eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBlOwogCi0gICAgICAgIC8vIG1pbWUxL21p
bWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vICAgICAgXgotICAgICAgICBpZiAoIXNraXBFeGFj
dGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpKSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8
VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJl
Y3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdp
biwgcG9zaXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
KyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7
CisgICAgICAgICAgICAvLyBfX19fXyBPUiBfX19fX21pbWUxL21pbWUxCisgICAgICAgICAgICAv
LyBeICAgICAgICBeCisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJ
SVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0
RW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBtaW1lMS9t
aW1lMSBtaW1lMi9taW1lMgorICAgICAgICAgICAgLy8gXgorICAgICAgICAgICAgYXV0byBiZWdp
biA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIGlmICghc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpKSB7
CisgICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFj
ZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGlj
eSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIu
cG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVD
aGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOworCisgICAgICAgICAgICAvLyBtaW1lMS9taW1lMSBt
aW1lMi9taW1lMgorICAgICAgICAgICAgLy8gICAgICBeCisgICAgICAgICAgICBpZiAoIXNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJykpIHsKKyAgICAgICAgICAg
ICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52
YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0g
YmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKKyAgICAgICAgICAgIC8vICAgICAg
IF4KKyAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5
cGVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAg
ICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBl
cyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBza2lwV2hp
bGU8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwor
CisgICAgICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMiBPUiBtaW1lMS9taW1lMSAg
T1IgbWltZTEvbWltZTEvZXJyb3IKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgXiAgICAgICAg
ICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgIF4KKyAgICAgICAgICAgIGlmIChwYXJz
aW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc05vdEFTQ0lJU3BhY2UoKnBh
cnNpbmdCdWZmZXIpKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICAgICAgZGlyZWN0
aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4s
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BsdWdpblR5cGVzLmFkZChTdHJp
bmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CiAKLSAgICAgICAg
Ly8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8gICAgICAgXgotICAgICAgICBp
ZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVu
ZCkpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3Np
dGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJ
bnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5k
KCkgfHwgaXNBU0NJSVNwYWNlKCpwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkpKTsKICAgICAgICAg
fQotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlv
biwgZW5kKTsKLQotICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMiBPUiBtaW1lMS9t
aW1lMSAgT1IgbWltZTEvbWltZTEvZXJyb3IKLSAgICAgICAgLy8gICAgICAgICAgICBeICAgICAg
ICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgXgotICAgICAgICBpZiAocG9zaXRp
b24gPCBlbmQgJiYgaXNOb3RBU0NJSVNwYWNlKCpwb3NpdGlvbikpIHsKLSAgICAgICAgICAgIHNr
aXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAg
ICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3Ry
aW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICBtX3BsdWdpblR5cGVzLmFkZChTdHJpbmcoYmVnaW4sIHBvc2l0aW9u
IC0gYmVnaW4pKTsKLQotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8IGlzQVNDSUlT
cGFjZSgqcG9zaXRpb24pKTsKLSAgICB9CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNl
NjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNTYsNDggKzU3LDQxIEBAIHN0YXRpYyBib29sIGlzQ1NQRGly
ZWN0aXZlTmFtZShjb25zdCBTdHIKICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShu
YW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c3R5bGVTcmMpOwogfQog
Ci1zdGF0aWMgYm9vbCBpc1NvdXJjZUNoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNTb3VyY2VDaGFyYWN0ZXIoQ2hhcmFjdGVy
VHlwZSBjKQogewogICAgIHJldHVybiAhaXNBU0NJSVNwYWNlKGMpOwogfQogCi1zdGF0aWMgYm9v
bCBpc0hvc3RDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyBib29sIGlzSG9zdENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAg
cmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnLSc7CiB9CiAKLXN0YXRpYyBi
b29sIGlzUGF0aENvbXBvbmVudENoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyKENoYXJh
Y3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gYyAhPSAnPycgJiYgYyAhPSAnIyc7CiB9CiAKLXN0
YXRpYyBib29sIGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1NjaGVtZUNvbnRpbnVhdGlv
bkNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51
bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLScgfHwgYyA9PSAnLic7CiB9CiAKLXN0YXRp
YyBib29sIGlzTm90Q29sb25PclNsYXNoKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc05vdENvbG9uT3JTbGFzaChDaGFyYWN0ZXJUeXBlIGMp
CiB7CiAgICAgcmV0dXJuIGMgIT0gJzonICYmIGMgIT0gJy8nOwogfQogCi1zdGF0aWMgYm9vbCBp
c1NvdXJjZUxpc3ROb25lKGNvbnN0IFN0cmluZyYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1NvdXJjZUxpc3ROb25lKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBhdXRvIGNoYXJhY3Rl
cnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25z
dCBVQ2hhciogYmVnaW4gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjaGFy
YWN0ZXJzICsgdmFsdWUubGVuZ3RoKCk7Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3Bh
Y2U+KGJlZ2luLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3Bh
Y2U+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47
Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc1NvdXJjZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7
Ci0gICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShiZWdpbiwgcG9zaXRpb24g
LSBiZWdpbiwgIidub25lJyIpKQorICAgIGlmICghc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2Fz
ZShwYXJzaW5nQnVmZmVyLCAiJ25vbmUnIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICBpZiAo
cG9zaXRpb24gIT0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc2tpcFdoaWxlPENo
YXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAgICAgCi0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHBhcnNpbmdCdWZmZXIuYXRFbmQoKTsKIH0KIAogQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dChjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIHBvbGljeSwgY29uc3QgU3RyaW5nJiBkaXJl
Y3RpdmVOYW1lKQpAQCAtMTA4LDEyICsxMDIsMTQgQEAgQ29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdDo6Q29udGVudAogCiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6
OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKGlzU291cmNlTGlzdE5vbmUo
dmFsdWUpKSB7Ci0gICAgICAgIG1faXNOb25lID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKLSAgICBwYXJzZShjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVu
Z3RoKCkpOworICAgIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0
byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIGlmIChpc1NvdXJjZUxpc3ROb25lKHBhcnNpbmdC
dWZmZXIpKSB7CisgICAgICAgICAgICBtX2lzTm9uZSA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBwYXJzZShwYXJzaW5nQnVmZmVyKTsKKyAgICB9KTsK
IH0KIAogYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Ojppc1Byb3RvY29sQWxs
b3dlZEJ5U3Rhcihjb25zdCBVUkwmIHVybCkgY29uc3QKQEAgLTE2MCwzMCArMTU2LDI4IEBAIGJv
b2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6bWEKIC8vIHNvdXJjZS1saXN0ICAg
ICAgID0gKldTUCBbIHNvdXJjZSAqKCAxKldTUCBzb3VyY2UgKSAqV1NQIF0KIC8vICAgICAgICAg
ICAgICAgICAgIC8gKldTUCAiJ25vbmUnIiAqV1NQCiAvLwotdm9pZCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0OjpwYXJzZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBl
bmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsK
LQotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIs
IGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBl
bmQpCisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7
CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdC
dWZmZXIpOworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGNvbnN0IFVDaGFyKiBiZWdpblNvdXJjZSA9IHBvc2l0aW9uOwot
ICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzU291cmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5k
KTsKKyAgICAgICAgYXV0byBiZWdpblNvdXJjZSA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsK
KyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzU291cmNlQ2hhcmFjdGVyPihwYXJz
aW5nQnVmZmVyKTsKIAogICAgICAgICBTdHJpbmcgc2NoZW1lLCBob3N0LCBwYXRoOwogICAgICAg
ICBPcHRpb25hbDx1aW50MTZfdD4gcG9ydDsKICAgICAgICAgYm9vbCBob3N0SGFzV2lsZGNhcmQg
PSBmYWxzZTsKICAgICAgICAgYm9vbCBwb3J0SGFzV2lsZGNhcmQgPSBmYWxzZTsKIAotICAgICAg
ICBpZiAocGFyc2VOb25jZVNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24pKQorICAgICAgICBp
ZiAocGFyc2VOb25jZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5Tb3VyY2UsIHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKSB9KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGlmIChwYXJzZUhhc2hTb3VyY2UoYmVnaW5Tb3VyY2UsIHBvc2l0aW9uKSkKKyAgICAgICAg
aWYgKHBhcnNlSGFzaFNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5Tb3VyY2UsIHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKSB9KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGlmIChwYXJzZVNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24sIHNjaGVtZSwgaG9zdCwg
cG9ydCwgcGF0aCwgaG9zdEhhc1dpbGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKSB7CisgICAgICAg
IGlmIChwYXJzZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5Tb3VyY2UsIHBhcnNp
bmdCdWZmZXIucG9zaXRpb24oKSB9LCBzY2hlbWUsIGhvc3QsIHBvcnQsIHBhdGgsIGhvc3RIYXNX
aWxkY2FyZCwgcG9ydEhhc1dpbGRjYXJkKSkgewogICAgICAgICAgICAgLy8gV2lsZGNhcmQgaG9z
dHMgYW5kIGtleXdvcmQgc291cmNlcyAoJ3NlbGYnLCAndW5zYWZlLWlubGluZScsCiAgICAgICAg
ICAgICAvLyBldGMuKSBhcmVuJ3Qgc3RvcmVkIGluIG1fbGlzdCwgYnV0IGFzIGF0dHJpYnV0ZXMg
b24gdGhlIHNvdXJjZQogICAgICAgICAgICAgLy8gbGlzdCBpdHNlbGYuCkBAIC0xOTMsOSArMTg3
LDkgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogICAgICAgICAg
ICAgICAgIG1fcG9saWN5LnJlcG9ydERpcmVjdGl2ZUFzU291cmNlRXhwcmVzc2lvbihtX2RpcmVj
dGl2ZU5hbWUsIGhvc3QpOwogICAgICAgICAgICAgbV9saXN0LmFwcGVuZChDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2UobV9wb2xpY3ksIHNjaGVtZSwgaG9zdCwgcG9ydCwgcGF0aCwgaG9zdEhh
c1dpbGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkU291cmNlRXhwcmVzc2lvbihtX2RpcmVjdGl2ZU5hbWUs
IFN0cmluZyhiZWdpblNvdXJjZSwgcG9zaXRpb24gLSBiZWdpblNvdXJjZSkpOworICAgICAgICAg
ICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFNvdXJjZUV4cHJlc3Npb24obV9kaXJlY3RpdmVOYW1l
LCBTdHJpbmcoYmVnaW5Tb3VyY2UsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luU291
cmNlKSk7CiAKLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCBpc0FTQ0lJU3BhY2Uo
KnBvc2l0aW9uKSk7CisgICAgICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgaXNB
U0NJSVNwYWNlKCpwYXJzaW5nQnVmZmVyKSk7CiAgICAgfQogICAgIAogICAgIG1fbGlzdC5zaHJp
bmtUb0ZpdCgpOwpAQCAtMjA1LDEwMyArMTk5LDEwMyBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhCiAvLyAgICAgICAgICAgICAgICAgICAvICggWyBzY2hlbWUgIjov
LyIgXSBob3N0IFsgcG9ydCBdIFsgcGF0aCBdICkKIC8vICAgICAgICAgICAgICAgICAgIC8gIidz
ZWxmJyIKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU291
cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUs
IFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBTdHJpbmcmIHBhdGgsIGJv
b2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKQordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
OjpwYXJzZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdC
dWZmZXIsIFN0cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIE9wdGlvbmFsPHVpbnQxNl90PiYg
cG9ydCwgU3RyaW5nJiBwYXRoLCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBvcnRIYXNX
aWxkY2FyZCkKIHsKLSAgICBpZiAoYmVnaW4gPT0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVmZmVy
LmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICInbm9uZSciKSkKKyAgICBpZiAo
c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAiJ25vbmUnIikpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbmQgLSBiZWdpbiA9PSAxICYmICpiZWdp
biA9PSAnKicpIHsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA9PSAx
ICYmICpwYXJzaW5nQnVmZmVyID09ICcqJykgewogICAgICAgICBtX2FsbG93U3RhciA9IHRydWU7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICInc2VsZiciKSkgeworICAgIGlmIChz
a2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICInc2VsZiciKSkgewog
ICAgICAgICBtX2FsbG93U2VsZiA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVn
aW4sICIndW5zYWZlLWlubGluZSciKSkgeworICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVND
SUlDYXNlKHBhcnNpbmdCdWZmZXIsICIndW5zYWZlLWlubGluZSciKSkgewogICAgICAgICBtX2Fs
bG93SW5saW5lID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIid1bnNh
ZmUtZXZhbCciKSkgeworICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNp
bmdCdWZmZXIsICIndW5zYWZlLWV2YWwnIikpIHsKICAgICAgICAgbV9hbGxvd0V2YWwgPSB0cnVl
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRp
b24gPSBiZWdpbjsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5Ib3N0ID0gYmVnaW47Ci0gICAgY29u
c3QgVUNoYXIqIGJlZ2luUGF0aCA9IGVuZDsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5Qb3J0ID0g
bnVsbHB0cjsKKyAgICBhdXRvIGJlZ2luID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAg
IGF1dG8gYmVnaW5Ib3N0ID0gYmVnaW47CisgICAgYXV0byBiZWdpblBhdGggPSBwYXJzaW5nQnVm
ZmVyLmVuZCgpOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luUG9ydCA9IG51bGxwdHI7
CiAKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90Q29sb25PclNsYXNoPihwb3NpdGlvbiwgZW5k
KTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RDb2xvbk9yU2xhc2g+KHBhcnNp
bmdCdWZmZXIpOwogCi0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkgeworICAgIGlmIChwYXJzaW5n
QnVmZmVyLmF0RW5kKCkpIHsKICAgICAgICAgLy8gaG9zdAogICAgICAgICAvLyAgICAgXgotICAg
ICAgICByZXR1cm4gcGFyc2VIb3N0KGJlZ2luSG9zdCwgcG9zaXRpb24sIGhvc3QsIGhvc3RIYXNX
aWxkY2FyZCk7CisgICAgICAgIHJldHVybiBwYXJzZUhvc3QoU3RyaW5nUGFyc2luZ0J1ZmZlciB7
IGJlZ2luSG9zdCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIH0sIGhvc3QsIGhvc3RIYXNXaWxk
Y2FyZCk7CiAgICAgfQogCi0gICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSAn
LycpIHsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYg
KnBhcnNpbmdCdWZmZXIgPT0gJy8nKSB7CiAgICAgICAgIC8vIGhvc3QvcGF0aCB8fCBob3N0LyB8
fCAvCiAgICAgICAgIC8vICAgICBeICAgICAgICAgICAgXiAgICBeCi0gICAgICAgIHJldHVybiBw
YXJzZUhvc3QoYmVnaW5Ib3N0LCBwb3NpdGlvbiwgaG9zdCwgaG9zdEhhc1dpbGRjYXJkKSAmJiBw
YXJzZVBhdGgocG9zaXRpb24sIGVuZCwgcGF0aCk7CisgICAgICAgIHJldHVybiBwYXJzZUhvc3Qo
U3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luSG9zdCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigp
IH0sIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkgJiYgcGFyc2VQYXRoKHBhcnNpbmdCdWZmZXIsIHBh
dGgpOwogICAgIH0KIAotICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gJzon
KSB7Ci0gICAgICAgIGlmIChlbmQgLSBwb3NpdGlvbiA9PSAxKSB7CisgICAgaWYgKHBhcnNpbmdC
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5nQnVmZmVyID09ICc6Jykg
eworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA9PSAxKSB7CiAg
ICAgICAgICAgICAvLyBzY2hlbWU6CiAgICAgICAgICAgICAvLyAgICAgICBeCi0gICAgICAgICAg
ICByZXR1cm4gcGFyc2VTY2hlbWUoYmVnaW4sIHBvc2l0aW9uLCBzY2hlbWUpOworICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlU2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpbiwgcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpIH0sIHNjaGVtZSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
cG9zaXRpb25bMV0gPT0gJy8nKSB7CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzFdID09ICcv
JykgewogICAgICAgICAgICAgLy8gc2NoZW1lOi8vaG9zdCB8fCBzY2hlbWU6Ly8KICAgICAgICAg
ICAgIC8vICAgICAgIF4gICAgICAgICAgICAgICAgXgotICAgICAgICAgICAgaWYgKCFwYXJzZVNj
aGVtZShiZWdpbiwgcG9zaXRpb24sIHNjaGVtZSkKLSAgICAgICAgICAgICAgICB8fCAhc2tpcEV4
YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc6JykKLSAgICAgICAgICAgICAgICB8fCAhc2tp
cEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJykKLSAgICAgICAgICAgICAgICB8fCAh
c2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJykpCisgICAgICAgICAgICBpZiAo
IXBhcnNlU2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpbiwgcGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpIH0sIHNjaGVtZSkKKyAgICAgICAgICAgICAgICB8fCAhc2tpcEV4YWN0bHk8Q2hh
cmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJzonKQorICAgICAgICAgICAgICAgIHx8ICFza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnLycpCisgICAgICAgICAgICAg
ICAgfHwgIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJykpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09
IGVuZCkKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYmVnaW5Ib3N0ID0gcG9zaXRpb247Ci0g
ICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90Q29sb25PclNsYXNoPihwb3NpdGlvbiwg
ZW5kKTsKKyAgICAgICAgICAgIGJlZ2luSG9zdCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsK
KyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdENvbG9uT3JTbGFzaD4o
cGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocG9zaXRpb24gPCBlbmQg
JiYgKnBvc2l0aW9uID09ICc6JykgeworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJzonKSB7CiAgICAgICAgICAg
ICAvLyBob3N0OnBvcnQgfHwgc2NoZW1lOi8vaG9zdDpwb3J0CiAgICAgICAgICAgICAvLyAgICAg
XiAgICAgICAgICAgICAgICAgICAgIF4KLSAgICAgICAgICAgIGJlZ2luUG9ydCA9IHBvc2l0aW9u
OwotICAgICAgICAgICAgc2tpcFVudGlsPFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpOworICAg
ICAgICAgICAgYmVnaW5Qb3J0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAg
ICAgc2tpcFVudGlsPENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJyk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICcvJykg
eworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFy
c2luZ0J1ZmZlciA9PSAnLycpIHsKICAgICAgICAgLy8gc2NoZW1lOi8vaG9zdC9wYXRoIHx8IHNj
aGVtZTovL2hvc3Q6cG9ydC9wYXRoCiAgICAgICAgIC8vICAgICAgICAgICAgICBeICAgICAgICAg
ICAgICAgICAgICAgICAgICBeCi0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBiZWdpbkhvc3QpCisg
ICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gYmVnaW5Ib3N0KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGJlZ2luUGF0aCA9IHBvc2l0aW9uOworICAg
ICAgICBiZWdpblBhdGggPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAgICAgfQogCi0gICAg
aWYgKCFwYXJzZUhvc3QoYmVnaW5Ib3N0LCBiZWdpblBvcnQgPyBiZWdpblBvcnQgOiBiZWdpblBh
dGgsIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkpCisgICAgaWYgKCFwYXJzZUhvc3QoU3RyaW5nUGFy
c2luZ0J1ZmZlciB7IGJlZ2luSG9zdCwgYmVnaW5Qb3J0ID8gYmVnaW5Qb3J0IDogYmVnaW5QYXRo
IH0sIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICghYmVnaW5Qb3J0KQogICAgICAgICBwb3J0ID0gV1RGOjpudWxsb3B0OwogICAgIGVsc2Ug
ewotICAgICAgICBpZiAoIXBhcnNlUG9ydChiZWdpblBvcnQsIGJlZ2luUGF0aCwgcG9ydCwgcG9y
dEhhc1dpbGRjYXJkKSkKKyAgICAgICAgaWYgKCFwYXJzZVBvcnQoU3RyaW5nUGFyc2luZ0J1ZmZl
ciB7IGJlZ2luUG9ydCwgYmVnaW5QYXRoIH0sIHBvcnQsIHBvcnRIYXNXaWxkY2FyZCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKGJlZ2luUGF0aCAhPSBlbmQp
IHsKLSAgICAgICAgaWYgKCFwYXJzZVBhdGgoYmVnaW5QYXRoLCBlbmQsIHBhdGgpKQorICAgIGlm
IChiZWdpblBhdGggIT0gcGFyc2luZ0J1ZmZlci5lbmQoKSkgeworICAgICAgICBpZiAoIXBhcnNl
UGF0aChTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5QYXRoLCBwYXJzaW5nQnVmZmVyLmVuZCgp
IH0sIHBhdGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMzExLDI1
ICszMDUsMjUgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogLy8g
ICAgICAgICAgICAgICAgICAgICA7IDxzY2hlbWU+IHByb2R1Y3Rpb24gZnJvbSBSRkMgMzk4Ngog
Ly8gc2NoZW1lICAgICAgPSBBTFBIQSAqKCBBTFBIQSAvIERJR0lUIC8gIisiIC8gIi0iIC8gIi4i
ICkKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU2NoZW1l
KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3Q6OnBhcnNlU2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4gcGFyc2luZ0J1ZmZlciwgU3RyaW5nJiBzY2hlbWUpCiB7Ci0gICAgQVNTRVJUKGJlZ2luIDw9
IGVuZCk7CisgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVm
ZmVyLmVuZCgpKTsKICAgICBBU1NFUlQoc2NoZW1lLmlzRW1wdHkoKSk7CiAKLSAgICBpZiAoYmVn
aW4gPT0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOworICAgIGF1dG8g
YmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAKLSAgICBpZiAoIXNraXBFeGFjdGx5
PFVDaGFyLCBpc0FTQ0lJQWxwaGE+KHBvc2l0aW9uLCBlbmQpKQorICAgIGlmICghc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSUFscGhhPihwYXJzaW5nQnVmZmVyKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc1NjaGVtZUNvbnRpbnVhdGlv
bkNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKIAotICAgIGlm
IChwb3NpdGlvbiAhPSBlbmQpCisgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNjaGVtZSA9IFN0cmluZyhiZWdpbiwgZW5kIC0gYmVn
aW4pOworICAgIHNjaGVtZSA9IFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigp
IC0gYmVnaW4pOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zMzcsOTEgKzMzMSw4OSBAQCBi
b29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAvLyAgICAgICAgICAgICAg
ICAgICAvICIqIgogLy8gaG9zdC1jaGFyICAgICAgICAgPSBBTFBIQSAvIERJR0lUIC8gIi0iCiAv
LwotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhvc3QoY29uc3Qg
VUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RI
YXNXaWxkY2FyZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VIb3N0KFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlciwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFz
V2lsZGNhcmQpCiB7Ci0gICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CisgICAgQVNTRVJUKHBhcnNp
bmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsKICAgICBBU1NFUlQo
aG9zdC5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCghaG9zdEhhc1dpbGRjYXJkKTsKIAotICAgIGlm
IChiZWdpbiA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0KLSAg
ICBpZiAoc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcqJykpIHsKKyAgICBpZiAo
c2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJyonKSkgewogICAgICAg
ICBob3N0SGFzV2lsZGNhcmQgPSB0cnVlOwogCi0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQp
CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAn
LicpKQorICAgICAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZm
ZXIsICcuJykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29uc3Qg
VUNoYXIqIGhvc3RCZWdpbiA9IHBvc2l0aW9uOworICAgIGF1dG8gaG9zdEJlZ2luID0gcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpOwogCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAg
ICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXIsIGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24sIGVu
ZCkpCisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7
CisgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNIb3N0Q2hhcmFjdGVy
PihwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgICAg
IHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0hvc3RDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIp
OwogCi0gICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAhc2tpcEV4YWN0bHk8VUNoYXI+KHBv
c2l0aW9uLCBlbmQsICcuJykpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSAmJiAhc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZl
ciwgJy4nKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBBU1NFUlQo
cG9zaXRpb24gPT0gZW5kKTsKLSAgICBob3N0ID0gU3RyaW5nKGhvc3RCZWdpbiwgZW5kIC0gaG9z
dEJlZ2luKTsKKyAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5hdEVuZCgpKTsKKyAgICBob3N0ID0g
U3RyaW5nKGhvc3RCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gaG9zdEJlZ2luKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYXJzZVBhdGgoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJp
bmcmIHBhdGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUGF0aChTdHJpbmdQYXJzaW5nQnVmZmVyPENo
YXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIsIFN0cmluZyYgcGF0aCkKIHsKLSAgICBBU1NFUlQo
YmVnaW4gPD0gZW5kKTsKKyAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIDw9IHBh
cnNpbmdCdWZmZXIuZW5kKCkpOwogICAgIEFTU0VSVChwYXRoLmlzRW1wdHkoKSk7CiAgICAgCi0g
ICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBp
c1BhdGhDb21wb25lbnRDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgIGF1dG8gYmVnaW4g
PSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzUGF0aENvbXBvbmVudENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CiAgICAgLy8gcGF0aC90
by9maWxlLmpzP3F1ZXJ5PXN0cmluZyB8fCBwYXRoL3RvL2ZpbGUuanMjYW5jaG9yCiAgICAgLy8g
ICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0gICAgaWYg
KHBvc2l0aW9uIDwgZW5kKQotICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUGF0aENoYXJh
Y3RlcihtX2RpcmVjdGl2ZU5hbWUsIFN0cmluZyhiZWdpbiwgZW5kIC0gYmVnaW4pLCAqcG9zaXRp
b24pOworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkKKyAg
ICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFBhdGhDaGFyYWN0ZXIobV9kaXJlY3RpdmVOYW1l
LCBTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIuZW5kKCkgLSBiZWdpbiksICpwYXJzaW5nQnVm
ZmVyKTsKICAgICAKLSAgICBwYXRoID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKFN0cmluZyhi
ZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOworICAgIHBhdGggPSBkZWNvZGVVUkxFc2NhcGVTZXF1
ZW5jZXMoU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbikpOwog
ICAgIAotICAgIEFTU0VSVChwb3NpdGlvbiA8PSBlbmQpOwotICAgIEFTU0VSVChwb3NpdGlvbiA9
PSBlbmQgfHwgKCpwb3NpdGlvbiA9PSAnIycgfHwgKnBvc2l0aW9uID09ICc/JykpOworICAgIEFT
U0VSVChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPD0gcGFyc2luZ0J1ZmZlci5lbmQoKSk7Cisg
ICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAoKnBhcnNpbmdCdWZmZXIgPT0gJyMn
IHx8ICpwYXJzaW5nQnVmZmVyID09ICc/JykpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBw
b3J0ICAgICAgICAgICAgICA9ICI6IiAoIDEqRElHSVQgLyAiKiIgKQogLy8KLWJvb2wgQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQb3J0KGNvbnN0IFVDaGFyKiBiZWdpbiwg
Y29uc3QgVUNoYXIqIGVuZCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29sJiBwb3J0SGFz
V2lsZGNhcmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUG9ydChTdHJpbmdQYXJzaW5nQnVmZmVyPENo
YXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgYm9v
bCYgcG9ydEhhc1dpbGRjYXJkKQogewotICAgIEFTU0VSVChiZWdpbiA8PSBlbmQpOworICAgIEFT
U0VSVChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPD0gcGFyc2luZ0J1ZmZlci5lbmQoKSk7CiAg
ICAgQVNTRVJUKCFwb3J0KTsKICAgICBBU1NFUlQoIXBvcnRIYXNXaWxkY2FyZCk7CiAgICAgCi0g
ICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhcj4oYmVnaW4sIGVuZCwgJzonKSkKKyAgICBpZiAoIXNr
aXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc6JykpCiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIAotICAgIGlmIChiZWdpbiA9PSBlbmQpCisgICAgaWYg
KHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IGlmIChlbmQgLSBiZWdpbiA9PSAxICYmICpiZWdpbiA9PSAnKicpIHsKKyAgICBpZiAocGFyc2lu
Z0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA9PSAxICYmICpwYXJzaW5nQnVmZmVyID09ICcqJykg
ewogICAgICAgICBwb3J0ID0gV1RGOjpudWxsb3B0OwogICAgICAgICBwb3J0SGFzV2lsZGNhcmQg
PSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgY29uc3QgVUNo
YXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJRGlnaXQ+
KHBvc2l0aW9uLCBlbmQpOworICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9u
KCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlEaWdpdD4ocGFyc2luZ0J1
ZmZlcik7CiAgICAgCi0gICAgaWYgKHBvc2l0aW9uICE9IGVuZCkKKyAgICBpZiAoIXBhcnNpbmdC
dWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGJvb2wgb2s7
Ci0gICAgaW50IHBvcnRJbnQgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoYmVnaW4sIGVuZCAtIGJl
Z2luLCAmb2spOworICAgIGludCBwb3J0SW50ID0gY2hhcmFjdGVyc1RvSW50U3RyaWN0KGJlZ2lu
LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbiwgJm9rKTsKICAgICBpZiAocG9ydElu
dCA8IDAgfHwgcG9ydEludCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHBvcnQgPSBwb3J0SW50OwpAQCAtNDMxLDQ0ICs0
MjMsNDIgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYQogLy8gTWF0
Y2ggQmxpbmsncyBiZWhhdmlvciBvZiBhbGxvd2luZyBhbiBlcXVhbCBzaWduIHRvIGFwcGVhciBh
bnl3aGVyZSBpbiB0aGUgdmFsdWUgb2YgdGhlIG5vbmNlCiAvLyBldmVuIHRob3VnaCB0aGlzIGRv
ZXMgbm90IG1hdGNoIHRoZSBiZWhhdmlvciBvZiBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBMZXZl
bCAzIHNwZWMuLAogLy8gPGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtY3NwLz4gKDI5
IEZlYnJ1YXJ5IDIwMTYpLgotc3RhdGljIGJvb2wgaXNOb25jZUNoYXJhY3RlcihVQ2hhciBjKQor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNOb25jZUNoYXJh
Y3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGlzQmFzZTY0T3JCYXNlNjRVUkxD
aGFyYWN0ZXIoYykgfHwgYyA9PSAnPSc7CiB9CiAKIC8vIG5vbmNlLXNvdXJjZSAgICA9ICInbm9u
Y2UtIiBub25jZS12YWx1ZSAiJyIKIC8vIG5vbmNlLXZhbHVlICAgICA9IGJhc2U2NC12YWx1ZQot
Ym9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZU5vbmNlU291cmNlKGNv
bnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VO
b25jZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZm
ZXIpCiB7Ci0gICAgY29uc3QgdW5zaWduZWQgbm9uY2VQcmVmaXhMZW5ndGggPSA3OwotICAgIGlm
ICghU3RyaW5nVmlldyhiZWdpbiwgZW5kIC0gYmVnaW4pLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZSgiJ25vbmNlLSIpKQorICAgIGlmICghc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShw
YXJzaW5nQnVmZmVyLCAiJ25vbmNlLSIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29u
c3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW4gKyBub25jZVByZWZpeExlbmd0aDsKLSAgICBjb25z
dCBVQ2hhciogYmVnaW5Ob25jZVZhbHVlID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPFVDaGFy
LCBpc05vbmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAgICBpZiAocG9zaXRpb24gPj0g
ZW5kIHx8IHBvc2l0aW9uID09IGJlZ2luTm9uY2VWYWx1ZSB8fCAqcG9zaXRpb24gIT0gJ1wnJykK
KworICAgIGF1dG8gYmVnaW5Ob25jZVZhbHVlID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwor
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vbmNlQ2hhcmFjdGVyPihwYXJzaW5nQnVm
ZmVyKTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8IHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKSA9PSBiZWdpbk5vbmNlVmFsdWUgfHwgKnBhcnNpbmdCdWZmZXIgIT0gJ1wnJykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbm9uY2VzLmFkZChTdHJpbmcoYmVnaW5Ob25jZVZh
bHVlLCBwb3NpdGlvbiAtIGJlZ2luTm9uY2VWYWx1ZSkpOworICAgIG1fbm9uY2VzLmFkZChTdHJp
bmcoYmVnaW5Ob25jZVZhbHVlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbk5vbmNl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gaGFzaC1zb3VyY2UgICAgPSAiJyIg
aGFzaC1hbGdvcml0aG0gIi0iIGJhc2U2NC12YWx1ZSAiJyIKIC8vIGhhc2gtYWxnb3JpdGhtID0g
InNoYTI1NiIgLyAic2hhMzg0IiAvICJzaGE1MTIiCiAvLyBiYXNlNjQtdmFsdWUgID0gMSooIEFM
UEhBIC8gRElHSVQgLyAiKyIgLyAiLyIgLyAiLSIgLyAiXyIgKSoyKCAiPSIgKQotYm9vbCBDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhhc2hTb3VyY2UoY29uc3QgVUNoYXIq
IGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhhc2hTb3VyY2Uo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAg
IGlmIChiZWdpbiA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0g
ICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJ1wnJykpCisgICAgaWYg
KCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnXCcnKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBkaWdlc3QgPSBwYXJzZUNyeXB0b2dyYXBoaWNE
aWdlc3QocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBkaWdlc3QgPSBwYXJzZUNyeXB0b2dyYXBo
aWNEaWdlc3QocGFyc2luZ0J1ZmZlcik7CiAgICAgaWYgKCFkaWdlc3QpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChwb3NpdGlvbiA+PSBlbmQgfHwgKnBvc2l0aW9uICE9ICdcJycp
CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAnXCcn
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGlnZXN0LT52YWx1ZS5zaXplKCkg
PiBDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoOjptYXhpbXVtRGlnZXN0TGVuZ3RoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwxOSArNTUsMTkgQEAgcHVibGljOgogICAgIGJvb2wgaXNOb25lKCkgY29uc3QgeyByZXR1
cm4gbV9pc05vbmU7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIHBhcnNlKGNvbnN0IFVDaGFyKiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gdm9pZCBwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+KTsKIAot
ICAgIGJvb2wgcGFyc2VTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
LCBTdHJpbmcmIHNjaGVtZSwgU3RyaW5nJiBob3N0LCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQs
IFN0cmluZyYgcGF0aCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNh
cmQpOwotICAgIGJvb2wgcGFyc2VTY2hlbWUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kLCBTdHJpbmcmIHNjaGVtZSk7Ci0gICAgYm9vbCBwYXJzZUhvc3QoY29uc3QgVUNoYXIq
IGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxk
Y2FyZCk7Ci0gICAgYm9vbCBwYXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kLCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7
Ci0gICAgYm9vbCBwYXJzZVBhdGgoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
LCBTdHJpbmcmIHBhdGgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJv
b2wgcGFyc2VTb3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiwgU3RyaW5n
JiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBTdHJpbmcm
IHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlU2NoZW1lKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4sIFN0cmluZyYgc2NoZW1lKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlSG9zdChTdHJpbmdQYXJzaW5n
QnVmZmVyPENoYXJhY3RlclR5cGU+LCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxkY2Fy
ZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVBvcnQo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiwgT3B0aW9uYWw8dWludDE2X3Q+JiBw
b3J0LCBib29sJiBwb3J0SGFzV2lsZGNhcmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGJvb2wgcGFyc2VQYXRoKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4sIFN0cmluZyYgcGF0aCk7CiAKLSAgICBib29sIHBhcnNlTm9uY2VTb3VyY2UoY29uc3QgVUNo
YXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBib29sIHBhcnNlTm9uY2VTb3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFy
YWN0ZXJUeXBlPik7CiAKICAgICBib29sIGlzUHJvdG9jb2xBbGxvd2VkQnlTdGFyKGNvbnN0IFVS
TCYpIGNvbnN0OwogCi0gICAgYm9vbCBwYXJzZUhhc2hTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2lu
LCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIHBhcnNlSGFzaFNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+
KTsKIAogICAgIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgbV9wb2xpY3k7CiAgICAgVmVj
dG9yPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZT4gbV9saXN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmdsZVZhbHVlLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtODAsMTkgKzgxLDE5IEBAIFN0cmluZyBTVkdBbmdsZVZhbHVlOjp2YWx1ZUFz
U3RyaW5nKCkgY28KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgU1ZHQW5nbGVWYWx1ZTo6VHlwZSBwYXJzZUFu
Z2xlVHlwZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgU1ZHQW5n
bGVWYWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgc3dpdGNoIChlbmQgLSBwdHIpIHsKKyAgICBz
d2l0Y2ggKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkpIHsKICAgICBjYXNlIDA6CiAg
ICAgICAgIHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5HTEVUWVBFX1VOU1BFQ0lGSUVEOwog
ICAgIGNhc2UgMzoKLSAgICAgICAgaWYgKHB0clswXSA9PSAnZCcgJiYgcHRyWzFdID09ICdlJyAm
JiBwdHJbMl0gPT0gJ2cnKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlclswXSA9PSAnZCcgJiYg
cGFyc2luZ0J1ZmZlclsxXSA9PSAnZScgJiYgcGFyc2luZ0J1ZmZlclsyXSA9PSAnZycpCiAgICAg
ICAgICAgICByZXR1cm4gU1ZHQW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9ERUc7Ci0gICAgICAg
IGlmIChwdHJbMF0gPT0gJ3InICYmIHB0clsxXSA9PSAnYScgJiYgcHRyWzJdID09ICdkJykKKyAg
ICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbMF0gPT0gJ3InICYmIHBhcnNpbmdCdWZmZXJbMV0gPT0g
J2EnICYmIHBhcnNpbmdCdWZmZXJbMl0gPT0gJ2QnKQogICAgICAgICAgICAgcmV0dXJuIFNWR0Fu
Z2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfUkFEOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDQ6
Ci0gICAgICAgIGlmIChwdHJbMF0gPT0gJ2cnICYmIHB0clsxXSA9PSAncicgJiYgcHRyWzJdID09
ICdhJyAmJiBwdHJbM10gPT0gJ2QnKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlclswXSA9PSAn
ZycgJiYgcGFyc2luZ0J1ZmZlclsxXSA9PSAncicgJiYgcGFyc2luZ0J1ZmZlclsyXSA9PSAnYScg
JiYgcGFyc2luZ0J1ZmZlclszXSA9PSAnZCcpCiAgICAgICAgICAgICByZXR1cm4gU1ZHQW5nbGVW
YWx1ZTo6U1ZHX0FOR0xFVFlQRV9HUkFEOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMDYs
MjcgKzEwNywxOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTVkdBbmdsZVZhbHVlOjpzZXRWYWx1CiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgYXV0byBoZWxwZXIgPSBbJl0oYXV0byog
cHRyLCBhdXRvKiBlbmQpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKLSAgICAgICAgYXV0byB2YWx1
ZUluU3BlY2lmaWVkVW5pdHMgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQ
b2xpY3k6OkRvbnRTa2lwKTsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNp
bmcodmFsdWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsK
KyAgICAgICAgYXV0byB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSBwYXJzZU51bWJlcihwYXJzaW5n
QnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwogICAgICAgICBpZiAoIXZh
bHVlSW5TcGVjaWZpZWRVbml0cykKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50
YXhFcnJvciB9OwogCi0gICAgICAgIGF1dG8gdW5pdFR5cGUgPSBwYXJzZUFuZ2xlVHlwZShwdHIs
IGVuZCk7CisgICAgICAgIGF1dG8gdW5pdFR5cGUgPSBwYXJzZUFuZ2xlVHlwZShwYXJzaW5nQnVm
ZmVyKTsKICAgICAgICAgaWYgKHVuaXRUeXBlID09IFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZ
UEVfVU5LTk9XTikKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9
OwogCiAgICAgICAgIG1fdW5pdFR5cGUgPSB1bml0VHlwZTsKICAgICAgICAgbV92YWx1ZUluU3Bl
Y2lmaWVkVW5pdHMgPSAqdmFsdWVJblNwZWNpZmllZFVuaXRzOwogICAgICAgICByZXR1cm4geyB9
OwotICAgIH07Ci0KLSAgICBpZiAodmFsdWUuaXM4Qml0KCkpIHsKLSAgICAgICAgYXV0byogcHRy
ID0gdmFsdWUuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgcmV0dXJuIGhlbHBlcihwdHIsIHB0ciAr
IHZhbHVlLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBwdHIgPSB2YWx1ZS5jaGFyYWN0
ZXJzMTYoKTsKLSAgICByZXR1cm4gaGVscGVyKHB0ciwgcHRyICsgdmFsdWUubGVuZ3RoKCkpOwor
ICAgIH0pOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdBbmdsZVZhbHVlOjpuZXdWYWx1ZVNw
ZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCB2YWx1ZUluU3BlY2lm
aWVkVW5pdHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDcgQEAgYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6aGFzVmFsaQogdm9pZCBT
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0g
U1ZHTmFtZXM6OnR5cGVBdHRyKSB7Ci0gICAgICAgIG1fdHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6
OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSk7CisgICAgICAgIG1fdHlwZSA9IFNWR1RyYW5zZm9y
bWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSkudmFsdWVPcihTVkdUcmFuc2Zvcm1WYWx1
ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKTsKICAgICAgICAgaWYgKG1fdHlwZSA9PSBTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVgpCiAgICAgICAgICAgICBtX3R5cGUgPSBT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNzcsNTQgKzc4LDUwIEBAIGZhaWw6CiAgICAgcmVzdWx0LmNsZWFyKCk7CiB9CiAK
LXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25z
dCBTdHJpbmdWaWV3JiBwYXJzZSkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+
IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCiB7Ci0gICAgaWYgKHBh
cnNlLmlzRW1wdHkoKSkKKyAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gcGFyc2Uu
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcGFyc2UubGVuZ3Ro
KCk7Ci0KLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwotCi0gICAgVmVjdG9y
PFVuaXRCZXppZXI+IHJlc3VsdDsKLQotICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAg
ICB3aGlsZSAoY3VyIDwgZW5kKSB7Ci0gICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAg
ICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NB
KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gV1RGOjpyZWFk
Q2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBP
cHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+IHsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKHBhcnNpbmdCdWZmZXIpOwogCi0gICAgICAgIGF1dG8gcG9zQiA9IHBhcnNlTnVtYmVyKGN1
ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NCKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgVmVjdG9yPFVuaXRCZXppZXI+IHJlc3VsdDsKIAotICAgICAgICBhdXRv
IHBvc0MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAgICAgIGlmICghcG9zQykKLSAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBm
YWxzZTsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpKSB7CisgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICAgICAgYXV0
byBwb3NBID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICBpZiAoIXBv
c0EpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRv
IHBvc0QgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKLSAgICAgICAgaWYgKCFwb3NEKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgICAgIGF1dG8gcG9zQiA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOwor
ICAgICAgICAgICAgaWYgKCFwb3NCKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKKyAgICAgICAg
ICAgIGF1dG8gcG9zQyA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAg
aWYgKCFwb3NDKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAg
ICAgaWYgKGN1ciA8IGVuZCAmJiAqY3VyID09ICc7JykgewotICAgICAgICAgICAgZGVsaW1QYXJz
ZWQgPSB0cnVlOwotICAgICAgICAgICAgY3VyKys7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGF1
dG8gcG9zRCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpEb250U2tpcCk7CisgICAgICAgICAgICBpZiAoIXBvc0QpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBl
bmQpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwog
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoVW5pdEJlemllciB7ICpwb3NBLCAqcG9zQiwgKnBvc0Ms
ICpwb3NEIH0pOwotICAgIH0KKyAgICAgICAgICAgIGlmIChza2lwRXhhY3RseShwYXJzaW5nQnVm
ZmVyLCAnOycpKQorICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKIAotICAgIGlm
ICghKGN1ciA9PSBlbmQgJiYgIWRlbGltUGFyc2VkKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsK
KworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6aWVyIHsgKnBvc0EsICpwb3NCLCAq
cG9zQywgKnBvc0QgfSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShwYXJzaW5nQnVmZmVy
LmF0RW5kKCkgJiYgIWRlbGltUGFyc2VkKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0p
OwogfQogCiBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpdFRvVmlld0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zp
dFRvVmlld0JveC5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaXRUb1ZpZXdCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04NiwyNyArODcsMzcgQEAgYm9vbCBTVkdGaXRUb1Zp
ZXdCb3g6OnBhcnNlQXR0cmlidXRlKGNvbgogCiBPcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRv
Vmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKQogewotICAgIGF1
dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gdmFsdWUudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0g
ICAgcmV0dXJuIHBhcnNlVmlld0JveChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVu
Z3RoKCkpOworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwg
WyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICByZXR1cm4gcGFyc2VWaWV3Qm94R2Vu
ZXJpYyhwYXJzaW5nQnVmZmVyKTsKKyAgICB9KTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBT
VkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYg
cGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKK3sKKyAgICByZXR1cm4gcGFyc2VWaWV3Qm94
R2VuZXJpYyhwYXJzaW5nQnVmZmVyLCB2YWxpZGF0ZSk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVj
dD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hh
cj4mIHBhcnNpbmdCdWZmZXIsIGJvb2wgdmFsaWRhdGUpCit7CisgICAgcmV0dXJuIHBhcnNlVmll
d0JveEdlbmVyaWMocGFyc2luZ0J1ZmZlciwgdmFsaWRhdGUpOwogfQogCi1PcHRpb25hbDxGbG9h
dFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29u
c3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3hH
ZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIs
IGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAgU3RyaW5nVmlldyBzdHIoYywgZW5kIC0gYyk7CisgICAg
U3RyaW5nVmlldyBzdHJpbmdUb1BhcnNlID0gcGFyc2luZ0J1ZmZlci5zdHJpbmdWaWV3T2ZDaGFy
YWN0ZXJzUmVtYWluaW5nKCk7CiAKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYywgZW5kKTsK
KyAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBhdXRvIHgg
PSBwYXJzZU51bWJlcihjLCBlbmQpOwotICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7
Ci0gICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7Ci0gICAgYXV0byBoZWlnaHQg
PSBwYXJzZU51bWJlcihjLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Cisg
ICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgYXV0byB5ID0gcGFy
c2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKHBh
cnNpbmdCdWZmZXIpOworICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZl
ciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKIAogICAgIGlmICh2YWxpZGF0ZSkg
ewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBtX3ZpZXdCb3gtPmNvbnRleHRFbGVtZW50
KCktPmRvY3VtZW50KCk7CiAKICAgICAgICAgaWYgKCF4IHx8ICF5IHx8ICF3aWR0aCB8fCAhaGVp
Z2h0KSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0
V2FybmluZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0ciwgIlwi
IikpOworICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdh
cm5pbmcobWFrZVN0cmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdCb3g9XCIiLCBzdHJpbmdUb1Bh
cnNlLCAiXCIiKSk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9
CiAKQEAgLTEyMyw5ICsxMzQsOSBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0Jv
eDo6cGFyCiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3RoaW5nIHNob3VsZCBjb21lIGFmdGVy
IHRoZSBsYXN0LCBmb3VydGggbnVtYmVyLgotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
YywgZW5kKTsKLSAgICAgICAgaWYgKGMgPCBlbmQpIHsKLSAgICAgICAgICAgIGRvY3VtZW50LmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFy
c2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlcyhwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFj
dGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1c
IiIsIHN0cmluZ1RvUGFyc2UsICJcIiIpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9W
aWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0Jv
eC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDkgKzY2LDEyIEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIHJlc2V0KCk7CiAgICAgYm9vbCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbVN0cmluZyYpOwogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VWaWV3
Qm94KGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBh
cnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZh
bGlkYXRlID0gdHJ1ZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mLCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4m
LCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3hHZW5lcmlj
KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mLCBib29sIHZhbGlkYXRlID0gdHJ1
ZSk7CisKICAgICBSZWY8U1ZHQW5pbWF0ZWRSZWN0PiBtX3ZpZXdCb3g7CiAgICAgUmVmPFNWR0Fu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4gbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvOwogICAgIGJv
b2wgbV9pc1ZpZXdCb3hWYWxpZCB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xl
bmd0aExpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5n
dGhMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKKworI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQ
YXJzaW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTVkdMZW5ndGhM
aXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNsZWFySXRlbXMoKTsKKwor
ICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8g
cGFyc2luZ0J1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlwZW5hbWUg
ZGVjbHR5cGUocGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7CisKKyAgICAgICAgd2hpbGUg
KHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBh
dXRvIHN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworCisgICAgICAgICAgICBza2lw
VW50aWw8Q2hhcmFjdGVyVHlwZSwgaXNTVkdTcGFjZU9yQ29tbWE+KHBhcnNpbmdCdWZmZXIpOwor
CisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09IHN0YXJ0KQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBhdXRvIHZhbHVlID0gU1ZHTGVuZ3Ro
VmFsdWU6OmNvbnN0cnVjdChtX2xlbmd0aE1vZGUsIFN0cmluZ1ZpZXcoc3RhcnQsIHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKSAtIHN0YXJ0KSk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBhcHBlbmQoU1ZHTGVuZ3RoOjpjcmVh
dGUoV1RGTW92ZSgqdmFsdWUpKSk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNP
ckRlbGltaXRlcihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhpcyBjbGVhckl0ZW1zKCkgb24gZmFpbHVyZSBsaWtlIFNWR1RyYW5zZm9ybUxp
c3QgZG9lcz8KKworICAgICAgICByZXR1cm4gcGFyc2luZ0J1ZmZlci5hdEVuZCgpOworICAgIH0p
OworfQorCitTdHJpbmcgU1ZHTGVuZ3RoTGlzdDo6dmFsdWVBc1N0cmluZygpIGNvbnN0Cit7Cisg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgZm9yIChjb25zdCBhdXRvJiBsZW5ndGgg
OiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQorICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZChsZW5ndGgtPnZh
bHVlKCkudmFsdWVBc1N0cmluZygpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmgJKHJldmlz
aW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2lu
Y2x1ZGUgIlNWR1ZhbHVlUHJvcGVydHlMaXN0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDQ1ICs1Miw5IEBAIHB1
YmxpYzoKIAogICAgIFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGVuZ3RoTW9kZTsgfQogCi0gICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAg
ICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKLSAgICAgICAgd2hpbGUgKHB0
ciA8IGVuZCkgewotICAgICAgICAgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gcHRyOwotICAgICAg
ICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJyAmJiAhaXNTVkdTcGFjZSgqcHRy
KSkKLSAgICAgICAgICAgICAgICBwdHIrKzsKLSAgICAgICAgICAgIGlmIChwdHIgPT0gc3RhcnQp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmlu
ZyhzdGFydCwgcHRyIC0gc3RhcnQpOwotICAgICAgICAgICAgU1ZHTGVuZ3RoVmFsdWUgdmFsdWUo
bV9sZW5ndGhNb2RlKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlU3RyaW5nKS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgYXBwZW5kKFNWR0xlbmd0aDo6Y3JlYXRlKHZhbHVlKSk7Ci0gICAgICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gcHRyID09IGVuZDsKLSAgICB9CisgICAgYm9vbCBwYXJzZShjb25zdCBT
dHJpbmcmIHZhbHVlKTsKIAotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJp
ZGUKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGxlbmd0aCA6IG1faXRlbXMpIHsKLSAgICAgICAgICAgIGlmIChidWlsZGVy
Lmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxlbmd0aC0+dmFsdWUoKS52YWx1ZUFzU3RyaW5nKCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9Cisg
ICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZTsKICAgICAKIHByaXZhdGU6
CiAgICAgU1ZHTGVuZ3RoTGlzdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJTVkdMZW5ndGhDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUGFy
c2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1i
ZXJzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEs
MTkgKzYyLDIxIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogbGVuZ3RoVHlwZVRvU3QKICAg
ICByZXR1cm4gIiI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU1ZHTGVuZ3RoVHlwZSBwYXJzZUxlbmd0
aFR5cGUoY29uc3QgVUNoYXIqIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgU1ZHTGVuZ3RoVHlwZSBwYXJzZUxlbmd0
aFR5cGUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikK
IHsKLSAgICBpZiAocHRyID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gU1ZHTGVuZ3RoVHlwZTo6TnVtYmVyOwogCi0gICAgY29uc3QgVUNoYXIg
Zmlyc3RDaGFyID0gKnB0cjsKKyAgICBhdXRvIGZpcnN0Q2hhciA9ICpwYXJzaW5nQnVmZmVyOwor
ICAgICsrcGFyc2luZ0J1ZmZlcjsKIAotICAgIGlmICgrK3B0ciA9PSBlbmQpCisgICAgaWYgKHBh
cnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZpcnN0Q2hhciA9PSAnJScgPyBT
VkdMZW5ndGhUeXBlOjpQZXJjZW50YWdlIDogU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bjsKIAotICAg
IGNvbnN0IFVDaGFyIHNlY29uZENoYXIgPSAqcHRyOworICAgIGF1dG8gc2Vjb25kQ2hhciA9ICpw
YXJzaW5nQnVmZmVyOworICAgICsrcGFyc2luZ0J1ZmZlcjsKIAotICAgIGlmICgrK3B0ciAhPSBl
bmQpCisgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBTVkdM
ZW5ndGhUeXBlOjpVbmtub3duOwogCiAgICAgaWYgKGZpcnN0Q2hhciA9PSAnZScgJiYgc2Vjb25k
Q2hhciA9PSAnbScpCkBAIC0xODAsNyArMTgzLDE1IEBAIFNWR0xlbmd0aFZhbHVlOjpTVkdMZW5n
dGhWYWx1ZShjb25zdCBTVkcKICAgICBzZXRWYWx1ZShjb250ZXh0LCB2YWx1ZSk7CiB9CiAKLVNW
R0xlbmd0aFZhbHVlIFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5n
dGhNb2RlLCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcsIFNWR1BhcnNpbmdFcnJvciYgcGFy
c2VFcnJvciwgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlIG5lZ2F0aXZlVmFsdWVzTW9kZSkK
K09wdGlvbmFsPFNWR0xlbmd0aFZhbHVlPiBTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0KFNWR0xl
bmd0aE1vZGUgbGVuZ3RoTW9kZSwgY29uc3QgU3RyaW5nVmlldyYgdmFsdWVBc1N0cmluZykKK3sK
KyAgICBTVkdMZW5ndGhWYWx1ZSBsZW5ndGggeyBsZW5ndGhNb2RlIH07CisgICAgaWYgKGxlbmd0
aC5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlQXNTdHJpbmcpLmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBsZW5ndGg7Cit9CisKK1NWR0xlbmd0
aFZhbHVlIFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2Rl
LCBjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFzU3RyaW5nLCBTVkdQYXJzaW5nRXJyb3ImIHBhcnNl
RXJyb3IsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSBuZWdhdGl2ZVZhbHVlc01vZGUpCiB7
CiAgICAgU1ZHTGVuZ3RoVmFsdWUgbGVuZ3RoKGxlbmd0aE1vZGUpOwogCkBAIC0yMzksNyArMjUw
LDcgQEAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBTVkdMZW5ndGhWYWx1ZTo6dAogICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGxlbmd0aC52YWx1ZUluU3BlY2lmaWVkVW5pdHMo
KSwgbGVuZ3RoVHlwZVRvUHJpbWl0aXZlVHlwZShsZW5ndGgubGVuZ3RoVHlwZSgpKSk7CiB9CiAK
LUV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWVBc1N0cmluZywgU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlKQorRXhjZXB0
aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5n
VmlldyYgdmFsdWVBc1N0cmluZywgU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlKQogewogICAgIG1f
dmFsdWVJblNwZWNpZmllZFVuaXRzID0gMDsKICAgICBtX2xlbmd0aE1vZGUgPSBsZW5ndGhNb2Rl
OwpAQCAtMjg2LDI2ICsyOTcsMjQgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6
OnNldFZhbAogICAgIHJldHVybiBzZXRWYWx1ZShjb250ZXh0LCB2YWx1ZSk7CiB9CiAKLUV4Y2Vw
dGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQorRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNT
dHJpbmcoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewogICAgIGlmIChzdHJpbmcuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3Rl
cnMgPSBTdHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29u
c3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciog
ZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgYXV0byBjb252ZXJ0ZWROdW1iZXIg
PSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsK
LSAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5
bnRheEVycm9yIH07Ci0KLSAgICBhdXRvIGxlbmd0aFR5cGUgPSBwYXJzZUxlbmd0aFR5cGUocHRy
LCBlbmQpOwotICAgIGlmIChsZW5ndGhUeXBlID09IFNWR0xlbmd0aFR5cGU6OlVua25vd24pCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OworICAgIHJldHVybiBXVEY6
OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIp
IC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byBjb252ZXJ0ZWROdW1iZXIgPSBw
YXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OworICAgICAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKKyAgICAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTeW50YXhFcnJvciB9OworCisgICAgICAgIGF1dG8gbGVuZ3RoVHlwZSA9IHBhcnNl
TGVuZ3RoVHlwZShwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKGxlbmd0aFR5cGUgPT0gU1ZH
TGVuZ3RoVHlwZTo6VW5rbm93bikKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50
YXhFcnJvciB9OwogCi0gICAgbV9sZW5ndGhUeXBlID0gbGVuZ3RoVHlwZTsKLSAgICBtX3ZhbHVl
SW5TcGVjaWZpZWRVbml0cyA9ICpjb252ZXJ0ZWROdW1iZXI7Ci0gICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgbV9sZW5ndGhUeXBlID0gbGVuZ3RoVHlwZTsKKyAgICAgICAgbV92YWx1ZUluU3BlY2lm
aWVkVW5pdHMgPSAqY29udmVydGVkTnVtYmVyOworICAgICAgICByZXR1cm4geyB9OworICAgIH0p
OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6Y29udmVydFRvU3BlY2lm
aWVkVW5pdHMoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYgY29udGV4dCwgU1ZHTGVuZ3RoVHlwZSBs
ZW5ndGhUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmgJKHJldmlzaW9u
IDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OCwxMyArNTgsMTQgQEAgZW51bSBjbGFzcyBTVkdMZW5ndGhOZWdhdGl2ZVZh
bHVlc01vZGUgOgogY2xhc3MgU1ZHTGVuZ3RoVmFsdWUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIFNWR0xlbmd0aFZhbHVlKFNWR0xlbmd0aE1vZGUgPSBTVkdM
ZW5ndGhNb2RlOjpPdGhlciwgY29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nID0gU3RyaW5nKCkp
OworICAgIFNWR0xlbmd0aFZhbHVlKFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhl
ciwgY29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nID0geyB9KTsKICAgICBTVkdMZW5ndGhWYWx1
ZShmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMsIFNWR0xlbmd0aFR5cGUsIFNWR0xlbmd0aE1v
ZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlcik7CiAgICAgU1ZHTGVuZ3RoVmFsdWUoY29uc3QgU1ZH
TGVuZ3RoQ29udGV4dCYsIGZsb2F0LCBTVkdMZW5ndGhUeXBlID0gU1ZHTGVuZ3RoVHlwZTo6TnVt
YmVyLCBTVkdMZW5ndGhNb2RlID0gU1ZHTGVuZ3RoTW9kZTo6T3RoZXIpOwogCi0gICAgc3RhdGlj
IFNWR0xlbmd0aFZhbHVlIGNvbnN0cnVjdChTVkdMZW5ndGhNb2RlLCBjb25zdCBTdHJpbmcmLCBT
VkdQYXJzaW5nRXJyb3ImLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgPSBTVkdMZW5ndGhO
ZWdhdGl2ZVZhbHVlc01vZGU6OkFsbG93KTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHTGVuZ3Ro
VmFsdWU+IGNvbnN0cnVjdChTVkdMZW5ndGhNb2RlLCBjb25zdCBTdHJpbmdWaWV3Jik7CisgICAg
c3RhdGljIFNWR0xlbmd0aFZhbHVlIGNvbnN0cnVjdChTVkdMZW5ndGhNb2RlLCBjb25zdCBTdHJp
bmdWaWV3JiwgU1ZHUGFyc2luZ0Vycm9yJiwgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlID0g
U1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlOjpBbGxvdyk7CiAgICAgc3RhdGljIFNWR0xlbmd0
aFZhbHVlIGJsZW5kKGNvbnN0IFNWR0xlbmd0aFZhbHVlJiBmcm9tLCBjb25zdCBTVkdMZW5ndGhW
YWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKTsKLSAgICAKKwogICAgIHN0YXRpYyBTVkdMZW5ndGhW
YWx1ZSBmcm9tQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKICAg
ICBzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0
IFNWR0xlbmd0aFZhbHVlJik7CiAKQEAgLTg1LDggKzg2LDggQEAgcHVibGljOgogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNldFZhbHVlKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBmbG9hdCk7CiAg
ICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZs
b2F0LCBTVkdMZW5ndGhUeXBlLCBTVkdMZW5ndGhNb2RlKTsKIAotICAgIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0gICAgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmLCBTVkdMZW5ndGhNb2RlKTsKKyAgICBF
eGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAg
ICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmLCBT
VkdMZW5ndGhNb2RlKTsKIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGNvbnZlcnRUb1NwZWNpZmll
ZFVuaXRzKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBTVkdMZW5ndGhUeXBlKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdOdW1i
ZXJMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2Jvb2wgU1ZHTnVtYmVyTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAg
ICBjbGVhckl0ZW1zKCk7CisKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNp
bmcodmFsdWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8gVGhlIHNwZWMg
KHNlY3Rpb24gNC4xKSBzdHJhbmdlbHkgZG9lc24ndCBhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2Uu
CisgICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0byB2aW9sYXRlIHRoYXQgaW50ZW50aW9uYWxs
eS4KKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygp
KSB7CisgICAgICAgICAgICBhdXRvIG51bWJlciA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIp
OworICAgICAgICAgICAgaWYgKCFudW1iZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBhcHBlbmQoU1ZHTnVtYmVyOjpjcmVhdGUoKm51bWJlcikpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNsZWFySXRlbXMoKSBvbiBmYWlsdXJlIGxp
a2UgU1ZHVHJhbnNmb3JtTGlzdCBkb2VzPworCisgICAgICAgIHJldHVybiBwYXJzaW5nQnVmZmVy
LmF0RW5kKCk7CisgICAgfSk7Cit9CisKK1N0cmluZyBTVkdOdW1iZXJMaXN0Ojp2YWx1ZUFzU3Ry
aW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIG51bWJlciA6IG1faXRlbXMpIHsKKyAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3Ro
KCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKG51bWJlci0+dmFsdWUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKK30KKworfQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHJl
dmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDM5ICs1MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU1ZHTnVtYmVyTGlzdChvdGhlciwgYWNjZXNzKSk7CiAgICAgfQogCi0gICAg
Ym9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgY2xlYXJJdGVt
cygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2
YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBwdHIg
PSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIg
KyB2YWx1ZS5sZW5ndGgoKTsKLQotICAgICAgICAvLyBUaGUgc3BlYyAoc2VjdGlvbiA0LjEpIHN0
cmFuZ2VseSBkb2Vzbid0IGFsbG93IGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgLy8gV2Ug
bWlnaHQgY2hvb3NlIHRvIHZpb2xhdGUgdGhhdCBpbnRlbnRpb25hbGx5LgotICAgICAgICB3aGls
ZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgICAgICBhdXRvIG51bWJlciA9IHBhcnNlTnVtYmVyKHB0
ciwgZW5kKTsKLSAgICAgICAgICAgIGlmICghbnVtYmVyKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgYXBwZW5kKFNWR051bWJlcjo6Y3JlYXRlKCpudW1iZXIpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBwdHIgPT0gZW5kOwotICAgIH0KLQotICAgIFN0cmluZyB2
YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG51bWJlciA6IG1faXRlbXMp
IHsKLSAgICAgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG51bWJlci0+
dmFsdWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygp
OwotICAgIH0KKyAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyB2YWx1
ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2aXNp
b24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MSw3ICs0Miw3IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBGbG9hdFR5cGU+IHN0YXRpYyBpbmwKIC8vIGF0IGEgaGlnaGVyIHByZWNp
c2lvbiBpbnRlcm5hbGx5LCB3aXRob3V0IGFueSB1bm5lY2Vzc2FyeSBydW50aW1lIGNvc3Qgb3Ig
Y29kZQogLy8gY29tcGxleGl0eS4KIC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBzaGFyZWQvcmVwbGFj
ZWQgd2l0aCBudW1iZXIgcGFyc2luZyBpbiBXVEY/Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZSwgdHlwZW5hbWUgRmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBPcHRpb25hbDxGbG9h
dFR5cGU+IGdlbmVyaWNQYXJzZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25z
dCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXAgPSBTdWZmaXhT
a2lwcGluZ1BvbGljeTo6U2tpcCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0
eXBlbmFtZSBGbG9hdFR5cGUgPSBmbG9hdD4gc3RhdGljIE9wdGlvbmFsPEZsb2F0VHlwZT4gZ2Vu
ZXJpY1BhcnNlTnVtYmVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNp
bmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXAgPSBTdWZmaXhTa2lwcGluZ1BvbGlj
eTo6U2tpcCkKIHsKICAgICBGbG9hdFR5cGUgbnVtYmVyID0gMDsKICAgICBGbG9hdFR5cGUgaW50
ZWdlciA9IDA7CkBAIC01MCwyNiArNTEsMjYgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGUsIHR5cGVuYQogICAgIEZsb2F0VHlwZSBleHBvbmVudCA9IDA7CiAgICAgaW50IHNpZ24g
PSAxOwogICAgIGludCBleHBzaWduID0gMTsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBzdGFy
dCA9IHB0cjsKKyAgICBhdXRvIHN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwogCiAg
ICAgLy8gcmVhZCB0aGUgc2lnbgotICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnKycpCi0g
ICAgICAgIHB0cisrOwotICAgIGVsc2UgaWYgKHB0ciA8IGVuZCAmJiAqcHRyID09ICctJykgewot
ICAgICAgICBwdHIrKzsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWlu
aW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJysnKQorICAgICAgICArK3BhcnNpbmdCdWZmZXI7
CisgICAgZWxzZSBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYg
KnBhcnNpbmdCdWZmZXIgPT0gJy0nKSB7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKICAgICAg
ICAgc2lnbiA9IC0xOwogICAgIH0gCiAgICAgCi0gICAgaWYgKHB0ciA9PSBlbmQgfHwgKCFpc0FT
Q0lJRGlnaXQoKnB0cikgJiYgKnB0ciAhPSAnLicpKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0
RW5kKCkgfHwgKCFpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpICYmICpwYXJzaW5nQnVmZmVy
ICE9ICcuJykpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyByZWFkIHRo
ZSBpbnRlZ2VyIHBhcnQsIGJ1aWxkIHJpZ2h0LXRvLWxlZnQKLSAgICBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBwdHJTdGFydEludFBhcnQgPSBwdHI7Ci0gICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBpc0FT
Q0lJRGlnaXQoKnB0cikpCi0gICAgICAgICsrcHRyOyAvLyBBZHZhbmNlIHRvIGZpcnN0IG5vbi1k
aWdpdC4KKyAgICBhdXRvIHB0clN0YXJ0SW50UGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24o
KTsKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYg
aXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOyAv
LyBBZHZhbmNlIHRvIGZpcnN0IG5vbi1kaWdpdC4KIAotICAgIGlmIChwdHIgIT0gcHRyU3RhcnRJ
bnRQYXJ0KSB7Ci0gICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHB0clNjYW5JbnRQYXJ0ID0g
cHRyIC0gMTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpICE9IHB0clN0YXJ0SW50
UGFydCkgeworICAgICAgICBhdXRvIHB0clNjYW5JbnRQYXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpIC0gMTsKICAgICAgICAgRmxvYXRUeXBlIG11bHRpcGxpZXIgPSAxOwogICAgICAgICB3
aGlsZSAocHRyU2NhbkludFBhcnQgPj0gcHRyU3RhcnRJbnRQYXJ0KSB7CiAgICAgICAgICAgICBp
bnRlZ2VyICs9IG11bHRpcGxpZXIgKiBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KCoocHRyU2Nhbklu
dFBhcnQtLSkgLSAnMCcpOwpAQCAtODAsMzggKzgxLDM5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlLCB0eXBlbmEKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfQogCi0gICAgaWYgKHB0ciA8IGVuZCAmJiAqcHRyID09ICcuJykgeyAvLyByZWFkIHRoZSBk
ZWNpbWFscwotICAgICAgICBwdHIrKzsKKyAgICAvLyByZWFkIHRoZSBkZWNpbWFscworICAgIGlm
IChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZl
ciA9PSAnLicpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgICAgICAKICAgICAgICAg
Ly8gVGhlcmUgbXVzdCBiZSBhIGxlYXN0IG9uZSBkaWdpdCBmb2xsb3dpbmcgdGhlIC4KLSAgICAg
ICAgaWYgKHB0ciA+PSBlbmQgfHwgIWlzQVNDSUlEaWdpdCgqcHRyKSkKKyAgICAgICAgaWYgKHBh
cnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAhaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAotICAgICAgICB3aGlsZSAo
cHRyIDwgZW5kICYmIGlzQVNDSUlEaWdpdCgqcHRyKSkKLSAgICAgICAgICAgIGRlY2ltYWwgKz0g
KCoocHRyKyspIC0gJzAnKSAqIChmcmFjICo9IHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4xKSk7
CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAm
JiBpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpKQorICAgICAgICAgICAgZGVjaW1hbCArPSAo
KihwYXJzaW5nQnVmZmVyKyspIC0gJzAnKSAqIChmcmFjICo9IHN0YXRpY19jYXN0PEZsb2F0VHlw
ZT4oMC4xKSk7CiAgICAgfQogCiAgICAgLy8gcmVhZCB0aGUgZXhwb25lbnQgcGFydAotICAgIGlm
IChwdHIgIT0gc3RhcnQgJiYgcHRyICsgMSA8IGVuZCAmJiAoKnB0ciA9PSAnZScgfHwgKnB0ciA9
PSAnRScpIAotICAgICAgICAmJiAocHRyWzFdICE9ICd4JyAmJiBwdHJbMV0gIT0gJ20nKSkgeyAK
LSAgICAgICAgcHRyKys7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAhPSBzdGFy
dCAmJiBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgKyAxIDwgcGFyc2luZ0J1ZmZlci5lbmQoKSAm
JiAoKnBhcnNpbmdCdWZmZXIgPT0gJ2UnIHx8ICpwYXJzaW5nQnVmZmVyID09ICdFJykKKyAgICAg
ICAgJiYgKHBhcnNpbmdCdWZmZXJbMV0gIT0gJ3gnICYmIHBhcnNpbmdCdWZmZXJbMV0gIT0gJ20n
KSkgeworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAKICAgICAgICAgLy8gcmVhZCB0aGUgc2ln
biBvZiB0aGUgZXhwb25lbnQKLSAgICAgICAgaWYgKCpwdHIgPT0gJysnKQotICAgICAgICAgICAg
cHRyKys7Ci0gICAgICAgIGVsc2UgaWYgKCpwdHIgPT0gJy0nKSB7Ci0gICAgICAgICAgICBwdHIr
KzsKKyAgICAgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICcrJykKKyAgICAgICAgICAgICsrcGFy
c2luZ0J1ZmZlcjsKKyAgICAgICAgZWxzZSBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJy0nKSB7Cisg
ICAgICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgICAgICAgICBleHBzaWduID0gLTE7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFRoZXJlIG11c3QgYmUgYW4gZXhwb25lbnQK
LSAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgIWlzQVNDSUlEaWdpdCgqcHRyKSkKKyAgICAgICAg
aWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAhaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVy
KSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgd2hpbGUgKHB0
ciA8IGVuZCAmJiBpc0FTQ0lJRGlnaXQoKnB0cikpIHsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdC
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgqcGFyc2luZ0J1
ZmZlcikpIHsKICAgICAgICAgICAgIGV4cG9uZW50ICo9IHN0YXRpY19jYXN0PEZsb2F0VHlwZT4o
MTApOwotICAgICAgICAgICAgZXhwb25lbnQgKz0gKnB0ciAtICcwJzsKLSAgICAgICAgICAgIHB0
cisrOworICAgICAgICAgICAgZXhwb25lbnQgKz0gKnBhcnNpbmdCdWZmZXIgLSAnMCc7CisgICAg
ICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgICAgIH0KICAgICAgICAgLy8gTWFrZSBzdXJl
IGV4cG9uZW50IGlzIHZhbGlkLgogICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShleHBvbmVudCkg
fHwgZXhwb25lbnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46Om1heF9leHBvbmVu
dCkKQEAgLTEyOCw0NCArMTMwLDQ0IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
LCB0eXBlbmEKICAgICBpZiAoIWlzVmFsaWRSYW5nZShudW1iZXIpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgaWYgKHN0YXJ0ID09IHB0cikKKyAgICBpZiAoc3RhcnQgPT0g
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
CiAgICAgaWYgKHNraXAgPT0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApCi0gICAgICAgIHNr
aXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICAgICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7CiAKICAgICByZXR1cm4g
bnVtYmVyOwogfQogCi1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgTENoYXIqJiBw
dHIsIGNvbnN0IExDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCitPcHRpb25h
bDxmbG9hdD4gcGFyc2VOdW1iZXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIHBhcnNpbmdC
dWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQ
YXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJl
cihwYXJzaW5nQnVmZmVyLCBza2lwKTsKIH0KIAotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVy
KGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGlj
eSBza2lwKQorT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8
VUNoYXI+JiBwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQogewotICAg
IHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIHNraXApOworICAgIHJldHVybiBn
ZW5lcmljUGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgc2tpcCk7CiB9CiAKIE9wdGlvbmFsPGZs
b2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcsIFN1ZmZpeFNraXBwaW5n
UG9saWN5IHNraXApCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcu
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0
aCgpOwotICAgIGF1dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lw
KTsKLSAgICBpZiAocHRyICE9IGVuZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2lu
ZyhzdHJpbmcsIFtza2lwXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPGZsb2F0PiB7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIs
IHNraXApOworICAgICAgICBpZiAoIXBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSk7CiB9
CiAKIC8vIG9ubHkgdXNlZCB0byBwYXJzZSBsYXJnZUFyY0ZsYWcgYW5kIHN3ZWVwRmxhZyB3aGlj
aCBtdXN0IGJlIGEgIjAiIG9yICIxIgogLy8gYW5kIG1pZ2h0IG5vdCBoYXZlIGFueSB3aGl0ZXNw
YWNlL2NvbW1hIGFmdGVyIGl0Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0
aW9uYWw8Ym9vbD4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRy
LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gT3B0aW9uYWw8Ym9vbD4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVm
ZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChwdHIgPj0gZW5k
KQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlIGZsYWdDaGFyID0gKnB0cisrOworICAg
IGNvbnN0IENoYXJhY3RlclR5cGUgZmxhZ0NoYXIgPSAqcGFyc2luZ0J1ZmZlcjsKKyAgICArK3Bh
cnNpbmdCdWZmZXI7CiAKICAgICBib29sIGZsYWc7CiAgICAgaWYgKGZsYWdDaGFyID09ICcwJykK
QEAgLTE3NSwxOSArMTc3LDE5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBP
cHRpb24KICAgICBlbHNlCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7CiAgICAgCiAgICAgcmV0dXJuIGZs
YWc7CiB9CiAKLU9wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwg
Y29uc3QgTENoYXIqIGVuZCkKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJpbmdQYXJz
aW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1Bh
cnNlQXJjRmxhZyhwdHIsIGVuZCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocGFy
c2luZ0J1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hh
ciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhT
dHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4g
Z2VuZXJpY1BhcnNlQXJjRmxhZyhwdHIsIGVuZCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFy
Y0ZsYWcocGFyc2luZ0J1ZmZlcik7CiB9CiAKIE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxv
YXQ+PiBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykK
QEAgLTE5NSwyNSArMTk3LDIzIEBAIE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBw
YXJzZU4KICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVy
dGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRlZENoYXJh
Y3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHN0cmluZy5sZW5ndGgoKTsKLQot
ICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICBpZiAoIXgpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQ
YXJzaW5nKHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxzdGQ6OnBh
aXI8ZmxvYXQsIGZsb2F0Pj4geworICAgICAgICBhdXRvIHggPSBwYXJzZU51bWJlcihwYXJzaW5n
QnVmZmVyKTsKKyAgICAgICAgaWYgKCF4KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIGlmIChjdXIgPT0gZW5kKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
KngsICp4KTsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwgKngpOwogCi0gICAgYXV0byB5ID0gcGFyc2VOdW1i
ZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Ci0gICAgaWYgKCF5
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHkgPSBwYXJzZU51
bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAg
ICAgICBpZiAoIXkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYg
KGN1ciAhPSBlbmQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICgh
cGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwgKnkpOworICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoKngsICp5KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8RmxvYXRQb2ludD4g
cGFyc2VQb2ludChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCkBAIC0yMjEsMTE3ICsyMjEsMTEz
IEBAIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3QKICAgICBpZiAoc3Ry
aW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwot
ICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3Qg
VUNoYXIqIGVuZCA9IGN1ciArIHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGlmICghc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzKGN1ciwgZW5kKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIHBh
cnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHsKKyAgICAgICAgaWYgKCFza2lw
T3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXIsIGVuZCk7
Ci0gICAgaWYgKCFwb2ludCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
YXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYg
KCFwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAvLyBEaXNh
bGxvdyBhbnl0aGluZyBleGNlcHQgc3BhY2VzIGF0IHRoZSBlbmQuCi0gICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKGN1ciwgZW5kKTsKLSAgICAKLSAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgIC8v
IERpc2FsbG93IGFueXRoaW5nIGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4KKyAgICAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHBvaW50OworICAgIH0pOwogfQogCiBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChj
b25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3Rl
cnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0
ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsg
c3RyaW5nLmxlbmd0aCgpOwotICAgIAotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVu
ZCk7Ci0gICAgCi0gICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAgIGlmICgh
eCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIHkgPSBwYXJzZU51bWJl
cihwdHIsIGVuZCk7Ci0gICAgaWYgKCF5KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
ICAgIGF1dG8gd2lkdGggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7Ci0gICAgaWYgKCF3aWR0aCkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVt
YmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwotICAgIGlmICgh
aGVpZ2h0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBXVEY6OnJl
YWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4g
T3B0aW9uYWw8RmxvYXRSZWN0PiB7CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJz
aW5nQnVmZmVyKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHBhcnNp
bmdCdWZmZXIpOworICAgICAgICBpZiAoIXgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICAg
ICAgaWYgKCF5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0
byB3aWR0aCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAoIXdpZHRo
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBoZWlnaHQg
PSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNr
aXApOworICAgICAgICBpZiAoIWhlaWdodCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0IHsgKngsICp5LCAqd2lkdGgsICpoZWlnaHQgfTsK
KyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCB7ICp4LCAqeSwgKndpZHRoLCAqaGVpZ2h0IH07Cisg
ICAgfSk7CiB9CiAKIE9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4gcGFyc2VHbHlwaE5hbWUoY29u
c3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewogICAgIC8vIEZJWE1FOiBQYXJzaW5nIGVycm9yIGRl
dGVjdGlvbiBpcyBtaXNzaW5nLgogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBz
dHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5n
Lmxlbmd0aCgpOwotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7Ci0KLSAgICBI
YXNoU2V0PFN0cmluZz4gdmFsdWVzOwotCi0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAg
ICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRlIHNwYWNlIGJl
Zm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdG9ycywgd2lsbCBiZSBpZ25vcmVkLgotICAgICAgICBjb25z
dCBVQ2hhciogaW5wdXRTdGFydCA9IHB0cjsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAq
cHRyICE9ICcsJykKLSAgICAgICAgICAgICsrcHRyOworICAgIHJldHVybiBXVEY6OnJlYWRDaGFy
YWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gcGFyc2luZ0J1ZmZlcikgLT4gSGFzaFNl
dDxTdHJpbmc+IHsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIp
OwogCi0gICAgICAgIGlmIChwdHIgPT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBIYXNoU2V0PFN0cmluZz4gdmFsdWVzOwogCi0gICAgICAgIC8vIHdhbGsgYmFja3dh
cmRzIGZyb20gdGhlIDsgdG8gaWdub3JlIGFueSB3aGl0ZXNwYWNlCi0gICAgICAgIGNvbnN0IFVD
aGFyKiBpbnB1dEVuZCA9IHB0ciAtIDE7Ci0gICAgICAgIHdoaWxlIChpbnB1dFN0YXJ0IDwgaW5w
dXRFbmQgJiYgaXNTVkdTcGFjZSgqaW5wdXRFbmQpKQotICAgICAgICAgICAgLS1pbnB1dEVuZDsK
KyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7
CisgICAgICAgICAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdo
aXRlIHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdG9ycywgd2lsbCBiZSBpZ25vcmVkLgor
ICAgICAgICAgICAgYXV0byBpbnB1dFN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwog
Ci0gICAgICAgIHZhbHVlcy5hZGQoU3RyaW5nKGlucHV0U3RhcnQsIGlucHV0RW5kIC0gaW5wdXRT
dGFydCArIDEpKTsKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRy
LCBlbmQsICcsJyk7Ci0gICAgfQorICAgICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZmZXIs
ICcsJyk7CisKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gaW5w
dXRTdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gd2FsayBi
YWNrd2FyZHMgZnJvbSB0aGUgOyB0byBpZ25vcmUgYW55IHdoaXRlc3BhY2UKKyAgICAgICAgICAg
IGF1dG8gaW5wdXRFbmQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSAxOworICAgICAgICAg
ICAgd2hpbGUgKGlucHV0U3RhcnQgPCBpbnB1dEVuZCAmJiBpc1NWR1NwYWNlKCppbnB1dEVuZCkp
CisgICAgICAgICAgICAgICAgLS1pbnB1dEVuZDsKKworICAgICAgICAgICAgdmFsdWVzLmFkZChT
dHJpbmcoaW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1dFN0YXJ0ICsgMSkpOworICAgICAgICAg
ICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlciwgJywnKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWVzOworICAgIH0pOwogCi0gICAgcmV0dXJu
IHZhbHVlczsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFVuaWNvZGVSYW5nZT4gcGFyc2VVbmljb2Rl
UmFuZ2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBh
cnNlVW5pY29kZVJhbmdlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2lu
Z0J1ZmZlcikKIHsKLSAgICBpZiAobGVuZ3RoIDwgMiB8fCBjaGFyYWN0ZXJzWzBdICE9ICdVJyB8
fCBjaGFyYWN0ZXJzWzFdICE9ICcrJykKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBwYXJzaW5nQnVm
ZmVyLmxlbmd0aFJlbWFpbmluZygpOworICAgIGlmIChsZW5ndGggPCAyIHx8IHBhcnNpbmdCdWZm
ZXJbMF0gIT0gJ1UnIHx8IHBhcnNpbmdCdWZmZXJbMV0gIT0gJysnKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotICAgIAorCisgICAgcGFyc2luZ0J1ZmZlci5hZHZhbmNlQnkoMik7CisK
ICAgICAvLyBQYXJzZSB0aGUgc3RhcnRpbmcgaGV4IG51bWJlciAob3IgaXRzIHByZWZpeCkuCiAg
ICAgdW5zaWduZWQgc3RhcnRSYW5nZSA9IDA7CiAgICAgdW5zaWduZWQgc3RhcnRMZW5ndGggPSAw
OwogCi0gICAgY29uc3QgVUNoYXIqIHB0ciA9IGNoYXJhY3RlcnMgKyAyOwotICAgIGNvbnN0IFVD
aGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsK
LSAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKnB0cikpCisgICAgd2hpbGUgKHBhcnNpbmdC
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgIGlmICghaXNBU0NJSUhl
eERpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICArK3N0
YXJ0TGVuZ3RoOwogICAgICAgICBpZiAoc3RhcnRMZW5ndGggPiA2KQogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgc3RhcnRSYW5nZSA9IChzdGFydFJhbmdlIDw8IDQp
IHwgdG9BU0NJSUhleFZhbHVlKCpwdHIpOwotICAgICAgICArK3B0cjsKKyAgICAgICAgc3RhcnRS
YW5nZSA9IChzdGFydFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKCpwYXJzaW5nQnVmZmVy
KTsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgIH0KIAogICAgIC8vIEhhbmRsZSB0aGUg
Y2FzZSBvZiByYW5nZXMgc2VwYXJhdGVkIGJ5ICItIiBzaWduLgotICAgIGlmICgyICsgc3RhcnRM
ZW5ndGggPCBsZW5ndGggJiYgKnB0ciA9PSAnLScpIHsKKyAgICBpZiAoMiArIHN0YXJ0TGVuZ3Ro
IDwgbGVuZ3RoICYmICpwYXJzaW5nQnVmZmVyID09ICctJykgewogICAgICAgICBpZiAoIXN0YXJ0
TGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCiAgICAg
ICAgIC8vIFBhcnNlIHRoZSBlbmRpbmcgaGV4IG51bWJlciAob3IgaXRzIHByZWZpeCkuCiAgICAg
ICAgIHVuc2lnbmVkIGVuZFJhbmdlID0gMDsKICAgICAgICAgdW5zaWduZWQgZW5kTGVuZ3RoID0g
MDsKLSAgICAgICAgKytwdHI7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAg
ICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpwdHIpKQorICAgICAgICArK3BhcnNpbmdCdWZmZXI7
CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkg
eworICAgICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKnBhcnNpbmdCdWZmZXIpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgKytlbmRMZW5ndGg7CiAgICAgICAgICAg
ICBpZiAoZW5kTGVuZ3RoID4gNikKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFs
dWUoKnB0cik7Ci0gICAgICAgICAgICArK3B0cjsKKyAgICAgICAgICAgIGVuZFJhbmdlID0gKGVu
ZFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKCpwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAg
ICAgICsrcGFyc2luZ0J1ZmZlcjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFl
bmRMZW5ndGgpCkBAIC0zNDUsMTUgKzM0MSwxNSBAQCBzdGF0aWMgT3B0aW9uYWw8VW5pY29kZVJh
bmdlPiBwYXJzZVVuaWNvCiAgICAgCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIG9mIGEgbnVtYmVy
IHdpdGggc29tZSBvcHRpb25hbCB0cmFpbGluZyBxdWVzdGlvbiBtYXJrcy4KICAgICB1bnNpZ25l
ZCBlbmRSYW5nZSA9IHN0YXJ0UmFuZ2U7Ci0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAg
ICBpZiAoKnB0ciAhPSAnPycpCisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpKSB7CisgICAgICAgIGlmICgqcGFyc2luZ0J1ZmZlciAhPSAnPycpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgKytzdGFydExlbmd0aDsKICAgICAgICAgaWYgKHN0YXJ0
TGVuZ3RoID4gNikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIHN0
YXJ0UmFuZ2UgPDw9IDQ7CiAgICAgICAgIGVuZFJhbmdlID0gKGVuZFJhbmdlIDw8IDQpIHwgMHhG
OwotICAgICAgICArK3B0cjsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgIH0KICAgICAK
ICAgICBpZiAoIXN0YXJ0TGVuZ3RoKQpAQCAtMzY5LDUzICszNjUsNTEgQEAgT3B0aW9uYWw8c3Rk
OjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZQogewogICAgIC8vIEZJWE1FOiBQYXJzaW5nIGVy
cm9yIGRldGVjdGlvbiBpcyBtaXNzaW5nLgogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3Rl
cnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0
ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsg
c3RyaW5nLmxlbmd0aCgpOwotCi0gICAgVW5pY29kZVJhbmdlcyByYW5nZUxpc3Q7Ci0gICAgSGFz
aFNldDxTdHJpbmc+IHN0cmluZ0xpc3Q7Ci0KLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAg
ICAgIGNvbnN0IFVDaGFyKiBpbnB1dFN0YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwg
ZW5kICYmICpwdHIgIT0gJywnKQotICAgICAgICAgICAgKytwdHI7CisgICAgcmV0dXJuIFdURjo6
cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVmZmVyKSAt
PiBzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNldDxTdHJpbmc+PiB7CisgICAgICAgIFVu
aWNvZGVSYW5nZXMgcmFuZ2VMaXN0OworICAgICAgICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nTGlz
dDsKIAotICAgICAgICBpZiAocHRyID09IGlucHV0U3RhcnQpCi0gICAgICAgICAgICBicmVhazsK
KyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7
CisgICAgICAgICAgICBhdXRvIGlucHV0U3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7
CiAKLSAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHVuaWNvZGUgcmFuZ2UgZmlyc3QKLSAgICAgICAg
aWYgKGF1dG8gcmFuZ2UgPSBwYXJzZVVuaWNvZGVSYW5nZShpbnB1dFN0YXJ0LCBwdHIgLSBpbnB1
dFN0YXJ0KSkKLSAgICAgICAgICAgIHJhbmdlTGlzdC5hcHBlbmQoV1RGTW92ZSgqcmFuZ2UpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nTGlzdC5hZGQoU3RyaW5nKGlucHV0U3Rh
cnQsIHB0ciAtIGlucHV0U3RhcnQpKTsKLSAgICAgICAgKytwdHI7Ci0gICAgfQorICAgICAgICAg
ICAgc2tpcFVudGlsKHBhcnNpbmdCdWZmZXIsICcsJyk7CisKKyAgICAgICAgICAgIGlmIChwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gaW5wdXRTdGFydCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHVuaWNvZGUgcmFuZ2UgZmlyc3QKKyAg
ICAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gcGFyc2VVbmljb2RlUmFuZ2UoU3RyaW5nUGFyc2lu
Z0J1ZmZlciB7IGlucHV0U3RhcnQsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSB9KSkKKyAgICAg
ICAgICAgICAgICByYW5nZUxpc3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgc3RyaW5nTGlzdC5hZGQoU3RyaW5nKGlucHV0U3RhcnQs
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGlucHV0U3RhcnQpKTsKKyAgICAgICAgICAgICsr
cGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgfQogCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJh
bmdlTGlzdCwgc3RyaW5nTGlzdCk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihXVEZN
b3ZlKHJhbmdlTGlzdCksIFdURk1vdmUoc3RyaW5nTGlzdCkpOworICAgIH0pOwogfQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPEZsb2F0UG9pbnQ+
IGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNv
bnN0IENoYXJhY3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChTdHJp
bmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGF1
dG8geCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgYXV0byB4ID0gcGFyc2VOdW1i
ZXIocGFyc2luZ0J1ZmZlcik7CiAgICAgaWYgKCF4KQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICBhdXRv
IHkgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKICAgICBpZiAoIXkpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICByZXR1cm4gRmxvYXRQb2ludCB7ICp4LCAqeSB9Owog
fQogCi1PcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIqJiBj
dXJyZW50LCBjb25zdCBMQ2hhciogZW5kKQorT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9h
dFBvaW50KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAg
IHJldHVybiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJu
IGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPEZs
b2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVD
aGFyKiBlbmQpCitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQ
YXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxv
YXRQb2ludChwYXJzaW5nQnVmZmVyKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhcnNlclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXJzZXJVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw5ICsyMSw5IEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiB0eXBlZGVmIHN0ZDo6cGFpcjxVQ2hhcjMyLCBVQ2hhcjMy
PiBVbmljb2RlUmFuZ2U7CiB0eXBlZGVmIFZlY3RvcjxVbmljb2RlUmFuZ2U+IFVuaWNvZGVSYW5n
ZXM7CkBAIC0zOCwyMCArMzgsMjAgQEAgZW51bSBjbGFzcyBTdWZmaXhTa2lwcGluZ1BvbGljeSB7
CiAgICAgU2tpcAogfTsKIAotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFy
KiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZm
aXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7Ci1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29u
c3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGlj
eSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51
bWJlcihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0g
U3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApOworT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVy
KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZm
aXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7CiBPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29u
c3QgU3RyaW5nVmlldyYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBpbmdQb2xp
Y3k6OlNraXApOwogCiBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gcGFyc2VOdW1i
ZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmdWaWV3Jik7CiAKLU9wdGlvbmFsPGJvb2w+IHBh
cnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpOwotT3B0
aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNo
YXIqIGVuZCk7CitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxMQ2hhcj4mKTsKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVm
ZmVyPFVDaGFyPiYpOwogCiBPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZVBvaW50KGNvbnN0IFN0
cmluZ1ZpZXcmKTsKIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNvbnN0IFN0cmluZ1Zp
ZXcmKTsKIAotT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KGNvbnN0IExDaGFy
KiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7Ci1PcHRpb25hbDxGbG9hdFBvaW50PiBwYXJz
ZUZsb2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kKTsKK09w
dGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJzaW5nQnVmZmVyPExD
aGFyPiYpOworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KFN0cmluZ1BhcnNp
bmdCdWZmZXI8VUNoYXI+Jik7CiAKIE9wdGlvbmFsPHN0ZDo6cGFpcjxVbmljb2RlUmFuZ2VzLCBI
YXNoU2V0PFN0cmluZz4+PiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKGNvbnN0IFN0cmluZ1Zp
ZXcmKTsKIE9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3Ry
aW5nVmlldyYpOwpAQCAtNjQsMTMgKzY0LDIzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGNvbnN0ZXgKICAgICByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0g
J1xuJyB8fCBjID09ICdccic7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGNvbnN0ZXhwciBib29sIGlzU1ZHU3BhY2VPckNvbW1hKENoYXJhY3RlclR5cGUgYykKK3sKKyAg
ICByZXR1cm4gaXNTVkdTcGFjZShjKSB8fCBjID09ICcsJzsKK30KKwogdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNv
bnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKLSAg
ICB3aGlsZSAocHRyIDwgZW5kICYmIGlzU1ZHU3BhY2UoKnB0cikpCi0gICAgICAgIHB0cisrOwor
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1NWR1NwYWNlPihwdHIsIGVuZCk7CiAgICAg
cmV0dXJuIHB0ciA8IGVuZDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Y29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4mIGNoYXJhY3RlcnMpCit7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5
cGUsIGlzU1ZHU3BhY2U+KGNoYXJhY3RlcnMpOworICAgIHJldHVybiBjaGFyYWN0ZXJzLmhhc0No
YXJhY3RlcnNSZW1haW5pbmcoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoY29uc3Qg
Q2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjaGFyIGRlbGlt
aXRlciA9ICcsJykKIHsKICAgICBpZiAocHRyIDwgZW5kICYmICFpc1NWR1NwYWNlKCpwdHIpICYm
ICpwdHIgIT0gZGVsaW1pdGVyKQpAQCAtODQsMjggKzk0LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGNvbnN0ZXgKICAgICByZXR1cm4gcHRyIDwgZW5kOwogfQogCi1jb25z
dGV4cHIgYm9vbCBza2lwU3RyaW5nKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5k
LCBjb25zdCBVQ2hhciogbmFtZSwgaW50IGxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGNvbnN0ZXhwciBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVy
KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGNoYXJhY3RlcnMsIGNoYXIgZGVs
aW1pdGVyID0gJywnKQogewotICAgIGlmIChlbmQgLSBwdHIgPCBsZW5ndGgpCisgICAgaWYgKGNo
YXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICFpc1NWR1NwYWNlKCpjaGFyYWN0
ZXJzKSAmJiAqY2hhcmFjdGVycyAhPSBkZWxpbWl0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobWVtY21wKG5hbWUsIHB0ciwgc2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBwdHIgKz0gbGVuZ3RoOwotICAgIHJldHVybiB0cnVlOwot
fQotCi10ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KLWlubGluZSBib29sIHNraXBT
dHJpbmcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgKCZz
dHIpW2NoYXJhY3RlckNvdW50XSkKLXsKLSAgICBpbnQgbGVuZ3RoID0gY2hhcmFjdGVyQ291bnQg
LSAxOwotICAgIGlmIChlbmQgLSBwdHIgPCBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChwdHJb
aV0gIT0gc3RyW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChza2lwT3B0
aW9uYWxTVkdTcGFjZXMoY2hhcmFjdGVycykpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnMuaGFz
Q2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpjaGFyYWN0ZXJzID09IGRlbGltaXRlcikgeworICAg
ICAgICAgICAgY2hhcmFjdGVycysrOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGNoYXJhY3RlcnMpOworICAgICAgICB9CiAgICAgfQotICAgIHB0ciArPSBsZW5ndGg7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoU291cmNlLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDExICsxOSwxMSBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKIAogY2xhc3MgU1ZH
UGF0aFNvdXJjZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHUGF0aFNvdXJjZSk7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhT
dHJpbmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
U3RyaW5nU291cmNlLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIgog
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMiwzMyArMzEsMzAgQEAgU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZQogewogICAgIEFTU0VSVCghc3RyaW5nLmlzRW1w
dHkoKSk7CiAKLSAgICBpZiAobV9pczhCaXRTb3VyY2UpIHsKLSAgICAgICAgbV9jdXJyZW50Lm1f
Y2hhcmFjdGVyOCA9IHN0cmluZy5jaGFyYWN0ZXJzOCgpOwotICAgICAgICBtX2VuZC5tX2NoYXJh
Y3RlcjggPSBtX2N1cnJlbnQubV9jaGFyYWN0ZXI4ICsgc3RyaW5nLmxlbmd0aCgpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG1fY3VycmVudC5tX2NoYXJhY3RlcjE2ID0gc3RyaW5nLmNoYXJhY3Rl
cnMxNigpOwotICAgICAgICBtX2VuZC5tX2NoYXJhY3RlcjE2ID0gbV9jdXJyZW50Lm1fY2hhcmFj
dGVyMTYgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgfQorICAgIGlmIChtX2lzOEJpdFNvdXJjZSkK
KyAgICAgICAgbV9wYXJzaW5nQnVmZmVyOCA9IHsgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmlu
Zy5sZW5ndGgoKSB9OworICAgIGVsc2UKKyAgICAgICAgbV9wYXJzaW5nQnVmZmVyMTYgPSB7IHN0
cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpIH07CiB9CiAKIGJvb2wgU1ZHUGF0
aFN0cmluZ1NvdXJjZTo6aGFzTW9yZURhdGEoKSBjb25zdAogewogICAgIGlmIChtX2lzOEJpdFNv
dXJjZSkKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudC5tX2NoYXJhY3RlcjggPCBtX2VuZC5tX2No
YXJhY3Rlcjg7Ci0gICAgcmV0dXJuIG1fY3VycmVudC5tX2NoYXJhY3RlcjE2IDwgbV9lbmQubV9j
aGFyYWN0ZXIxNjsKKyAgICAgICAgcmV0dXJuIG1fcGFyc2luZ0J1ZmZlcjguaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpOworICAgIHJldHVybiBtX3BhcnNpbmdCdWZmZXIxNi5oYXNDaGFyYWN0ZXJz
UmVtYWluaW5nKCk7CiB9CiAKIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bW92ZVRvTmV4dFRv
a2VuKCkKIHsKICAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBza2lwT3B0
aW9uYWxTVkdTcGFjZXMobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4
KTsKLSAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICAgICAgcmV0dXJuIHNraXBPcHRpb25hbFNW
R1NwYWNlcyhtX3BhcnNpbmdCdWZmZXI4KTsKKyAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKG1fcGFyc2luZ0J1ZmZlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gbmV4dENvbW1hbmRIZWxwZXIo
Y29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29t
bWFuZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8
U1ZHUGF0aFNlZ1R5cGU+IG5leHRDb21tYW5kSGVscGVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIsIFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFu
ZCkKIHsKICAgICAvLyBDaGVjayBmb3IgcmVtYWluaW5nIGNvb3JkaW5hdGVzIGluIHRoZSBjdXJy
ZW50IGNvbW1hbmQuCi0gICAgaWYgKCgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0n
IHx8ICpjdXJyZW50ID09ICcuJyB8fCBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQpKQorICAgIGlmICgo
KnBhcnNpbmdCdWZmZXIgPT0gJysnIHx8ICpwYXJzaW5nQnVmZmVyID09ICctJyB8fCAqcGFyc2lu
Z0J1ZmZlciA9PSAnLicgfHwgaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAg
JiYgcHJldmlvdXNDb21tYW5kICE9IFBhdGhTZWdDbG9zZVBhdGgpIHsKICAgICAgICAgaWYgKHBy
ZXZpb3VzQ29tbWFuZCA9PSBQYXRoU2VnTW92ZVRvQWJzKQogICAgICAgICAgICAgcmV0dXJuIFBh
dGhTZWdMaW5lVG9BYnM7CkBAIC03MywxNTAgKzY5LDEzOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljCiBTVkdQYXRoU2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNl
OjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpCiB7CiAgICAgaWYg
KG1faXM4Qml0U291cmNlKSB7Ci0gICAgICAgIGlmIChhdXRvIG5leHRDb21tYW5kID0gbmV4dENv
bW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgcHJldmlvdXNDb21tYW5kKSkKKyAg
ICAgICAgaWYgKGF1dG8gbmV4dENvbW1hbmQgPSBuZXh0Q29tbWFuZEhlbHBlcihtX3BhcnNpbmdC
dWZmZXI4LCBwcmV2aW91c0NvbW1hbmQpKQogICAgICAgICAgICAgcmV0dXJuICpuZXh0Q29tbWFu
ZDsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21t
YW5kSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBwcmV2aW91c0NvbW1hbmQpKQorICAg
ICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fcGFyc2luZ0J1
ZmZlcjE2LCBwcmV2aW91c0NvbW1hbmQpKQogICAgICAgICAgICAgcmV0dXJuICpuZXh0Q29tbWFu
ZDsKICAgICB9CiAKICAgICByZXR1cm4gKnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKIH0KIAotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBTVkdQYXRoU2VnVHlwZSBwYXJz
ZVNWR1NlZ21lbnRUeXBlSGVscGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50KQordGVt
cGxhdGU8dHlwZW5hbWUgRj4gZGVjbHR5cGUoYXV0bykgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFy
c2UoRiYmIGZ1bmN0b3IpCiB7Ci0gICAgc3dpdGNoICgqKGN1cnJlbnQrKykpIHsKLSAgICBjYXNl
ICdaJzoKLSAgICBjYXNlICd6JzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDbG9zZVBhdGg7Ci0g
ICAgY2FzZSAnTSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOwotICAgIGNhc2Ug
J20nOgotICAgICAgICByZXR1cm4gUGF0aFNlZ01vdmVUb1JlbDsKLSAgICBjYXNlICdMJzoKLSAg
ICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAgY2FzZSAnbCc6Ci0gICAgICAgIHJl
dHVybiBQYXRoU2VnTGluZVRvUmVsOwotICAgIGNhc2UgJ0MnOgotICAgICAgICByZXR1cm4gUGF0
aFNlZ0N1cnZlVG9DdWJpY0FiczsKLSAgICBjYXNlICdjJzoKLSAgICAgICAgcmV0dXJuIFBhdGhT
ZWdDdXJ2ZVRvQ3ViaWNSZWw7Ci0gICAgY2FzZSAnUSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2Vn
Q3VydmVUb1F1YWRyYXRpY0FiczsKLSAgICBjYXNlICdxJzoKLSAgICAgICAgcmV0dXJuIFBhdGhT
ZWdDdXJ2ZVRvUXVhZHJhdGljUmVsOwotICAgIGNhc2UgJ0EnOgotICAgICAgICByZXR1cm4gUGF0
aFNlZ0FyY0FiczsKLSAgICBjYXNlICdhJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNSZWw7
Ci0gICAgY2FzZSAnSCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFi
czsKLSAgICBjYXNlICdoJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFs
UmVsOwotICAgIGNhc2UgJ1YnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2Fs
QWJzOwotICAgIGNhc2UgJ3YnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2Fs
UmVsOwotICAgIGNhc2UgJ1MnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1Nt
b290aEFiczsKLSAgICBjYXNlICdzJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3Vi
aWNTbW9vdGhSZWw7Ci0gICAgY2FzZSAnVCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVU
b1F1YWRyYXRpY1Ntb290aEFiczsKLSAgICBjYXNlICd0JzoKLSAgICAgICAgcmV0dXJuIFBhdGhT
ZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBQYXRoU2VnVW5rbm93bjsKLSAgICB9CisgICAgaWYgKG1faXM4Qml0U291cmNlKQorICAgICAg
ICByZXR1cm4gZnVuY3RvcihtX3BhcnNpbmdCdWZmZXI4KTsKKyAgICByZXR1cm4gZnVuY3Rvciht
X3BhcnNpbmdCdWZmZXIxNik7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBTVkdQYXRo
U3RyaW5nU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKCkKIHsKLSAgICBpZiAobV9pczhCaXRT
b3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVu
dC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjE2KTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2lu
Z0J1ZmZlcikgLT4gU1ZHUGF0aFNlZ1R5cGUgeworICAgICAgICBhdXRvIGNoYXJhY3RlciA9ICpw
YXJzaW5nQnVmZmVyOworICAgICAgICBwYXJzaW5nQnVmZmVyKys7CisgICAgICAgIHN3aXRjaCAo
Y2hhcmFjdGVyKSB7CisgICAgICAgIGNhc2UgJ1onOgorICAgICAgICBjYXNlICd6JzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnQ2xvc2VQYXRoOworICAgICAgICBjYXNlICdNJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOworICAgICAgICBjYXNlICdtJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvUmVsOworICAgICAgICBjYXNlICdMJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvQWJzOworICAgICAgICBjYXNlICdsJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvUmVsOworICAgICAgICBjYXNlICdDJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOworICAgICAgICBjYXNlICdjJzoK
KyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljUmVsOworICAgICAgICBjYXNl
ICdRJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKKyAg
ICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0
aWNSZWw7CisgICAgICAgIGNhc2UgJ0EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNB
YnM7CisgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNSZWw7
CisgICAgICAgIGNhc2UgJ0gnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jp
em9udGFsQWJzOworICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2Vn
TGluZVRvSG9yaXpvbnRhbFJlbDsKKyAgICAgICAgY2FzZSAnVic6CisgICAgICAgICAgICByZXR1
cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOworICAgICAgICBjYXNlICd2JzoKKyAgICAgICAg
ICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw7CisgICAgICAgIGNhc2UgJ1MnOgor
ICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnM7CisgICAgICAg
IGNhc2UgJ3MnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhS
ZWw7CisgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoQWJzOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIHJldHVy
biBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBQYXRoU2VnVW5rbm93bjsKKyAgICAgICAgfQorICAgIH0pOwogfQog
CiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291
cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3Qg
YXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TW92ZVRvU2VnbWVu
dD4gewotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQs
IGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlv
bmFsPE1vdmVUb1NlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxv
YXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICBNb3ZlVG9TZWdt
ZW50IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJn
ZXRQb2ludCk7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9p
czhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8
U1ZHUGF0aFNvdXJjZTo6TGluZVRvU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VM
aW5lVG9TZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJy
ZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHsKLSAgICAg
ICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAg
IHJldHVybiBwYXJzZShbXShhdXRvJiBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxMaW5lVG9T
ZWdtZW50PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQocGFy
c2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvU2VnbWVudCBzZWdtZW50
OwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gV1RGTW92ZSgqdGFyZ2V0UG9pbnQpOwog
ICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNl
KQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1f
Y2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwg
bV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3Vy
Y2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxp
bmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1
dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb0hvcml6b250
YWxTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7
CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPExp
bmVUb0hvcml6b250YWxTZWdtZW50PiB7CisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHBh
cnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXgpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQgc2VnbWVu
dDsKICAgICAgICAgc2VnbWVudC54ID0gKng7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAg
IH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9
KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdtZW50PiBT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7Ci0gICAg
YXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAt
PiBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB5ID0gcGFy
c2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2lu
Z0J1ZmZlcikgLT4gT3B0aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50PiB7CisgICAgICAgIGF1
dG8geSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXkpCiAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvVmVy
dGljYWxTZWdtZW50IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21lbnQueSA9ICp5OwogICAgICAgICBy
ZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAg
ICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVy
OCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9j
aGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZl
VG9DdWJpY1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2Vn
bWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29u
c3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiB7Ci0gICAgICAg
IGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJu
IHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Nl
Z21lbnQ+IHsKKyAgICAgICAgYXV0byBwb2ludDEgPSBwYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1
ZmZlcik7CiAgICAgICAgIGlmICghcG9pbnQxKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBl
bmQpOworICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVy
KTsKICAgICAgICAgaWYgKCFwb2ludDIpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwg
ZW5kKTsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5n
QnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKQEAgLTIyNSwyMSArMjA5LDE3IEBAIE9wdGlvbmFsPFNWR1BhdGhTb3Vy
Y2U6OkN1cnZlVG9DdWJpY1NlZ20KICAgICAgICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOwog
ICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1
cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICBy
ZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7
Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFy
YWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9D
dWJpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1Ymlj
U21vb3RoU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3Vy
cmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdt
ZW50PiB7Ci0gICAgICAgIGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVu
ZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFs
PEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byBwb2ludDIgPSBwYXJz
ZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghcG9pbnQyKQogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0g
cGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQg
PSBwYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9p
bnQpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCkBAIC0yNDcsMjEgKzIyNywx
NyBAQCBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vCiAgICAgICAgIHNl
Z21lbnQucG9pbnQyID0gKnBvaW50MjsKICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0
YXJnZXRQb2ludDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmICht
X2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0
ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25h
bDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIg
PSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxD
dXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gewotICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxv
YXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShbXShhdXRvJiBwYXJzaW5n
QnVmZmVyKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4geworICAgICAgICBh
dXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYg
KCFwb2ludDEpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1
dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAg
YXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAg
ICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
QEAgLTI2OSw0OSArMjQ1LDQxIEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFk
cmF0aWMKICAgICAgICAgc2VnbWVudC5wb2ludDEgPSAqcG9pbnQxOwogICAgICAgICBzZWdtZW50
LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAg
ICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhl
bHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAg
fSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBj
b25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
PiB7Ci0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwg
ZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9u
YWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQ
b2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJn
ZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgQ3Vy
dmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsKICAgICAgICAgc2VnbWVudC50YXJn
ZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsK
LQotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJl
bnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwog
fQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdT
b3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0
IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEFyY1RvU2VnbWVu
dD4gewotICAgICAgICBhdXRvIHJ4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICBy
ZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8QXJjVG9TZWdt
ZW50PiB7CisgICAgICAgIGF1dG8gcnggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKICAg
ICAgICAgaWYgKCFyeCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAg
IGF1dG8gcnkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHJ5ID0g
cGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghcnkpCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBhdXRvIGFuZ2xlID0gcGFyc2VOdW1iZXIo
Y3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byBhbmdsZSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdC
dWZmZXIpOwogICAgICAgICBpZiAoIWFuZ2xlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICAgICAgYXV0byBsYXJnZUFyYyA9IHBhcnNlQXJjRmxhZyhjdXJyZW50LCBlbmQp
OworICAgICAgICBhdXRvIGxhcmdlQXJjID0gcGFyc2VBcmNGbGFnKHBhcnNpbmdCdWZmZXIpOwog
ICAgICAgICBpZiAoIWxhcmdlQXJjKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICAgICAgYXV0byBzd2VlcCA9IHBhcnNlQXJjRmxhZyhjdXJyZW50LCBlbmQpOworICAgICAg
ICBhdXRvIHN3ZWVwID0gcGFyc2VBcmNGbGFnKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAo
IXN3ZWVwKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byB0
YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRv
IHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBp
ZiAoIXRhcmdldFBvaW50KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAt
MzIzLDExICsyOTEsNyBAQCBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNW
CiAgICAgICAgIHNlZ21lbnQuc3dlZXAgPSAqc3dlZXA7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0
UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0K
LSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50
Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFN0cmluZ1NvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
U3RyaW5nU291cmNlLmgJKHJldmlzaW9uIDI2MzMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoU3RyaW5nU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiU1ZHUGF0aFNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsMTcgKzQ2LDE1IEBAIHByaXZhdGU6CiAg
ICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1
YWRyYXRpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKICAgICBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+
IHBhcnNlQXJjVG9TZWdtZW50KCkgZmluYWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGPiBk
ZWNsdHlwZShhdXRvKSBwYXJzZShGJiYpOworCiAgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIGJv
b2wgbV9pczhCaXRTb3VyY2U7CiAKICAgICB1bmlvbiB7Ci0gICAgICAgIGNvbnN0IExDaGFyKiBt
X2NoYXJhY3Rlcjg7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3RlcjE2OwotICAgIH0g
bV9jdXJyZW50OwotICAgIHVuaW9uIHsKLSAgICAgICAgY29uc3QgTENoYXIqIG1fY2hhcmFjdGVy
ODsKLSAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyMTY7Ci0gICAgfSBtX2VuZDsKKyAg
ICAgICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4gbV9wYXJzaW5nQnVmZmVyODsKKyAgICAg
ICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4gbV9wYXJzaW5nQnVmZmVyMTY7CisgICAgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQb2ludExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2lu
dExpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2lu
Z0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZHUG9pbnRMaXN0Ojpw
YXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNsZWFySXRlbXMoKTsKKworICAgIHJl
dHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2lu
Z0J1ZmZlcikgeworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7
CisKKyAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICB3aGlsZSAocGFy
c2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGRlbGlt
UGFyc2VkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGF1dG8geFBvcyA9IHBhcnNlTnVtYmVyKHBh
cnNpbmdCdWZmZXIpOworICAgICAgICAgICAgaWYgKCF4UG9zKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIocGFyc2lu
Z0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlm
ICgheVBvcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHNr
aXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKworICAgICAgICAgICAgaWYgKHNr
aXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcsJykpCisgICAgICAgICAgICAgICAgZGVsaW1QYXJz
ZWQgPSB0cnVlOworCisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1
ZmZlcik7CisKKyAgICAgICAgICAgIGFwcGVuZChTVkdQb2ludDo6Y3JlYXRlKHsgKnhQb3MsICp5
UG9zIH0pKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVh
ckl0ZW1zKCkgb24gZmFpbHVyZSBsaWtlIFNWR1RyYW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAg
ICByZXR1cm4gIWRlbGltUGFyc2VkOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHUG9pbnRMaXN0
Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIHBvaW50IDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVp
bGRlci5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQocG9pbnQtPngoKSwgJyAnLCBwb2ludC0+eSgpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BvaW50TGlzdC5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUG9pbnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDU1ICs1MCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHUG9pbnRMaXN0KG90aGVyLCBhY2Nlc3Mp
KTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewot
ICAgICAgICBjbGVhckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3Rl
cnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAg
Y29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3Qg
VUNoYXIqIGVuZCA9IGN1ciArIHZhbHVlLmxlbmd0aCgpOwotCi0gICAgICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNl
OwotICAgICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7Ci0gICAgICAgICAgICBkZWxpbVBhcnNlZCA9
IGZhbHNlOwotCi0gICAgICAgICAgICBhdXRvIHhQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7
Ci0gICAgICAgICAgICBpZiAoIXhQb3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgICAgICBhdXRvIHlQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICAgICAgICAgIGlmICgheVBvcykKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjdXIsIGVuZCk7Ci0KLSAgICAgICAgICAgIGlmIChjdXIgPCBlbmQgJiYgKmN1ciA9PSAnLCcp
IHsKLSAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
Y3VyKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
Y3VyLCBlbmQpOwotCi0gICAgICAgICAgICBhcHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7ICp4UG9z
LCAqeVBvcyB9KSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gIWRlbGltUGFyc2VkOwot
ICAgIH0KLQotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIHBvaW50IDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkp
Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQocG9pbnQtPngoKSwgJyAnLCBwb2ludC0+eSgpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgIGJvb2wgcGFyc2Uo
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBv
dmVycmlkZTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlNW
R1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
TnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTM2LDcgKzM3LDcgQEAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZQog
ewogfQogCi1TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
OjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCiB7
CiAgICAgcGFyc2UodmFsdWUpOwogfQpAQCAtNTksMTkgKzYwLDMwIEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8KICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK2Jv
b2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShjb25zdCBTdHJpbmdWaWV3JiB2
YWx1ZSkKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFs
dWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBwYXJzZUludGVybmFsKGJlZ2luLCBiZWdpbiArIHZh
bHVlLmxlbmd0aCgpLCB0cnVlKTsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBh
cnNpbmcodmFsdWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHBh
cnNlSW50ZXJuYWwocGFyc2luZ0J1ZmZlciwgdHJ1ZSk7CisgICAgfSk7CiB9CiAKLWJvb2wgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShjb25zdCBVQ2hhciomIGN1cnJQYXJhbSwg
Y29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlOjpwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZl
ciwgYm9vbCB2YWxpZGF0ZSkKIHsKLSAgICByZXR1cm4gcGFyc2VJbnRlcm5hbChjdXJyUGFyYW0s
IGVuZCwgdmFsaWRhdGUpOworICAgIHJldHVybiBwYXJzZUludGVybmFsKHBhcnNpbmdCdWZmZXIs
IHZhbGlkYXRlKTsKIH0KIAotYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNl
SW50ZXJuYWwoY29uc3QgVUNoYXIqJiBjdXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wg
dmFsaWRhdGUpCitib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIsIGJvb2wgdmFsaWRhdGUpCit7Cisg
ICAgcmV0dXJuIHBhcnNlSW50ZXJuYWwocGFyc2luZ0J1ZmZlciwgdmFsaWRhdGUpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBk
ZWZlckRlc2NbXSA9ICB7J2QnLCAnZScsICdmJywgJ2UnLCAncid9OwordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgbm9uZURlc2NbXSA9ICB7
J24nLCAnbycsICduJywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNv
bnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG1lZXREZXNjW10gPSAgeydtJywgJ2UnLCAnZScsICd0J307
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlw
ZSBzbGljZURlc2NbXSA9ICB7J3MnLCAnbCcsICdpJywgJ2MnLCAnZSd9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6
OnBhcnNlSW50ZXJuYWwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2lu
Z0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKIHsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlw
ZSBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOwogICAgIFNWR01lZXRP
clNsaWNlVHlwZSBtZWV0T3JTbGljZSA9IFNWR19NRUVUT1JTTElDRV9NRUVUOwpAQCAtNzksMTAw
ICs5MSwxMDAgQEAgYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSQogICAg
IG1fYWxpZ24gPSBhbGlnbjsKICAgICBtX21lZXRPclNsaWNlID0gbWVldE9yU2xpY2U7CiAKLSAg
ICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCkpCisgICAgaWYgKCFz
a2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmICgqY3VyclBhcmFtID09ICdkJykgewotICAgICAgICBpZiAoIXNraXBTdHJp
bmcoY3VyclBhcmFtLCBlbmQsICJkZWZlciIpKSB7CisgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09
ICdkJykgeworICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVy
LCBkZWZlckRlc2M8Q2hhcmFjdGVyVHlwZT4pKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlNr
aXBwZWQgdG8gcGFyc2UgZXhjZXB0IGZvciAqZGVmZXIqIHZhbHVlLiIpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IFdlIGp1c3QgaWdu
b3JlIHRoZSAiZGVmZXIiIGhlcmUuCi0gICAgICAgIGlmIChjdXJyUGFyYW0gPT0gZW5kKQorICAg
ICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpKQor
ICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoKmN1cnJQYXJhbSA9PSAnbicp
IHsKLSAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAibm9uZSIpKSB7Cisg
ICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICduJykgeworICAgICAgICBpZiAoIXNraXBDaGFyYWN0
ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBub25lRGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAg
ICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJzZSBleGNlcHQgZm9yICpub25lKiB2
YWx1ZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBh
bGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkU7Ci0gICAgICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCk7Ci0gICAgfSBlbHNlIGlmICgqY3VyclBhcmFtID09
ICd4JykgewotICAgICAgICBpZiAoKGVuZCAtIGN1cnJQYXJhbSkgPCA4KQorICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgfSBlbHNlIGlmICgqcGFyc2lu
Z0J1ZmZlciA9PSAneCcpIHsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWlu
aW5nKCkgPCA4KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoY3VyclBh
cmFtWzFdICE9ICdNJyB8fCBjdXJyUGFyYW1bNF0gIT0gJ1knIHx8IGN1cnJQYXJhbVs1XSAhPSAn
TScpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzFdICE9ICdNJyB8fCBwYXJzaW5nQnVmZmVy
WzRdICE9ICdZJyB8fCBwYXJzaW5nQnVmZmVyWzVdICE9ICdNJykKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKGN1cnJQYXJhbVsyXSA9PSAnaScpIHsKLSAgICAgICAgICAg
IGlmIChjdXJyUGFyYW1bM10gPT0gJ24nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJh
bVs2XSA9PSAnaScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAn
bicpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzJdID09ICdpJykgeworICAgICAgICAgICAg
aWYgKHBhcnNpbmdCdWZmZXJbM10gPT0gJ24nKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNp
bmdCdWZmZXJbNl0gPT0gJ2knKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzaW5nQnVm
ZmVyWzddID09ICduJykKICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNF
UlZFQVNQRUNUUkFUSU9fWE1JTllNSU47Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1
cnJQYXJhbVs3XSA9PSAnZCcpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNpbmdC
dWZmZXJbN10gPT0gJ2QnKQogICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJF
U0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JRDsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnYScgJiYgcGFyc2luZ0J1
ZmZlcls3XSA9PSAneCcpCiAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1JTllNQVg7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1b
M10gPT0gJ2QnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAnaScpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbM10gPT0gJ2QnKSB7CisgICAgICAgICAgICAgICAg
aWYgKHBhcnNpbmdCdWZmZXJbNl0gPT0gJ2knKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChw
YXJzaW5nQnVmZmVyWzddID09ICduJykKICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0g
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSU47Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGN1cnJQYXJhbVs3XSA9PSAnZCcpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHBhcnNpbmdCdWZmZXJbN10gPT0gJ2QnKQogICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24g
PSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1JRDsKICAgICAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gn
KQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnYScgJiYg
cGFyc2luZ0J1ZmZlcls3XSA9PSAneCcpCiAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZH
X1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNQVg7CiAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzJd
ID09ICdhJyAmJiBjdXJyUGFyYW1bM10gPT0gJ3gnKSB7Ci0gICAgICAgICAgICBpZiAoY3VyclBh
cmFtWzZdID09ICdpJykgewotICAgICAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bN10gPT0gJ24n
KQorICAgICAgICB9IGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbMl0gPT0gJ2EnICYmIHBhcnNpbmdC
dWZmZXJbM10gPT0gJ3gnKSB7CisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAn
aScpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlcls3XSA9PSAnbicpCiAgICAg
ICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU47
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBhcmFtWzddID09ICdkJykKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChwYXJzaW5nQnVmZmVyWzddID09ICdkJykKICAgICAgICAgICAgICAg
ICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRDsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gn
KQorICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJzaW5nQnVmZmVyWzZdID09ICdhJyAmJiBwYXJz
aW5nQnVmZmVyWzddID09ICd4JykKICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1hNQVhZTUFYOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGN1cnJQYXJhbSArPSA4OwotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
Y3VyclBhcmFtLCBlbmQpOworICAgICAgICBwYXJzaW5nQnVmZmVyLmFkdmFuY2VCeSg4KTsKKyAg
ICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwogICAgIH0gZWxzZQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY3VyclBhcmFtIDwgZW5kKSB7Ci0gICAg
ICAgIGlmICgqY3VyclBhcmFtID09ICdtJykgewotICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5n
KGN1cnJQYXJhbSwgZW5kLCAibWVldCIpKSB7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAnbScp
IHsKKyAgICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIs
IG1lZXREZXNjPENoYXJhY3RlclR5cGU+KSkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigi
U2tpcHBlZCB0byBwYXJzZSBleGNlcHQgZm9yICptZWV0KiBvciAqc2xpY2UqIHZhbHVlLiIpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoKmN1cnJQYXJhbSA9PSAncycpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJy
UGFyYW0sIGVuZCwgInNsaWNlIikpIHsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAn
cycpIHsKKyAgICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZm
ZXIsIHNsaWNlRGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgICAgICBMT0dfRVJS
T1IoIlNraXBwZWQgdG8gcGFyc2UgZXhjZXB0IGZvciAqbWVldCogb3IgKnNsaWNlKiB2YWx1ZS4i
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpOworICAgICAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICAgICAgaWYgKGFs
aWduICE9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkUpCiAgICAgICAgICAgICAgICAgbWVl
dE9yU2xpY2UgPSBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0U7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoZW5kICE9IGN1cnJQYXJhbSAmJiB2YWxpZGF0ZSkKKyAgICBpZiAoIXBhcnNpbmdCdWZm
ZXIuYXRFbmQoKSAmJiB2YWxpZGF0ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9h
bGlnbiA9IGFsaWduOwpAQCAtMzI4LDUyICszNDAsNDQgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYQogCiBTdHJpbmcgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKIHsKLSAgICBTdHJpbmcgYWxpZ25UeXBlOworICAgIGF1
dG8gYWxpZ25UeXBlID0gWyZdKCkgeworICAgICAgICBzd2l0Y2ggKG1fYWxpZ24pIHsKKyAgICAg
ICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FOgorICAgICAgICAgICAgcmV0dXJu
ICJub25lIjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JTjoK
KyAgICAgICAgICAgIHJldHVybiAieE1pbllNaW4iOworICAgICAgICBjYXNlIFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1hNSURZTUlOOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1pbiI7Cisg
ICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU46CisgICAgICAgICAg
ICByZXR1cm4gInhNYXhZTWluIjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJ
T19YTUlOWU1JRDoKKyAgICAgICAgICAgIHJldHVybiAieE1pbllNaWQiOworICAgICAgICBjYXNl
IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOgorICAgICAgICAgICAgcmV0dXJuICJ4
TWlkWU1pZCI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSUQ6
CisgICAgICAgICAgICByZXR1cm4gInhNYXhZTWlkIjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VS
VkVBU1BFQ1RSQVRJT19YTUlOWU1BWDoKKyAgICAgICAgICAgIHJldHVybiAieE1pbllNYXgiOwor
ICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUFYOgorICAgICAgICAg
ICAgcmV0dXJuICJ4TWlkWU1heCI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFU
SU9fWE1BWFlNQVg6CisgICAgICAgICAgICByZXR1cm4gInhNYXhZTWF4IjsKKyAgICAgICAgY2Fz
ZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19VTktOT1dOOgorICAgICAgICAgICAgcmV0dXJuICJ1
bmtub3duIjsKKyAgICAgICAgfTsKIAotICAgIHN3aXRjaCAobV9hbGlnbikgewotICAgIGNhc2Ug
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORToKLSAgICAgICAgYWxpZ25UeXBlID0gIm5vbmUi
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5Z
TUlOOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pbllNaW4iOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlOOgotICAgICAgICBhbGlnblR5
cGUgPSAieE1pZFlNaW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1hNQVhZTUlOOgotICAgICAgICBhbGlnblR5cGUgPSAieE1heFlNaW4iOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlEOgot
ICAgICAgICBhbGlnblR5cGUgPSAieE1pbllNaWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOgotICAgICAgICBhbGlnblR5cGUgPSAi
eE1pZFlNaWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJB
VElPX1hNQVhZTUlEOgotICAgICAgICBhbGlnblR5cGUgPSAieE1heFlNaWQiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUFYOgotICAgICAg
ICBhbGlnblR5cGUgPSAieE1pbllNYXgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUFYOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlN
YXgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hN
QVhZTUFYOgotICAgICAgICBhbGlnblR5cGUgPSAieE1heFlNYXgiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1VOS05PV046Ci0gICAgICAgIGFsaWdu
VHlwZSA9ICJ1bmtub3duIjsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gInVua25vd24iOwogICAgIH07CiAKICAgICBzd2l0Y2gg
KG1fbWVldE9yU2xpY2UpIHsKICAgICBkZWZhdWx0OgogICAgIGNhc2UgU1ZHX01FRVRPUlNMSUNF
X1VOS05PV046Ci0gICAgICAgIHJldHVybiBhbGlnblR5cGU7CisgICAgICAgIHJldHVybiBhbGln
blR5cGUoKTsKICAgICBjYXNlIFNWR19NRUVUT1JTTElDRV9NRUVUOgotICAgICAgICByZXR1cm4g
YWxpZ25UeXBlICsgIiBtZWV0IjsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYWxpZ25UeXBl
KCksICIgbWVldCIpOwogICAgIGNhc2UgU1ZHX01FRVRPUlNMSUNFX1NMSUNFOgotICAgICAgICBy
ZXR1cm4gYWxpZ25UeXBlICsgIiBzbGljZSI7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGFs
aWduVHlwZSgpLCAiIHNsaWNlIik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCShyZXZpc2lvbiAyNjMzMzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoKTsKLSAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUoY29uc3QgU3RyaW5nJik7CisgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0
IFN0cmluZ1ZpZXcmKTsKIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEFsaWduKHVuc2lnbmVk
IHNob3J0KTsKICAgICB1bnNpZ25lZCBzaG9ydCBhbGlnbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxp
Z247IH0KQEAgLTY0LDggKzY0LDkgQEAgcHVibGljOgogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShmbG9hdCBsb2dpY2FsWCwgZmxvYXQgbG9naWNhbFksIGZsb2F0IGxvZ2ljYWxXaWR0aCwg
ZmxvYXQgbG9naWNhbEhlaWdodCwgZmxvYXQgcGh5c2ljYWxXaWR0aCwgZmxvYXQgcGh5c2ljYWxI
ZWlnaHQpIGNvbnN0OwogCi0gICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmKTsKLSAgICBib29s
IHBhcnNlKGNvbnN0IFVDaGFyKiYgY3VyclBhcmFtLCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZh
bGlkYXRlKTsKKyAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBib29sIHBh
cnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiwgYm9vbCB2YWxpZGF0ZSk7CisgICAgYm9v
bCBwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYsIGJvb2wgdmFsaWRhdGUpOwogCiAg
ICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIApAQCAtNzMsNyArNzQsOCBAQCBwcml2
YXRlOgogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlIG1fYWxpZ247CiAgICAgU1ZHTWVl
dE9yU2xpY2VUeXBlIG1fbWVldE9yU2xpY2U7CiAKLSAgICBib29sIHBhcnNlSW50ZXJuYWwoY29u
c3QgVUNoYXIqJiBjdXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CisgICAgYm9vbCBwYXJzZUludGVy
bmFsKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mLCBib29sIHZhbGlkYXRlKTsK
IH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZT4gewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTVkdTdHJpbmdMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZHU3RyaW5nTGlzdDo6cGFyc2UoY29u
c3QgU3RyaW5nJiBkYXRhLCBVQ2hhciBkZWxpbWl0ZXIpCit7CisgICAgY2xlYXJJdGVtcygpOwor
CisgICAgYXV0byBpc1NWR1NwYWNlT3JEZWxpbWl0ZXIgPSBbZGVsaW1pdGVyXShhdXRvIGMpIHsK
KyAgICAgICAgcmV0dXJuIGlzU1ZHU3BhY2UoYykgfHwgYyA9PSBkZWxpbWl0ZXI7CisgICAgfTsK
KworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhkYXRhLCBbJl0oYXV0
byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgYXV0byBzdGFydCA9IHBhcnNpbmdCdWZm
ZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdv
dWxkIGJlIGEgbmljZSBpbXByb3ZlbWVudCB0byBhZGQgYSB2YXJpYW50IG9mIHNraXBVbnRpbCB3
aGljaCB3b3JrZWQKKyAgICAgICAgICAgIC8vIHdpdGggbGFtYmRhIHByZWRpY2F0ZXMuCisgICAg
ICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYg
IWlzU1ZHU3BhY2VPckRlbGltaXRlcigqcGFyc2luZ0J1ZmZlcikpCisgICAgICAgICAgICAgICAg
KytwYXJzaW5nQnVmZmVyOworCisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpID09IHN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9pdGVt
cy5hcHBlbmQoU3RyaW5nKHN0YXJ0LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBzdGFydCkp
OworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1
ZmZlciwgZGVsaW1pdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
dGhpcyBjbGVhckl0ZW1zKCkgb24gZmFpbHVyZSBsaWtlIFNWR1RyYW5zZm9ybUxpc3QgZG9lcz8K
KworICAgICAgICByZXR1cm4gcGFyc2luZ0J1ZmZlci5hdEVuZCgpOworICAgIH0pOworfQorCitT
dHJpbmcgU1ZHU3RyaW5nTGlzdDo6dmFsdWVBc1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOworCisgICAgZm9yIChjb25zdCBhdXRvJiBzdHJpbmcgOiBtX2l0ZW1z
KSB7CisgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQorICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoJyAnKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJpbmcpOworICAgIH0KKwor
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1N0cmluZ0xpc3QuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1N0cmluZ0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMzkgKzUxLDggQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoZW1wdHlTdHJpbmcoKSk7CiAgICAgfQogCi0g
ICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIGRhdGEsIFVDaGFyIGRlbGltaXRlcikKLSAgICB7
Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcoZGF0YSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0
IFVDaGFyKiBlbmQgPSBwdHIgKyBkYXRhLmxlbmd0aCgpOwotICAgICAgICB3aGlsZSAocHRyIDwg
ZW5kKSB7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBwdHI7Ci0gICAgICAgICAg
ICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gZGVsaW1pdGVyICYmICFpc1NWR1NwYWNlKCpw
dHIpKQotICAgICAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgICAgaWYgKHB0ciA9PSBzdGFy
dCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1faXRlbXMuYXBwZW5kKFN0
cmluZyhzdGFydCwgcHRyIC0gc3RhcnQpKTsKLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCBkZWxpbWl0ZXIpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIHB0ciA9PSBlbmQ7Ci0gICAgfQotCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmco
KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDogbV9pdGVtcykgewotICAgICAgICAg
ICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
JyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyaW5nKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgIGJvb2wgcGFy
c2UoY29uc3QgU3RyaW5nJiBkYXRhLCBVQ2hhciBkZWxpbWl0ZXIpOworICAgIFN0cmluZyB2YWx1
ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4Y2VwdGlvbk9yPFJlZlB0cjxTVkdUcmFuc2Zvcm0+
PiBTVkdUcmFuc2Zvcm1MaXN0Ojpjb25zb2xpZGF0ZSgpCit7CisgICAgYXV0byByZXN1bHQgPSBj
YW5BbHRlckxpc3QoKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICBBU1NFUlQocmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpKTsKKworICAgIC8vIFNwZWM6IElmIHRoZSBsaXN0IHdhcyBlbXB0eSwg
dGhlbiBhIHZhbHVlIG9mIG51bGwgaXMgcmV0dXJuZWQuCisgICAgaWYgKG1faXRlbXMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChtX2l0ZW1zLnNpemUoKSA9
PSAxKQorICAgICAgICByZXR1cm4gbWFrZVJlZlB0cihhdCgwKS5nZXQoKSk7CisKKyAgICBhdXRv
IG5ld0l0ZW0gPSBTVkdUcmFuc2Zvcm06OmNyZWF0ZShjb25jYXRlbmF0ZSgpKTsKKyAgICBjbGVh
ckl0ZW1zKCk7CisKKyAgICBhdXRvIGl0ZW0gPSBhcHBlbmQoV1RGTW92ZShuZXdJdGVtKSk7Cisg
ICAgY29tbWl0Q2hhbmdlKCk7CisgICAgcmV0dXJuIG1ha2VSZWZQdHIoaXRlbS5nZXQoKSk7Cit9
CisKK0FmZmluZVRyYW5zZm9ybSBTVkdUcmFuc2Zvcm1MaXN0Ojpjb25jYXRlbmF0ZSgpIGNvbnN0
Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHJlc3VsdDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRy
YW5zZm9ybSA6IG1faXRlbXMpCisgICAgICAgIHJlc3VsdCAqPSB0cmFuc2Zvcm0tPm1hdHJpeCgp
LT52YWx1ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgU1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2VHZW5lcmljKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgYm9vbCBk
ZWxpbVBhcnNlZCA9IGZhbHNlOworICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSkgeworICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIAorICAgICAgICBh
dXRvIHBhcnNlZFRyYW5zZm9ybVR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9y
bVR5cGUocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICghcGFyc2VkVHJhbnNmb3JtVHlwZSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9y
bVZhbHVlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSgqcGFyc2VkVHJh
bnNmb3JtVHlwZSwgcGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICghcGFyc2VkVHJhbnNmb3Jt
VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXBwZW5kKFNWR1Ry
YW5zZm9ybTo6Y3JlYXRlKCpwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkpOworCisgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKworICAgICAgICBpZiAoc2tpcEV4YWN0
bHkocGFyc2luZ0J1ZmZlciwgJywnKSkKKyAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsK
KworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgfQor
ICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7Cit9CisKK3ZvaWQgU1ZHVHJhbnNmb3JtTGlzdDo6cGFy
c2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjbGVhckl0ZW1zKCk7CisKKyAgICBib29s
IHBhcnNpbmdTdWNjZWVkZWQgPSBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwg
WyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICByZXR1cm4gcGFyc2VHZW5lcmljKHBh
cnNpbmdCdWZmZXIpOworICAgIH0pOworICAgIAorICAgIGlmICghcGFyc2luZ1N1Y2NlZWRlZCkK
KyAgICAgICAgY2xlYXJJdGVtcygpOworfQorCitib29sIFNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNl
KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVy
biBwYXJzZUdlbmVyaWMocGFyc2luZ0J1ZmZlcik7Cit9CisKK2Jvb2wgU1ZHVHJhbnNmb3JtTGlz
dDo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7Cisg
ICAgcmV0dXJuIHBhcnNlR2VuZXJpYyhwYXJzaW5nQnVmZmVyKTsKK30KKworU3RyaW5nIFNWR1Ry
YW5zZm9ybUxpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAoreworICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zZnJvbSA6IG1faXRlbXMpIHsKKyAg
ICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
ICcpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRyYW5zZnJvbS0+dmFsdWUoKS52YWx1ZUFz
U3RyaW5nKCkpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit9
CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkocmV2aXNpb24gMjYz
MzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsODYgKzU2LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN2Z1RyYW5z
Zm9ybTsKICAgICB9CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8U1ZHVHJhbnNmb3JtPj4gY29u
c29saWRhdGUoKQotICAgIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBjYW5BbHRlckxpc3QoKTsK
LSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgICAgICBBU1NFUlQocmVzdWx0LnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpKTsKLQotICAgICAgICAvLyBTcGVjOiBJZiB0aGUgbGlzdCB3YXMgZW1wdHks
IHRoZW4gYSB2YWx1ZSBvZiBudWxsIGlzIHJldHVybmVkLgotICAgICAgICBpZiAobV9pdGVtcy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpZiAobV9p
dGVtcy5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlUmVmUHRyKGF0KDApLmdl
dCgpKTsKLQotICAgICAgICBhdXRvIG5ld0l0ZW0gPSBTVkdUcmFuc2Zvcm06OmNyZWF0ZShjb25j
YXRlbmF0ZSgpKTsKLSAgICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gaXRlbSA9
IGFwcGVuZChXVEZNb3ZlKG5ld0l0ZW0pKTsKLSAgICAgICAgY29tbWl0Q2hhbmdlKCk7Ci0gICAg
ICAgIHJldHVybiBtYWtlUmVmUHRyKGl0ZW0uZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgcGFy
c2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQot
ICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVw
Y29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSB1cGNv
bnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGlmICghcGFyc2Uoc3RhcnQsIHN0YXJ0ICsgdmFs
dWUubGVuZ3RoKCkpKQotICAgICAgICAgICAgY2xlYXJJdGVtcygpOwotICAgIH0KLQotICAgIEFm
ZmluZVRyYW5zZm9ybSBjb25jYXRlbmF0ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gcmVzdWx0OwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zZm9ybSA6IG1f
aXRlbXMpCi0gICAgICAgICAgICByZXN1bHQgKj0gdHJhbnNmb3JtLT5tYXRyaXgoKS0+dmFsdWUo
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdmFsdWVBc1N0
cmluZygpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNmcm9tIDogbV9pdGVtcykgewotICAg
ICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQodHJhbnNmcm9tLT52YWx1
ZSgpLnZhbHVlQXNTdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIu
dG9TdHJpbmcoKTsKLSAgICB9CisgICAgRXhjZXB0aW9uT3I8UmVmUHRyPFNWR1RyYW5zZm9ybT4+
IGNvbnNvbGlkYXRlKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGNvbmNhdGVuYXRlKCkgY29uc3Q7
CisgICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgdmFsdWVBc1N0cmlu
ZygpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIGJvb2wgcGFyc2UoY29uc3QgVUNo
YXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCkKLSAgICB7Ci0gICAgICAgIGJvb2wgZGVsaW1Q
YXJzZWQgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0gICAgICAgICAg
ICBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIHR5cGUgPSBTVkdU
cmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAg
aWYgKCF0eXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAg
YXV0byBwYXJzZWRUcmFuc2Zvcm1WYWx1ZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtVmFsdWUoKnR5cGUsIHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYgKCFwYXJzZWRUcmFu
c2Zvcm1WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAg
IGFwcGVuZChTVkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKLQot
ICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICAg
ICAgaWYgKHN0YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBk
ZWxpbVBhcnNlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgKytzdGFydDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7Ci0gICAgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VHZW5lcmljKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICBib29sIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZm
ZXI8TENoYXI+Jik7CisgICAgYm9vbCBwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYp
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RyYW5zZm9ybWFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4NSArMjcsODYg
QEAKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJz
aW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoY29uc3Qg
VUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0KiB2YWx1ZXMsIGludCByZXF1aXJl
ZCwgaW50IG9wdGlvbmFsKQorU1ZHVHJhbnNmb3JtYWJsZTo6flNWR1RyYW5zZm9ybWFibGUoKSA9
IGRlZmF1bHQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbnQg
cGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiYgcGFyc2luZ0J1ZmZlciwgZmxvYXQqIHZhbHVlcywgaW50IHJlcXVpcmVkLCBpbnQgb3B0aW9u
YWwpCiB7CiAgICAgaW50IG9wdGlvbmFsUGFyYW1zID0gMCwgcmVxdWlyZWRQYXJhbXMgPSAwOwog
ICAgIAotICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKSB8fCAqcHRyICE9
ICcoJykKKyAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKSB8fCAq
cGFyc2luZ0J1ZmZlciAhPSAnKCcpCiAgICAgICAgIHJldHVybiAtMTsKICAgICAKLSAgICBwdHIr
KzsKKyAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
cHRyLCBlbmQpOworICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKIAog
ICAgIHdoaWxlIChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVkKSB7Ci0gICAgICAgIGlmIChwdHIg
Pj0gZW5kKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAg
cmV0dXJuIC0xOwotICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwg
ZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBhdXRvIHBhcnNl
ZE51bWJlciA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpEb250U2tpcCk7CiAgICAgICAgIGlmICghcGFyc2VkTnVtYmVyKQogICAgICAgICAgICAgcmV0
dXJuIC0xOwogICAgICAgICB2YWx1ZXNbcmVxdWlyZWRQYXJhbXNdID0gKnBhcnNlZE51bWJlcjsK
ICAgICAgICAgcmVxdWlyZWRQYXJhbXMrKzsKICAgICAgICAgaWYgKHJlcXVpcmVkUGFyYW1zIDwg
cmVxdWlyZWQpCi0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihw
dHIsIGVuZCk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihw
YXJzaW5nQnVmZmVyKTsKICAgICB9Ci0gICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRy
LCBlbmQpKQorICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpKQog
ICAgICAgICByZXR1cm4gLTE7CiAgICAgCi0gICAgYm9vbCBkZWxpbVBhcnNlZCA9IHNraXBPcHRp
b25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICBib29sIGRlbGltUGFyc2Vk
ID0gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7CiAKLSAg
ICBpZiAocHRyID49IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAg
ICByZXR1cm4gLTE7CiAgICAgCi0gICAgaWYgKCpwdHIgPT0gJyknKSB7IC8vIHNraXAgb3B0aW9u
YWxzCi0gICAgICAgIHB0cisrOworICAgIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAnKScpIHsKKyAg
ICAgICAgLy8gc2tpcCBvcHRpb25hbHMKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgICAg
ICBpZiAoZGVsaW1QYXJzZWQpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgd2hpbGUgKG9wdGlvbmFsUGFyYW1zIDwgb3B0aW9uYWwpIHsKLSAgICAgICAgICAg
IGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBhdXRvIHBhcnNlZE51bWJl
ciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OworICAgICAgICAgICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVm
ZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwogICAgICAgICAgICAgaWYgKCFw
YXJzZWROdW1iZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgdmFs
dWVzW3JlcXVpcmVkUGFyYW1zICsgb3B0aW9uYWxQYXJhbXNdID0gKnBhcnNlZE51bWJlcjsKICAg
ICAgICAgICAgIG9wdGlvbmFsUGFyYW1zKys7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxQYXJh
bXMgPCBvcHRpb25hbCkKLSAgICAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRl
bGltaXRlcihwdHIsIGVuZCk7CisgICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
T3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKSkKKyAgICAgICAgaWYgKCFza2lw
T3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gLTE7
CiAgICAgICAgIAotICAgICAgICBkZWxpbVBhcnNlZCA9IHNraXBPcHRpb25hbFNWR1NwYWNlc09y
RGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICAgICAgZGVsaW1QYXJzZWQgPSBza2lwT3B0aW9uYWxT
VkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgCi0gICAgICAgIGlm
IChwdHIgPj0gZW5kIHx8ICpwdHIgIT0gJyknIHx8IGRlbGltUGFyc2VkKQorICAgICAgICBpZiAo
cGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICpwYXJzaW5nQnVmZmVyICE9ICcpJyB8fCBkZWxpbVBh
cnNlZCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgcHRyKys7CisgICAgICAgICsr
cGFyc2luZ0J1ZmZlcjsKICAgICB9CiAKICAgICByZXR1cm4gcmVxdWlyZWRQYXJhbXMgKyBvcHRp
b25hbFBhcmFtczsKIH0KIAogLy8gVGhlc2Ugc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIGVu
dW0gU1ZHVHJhbnNmb3JtVHlwZQotc3RhdGljIGNvbnN0IGludCByZXF1aXJlZFZhbHVlc0ZvclR5
cGVbXSA9ICB7MCwgNiwgMSwgMSwgMSwgMSwgMX07Ci1zdGF0aWMgY29uc3QgaW50IG9wdGlvbmFs
VmFsdWVzRm9yVHlwZVtdID0gIHswLCAwLCAxLCAxLCAyLCAwLCAwfTsKK2NvbnN0ZXhwciBpbnQg
cmVxdWlyZWRWYWx1ZXNGb3JUeXBlW10gPSAgezAsIDYsIDEsIDEsIDEsIDEsIDF9OworY29uc3Rl
eHByIGludCBvcHRpb25hbFZhbHVlc0ZvclR5cGVbXSA9ICB7MCwgMCwgMSwgMSwgMiwgMCwgMH07
CiAKLS8vIFRoaXMgZGVzdHJ1Y3RvciBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbGluayBjb3JyZWN0
bHkgd2l0aCBJbnRlbCBJQ0MuCi1TVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgp
ID0gZGVmYXVsdDsKLQotT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFi
bGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5
cGUgdHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+
IHBhcnNlVHJhbnNmb3JtVmFsdWVHZW5lcmljKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zv
cm1UeXBlIHR5cGUsIFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdC
dWZmZXIpCiB7CiAgICAgaWYgKHR5cGUgPT0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZP
Uk1fVU5LTk9XTikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGludCB2YWx1
ZUNvdW50ID0gMDsKICAgICBmbG9hdCB2YWx1ZXNbXSA9IHswLCAwLCAwLCAwLCAwLCAwfTsKLSAg
ICBpZiAoKHZhbHVlQ291bnQgPSBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChwdHIsIGVuZCwgdmFs
dWVzLCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbdHlwZV0sIG9wdGlvbmFsVmFsdWVzRm9yVHlwZVt0
eXBlXSkpIDwgMCkKKyAgICBpZiAoKHZhbHVlQ291bnQgPSBwYXJzZVRyYW5zZm9ybVBhcmFtTGlz
dChwYXJzaW5nQnVmZmVyLCB2YWx1ZXMsIHJlcXVpcmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0
aW9uYWxWYWx1ZXNGb3JUeXBlW3R5cGVdKSkgPCAwKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgU1ZHVHJhbnNmb3JtVmFsdWUgdHJhbnNmb3JtOwpAQCAtMTQ1LDQyICsxNDYs
NjMgQEAgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybQogICAgIHJldHVy
biB0cmFuc2Zvcm07CiB9CiAKLXN0YXRpYyBjb25zdCBVQ2hhciBza2V3WERlc2NbXSA9ICB7J3Mn
LCAnaycsICdlJywgJ3cnLCAnWCd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHNrZXdZRGVzY1tdID0g
IHsncycsICdrJywgJ2UnLCAndycsICdZJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgc2NhbGVEZXNj
W10gPSAgeydzJywgJ2MnLCAnYScsICdsJywgJ2UnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB0cmFu
c2xhdGVEZXNjW10gPSAgeyd0JywgJ3InLCAnYScsICduJywgJ3MnLCAnbCcsICdhJywgJ3QnLCAn
ZSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHJvdGF0ZURlc2NbXSA9ICB7J3InLCAnbycsICd0Jywg
J2EnLCAndCcsICdlJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgbWF0cml4RGVzY1tdID0gIHsnbScs
ICdhJywgJ3QnLCAncicsICdpJywgJ3gnfTsKK09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBT
VkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdUcmFuc2Zvcm1UeXBlIHR5cGUsIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5n
QnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyh0eXBlLCBw
YXJzaW5nQnVmZmVyKTsKK30KKworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5z
Zm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5z
Zm9ybVR5cGUgdHlwZSwgU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIp
Cit7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVmFsdWVHZW5lcmljKHR5cGUsIHBhcnNpbmdC
dWZmZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIg
Q2hhcmFjdGVyVHlwZSBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9Owor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUg
c2tld1lEZXNjW10gPSAgeydzJywgJ2snLCAnZScsICd3JywgJ1knfTsKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHNjYWxlRGVzY1tdID0g
IHsncycsICdjJywgJ2EnLCAnbCcsICdlJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSB0cmFuc2xhdGVEZXNjW10gPSAgeyd0JywgJ3In
LCAnYScsICduJywgJ3MnLCAnbCcsICdhJywgJ3QnLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgcm90YXRlRGVzY1tdID0gIHsn
cicsICdvJywgJ3QnLCAnYScsICd0JywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG1hdHJpeERlc2NbXSA9ICB7J20nLCAnYScs
ICd0JywgJ3InLCAnaScsICd4J307CiAKLU9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdU
cmFuc2Zvcm1UeXBlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVD
aGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJh
bnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlR2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChjdXJyVHJhbnNmb3Jt
ID49IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCpjdXJyVHJhbnNmb3JtID09ICdzJykgewotICAgICAg
ICBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHNrZXdYRGVzYywgV1RGX0FSUkFZ
X0xFTkdUSChza2V3WERlc2MpKSkKKyAgICBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ3MnKSB7Cisg
ICAgICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgc2tld1hEZXNj
PENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6
U1ZHX1RSQU5TRk9STV9TS0VXWDsKLSAgICAgICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJh
bnNmb3JtLCBlbmQsIHNrZXdZRGVzYywgV1RGX0FSUkFZX0xFTkdUSChza2V3WURlc2MpKSkKKyAg
ICAgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBza2V3WURlc2M8
Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdfVFJBTlNGT1JNX1NLRVdZOwotICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFu
c2Zvcm0sIGVuZCwgc2NhbGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNjYWxlRGVzYykpKQorICAg
ICAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHNjYWxlRGVzYzxD
aGFyYWN0ZXJUeXBlPikpCiAgICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNW
R19UUkFOU0ZPUk1fU0NBTEU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgfSBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwg
dHJhbnNsYXRlRGVzYywgV1RGX0FSUkFZX0xFTkdUSCh0cmFuc2xhdGVEZXNjKSkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhh
Y3RseShwYXJzaW5nQnVmZmVyLCB0cmFuc2xhdGVEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAg
ICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURTsKLSAg
ICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgcm90YXRlRGVzYywgV1RG
X0FSUkFZX0xFTkdUSChyb3RhdGVEZXNjKSkpCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3Rs
eShwYXJzaW5nQnVmZmVyLCByb3RhdGVEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0
dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKLSAgICBlbHNlIGlm
IChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgbWF0cml4RGVzYywgV1RGX0FSUkFZX0xF
TkdUSChtYXRyaXhEZXNjKSkpCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5n
QnVmZmVyLCBtYXRyaXhEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1Ry
YW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX01BVFJJWDsKIAogICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiB9CiAKLVNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIFNWR1RyYW5z
Zm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCitP
cHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3Jt
YWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKK3sKKyAg
ICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIHBh
cnNpbmdCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVHlwZShwYXJzaW5n
QnVmZmVyKTsKKyAgICB9KTsKK30KKworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1Ry
YW5zZm9ybVR5cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShTdHJpbmdQ
YXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICByZXR1cm4gcGFyc2VU
cmFuc2Zvcm1UeXBlR2VuZXJpYyhwYXJzaW5nQnVmZmVyKTsKK30KKworT3B0aW9uYWw8U1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJh
bnNmb3JtVHlwZShTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsK
LSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodHlwZVN0cmluZyku
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1
cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgcmV0dXJuIHBhcnNlQW5kU2tpcFR5cGUoY2hhcmFj
dGVycywgY2hhcmFjdGVycyArIHR5cGVTdHJpbmcubGVuZ3RoKCkpLnZhbHVlT3IoU1ZHVHJhbnNm
b3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTik7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNm
b3JtVHlwZUdlbmVyaWMocGFyc2luZ0J1ZmZlcik7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBA
QAogCiAjaW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtVmFs
dWUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIApAQCAtMzIsOSArMzEsMTIgQEAgY2xhc3MgU1ZHVHJhbnNmb3JtYWJsZSA6IHB1
YmxpYyBTVkdMb2NhdAogcHVibGljOgogICAgIHZpcnR1YWwgflNWR1RyYW5zZm9ybWFibGUoKTsK
IAotICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1W
YWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgY29uc3QgVUNoYXIqJiBw
dHIsIGNvbnN0IFVDaGFyKiBlbmQpOwotICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
VHJhbnNmb3JtVHlwZSBwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nJik7Ci0gICAgc3Rh
dGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZUFu
ZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCk7
CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZh
bHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBTdHJpbmdQYXJzaW5nQnVm
ZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFy
c2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKKworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0
cmluZ1ZpZXcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1Ry
YW5zZm9ybVR5cGU+IHBhcnNlVHJhbnNmb3JtVHlwZShTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFy
PiYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3Jt
VHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiAK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9j
YXRhYmxlOjpDVE1TY29wZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYW5pbWF0ZWRMb2NhbFRy
YW5zZm9ybSgpOyB9CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRy
YW5zZm9ybSgpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3Bl
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAko
cmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdUcmFu
c2Zvcm1hYmxlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYwLDk5ICs2MSw5MCBAQCB2b2lkIFNWR1ZpZXdT
cGVjOjpyZXNldCgpCiAgICAgU1ZHWm9vbUFuZFBhbjo6cmVzZXQoKTsKIH0KIAotc3RhdGljIGNv
bnN0IFVDaGFyIHN2Z1ZpZXdTcGVjW10gPSB7J3MnLCAndicsICdnJywgJ1YnLCAnaScsICdlJywg
J3cnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB2aWV3Qm94U3BlY1tdID0geyd2JywgJ2knLCAnZScs
ICd3JywgJ0InLCAnbycsICd4J307Ci1zdGF0aWMgY29uc3QgVUNoYXIgcHJlc2VydmVBc3BlY3RS
YXRpb1NwZWNbXSA9IHsncCcsICdyJywgJ2UnLCAncycsICdlJywgJ3InLCAndicsICdlJywgJ0En
LCAncycsICdwJywgJ2UnLCAnYycsICd0JywgJ1InLCAnYScsICd0JywgJ2knLCAnbyd9Owotc3Rh
dGljIGNvbnN0IFVDaGFyIHRyYW5zZm9ybVNwZWNbXSA9IHsndCcsICdyJywgJ2EnLCAnbicsICdz
JywgJ2YnLCAnbycsICdyJywgJ20nfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB6b29tQW5kUGFuU3Bl
Y1tdID0geyd6JywgJ28nLCAnbycsICdtJywgJ0EnLCAnbicsICdkJywgJ1AnLCAnYScsICduJ307
Ci1zdGF0aWMgY29uc3QgVUNoYXIgdmlld1RhcmdldFNwZWNbXSA9ICB7J3YnLCAnaScsICdlJywg
J3cnLCAnVCcsICdhJywgJ3InLCAnZycsICdlJywgJ3QnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHN2Z1ZpZXdTcGVjW10gPSB7J3Mn
LCAndicsICdnJywgJ1YnLCAnaScsICdlJywgJ3cnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHZpZXdCb3hTcGVjW10gPSB7J3YnLCAn
aScsICdlJywgJ3cnLCAnQicsICdvJywgJ3gnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHByZXNlcnZlQXNwZWN0UmF0aW9TcGVjW10g
PSB7J3AnLCAncicsICdlJywgJ3MnLCAnZScsICdyJywgJ3YnLCAnZScsICdBJywgJ3MnLCAncCcs
ICdlJywgJ2MnLCAndCcsICdSJywgJ2EnLCAndCcsICdpJywgJ28nfTsKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHRyYW5zZm9ybVNwZWNb
XSA9IHsndCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2YnLCAnbycsICdyJywgJ20nfTsKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHpvb21B
bmRQYW5TcGVjW10gPSB7J3onLCAnbycsICdvJywgJ20nLCAnQScsICduJywgJ2QnLCAnUCcsICdh
JywgJ24nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFy
YWN0ZXJUeXBlIHZpZXdUYXJnZXRTcGVjW10gPSAgeyd2JywgJ2knLCAnZScsICd3JywgJ1QnLCAn
YScsICdyJywgJ2cnLCAnZScsICd0J307CiAKLWJvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1Nw
ZWMoY29uc3QgU3RyaW5nJiB2aWV3U3BlYykKK2Jvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1Nw
ZWMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzID0gU3RyaW5nVmlldyh2aWV3U3BlYykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0g
ICAgY29uc3QgVUNoYXIqIGN1cnJWaWV3U3BlYyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAg
ICBjb25zdCBVQ2hhciogZW5kID0gY3VyclZpZXdTcGVjICsgdmlld1NwZWMubGVuZ3RoKCk7Ci0K
LSAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAhbV9jb250ZXh0RWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5k
LCBzdmdWaWV3U3BlYywgV1RGX0FSUkFZX0xFTkdUSChzdmdWaWV3U3BlYykpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdT
cGVjICE9ICcoJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGN1cnJWaWV3U3BlYysrOwot
Ci0gICAgd2hpbGUgKGN1cnJWaWV3U3BlYyA8IGVuZCAmJiAqY3VyclZpZXdTcGVjICE9ICcpJykg
ewotICAgICAgICBpZiAoKmN1cnJWaWV3U3BlYyA9PSAndicpIHsKLSAgICAgICAgICAgIGlmIChz
a2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCB2aWV3Qm94U3BlYywgV1RGX0FSUkFZX0xFTkdU
SCh2aWV3Qm94U3BlYykpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBl
bmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBh
dXRvIHZpZXdCb3ggPSBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjdXJyVmlld1NwZWMs
IGVuZCwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmICghdmlld0JveCkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHNldFZpZXdCb3goV1RGTW92
ZSgqdmlld0JveCkpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8
ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHZpZXdUYXJnZXRTcGVjLCBXVEZfQVJSQVlf
TEVOR1RIKHZpZXdUYXJnZXRTcGVjKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdT
cGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiB2aWV3VGFyZ2V0U3Rh
cnQgPSArK2N1cnJWaWV3U3BlYzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoY3VyclZpZXdTcGVj
IDwgZW5kICYmICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAgICAgICBjdXJy
Vmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCkKKyAg
ICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbJl0oYXV0byBw
YXJzaW5nQnVmZmVyKSAtPiBib29sIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5
cGVuYW1lIGRlY2x0eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBlOworCisgICAgICAg
IGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgIW1fY29udGV4dEVsZW1lbnQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHko
cGFyc2luZ0J1ZmZlciwgc3ZnVmlld1NwZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwg
JygnKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB3aGlsZSAocGFyc2lu
Z0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgIT0gJykn
KSB7CisgICAgICAgICAgICBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ3YnKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCB2aWV3Qm94U3Bl
YzxDaGFyYWN0ZXJUeXBlPikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3Rs
eShwYXJzaW5nQnVmZmVyLCAnKCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBhdXRvIHZpZXdCb3ggPSBTVkdGaXRUb1ZpZXdCb3g6
OnBhcnNlVmlld0JveChwYXJzaW5nQnVmZmVyLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghdmlld0JveCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgc2V0Vmlld0JveChXVEZNb3ZlKCp2aWV3Qm94KSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJyknKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCB2aWV3VGFyZ2V0U3BlYzxD
aGFyYWN0ZXJUeXBlPikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShw
YXJzaW5nQnVmZmVyLCAnKCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBhdXRvIHZpZXdUYXJnZXRTdGFydCA9IHBhcnNpbmdCdWZm
ZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZm
ZXIsICcpJyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIG1fdmlld1RhcmdldFN0cmluZyA9IFN0cmluZyh2aWV3VGFyZ2V0U3RhcnQsIHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKSAtIHZpZXdUYXJnZXRTdGFydCk7CisgICAgICAgICAgICAgICAgICAg
ICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZl
ciA9PSAneicpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShw
YXJzaW5nQnVmZmVyLCB6b29tQW5kUGFuU3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5
KHBhcnNpbmdCdWZmZXIsICcoJykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICBhdXRvIHpvb21BbmRQYW4gPSBTVkdab29tQW5kUGFuOjpwYXJzZVpv
b21BbmRQYW4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICAgICAgaWYgKCF6b29tQW5kUGFu
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgc2V0
Wm9vbUFuZFBhbigqem9vbUFuZFBhbik7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3Rs
eShwYXJzaW5nQnVmZmVyLCAnKScpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdwJykgeworICAgICAg
ICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHByZXNl
cnZlQXNwZWN0UmF0aW9TcGVjPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1
ZmZlciwgJygnKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOwor
ICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBc3BlY3RSYXRpby5wYXJzZShwYXJzaW5nQnVm
ZmVyLCBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAg
ICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJyknKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICgqcGFy
c2luZ0J1ZmZlciA9PSAndCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJz
RXhhY3RseShwYXJzaW5nQnVmZmVyLCB0cmFuc2Zvcm1TcGVjPENoYXJhY3RlclR5cGU+KSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghc2tp
cEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJygnKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIG1fdHJhbnNmb3JtLT5wYXJzZShwYXJzaW5nQnVmZmVy
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcpJykp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBtX3Zp
ZXdUYXJnZXRTdHJpbmcgPSBTdHJpbmcodmlld1RhcmdldFN0YXJ0LCBjdXJyVmlld1NwZWMgLSB2
aWV3VGFyZ2V0U3RhcnQpOwotICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwogICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVs
c2UgaWYgKCpjdXJyVmlld1NwZWMgPT0gJ3onKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJp
bmcoY3VyclZpZXdTcGVjLCBlbmQsIHpvb21BbmRQYW5TcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHpv
b21BbmRQYW5TcGVjKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0g
ICAgICAgICAgICBpZiAoIVNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbihjdXJyVmlld1Nw
ZWMsIGVuZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYg
KGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAg
IH0gZWxzZSBpZiAoKmN1cnJWaWV3U3BlYyA9PSAncCcpIHsKLSAgICAgICAgICAgIGlmICghc2tp
cFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWMsIFdURl9B
UlJBWV9MRU5HVEgocHJlc2VydmVBc3BlY3RSYXRpb1NwZWMpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3Vy
clZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFzcGVj
dFJhdGlvLnBhcnNlKGN1cnJWaWV3U3BlYywgZW5kLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgc2V0UHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2
ZUFzcGVjdFJhdGlvKTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpj
dXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICB9IGVsc2UgaWYgKCpjdXJyVmlld1NwZWMg
PT0gJ3QnKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQs
IHRyYW5zZm9ybVNwZWMsIFdURl9BUlJBWV9MRU5HVEgodHJhbnNmb3JtU3BlYykpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0g
ZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgbV90cmFuc2Zvcm0t
PnBhcnNlKGN1cnJWaWV3U3BlYywgZW5kKTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMg
Pj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoY3VyclZpZXdTcGVjIDwgZW5kICYm
ICpjdXJyVmlld1NwZWMgPT0gJzsnKQotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAg
fQotICAgIAotICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0g
JyknKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBza2lwRXhhY3RseShwYXJz
aW5nQnVmZmVyLCAnOycpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIu
YXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAnKScpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5oCShyZXZpc2lvbiAyNjMzMzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NyArMzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1ZpZXdT
cGVjKGNvbnRleHRFbGVtZW50KSk7CiAgICAgfQogCi0gICAgYm9vbCBwYXJzZVZpZXdTcGVjKGNv
bnN0IFN0cmluZyYpOworICAgIGJvb2wgcGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmdWaWV3Jik7
CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgcmVzZXRDb250ZXh0RWxlbWVudCgpIHsgbV9j
b250ZXh0RWxlbWVudCA9IG51bGxwdHI7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1pvb21BbmRQYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29t
QW5kUGFuLmNwcAkocmV2aXNpb24gMjYzMzM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pv
b21BbmRQYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwyNSArMjIsMzAgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdab29tQW5kUGFuLmgiCiAKLSNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1ib29sIFNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbihjb25zdCBVQ2hhciomIHN0YXJ0
LCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29u
c3RleHByIENoYXJhY3RlclR5cGUgZGlzYWJsZVtdID0geyAnZCcsICdpJywgJ3MnLCAnYScsICdi
JywgJ2wnLCAnZScgfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhw
ciBDaGFyYWN0ZXJUeXBlIG1hZ25pZnlbXSA9IHsgJ20nLCAnYScsICdnJywgJ24nLCAnaScsICdm
JywgJ3knIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRp
b25hbDxTVkdab29tQW5kUGFuVHlwZT4gcGFyc2Vab29tQW5kUGFuR2VuZXJpYyhTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBkaXNhYmxlW10gPSB7ICdkJywgJ2knLCAncycsICdhJywgJ2InLCAnbCcsICdl
JyB9OwotICAgIGlmIChza2lwU3RyaW5nKHN0YXJ0LCBlbmQsIGRpc2FibGUsIFdURl9BUlJBWV9M
RU5HVEgoZGlzYWJsZSkpKSB7Ci0gICAgICAgIG1fem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW5E
aXNhYmxlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3Qg
VUNoYXIgbWFnbmlmeVtdID0geyAnbScsICdhJywgJ2cnLCAnbicsICdpJywgJ2YnLCAneScgfTsK
LSAgICBpZiAoc2tpcFN0cmluZyhzdGFydCwgZW5kLCBtYWduaWZ5LCBXVEZfQVJSQVlfTEVOR1RI
KG1hZ25pZnkpKSkgewotICAgICAgICBtX3pvb21BbmRQYW4gPSBTVkdab29tQW5kUGFuTWFnbmlm
eTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4
YWN0bHkocGFyc2luZ0J1ZmZlciwgZGlzYWJsZTxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgIHJl
dHVybiBTVkdab29tQW5kUGFuRGlzYWJsZTsKKworICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0
bHkocGFyc2luZ0J1ZmZlciwgbWFnbmlmeTxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgIHJldHVy
biBTVkdab29tQW5kUGFuTWFnbmlmeTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CiAK
LSAgICByZXR1cm4gZmFsc2U7CitPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gU1ZHWm9vbUFu
ZFBhbjo6cGFyc2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5n
QnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZVpvb21BbmRQYW5HZW5lcmljKHBhcnNpbmdCdWZm
ZXIpOworfQorCitPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gU1ZHWm9vbUFuZFBhbjo6cGFy
c2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQor
eworICAgIHJldHVybiBwYXJzZVpvb21BbmRQYW5HZW5lcmljKHBhcnNpbmdCdWZmZXIpOwogfQog
CiB2b2lkIFNWR1pvb21BbmRQYW46OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHWm9vbUFuZFBhbi5oCShyZXZpc2lvbiAyNjMzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHWm9vbUFuZFBhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw4IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBTVkdab29tQW5kUGFuKCkgPSBkZWZhdWx0OwogCi0gICAgYm9v
bCBwYXJzZVpvb21BbmRQYW4oY29uc3QgVUNoYXIqJiwgY29uc3QgVUNoYXIqKTsKKyAgICBzdGF0
aWMgT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IHBhcnNlWm9vbUFuZFBhbihTdHJpbmdQYXJz
aW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdab29tQW5kUGFuVHlw
ZT4gcGFyc2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiAKIHByaXZh
dGU6CiAgICAgU1ZHWm9vbUFuZFBhblR5cGUgbV96b29tQW5kUGFuIHsgU1ZHUHJvcGVydHlUcmFp
dHM8U1ZHWm9vbUFuZFBhblR5cGU+Ojppbml0aWFsVmFsdWUoKSB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>