<?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>73190</bug_id>
          
          <creation_ts>2011-11-27 23:29:21 -0800</creation_ts>
          <short_desc>&lt;style scoped&gt;: Implement scoped stylesheets and basic application</short_desc>
          <delta_ts>2012-01-30 21:04:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76043</dependson>
          <blocked>49142</blocked>
    
    <blocked>67720</blocked>
    
    <blocked>73192</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Roland Steiner">rolandsteiner</reporter>
          <assigned_to name="Roland Steiner">rolandsteiner</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>gustavo</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>morrita</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>509597</commentid>
    <comment_count>0</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-27 23:29:21 -0800</bug_when>
    <thetext>Implement internal data structures for scoped stylesheets, and filtered matching using them.

Note: This basically implements the previous HTML5 version of &lt;style scoped&gt;, but is not complete in regard to the new (upcoming) spec that requires the selector matching to be scoped as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509604</commentid>
    <comment_count>1</comment_count>
      <attachid>116704</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-27 23:39:52 -0800</bug_when>
    <thetext>Created attachment 116704
patch (requires 67718, 67790)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509607</commentid>
    <comment_count>2</comment_count>
      <attachid>116704</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-27 23:44:20 -0800</bug_when>
    <thetext>Comment on attachment 116704
patch (requires 67718, 67790)

Attachment 116704 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10671138</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509611</commentid>
    <comment_count>3</comment_count>
      <attachid>116704</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-27 23:46:10 -0800</bug_when>
    <thetext>Comment on attachment 116704
patch (requires 67718, 67790)

Attachment 116704 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10677092</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509656</commentid>
    <comment_count>4</comment_count>
      <attachid>116704</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-28 01:45:38 -0800</bug_when>
    <thetext>Comment on attachment 116704
patch (requires 67718, 67790)

Attachment 116704 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10676181</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509729</commentid>
    <comment_count>5</comment_count>
      <attachid>116704</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-28 04:23:14 -0800</bug_when>
    <thetext>Comment on attachment 116704
patch (requires 67718, 67790)

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

&gt; Source/WebCore/css/CSSStyleSelector.cpp:273
&gt; +class ScopedRuleSets {
&gt; +    WTF_MAKE_NONCOPYABLE(ScopedRuleSets);

This class adds little value over the HashMap (a place to hang collectFeatures function essentially). I think you should go with a typedef instead.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:364
&gt; +// Determine the scope of a style sheet (if any). Returns &apos;false&apos; if it&apos;s a scoped style sheet in an invalid location.
&gt; +static bool determineScope(CSSStyleSheet* sheet, const Element*&amp; scope)

This could be a member of the CSSStyleSheet. You should get rid of the boolean parameter, the function should never be invoked in cases it would be false.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:381
&gt; +    Document* document = styleElement-&gt;document();
&gt; +    if (!document)
&gt; +        return false;

This can never happen.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:487
&gt; +        if (sheet-&gt;isCSSStyleSheet() &amp;&amp; !sheet-&gt;disabled()) {
&gt; +            CSSStyleSheet* cssSheet = static_cast&lt;CSSStyleSheet*&gt;(sheet);
&gt; +            const Element* scope = 0;
&gt; +
&gt; +            if (!determineScope(cssSheet, scope))
&gt; +                continue;
&gt; +            if (scope)
&gt; +                m_scopedAuthorStyles-&gt;ensureExists(scope)-&gt;addRulesFromSheet(cssSheet, *m_medium, this, scope);
&gt; +            else
&gt; +                m_authorStyle-&gt;addRulesFromSheet(cssSheet, *m_medium, this);
&gt; +        }

There doesn&apos;t seem to be any code for handling dynamic addition and removal of scoped stylesheets. I suppose you are currently recalculating the entire style selector (and so the entire document style) if scoped sheets change? 

This may be ok initially but you should be careful that the architecture can handle dynamic changes efficiently. As I understand use cases for scoped stylesheet may often be dynamic and the style recalc should be limited to the scope only.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:712
&gt; +    if (m_checker.parentStackIsConsistent(m_parentNode)) {
&gt; +        // Fast branch: access enclosing scopes directly from parent stack (but start with current element).
&gt; +        if (m_element-&gt;hasScopedHTMLStyleChild()) {
&gt; +            RuleSet* ruleSet = m_scopedAuthorStyles-&gt;get(m_element);
&gt; +            if (ruleSet)
&gt; +                matchRuleSet(ruleSet, firstRuleIndex, lastRuleIndex, includeEmptyRules);
&gt; +        }
&gt; +        int scopeIndex = m_checker.getInnermostStyleScopeElementIndex();
&gt; +        while (scopeIndex &gt;= 0) {
&gt; +            const Element* scope = m_checker.getElementWithIndex(scopeIndex);
&gt; +            RuleSet* ruleSet = m_scopedAuthorStyles-&gt;get(scope);
&gt; +            if (ruleSet)
&gt; +                matchRuleSet(ruleSet, firstRuleIndex, lastRuleIndex, includeEmptyRules);
&gt; +            scopeIndex = m_checker.getEnclosingStyleScopeElementIndex(scopeIndex);
&gt; +        }
&gt; +    } else {
&gt; +        // Slow branch: climb tree, check for style scopes at every element.
&gt; +        for (const Node* node = m_element; node; node = node-&gt;parentNode()) {
&gt; +            if (!node-&gt;isElementNode())
&gt; +                continue;
&gt; +            const Element* element = toElement(node);
&gt; +            if (!element-&gt;hasScopedHTMLStyleChild())
&gt; +                continue;
&gt; +            RuleSet* ruleSet = m_scopedAuthorStyles-&gt;get(element);
&gt; +            if (ruleSet)
&gt; +                matchRuleSet(ruleSet, firstRuleIndex, lastRuleIndex, includeEmptyRules);
&gt; +        }
&gt; +    }

You should have a separate function that determines the active RuleSets (as a Vector probably). In this function you should just run through them and do the matching.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:850
&gt; +    // If we didn&apos;t match any rules, we&apos;re done.

Unnecessary comment.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:854
&gt; +    // Sort the set of matched rules.

Unnecessary comment.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:864
&gt; +            m_ruleList-&gt;append(m_matchedRules[i]-&gt;rule());
&gt; +        }
&gt; +    } else {

Use early return instead.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:1014
&gt; +            if (currentNode-&gt;isElementNode() &amp;&amp; toElement(currentNode)-&gt;hasScopedHTMLStyleChild())
&gt; +                continue;
&gt;              if (currentNode-&gt;renderStyle() == parentStyle &amp;&amp; currentNode-&gt;lastChild()) {

I think this test is unnecessary. currentNode-&gt;renderStyle() == parentStyle can&apos;t be true in that case.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:1828
&gt; -            if (m_checker.checkSelector(s, e))
&gt; +            // FIXME (BUG 72472): We don&apos;t add @-webkit-region rules of scoped style sheets for the moment, 
&gt; +            // so all region rules are global by default. Verify whether that can stand or needs changin&apos;.
&gt; +            if (m_checker.checkSelector(s, e, 0))

Extra parameter here.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2069
&gt; -void RuleSet::addRulesFromSheet(CSSStyleSheet* sheet, const MediaQueryEvaluator&amp; medium, CSSStyleSelector* styleSelector)
&gt; +void RuleSet::addRulesFromSheet(CSSStyleSheet* sheet, const MediaQueryEvaluator&amp; medium, CSSStyleSelector* styleSelector, const Element* scope)

You should probably add scope field to RuleSet instead of passing it as parameter. That will be useful for scoped matching in the future I think.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2111
&gt; +                        //
&gt; +                        // FIXME(BUG 72461): We don&apos;t add @font-face rules of scoped style sheets for the moment.
&gt; +                        // Find a way to have scoped @font-face rules.
&gt; +                        if (!scope) {

Early return style with continue might look slightly nicer. Lose the second line of the comment, it adds no value. Same comments for other instances in this function.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2141
&gt; +        } else if (rule-&gt;isRegionStyleRule() &amp;&amp; styleSelector) {
&gt; +            // FIXME (BUG 72472): We don&apos;t add @-webkit-region rules of scoped style sheets for the moment.
&gt;              styleSelector-&gt;addRegionStyleRule(static_cast&lt;CSSRegionStyleRule*&gt;(rule));

There is no code change along with this comment.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2259
&gt; +RuleSet* ScopedRuleSets::ensureExists(const Element* scope)
&gt; +{
&gt; +    RuleSet* ruleSet = m_scopedRuleSetMap.get(scope);
&gt; +    if (!ruleSet) {
&gt; +        ruleSet = new RuleSet;
&gt; +        m_scopedRuleSetMap.set(scope, ruleSet);
&gt; +    }
&gt; +    return ruleSet;
&gt; +}

You can do this with a single hash lookup using add().

&gt; Source/WebCore/css/SelectorChecker.h:97
&gt; +    // The following methods work only with a consistent ParentStackFrame vector
&gt; +    Element* getElementWithIndex(int index) const; // Index elements, with the root element starting at 0.
&gt; +    int getInnermostStyleScopeElementIndex() const; // Return the index of the element that contains the closest &lt;style scoped&gt;
&gt; +    int getEnclosingStyleScopeElementIndex(int index); // Return the index of the closest ancestor (!) element that contains &lt;style scoped&gt;, starting from the given index

WebKit coding style does not use get* in accessors. The interface is generally strange (but see the next comment about getting rid of it entirely).

&gt; Source/WebCore/css/SelectorChecker.h:125
&gt;      struct ParentStackFrame {
&gt; -        ParentStackFrame() { }
&gt; -        ParentStackFrame(Element* element) : element(element) { }
&gt; -        Element* element;
&gt; +        ParentStackFrame(Element* element, size_t styleScopeFrameIndex) : element(element), closestStyleScopeFrameIndex(styleScopeFrameIndex) { }
&gt; +        Element* const element;
&gt; +        const int closestStyleScopeFrameIndex; // index of closest ParentStackFrame that points to an element that is a style scope (may be this), or -1
&gt;          Vector&lt;unsigned, 4&gt; identifierHashes;
&gt;      };

It would be better to have a separate scope stack. I see no obvious benefit from  having it part of the ParentStackFrame and doing the index dance here. The stack would better live in CSSStyleSelector too. Then you could save RuleSet pointers there along with the scope element and save lots of hash lookups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510638</commentid>
    <comment_count>6</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-29 02:35:00 -0800</bug_when>
    <thetext>(In reply to comment #5)

I&apos;m currently working on an updated patch - just a few clarification questions below:

&gt; (From update of attachment 116704 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116704&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:273
&gt; &gt; +class ScopedRuleSets {
&gt; &gt; +    WTF_MAKE_NONCOPYABLE(ScopedRuleSets);
&gt; 
&gt; This class adds little value over the HashMap (a place to hang collectFeatures function essentially). I think you should go with a typedef instead.

I&apos;d need it at least for the destructor (?).

&gt; There doesn&apos;t seem to be any code for handling dynamic addition and removal of scoped stylesheets. I suppose you are currently recalculating the entire style selector (and so the entire document style) if scoped sheets change? 

The code for handling of dynamic addition and removal, as well as the &apos;scoped&apos; attribute is in the patch for bug 67790.
 
&gt; This may be ok initially but you should be careful that the architecture can handle dynamic changes efficiently. As I understand use cases for scoped stylesheet may often be dynamic and the style recalc should be limited to the scope only.

Yes, that would be a good optimization, but is only feasible for adding/removing of entire &lt;style scoped&gt; elements, not when changing the &apos;scoped&apos; attribute (however, we should continue discussion of this at 67790).

&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:712
&gt; [...snip matchAuthorRules code...]
&gt; You should have a separate function that determines the active RuleSets (as a Vector probably). In this function you should just run through them and do the matching.

Given that matchAuthorRules would be the only client of this, wouldn&apos;t creation of the vector be unnecessary overhead?

&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:1014
&gt; &gt; +            if (currentNode-&gt;isElementNode() &amp;&amp; toElement(currentNode)-&gt;hasScopedHTMLStyleChild())
&gt; &gt; +                continue;
&gt; &gt;              if (currentNode-&gt;renderStyle() == parentStyle &amp;&amp; currentNode-&gt;lastChild()) {
&gt; 
&gt; I think this test is unnecessary. currentNode-&gt;renderStyle() == parentStyle can&apos;t be true in that case.

Not sure I understand - this line is not by me... ^_^;

&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:1828
&gt; &gt; -            if (m_checker.checkSelector(s, e))
&gt; &gt; +            // FIXME (BUG 72472): We don&apos;t add @-webkit-region rules of scoped style sheets for the moment, 
&gt; &gt; +            // so all region rules are global by default. Verify whether that can stand or needs changin&apos;.
&gt; &gt; +            if (m_checker.checkSelector(s, e, 0))
&gt; 
&gt; Extra parameter here.

Good catch, thanks!!

&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:2069
&gt; &gt; -void RuleSet::addRulesFromSheet(CSSStyleSheet* sheet, const MediaQueryEvaluator&amp; medium, CSSStyleSelector* styleSelector)
&gt; &gt; +void RuleSet::addRulesFromSheet(CSSStyleSheet* sheet, const MediaQueryEvaluator&amp; medium, CSSStyleSelector* styleSelector, const Element* scope)
&gt; 
&gt; You should probably add scope field to RuleSet instead of passing it as parameter. That will be useful for scoped matching in the future I think.

As I have implemented it so far, RuleSets (and RuleData, etc.) don&apos;t store the scope, and thus don&apos;t need to be updated themselves on DOM changes. The scope is just passed in as a parameter to the scoping functions (which will be later handy for queryScopedSelector/find/matches/... as well).

&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:2259
&gt; &gt; +RuleSet* ScopedRuleSets::ensureExists(const Element* scope)
&gt; &gt; +{
&gt; &gt; +    RuleSet* ruleSet = m_scopedRuleSetMap.get(scope);
&gt; &gt; +    if (!ruleSet) {
&gt; &gt; +        ruleSet = new RuleSet;
&gt; &gt; +        m_scopedRuleSetMap.set(scope, ruleSet);
&gt; &gt; +    }
&gt; &gt; +    return ruleSet;
&gt; &gt; +}
&gt; 
&gt; You can do this with a single hash lookup using add().

But that would create and potentially discard a complete RuleSet. One way to improve efficiency here could be to have ScopedRuleSets pre-allocate a spare RuleSet that is used with add() and - if add() actually uses it, pre-allocating a new spare. Another, more generic, way would be to add a function to HashMap that only takes a key and allocates a new value type via default constructor if necessary.

What do you think?

&gt; &gt; Source/WebCore/css/SelectorChecker.h:125
&gt; &gt;      struct ParentStackFrame {
&gt; &gt; -        ParentStackFrame() { }
&gt; &gt; -        ParentStackFrame(Element* element) : element(element) { }
&gt; &gt; -        Element* element;
&gt; &gt; +        ParentStackFrame(Element* element, size_t styleScopeFrameIndex) : element(element), closestStyleScopeFrameIndex(styleScopeFrameIndex) { }
&gt; &gt; +        Element* const element;
&gt; &gt; +        const int closestStyleScopeFrameIndex; // index of closest ParentStackFrame that points to an element that is a style scope (may be this), or -1
&gt; &gt;          Vector&lt;unsigned, 4&gt; identifierHashes;
&gt; &gt;      };
&gt; 
&gt; It would be better to have a separate scope stack. I see no obvious benefit from  having it part of the ParentStackFrame and doing the index dance here. The stack would better live in CSSStyleSelector too. Then you could save RuleSet pointers there along with the scope element and save lots of hash lookups.

Hm, I am implementing this as suggested at the moment, but this has the drawback that AFAICT I would need to replicate the logic in SelectorChecker::pushParent(), which strikes me as quite fragile (?). 
I do agree however, that the current implementation with the &quot;index dance&quot; is strange and should be replaced by something better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510640</commentid>
    <comment_count>7</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-29 02:40:31 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; But that would create and potentially discard a complete RuleSet. One way to improve efficiency here could be to have ScopedRuleSets pre-allocate a spare RuleSet that is used with add() and - if add() actually uses it, pre-allocating a new spare. Another, more generic, way would be to add a function to HashMap that only takes a key and allocates a new value type via default constructor if necessary.

Argh, first think then type! Given that this uses a pointer, the above is obviously bogus... &gt;_&lt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510659</commentid>
    <comment_count>8</comment_count>
      <attachid>116935</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-29 03:12:05 -0800</bug_when>
    <thetext>Created attachment 116935
work-in-progress

Work-in-progress patch - fixed review requests, but some open questions (see above) and also needs some more debuggin&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510681</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-29 04:19:29 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I&apos;d need it at least for the destructor (?).

True, that somewhat motivates the class at the moment. However, we should make RuleSets refcounted if they are going to be more dynamic. That takes care of that.

&gt; Yes, that would be a good optimization, but is only feasible for adding/removing of entire &lt;style scoped&gt; elements

That&apos;s the case I meant.

&gt; Given that matchAuthorRules would be the only client of this, wouldn&apos;t creation of the vector be unnecessary overhead?

Doubt it is something to worry about. Plus it opens avenues for caching. Note also that if you implement the separate scope stack, the stack _is_ the vector here so you don&apos;t need to do anything in the common case.

&gt; &gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:1014
&gt; &gt; &gt; +            if (currentNode-&gt;isElementNode() &amp;&amp; toElement(currentNode)-&gt;hasScopedHTMLStyleChild())
&gt; &gt; &gt; +                continue;
&gt; &gt; &gt;              if (currentNode-&gt;renderStyle() == parentStyle &amp;&amp; currentNode-&gt;lastChild()) {
&gt; &gt; 
&gt; &gt; I think this test is unnecessary. currentNode-&gt;renderStyle() == parentStyle can&apos;t be true in that case.
&gt; 
&gt; Not sure I understand - this line is not by me... ^_^;

What I meant is that your additional hasScopedHTMLStyleChild() test is probably not necessary here because (currentNode-&gt;renderStyle() == parentStyle test will never be true for parents with scoped child (as they have not been allowed to share style in the first place due to other checks). 

&gt; As I have implemented it so far, RuleSets (and RuleData, etc.) don&apos;t store the scope, and thus don&apos;t need to be updated themselves on DOM changes. The scope is just passed in as a parameter to the scoping functions (which will be later handy for queryScopedSelector/find/matches/... as well).

Scope is kinda instrinsic feature of a RuleSet so it is not something that you should try hard to avoid. 

&gt; But that would create and potentially discard a complete RuleSet. One way to improve efficiency here could be to have ScopedRuleSets pre-allocate a spare RuleSet that is used with add() and - if add() actually uses it, pre-allocating a new spare. Another, more generic, way would be to add a function to HashMap that only takes a key and allocates a new value type via default constructor if necessary.

See for example 

http://trac.webkit.org/browser/trunk/Source/WebCore/css/CSSPrimitiveValueCache.cpp#L113

&gt; Hm, I am implementing this as suggested at the moment, but this has the drawback that AFAICT I would need to replicate the logic in SelectorChecker::pushParent(), which strikes me as quite fragile (?). 
&gt; I do agree however, that the current implementation with the &quot;index dance&quot; is strange and should be replaced by something better.

I don&apos;t think so. I suspect you should manage with some rather simple logic here. Note that you can still rely on the ancestor identifier stack for consistency checks. (your stack is consistent only as long as that one is).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511422</commentid>
    <comment_count>10</comment_count>
      <attachid>117130</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-29 23:26:46 -0800</bug_when>
    <thetext>Created attachment 117130
Patch (requires 67718, 67790)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511424</commentid>
    <comment_count>11</comment_count>
      <attachid>117130</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-29 23:31:18 -0800</bug_when>
    <thetext>Comment on attachment 117130
Patch (requires 67718, 67790)

Attachment 117130 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10711021</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511425</commentid>
    <comment_count>12</comment_count>
      <attachid>117130</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-29 23:31:56 -0800</bug_when>
    <thetext>Comment on attachment 117130
Patch (requires 67718, 67790)

Attachment 117130 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10704071</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511432</commentid>
    <comment_count>13</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-29 23:46:39 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #6)
&gt; &gt; I&apos;d need it at least for the destructor (?).
&gt; 
&gt; True, that somewhat motivates the class at the moment. However, we should make RuleSets refcounted if they are going to be more dynamic. That takes care of that.

I take that should be a separate patch (?).

&gt; What I meant is that your additional hasScopedHTMLStyleChild() test is probably not necessary here because (currentNode-&gt;renderStyle() == parentStyle test will never be true for parents with scoped child (as they have not been allowed to share style in the first place due to other checks). 

Got it - removed.

&gt; Scope is kinda instrinsic feature of a RuleSet so it is not something that you should try hard to avoid. 

That&apos;s the point - I argue that it&apos;s _not_ an intrinsic feature of a RuleSet, but of selector matching only (!). Consider that in a scoped element.find() there is no RuleSet, either. Or when a &lt;style&gt; element from a &lt;template&gt; is being &apos;stamped&quot; all over the place, as will be the case, e.g., with the planned component model. This view of things will allow all instances to share the same RuleSet, only using different scopes for each instance.

&gt; &gt; Hm, I am implementing this as suggested at the moment, but this has the drawback that AFAICT I would need to replicate the logic in SelectorChecker::pushParent(), which strikes me as quite fragile (?). 
&gt; &gt; I do agree however, that the current implementation with the &quot;index dance&quot; is strange and should be replaced by something better.
&gt; 
&gt; I don&apos;t think so. I suspect you should manage with some rather simple logic here. Note that you can still rely on the ancestor identifier stack for consistency checks. (your stack is consistent only as long as that one is).

The scoping element stack needs to mirror all 4 cases of SelectorChecker::pushParent: new root, start from the middle of the tree, just push to stack, or inconsistent state. The consistency check you mention only helps with the last case, but the first 3 are hard to distinguish &quot;from the outside&quot; (without replicating the logic - or maybe I&apos;m just overlooking something). In the new patch I refactored the push/popParent logic. While not too terrific (could be considered manipulating private data structures from another class), the function naming should make the intent clear(er).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511433</commentid>
    <comment_count>14</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-29 23:47:55 -0800</bug_when>
    <thetext>:P Is there a way to prevent the EWS from auto-running?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511743</commentid>
    <comment_count>15</comment_count>
      <attachid>117130</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-30 07:40:58 -0800</bug_when>
    <thetext>Comment on attachment 117130
Patch (requires 67718, 67790)

Attachment 117130 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10690066</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515869</commentid>
    <comment_count>16</comment_count>
      <attachid>117130</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-12-06 06:33:05 -0800</bug_when>
    <thetext>Comment on attachment 117130
Patch (requires 67718, 67790)

It is going to the right direction but I&apos;d still like to see more of my comments addressed. CSSStyleSelector::matchAuthorRules() code for getting the scoped RuleSets should be factored into a function. It would also be nice if the scoping element stack would point to the RuleSets directly instead of inderectly via element and a hash lookip (though it can be done later too). ScopedRuleSets class still doesn&apos;t really justify its existence etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516576</commentid>
    <comment_count>17</comment_count>
      <attachid>118198</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-12-07 03:34:29 -0800</bug_when>
    <thetext>Created attachment 118198
patch (requires 67790), with flag

new patch, removed ScopedRuleSets, improved m_scopingElementStack</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516577</commentid>
    <comment_count>18</comment_count>
      <attachid>118198</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-12-07 03:40:39 -0800</bug_when>
    <thetext>Comment on attachment 118198
patch (requires 67790), with flag

Attachment 118198 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10753117</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516578</commentid>
    <comment_count>19</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-12-07 03:41:53 -0800</bug_when>
    <thetext>Posted a new patch, that now also includes the compile-time flag.

(In reply to comment #16)
&gt; (From update of attachment 117130 [details])
&gt; It is going to the right direction but I&apos;d still like to see more of my comments addressed. CSSStyleSelector::matchAuthorRules() code for getting the scoped RuleSets should be factored into a function. 

I have to admit I still don&apos;t get the benefit of this: The fast code already goes through the already existent vector as you suggested, and for the slow path to set up a new &amp; different vector, just to then iterate over it seems overhead without benefit. OTOH a function that returns/fills a vector would add overhead in the fast branch, which seems even less wanted. 

&gt; It would also be nice if the scoping element stack would point to the RuleSets directly instead of inderectly via element and a hash lookip (though it can be done later too). 

changed to hold a pair&lt;Element*, RuleSet*&gt; - need the Element* as criterion for popParent(), and in the matching functions in follow-up patch for 73192.

&gt; ScopedRuleSets class still doesn&apos;t really justify its existence etc.

removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516579</commentid>
    <comment_count>20</comment_count>
      <attachid>118198</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-12-07 03:43:34 -0800</bug_when>
    <thetext>Comment on attachment 118198
patch (requires 67790), with flag

Attachment 118198 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10750111</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516581</commentid>
    <comment_count>21</comment_count>
      <attachid>118198</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-07 03:45:07 -0800</bug_when>
    <thetext>Comment on attachment 118198
patch (requires 67790), with flag

Attachment 118198 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10750113</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520756</commentid>
    <comment_count>22</comment_count>
      <attachid>119172</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-12-14 00:36:24 -0800</bug_when>
    <thetext>Created attachment 119172
patch (requires 67790), with flag

small bugfix update to previous patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529991</commentid>
    <comment_count>23</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-01-04 21:18:48 -0800</bug_when>
    <thetext>New Year request for review! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542857</commentid>
    <comment_count>24</comment_count>
      <attachid>124058</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-01-25 20:49:22 -0800</bug_when>
    <thetext>Created attachment 124058
patch, updated, deconflicted</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542958</commentid>
    <comment_count>25</comment_count>
      <attachid>124078</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-01-26 01:37:30 -0800</bug_when>
    <thetext>Created attachment 124078
patch, alternative, using iterator

Alternative version of patch: This uses an struct and helper functions to allow iteration over all relevant scoping RuleSets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543969</commentid>
    <comment_count>26</comment_count>
      <attachid>124078</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-27 04:50:14 -0800</bug_when>
    <thetext>Comment on attachment 124078
patch, alternative, using iterator

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

&gt; Source/WebCore/css/CSSStyleSelector.cpp:807
&gt; +struct AuthorRuleSetIterator {
&gt; +    AuthorRuleSetIterator() : m_scope(0), m_ruleSet(0), m_stackIndex(-1)
&gt; +    { }

I think the iterator factored like this is somewhat confusing. It mixes the (common) case of prebuilt m_scopingElementStack with the rare case of it having to be reconstructed. There is no particular reason for it to handle the global author style. (there are also style problems with it not having the normal WebKit iterator interface)

As far as I can see you could avoid most of the confusing code by simply rebuilding the parent stack when needed.

if (!m_checker.parentStackIsConsistent())
    rebuildScopeElementStack();

or similar.

Then the scope matching is always just a matter iterating over m_scopingElementStack and the code should be much simpler. We should eventually fix the code so that the stack is always consistent anyway. The same code could be called from pushParent() too when the stack is rebuilt.

&gt; Source/WebCore/css/CSSStyleSelector.h:458
&gt; +    // Vector (used as stack) that keeps track of scoping elements (i.e., elements with a &lt;style scoped&gt; child)
&gt; +    // encountered during tree iteration for style resolution.
&gt; +    Vector&lt;std::pair&lt;const Element*, RuleSet*&gt; &gt; m_scopingElementStack;

No need for std::. I prefer a struct over the pair&lt;&gt; as the resulting code reads better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544824</commentid>
    <comment_count>27</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-01-29 18:31:12 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; As far as I can see you could avoid most of the confusing code by simply rebuilding the parent stack when needed.
&gt; 
&gt; if (!m_checker.parentStackIsConsistent())
&gt;     rebuildScopeElementStack();
&gt; 
&gt; or similar.

Well, there is the comment in SelectorChecker.cpp:

    // We may get invoked for some random elements in some wacky cases during style resolve.
    // Pause maintaining the stack in this case.

which I took to mean that this (i.e., the slow case) may happen during tree traversal that otherwise uses the fast case. If I clobber the stacks with the new element introduced in the slow case, this will then interfere when the regular tree iteration is resumed, no?

It also makes me a bit nervous that m_scopingElementStack needs to be synchronous with SelectorChecker::m_parentStack, but this is not encapsulated - what do you think of moving those into a separate class altogether?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544957</commentid>
    <comment_count>28</comment_count>
      <attachid>124514</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-01-30 02:25:02 -0800</bug_when>
    <thetext>Created attachment 124514
patch, removed iterator

Interim version to the previous comment: removed the iterator class, operate on vectors directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545019</commentid>
    <comment_count>29</comment_count>
      <attachid>124525</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-01-30 04:55:30 -0800</bug_when>
    <thetext>Created attachment 124525
Patch

New patch, as discussed on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545067</commentid>
    <comment_count>30</comment_count>
      <attachid>124525</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-30 06:25:37 -0800</bug_when>
    <thetext>Comment on attachment 124525
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545764</commentid>
    <comment_count>31</comment_count>
      <attachid>124525</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-30 21:04:28 -0800</bug_when>
    <thetext>Comment on attachment 124525
Patch

Clearing flags on attachment: 124525

Committed r106331: &lt;http://trac.webkit.org/changeset/106331&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545765</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-30 21:04:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116704</attachid>
            <date>2011-11-27 23:39:52 -0800</date>
            <delta_ts>2011-11-29 03:11:55 -0800</delta_ts>
            <desc>patch (requires 67718, 67790)</desc>
            <filename>bug-73190-20111128163950.patch</filename>
            <type>text/plain</type>
            <size>49796</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWRjMDc5ZGI1MTc2Mzg1
ODE3MGMzZDNhMzAzNmMwZWRhZTBhYTMwMC4uMWRmZTVlYzI3NWFiZWFjMzllZDYwOWYyMjFiNTIx
ZGFkYmVkNzJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDExLTExLTI3ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIDxzdHls
ZSBzY29wZWQ+OiBJbXBsZW1lbnQgc2NvcGVkIHN0eWxlc2hlZXRzIGFuZCBiYXNpYyBhcHBsaWNh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMx
OTAKKworICAgICAgICBJbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgPHN0eWxlIHNjb3BlZD46Cisg
ICAgICAgIFN0b3JlIHNjb3BlZCBzdHlsZSBzaGVldHMgaW4gYSBzZXBhcmF0ZSBkYXRhIHN0cnVj
dHVyZSBTY29wZWRSdWxlU2V0cy4KKyAgICAgICAgRXh0ZW5kIFBhcmVudFN0YWNrRnJhbWUgdG8g
aW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xvc2VzdCBzY29waW5nIGVsZW1lbnQgKGlm
IGFueSkuIFRoaXMgaXMKKyAgICAgICAgdXNlZCBmb3IgTygxKSBhY2Nlc3MgdG8gYWxsIHJlbGV2
YW50IHN0eWxlIHNoZWV0cyBmb3IgYSBnaXZlbiBlbGVtZW50LgorICAgICAgICBGaW5hbGx5LCBw
cmV2ZW50IHN0eWxlIHNoYXJpbmcgZnJvbSBjcm9zc2luZyBpbnRvL291dCBvZiBzY29wZWQgc3R5
bGUgYm91bmRhcmllcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUZXN0czogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2gu
aHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1i
YXNpYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLWRldGFjaC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5
bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0bWwKKworICAgICAgICAqIGNzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcDogYWRkIHN1cHBvcnQgZm9yIHNjb3BlZCBhdXRob3Igc2hlZXRz
CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6U2NvcGVkUnVsZVNldHMpOiBjbGFz
cyBmb3Igc2NvcGVkIGF1dGhvciBzaGVldHMKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVT
ZXRzOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lU2NvcGUpOiBkZXRlcm1pbmUg
d2hldGhlciBhbiBhdXRob3Igc2hlZXQgaXMgc2NvcGVkIChhbmQgdG8gd2hpY2ggc2NvcGUpLCBv
ciBnbG9iYWwKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2Vs
ZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c29ydEFuZFRyYW5z
ZmVyTWF0Y2hlZFJ1bGVzKTogaGVscGVyIGZ1bmN0aW9uCisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaEFsbFJ1bGVzKTogY2hhbmdlZCBjYWxsIHRvIG1hdGNoQXV0aG9y
UnVsZXMKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQXV0aG9yUnVs
ZXMpOiBtYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjptYXRjaFJ1bGVzKTogYWRkICdzY29wZScgcGFyYW1ldGVyCisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVTZXQpOiBkaXR0bworICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QpOiBkaXR0bworICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdCk6IHByZXZl
bnQgc3R5bGUgc2hhcmluZyBhY3Jvc3Mgc2NvcGUgYm91bmRhcmllcworICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTogZGl0dG8KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKTogZGl0
dG8KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxl
bWVudCk6IGNoYW5nZWQgY2FsbCB0byBtYXRjaEF1dGhvclJ1bGVzCisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UpOiBjb21tZW50CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1JlZ2lvblN0eWxlKTogYWRkIGdsb2JhbCBzY29w
ZSBwYXJhbWV0ZXIKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0
eWxlUnVsZXNGb3JFbGVtZW50KTogY2hhbmdlZCBjYWxsIHRvIG1hdGNoQXV0aG9yUnVsZXMKKyAg
ICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KTogYWRkIGNvbW1lbnRz
IGZvciBAZm9udC1mYWNlIGFuZCBAa2V5ZnJhbWVzCisgICAgICAgIChXZWJDb3JlOjpTY29wZWRS
dWxlU2V0czo6flNjb3BlZFJ1bGVTZXRzKTogZGF0YSBzdHJ1Y3R1cmUgdG8gbWFwIHNjb3BlIC0+
IFJ1bGVTZXQgCisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6ZW5zdXJlRXhpc3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjpjb2xsZWN0RmVhdHVyZXMpOgor
ICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgICogY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJl
bnRTdGFja0ZyYW1lKTogZXh0ZW5kIFBhcmVudFN0YWNrRnJhbWUgd2l0aCBzY29wZSBpbmZvCisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJlbnQpOiBhdm9pZCBkZWZh
dWx0IGNvbnN0cnVjdG9yCisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpQYXJlbnRTdGFja0ZyYW1lOjpQYXJlbnRTdGFj
a0ZyYW1lKTogZXh0ZW5kIFBhcmVudFN0YWNrRnJhbWUgd2l0aCBzY29wZSBpbmZvCisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmdldEVsZW1lbnRXaXRoSW5kZXgpOiBhY2Nlc3Mg
bWV0aG9kcyBmb3IgUGFyZW50U3RhY2tGcmFtZQorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjpnZXRJbm5lcm1vc3RTdHlsZVNjb3BlRWxlbWVudEluZGV4KTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Z2V0RW5jbG9zaW5nU3R5bGVTY29wZUVsZW1l
bnRJbmRleCk6IGRpdHRvCisKIDIwMTEtMTEtMTYgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3Rl
aW5lckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgPHN0eWxlIHNjb3BlZD46IEltcGxlbWVudCBy
ZWdpc3RlcmluZyBvZiA8c3R5bGUgc2NvcGVkPiB3aXRoIHRoZSBzY29waW5nIGVsZW1lbnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCBhZDVlNDdjY2Y5YTFlYzNi
ZTgyODkxYzQ0ZjI0MGYwZDY2ZDBhZTZhLi4xNzIwZWQ1YmZkMTJjYzcyMTkzMzEyMDZhOWM1NDc1
OGRkZGZhYzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC02
OSw2ICs2OSw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIktleWZyYW1lTGlzdC5oIgogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCkBAIC0yMzQsNyAr
MjM1LDcgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwq
LCBWZWN0b3I8UnVsZURhdGE+Kj4gQXRvbVJ1bGVNYXA7CiAKLSAgICB2b2lkIGFkZFJ1bGVzRnJv
bVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5
bGVTZWxlY3RvciogPSAwKTsKKyAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hl
ZXQqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwLCBj
b25zdCBFbGVtZW50KiA9IDApOwogCiAgICAgdm9pZCBhZGRTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxl
KiBpdGVtKTsKICAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rv
ciogc2VsKTsKQEAgLTI2OCw2ICsyNjksMjMgQEAgcHVibGljOgogICAgIGJvb2wgbV9hdXRvU2hy
aW5rVG9GaXRFbmFibGVkOwogfTsKIAorY2xhc3MgU2NvcGVkUnVsZVNldHMgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNjb3BlZFJ1bGVTZXRzKTsKK3B1YmxpYzoKKyAgICBTY29wZWRSdWxl
U2V0cygpIHsgfQorICAgIH5TY29wZWRSdWxlU2V0cygpOworCisgICAgUnVsZVNldCogZ2V0KGNv
bnN0IEVsZW1lbnQqIHNjb3BlKSB7IHJldHVybiBtX3Njb3BlZFJ1bGVTZXRNYXAuZ2V0KHNjb3Bl
KTsgfQorICAgIFJ1bGVTZXQqIGVuc3VyZUV4aXN0cyhjb25zdCBFbGVtZW50Kik7CisKKyAgICB2
b2lkIGNvbGxlY3RGZWF0dXJlcyhDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBFbGVtZW50KiwgUnVsZVNldCo+
IFNjb3BlZFJ1bGVTZXRNYXA7CisKKyAgICBTY29wZWRSdWxlU2V0TWFwIG1fc2NvcGVkUnVsZVNl
dE1hcDsKK307CisKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CiBzdGF0aWMgUnVsZVNl
dCogZGVmYXVsdFF1aXJrc1N0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxl
OwpAQCAtMzQyLDYgKzM2MCwzMiBAQCBzdGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQogICAgIHJldHVybiByaWdodFRvTGVmdERlY2wuZ2V0
KCk7CiB9CiAKKy8vIERldGVybWluZSB0aGUgc2NvcGUgb2YgYSBzdHlsZSBzaGVldCAoaWYgYW55
KS4gUmV0dXJucyAnZmFsc2UnIGlmIGl0J3MgYSBzY29wZWQgc3R5bGUgc2hlZXQgaW4gYW4gaW52
YWxpZCBsb2NhdGlvbi4KK3N0YXRpYyBib29sIGRldGVybWluZVNjb3BlKENTU1N0eWxlU2hlZXQq
IHNoZWV0LCBjb25zdCBFbGVtZW50KiYgc2NvcGUpCit7CisgICAgc2NvcGUgPSAwOworCisgICAg
aWYgKCFzaGVldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTm9kZSogb3duZXJOb2Rl
ID0gc2hlZXQtPmZpbmRTdHlsZVNoZWV0T3duZXJOb2RlKCk7CisgICAgaWYgKCFvd25lck5vZGUg
fHwgIW93bmVyTm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8ICFvd25lck5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpzdHlsZVRhZykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgSFRNTFN0
eWxlRWxlbWVudCogc3R5bGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+
KG93bmVyTm9kZSk7CisgICAgaWYgKCFzdHlsZUVsZW1lbnQtPnNjb3BlZCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0eWxlRWxlbWVudC0+ZG9j
dW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBzY29wZSA9IHN0eWxlRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIEFTU0VSVChzY29w
ZSk7CisKKyAgICByZXR1cm4gc2NvcGU7IC8vIFRoZXJlIG11c3QgYmUgYSBzY29waW5nIGVsZW1l
bnQgLSByZXR1cm4gJ2ZhbHNlJyBpZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHRoaXMgaXMgbm90IHRo
ZSBjYXNlLgorfQorCiBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50
KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBt
YXBwZWRFbGVtZW50U2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiA+KiBkb2N1bWVudFVzZXJTaGVldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZywgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMpCkBAIC0zOTAsNiArNDM0LDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rv
cihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAg
bV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2aWV3LT5tZWRpYVR5
cGUoKSwgdmlldy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0eWxlLmdldCgpKSk7CiAKICAgICBt
X2F1dGhvclN0eWxlID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOworICAgIG1fc2NvcGVkQXV0aG9y
U3R5bGVzID0gYWRvcHRQdHIobmV3IFNjb3BlZFJ1bGVTZXRzKTsKICAgICAvLyBBZGRpbmcgcnVs
ZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgogICAgIG1fYXV0aG9y
U3R5bGUtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKIApAQCAtNDIwLDE1ICs0NjUsMjYgQEAg
Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0
eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAgbV91c2VyU3R5bGUgPSB0ZW1wVXNlclN0
eWxlLnJlbGVhc2UoKTsKIAogICAgIC8vIEFkZCBydWxlcyBmcm9tIGVsZW1lbnRzIGxpa2UgU1ZH
J3MgPGZvbnQtZmFjZT4KLSAgICBpZiAobWFwcGVkRWxlbWVudFNoZWV0KQorICAgIGlmIChtYXBw
ZWRFbGVtZW50U2hlZXQpIHsKKyAgICAgICAgLy8gRklYTUU6IHNlZSBpZiBzdHlsZSBzY29wZXMg
Y2FuL3Nob3VsZCBiZSBhZGRlZCBoZXJlLgogICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxl
c0Zyb21TaGVldChtYXBwZWRFbGVtZW50U2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgfQog
CiAgICAgLy8gYWRkIHN0eWxlc2hlZXRzIGZyb20gZG9jdW1lbnQKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBzdHlsZVNoZWV0cy0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gc3R5bGVTaGVldHMt
Pml0ZW0oaSk7Ci0gICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkgJiYgIXNoZWV0
LT5kaXNhYmxlZCgpKQotICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwgKm1fbWVkaXVtLCB0aGlzKTsK
KyAgICAgICAgaWYgKHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhc2hlZXQtPmRpc2FibGVk
KCkpIHsKKyAgICAgICAgICAgIENTU1N0eWxlU2hlZXQqIGNzc1NoZWV0ID0gc3RhdGljX2Nhc3Q8
Q1NTU3R5bGVTaGVldCo+KHNoZWV0KTsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIHNjb3Bl
ID0gMDsKKworICAgICAgICAgICAgaWYgKCFkZXRlcm1pbmVTY29wZShjc3NTaGVldCwgc2NvcGUp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHNjb3BlKQorICAg
ICAgICAgICAgICAgIG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5lbnN1cmVFeGlzdHMoc2NvcGUpLT5h
ZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9t
U2hlZXQoY3NzU2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgIH0KICAgICB9CiAgICAg
Ly8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxlcyB1c2luZyBzaWJsaW5nIHNlbGVjdG9ycyAoOmZp
cnN0LWNoaWxkIGFuZCBzaW1pbGFyKQogICAgIC8vIGluIHRoZSBjdXJyZW50IHNldCBvZiBzdHls
ZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byByZWpl
Y3QKQEAgLTQzOSw2ICs0OTUsNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9y
KERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAgIGlmICh1
bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzSW5EZWZhdWx0U3R5bGUpCiAgICAgICAgIHVuY29tbW9uQXR0
cmlidXRlUnVsZXNJbkRlZmF1bHRTdHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwog
ICAgIG1fYXV0aG9yU3R5bGUtPmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKKyAgICBtX3Nj
b3BlZEF1dGhvclN0eWxlcy0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwogICAgIGlmICht
X3VzZXJTdHlsZSkKICAgICAgICAgbV91c2VyU3R5bGUtPmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1
cmVzKTsKIApAQCAtNjE4LDYgKzY3NSw0NSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1h
dGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZQogICAg
IG5ld0RlY2xhcmF0aW9uLmxpbmtNYXRjaFR5cGUgPSBsaW5rTWF0Y2hUeXBlOwogfQogCit2b2lk
IENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQXV0aG9yUnVsZXMoaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworICAgIG1fbWF0
Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgor
ICAgIG1hdGNoUnVsZVNldChtX2F1dGhvclN0eWxlLmdldCgpLCBmaXJzdFJ1bGVJbmRleCwgbGFz
dFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIC8vIE1hdGNoIHNjb3BlZCBzdHls
ZSBzaGVldCdzIHJ1bGVzLgorICAgIGlmIChtX2NoZWNrZXIucGFyZW50U3RhY2tJc0NvbnNpc3Rl
bnQobV9wYXJlbnROb2RlKSkgeworICAgICAgICAvLyBGYXN0IGJyYW5jaDogYWNjZXNzIGVuY2xv
c2luZyBzY29wZXMgZGlyZWN0bHkgZnJvbSBwYXJlbnQgc3RhY2sgKGJ1dCBzdGFydCB3aXRoIGN1
cnJlbnQgZWxlbWVudCkuCisgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHls
ZUNoaWxkKCkpIHsKKyAgICAgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBtX3Njb3BlZEF1dGhv
clN0eWxlcy0+Z2V0KG1fZWxlbWVudCk7CisgICAgICAgICAgICBpZiAocnVsZVNldCkKKyAgICAg
ICAgICAgICAgICBtYXRjaFJ1bGVTZXQocnVsZVNldCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxl
SW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgc2NvcGVJ
bmRleCA9IG1fY2hlY2tlci5nZXRJbm5lcm1vc3RTdHlsZVNjb3BlRWxlbWVudEluZGV4KCk7Cisg
ICAgICAgIHdoaWxlIChzY29wZUluZGV4ID49IDApIHsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1l
bnQqIHNjb3BlID0gbV9jaGVja2VyLmdldEVsZW1lbnRXaXRoSW5kZXgoc2NvcGVJbmRleCk7Cisg
ICAgICAgICAgICBSdWxlU2V0KiBydWxlU2V0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMtPmdldChz
Y29wZSk7CisgICAgICAgICAgICBpZiAocnVsZVNldCkKKyAgICAgICAgICAgICAgICBtYXRjaFJ1
bGVTZXQocnVsZVNldCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKKyAgICAgICAgICAgIHNjb3BlSW5kZXggPSBtX2NoZWNrZXIuZ2V0RW5jbG9zaW5n
U3R5bGVTY29wZUVsZW1lbnRJbmRleChzY29wZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIFNsb3cgYnJhbmNoOiBjbGltYiB0cmVlLCBjaGVjayBmb3Igc3R5bGUg
c2NvcGVzIGF0IGV2ZXJ5IGVsZW1lbnQuCisgICAgICAgIGZvciAoY29uc3QgTm9kZSogbm9kZSA9
IG1fZWxlbWVudDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAg
ICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOwor
ICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IG1f
c2NvcGVkQXV0aG9yU3R5bGVzLT5nZXQoZWxlbWVudCk7CisgICAgICAgICAgICBpZiAocnVsZVNl
dCkKKyAgICAgICAgICAgICAgICBtYXRjaFJ1bGVTZXQocnVsZVNldCwgZmlyc3RSdWxlSW5kZXgs
IGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcygpOworfQorCiB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICAgICBtX21hdGNo
ZWRSdWxlcy5jbGVhcigpOwpAQCAtNjI1LDYgKzcyMSwxNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdAogICAgIGlmICghcnVsZXMgfHwgIW1fZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgbWF0Y2hSdWxlU2V0KHJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5j
bHVkZUVtcHR5UnVsZXMpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcygpOworfQor
Cit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZVNldChSdWxlU2V0KiBydWxlcywgaW50
JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1
bGVzKQoreworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICBpZiAoIXJ1bGVzIHx8
ICFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIFdlIG5lZWQgdG8gY29sbGVj
dCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8g
YSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0IHRoZSBidWZmZXIuCiAgICAgaWYgKG1fZWxl
bWVudC0+aGFzSUQoKSkKQEAgLTY0NywzMyArNzU0LDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3QKICAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmZvY3VzUHNldWRvQ2xhc3NSdWxl
cygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwog
ICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT50YWdSdWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFt
ZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlS
dWxlcyk7CiAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPnVuaXZlcnNhbFJ1bGVzKCksIGZp
cnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0KLSAgICAv
LyBJZiB3ZSBkaWRuJ3QgbWF0Y2ggYW55IHJ1bGVzLCB3ZSdyZSBkb25lLgotICAgIGlmIChtX21h
dGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNvcnQgdGhl
IHNldCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKLQotICAgIC8v
IE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBv
ZiBkZWNscy4KLSAgICBpZiAoIW1fY2hlY2tlci5pc0NvbGxlY3RpbmdSdWxlc09ubHkoKSkgewot
ICAgICAgICAvLyBGSVhNRTogVGhpcyBzdWNrcywgdGhlIGluc3BlY3RvciBzaG91bGQgZ2V0IHRo
ZSBzdHlsZSBmcm9tIHRoZSB2aXNpdGVkIHN0eWxlIGl0c2VsZi4KLSAgICAgICAgYm9vbCBzd2Fw
VmlzaXRlZFVudmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9T
dGF0ZShtX2VsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgICAgICBpZiAobV9zdHlsZSAmJiBtX21hdGNoZWRSdWxlc1tpXS0+Y29udGFpbnNVbmNvbW1v
bkF0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0QWZmZWN0
ZWRCeVVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3JzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBs
aW5rTWF0Y2hUeXBlID0gbV9tYXRjaGVkUnVsZXNbaV0tPmxpbmtNYXRjaFR5cGUoKTsKLSAgICAg
ICAgICAgIGlmIChzd2FwVmlzaXRlZFVudmlzaXRlZCAmJiBsaW5rTWF0Y2hUeXBlICYmIGxpbmtN
YXRjaFR5cGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCkKLSAgICAgICAgICAgICAgICBs
aW5rTWF0Y2hUeXBlID0gKGxpbmtNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZp
c2l0ZWQpID8gU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmsgOiBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoVmlzaXRlZDsKLSAgICAgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNoZWRS
dWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpLCBsaW5rTWF0Y2hUeXBlKTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNo
ZWRSdWxlcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQotICAg
ICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgICAg
ICAgICBtX3J1bGVMaXN0LT5hcHBlbmQobV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKSk7Ci0gICAg
ICAgIH0KLSAgICB9CiB9CiAKIGNsYXNzIE1hdGNoaW5nVUFSdWxlc1Njb3BlIHsKQEAgLTc2NSw2
ICs4NDUsMzYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKICAg
ICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCks
IGNvbXBhcmVSdWxlcyk7CiB9CiAKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydEFuZFRyYW5z
ZmVyTWF0Y2hlZFJ1bGVzKCkKK3sKKyAgICAvLyBJZiB3ZSBkaWRuJ3QgbWF0Y2ggYW55IHJ1bGVz
LCB3ZSdyZSBkb25lLgorICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFNvcnQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzLgorICAgIHN0
ZDo6c29ydChtX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQoKSwgY29t
cGFyZVJ1bGVzKTsKKworICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVs
ZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNscy4KKyAgICBpZiAobV9jaGVja2VyLmlzQ29sbGVj
dGluZ1J1bGVzT25seSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21h
dGNoZWRSdWxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQor
ICAgICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAg
ICAgICAgICBtX3J1bGVMaXN0LT5hcHBlbmQobV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKSk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzdWNrcywgdGhl
IGluc3BlY3RvciBzaG91bGQgZ2V0IHRoZSBzdHlsZSBmcm9tIHRoZSB2aXNpdGVkIHN0eWxlIGl0
c2VsZi4KKyAgICAgICAgYm9vbCBzd2FwVmlzaXRlZFVudmlzaXRlZCA9IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShtX2VsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1
ZG9WaXNpdGVkKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1
bGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAobV9zdHlsZSAmJiBtX21hdGNoZWRS
dWxlc1tpXS0+Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0QWZmZWN0ZWRCeVVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3JzKCk7
CisgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbV9tYXRjaGVkUnVsZXNbaV0t
PmxpbmtNYXRjaFR5cGUoKTsKKyAgICAgICAgICAgIGlmIChzd2FwVmlzaXRlZFVudmlzaXRlZCAm
JiBsaW5rTWF0Y2hUeXBlICYmIGxpbmtNYXRjaFR5cGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRj
aEFsbCkKKyAgICAgICAgICAgICAgICBsaW5rTWF0Y2hUeXBlID0gKGxpbmtNYXRjaFR5cGUgPT0g
U2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpID8gU2VsZWN0b3JDaGVja2VyOjpNYXRjaExp
bmsgOiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsKKyAgICAgICAgICAgIGFkZE1hdGNo
ZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpLCBs
aW5rTWF0Y2hUeXBlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7CiAgICAgbWF0Y2hVQVJ1
bGVzKHJlc3VsdCk7CkBAIC04MTcsNyArOTI3LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAgICAgCiAgICAgLy8gQ2hlY2sgdGhl
IHJ1bGVzIGluIGF1dGhvciBzaGVldHMgbmV4dC4KICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMpCi0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgcmVzdWx0
LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0Lmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7CisgICAgICAg
IG1hdGNoQXV0aG9yUnVsZXMocmVzdWx0LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0Lmxhc3RBdXRo
b3JSdWxlLCBmYWxzZSk7CiAgICAgICAgIAogICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0
eWxlIGF0dHJpYnV0ZS4KICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9z
dHlsZWRFbGVtZW50KSB7CkBAIC04ODAsNiArOTkwLDggQEAgTm9kZSogQ1NTU3R5bGVTZWxlY3Rv
cjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9k
ZUMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNTdHls
ZWRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiAwOworICAgIGlmIChwYXJlbnQtPmhhc1Njb3Bl
ZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgIHJldHVybiAwOwogICAgIFN0eWxlZEVsZW1lbnQq
IHAgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50KTsKICAgICBpZiAocC0+aW5s
aW5lU3R5bGVEZWNsKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtODk1LDggKzEwMDcsMTAgQEAg
Tm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQs
IHVuc2lnbmVkJiB2aXNpdGVkTm9kZUMKICAgICAvLyB3aWxsIG5ldmVyIGdvIGRlZXBlciB0aGFu
IGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkIGxldmVscyBpbnRvIHJlY3Vyc2lvbi4KICAgICB2
aXNpdGVkTm9kZUNvdW50ICs9IGNTdHlsZVNlYXJjaFRocmVzaG9sZDsKICAgICB3aGlsZSAodGhp
c0NvdXNpbikgewotICAgICAgICB3aGlsZSAoY3VycmVudE5vZGUpIHsKKyAgICAgICAgZm9yICg7
IGN1cnJlbnROb2RlOyBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wcmV2aW91c1NpYmxpbmco
KSkgewogICAgICAgICAgICAgKytzdWJjb3VudDsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Tm9k
ZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChjdXJyZW50Tm9kZSktPmhhc1Njb3BlZEhU
TUxTdHlsZUNoaWxkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBp
ZiAoY3VycmVudE5vZGUtPnJlbmRlclN0eWxlKCkgPT0gcGFyZW50U3R5bGUgJiYgY3VycmVudE5v
ZGUtPmxhc3RDaGlsZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGZvciB1bnVzZWQg
cmVzZXJ2ZWQgdHJpZXMuCiAgICAgICAgICAgICAgICAgdmlzaXRlZE5vZGVDb3VudCAtPSBjU3R5
bGVTZWFyY2hUaHJlc2hvbGQgLSBzdWJjb3VudDsKQEAgLTkwNCw3ICsxMDE4LDYgQEAgTm9kZSog
Q1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2ln
bmVkJiB2aXNpdGVkTm9kZUMKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzdWJjb3Vu
dCA+PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wcmV2aW91c1NpYmxpbmcoKTsK
ICAgICAgICAgfQogICAgICAgICBjdXJyZW50Tm9kZSA9IGxvY2F0ZUNvdXNpbkxpc3QodGhpc0Nv
dXNpbi0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKICAgICAgICAgdGhpc0Nv
dXNpbiA9IGN1cnJlbnROb2RlOwpAQCAtMTAzMCw2ICsxMTQzLDkgQEAgYm9vbCBDU1NTdHlsZVNl
bGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9kZSogbm9kZSkgY29uc3QKICAgICBp
ZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoZWxl
bWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKKyAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgYm9vbCBpc0NvbnRyb2wgPSBlbGVtZW50LT5pc0Zvcm1D
b250cm9sRWxlbWVudCgpOwogCiAgICAgaWYgKGlzQ29udHJvbCAhPSBtX2VsZW1lbnQtPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCkpCkBAIC0xMTAxLDYgKzEyMTcsOCBAQCBSZW5kZXJTdHlsZSogQ1NT
U3R5bGVTZWxlY3Rvcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgICAgICByZXR1cm4gMDsKICAg
ICBpZiAocGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCiAgICAgICAg
IHJldHVybiAwOworICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNo
aWxkKCkpCisgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ2hlY2sgcHJldmlvdXMgc2libGlu
Z3MgYW5kIHRoZWlyIGNvdXNpbnMuCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwpAQCAtMTQxOCw3
ICsxNTM2LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNl
dWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywKIAogICAgIGlmIChtX21hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcykgewogICAgICAgICBtYXRjaFJ1bGVzKG1fdXNlclN0eWxlLmdldCgp
LCBtYXRjaFJlc3VsdC5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5sYXN0VXNlclJ1bGUsIGZh
bHNlKTsKLSAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBtYXRjaFJlc3Vs
dC5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0Lmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7Cisg
ICAgICAgIG1hdGNoQXV0aG9yUnVsZXMobWF0Y2hSZXN1bHQuZmlyc3RBdXRob3JSdWxlLCBtYXRj
aFJlc3VsdC5sYXN0QXV0aG9yUnVsZSwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChtX21hdGNo
ZWREZWNscy5pc0VtcHR5KCkpCkBAIC0xNDU1LDYgKzE1NzMsNyBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAg
ICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRleCk7CiAgICAgbWF0Y2hQYWdl
UnVsZXMoZGVmYXVsdFByaW50U3R5bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgbWF0
Y2hQYWdlUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Cisg
ICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFsIFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBh
cyBwZXIgdGhlIEhUTUw1IHNwZWMuCiAgICAgbWF0Y2hQYWdlUnVsZXMobV9hdXRob3JTdHlsZS5n
ZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7
CiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CkBAIC0xNzA0LDcgKzE4MjMsOSBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrUmVnaW9uU3R5bGUoRWxlbWVudCogZSkKICAgICBm
b3IgKFZlY3RvcjxSZWZQdHI8Q1NTUmVnaW9uU3R5bGVSdWxlPiA+OjppdGVyYXRvciBpdCA9IG1f
cmVnaW9uU3R5bGVSdWxlcy5iZWdpbigpOyBpdCAhPSBtX3JlZ2lvblN0eWxlUnVsZXMuZW5kKCk7
ICsraXQpIHsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiByZWdpb25TZWxlY3Rvckxp
c3QgPSAoKml0KS0+c2VsZWN0b3JMaXN0KCk7CiAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMg
PSByZWdpb25TZWxlY3Rvckxpc3QuZmlyc3QoKTsgczsgcyA9IHJlZ2lvblNlbGVjdG9yTGlzdC5u
ZXh0KHMpKSB7Ci0gICAgICAgICAgICBpZiAobV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocywgZSkp
CisgICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9uJ3QgYWRkIEAtd2Via2l0
LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LCAKKyAg
ICAgICAgICAgIC8vIHNvIGFsbCByZWdpb24gcnVsZXMgYXJlIGdsb2JhbCBieSBkZWZhdWx0LiBW
ZXJpZnkgd2hldGhlciB0aGF0IGNhbiBzdGFuZCBvciBuZWVkcyBjaGFuZ2luJy4KKyAgICAgICAg
ICAgIGlmIChtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzLCBlLCAwKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE3NjMsNyArMTg4NCw3IEBAIFBh
c3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNG
b3JFbGVtZW50KEVsZW1lbnQqIGUsCiAgICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVz
VG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhl
IHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCi0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHls
ZS5nZXQoKSwgZHVtbXkuZmlyc3RBdXRob3JSdWxlLCBkdW1teS5sYXN0QXV0aG9yUnVsZSwgcnVs
ZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhk
dW1teS5maXJzdEF1dGhvclJ1bGUsIGR1bW15Lmxhc3RBdXRob3JSdWxlLCBydWxlc1RvSW5jbHVk
ZSAmIEVtcHR5Q1NTUnVsZXMpOwogCiAgICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsK
ICAgICB9CkBAIC0xOTQ1LDcgKzIwNjYsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKENT
U1BhZ2VSdWxlKiBydWxlKQogICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChSdWxlRGF0YShydWxlLCBy
dWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCBtX3BhZ2VSdWxlcy5zaXplKCkpKTsKIH0KIAot
dm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29u
c3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNl
bGVjdG9yKQordm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBz
aGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9y
KiBzdHlsZVNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBzY29wZSkKIHsKICAgICBpZiAoIXNoZWV0
KQogICAgICAgICByZXR1cm47CkBAIC0xOTY2LDcgKzIwODcsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFk
ZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yJgogICAgICAgICBlbHNlIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewogICAgICAg
ICAgICAgQ1NTSW1wb3J0UnVsZSogaW1wb3J0ID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+
KHJ1bGUpOwogICAgICAgICAgICAgaWYgKCFpbXBvcnQtPm1lZGlhKCkgfHwgbWVkaXVtLmV2YWwo
aW1wb3J0LT5tZWRpYSgpLCBzdHlsZVNlbGVjdG9yKSkKLSAgICAgICAgICAgICAgICBhZGRSdWxl
c0Zyb21TaGVldChpbXBvcnQtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCBzdHlsZVNlbGVjdG9yKTsK
KyAgICAgICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChpbXBvcnQtPnN0eWxlU2hlZXQoKSwg
bWVkaXVtLCBzdHlsZVNlbGVjdG9yLCBzY29wZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBp
ZiAocnVsZS0+aXNNZWRpYVJ1bGUoKSkgewogICAgICAgICAgICAgQ1NTTWVkaWFSdWxlKiByID0g
c3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4ocnVsZSk7CkBAIC0xOTg0LDIwICsyMTA1LDQxIEBA
IHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNv
bnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQg
dGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VS
dWxlKj4oY2hpbGRJdGVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3It
PmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcg
NzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hl
ZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmluZCBhIHdh
eSB0byBoYXZlIHNjb3BlZCBAZm9udC1mYWNlIHJ1bGVzLgorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzY29wZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENTU0Zv
bnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4o
Y2hpbGRJdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5m
b250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRJdGVt
LT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0
PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGlsZEl0ZW0pKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjIpOiBX
ZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRo
ZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIGEgd2F5IHRvIGhhdmUg
c2NvcGVkIEBrZXlmcmFtZSBydWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2Nv
cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJh
bWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4oY2hpbGRJdGVtKSk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9ICAgLy8gZm9yIHJ1bGVz
CiAgICAgICAgICAgICB9ICAgLy8gaWYgcnVsZXMKICAgICAgICAgfSBlbHNlIGlmIChydWxlLT5p
c0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAgICAgICAgIC8vIEFkZCB0
aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgotICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VS
dWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxlKTsK
LSAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1
bGUoZm9udEZhY2VSdWxlKTsKLSAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0tleWZyYW1lc1J1
bGUoKSkKLSAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGlj
X2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KHJ1bGUpKTsKLSAgICAgICAgZWxzZSBpZiAo
cnVsZS0+aXNSZWdpb25TdHlsZVJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKQorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9udC1m
YWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAg
ICAgICAvLyBGaW5kIGEgd2F5IHRvIGhhdmUgc2NvcGVkIEBmb250LWZhY2UgcnVsZXMuCisgICAg
ICAgICAgICBpZiAoIXNjb3BlKSB7CisgICAgICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VS
dWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxlKTsK
KyAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZh
Y2VSdWxlKGZvbnRGYWNlUnVsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
cnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0
NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMg
Zm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAvLyBGaW5kIGEgd2F5IHRvIGhhdmUgc2NvcGVk
IEBrZXlmcmFtZSBydWxlcy4KKyAgICAgICAgICAgIGlmICghc2NvcGUpCisgICAgICAgICAgICAg
ICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlKj4ocnVsZSkpOworICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9u
U3R5bGVSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgeworICAgICAgICAgICAgLy8gRklYTUUgKEJV
RyA3MjQ3Mik6IFdlIGRvbid0IGFkZCBALXdlYmtpdC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVkIHN0
eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFk
ZFJlZ2lvblN0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NSZWdpb25TdHlsZVJ1bGUqPihydWxlKSk7
CisgICAgICAgIH0KICAgICB9CiAgICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCkKICAg
ICAgICAgc2hyaW5rVG9GaXQoKTsKQEAgLTIxMDEsNiArMjI0MywyNyBAQCB2b2lkIFJ1bGVTZXQ6
OnNocmlua1RvRml0KCkKICAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOwogfQogCitTY29w
ZWRSdWxlU2V0czo6flNjb3BlZFJ1bGVTZXRzKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9z
Y29wZWRSdWxlU2V0TWFwKTsKK30KKworUnVsZVNldCogU2NvcGVkUnVsZVNldHM6OmVuc3VyZUV4
aXN0cyhjb25zdCBFbGVtZW50KiBzY29wZSkKK3sKKyAgICBSdWxlU2V0KiBydWxlU2V0ID0gbV9z
Y29wZWRSdWxlU2V0TWFwLmdldChzY29wZSk7CisgICAgaWYgKCFydWxlU2V0KSB7CisgICAgICAg
IHJ1bGVTZXQgPSBuZXcgUnVsZVNldDsKKyAgICAgICAgbV9zY29wZWRSdWxlU2V0TWFwLnNldChz
Y29wZSwgcnVsZVNldCk7CisgICAgfQorICAgIHJldHVybiBydWxlU2V0OworfQorCit2b2lkIFNj
b3BlZFJ1bGVTZXRzOjpjb2xsZWN0RmVhdHVyZXMoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMm
IGZlYXR1cmVzKSBjb25zdAoreworICAgIGZvciAoU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Njb3BlZFJ1bGVTZXRNYXAuYmVnaW4oKSwgaXRFbmQgPSBtX3Njb3BlZFJ1
bGVTZXRNYXAuZW5kKCk7IGl0ICE9IGl0RW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5j
b2xsZWN0RmVhdHVyZXMoZmVhdHVyZXMpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAvLyB0aGlzIGlzIG1vc3RseSBib3Jpbmcgc3R1ZmYgb24gaG93IHRvIGFwcGx5IGEg
Y2VydGFpbiBydWxlIHRvIHRoZSByZW5kZXJzdHlsZS4uLgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuaAppbmRleCA5MjkxMGIzYzhhYzU3OWMxMzYyOWUwZTRhNjFmNTI5MjU1YzFm
ODc0Li42YTdlMWUyZWU4MjZkNWNmZWU5YTk1MDM2YTRhODIzZDA2MjdhNzViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKQEAgLTY2LDYgKzY2LDcgQEAgY2xhc3MgTWVkaWFR
dWVyeUV2YWx1YXRvcjsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSdWxlRGF0YTsKIGNsYXNzIFJ1bGVT
ZXQ7CitjbGFzcyBTY29wZWRSdWxlU2V0czsKIGNsYXNzIFNldHRpbmdzOwogY2xhc3MgU3R5bGVJ
bWFnZTsKIGNsYXNzIFN0eWxlUGVuZGluZ0ltYWdlOwpAQCAtMjU1LDEwICsyNTYsMTMgQEAgcHJp
dmF0ZToKICAgICB9OwogICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYpOwogICAg
IHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0Jik7CisgICAgdm9pZCBtYXRjaEF1dGhvclJ1
bGVzKGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAg
IHZvaWQgbWF0Y2hSdWxlU2V0KFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hSdWxl
c0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgYm9vbCBmYXN0
UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKICAgICB2b2lkIHNvcnRNYXRj
aGVkUnVsZXMoKTsKKyAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcygpOwogCiAg
ICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJik7CiAKQEAgLTI3Niw2ICsyODAs
NyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsK
IAogICAgIE93blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0eWxlOworICAgIE93blB0cjxTY29wZWRS
dWxlU2V0cz4gbV9zY29wZWRBdXRob3JTdHlsZXM7CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdXNl
clN0eWxlOwogCiAgICAgRmVhdHVyZXMgbV9mZWF0dXJlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHAKaW5kZXggMmM1YzczMjAwZDE5N2FmZDk2ZDA5YmU2OWU5ZWFhN2ZhOTlj
MWY5ZS4uZjE0ZjhhZTgwZDJiN2EyMGQ2ZjA2NWUwM2E0MWY5ZWY3OGQwMmZiMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTk2LDcgKzk2LDEzIEBAIHZvaWQgU2Vs
ZWN0b3JDaGVja2VyOjpwdXNoUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBwYXJlbnQpCiAgICAg
QVNTRVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKICAgICBBU1NFUlQobV9wYXJlbnRT
dGFjay5pc0VtcHR5KCkgfHwgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCA9PSBwYXJlbnQt
PnBhcmVudE9ySG9zdEVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKCFtX3BhcmVudFN0YWNrLmlzRW1w
dHkoKSB8fCAhcGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCkpOwotICAgIG1fcGFyZW50U3Rh
Y2suYXBwZW5kKFBhcmVudFN0YWNrRnJhbWUocGFyZW50KSk7CisgICAgLy8gUG9pbnQgdG8gZnJh
bWUgY29udGFpbmluZyB0aGUgY2xvc2VzdCBzdHlsZSBzY29wZSAob3IgbGVhdmUgYXQgMCBpZiBu
b25lKS4KKyAgICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAg
ICBtX3BhcmVudFN0YWNrLmFwcGVuZChQYXJlbnRTdGFja0ZyYW1lKHBhcmVudCwgbV9wYXJlbnRT
dGFjay5zaXplKCkpKTsKKyAgICBlbHNlIGlmICghbV9wYXJlbnRTdGFjay5pc0VtcHR5KCkpCisg
ICAgICAgIG1fcGFyZW50U3RhY2suYXBwZW5kKFBhcmVudFN0YWNrRnJhbWUocGFyZW50LCBtX3Bh
cmVudFN0YWNrLmxhc3QoKS5jbG9zZXN0U3R5bGVTY29wZUZyYW1lSW5kZXgpKTsKKyAgICBlbHNl
CisgICAgICAgIG1fcGFyZW50U3RhY2suYXBwZW5kKFBhcmVudFN0YWNrRnJhbWUocGFyZW50LCAt
MSkpOwogICAgIFBhcmVudFN0YWNrRnJhbWUmIHBhcmVudEZyYW1lID0gbV9wYXJlbnRTdGFjay5s
YXN0KCk7CiAgICAgLy8gTWl4IHRhZ3MsIGNsYXNzIG5hbWVzIGFuZCBpZHMgaW50byBzb21lIHNv
cnQgb2Ygd2VpcmQgYm91aWxsYWJhaXNzZS4KICAgICAvLyBUaGUgZmlsdGVyIGlzIHVzZWQgZm9y
IGZhc3QgcmVqZWN0aW9uIG9mIGNoaWxkIGFuZCBkZXNjZW5kYW50IHNlbGVjdG9ycy4KQEAgLTE0
MSw3ICsxNDcsNyBAQCB2b2lkIFNlbGVjdG9yQ2hlY2tlcjo6cHVzaFBhcmVudChFbGVtZW50KiBw
YXJlbnQpCiAgICAgICAgIC8vIHN0eWxlIHJlY2FsYyBpbiB0aGUgbWlkZGxlIG9mIHRyZWUgYnVp
bGRpbmcuIFJlc2V0IHRoZSBzdGFjayBpZiB3ZSBzZWUgYSBuZXcgcm9vdCBlbGVtZW50LgogICAg
ICAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOwogICAgICAgICBtX2FuY2Vz
dG9ySWRlbnRpZmllckZpbHRlci0+Y2xlYXIoKTsKLSAgICAgICAgbV9wYXJlbnRTdGFjay5yZXNp
emUoMCk7CisgICAgICAgIG1fcGFyZW50U3RhY2suY2xlYXIoKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOwogICAgICAgICAvLyBXZSBt
YXkgZ2V0IGludm9rZWQgZm9yIHNvbWUgcmFuZG9tIGVsZW1lbnRzIGluIHNvbWUgd2Fja3kgY2Fz
ZXMgZHVyaW5nIHN0eWxlIHJlc29sdmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgK
aW5kZXggNzYwYmE1MjA3YmU1NzRjNWRmZThhOWEwNGI5NzAwZTRkMGNkZjI4ZC4uYTU0N2RkMDYw
ODcyOTEzNWIzYWQ3NTA2YzI1YjE4MzY5NTRlYzZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuaApAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFNlbGVjdG9y
TWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxlY3RvckZh
aWxzQ29tcGxldGVseSB9OwogICAgIGVudW0gVmlzaXRlZE1hdGNoVHlwZSB7IFZpc2l0ZWRNYXRj
aERpc2FibGVkLCBWaXNpdGVkTWF0Y2hFbmFibGVkIH07CisKICAgICBib29sIGNoZWNrU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3RvciA9
IGZhbHNlKSBjb25zdDsKICAgICBTZWxlY3Rvck1hdGNoIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0
b3IqLCBFbGVtZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3Rv
ciwgVmlzaXRlZE1hdGNoVHlwZSwgUmVuZGVyU3R5bGUqID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1l
bnRQYXJlbnRTdHlsZSA9IDApIGNvbnN0OwogICAgIHN0YXRpYyBib29sIGlzRmFzdENoZWNrYWJs
ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKik7CkBAIC05MCw2ICs5MSwxMSBAQCBwdWJsaWM6
CiAgICAgZW51bSBMaW5rTWF0Y2hNYXNrIHsgTWF0Y2hMaW5rID0gMSwgTWF0Y2hWaXNpdGVkID0g
MiwgTWF0Y2hBbGwgPSBNYXRjaExpbmsgfCBNYXRjaFZpc2l0ZWQgfTsKICAgICBzdGF0aWMgdW5z
aWduZWQgZGV0ZXJtaW5lTGlua01hdGNoVHlwZShjb25zdCBDU1NTZWxlY3RvciopOwogCisgICAg
Ly8gVGhlIGZvbGxvd2luZyBtZXRob2RzIHdvcmsgb25seSB3aXRoIGEgY29uc2lzdGVudCBQYXJl
bnRTdGFja0ZyYW1lIHZlY3RvcgorICAgIEVsZW1lbnQqIGdldEVsZW1lbnRXaXRoSW5kZXgoaW50
IGluZGV4KSBjb25zdDsgLy8gSW5kZXggZWxlbWVudHMsIHdpdGggdGhlIHJvb3QgZWxlbWVudCBz
dGFydGluZyBhdCAwLgorICAgIGludCBnZXRJbm5lcm1vc3RTdHlsZVNjb3BlRWxlbWVudEluZGV4
KCkgY29uc3Q7IC8vIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlu
cyB0aGUgY2xvc2VzdCA8c3R5bGUgc2NvcGVkPgorICAgIGludCBnZXRFbmNsb3NpbmdTdHlsZVNj
b3BlRWxlbWVudEluZGV4KGludCBpbmRleCk7IC8vIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGNs
b3Nlc3QgYW5jZXN0b3IgKCEpIGVsZW1lbnQgdGhhdCBjb250YWlucyA8c3R5bGUgc2NvcGVkPiwg
c3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gaW5kZXgKKwogcHJpdmF0ZToKICAgICBib29sIGNoZWNr
T25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1
ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSwgUmVuZGVyU3R5bGUqLCBS
ZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdDsKICAgICBib29sIGNoZWNrU2Ny
b2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykg
Y29uc3Q7CkBAIC0xMTIsOSArMTE4LDkgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIEhhc2hTZXQ8
TGlua0hhc2gsIExpbmtIYXNoSGFzaD4gbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGU7CiAK
ICAgICBzdHJ1Y3QgUGFyZW50U3RhY2tGcmFtZSB7Ci0gICAgICAgIFBhcmVudFN0YWNrRnJhbWUo
KSB7IH0KLSAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBlbGVtZW50KSA6IGVsZW1l
bnQoZWxlbWVudCkgeyB9Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7CisgICAgICAgIFBhcmVu
dFN0YWNrRnJhbWUoRWxlbWVudCogZWxlbWVudCwgc2l6ZV90IHN0eWxlU2NvcGVGcmFtZUluZGV4
KSA6IGVsZW1lbnQoZWxlbWVudCksIGNsb3Nlc3RTdHlsZVNjb3BlRnJhbWVJbmRleChzdHlsZVNj
b3BlRnJhbWVJbmRleCkgeyB9CisgICAgICAgIEVsZW1lbnQqIGNvbnN0IGVsZW1lbnQ7CisgICAg
ICAgIGNvbnN0IGludCBjbG9zZXN0U3R5bGVTY29wZUZyYW1lSW5kZXg7IC8vIGluZGV4IG9mIGNs
b3Nlc3QgUGFyZW50U3RhY2tGcmFtZSB0aGF0IHBvaW50cyB0byBhbiBlbGVtZW50IHRoYXQgaXMg
YSBzdHlsZSBzY29wZSAobWF5IGJlIHRoaXMpLCBvciAtMQogICAgICAgICBWZWN0b3I8dW5zaWdu
ZWQsIDQ+IGlkZW50aWZpZXJIYXNoZXM7CiAgICAgfTsKICAgICBWZWN0b3I8UGFyZW50U3RhY2tG
cmFtZT4gbV9wYXJlbnRTdGFjazsKQEAgLTIwMCw2ICsyMDYsMjQgQEAgaW5saW5lIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBF
bGVtZW50KgogICAgIHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgRWxlbWVudCogU2VsZWN0b3JD
aGVja2VyOjpnZXRFbGVtZW50V2l0aEluZGV4KGludCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoaW5kZXggPj0gMCk7CisgICAgcmV0dXJuIG1fcGFyZW50U3RhY2suYXQoaW5kZXgpLmVsZW1l
bnQ7Cit9CisKK2lubGluZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpnZXRJbm5lcm1vc3RTdHlsZVNj
b3BlRWxlbWVudEluZGV4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXJlbnRTdGFjay5pc0Vt
cHR5KCkgPyAtMSA6IG1fcGFyZW50U3RhY2subGFzdCgpLmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWVJ
bmRleDsKK30KKworaW5saW5lIGludCBTZWxlY3RvckNoZWNrZXI6OmdldEVuY2xvc2luZ1N0eWxl
U2NvcGVFbGVtZW50SW5kZXgoaW50IGluZGV4KQoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxp
bnQ+KG1fcGFyZW50U3RhY2suc2l6ZSgpKSA+PSBpbmRleCk7CisgICAgcmV0dXJuIGluZGV4ID4g
MCA/IG1fcGFyZW50U3RhY2suYXQoaW5kZXggLSAxKS5jbG9zZXN0U3R5bGVTY29wZUZyYW1lSW5k
ZXggOiAtMTsKK30KKworCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDY1OWZjNTgzNWVmZDk2MGE3NmY0
ZTkzNzk3YTc0NGE1ODZiMzlmZTcuLjI4MjE5N2NmMmUxOTcyNmFlMzlkNTQxOTJiYmQyMDFhZDI5
MjBjMmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMS0xMS0yNyAgUm9sYW5kIFN0ZWluZXIg
IDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KKworICAgICAgICA8c3R5bGUgc2NvcGVkPjog
SW1wbGVtZW50IHNjb3BlZCBzdHlsZXNoZWV0cyBhbmQgYmFzaWMgYXBwbGljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTkwCisKKyAgICAg
ICAgVGVzdCB0aGF0IDxzdHlsZSBzY29wZWQ+IGFmZmVjdHMgc3R5bGVzIGFuZCBpcyB1cGRhdGVk
IGNvcnJlY3RseToKKyAgICAgICAgLSkgYmFzaWMgdGVzdAorICAgICAgICAtKSB0ZXN0IHNldHRp
bmcvdW4tc2V0dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlCisgICAgICAgIC0pIHRlc3QgaW5z
ZXJ0aW5nL3JlbW92aW5nIGEgd2hvbGUgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNj
b3BlZC1iYXNpYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQv
c3R5bGUtc2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHls
ZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRt
bDogQWRkZWQuCisKKzIwMTEtMTEtMTYgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgQnVnIDY3NzIwIC0gPHN0eWxlIHNjb3BlZD46IEltcGxl
bWVudCBzZWxlY3RvciBtYXRjaGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Njc3MjAKKworICAgICAgICBUZXN0IHRoYXQgPHN0eWxlIHNjb3BlZD4g
YWZmZWN0cyBzdHlsZXMgYW5kIGlzIHVwZGF0ZWQgY29ycmVjdGx5OgorICAgICAgICAtKSBiYXNp
YyB0ZXN0CisgICAgICAgIC0pIHRlc3Qgc2V0dGluZy91bi1zZXR0aW5nIHRoZSAnc2NvcGVkJyBh
dHRyaWJ1dGUKKyAgICAgICAgLSkgdGVzdCBpbnNlcnRpbmcvcmVtb3ZpbmcgYSB3aG9sZSA8c3R5
bGUgc2NvcGVkPiBlbGVtZW50CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHls
ZS1zY29wZWQtYXR0YWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNj
b3BlZC9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1kZXRhY2guaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0
eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNj
b3BlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sOiBBZGRlZC4KKwogMjAxMS0xMS0xNiAgUm9s
YW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8c3R5
bGUgc2NvcGVkPjogSW1wbGVtZW50IHJlZ2lzdGVyaW5nIG9mIDxzdHlsZSBzY29wZWQ+IHdpdGgg
dGhlIHNjb3BpbmcgZWxlbWVudApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjVmZTA2NzFmYWM2ZTE2ZTMzYTQyYzQyOWFmZWZlZGQxYTM1YWY4Y2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLWF0dGFjaC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCBhdHRhY2hpbmcg
YSBuZXcgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQK
KworVGV4dAorVGV4dAorCistLS0gT1JJR0lOQUwgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTog
cmdiKDAsIDAsIDApCitTMjogcmdiKDAsIDAsIDApCitQMjogcmdiKDAsIDAsIDApCitTMzogcmdi
KDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gQUZURVIgQVRUQUNISU5HIDxTVFlMRSBT
Q09QRUQ+IC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigy
NTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2Io
MCwgMCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2guaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjAzZGY1NWRlNDliZjZjZmUxZjhjNmFkNDBiMGU2NTBjZjhhZTZlNwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0
YWNoLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24g
bG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4n
KSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7Cisg
ICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAg
ICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0
eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gdGVzdEFsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3Qo
J1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsK
KyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAg
ICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3Rz
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAg
ICAgICAgICAgdGVzdEFsbCgpOworCisgICAgICAgICAgICBsb2coJy0tLSBBRlRFUiBBVFRBQ0hJ
TkcgPFNUWUxFIFNDT1BFRD4gLS0tJyk7CisgICAgICAgICAgICB2YXIgZGl2RWxlbSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdESVYnKTsKKyAgICAgICAgICAgIHZhciBzdHlsZUVsZW0gPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOworICAgICAgICAgICAgc3R5bGVFbGVtLnNl
dEF0dHJpYnV0ZSgnc2NvcGVkJywgdHJ1ZSk7CisgICAgICAgICAgICBzdHlsZUVsZW0uaW5uZXJI
VE1MID0gJ2RpdiB7IGNvbG9yOiByZWQ7IH0gcCB7IGNvbG9yOiBncmVlbjsgfSc7CisgICAgICAg
ICAgICBkaXZFbGVtLmluc2VydEJlZm9yZShzdHlsZUVsZW0sIGRpdkVsZW0uZmlyc3RDaGlsZCk7
CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRl
c3RBbGwoKTsKKyAgICAgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAg
ICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9
LCAwKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2Nz
cyIgc2NvcGVkPgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgYXR0YWNo
aW5nIGEgbmV3ICZsdDtzdHlsZSBzY29wZWQmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAg
ICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8
L3A+CisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0iRElWIj4KKyAgICAgICAgPHNwYW4gaWQ9IlMy
Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+Cisg
ICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBp
ZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHls
ZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU5MTJmZGMwZjgzZWMxNDkzYTQyYzI1OWIzZjE4MmJiMGY1NmM3MTUKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LWJhc2ljLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQyIEBACitUZXN0IDxzdHlsZSBzY29wZWQ+
CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitU
ZXh0CisKK1RleHQKK1RleHQKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorLS0tIENPTVBVVEVE
IFNUWUxFUyAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1IxOiByZ2Io
MCwgMCwgMCkKK0UxOiByZ2IoMCwgMCwgMCkKKworUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdi
KDAsIDEyOCwgMCkKK1IyOiByZ2IoMCwgMCwgMjU1KQorCitTMzogcmdiKDAsIDAsIDApCitQMzog
cmdiKDAsIDAsIDApCitSMzogcmdiKDAsIDAsIDApCitFMzogcmdiKDAsIDAsIDApCisKK1M0OiBy
Z2IoMCwgMCwgMCkKK1A0OiByZ2IoMCwgMCwgMCkKK1I0OiByZ2IoMCwgMCwgMCkKK0U0OiByZ2Io
MCwgMCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmZlNWI0MzFhOTE2YTM5YzY5ZmJkZjg2Njg2NGFlOGRmZjNkNjhjZWUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2lj
Lmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9n
KG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nv
bnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAg
ICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAg
ICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxl
KGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQ09NUFVURUQgU1RZ
TEVTIC0tLScpOworCisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgn
UDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1IxJyk7CisgICAgICAgICAgICB0ZXN0KCdFMScpOwor
ICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAg
ICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUjInKTsKKyAgICAgICAgICAgIGxvZygn
Jyk7CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAg
ICAgICAgICAgIHRlc3QoJ1IzJyk7CisgICAgICAgICAgICB0ZXN0KCdFMycpOworICAgICAgICAg
ICAgbG9nKCcnKTsKKyAgICAgICAgICAgIHRlc3QoJ1M0Jyk7CisgICAgICAgICAgICB0ZXN0KCdQ
NCcpOworICAgICAgICAgICAgdGVzdCgnUjQnKTsKKyAgICAgICAgICAgIHRlc3QoJ0U0Jyk7CisK
KyAgICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICB9CisgICAgPC9z
Y3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICAgICAgYm9keSB7IGNvbG9y
OiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3Rz
KCk7Ij4KKyAgICA8cD5UZXN0ICZsdDtzdHlsZSBzY29wZWQmZ3Q7PC9wPgorICAgIDxkaXYgY2xh
c3M9ImZvbyI+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAg
aWQ9IlAxIj5UZXh0PC9wPgorICAgICAgICA8cHJlIGlkID0gIlIxIiBjbGFzcz0iYmFyIj5UZXh0
PC9wcmU+CisgICAgICAgIDxwcmUgaWQ9IkUxIiBjbGFzcz0iYmF6Ij5UZXh0PC9wcmU+CisgICAg
PC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxzdHlsZSB0eXBl
PSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0K
KyAgICAgICAgICAgICAgICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgICAgICAgICAgZGl2
IC5iYXIgeyBjb2xvcjogYmx1ZTsgfQorICAgICAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgICAg
IDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwv
cD4KKyAgICAgICAgICAgIDxwcmUgaWQ9IlIyIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAg
ICAgIDwvZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxw
IGlkPSJQMyI+VGV4dDwvcD4KKyAgICAgICAgPHByZSBpZCA9ICJSMyIgY2xhc3M9ImJhciI+VGV4
dDwvcHJlPgorICAgICAgICA8cHJlIGlkPSJFMyIgY2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAg
IDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImZvbyI+CisgICAgICAgIDxzcGFuIGlkPSJTNCI+VGV4
dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlA0Ij5UZXh0PC9wPgorICAgICAgICA8cHJlIGlkID0g
IlI0IiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgIDxwcmUgaWQ9IkU0IiBjbGFzcz0i
YmF6Ij5UZXh0PC9wcmU+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHls
ZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDdlZjY1MzE3NDA3MmI3ODg3ZjdkZjNkYWJmOTFhOWE3MzQwZTNlOAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29w
ZWQtZGV0YWNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitUZXN0IGRldGFjaGluZyBh
IDxzdHlsZSBzY29wZWQ+IGVsZW1lbnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1Rl
eHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigw
LCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2Io
MCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBBRlRFUiBERVRBQ0hJTkcgPFNUWUxFIFND
T1BFRD4gLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDAs
IDAsIDApCitQMjogcmdiKDAsIDAsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAs
IDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRj
OGJmNmE4NjYxMjcwZjg2MWNiODU1OGFjMzI3YTE4NzcxZjM5ZWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC5o
dG1sCkBAIC0wLDAgKzEsNzIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyht
c2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25z
b2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAg
ICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShl
bGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScp
OworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAg
ICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAg
IHRlc3QoJ1AzJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAg
ICAgIHRlc3RBbGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgREVUQUNISU5HIDxT
VFlMRSBTQ09QRUQ+IC0tLScpOworICAgICAgICAgICAgdmFyIGRpdkVsZW0gPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnRElWJyk7CisgICAgICAgICAgICB2YXIgc3R5bGVFbGVtID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxFJyk7CisgICAgICAgICAgICBkaXZFbGVtLnJlbW92ZUNo
aWxkKHN0eWxlRWxlbSk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hF
RCAtLS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHls
ZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9
CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAg
IDxwPlRlc3QgZGV0YWNoaW5nIGEgJmx0O3N0eWxlIHNjb3BlZCZndDsgZWxlbWVudDwvcD4KKyAg
ICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlk
PSJQMSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJESVYiPgorICAgICAgICA8
c3R5bGUgaWQ9IlNUWUxFIiB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgZGl2
IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAg
ICA8L3N0eWxlPgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxw
IGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBp
ZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rp
dj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVt
b3ZlLXNjb3BlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29w
ZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNh
MjA1ODdkZjVhZmZmNjJkYzI3ZjYyYWFlYzQ1MGIzMzc2NWNhYzgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1z
Y29wZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1Rlc3QgcmVtb3ZpbmcgdGhlICdz
Y29wZWQnIGF0dHJpYnV0ZSBvbiBhIDxzdHlsZT4gZWxlbWVudAorCitUZXh0CitUZXh0CisKK1Rl
eHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0gT1JJR0lOQUwgLS0tCitTMTogcmdiKDAsIDAs
IDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4
LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEFGVEVSIFVOLVNF
VFRJTkcgQFNDT1BFRCAtLS0KK1MxOiByZ2IoMjU1LCAwLCAwKQorUDE6IHJnYigwLCAxMjgsIDAp
CitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigyNTUsIDAs
IDApCitQMzogcmdiKDAsIDEyOCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2Nv
cGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LXJlbW92ZS1zY29wZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYWFmMzc3NGNhYjJmYTc0ZmQ3MGM2MTFh
ZTAzMmJhMTE4NDNkN2VkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKQEAgLTAsMCArMSw3
MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgewor
ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcg
KyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFBy
b3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVz
dEFsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0
ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1Ay
Jyk7CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOwor
CisgICAgICAgICAgICBsb2coJy0tLSBBRlRFUiBVTi1TRVRUSU5HIEBTQ09QRUQgLS0tJyk7Cisg
ICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU1RZTEUnKS5yZW1vdmVBdHRyaWJ1
dGUoJ3Njb3BlZCcpOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQg
LS0tJyk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUg
dHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQor
ICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8
cD5UZXN0IHJlbW92aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSAmbHQ7c3R5bGUmZ3Q7
IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9zcGFu
PgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAg
ICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAg
ICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0K
KyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAg
ICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAg
PHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+Cisg
ICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
YTBjNzk2M2M5N2M0NzgwMWUwODQ5Njc1MTEzNzIyMmM0NjY1ZDFjCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2Nv
cGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitUZXN0IHNldHRpbmcgdGhlICdzY29w
ZWQnIGF0dHJpYnV0ZSBvbiBhIDxzdHlsZT4gZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQK
K1RleHQKKworVGV4dAorVGV4dAorCistLS0gT1JJR0lOQUwgLS0tCitTMTogcmdiKDI1NSwgMCwg
MCkKK1AxOiByZ2IoMCwgMTI4LCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEy
OCwgMCkKK1MzOiByZ2IoMjU1LCAwLCAwKQorUDM6IHJnYigwLCAxMjgsIDApCistLS0gQUZURVIg
U0VUVElORyBAU0NPUEVEIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQor
UzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkK
K1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29w
ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45OTAzYmQ0MWUyOTlkMDM1MDFjZWYxMDU0MGZlMTk1MDBjNGU4
MmVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0
ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZh
dWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2Nv
bG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEFsbCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAg
ICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAg
ICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZygnLS0t
IE9SSUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOworCisgICAgICAgICAgICBs
b2coJy0tLSBBRlRFUiBTRVRUSU5HIEBTQ09QRUQgLS0tJyk7CisgICAgICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnU1RZTEUnKS5zZXRBdHRyaWJ1dGUoJ3Njb3BlZCcsIHRydWUpOwor
ICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0
QWxsKCk7CisgICAgICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwg
MCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3Mi
IHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0IHNldHRpbmcg
dGhlICdzY29wZWQnIGF0dHJpYnV0ZSBvbiBhICZsdDtzdHlsZSZndDsgZWxlbWVudDwvcD4KKyAg
ICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlk
PSJQMSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3R5bGUgaWQ9
IlNUWUxFIiB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9
CisgICAgICAgICAgICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgIDwvc3R5bGU+CisgICAg
ICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9w
PgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bh
bj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9
ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116935</attachid>
            <date>2011-11-29 03:12:05 -0800</date>
            <delta_ts>2011-11-29 23:26:38 -0800</delta_ts>
            <desc>work-in-progress</desc>
            <filename>bug-73190-20111129201202.patch</filename>
            <type>text/plain</type>
            <size>46561</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQ1MDY2MzE1OGIwY2Mx
YjM4Yzg3NGM0YzEyYWRlNmNlNTY1MGVlZC4uMzJhMWZkMDBiMWFhMWI3N2UxNjY1ZjRlMThhZDIx
ZTFiMTAzNThjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDExLTExLTI5ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIDxzdHls
ZSBzY29wZWQ+OiBJbXBsZW1lbnQgc2NvcGVkIHN0eWxlc2hlZXRzIGFuZCBiYXNpYyBhcHBsaWNh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMx
OTAKKworICAgICAgICBJbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgPHN0eWxlIHNjb3BlZD46Cisg
ICAgICAgIFN0b3JlIHNjb3BlZCBzdHlsZSBzaGVldHMgaW4gYSBzZXBhcmF0ZSBkYXRhIHN0cnVj
dHVyZSBTY29wZWRSdWxlU2V0cy4KKyAgICAgICAgQWRkIGEgdmVjdG9yIHN0YWNrIHRvIENTU1N0
eWxlU2VsZWN0b3IgdGhhdCBrZWVwcyB0cmFjayBvZiBlbmNvdW50ZXJlZCBzY29waW5nIGVsZW1l
bnRzLiBUaGlzIGlzCisgICAgICAgIHVzZWQgZm9yIE8oMSkgYWNjZXNzIHRvIGFsbCByZWxldmFu
dCBzdHlsZSBzaGVldHMgZm9yIGEgZ2l2ZW4gZWxlbWVudC4KKyAgICAgICAgRmluYWxseSwgcHJl
dmVudCBzdHlsZSBzaGFyaW5nIGZyb20gY3Jvc3NpbmcgaW50by9vdXQgb2Ygc2NvcGVkIHN0eWxl
IGJvdW5kYXJpZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdHM6IGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFz
aWMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1kZXRhY2guaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHA6IGFkZCBzdXBwb3J0IGZvciBzY29wZWQgYXV0aG9yIHNoZWV0cwor
ICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OlNjb3BlZFJ1bGVTZXRzKTogY2xhc3Mg
Zm9yIHNjb3BlZCBhdXRob3Igc2hlZXRzCisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0
czo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZVNjb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU2NvcGluZ0VsZW1lbnQpOiBkZXRlcm1p
bmUgd2hldGhlciBhbiBhdXRob3Igc2hlZXQgaXMgc2NvcGVkIChhbmQgdG8gd2hpY2ggc2NvcGUp
LCBvciBnbG9iYWwKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnB1c2hTY29w
aW5nUGFyZW50KTogcHVzaCBhIHNjb3BpbmcgZWxlbWVudCBvbiBhIHN0YWNrIGlmIGVuY291bnRl
cmVkIGR1cmluZyB0cmVlIHRyYXZlcnNhbCBmb3Igc3R5bGUgaXRlcmF0aW9uCisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwb3BTY29waW5nUGFyZW50KTogcG9wIGEgc2NvcGlu
ZyBlbGVtZW50IGZyb20gdGhlIHN0YWNrCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMpOiBoZWxwZXIgZnVuY3Rpb24KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMpOiBjaGFuZ2VkIGNh
bGwgdG8gbWF0Y2hBdXRob3JSdWxlcworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6bWF0Y2hBdXRob3JSdWxlcyk6IG1hdGNoIHNjb3BlZCBhdXRob3IgcnVsZXMKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMpOiBhZGQgJ3Njb3BlJyBwYXJh
bWV0ZXIKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZVNldCk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9y
TGlzdCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVD
b3VzaW5MaXN0KTogcHJldmVudCBzdHlsZSBzaGFyaW5nIGFjcm9zcyBzY29wZSBib3VuZGFyaWVz
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVs
ZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRl
U2hhcmVkU3R5bGUpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
cHNldWRvU3R5bGVGb3JFbGVtZW50KTogY2hhbmdlZCBjYWxsIHRvIG1hdGNoQXV0aG9yUnVsZXMK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yUGFnZSk6IGNvbW1l
bnQKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrUmVnaW9uU3R5bGUp
OiBhZGQgZ2xvYmFsIHNjb3BlIHBhcmFtZXRlcgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQpOiBjaGFuZ2VkIGNhbGwgdG8gbWF0
Y2hBdXRob3JSdWxlcworICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hl
ZXQpOiBhZGQgY29tbWVudHMgZm9yIEBmb250LWZhY2UgYW5kIEBrZXlmcmFtZXMKKyAgICAgICAg
KFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjp+U2NvcGVkUnVsZVNldHMpOiBkYXRhIHN0cnVjdHVy
ZSB0byBtYXAgc2NvcGUgLT4gUnVsZVNldCAKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVT
ZXRzOjplbnN1cmVFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OmNv
bGxlY3RGZWF0dXJlcyk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKyAgICAg
ICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNo
ZWNrZXI6OnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KTogbWFrZSBwYXJhbWV0ZXIgY29uc3QKKyAg
ICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNlbGVjdG9y
UGFyZW50UHVzaGVyOjpwdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2VsZWN0b3JQYXJl
bnRQdXNoZXI6On5TdHlsZVNlbGVjdG9yUGFyZW50UHVzaGVyKToKKwogMjAxMS0xMS0xNiAgUm9s
YW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8c3R5
bGUgc2NvcGVkPjogSW1wbGVtZW50IHJlZ2lzdGVyaW5nIG9mIDxzdHlsZSBzY29wZWQ+IHdpdGgg
dGhlIHNjb3BpbmcgZWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CmluZGV4IGUwYTA0Y2I1YThlYjc1ZDE3YjhmOGEwZTAzYzFkNDg0NGRiZDc1NzYuLmZjYmJiYTZl
YThiYjQxOTM4ZDkzODhmOTE0NjQ5MzY2ZmU2MGMwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFByb2dyZXNz
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
VGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCiAjaW5jbHVkZSAi
TGlua0hhc2guaCIKQEAgLTIwNyw3ICsyMDgsNyBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIEhh
c2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFZlY3RvcjxSdWxlRGF0YT4qPiBBdG9tUnVsZU1hcDsK
IAotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlh
UXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNlbGVjdG9yKiA9IDApOworICAgIHZvaWQgYWRkUnVs
ZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBD
U1NTdHlsZVNlbGVjdG9yKiA9IDAsIGNvbnN0IEVsZW1lbnQqID0gMCk7CiAKICAgICB2b2lkIGFk
ZFN0eWxlUnVsZShDU1NTdHlsZVJ1bGUqIGl0ZW0pOwogICAgIHZvaWQgYWRkUnVsZShDU1NTdHls
ZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOwpAQCAtMjQxLDYgKzI0MiwyMyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7CiB9OwogCitjbGFzcyBTY29w
ZWRSdWxlU2V0cyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NvcGVkUnVsZVNldHMpOwor
cHVibGljOgorICAgIFNjb3BlZFJ1bGVTZXRzKCkgeyB9CisgICAgflNjb3BlZFJ1bGVTZXRzKCk7
CisKKyAgICBSdWxlU2V0KiBnZXQoY29uc3QgRWxlbWVudCogc2NvcGUpIHsgcmV0dXJuIG1fc2Nv
cGVkUnVsZVNldE1hcC5nZXQoc2NvcGUpOyB9CisgICAgUnVsZVNldCogZW5zdXJlRXhpc3RzKGNv
bnN0IEVsZW1lbnQqKTsKKworICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKENTU1N0eWxlU2VsZWN0
b3I6OkZlYXR1cmVzJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPGNv
bnN0IEVsZW1lbnQqLCBSdWxlU2V0Kj4gU2NvcGVkUnVsZVNldE1hcDsKKworICAgIFNjb3BlZFJ1
bGVTZXRNYXAgbV9zY29wZWRSdWxlU2V0TWFwOworfTsKKwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1
bHRTdHlsZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UXVpcmtzU3R5bGU7CiBzdGF0aWMgUnVs
ZVNldCogZGVmYXVsdFByaW50U3R5bGU7CkBAIC0zNjMsNiArMzgxLDcgQEAgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0
KiBzdHlsZVNoZWUKICAgICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2
YWx1YXRvcih2aWV3LT5tZWRpYVR5cGUoKSwgdmlldy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0
eWxlLmdldCgpKSk7CiAKICAgICBtX2F1dGhvclN0eWxlID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQp
OworICAgIG1fc2NvcGVkQXV0aG9yU3R5bGVzID0gYWRvcHRQdHIobmV3IFNjb3BlZFJ1bGVTZXRz
KTsKICAgICAvLyBBZGRpbmcgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0
aGUgZW5kLgogICAgIG1fYXV0aG9yU3R5bGUtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKIApA
QCAtMzkzLDE1ICs0MTIsMjMgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihE
b2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAgbV91
c2VyU3R5bGUgPSB0ZW1wVXNlclN0eWxlLnJlbGVhc2UoKTsKIAogICAgIC8vIEFkZCBydWxlcyBm
cm9tIGVsZW1lbnRzIGxpa2UgU1ZHJ3MgPGZvbnQtZmFjZT4KLSAgICBpZiAobWFwcGVkRWxlbWVu
dFNoZWV0KQorICAgIGlmIChtYXBwZWRFbGVtZW50U2hlZXQpIHsKKyAgICAgICAgLy8gRklYTUU6
IHNlZSBpZiBzdHlsZSBzY29wZXMgY2FuL3Nob3VsZCBiZSBhZGRlZCBoZXJlLgogICAgICAgICBt
X2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtYXBwZWRFbGVtZW50U2hlZXQsICptX21l
ZGl1bSwgdGhpcyk7CisgICAgfQogCiAgICAgLy8gYWRkIHN0eWxlc2hlZXRzIGZyb20gZG9jdW1l
bnQKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHlsZVNoZWV0cy0+bGVuZ3RoKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFN0eWxlU2hlZXQq
IHNoZWV0ID0gc3R5bGVTaGVldHMtPml0ZW0oaSk7Ci0gICAgICAgIGlmIChzaGVldC0+aXNDU1NT
dHlsZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxlZCgpKQotICAgICAgICAgICAgbV9hdXRob3JT
dHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0
KSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgaWYgKHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQo
KSAmJiAhc2hlZXQtPmRpc2FibGVkKCkpIHsKKyAgICAgICAgICAgIENTU1N0eWxlU2hlZXQqIGNz
c1NoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KTsKKyAgICAgICAgICAg
IGNvbnN0IEVsZW1lbnQqIHNjb3BlID0gZGV0ZXJtaW5lU2NvcGluZ0VsZW1lbnQoY3NzU2hlZXQp
OworICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgIG1fc2NvcGVkQXV0aG9y
U3R5bGVzLT5lbnN1cmVFeGlzdHMoc2NvcGUpLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldCwg
Km1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQsICptX21lZGl1bSwg
dGhpcyk7CisgICAgICAgIH0KICAgICB9CiAgICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxl
cyB1c2luZyBzaWJsaW5nIHNlbGVjdG9ycyAoOmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQogICAg
IC8vIGluIHRoZSBjdXJyZW50IHNldCBvZiBzdHlsZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2Rl
IHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byByZWplY3QKQEAgLTQxMiw2ICs0MzksNyBAQCBDU1NT
dHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVT
aGVldExpc3QqIHN0eWxlU2hlZQogICAgIGlmICh1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzSW5EZWZh
dWx0U3R5bGUpCiAgICAgICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXNJbkRlZmF1bHRTdHlsZS0+
Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwogICAgIG1fYXV0aG9yU3R5bGUtPmNvbGxlY3RG
ZWF0dXJlcyhtX2ZlYXR1cmVzKTsKKyAgICBtX3Njb3BlZEF1dGhvclN0eWxlcy0+Y29sbGVjdEZl
YXR1cmVzKG1fZmVhdHVyZXMpOwogICAgIGlmIChtX3VzZXJTdHlsZSkKICAgICAgICAgbV91c2Vy
U3R5bGUtPmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKIApAQCAtNDI1LDYgKzQ1Myw1NyBA
QCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwg
U3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAgICAgICBkb2N1bWVudC0+cmVuZGVyZXIoKS0+
c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CiB9CiAKK0VsZW1lbnQqIENT
U1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVNjb3BpbmdFbGVtZW50KGNvbnN0IENTU1N0eWxlU2hl
ZXQqIHNoZWV0KQoreworICAgIEFTU0VSVChzaGVldCk7CisKKyAgICBOb2RlKiBvd25lck5vZGUg
PSBzaGVldC0+ZmluZFN0eWxlU2hlZXRPd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSB8
fCAhb3duZXJOb2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnN0eWxlVGFnKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIVE1MU3R5bGVF
bGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3du
ZXJOb2RlKTsKKyAgICBpZiAoIXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworfQorCit2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OnB1c2hTY29waW5nUGFyZW50KGNvbnN0IEVsZW1lbnQqIHBh
cmVudCkKK3sKKyAgICAvLyBBcyB0aGlzIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBTZWxl
Y3RvckNoZWNrZXI6OlBhcmVudFN0YWNrRnJhbWUsCisgICAgLy8gcmVwbGljYXRlIHRoZSBsb2dp
YyBvZiBTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJlbnQgaGVyZS4KKyAgICBpZiAobV9zY29waW5n
RWxlbWVudFN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAocGFyZW50LT5wYXJlbnRPckhv
c3ROb2RlKCkpIHsKKyAgICAgICAgICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+
cGFyZW50T3JIb3N0RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+aGFz
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zY29waW5nRWxl
bWVudFN0YWNrLmFwcGVuZChwYXJlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9z
Y29waW5nRWxlbWVudFN0YWNrLnJldmVyc2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAoIXBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpKSB7Cisg
ICAgICAgIC8vIFRoZSBwYXNzZWQtaW4gZWxlbWVudCBpcyBhIG5ldyByb290IGVsZW1lbnQgLT4g
Y2xlYXIgc3RhY2suCisgICAgICAgIG1fc2NvcGluZ0VsZW1lbnRTdGFjay5jbGVhcigpOworICAg
IH0gZWxzZSBpZiAoIW1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJlbnQpKSB7
CisgICAgICAgIC8vIE5PVEU6IFRoZSBhYm92ZSBjaGVjayByZWxpZXMgb24gU2VsZWN0b3JDaGVj
a2VyOjpwdXNoUGFyZW50KCkgYmVpbmcgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIQorICAg
ICAgICAvLyBHb3QgY2FsbGVkIG91dCBvZiBzZXF1ZW5jZSAtPiBiYWlsLgorICAgICAgICByZXR1
cm47CisgICAgfQorICAgIG1fc2NvcGluZ0VsZW1lbnRTdGFjay5hcHBlbmQocGFyZW50KTsKK30K
Kwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpwb3BTY29waW5nUGFyZW50KGNvbnN0IEVsZW1lbnQq
IHBhcmVudCkKK3sKKyAgICAvLyBOT1RFOiBUaGlzIGZ1bmN0aW9uIHJlbGllcyBvbiBiZWluZyBj
YWxsZWQgYmVmb3JlIFNlbGVjdG9yQ2hlY2tlcjo6cG9wUGFyZW50KCkgaXMgY2FsbGVkIQorICAg
IGlmIChtX3Njb3BpbmdFbGVtZW50U3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKG1fc2NvcGluZ0VsZW1lbnRTdGFjay5sYXN0KCkgIT0gcGFyZW50KQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFtX2NoZWNrZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQocGFyZW50
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2NvcGluZ0VsZW1lbnRTdGFjay5yZW1vdmVMYXN0
KCk7Cit9CisKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkUmVnaW9uU3R5bGVSdWxlKFBhc3NS
ZWZQdHI8Q1NTUmVnaW9uU3R5bGVSdWxlPiByZWdpb25TdHlsZVJ1bGUpCiB7CiAgICAgbV9yZWdp
b25TdHlsZVJ1bGVzLmFwcGVuZChyZWdpb25TdHlsZVJ1bGUpOwpAQCAtNTkxLDYgKzY3MCw0MyBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZQogICAgIG5ld0RlY2xhcmF0aW9uLmxpbmtNYXRjaFR5
cGUgPSBsaW5rTWF0Y2hUeXBlOwogfQogCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQXV0
aG9yUnVsZXMoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKQoreworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICAv
LyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgorICAgIG1hdGNoUnVsZVNldChtX2F1dGhvclN0
eWxlLmdldCgpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVs
ZXMpOworICAgIC8vIE1hdGNoIHNjb3BlZCBzdHlsZSBzaGVldCdzIHJ1bGVzLgorICAgIGlmICht
X2NoZWNrZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQobV9wYXJlbnROb2RlKSkgeworICAgICAg
ICAvLyBGYXN0IGJyYW5jaDogYWNjZXNzIGVuY2xvc2luZyBzY29wZXMgZGlyZWN0bHkgZnJvbSBw
YXJlbnQgc3RhY2sgKGJ1dCBzdGFydCB3aXRoIGN1cnJlbnQgZWxlbWVudCkuCisgICAgICAgIGlm
IChtX2VsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpIHsKKyAgICAgICAgICAgIFJ1
bGVTZXQqIHJ1bGVTZXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy0+Z2V0KG1fZWxlbWVudCk7Cisg
ICAgICAgICAgICBpZiAocnVsZVNldCkKKyAgICAgICAgICAgICAgICBtYXRjaFJ1bGVTZXQocnVs
ZVNldCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9zY29waW5nRWxlbWVudFN0YWNr
LnNpemUoKTsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgY29uc3QgRWxlbWVudCogc2NvcGUg
PSBtX3Njb3BpbmdFbGVtZW50U3RhY2tbaSAtIDFdOworICAgICAgICAgICAgUnVsZVNldCogcnVs
ZVNldCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5nZXQoc2NvcGUpOworICAgICAgICAgICAgaWYg
KHJ1bGVTZXQpCisgICAgICAgICAgICAgICAgbWF0Y2hSdWxlU2V0KHJ1bGVTZXQsIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBTbG93IGJyYW5jaDogY2xpbWIgdHJlZSwgY2hlY2sgZm9y
IHN0eWxlIHNjb3BlcyBhdCBldmVyeSBlbGVtZW50LgorICAgICAgICBmb3IgKGNvbnN0IE5vZGUq
IG5vZGUgPSBtX2VsZW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKKyAg
ICAgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChu
b2RlKTsKKyAgICAgICAgICAgIGlmICghZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFJ1bGVTZXQqIHJ1bGVT
ZXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy0+Z2V0KGVsZW1lbnQpOworICAgICAgICAgICAgaWYg
KHJ1bGVTZXQpCisgICAgICAgICAgICAgICAgbWF0Y2hSdWxlU2V0KHJ1bGVTZXQsIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoKTsKK30KKwogdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUlu
ZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAgICAg
bV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKQEAgLTU5OCw2ICs3MTQsMTcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4
LCBpbnQmIGxhc3QKICAgICBpZiAoIXJ1bGVzIHx8ICFtX2VsZW1lbnQpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIG1hdGNoUnVsZVNldChydWxlcywgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5k
ZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMo
KTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVTZXQoUnVsZVNldCogcnVs
ZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcykKK3sKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworCisgICAgaWYgKCFy
dWxlcyB8fCAhbV9lbGVtZW50KQorICAgICAgICByZXR1cm47CisKICAgICAvLyBXZSBuZWVkIHRv
IGNvbGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxz
ZSBpbnRvIGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgogICAgIGlm
IChtX2VsZW1lbnQtPmhhc0lEKCkpCkBAIC02MjAsMzMgKzc0Nyw2IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0CiAgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5mb2N1c1BzZXVkb0Ns
YXNzUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1
bGVzKTsKICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+dGFnUnVsZXMobV9lbGVtZW50LT5s
b2NhbE5hbWUoKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOwogICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT51bml2ZXJzYWxSdWxl
cygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwot
Ci0gICAgLy8gSWYgd2UgZGlkbid0IG1hdGNoIGFueSBydWxlcywgd2UncmUgZG9uZS4KLSAgICBp
ZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBT
b3J0IHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcy4KLSAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0K
LSAgICAvLyBOb3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8gb3Vy
IGxpc3Qgb2YgZGVjbHMuCi0gICAgaWYgKCFtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5
KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc3Vja3MsIHRoZSBpbnNwZWN0b3Igc2hvdWxk
IGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgdmlzaXRlZCBzdHlsZSBpdHNlbGYuCi0gICAgICAgIGJv
b2wgc3dhcFZpc2l0ZWRVbnZpc2l0ZWQgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNl
UHNldWRvU3RhdGUobV9lbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykg
ewotICAgICAgICAgICAgaWYgKG1fc3R5bGUgJiYgbV9tYXRjaGVkUnVsZXNbaV0tPmNvbnRhaW5z
VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dEFmZmVjdGVkQnlVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9ycygpOwotICAgICAgICAgICAgdW5z
aWduZWQgbGlua01hdGNoVHlwZSA9IG1fbWF0Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hUeXBlKCk7
Ci0gICAgICAgICAgICBpZiAoc3dhcFZpc2l0ZWRVbnZpc2l0ZWQgJiYgbGlua01hdGNoVHlwZSAm
JiBsaW5rTWF0Y2hUeXBlICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwpCi0gICAgICAgICAg
ICAgICAgbGlua01hdGNoVHlwZSA9IChsaW5rTWF0Y2hUeXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hWaXNpdGVkKSA/IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rIDogU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaFZpc2l0ZWQ7Ci0gICAgICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24obV9t
YXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+ZGVjbGFyYXRpb24oKSwgbGlua01hdGNoVHlwZSk7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghbV9ydWxlTGlz
dCkKLSAgICAgICAgICAgICAgICBtX3J1bGVMaXN0ID0gQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOwot
ICAgICAgICAgICAgbV9ydWxlTGlzdC0+YXBwZW5kKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCkp
OwotICAgICAgICB9Ci0gICAgfQogfQogCiBjbGFzcyBNYXRjaGluZ1VBUnVsZXNTY29wZSB7CkBA
IC03MzgsNiArODM4LDM0IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydE1hdGNoZWRSdWxl
cygpCiAgICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVz
LmVuZCgpLCBjb21wYXJlUnVsZXMpOwogfQogCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcygpCit7CisgICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJl
Z2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMpOworCisgICAgaWYgKG1f
Y2hlY2tlci5pc0NvbGxlY3RpbmdSdWxlc09ubHkoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlm
ICghbV9ydWxlTGlzdCkKKyAgICAgICAgICAgICAgICBtX3J1bGVMaXN0ID0gQ1NTUnVsZUxpc3Q6
OmNyZWF0ZSgpOworICAgICAgICAgICAgbV9ydWxlTGlzdC0+YXBwZW5kKG1fbWF0Y2hlZFJ1bGVz
W2ldLT5ydWxlKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBGSVhNRTogVGhpcyBzdWNrcywgdGhlIGluc3BlY3RvciBzaG91bGQgZ2V0IHRoZSBzdHlsZSBm
cm9tIHRoZSB2aXNpdGVkIHN0eWxlIGl0c2VsZi4KKyAgICBib29sIHN3YXBWaXNpdGVkVW52aXNp
dGVkID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKG1fZWxlbWVu
dCwgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAobV9zdHlsZSAm
JiBtX21hdGNoZWRSdWxlc1tpXS0+Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkp
CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRBZmZlY3RlZEJ5VW5jb21tb25BdHRyaWJ1dGVTZWxl
Y3RvcnMoKTsKKyAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IG1fbWF0Y2hlZFJ1bGVz
W2ldLT5saW5rTWF0Y2hUeXBlKCk7CisgICAgICAgIGlmIChzd2FwVmlzaXRlZFVudmlzaXRlZCAm
JiBsaW5rTWF0Y2hUeXBlICYmIGxpbmtNYXRjaFR5cGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRj
aEFsbCkKKyAgICAgICAgICAgIGxpbmtNYXRjaFR5cGUgPSAobGlua01hdGNoVHlwZSA9PSBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCkgPyBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayA6
IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOworICAgICAgICBhZGRNYXRjaGVkRGVjbGFy
YXRpb24obV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+ZGVjbGFyYXRpb24oKSwgbGlua01hdGNo
VHlwZSk7CisgICAgfQorfQorCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMo
TWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBtYXRjaFVBUnVsZXMocmVzdWx0KTsKQEAgLTc5
MCw3ICs5MTgsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMoTWF0Y2hS
ZXN1bHQmIHJlc3VsdCkKICAgICAKICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNo
ZWV0cyBuZXh0LgogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAg
bWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQuZmlyc3RBdXRob3JSdWxlLCBy
ZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhy
ZXN1bHQuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKICAg
ICAgICAgCiAgICAgLy8gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgogICAg
IGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQpIHsKQEAg
LTg1Myw2ICs5ODEsOCBAQCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0
KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQwogICAgICAgICByZXR1cm4g
MDsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKHBhcmVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CiAgICAgU3R5bGVkRWxlbWVudCogcCA9IHN0YXRpY19jYXN0PFN0
eWxlZEVsZW1lbnQqPihwYXJlbnQpOwogICAgIGlmIChwLT5pbmxpbmVTdHlsZURlY2woKSkKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC04NjgsOCArOTk4LDEwIEBAIE5vZGUqIENTU1N0eWxlU2VsZWN0
b3I6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5v
ZGVDCiAgICAgLy8gd2lsbCBuZXZlciBnbyBkZWVwZXIgdGhhbiBjU3R5bGVTZWFyY2hMZXZlbFRo
cmVzaG9sZCBsZXZlbHMgaW50byByZWN1cnNpb24uCiAgICAgdmlzaXRlZE5vZGVDb3VudCArPSBj
U3R5bGVTZWFyY2hUaHJlc2hvbGQ7CiAgICAgd2hpbGUgKHRoaXNDb3VzaW4pIHsKLSAgICAgICAg
d2hpbGUgKGN1cnJlbnROb2RlKSB7CisgICAgICAgIGZvciAoOyBjdXJyZW50Tm9kZTsgY3VycmVu
dE5vZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICsr
c3ViY291bnQ7CisgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSAm
JiB0b0VsZW1lbnQoY3VycmVudE5vZGUpLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yZW5k
ZXJTdHlsZSgpID09IHBhcmVudFN0eWxlICYmIGN1cnJlbnROb2RlLT5sYXN0Q2hpbGQoKSkgewog
ICAgICAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgdW51c2VkIHJlc2VydmVkIHRyaWVzLgogICAg
ICAgICAgICAgICAgIHZpc2l0ZWROb2RlQ291bnQgLT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkIC0g
c3ViY291bnQ7CkBAIC04NzcsNyArMTAwOSw2IEBAIE5vZGUqIENTU1N0eWxlU2VsZWN0b3I6Omxv
Y2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDCiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3ViY291bnQgPj0gY1N0eWxlU2VhcmNoVGhy
ZXNob2xkKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgY3VycmVudE5v
ZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgIH0KICAgICAgICAg
Y3VycmVudE5vZGUgPSBsb2NhdGVDb3VzaW5MaXN0KHRoaXNDb3VzaW4tPnBhcmVudEVsZW1lbnQo
KSwgdmlzaXRlZE5vZGVDb3VudCk7CiAgICAgICAgIHRoaXNDb3VzaW4gPSBjdXJyZW50Tm9kZTsK
QEAgLTEwMDMsNiArMTEzNCw5IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHls
ZVdpdGhFbGVtZW50KE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkg
JiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNv
bHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGVsZW1l
bnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIGJvb2wgaXNDb250cm9sID0gZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKIAog
ICAgIGlmIChpc0NvbnRyb2wgIT0gbV9lbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQpA
QCAtMTA3NCw2ICsxMjA4LDggQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0
ZVNoYXJlZFN0eWxlKCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHBhcmVudFN0eWxlUHJl
dmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAo
bV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1
cm4gMDsKIAogICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0aGVpciBjb3VzaW5z
LgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKQEAgLTEzOTEsNyArMTUyNyw3IEBAIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQ
c2V1ZG9JZCBwc2V1ZG8sCiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsK
ICAgICAgICAgbWF0Y2hSdWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwgbWF0Y2hSZXN1bHQuZmlyc3RV
c2VyUnVsZSwgbWF0Y2hSZXN1bHQubGFzdFVzZXJSdWxlLCBmYWxzZSk7Ci0gICAgICAgIG1hdGNo
UnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgbWF0Y2hSZXN1bHQuZmlyc3RBdXRob3JSdWxlLCBt
YXRjaFJlc3VsdC5sYXN0QXV0aG9yUnVsZSwgZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1
bGVzKG1hdGNoUmVzdWx0LmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQubGFzdEF1dGhvclJ1
bGUsIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAobV9tYXRjaGVkRGVjbHMuaXNFbXB0eSgpKQpA
QCAtMTQyOCw2ICsxNTY0LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxl
Y3Rvcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgY29uc3QgU3RyaW5nIHBhZ2Ug
PSBwYWdlTmFtZShwYWdlSW5kZXgpOwogICAgIG1hdGNoUGFnZVJ1bGVzKGRlZmF1bHRQcmludFN0
eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwogICAgIG1hdGNoUGFnZVJ1bGVzKG1fdXNlclN0
eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOworICAgIC8vIE9ubHkgY29uc2lkZXIg
dGhlIGdsb2JhbCBSdWxlU2V0IGZvciBAcGFnZSBydWxlcywgYXMgcGVyIHRoZSBIVE1MNSBzcGVj
LgogICAgIG1hdGNoUGFnZVJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJz
dCwgcGFnZSk7CiAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIGJvb2wgaW5oZXJpdGVk
T25seSA9IGZhbHNlOwpAQCAtMTY3Nyw2ICsxODE0LDggQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9y
OjpjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqIGUpCiAgICAgZm9yIChWZWN0b3I8UmVmUHRyPENT
U1JlZ2lvblN0eWxlUnVsZT4gPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lvblN0eWxlUnVsZXMuYmVn
aW4oKTsgaXQgIT0gbV9yZWdpb25TdHlsZVJ1bGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGNv
bnN0IENTU1NlbGVjdG9yTGlzdCYgcmVnaW9uU2VsZWN0b3JMaXN0ID0gKCppdCktPnNlbGVjdG9y
TGlzdCgpOwogICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3JMaXN0
LmZpcnN0KCk7IHM7IHMgPSByZWdpb25TZWxlY3Rvckxpc3QubmV4dChzKSkgeworICAgICAgICAg
ICAgLy8gRklYTUUgKEJVRyA3MjQ3Mik6IFdlIGRvbid0IGFkZCBALXdlYmtpdC1yZWdpb24gcnVs
ZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudCwgCisgICAgICAgICAgICAv
LyBzbyBhbGwgcmVnaW9uIHJ1bGVzIGFyZSBnbG9iYWwgYnkgZGVmYXVsdC4gVmVyaWZ5IHdoZXRo
ZXIgdGhhdCBjYW4gc3RhbmQgb3IgbmVlZHMgY2hhbmdpbicuCiAgICAgICAgICAgICBpZiAobV9j
aGVja2VyLmNoZWNrU2VsZWN0b3IocywgZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KQEAgLTE3MzYsNyArMTg3NSw3IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+
IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUs
CiAgICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmln
aW5DU1NSdWxlcyk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVl
dHMuCi0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZHVtbXkuZmlyc3RB
dXRob3JSdWxlLCBkdW1teS5sYXN0QXV0aG9yUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNT
U1J1bGVzKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhkdW1teS5maXJzdEF1dGhvclJ1bGUs
IGR1bW15Lmxhc3RBdXRob3JSdWxlLCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwog
CiAgICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKICAgICB9CkBAIC0xOTE4LDcgKzIw
NTcsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKENTU1BhZ2VSdWxlKiBydWxlKQogICAg
IG1fcGFnZVJ1bGVzLmFwcGVuZChSdWxlRGF0YShydWxlLCBydWxlLT5zZWxlY3Rvckxpc3QoKS5m
aXJzdCgpLCBtX3BhZ2VSdWxlcy5zaXplKCkpKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxl
c0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yKQordm9pZCBSdWxlU2V0
OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVy
eUV2YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yLCBjb25z
dCBFbGVtZW50KiBzY29wZSkKIHsKICAgICBpZiAoIXNoZWV0KQogICAgICAgICByZXR1cm47CkBA
IC0xOTM5LDcgKzIwNzgsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0
eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJgogICAgICAgICBlbHNl
IGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewogICAgICAgICAgICAgQ1NTSW1wb3J0UnVsZSog
aW1wb3J0ID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KHJ1bGUpOwogICAgICAgICAgICAg
aWYgKCFpbXBvcnQtPm1lZGlhKCkgfHwgbWVkaXVtLmV2YWwoaW1wb3J0LT5tZWRpYSgpLCBzdHls
ZVNlbGVjdG9yKSkKLSAgICAgICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChpbXBvcnQtPnN0
eWxlU2hlZXQoKSwgbWVkaXVtLCBzdHlsZVNlbGVjdG9yKTsKKyAgICAgICAgICAgICAgICBhZGRS
dWxlc0Zyb21TaGVldChpbXBvcnQtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCBzdHlsZVNlbGVjdG9y
LCBzY29wZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNNZWRpYVJ1bGUo
KSkgewogICAgICAgICAgICAgQ1NTTWVkaWFSdWxlKiByID0gc3RhdGljX2Nhc3Q8Q1NTTWVkaWFS
dWxlKj4ocnVsZSk7CkBAIC0xOTU1LDIyICsyMDk0LDM4IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVs
ZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxDU1NQ
YWdlUnVsZSo+KGNoaWxkSXRlbSkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGls
ZEl0ZW0tPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFj
ZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBm
b250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihjaGlsZEl0ZW0pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFk
ZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGNoaWxkSXRlbS0+aXNLZXlmcmFtZXNSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgcnVsZSB0byBvdXIgc2V0
LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcyNDYyKTogV2UgZG9uJ3Qg
YWRkIEBrZXlmcmFtZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50
LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rv
ci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4o
Y2hpbGRJdGVtKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9ICAg
Ly8gZm9yIHJ1bGVzCiAgICAgICAgICAgICB9ICAgLy8gaWYgcnVsZXMKICAgICAgICAgfSBlbHNl
IGlmIChydWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAgICAg
ICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgorICAgICAgICAgICAgLy8gRklY
TUUoQlVHIDcyNDYxKTogV2UgZG9uJ3QgYWRkIEBmb250LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0
eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNvbnN0IENTU0ZvbnRGYWNlUnVsZSog
Zm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4ocnVsZSk7CiAgICAg
ICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZv
bnRGYWNlUnVsZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkp
CisgICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FIChCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9m
IHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2Nv
cGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBzdHlsZVNlbGVjdG9y
LT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihy
dWxlKSk7Ci0gICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9uU3R5bGVSdWxlKCkgJiYgc3R5
bGVTZWxlY3RvcikKKyAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc1JlZ2lvblN0eWxlUnVsZSgp
ICYmIHN0eWxlU2VsZWN0b3IpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBX
ZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMg
Zm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRSZWdpb25TdHlsZVJ1bGUo
c3RhdGljX2Nhc3Q8Q1NTUmVnaW9uU3R5bGVSdWxlKj4ocnVsZSkpOworICAgICAgICB9CiAgICAg
fQogICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCiAgICAgICAgIHNocmlua1RvRml0
KCk7CkBAIC0yMDc0LDYgKzIyMjksMjkgQEAgdm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCiAg
ICAgbV9wYWdlUnVsZXMuc2hyaW5rVG9GaXQoKTsKIH0KIAorU2NvcGVkUnVsZVNldHM6On5TY29w
ZWRSdWxlU2V0cygpCit7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fc2NvcGVkUnVsZVNldE1hcCk7
Cit9CisKK1J1bGVTZXQqIFNjb3BlZFJ1bGVTZXRzOjplbnN1cmVFeGlzdHMoY29uc3QgRWxlbWVu
dCogc2NvcGUpCit7CisgICAgc3RkOjpwYWlyPFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yLCBi
b29sPiByZXR1cm5WYWx1ZSA9IG1fc2NvcGVkUnVsZVNldE1hcC5hZGQoc2NvcGUsIDApOworICAg
IFJ1bGVTZXQqJiBydWxlU2V0UHRyID0gcmV0dXJuVmFsdWUuZmlyc3QtPnNlY29uZDsKKyAgICBp
ZiAocmV0dXJuVmFsdWUuc2Vjb25kKSB7CisgICAgICAgIEFTU0VSVCghcnVsZVNldFB0cik7Cisg
ICAgICAgIHJ1bGVTZXRQdHIgPSBuZXcgUnVsZVNldDsKKyAgICB9CisgICAgQVNTRVJUKHJ1bGVT
ZXRQdHIpOworICAgIHJldHVybiBydWxlU2V0UHRyOworfQorCit2b2lkIFNjb3BlZFJ1bGVTZXRz
Ojpjb2xsZWN0RmVhdHVyZXMoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmIGZlYXR1cmVzKSBj
b25zdAoreworICAgIGZvciAoU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3Njb3BlZFJ1bGVTZXRNYXAuYmVnaW4oKSwgaXRFbmQgPSBtX3Njb3BlZFJ1bGVTZXRNYXAuZW5k
KCk7IGl0ICE9IGl0RW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5jb2xsZWN0RmVhdHVy
ZXMoZmVhdHVyZXMpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyB0
aGlzIGlzIG1vc3RseSBib3Jpbmcgc3R1ZmYgb24gaG93IHRvIGFwcGx5IGEgY2VydGFpbiBydWxl
IHRvIHRoZSByZW5kZXJzdHlsZS4uLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
aAppbmRleCBlNGZiZjI4NDEyNjIyM2M0NmMzMDkzMWVkODFjOGEwZTlkYmRhMjM1Li5hNDlmMTAx
NGNmODI5OTAwMGE1NWVmM2Y2NjBkMmIzMGUwOWE0OWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgKQEAgLTY2LDYgKzY2LDcgQEAgY2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRv
cjsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSdWxlRGF0YTsKIGNsYXNzIFJ1bGVTZXQ7CitjbGFzcyBT
Y29wZWRSdWxlU2V0czsKIGNsYXNzIFNldHRpbmdzOwogY2xhc3MgU3R5bGVJbWFnZTsKIGNsYXNz
IFN0eWxlUGVuZGluZ0ltYWdlOwpAQCAtMTAwLDkgKzEwMSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICBib29sIHN0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzKTsKICAgICB+Q1NTU3R5bGVTZWxlY3RvcigpOwogCisgICAgc3RhdGljIEVsZW1lbnQq
IGRldGVybWluZVNjb3BpbmdFbGVtZW50KGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKKwogICAgIC8v
IFVzaW5nIHRoZXNlIGR1cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBzZWxlY3RvciB0
byBvcHRpbWl6ZSBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBzLgogICAgIHZv
aWQgcHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpIHsgbV9jaGVja2VyLnB1c2hQYXJlbnQocGFy
ZW50KTsgfQogICAgIHZvaWQgcG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCkgeyBtX2NoZWNrZXIu
cG9wUGFyZW50KHBhcmVudCk7IH0KKyAgICB2b2lkIHB1c2hTY29waW5nUGFyZW50KGNvbnN0IEVs
ZW1lbnQqKTsKKyAgICB2b2lkIHBvcFNjb3BpbmdQYXJlbnQoY29uc3QgRWxlbWVudCopOwogCiAg
ICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqLCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBib29sIGFsbG93U2hhcmluZyA9IHRydWUsIGJvb2wg
cmVzb2x2ZUZvclJvb3REZWZhdWx0ID0gZmFsc2UpOwogCkBAIC0yNTUsMTAgKzI2MCwxMyBAQCBw
cml2YXRlOgogICAgIH07CiAgICAgdm9pZCBtYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAg
ICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoQXV0aG9y
UnVsZXMoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RS
dWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Cisg
ICAgdm9pZCBtYXRjaFJ1bGVTZXQoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFJ1
bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBib29sIGZh
c3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwogICAgIHZvaWQgc29ydE1h
dGNoZWRSdWxlcygpOworICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKCk7CiAK
ICAgICBib29sIGNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKTsKIApAQCAtMjc2LDYgKzI4
NCw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0
OwogCiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CisgICAgT3duUHRyPFNjb3Bl
ZFJ1bGVTZXRzPiBtX3Njb3BlZEF1dGhvclN0eWxlczsKICAgICBPd25QdHI8UnVsZVNldD4gbV91
c2VyU3R5bGU7CiAKICAgICBGZWF0dXJlcyBtX2ZlYXR1cmVzOwpAQCAtMzk4LDcgKzQwNywxMSBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7CiAgICAg
Ym9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7CiAgICAgY29uc3QgQ1NTU3R5
bGVBcHBseVByb3BlcnR5JiBtX2FwcGx5UHJvcGVydHk7Ci0gICAgCisKKyAgICAvLyBWZWN0b3Ig
KHVzZWQgYXMgc3RhY2spIHRoYXQga2VlcHMgdHJhY2sgb2Ygc2NvcGluZyBlbGVtZW50cyAoaS5l
LiwgZWxlbWVudHMgd2l0aCBhIDxzdHlsZSBzY29wZWQ+IGNoaWxkKQorICAgIC8vIGVuY291bnRl
cmVkIGR1cmluZyB0cmVlIGl0ZXJhdGlvbiBmb3Igc3R5bGUgcmVzb2x1dGlvbi4KKyAgICBWZWN0
b3I8Y29uc3QgRWxlbWVudCo+IG1fc2NvcGluZ0VsZW1lbnRTdGFjazsKKwogI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKICAgICBib29sIG1faGFzUGVuZGluZ1NoYWRlcnM7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCA3NjBiYTUyMDdiZTU3NGM1ZGZlOGE5YTA0
Yjk3MDBlNGQwY2RmMjhkLi5lOWY2YmIyMTdjMDc0MmE0NDgyMDBkZjdiMGVlNWJjNzQ3MzNhM2Rm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC02Miw3ICs2Miw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpOwogICAgIHZvaWQg
cG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCk7Ci0gICAgYm9vbCBwYXJlbnRTdGFja0lzQ29uc2lz
dGVudChDb250YWluZXJOb2RlKiBwYXJlbnROb2RlKSBjb25zdCB7IHJldHVybiAhbV9wYXJlbnRT
dGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCA9PSBwYXJlbnRO
b2RlOyB9CisgICAgYm9vbCBwYXJlbnRTdGFja0lzQ29uc2lzdGVudChjb25zdCBDb250YWluZXJO
b2RlKiBwYXJlbnROb2RlKSBjb25zdCB7IHJldHVybiAhbV9wYXJlbnRTdGFjay5pc0VtcHR5KCkg
JiYgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCA9PSBwYXJlbnROb2RlOyB9CiAKICAgICBF
SW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCopIGNvbnN0OwogICAgIHZvaWQg
YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDJiNTYz
NzYyZGE3MTZhMjdkMmY5Mzc2NjRlNDEyNTYwZWU1NTc2YjEuLjM3N2FiZDQ4YWVlODlmMWQ5ZTMw
OWNkZDZlOTdmYmFlNWM2NWI4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTg5LDYgKzg5
LDkgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3B1c2hlZFN0eWxl
U2VsZWN0b3IgPSBtX3BhcmVudC0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOwogICAgICAg
ICBtX3B1c2hlZFN0eWxlU2VsZWN0b3ItPnB1c2hQYXJlbnQobV9wYXJlbnQpOworICAgICAgICAv
LyBOT1RFOiBDYWxsIHB1c2hTY29waW5nUGFyZW50IEFGVEVSIHB1c2hQYXJlbnQhCisgICAgICAg
IGlmIChtX3BhcmVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgICAgIG1f
cHVzaGVkU3R5bGVTZWxlY3Rvci0+cHVzaFNjb3BpbmdQYXJlbnQobV9wYXJlbnQpOwogICAgIH0K
ICAgICB+U3R5bGVTZWxlY3RvclBhcmVudFB1c2hlcigpIAogICAgIHsKQEAgLTEwMiw3ICsxMDUs
OSBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtX3B1c2hlZFN0eWxlU2VsZWN0b3IgIT0gbV9wYXJl
bnQtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKSkKICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBtX3B1c2hlZFN0eWxlU2VsZWN0b3ItPnBvcFBhcmVudChtX3BhcmVudCk7IAorICAg
ICAgICAvLyBOT1RFOiBDYWxsIHBvcFNjb3BpbmdQYXJlbnQgQkVGT1JFIHBvcFBhcmVudCEKKyAg
ICAgICAgbV9wdXNoZWRTdHlsZVNlbGVjdG9yLT5wb3BTY29waW5nUGFyZW50KG1fcGFyZW50KTsK
KyAgICAgICAgbV9wdXNoZWRTdHlsZVNlbGVjdG9yLT5wb3BQYXJlbnQobV9wYXJlbnQpOwogICAg
IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyZDg5Nzk3NjQ1MDAwMDcxNzcxYmUzNGFlZGViYWNlZTgz
OGUxNjBkLi40NGY2Yjg1NmZhYWVhZDFjNzIzMDkyZDZlM2I0NTBmZjE5MzlhODAwIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTEtMTEtMjkgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5l
ckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgPHN0eWxlIHNjb3BlZD46IEltcGxlbWVudCBzY29w
ZWQgc3R5bGVzaGVldHMgYW5kIGJhc2ljIGFwcGxpY2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzE5MAorCisgICAgICAgIFRlc3QgdGhhdCA8
c3R5bGUgc2NvcGVkPiBhZmZlY3RzIHN0eWxlcyBhbmQgaXMgdXBkYXRlZCBjb3JyZWN0bHk6Cisg
ICAgICAgIC0pIGJhc2ljIHRlc3QKKyAgICAgICAgLSkgdGVzdCBzZXR0aW5nL3VuLXNldHRpbmcg
dGhlICdzY29wZWQnIGF0dHJpYnV0ZQorICAgICAgICAtKSB0ZXN0IGluc2VydGluZy9yZW1vdmlu
ZyBhIHdob2xlIDxzdHlsZSBzY29wZWQ+IGVsZW1lbnQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2guaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1k
ZXRhY2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29w
ZWQvc3R5bGUtc2NvcGVkLWRldGFjaC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9z
dHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1z
Y29wZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1zZXQtc2NvcGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0bWw6IEFkZGVkLgorCiAy
MDExLTExLTE2ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIDxzdHlsZSBzY29wZWQ+OiBJbXBsZW1lbnQgcmVnaXN0ZXJpbmcgb2YgPHN0eWxl
IHNjb3BlZD4gd2l0aCB0aGUgc2NvcGluZyBlbGVtZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZlMDY3MWZhYzZlMTZlMzNhNDJjNDI5YWZlZmVkZDFh
MzVhZjhjZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNj
b3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitU
ZXN0IGF0dGFjaGluZyBhIG5ldyA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisKK1RleHQKK1RleHQK
KworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0KK1MxOiByZ2Io
MCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMCwgMCwgMCkKK1AyOiByZ2IoMCwg
MCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBBRlRFUiBBVFRB
Q0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAs
IDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigwLCAw
LCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2gu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42MDNkZjU1ZGU0OWJmNmNmZTFmOGM2YWQ0MGIwZTY1MGNmOGFlNmU3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0
eWxlLXNjb3BlZC1hdHRhY2guaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAg
ICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3
LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAg
ICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3Qo
J1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lO
QUwgLS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0t
IEFGVEVSIEFUVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0nKTsKKyAgICAgICAgICAgIHZhciBk
aXZFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RJVicpOworICAgICAgICAgICAgdmFy
IHN0eWxlRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgICAgICAg
ICBzdHlsZUVsZW0uc2V0QXR0cmlidXRlKCdzY29wZWQnLCB0cnVlKTsKKyAgICAgICAgICAgIHN0
eWxlRWxlbS5pbm5lckhUTUwgPSAnZGl2IHsgY29sb3I6IHJlZDsgfSBwIHsgY29sb3I6IGdyZWVu
OyB9JzsKKyAgICAgICAgICAgIGRpdkVsZW0uaW5zZXJ0QmVmb3JlKHN0eWxlRWxlbSwgZGl2RWxl
bS5maXJzdENoaWxkKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVE
IC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxl
IHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0K
KyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAg
PHA+VGVzdCBhdHRhY2hpbmcgYSBuZXcgJmx0O3N0eWxlIHNjb3BlZCZndDsgZWxlbWVudDwvcD4K
KyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxw
IGlkPSJQMSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJESVYiPgorICAgICAg
ICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4K
KyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+
CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJj
b25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTkxMmZkYzBmODNlYzE0OTNhNDJjMjU5YjNmMTgyYmIwZjU2
YzcxNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDIgQEAKK1Rlc3Qg
PHN0eWxlIHNjb3BlZD4KKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CitUZXh0CisK
K1RleHQKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorVGV4dAorVGV4dAorCitUZXh0CitUZXh0
CistLS0gQ09NUFVURUQgU1RZTEVTIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAw
LCAwKQorUjE6IHJnYigwLCAwLCAwKQorRTE6IHJnYigwLCAwLCAwKQorCitTMjogcmdiKDI1NSwg
MCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUjI6IHJnYigwLCAwLCAyNTUpCisKK1MzOiByZ2Io
MCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKK1IzOiByZ2IoMCwgMCwgMCkKK0UzOiByZ2IoMCwg
MCwgMCkKKworUzQ6IHJnYigwLCAwLCAwKQorUDQ6IHJnYigwLCAwLCAwKQorUjQ6IHJnYigwLCAw
LCAwKQorRTQ6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZmU1YjQzMWE5MTZhMzljNjlmYmRmODY2ODY0YWU4ZGZmM2Q2OGNlZQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHls
ZS1zY29wZWQtYmFzaWMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAg
ICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
aWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3Lmdl
dENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICBsb2coJy0t
LSBDT01QVVRFRCBTVFlMRVMgLS0tJyk7CisKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAg
ICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUjEnKTsKKyAgICAgICAgICAg
IHRlc3QoJ0UxJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAgICAgdGVzdCgnUzIn
KTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdSMicpOworICAg
ICAgICAgICAgbG9nKCcnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0
ZXN0KCdQMycpOworICAgICAgICAgICAgdGVzdCgnUjMnKTsKKyAgICAgICAgICAgIHRlc3QoJ0Uz
Jyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAgICAgdGVzdCgnUzQnKTsKKyAgICAg
ICAgICAgIHRlc3QoJ1A0Jyk7CisgICAgICAgICAgICB0ZXN0KCdSNCcpOworICAgICAgICAgICAg
dGVzdCgnRTQnKTsKKworICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAg
ICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgICAg
ICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9u
bG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgJmx0O3N0eWxlIHNjb3BlZCZndDs8L3A+
CisgICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9zcGFu
PgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgICAgIDxwcmUgaWQgPSAiUjEiIGNs
YXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBpZD0iRTEiIGNsYXNzPSJiYXoiPlRl
eHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8ZGl2PgorICAgICAgICAg
ICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgICAgICAgICAgZGl2IHsg
Y29sb3I6IHJlZDsgfQorICAgICAgICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAg
ICAgICAgICAgICBkaXYgLmJhciB7IGNvbG9yOiBibHVlOyB9CisgICAgICAgICAgICA8L3N0eWxl
PgorICAgICAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICAgICAgPHAg
aWQ9IlAyIj5UZXh0PC9wPgorICAgICAgICAgICAgPHByZSBpZD0iUjIiIGNsYXNzPSJiYXIiPlRl
eHQ8L3ByZT4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bh
bj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgICAgICA8cHJlIGlkID0gIlIzIiBj
bGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgIDxwcmUgaWQ9IkUzIiBjbGFzcz0iYmF6Ij5U
ZXh0PC9wcmU+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAgICAgICAgPHNw
YW4gaWQ9IlM0Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDQiPlRleHQ8L3A+CisgICAg
ICAgIDxwcmUgaWQgPSAiUjQiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBp
ZD0iRTQiIGNsYXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJj
b25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kN2VmNjUzMTc0MDcyYjc4ODdmN2RmM2RhYmY5MWE5YTcz
NDBlM2U4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkL3N0eWxlLXNjb3BlZC1kZXRhY2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1Rl
c3QgZGV0YWNoaW5nIGEgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCitUZXh0CitUZXh0CisKK1Rl
eHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0gT1JJR0lOQUwgLS0tCitTMTogcmdiKDAsIDAs
IDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4
LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEFGVEVSIERFVEFD
SElORyA8U1RZTEUgU0NPUEVEPiAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwg
MCkKK1MyOiByZ2IoMCwgMCwgMCkKK1AyOiByZ2IoMCwgMCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkK
K1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGM4YmY2YTg2NjEyNzBmODYxY2I4NTU4YWMzMjdhMTg3NzFmMzllZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtZGV0YWNoLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAg
ZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSht
c2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlk
KTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRD
b21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEFsbCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVz
dCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdTMycp
OworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZygnLS0tIE9SSUdJTkFMIC0t
LScpOworICAgICAgICAgICAgdGVzdEFsbCgpOworCisgICAgICAgICAgICBsb2coJy0tLSBBRlRF
UiBERVRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tJyk7CisgICAgICAgICAgICB2YXIgZGl2RWxl
bSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdESVYnKTsKKyAgICAgICAgICAgIHZhciBzdHls
ZUVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU1RZTEUnKTsKKyAgICAgICAgICAgIGRp
dkVsZW0ucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxv
ZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3Jp
cHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBj
b2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5U
ZXN0cygpOyI+CisgICAgPHA+VGVzdCBkZXRhY2hpbmcgYSAmbHQ7c3R5bGUgc2NvcGVkJmd0OyBl
bGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4K
KyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9IkRJ
ViI+CisgICAgICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+Cisg
ICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAgICAgICBwIHsgY29sb3I6IGdy
ZWVuOyB9CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bh
bj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+Cisg
ICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0
PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0
eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2EyMDU4N2RmNWFmZmY2MmRjMjdmNjJhYWVjNDUwYjMzNzY1Y2FjOAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCBy
ZW1vdmluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgPHN0eWxlPiBlbGVtZW50CisKK1Rl
eHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0K
K1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQor
UDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCist
LS0gQUZURVIgVU4tU0VUVElORyBAU0NPUEVEIC0tLQorUzE6IHJnYigyNTUsIDAsIDApCitQMTog
cmdiKDAsIDEyOCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitT
MzogcmdiKDI1NSwgMCwgMCkKK1AzOiByZ2IoMCwgMTI4LCAwKQorLS0tIEZJTklTSEVEIC0tLQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLXJlbW92ZS1zY29wZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhYWYzNzc0Y2Fi
MmZhNzRmZDcwYzYxMWFlMDMyYmExMTg0M2Q3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRt
bApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNn
KQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29s
ZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAg
bG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxl
bSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdCgnUzEnKTsK
KyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAg
ICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0
ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAg
ICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIFVOLVNFVFRJTkcgQFND
T1BFRCAtLS0nKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScp
LnJlbW92ZUF0dHJpYnV0ZSgnc2NvcGVkJyk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAgICAgICBsb2co
Jy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0
PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBib2R5IHsgY29s
b3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVz
dHMoKTsiPgorICAgIDxwPlRlc3QgcmVtb3ZpbmcgdGhlICdzY29wZWQnIGF0dHJpYnV0ZSBvbiBh
ICZsdDtzdHlsZSZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0i
UzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4K
KyAgICA8ZGl2PgorICAgICAgICA8c3R5bGUgaWQ9IlNUWUxFIiB0eXBlPSJ0ZXh0L2NzcyIgc2Nv
cGVkPgorICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAgcCB7IGNv
bG9yOiBncmVlbjsgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRl
eHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8
ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQ
MyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNj
b3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmZhMGM3OTYzYzk3YzQ3ODAxZTA4NDk2NzUxMTM3MjIyYzQ2NjVkMWMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUt
c2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1Rlc3Qgc2V0
dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgPHN0eWxlPiBlbGVtZW50CisKK1RleHQK
K1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0KK1Mx
OiByZ2IoMjU1LCAwLCAwKQorUDE6IHJnYigwLCAxMjgsIDApCitTMjogcmdiKDI1NSwgMCwgMCkK
K1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigyNTUsIDAsIDApCitQMzogcmdiKDAsIDEyOCwg
MCkKKy0tLSBBRlRFUiBTRVRUSU5HIEBTQ09QRUQgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTog
cmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6
IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNl
dC1zY29wZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtc2V0LXNjb3BlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5MDNiZDQxZTI5OWQwMzUwMWNlZjEw
NTQwZmUxOTUwMGM0ZTgyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbApAQCAtMCwwICsxLDcw
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7Cisg
ICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyAr
IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJv
cGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0
QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRl
c3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDIn
KTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisK
KyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIFNFVFRJTkcgQFNDT1BFRCAtLS0nKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScpLnNldEF0dHJpYnV0ZSgnc2Nv
cGVkJywgdHJ1ZSk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAt
LS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9Cisg
ICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxw
PlRlc3Qgc2V0dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgJmx0O3N0eWxlJmd0OyBl
bGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4K
KyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAg
ICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIj4KKyAgICAgICAgICAgIGRpdiB7
IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAg
PC9zdHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBp
ZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9
IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+
CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117130</attachid>
            <date>2011-11-29 23:26:46 -0800</date>
            <delta_ts>2011-12-07 03:34:21 -0800</delta_ts>
            <desc>Patch (requires 67718, 67790)</desc>
            <filename>bug-73190-20111130162644.patch</filename>
            <type>text/plain</type>
            <size>48114</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQ1MDY2MzE1OGIwY2Mx
YjM4Yzg3NGM0YzEyYWRlNmNlNTY1MGVlZC4uZTEzZmNkYmQxZGNkZjUwZGVhZTBiYThkMTAyNTYw
NTMwZDZiM2U3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDExLTExLTI5ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIDxzdHls
ZSBzY29wZWQ+OiBJbXBsZW1lbnQgc2NvcGVkIHN0eWxlc2hlZXRzIGFuZCBiYXNpYyBhcHBsaWNh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMx
OTAKKworICAgICAgICBJbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgPHN0eWxlIHNjb3BlZD46Cisg
ICAgICAgIFN0b3JlIHNjb3BlZCBzdHlsZSBzaGVldHMgaW4gYSBzZXBhcmF0ZSBkYXRhIHN0cnVj
dHVyZSBTY29wZWRSdWxlU2V0cy4KKyAgICAgICAgQWRkIGEgdmVjdG9yIHN0YWNrIHRvIENTU1N0
eWxlU2VsZWN0b3IgdGhhdCBrZWVwcyB0cmFjayBvZiBlbmNvdW50ZXJlZCBzY29waW5nIGVsZW1l
bnRzLiBUaGlzIGlzCisgICAgICAgIHVzZWQgZm9yIE8oMSkgYWNjZXNzIHRvIGFsbCByZWxldmFu
dCBzdHlsZSBzaGVldHMgZm9yIGEgZ2l2ZW4gZWxlbWVudC4KKyAgICAgICAgRmluYWxseSwgcHJl
dmVudCBzdHlsZSBzaGFyaW5nIGZyb20gY3Jvc3NpbmcgaW50by9vdXQgb2Ygc2NvcGVkIHN0eWxl
IGJvdW5kYXJpZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdHM6IGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFz
aWMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1kZXRhY2guaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHA6IGFkZCBzdXBwb3J0IGZvciBzY29wZWQgYXV0aG9yIHNoZWV0cwor
ICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OlNjb3BlZFJ1bGVTZXRzKTogY2xhc3Mg
Zm9yIHNjb3BlZCBhdXRob3Igc2hlZXRzCisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0
czo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2Vs
ZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU2Nv
cGluZ0VsZW1lbnQpOiBkZXRlcm1pbmUgd2hldGhlciBhbiBhdXRob3Igc2hlZXQgaXMgc2NvcGVk
IChhbmQgdG8gd2hpY2ggc2NvcGUpLCBvciBnbG9iYWwKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OnB1c2hQYXJlbnQpOiB0YWtlIG92ZXIgc29tZSBvZiB0aGUgbG9naWMgb2Yg
U2VsZWN0b3JDaGVja2VyOjpwdXNoUGFyZW50LCBpbiBvcmRlciB0byBtYWludGFpbiBtX3Njb3Bp
bmdQYXJlbnRTdGFjaworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFy
ZW50KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyk6IGhlbHBlciBmdW5jdGlvbgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6IGNoYW5nZWQgY2FsbCB0byBtYXRjaEF1
dGhvclJ1bGVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhv
clJ1bGVzKTogbWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcworICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyk6IGFkZCAnc2NvcGUnIHBhcmFtZXRlcgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlU2V0KTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KTogZGl0dG8K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QpOiBw
cmV2ZW50IHN0eWxlIHNoYXJpbmcgYWNyb3NzIHNjb3BlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6IGRpdHRv
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGFyZWRTdHlsZSk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZv
ckVsZW1lbnQpOiBjaGFuZ2VkIGNhbGwgdG8gbWF0Y2hBdXRob3JSdWxlcworICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKTogY29tbWVudAorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tSZWdpb25TdHlsZSk6IGFkZCBnbG9iYWwg
c2NvcGUgcGFyYW1ldGVyCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6IGNoYW5nZWQgY2FsbCB0byBtYXRjaEF1dGhvclJ1bGVz
CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCk6IGFkZCBjb21t
ZW50cyBmb3IgQGZvbnQtZmFjZSBhbmQgQGtleWZyYW1lcworICAgICAgICAoV2ViQ29yZTo6U2Nv
cGVkUnVsZVNldHM6On5TY29wZWRSdWxlU2V0cyk6IGRhdGEgc3RydWN0dXJlIHRvIG1hcCBzY29w
ZSAtPiBSdWxlU2V0IAorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OmVuc3VyZUV4
aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6Y29sbGVjdEZlYXR1cmVz
KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9TZWxl
Y3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpwdXNo
UGFyZW50KTogc2ltcGxpZnkKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6c2V0
dXBQYXJlbnRTdGFjayk6IHJlZmFjdG9yaW5nIG9mIHByZXZpb3VzIHB1c2hQYXJlbnQKKyAgICAg
ICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNo
ZWNrZXI6OnBvcFBhcmVudCk6IHNpbXBsaWZ5CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNo
ZWNrZXI6OnBhcmVudFN0YWNrSXNFbXB0eSk6IGFkZGl0aW9uYWwgaGVscGVyIGZ1bmN0aW9uCisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnBhcmVudFN0YWNrSXNDb25zaXN0ZW50
KTogbWFrZSBwYXJhbWV0ZXIgY29uc3QKKwogMjAxMS0xMS0xNiAgUm9sYW5kIFN0ZWluZXIgIDxy
b2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8c3R5bGUgc2NvcGVkPjogSW1w
bGVtZW50IHJlZ2lzdGVyaW5nIG9mIDxzdHlsZSBzY29wZWQ+IHdpdGggdGhlIHNjb3BpbmcgZWxl
bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IGUwYTA0Y2I1
YThlYjc1ZDE3YjhmOGEwZTAzYzFkNDg0NGRiZDc1NzYuLmNhNjk4MWFmOWEyZWNhYTkzOTk2ODUz
MzdlMjVjYmJlNWViZDJiNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFByb2dyZXNzRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50
LmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCiAjaW5jbHVkZSAiTGlua0hhc2guaCIKQEAg
LTIwNyw3ICsyMDgsNyBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3Ry
aW5nSW1wbCosIFZlY3RvcjxSdWxlRGF0YT4qPiBBdG9tUnVsZU1hcDsKIAotICAgIHZvaWQgYWRk
UnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3Im
LCBDU1NTdHlsZVNlbGVjdG9yKiA9IDApOworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoQ1NT
U3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNlbGVjdG9y
KiA9IDAsIGNvbnN0IEVsZW1lbnQqID0gMCk7CiAKICAgICB2b2lkIGFkZFN0eWxlUnVsZShDU1NT
dHlsZVJ1bGUqIGl0ZW0pOwogICAgIHZvaWQgYWRkUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENT
U1NlbGVjdG9yKiBzZWwpOwpAQCAtMjQxLDYgKzI0MiwyMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBt
X2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7CiB9OwogCitjbGFzcyBTY29wZWRSdWxlU2V0cyB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NvcGVkUnVsZVNldHMpOworcHVibGljOgorICAgIFNj
b3BlZFJ1bGVTZXRzKCkgeyB9CisgICAgflNjb3BlZFJ1bGVTZXRzKCk7CisKKyAgICBSdWxlU2V0
KiBnZXQoY29uc3QgRWxlbWVudCogc2NvcGUpIHsgcmV0dXJuIG1fc2NvcGVkUnVsZVNldE1hcC5n
ZXQoc2NvcGUpOyB9CisgICAgUnVsZVNldCogZW5zdXJlRXhpc3RzKGNvbnN0IEVsZW1lbnQqKTsK
KworICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEVsZW1lbnQqLCBS
dWxlU2V0Kj4gU2NvcGVkUnVsZVNldE1hcDsKKworICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9zY29w
ZWRSdWxlU2V0TWFwOworfTsKKwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRTdHlsZTsKIHN0YXRp
YyBSdWxlU2V0KiBkZWZhdWx0UXVpcmtzU3R5bGU7CiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFBy
aW50U3R5bGU7CkBAIC0zNjMsNiArMzgxLDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVT
ZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAg
ICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2aWV3LT5t
ZWRpYVR5cGUoKSwgdmlldy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0eWxlLmdldCgpKSk7CiAK
ICAgICBtX2F1dGhvclN0eWxlID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOworICAgIG1fc2NvcGVk
QXV0aG9yU3R5bGVzID0gYWRvcHRQdHIobmV3IFNjb3BlZFJ1bGVTZXRzKTsKICAgICAvLyBBZGRp
bmcgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgogICAgIG1f
YXV0aG9yU3R5bGUtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKIApAQCAtMzkzLDE1ICs0MTIs
MjMgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1l
bnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAgbV91c2VyU3R5bGUgPSB0ZW1w
VXNlclN0eWxlLnJlbGVhc2UoKTsKIAogICAgIC8vIEFkZCBydWxlcyBmcm9tIGVsZW1lbnRzIGxp
a2UgU1ZHJ3MgPGZvbnQtZmFjZT4KLSAgICBpZiAobWFwcGVkRWxlbWVudFNoZWV0KQorICAgIGlm
IChtYXBwZWRFbGVtZW50U2hlZXQpIHsKKyAgICAgICAgLy8gRklYTUU6IHNlZSBpZiBzdHlsZSBz
Y29wZXMgY2FuL3Nob3VsZCBiZSBhZGRlZCBoZXJlLgogICAgICAgICBtX2F1dGhvclN0eWxlLT5h
ZGRSdWxlc0Zyb21TaGVldChtYXBwZWRFbGVtZW50U2hlZXQsICptX21lZGl1bSwgdGhpcyk7Cisg
ICAgfQogCiAgICAgLy8gYWRkIHN0eWxlc2hlZXRzIGZyb20gZG9jdW1lbnQKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdHlsZVNoZWV0cy0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gc3R5bGVT
aGVldHMtPml0ZW0oaSk7Ci0gICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkgJiYg
IXNoZWV0LT5kaXNhYmxlZCgpKQotICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNG
cm9tU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwgKm1fbWVkaXVtLCB0
aGlzKTsKKyAgICAgICAgaWYgKHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhc2hlZXQtPmRp
c2FibGVkKCkpIHsKKyAgICAgICAgICAgIENTU1N0eWxlU2hlZXQqIGNzc1NoZWV0ID0gc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KTsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQq
IHNjb3BlID0gZGV0ZXJtaW5lU2NvcGluZ0VsZW1lbnQoY3NzU2hlZXQpOworICAgICAgICAgICAg
aWYgKHNjb3BlKQorICAgICAgICAgICAgICAgIG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5lbnN1cmVF
eGlzdHMoc2NvcGUpLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlz
LCBzY29wZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9hdXRob3JTdHls
ZS0+YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgICAg
IH0KICAgICB9CiAgICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxlcyB1c2luZyBzaWJsaW5n
IHNlbGVjdG9ycyAoOmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQogICAgIC8vIGluIHRoZSBjdXJy
ZW50IHNldCBvZiBzdHlsZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhpcyBpbmZv
cm1hdGlvbiB0byByZWplY3QKQEAgLTQxMiw2ICs0MzksNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpD
U1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxl
U2hlZQogICAgIGlmICh1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzSW5EZWZhdWx0U3R5bGUpCiAgICAg
ICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXNJbkRlZmF1bHRTdHlsZS0+Y29sbGVjdEZlYXR1cmVz
KG1fZmVhdHVyZXMpOwogICAgIG1fYXV0aG9yU3R5bGUtPmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1
cmVzKTsKKyAgICBtX3Njb3BlZEF1dGhvclN0eWxlcy0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVy
ZXMpOwogICAgIGlmIChtX3VzZXJTdHlsZSkKICAgICAgICAgbV91c2VyU3R5bGUtPmNvbGxlY3RG
ZWF0dXJlcyhtX2ZlYXR1cmVzKTsKIApAQCAtNDI1LDYgKzQ1Myw1NCBAQCBDU1NTdHlsZVNlbGVj
dG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3Qq
IHN0eWxlU2hlZQogICAgICAgICBkb2N1bWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgp
LnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CiB9CiAKK0VsZW1lbnQqIENTU1N0eWxlU2VsZWN0b3I6
OmRldGVybWluZVNjb3BpbmdFbGVtZW50KGNvbnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0KQorewor
ICAgIEFTU0VSVChzaGVldCk7CisKKyAgICBOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+ZmluZFN0
eWxlU2hlZXRPd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSB8fCAhb3duZXJOb2RlLT5p
c0hUTUxFbGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxl
VGFnKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3duZXJOb2RlKTsKKyAgICBp
ZiAoIXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIHN0eWxlRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworfQorCit2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OnB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KQoreworICAgIC8vIFdlIGFyZSBub3Qg
YWx3YXlzIGludm9rZWQgY29uc2lzdGVudGx5LiBGb3IgZXhhbXBsZSwgc2NyaXB0IGV4ZWN1dGlv
biBjYW4gY2F1c2UgdXMgdG8gZW50ZXIKKyAgICAvLyBzdHlsZSByZWNhbGMgaW4gdGhlIG1pZGRs
ZSBvZiB0cmVlIGJ1aWxkaW5nLiBXZSBtYXkgYWxzbyBiZSBpbnZva2VkIGZyb20gc29tZXdoZXJl
IHdpdGhpbiB0aGUgdHJlZS4KKyAgICAvLyBSZXNldCB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLCBv
ciBpZiB3ZSBzZWUgYSBuZXcgcm9vdCBlbGVtZW50LgorICAgIGlmICghcGFyZW50LT5wYXJlbnRP
ckhvc3RFbGVtZW50KCkgfHwgbV9jaGVja2VyLnBhcmVudFN0YWNrSXNFbXB0eSgpKSB7CisgICAg
ICAgIG1fY2hlY2tlci5zZXR1cFBhcmVudFN0YWNrKHBhcmVudCk7CisgICAgICAgIG1fc2NvcGlu
Z0VsZW1lbnRTdGFjay5yZXNpemUoMCk7CisgICAgICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9
IHBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAocGFyZW50
LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICAgICAgICAgIG1fc2NvcGluZ0Vs
ZW1lbnRTdGFjay5hcHBlbmQocGFyZW50KTsKKyAgICAgICAgfQorICAgICAgICBtX3Njb3BpbmdF
bGVtZW50U3RhY2sucmV2ZXJzZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIE90
aGVyd2lzZSwganVzdCBwdXNoIHRoZSBuZXcgcGFyZW50LiBIb3dldmVyLCBub3RlIHRoYXQgd2Ug
bWF5IGdldCBpbnZva2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50cworICAgIC8vIGluIHNvbWUg
d2Fja3kgY2FzZXMgZHVyaW5nIHN0eWxlIHJlc29sdmUuIFBhdXNlIG1haW50YWluaW5nIHRoZSBz
dGFjayBpbiB0aGlzIGNhc2UuCisgICAgbV9jaGVja2VyLnB1c2hQYXJlbnQocGFyZW50KTsKKyAg
ICBpZiAobV9jaGVja2VyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHBhcmVudCkgJiYgcGFyZW50
LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICBtX3Njb3BpbmdFbGVtZW50U3Rh
Y2suYXBwZW5kKHBhcmVudCk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFyZW50
KEVsZW1lbnQqIHBhcmVudCkKK3sKKyAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGdldCBpbnZva2Vk
IGZvciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHls
ZSByZXNvbHZlLgorICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNh
c2UuCisgICAgaWYgKG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJlbnQpKSB7
CisgICAgICAgIG1fY2hlY2tlci5wb3BQYXJlbnQoKTsKKyAgICAgICAgaWYgKCFtX3Njb3BpbmdF
bGVtZW50U3RhY2suaXNFbXB0eSgpICYmIHBhcmVudCA9PSBtX3Njb3BpbmdFbGVtZW50U3RhY2su
bGFzdCgpKQorICAgICAgICAgICAgbV9zY29waW5nRWxlbWVudFN0YWNrLnJlbW92ZUxhc3QoKTsK
KyAgICB9Cit9CisKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkUmVnaW9uU3R5bGVSdWxlKFBh
c3NSZWZQdHI8Q1NTUmVnaW9uU3R5bGVSdWxlPiByZWdpb25TdHlsZVJ1bGUpCiB7CiAgICAgbV9y
ZWdpb25TdHlsZVJ1bGVzLmFwcGVuZChyZWdpb25TdHlsZVJ1bGUpOwpAQCAtNTkxLDYgKzY2Nyw0
MyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZQogICAgIG5ld0RlY2xhcmF0aW9uLmxpbmtNYXRj
aFR5cGUgPSBsaW5rTWF0Y2hUeXBlOwogfQogCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNo
QXV0aG9yUnVsZXMoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKQoreworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAg
ICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgorICAgIG1hdGNoUnVsZVNldChtX2F1dGhv
clN0eWxlLmdldCgpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5
UnVsZXMpOworICAgIC8vIE1hdGNoIHNjb3BlZCBzdHlsZSBzaGVldCdzIHJ1bGVzLgorICAgIGlm
IChtX2NoZWNrZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQobV9wYXJlbnROb2RlKSkgeworICAg
ICAgICAvLyBGYXN0IGJyYW5jaDogYWNjZXNzIGVuY2xvc2luZyBzY29wZXMgZGlyZWN0bHkgZnJv
bSB2ZWN0b3IsIGJ1dCBzdGFydCB3aXRoIGN1cnJlbnQgZWxlbWVudC4KKyAgICAgICAgaWYgKG1f
ZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkgeworICAgICAgICAgICAgUnVsZVNl
dCogcnVsZVNldCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5nZXQobV9lbGVtZW50KTsKKyAgICAg
ICAgICAgIGlmIChydWxlU2V0KQorICAgICAgICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0
LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAg
ICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX3Njb3BpbmdFbGVtZW50U3RhY2suc2l6
ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBjb25zdCBFbGVtZW50KiBzY29wZSA9IG1f
c2NvcGluZ0VsZW1lbnRTdGFja1tpIC0gMV07CisgICAgICAgICAgICBSdWxlU2V0KiBydWxlU2V0
ID0gbV9zY29wZWRBdXRob3JTdHlsZXMtPmdldChzY29wZSk7CisgICAgICAgICAgICBpZiAocnVs
ZVNldCkKKyAgICAgICAgICAgICAgICBtYXRjaFJ1bGVTZXQocnVsZVNldCwgZmlyc3RSdWxlSW5k
ZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIFNsb3cgYnJhbmNoOiBjbGltYiB0cmVlLCBjaGVjayBmb3Igc3R5
bGUgc2NvcGVzIGF0IGV2ZXJ5IGVsZW1lbnQuCisgICAgICAgIGZvciAoY29uc3QgTm9kZSogbm9k
ZSA9IG1fZWxlbWVudDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgICAg
ICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUp
OworICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9
IG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5nZXQoZWxlbWVudCk7CisgICAgICAgICAgICBpZiAocnVs
ZVNldCkKKyAgICAgICAgICAgICAgICBtYXRjaFJ1bGVTZXQocnVsZVNldCwgZmlyc3RSdWxlSW5k
ZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcygpOworfQorCiB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICAgICBtX21h
dGNoZWRSdWxlcy5jbGVhcigpOwpAQCAtNTk4LDYgKzcxMSwxNyBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdAogICAgIGlmICghcnVsZXMgfHwgIW1fZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwog
CisgICAgbWF0Y2hSdWxlU2V0KHJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwg
aW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcygpOwor
fQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZVNldChSdWxlU2V0KiBydWxlcywg
aW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKQoreworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICBpZiAoIXJ1bGVz
IHx8ICFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIFdlIG5lZWQgdG8gY29s
bGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0aGluZyBlbHNlIGlu
dG8gYSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0IHRoZSBidWZmZXIuCiAgICAgaWYgKG1f
ZWxlbWVudC0+aGFzSUQoKSkKQEAgLTYyMCwzMyArNzQ0LDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQm
IGxhc3QKICAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmZvY3VzUHNldWRvQ2xhc3NS
dWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMp
OwogICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT50YWdSdWxlcyhtX2VsZW1lbnQtPmxvY2Fs
TmFtZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1w
dHlSdWxlcyk7CiAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPnVuaXZlcnNhbFJ1bGVzKCks
IGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0KLSAg
ICAvLyBJZiB3ZSBkaWRuJ3QgbWF0Y2ggYW55IHJ1bGVzLCB3ZSdyZSBkb25lLgotICAgIGlmICht
X21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNvcnQg
dGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKLQotICAg
IC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlz
dCBvZiBkZWNscy4KLSAgICBpZiAoIW1fY2hlY2tlci5pc0NvbGxlY3RpbmdSdWxlc09ubHkoKSkg
ewotICAgICAgICAvLyBGSVhNRTogVGhpcyBzdWNrcywgdGhlIGluc3BlY3RvciBzaG91bGQgZ2V0
IHRoZSBzdHlsZSBmcm9tIHRoZSB2aXNpdGVkIHN0eWxlIGl0c2VsZi4KLSAgICAgICAgYm9vbCBz
d2FwVmlzaXRlZFVudmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1
ZG9TdGF0ZShtX2VsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICAgICAgICBpZiAobV9zdHlsZSAmJiBtX21hdGNoZWRSdWxlc1tpXS0+Y29udGFpbnNVbmNv
bW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0QWZm
ZWN0ZWRCeVVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3JzKCk7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBsaW5rTWF0Y2hUeXBlID0gbV9tYXRjaGVkUnVsZXNbaV0tPmxpbmtNYXRjaFR5cGUoKTsKLSAg
ICAgICAgICAgIGlmIChzd2FwVmlzaXRlZFVudmlzaXRlZCAmJiBsaW5rTWF0Y2hUeXBlICYmIGxp
bmtNYXRjaFR5cGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCkKLSAgICAgICAgICAgICAg
ICBsaW5rTWF0Y2hUeXBlID0gKGxpbmtNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRj
aFZpc2l0ZWQpID8gU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmsgOiBTZWxlY3RvckNoZWNrZXI6
Ok1hdGNoVmlzaXRlZDsKLSAgICAgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNo
ZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpLCBsaW5rTWF0Y2hUeXBlKTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21h
dGNoZWRSdWxlcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQot
ICAgICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAg
ICAgICAgICBtX3J1bGVMaXN0LT5hcHBlbmQobV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKSk7Ci0g
ICAgICAgIH0KLSAgICB9CiB9CiAKIGNsYXNzIE1hdGNoaW5nVUFSdWxlc1Njb3BlIHsKQEAgLTcz
OCw2ICs4MzUsMzQgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKCkK
ICAgICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5k
KCksIGNvbXBhcmVSdWxlcyk7CiB9CiAKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKCkKK3sKKyAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4o
KSwgbV9tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7CisKKyAgICBpZiAobV9jaGVj
a2VyLmlzQ29sbGVjdGluZ1J1bGVzT25seSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKCFt
X3J1bGVMaXN0KQorICAgICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3Jl
YXRlKCk7CisgICAgICAgICAgICBtX3J1bGVMaXN0LT5hcHBlbmQobV9tYXRjaGVkUnVsZXNbaV0t
PnJ1bGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJ
WE1FOiBUaGlzIHN1Y2tzLCB0aGUgaW5zcGVjdG9yIHNob3VsZCBnZXQgdGhlIHN0eWxlIGZyb20g
dGhlIHZpc2l0ZWQgc3R5bGUgaXRzZWxmLgorICAgIGJvb2wgc3dhcFZpc2l0ZWRVbnZpc2l0ZWQg
PSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUobV9lbGVtZW50LCBD
U1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChtX3N0eWxlICYmIG1f
bWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAg
ICAgICAgICAgIG1fc3R5bGUtPnNldEFmZmVjdGVkQnlVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9y
cygpOworICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbV9tYXRjaGVkUnVsZXNbaV0t
PmxpbmtNYXRjaFR5cGUoKTsKKyAgICAgICAgaWYgKHN3YXBWaXNpdGVkVW52aXNpdGVkICYmIGxp
bmtNYXRjaFR5cGUgJiYgbGlua01hdGNoVHlwZSAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxs
KQorICAgICAgICAgICAgbGlua01hdGNoVHlwZSA9IChsaW5rTWF0Y2hUeXBlID09IFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hWaXNpdGVkKSA/IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rIDogU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7CisgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlv
bihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpLCBsaW5rTWF0Y2hUeXBl
KTsKKyAgICB9Cit9CisKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0KQogewogICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQpOwpAQCAtNzkwLDcg
KzkxNSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3Vs
dCYgcmVzdWx0KQogICAgIAogICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRz
IG5leHQuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBtYXRj
aFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5maXJzdEF1dGhvclJ1bGUsIHJlc3Vs
dC5sYXN0QXV0aG9yUnVsZSwgZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3Vs
dC5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5sYXN0QXV0aG9yUnVsZSwgZmFsc2UpOwogICAgICAg
ICAKICAgICAvLyBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCiAgICAgaWYg
KG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCkgewpAQCAtODUz
LDYgKzk3OCw4IEBAIE5vZGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QoRWxl
bWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDCiAgICAgICAgIHJldHVybiAwOwog
ICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAg
ICAgICByZXR1cm4gMDsKICAgICBTdHlsZWRFbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8U3R5bGVk
RWxlbWVudCo+KHBhcmVudCk7CiAgICAgaWYgKHAtPmlubGluZVN0eWxlRGVjbCgpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTEwMDMsNiArMTEzMCw5IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6
Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgaWYgKGVsZW1l
bnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlk
Rm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgaWYgKGVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgIGJvb2wgaXNDb250cm9sID0gZWxlbWVudC0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKTsKIAogICAgIGlmIChpc0NvbnRyb2wgIT0gbV9lbGVtZW50LT5pc0Zvcm1Db250cm9s
RWxlbWVudCgpKQpAQCAtMTA3NCw2ICsxMjA0LDggQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2Vs
ZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHBh
cmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQor
ICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0
aGVpciBjb3VzaW5zLgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKQEAgLTEzOTEsNyArMTUyMyw3
IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxl
Rm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sCiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMpIHsKICAgICAgICAgbWF0Y2hSdWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwgbWF0Y2hS
ZXN1bHQuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQubGFzdFVzZXJSdWxlLCBmYWxzZSk7Ci0g
ICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgbWF0Y2hSZXN1bHQuZmlyc3RB
dXRob3JSdWxlLCBtYXRjaFJlc3VsdC5sYXN0QXV0aG9yUnVsZSwgZmFsc2UpOworICAgICAgICBt
YXRjaEF1dGhvclJ1bGVzKG1hdGNoUmVzdWx0LmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQu
bGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAobV9tYXRjaGVkRGVjbHMu
aXNFbXB0eSgpKQpAQCAtMTQyOCw2ICsxNTYwLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgY29uc3Qg
U3RyaW5nIHBhZ2UgPSBwYWdlTmFtZShwYWdlSW5kZXgpOwogICAgIG1hdGNoUGFnZVJ1bGVzKGRl
ZmF1bHRQcmludFN0eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwogICAgIG1hdGNoUGFnZVJ1
bGVzKG1fdXNlclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOworICAgIC8vIE9u
bHkgY29uc2lkZXIgdGhlIGdsb2JhbCBSdWxlU2V0IGZvciBAcGFnZSBydWxlcywgYXMgcGVyIHRo
ZSBIVE1MNSBzcGVjLgogICAgIG1hdGNoUGFnZVJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlz
TGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIGJv
b2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwpAQCAtMTY3Nyw2ICsxODEwLDggQEAgYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjpjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqIGUpCiAgICAgZm9yIChWZWN0
b3I8UmVmUHRyPENTU1JlZ2lvblN0eWxlUnVsZT4gPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lvblN0
eWxlUnVsZXMuYmVnaW4oKTsgaXQgIT0gbV9yZWdpb25TdHlsZVJ1bGVzLmVuZCgpOyArK2l0KSB7
CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgcmVnaW9uU2VsZWN0b3JMaXN0ID0gKCpp
dCktPnNlbGVjdG9yTGlzdCgpOwogICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gcmVnaW9u
U2VsZWN0b3JMaXN0LmZpcnN0KCk7IHM7IHMgPSByZWdpb25TZWxlY3Rvckxpc3QubmV4dChzKSkg
eworICAgICAgICAgICAgLy8gRklYTUUgKEJVRyA3MjQ3Mik6IFdlIGRvbid0IGFkZCBALXdlYmtp
dC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudCwKKyAg
ICAgICAgICAgIC8vIHNvIGFsbCByZWdpb24gcnVsZXMgYXJlIGdsb2JhbCBieSBkZWZhdWx0LiBW
ZXJpZnkgd2hldGhlciB0aGF0IGNhbiBzdGFuZCBvciBuZWVkcyBjaGFuZ2luJy4KICAgICAgICAg
ICAgIGlmIChtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzLCBlKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTczNiw3ICsxODcxLDcgQEAgUGFzc1JlZlB0cjxD
U1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQo
RWxlbWVudCogZSwKICAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9ICEocnVsZXNUb0luY2x1ZGUg
JiBDcm9zc09yaWdpbkNTU1J1bGVzKTsKIAogICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4g
YXV0aG9yIHNoZWV0cy4KLSAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBk
dW1teS5maXJzdEF1dGhvclJ1bGUsIGR1bW15Lmxhc3RBdXRob3JSdWxlLCBydWxlc1RvSW5jbHVk
ZSAmIEVtcHR5Q1NTUnVsZXMpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKGR1bW15LmZpcnN0
QXV0aG9yUnVsZSwgZHVtbXkubGFzdEF1dGhvclJ1bGUsIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlD
U1NSdWxlcyk7CiAKICAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9IGZhbHNlOwogICAgIH0KQEAg
LTE5MTgsNyArMjA1Myw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUGFnZVJ1bGUoQ1NTUGFnZVJ1bGUq
IHJ1bGUpCiAgICAgbV9wYWdlUnVsZXMuYXBwZW5kKFJ1bGVEYXRhKHJ1bGUsIHJ1bGUtPnNlbGVj
dG9yTGlzdCgpLmZpcnN0KCksIG1fcGFnZVJ1bGVzLnNpemUoKSkpOwogfQogCi12b2lkIFJ1bGVT
ZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpCit2
b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25z
dCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2Vs
ZWN0b3IsIGNvbnN0IEVsZW1lbnQqIHNjb3BlKQogewogICAgIGlmICghc2hlZXQpCiAgICAgICAg
IHJldHVybjsKQEAgLTE5MzksNyArMjA3NCw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9t
U2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImCiAg
ICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSB7CiAgICAgICAgICAgICBDU1NJ
bXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVsZSk7CiAg
ICAgICAgICAgICBpZiAoIWltcG9ydC0+bWVkaWEoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnQtPm1l
ZGlhKCksIHN0eWxlU2VsZWN0b3IpKQotICAgICAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0
KGltcG9ydC0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IpOworICAgICAgICAg
ICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydC0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHN0
eWxlU2VsZWN0b3IsIHNjb3BlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChydWxlLT5p
c01lZGlhUnVsZSgpKSB7CiAgICAgICAgICAgICBDU1NNZWRpYVJ1bGUqIHIgPSBzdGF0aWNfY2Fz
dDxDU1NNZWRpYVJ1bGUqPihydWxlKTsKQEAgLTE5NTUsMjIgKzIwOTAsMzggQEAgdm9pZCBSdWxl
U2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFR
dWVyeUV2YWx1YXRvciYKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRp
Y19jYXN0PENTU1BhZ2VSdWxlKj4oY2hpbGRJdGVtKSk7CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGNoaWxkSXRlbS0+aXNGb250RmFjZVJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0IGFk
ZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQu
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDU1NGb250
RmFjZVJ1bGUqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGNo
aWxkSXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2Vs
ZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY2hpbGRJdGVtLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVj
dG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxl
IHRvIG91ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjIp
OiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9y
IHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBz
dHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZy
YW1lc1J1bGUqPihjaGlsZEl0ZW0pKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0gICAvLyBmb3IgcnVsZXMKICAgICAgICAgICAgIH0gICAvLyBpZiBydWxlcwogICAg
ICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3Rvcikg
ewogICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAgICAg
ICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBv
ZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYgKHNj
b3BlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgQ1NTRm9u
dEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihy
dWxlKTsKICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250
RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKLSAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0tleWZy
YW1lc1J1bGUoKSkKKyAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0tleWZyYW1lc1J1bGUoKSkg
eworICAgICAgICAgICAgLy8gRklYTUUgKEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJh
bWUgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAg
ICAgIGlmIChzY29wZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN0
eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZSo+KHJ1bGUpKTsKLSAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNSZWdpb25TdHlsZVJ1
bGUoKSAmJiBzdHlsZVNlbGVjdG9yKQorICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9u
U3R5bGVSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgeworICAgICAgICAgICAgLy8gRklYTUUgKEJV
RyA3MjQ3Mik6IFdlIGRvbid0IGFkZCBALXdlYmtpdC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVkIHN0
eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZFJlZ2lv
blN0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NSZWdpb25TdHlsZVJ1bGUqPihydWxlKSk7CisgICAg
ICAgIH0KICAgICB9CiAgICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCkKICAgICAgICAg
c2hyaW5rVG9GaXQoKTsKQEAgLTIwNzQsNiArMjIyNSwyOSBAQCB2b2lkIFJ1bGVTZXQ6OnNocmlu
a1RvRml0KCkKICAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOwogfQogCitTY29wZWRSdWxl
U2V0czo6flNjb3BlZFJ1bGVTZXRzKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9zY29wZWRS
dWxlU2V0TWFwKTsKK30KKworUnVsZVNldCogU2NvcGVkUnVsZVNldHM6OmVuc3VyZUV4aXN0cyhj
b25zdCBFbGVtZW50KiBzY29wZSkKK3sKKyAgICBzdGQ6OnBhaXI8U2NvcGVkUnVsZVNldE1hcDo6
aXRlcmF0b3IsIGJvb2w+IHJldHVyblZhbHVlID0gbV9zY29wZWRSdWxlU2V0TWFwLmFkZChzY29w
ZSwgMCk7CisgICAgUnVsZVNldComIHJ1bGVTZXRQdHIgPSByZXR1cm5WYWx1ZS5maXJzdC0+c2Vj
b25kOworICAgIGlmIChyZXR1cm5WYWx1ZS5zZWNvbmQpIHsKKyAgICAgICAgQVNTRVJUKCFydWxl
U2V0UHRyKTsKKyAgICAgICAgcnVsZVNldFB0ciA9IG5ldyBSdWxlU2V0OworICAgIH0KKyAgICBB
U1NFUlQocnVsZVNldFB0cik7CisgICAgcmV0dXJuIHJ1bGVTZXRQdHI7Cit9CisKK3ZvaWQgU2Nv
cGVkUnVsZVNldHM6OmNvbGxlY3RGZWF0dXJlcyhDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYg
ZmVhdHVyZXMpIGNvbnN0Cit7CisgICAgZm9yIChTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fc2NvcGVkUnVsZVNldE1hcC5iZWdpbigpLCBpdEVuZCA9IG1fc2NvcGVkUnVs
ZVNldE1hcC5lbmQoKTsgaXQgIT0gaXRFbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPmNv
bGxlY3RGZWF0dXJlcyhmZWF0dXJlcyk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIC8vIHRoaXMgaXMgbW9zdGx5IGJvcmluZyBzdHVmZiBvbiBob3cgdG8gYXBwbHkgYSBj
ZXJ0YWluIHJ1bGUgdG8gdGhlIHJlbmRlcnN0eWxlLi4uCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCmluZGV4IGU0ZmJmMjg0MTI2MjIzYzQ2YzMwOTMxZWQ4MWM4YTBlOWRiZGEy
MzUuLmJiOTE1MWFiMzI3ZWI0MzI5OTBhNTZmMjdkMDNmODM1ZTMwYTJjZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaApAQCAtNjYsNiArNjYsNyBAQCBjbGFzcyBNZWRpYVF1
ZXJ5RXZhbHVhdG9yOwogY2xhc3MgTm9kZTsKIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3MgUnVsZVNl
dDsKK2NsYXNzIFNjb3BlZFJ1bGVTZXRzOwogY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBTdHlsZUlt
YWdlOwogY2xhc3MgU3R5bGVQZW5kaW5nSW1hZ2U7CkBAIC0xMDAsOSArMTAxLDExIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZywgYm9vbCBtYXRjaEF1
dGhvckFuZFVzZXJTdHlsZXMpOwogICAgIH5DU1NTdHlsZVNlbGVjdG9yKCk7CiAKKyAgICBzdGF0
aWMgRWxlbWVudCogZGV0ZXJtaW5lU2NvcGluZ0VsZW1lbnQoY29uc3QgQ1NTU3R5bGVTaGVldCop
OworCiAgICAgLy8gVXNpbmcgdGhlc2UgZHVyaW5nIHRyZWUgd2FsayB3aWxsIGFsbG93IHN0eWxl
IHNlbGVjdG9yIHRvIG9wdGltaXplIGNoaWxkIGFuZCBkZXNjZW5kYW50IHNlbGVjdG9yIGxvb2t1
cHMuCi0gICAgdm9pZCBwdXNoUGFyZW50KEVsZW1lbnQqIHBhcmVudCkgeyBtX2NoZWNrZXIucHVz
aFBhcmVudChwYXJlbnQpOyB9Ci0gICAgdm9pZCBwb3BQYXJlbnQoRWxlbWVudCogcGFyZW50KSB7
IG1fY2hlY2tlci5wb3BQYXJlbnQocGFyZW50KTsgfQorICAgIHZvaWQgcHVzaFBhcmVudChFbGVt
ZW50Kik7CisgICAgdm9pZCBwb3BQYXJlbnQoRWxlbWVudCopOwogCiAgICAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSAwLCBib29sIGFsbG93U2hhcmluZyA9IHRydWUsIGJvb2wgcmVzb2x2ZUZvclJvb3RE
ZWZhdWx0ID0gZmFsc2UpOwogCkBAIC0yNTUsMTAgKzI1OCwxMyBAQCBwcml2YXRlOgogICAgIH07
CiAgICAgdm9pZCBtYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAgICAgdm9pZCBtYXRjaFVB
UnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
ICAgICB2b2lkIG1hdGNoUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaFJ1
bGVTZXQoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFJ1bGVzRm9yTGlzdChjb25z
dCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUlu
ZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBib29sIGZhc3RSZWplY3RTZWxlY3Rv
cihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwogICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygpOwor
ICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKCk7CiAKICAgICBib29sIGNoZWNr
U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKTsKIApAQCAtMjc2LDYgKzI4Miw3IEBAIHByaXZhdGU6
CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OwogCiAgICAgT3duUHRy
PFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CisgICAgT3duUHRyPFNjb3BlZFJ1bGVTZXRzPiBtX3Nj
b3BlZEF1dGhvclN0eWxlczsKICAgICBPd25QdHI8UnVsZVNldD4gbV91c2VyU3R5bGU7CiAKICAg
ICBGZWF0dXJlcyBtX2ZlYXR1cmVzOwpAQCAtMzk4LDcgKzQwNSwxMSBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7CiAgICAgYm9vbCBtX2FwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7CiAgICAgY29uc3QgQ1NTU3R5bGVBcHBseVByb3BlcnR5
JiBtX2FwcGx5UHJvcGVydHk7Ci0gICAgCisKKyAgICAvLyBWZWN0b3IgKHVzZWQgYXMgc3RhY2sp
IHRoYXQga2VlcHMgdHJhY2sgb2Ygc2NvcGluZyBlbGVtZW50cyAoaS5lLiwgZWxlbWVudHMgd2l0
aCBhIDxzdHlsZSBzY29wZWQ+IGNoaWxkKQorICAgIC8vIGVuY291bnRlcmVkIGR1cmluZyB0cmVl
IGl0ZXJhdGlvbiBmb3Igc3R5bGUgcmVzb2x1dGlvbi4KKyAgICBWZWN0b3I8Y29uc3QgRWxlbWVu
dCo+IG1fc2NvcGluZ0VsZW1lbnRTdGFjazsKKwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAg
ICBib29sIG1faGFzUGVuZGluZ1NoYWRlcnM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHAKaW5kZXggMmM1YzczMjAwZDE5N2FmZDk2ZDA5YmU2OWU5ZWFhN2ZhOTlj
MWY5ZS4uZjUzNzdiOWRjM2E1Y2UyN2U1MDAyNGI3YzkyOTIwN2E5MTdjNzVlYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTEyMyw0MCArMTIzLDMyIEBAIHZvaWQg
U2VsZWN0b3JDaGVja2VyOjpwb3BQYXJlbnRTdGFja0ZyYW1lKCkKIAogdm9pZCBTZWxlY3RvckNo
ZWNrZXI6OnB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KQogewotICAgIGlmIChtX3BhcmVudFN0
YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fYW5jZXN0b3JJZGVudGlmaWVyRmls
dGVyKTsKLSAgICAgICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIgPSBhZG9wdFB0cihuZXcg
Qmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlCaXRzPik7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVt
ZW50IGlzIG5vdCB0aGUgcm9vdCBpdHNlbGYsIGJ1aWxkIHRoZSBzdGFjayBzdGFydGluZyBmcm9t
IHRoZSByb290LgotICAgICAgICBpZiAocGFyZW50LT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKLSAg
ICAgICAgICAgIFZlY3RvcjxFbGVtZW50KiwgMzA+IGFuY2VzdG9yczsKLSAgICAgICAgICAgIGZv
ciAoRWxlbWVudCogYW5jZXN0b3IgPSBwYXJlbnQ7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2Vz
dG9yLT5wYXJlbnRPckhvc3RFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgYW5jZXN0b3JzLmFw
cGVuZChhbmNlc3Rvcik7Ci0gICAgICAgICAgICBpbnQgY291bnQgPSBhbmNlc3RvcnMuc2l6ZSgp
OwotICAgICAgICAgICAgZm9yIChpbnQgbiA9IGNvdW50IC0gMTsgbiA+PSAwOyAtLW4pCi0gICAg
ICAgICAgICAgICAgcHVzaFBhcmVudFN0YWNrRnJhbWUoYW5jZXN0b3JzW25dKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXBhcmVudC0+cGFyZW50T3JI
b3N0RWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIFdlIGFyZSBub3QgYWx3YXlzIGludm9rZWQgY29u
c2lzdGVudGx5LiBGb3IgZXhhbXBsZSwgc2NyaXB0IGV4ZWN1dGlvbiBjYW4gY2F1c2UgdXMgdG8g
ZW50ZXIKLSAgICAgICAgLy8gc3R5bGUgcmVjYWxjIGluIHRoZSBtaWRkbGUgb2YgdHJlZSBidWls
ZGluZy4gUmVzZXQgdGhlIHN0YWNrIGlmIHdlIHNlZSBhIG5ldyByb290IGVsZW1lbnQuCi0gICAg
ICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7Ci0gICAgICAgIG1fYW5jZXN0
b3JJZGVudGlmaWVyRmlsdGVyLT5jbGVhcigpOwotICAgICAgICBtX3BhcmVudFN0YWNrLnJlc2l6
ZSgwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJG
aWx0ZXIpOwotICAgICAgICAvLyBXZSBtYXkgZ2V0IGludm9rZWQgZm9yIHNvbWUgcmFuZG9tIGVs
ZW1lbnRzIGluIHNvbWUgd2Fja3kgY2FzZXMgZHVyaW5nIHN0eWxlIHJlc29sdmUuCi0gICAgICAg
IC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCi0gICAgICAgIGlm
IChtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ICE9IHBhcmVudC0+cGFyZW50T3JIb3N0RWxl
bWVudCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBBU1NFUlQobV9hbmNlc3Rv
cklkZW50aWZpZXJGaWx0ZXIpOworICAgIC8vIFdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSBy
YW5kb20gZWxlbWVudHMgaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4K
KyAgICAvLyBQYXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgorICAgIGlm
IChtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ICE9IHBhcmVudC0+cGFyZW50T3JIb3N0RWxl
bWVudCgpKQorICAgICAgICByZXR1cm47CiAgICAgcHVzaFBhcmVudFN0YWNrRnJhbWUocGFyZW50
KTsKIH0KIAotdm9pZCBTZWxlY3RvckNoZWNrZXI6OnBvcFBhcmVudChFbGVtZW50KiBwYXJlbnQp
Cit2b2lkIFNlbGVjdG9yQ2hlY2tlcjo6c2V0dXBQYXJlbnRTdGFjayhFbGVtZW50KiBwYXJlbnQp
CiB7Ci0gICAgaWYgKG1fcGFyZW50U3RhY2suaXNFbXB0eSgpIHx8IG1fcGFyZW50U3RhY2subGFz
dCgpLmVsZW1lbnQgIT0gcGFyZW50KQorICAgIEFTU0VSVChtX3BhcmVudFN0YWNrLmlzRW1wdHko
KSA9PSAhbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOworICAgIC8vIEtpbGwgd2hhdGV2ZXIg
d2Ugc3RvcmVkIGJlZm9yZS4KKyAgICBtX3BhcmVudFN0YWNrLnJlc2l6ZSgwKTsKKyAgICBtX2Fu
Y2VzdG9ySWRlbnRpZmllckZpbHRlciA9IGFkb3B0UHRyKG5ldyBCbG9vbUZpbHRlcjxibG9vbUZp
bHRlcktleUJpdHM+KTsKKyAgICAvLyBGYXN0IHZlcnNpb24gaWYgcGFyZW50IGlzIGEgcm9vdCBl
bGVtZW50OgorICAgIGlmICghcGFyZW50LT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKKyAgICAgICAg
cHVzaFBhcmVudFN0YWNrRnJhbWUocGFyZW50KTsKICAgICAgICAgcmV0dXJuOwotICAgIHBvcFBh
cmVudFN0YWNrRnJhbWUoKTsKKyAgICB9CisgICAgLy8gT3RoZXJ3aXNlIGNsaW1iIHVwIHRoZSB0
cmVlLgorICAgIFZlY3RvcjxFbGVtZW50KiwgMzA+IGFuY2VzdG9yczsKKyAgICBmb3IgKEVsZW1l
bnQqIGFuY2VzdG9yID0gcGFyZW50OyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFy
ZW50T3JIb3N0RWxlbWVudCgpKQorICAgICAgICBhbmNlc3RvcnMuYXBwZW5kKGFuY2VzdG9yKTsK
KyAgICBpbnQgY291bnQgPSBhbmNlc3RvcnMuc2l6ZSgpOworICAgIGZvciAoaW50IG4gPSBjb3Vu
dCAtIDE7IG4gPj0gMDsgLS1uKQorICAgICAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShhbmNlc3Rv
cnNbbl0pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdERlc2NlbmRhbnRTZWxlY3Rv
cklkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZCom
IGhhc2gsIGNvbnN0IHVuc2lnbmVkKiBlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmgKaW5kZXggNzYwYmE1MjA3YmU1NzRjNWRmZThhOWEwNGI5NzAwZTRkMGNkZjI4ZC4uNmY4MTdj
YzIyMWYyMWQ2N2VkY2E2MGYzYjVhMzE1NjhmYWQ3OWRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuaApAQCAtNjAsOSArNjAsMTEgQEAgcHVibGljOgogICAgIGlubGluZSBib29s
IGZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCB1bnNpZ25lZCogaWRlbnRpZmllckhhc2hlcykgY29u
c3Q7CiAgICAgc3RhdGljIHZvaWQgY29sbGVjdElkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2Vs
ZWN0b3IqLCB1bnNpZ25lZCogaWRlbnRpZmllckhhc2hlcywgdW5zaWduZWQgbWF4aW11bUlkZW50
aWZpZXJDb3VudCk7CiAKKyAgICB2b2lkIHNldHVwUGFyZW50U3RhY2soRWxlbWVudCogcGFyZW50
KTsKICAgICB2b2lkIHB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KTsKLSAgICB2b2lkIHBvcFBh
cmVudChFbGVtZW50KiBwYXJlbnQpOwotICAgIGJvb2wgcGFyZW50U3RhY2tJc0NvbnNpc3RlbnQo
Q29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSkgY29uc3QgeyByZXR1cm4gIW1fcGFyZW50U3RhY2su
aXNFbXB0eSgpICYmIG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgPT0gcGFyZW50Tm9kZTsg
fQorICAgIHZvaWQgcG9wUGFyZW50KCkgeyBwb3BQYXJlbnRTdGFja0ZyYW1lKCk7IH0KKyAgICBi
b29sIHBhcmVudFN0YWNrSXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3RhY2suaXNF
bXB0eSgpOyB9CisgICAgYm9vbCBwYXJlbnRTdGFja0lzQ29uc2lzdGVudChjb25zdCBDb250YWlu
ZXJOb2RlKiBwYXJlbnROb2RlKSBjb25zdCB7IHJldHVybiAhbV9wYXJlbnRTdGFjay5pc0VtcHR5
KCkgJiYgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCA9PSBwYXJlbnROb2RlOyB9CiAKICAg
ICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCopIGNvbnN0OwogICAgIHZv
aWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDJkODk3OTc2NDUwMDAwNzE3NzFi
ZTM0YWVkZWJhY2VlODM4ZTE2MGQuLjQ0ZjZiODU2ZmFhZWFkMWM3MjMwOTJkNmUzYjQ1MGZmMTkz
OWE4MDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMS0xMS0yOSAgUm9sYW5kIFN0ZWluZXIg
IDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KKworICAgICAgICA8c3R5bGUgc2NvcGVkPjog
SW1wbGVtZW50IHNjb3BlZCBzdHlsZXNoZWV0cyBhbmQgYmFzaWMgYXBwbGljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTkwCisKKyAgICAg
ICAgVGVzdCB0aGF0IDxzdHlsZSBzY29wZWQ+IGFmZmVjdHMgc3R5bGVzIGFuZCBpcyB1cGRhdGVk
IGNvcnJlY3RseToKKyAgICAgICAgLSkgYmFzaWMgdGVzdAorICAgICAgICAtKSB0ZXN0IHNldHRp
bmcvdW4tc2V0dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlCisgICAgICAgIC0pIHRlc3QgaW5z
ZXJ0aW5nL3JlbW92aW5nIGEgd2hvbGUgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNj
b3BlZC1iYXNpYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQv
c3R5bGUtc2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHls
ZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRt
bDogQWRkZWQuCisKIDIwMTEtMTEtMTYgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgPHN0eWxlIHNjb3BlZD46IEltcGxlbWVudCByZWdpc3Rl
cmluZyBvZiA8c3R5bGUgc2NvcGVkPiB3aXRoIHRoZSBzY29waW5nIGVsZW1lbnQKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNo
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmUwNjcxZmFjNmUxNmUzM2E0
MmM0MjlhZmVmZWRkMWEzNWFmOGNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMjcgQEAKK1Rlc3QgYXR0YWNoaW5nIGEgbmV3IDxzdHlsZSBzY29wZWQ+IGVsZW1lbnQK
KworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFM
IC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigwLCAwLCAw
KQorUDI6IHJnYigwLCAwLCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQor
LS0tIEFGVEVSIEFUVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0KK1MxOiByZ2IoMCwgMCwgMCkK
K1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDAp
CitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29w
ZWQtYXR0YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUt
c2NvcGVkLWF0dGFjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwM2RmNTVkZTQ5YmY2Y2ZlMWY4YzZhZDQw
YjBlNjUwY2Y4YWU2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1l
bnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZh
bHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQor
ICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEn
KTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAg
ICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBs
b2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAg
ICAgICAgbG9nKCctLS0gQUZURVIgQVRUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLScpOworICAg
ICAgICAgICAgdmFyIGRpdkVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRElWJyk7Cisg
ICAgICAgICAgICB2YXIgc3R5bGVFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUn
KTsKKyAgICAgICAgICAgIHN0eWxlRWxlbS5zZXRBdHRyaWJ1dGUoJ3Njb3BlZCcsIHRydWUpOwor
ICAgICAgICAgICAgc3R5bGVFbGVtLmlubmVySFRNTCA9ICdkaXYgeyBjb2xvcjogcmVkOyB9IHAg
eyBjb2xvcjogZ3JlZW47IH0nOworICAgICAgICAgICAgZGl2RWxlbS5pbnNlcnRCZWZvcmUoc3R5
bGVFbGVtLCBkaXZFbGVtLmZpcnN0Q2hpbGQpOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAgICAgbG9n
KCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8L3Njcmlw
dD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNv
bG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRl
c3RzKCk7Ij4KKyAgICA8cD5UZXN0IGF0dGFjaGluZyBhIG5ldyAmbHQ7c3R5bGUgc2NvcGVkJmd0
OyBlbGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bh
bj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9
IkRJViI+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9
IlAyIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJT
MyI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2Pgor
ICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLWJhc2ljLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTEyZmRjMGY4M2VjMTQ5M2E0MmMy
NTliM2YxODJiYjBmNTZjNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSw0MiBAQAorVGVzdCA8c3R5bGUgc2NvcGVkPgorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQK
K1RleHQKK1RleHQKKworVGV4dAorVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CitUZXh0
CisKK1RleHQKK1RleHQKKy0tLSBDT01QVVRFRCBTVFlMRVMgLS0tCitTMTogcmdiKDAsIDAsIDAp
CitQMTogcmdiKDAsIDAsIDApCitSMTogcmdiKDAsIDAsIDApCitFMTogcmdiKDAsIDAsIDApCisK
K1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitSMjogcmdiKDAsIDAsIDI1
NSkKKworUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorUjM6IHJnYigwLCAwLCAw
KQorRTM6IHJnYigwLCAwLCAwKQorCitTNDogcmdiKDAsIDAsIDApCitQNDogcmdiKDAsIDAsIDAp
CitSNDogcmdiKDAsIDAsIDApCitFNDogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29w
ZWQtYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtYmFzaWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZTViNDMxYTkxNmEzOWM2OWZiZGY4NjY4NjRh
ZThkZmYzZDY4Y2VlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy5odG1sCkBAIC0wLDAgKzEsODEgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQu
ZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVl
KCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAg
ICAgICAgIGxvZygnLS0tIENPTVBVVEVEIFNUWUxFUyAtLS0nKTsKKworICAgICAgICAgICAgdGVz
dCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdSMScp
OworICAgICAgICAgICAgdGVzdCgnRTEnKTsKKyAgICAgICAgICAgIGxvZygnJyk7CisgICAgICAg
ICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRl
c3QoJ1IyJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsK
KyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgICAgICB0ZXN0KCdSMycpOworICAgICAg
ICAgICAgdGVzdCgnRTMnKTsKKyAgICAgICAgICAgIGxvZygnJyk7CisgICAgICAgICAgICB0ZXN0
KCdTNCcpOworICAgICAgICAgICAgdGVzdCgnUDQnKTsKKyAgICAgICAgICAgIHRlc3QoJ1I0Jyk7
CisgICAgICAgICAgICB0ZXN0KCdFNCcpOworCisgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hF
RCAtLS0nKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0
L2NzcyI+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9o
ZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCAmbHQ7c3R5bGUg
c2NvcGVkJmd0OzwvcD4KKyAgICA8ZGl2IGNsYXNzPSJmb28iPgorICAgICAgICA8c3BhbiBpZD0i
UzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICAgICAgPHBy
ZSBpZCA9ICJSMSIgY2xhc3M9ImJhciI+VGV4dDwvcHJlPgorICAgICAgICA8cHJlIGlkPSJFMSIg
Y2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxk
aXY+CisgICAgICAgICAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAg
ICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAgICAgICAgICAgcCB7IGNvbG9yOiBn
cmVlbjsgfQorICAgICAgICAgICAgICAgIGRpdiAuYmFyIHsgY29sb3I6IGJsdWU7IH0KKyAgICAg
ICAgICAgIDwvc3R5bGU+CisgICAgICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+Cisg
ICAgICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgICAgICAgICA8cHJlIGlkPSJSMiIg
Y2xhc3M9ImJhciI+VGV4dDwvcHJlPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHNwYW4gaWQ9
IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgICAgIDxw
cmUgaWQgPSAiUjMiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBpZD0iRTMi
IGNsYXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJmb28i
PgorICAgICAgICA8c3BhbiBpZD0iUzQiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQNCI+
VGV4dDwvcD4KKyAgICAgICAgPHByZSBpZCA9ICJSNCIgY2xhc3M9ImJhciI+VGV4dDwvcHJlPgor
ICAgICAgICA8cHJlIGlkPSJFNCIgY2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgIDwvZGl2Pgor
ICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2gt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNj
b3BlZC1kZXRhY2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3ZWY2NTMxNzQwNzJiNzg4N2Y3
ZGYzZGFiZjkxYTlhNzM0MGUzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwyNyBAQAorVGVzdCBkZXRhY2hpbmcgYSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisKK1Rl
eHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0K
K1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQor
UDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCist
LS0gQUZURVIgREVUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLQorUzE6IHJnYigwLCAwLCAwKQor
UDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigwLCAwLCAwKQorUDI6IHJnYigwLCAwLCAwKQorUzM6
IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRl
dGFjaC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1kZXRhY2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzhiZjZhODY2MTI3MGY4NjFjYjg1NThhYzMyN2Ex
ODc3MWYzOWVkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbApAQCAtMCwwICsxLDcyIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRl
ZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgn
Y29sb3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7Cisg
ICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAg
ICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCct
LS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAg
IGxvZygnLS0tIEFGVEVSIERFVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0nKTsKKyAgICAgICAg
ICAgIHZhciBkaXZFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RJVicpOworICAgICAg
ICAgICAgdmFyIHN0eWxlRWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScpOwor
ICAgICAgICAgICAgZGl2RWxlbS5yZW1vdmVDaGlsZChzdHlsZUVsZW0pOworICAgICAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAg
ICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAg
IH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAg
ICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0IGRldGFjaGluZyBhICZsdDtzdHls
ZSBzY29wZWQmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMx
Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+Cisg
ICAgPGRpdiBpZD0iRElWIj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9j
c3MiIHNjb3BlZD4KKyAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAg
IHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9
IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+
CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8
cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9w
cmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVk
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTIwNTg3ZGY1YWZmZjYyZGMyN2Y2MmFhZWM0NTBi
MzM3NjVjYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDI3IEBACitUZXN0IHJlbW92aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSA8c3R5bGU+
IGVsZW1lbnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0t
IE9SSUdJTkFMIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJn
YigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiBy
Z2IoMCwgMCwgMCkKKy0tLSBBRlRFUiBVTi1TRVRUSU5HIEBTQ09QRUQgLS0tCitTMTogcmdiKDI1
NSwgMCwgMCkKK1AxOiByZ2IoMCwgMTI4LCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdi
KDAsIDEyOCwgMCkKK1MzOiByZ2IoMjU1LCAwLCAwKQorUDM6IHJnYigwLCAxMjgsIDApCistLS0g
RklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNj
b3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZWFhZjM3NzRjYWIyZmE3NGZkNzBjNjExYWUwMzJiYTExODQzZDdlZAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVt
b3ZlLXNjb3BlZC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1
bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNn
ICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7
CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29t
cHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAg
ICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3Qo
J1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsK
KyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBy
dW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0n
KTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIg
VU4tU0VUVElORyBAU0NPUEVEIC0tLScpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ1NUWUxFJykucmVtb3ZlQXR0cmlidXRlKCdzY29wZWQnKTsKKyAgICAgICAgICAgIHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAg
ICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9
CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAg
ICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkg
b25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCByZW1vdmluZyB0aGUgJ3Njb3BlZCcg
YXR0cmlidXRlIG9uIGEgJmx0O3N0eWxlJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+CisgICAg
ICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9w
PgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9
InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAg
ICAgICAgICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxz
cGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAg
IDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAg
ICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNv
bGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3Bl
ZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmEwYzc5NjNjOTdjNDc4MDFlMDg0OTY3NTExMzcy
MjJjNDY2NWQxYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwy
NyBAQAorVGVzdCBzZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSA8c3R5bGU+IGVs
ZW1lbnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9S
SUdJTkFMIC0tLQorUzE6IHJnYigyNTUsIDAsIDApCitQMTogcmdiKDAsIDEyOCwgMCkKK1MyOiBy
Z2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDI1NSwgMCwgMCkKK1Az
OiByZ2IoMCwgMTI4LCAwKQorLS0tIEFGVEVSIFNFVFRJTkcgQFNDT1BFRCAtLS0KK1MxOiByZ2Io
MCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigw
LCAxMjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNI
RUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9z
dHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTkwM2JkNDFl
Mjk5ZDAzNTAxY2VmMTA1NDBmZTE5NTAwYzRlODJlZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1s
CkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xl
JykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBs
b2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVt
LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOwor
ICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAg
ICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRl
c3QoJ1AzJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAg
IHRlc3RBbGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgU0VUVElORyBAU0NPUEVE
IC0tLScpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxFJykuc2V0
QXR0cmlidXRlKCdzY29wZWQnLCB0cnVlKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygn
LS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+
CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xv
cjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0
cygpOyI+CisgICAgPHA+VGVzdCBzZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSAm
bHQ7c3R5bGUmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMx
Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+Cisg
ICAgPGRpdj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9jc3MiPgorICAg
ICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAgcCB7IGNvbG9yOiBncmVl
bjsgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+
CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAg
ICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwv
cD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwv
aHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118198</attachid>
            <date>2011-12-07 03:34:29 -0800</date>
            <delta_ts>2011-12-14 00:36:16 -0800</delta_ts>
            <desc>patch (requires 67790), with flag</desc>
            <filename>bug-73190-20111207203426.patch</filename>
            <type>text/plain</type>
            <size>48179</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMjIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjFmZDRjYzU4ODc4YmYz
YTJjNjMzNTVlZjJiMjc2YjVmZmI1NDU4MC4uZmZhZmQzZjk2MGU0ZDJjMjQwYTNjOGEzYWEzYmJi
NGM1ZWVmZGZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDExLTEyLTA3ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIDxzdHls
ZSBzY29wZWQ+OiBJbXBsZW1lbnQgc2NvcGVkIHN0eWxlc2hlZXRzIGFuZCBiYXNpYyBhcHBsaWNh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMx
OTAKKworICAgICAgICBJbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgPHN0eWxlIHNjb3BlZD46Cisg
ICAgICAgIFN0b3JlIHNjb3BlZCBzdHlsZSBzaGVldHMgaW4gYSBzZXBhcmF0ZSBkYXRhIHN0cnVj
dHVyZSBTY29wZWRSdWxlU2V0cy4KKyAgICAgICAgQWRkIGEgdmVjdG9yIHN0YWNrIHRvIENTU1N0
eWxlU2VsZWN0b3IgdGhhdCBrZWVwcyB0cmFjayBvZiBlbmNvdW50ZXJlZCBzY29waW5nIGVsZW1l
bnRzLiBUaGlzIGlzCisgICAgICAgIHVzZWQgZm9yIE8oMSkgYWNjZXNzIHRvIGFsbCByZWxldmFu
dCBzdHlsZSBzaGVldHMgZm9yIGEgZ2l2ZW4gZWxlbWVudC4KKyAgICAgICAgRmluYWxseSwgcHJl
dmVudCBzdHlsZSBzaGFyaW5nIGZyb20gY3Jvc3NpbmcgaW50by9vdXQgb2Ygc2NvcGVkIHN0eWxl
IGJvdW5kYXJpZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdHM6IGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFz
aWMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1kZXRhY2guaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHA6IGFkZCBzdXBwb3J0IGZvciBzY29wZWQgYXV0aG9yIHNoZWV0cwor
ICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OlNjb3BlZFJ1bGVTZXRzKTogY2xhc3Mg
Zm9yIHNjb3BlZCBhdXRob3Igc2hlZXRzCisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0
czo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2Vs
ZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU2Nv
cGluZ0VsZW1lbnQpOiBkZXRlcm1pbmUgd2hldGhlciBhbiBhdXRob3Igc2hlZXQgaXMgc2NvcGVk
IChhbmQgdG8gd2hpY2ggc2NvcGUpLCBvciBnbG9iYWwKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OnB1c2hQYXJlbnQpOiB0YWtlIG92ZXIgc29tZSBvZiB0aGUgbG9naWMgb2Yg
U2VsZWN0b3JDaGVja2VyOjpwdXNoUGFyZW50LCBpbiBvcmRlciB0byBtYWludGFpbiBtX3Njb3Bp
bmdQYXJlbnRTdGFjaworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFy
ZW50KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyk6IGhlbHBlciBmdW5jdGlvbgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6IGNoYW5nZWQgY2FsbCB0byBtYXRjaEF1
dGhvclJ1bGVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhv
clJ1bGVzKTogbWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcworICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyk6IGFkZCAnc2NvcGUnIHBhcmFtZXRlcgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlU2V0KTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KTogZGl0dG8K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QpOiBw
cmV2ZW50IHN0eWxlIHNoYXJpbmcgYWNyb3NzIHNjb3BlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6IGRpdHRv
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGFyZWRTdHlsZSk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZv
ckVsZW1lbnQpOiBjaGFuZ2VkIGNhbGwgdG8gbWF0Y2hBdXRob3JSdWxlcworICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKTogY29tbWVudAorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tSZWdpb25TdHlsZSk6IGFkZCBnbG9iYWwg
c2NvcGUgcGFyYW1ldGVyCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6IGNoYW5nZWQgY2FsbCB0byBtYXRjaEF1dGhvclJ1bGVz
CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCk6IGFkZCBjb21t
ZW50cyBmb3IgQGZvbnQtZmFjZSBhbmQgQGtleWZyYW1lcworICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzY29wZWRS
dWxlU2V0Rm9yRWxlbWVudCk6IGhlbHBlciBmdW5jdGlvbiwgbWF5IHJldHVybiBOVUxMIAorICAg
ICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDaGVja2VyOjpwdXNoUGFyZW50KTogc2ltcGxpZnkKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ2hlY2tlcjo6c2V0dXBQYXJlbnRTdGFjayk6IHJlZmFjdG9yaW5nIG9mIHByZXZpb3VzIHB1
c2hQYXJlbnQKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6OnBvcFBhcmVudCk6IHNpbXBsaWZ5CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6OnBhcmVudFN0YWNrSXNFbXB0eSk6IGFkZGl0aW9uYWwgaGVs
cGVyIGZ1bmN0aW9uCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnBhcmVudFN0
YWNrSXNDb25zaXN0ZW50KTogbWFrZSBwYXJhbWV0ZXIgY29uc3QKKwogMjAxMS0xMS0xNiAgUm9s
YW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8c3R5
bGUgc2NvcGVkPjogSW1wbGVtZW50IHJlZ2lzdGVyaW5nIG9mIDxzdHlsZSBzY29wZWQ+IHdpdGgg
dGhlIHNjb3BpbmcgZWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CmluZGV4IDAzNmJmNWQxZGNkOTc5YzgzNTM4N2IwNTI5YjU2M2QyMWE5MjgyYTguLjBmNTc4YTM0
NWI2ZWNkYTQzOWUxZDM0YWJhY2I2NDYxNDQxYTlhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFByb2dyZXNz
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
VGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCiAjaW5jbHVkZSAi
TGlua0hhc2guaCIKQEAgLTIwNSw3ICsyMDYsMTEgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+ID4gQXRv
bVJ1bGVNYXA7CiAKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIHZvaWQgYWRkUnVsZXNG
cm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NT
dHlsZVNlbGVjdG9yKiA9IDAsIGNvbnN0IEVsZW1lbnQqID0gMCk7CisjZWxzZQogICAgIHZvaWQg
YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImLCBDU1NTdHlsZVNlbGVjdG9yKiA9IDApOworI2VuZGlmCiAKICAgICB2b2lkIGFkZFN0eWxl
UnVsZShDU1NTdHlsZVJ1bGUqIGl0ZW0pOwogICAgIHZvaWQgYWRkUnVsZShDU1NTdHlsZVJ1bGUq
IHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOwpAQCAtMzY1LDcgKzM3MCw4IEBAIENTU1N0eWxlU2Vs
ZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlz
dCogc3R5bGVTaGVlCiAgICAgICAgIG1fbWVkaXVtID0gYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlF
dmFsdWF0b3Iodmlldy0+bWVkaWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRT
dHlsZS5nZXQoKSkpOwogCiAgICAgbV9hdXRob3JTdHlsZSA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0
KTsKLSAgICAvLyBBZGRpbmcgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0
aGUgZW5kLgorICAgIC8vIEFkZGluZyBnbG9iYWwgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMs
IHNocmluayBhdCB0aGUgZW5kLgorICAgIC8vIE5vdGUgdGhhdCB0aGVyZSB1c3VhbGx5IGlzIG9u
bHkgMSBzaGVldCBmb3Igc2NvcGVkIHJ1bGVzLCBzbyBhdXRvLXNocmluay10by1maXQgaXMgZmlu
ZS4KICAgICBtX2F1dGhvclN0eWxlLT5kaXNhYmxlQXV0b1Nocmlua1RvRml0KCk7CiAKICAgICAv
LyBGSVhNRTogVGhpcyBzdWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGlt
ZSEKQEAgLTM5NSwxNSArNDAxLDI5IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0
b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAgICAg
IG1fdXNlclN0eWxlID0gdGVtcFVzZXJTdHlsZS5yZWxlYXNlKCk7CiAKICAgICAvLyBBZGQgcnVs
ZXMgZnJvbSBlbGVtZW50cyBsaWtlIFNWRydzIDxmb250LWZhY2U+Ci0gICAgaWYgKG1hcHBlZEVs
ZW1lbnRTaGVldCkKKyAgICBpZiAobWFwcGVkRWxlbWVudFNoZWV0KSB7CisgICAgICAgIC8vIEZJ
WE1FOiBzZWUgaWYgc3R5bGUgc2NvcGVzIGNhbi9zaG91bGQgYmUgYWRkZWQgaGVyZS4KICAgICAg
ICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWFwcGVkRWxlbWVudFNoZWV0LCAq
bV9tZWRpdW0sIHRoaXMpOworICAgIH0KIAogICAgIC8vIGFkZCBzdHlsZXNoZWV0cyBmcm9tIGRv
Y3VtZW50CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3R5bGVTaGVldHMtPmxlbmd0aCgpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICBTdHlsZVNo
ZWV0KiBzaGVldCA9IHN0eWxlU2hlZXRzLT5pdGVtKGkpOwotICAgICAgICBpZiAoc2hlZXQtPmlz
Q1NTU3R5bGVTaGVldCgpICYmICFzaGVldC0+ZGlzYWJsZWQoKSkKLSAgICAgICAgICAgIG1fYXV0
aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihz
aGVldCksICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNo
ZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxlZCgpKSB7CisgICAgICAgICAgICBDU1NTdHlsZVNoZWV0
KiBjc3NTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCk7CisjaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIHNjb3BlID0gZGV0
ZXJtaW5lU2NvcGluZ0VsZW1lbnQoY3NzU2hlZXQpOworICAgICAgICAgICAgaWYgKHNjb3BlKSB7
CisgICAgICAgICAgICAgICAgc3RkOjpwYWlyPFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yLCBi
b29sPiBhZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5hZGQoc2NvcGUsIG51bGxwdHIp
OworICAgICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuc2Vjb25kKQorICAgICAgICAgICAgICAg
ICAgICBhZGRSZXN1bHQuZmlyc3QtPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KCkpOwor
ICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5maXJzdC0+c2Vjb25kLT5hZGRSdWxlc0Zyb21TaGVl
dChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUt
PmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAgICB9
CiAgICAgfQogICAgIC8vIENvbGxlY3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2libGluZyBz
ZWxlY3RvcnMgKDpmaXJzdC1jaGlsZCBhbmQgc2ltaWxhcikKICAgICAvLyBpbiB0aGUgY3VycmVu
dCBzZXQgb2Ygc3R5bGVzaGVldHMuIFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMgaW5mb3Jt
YXRpb24gdG8gcmVqZWN0CkBAIC00MTQsNiArNDM0LDEwIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNT
U1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVT
aGVlCiAgICAgaWYgKHVuY29tbW9uQXR0cmlidXRlUnVsZXNJbkRlZmF1bHRTdHlsZSkKICAgICAg
ICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlc0luRGVmYXVsdFN0eWxlLT5jb2xsZWN0RmVhdHVyZXMo
bV9mZWF0dXJlcyk7CiAgICAgbV9hdXRob3JTdHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVy
ZXMpOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgZm9yIChTY29wZWRSdWxlU2V0TWFw
OjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fc2Nv
cGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5jb2xsZWN0
RmVhdHVyZXMobV9mZWF0dXJlcyk7CisjZW5kaWYKICAgICBpZiAobV91c2VyU3R5bGUpCiAgICAg
ICAgIG1fdXNlclN0eWxlLT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7CiAKQEAgLTQyNyw2
ICs0NTEsNjggQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCog
ZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAgZG9jdW1lbnQtPnJl
bmRlcmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogfQogCisj
aWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKK0VsZW1lbnQqIENTU1N0eWxlU2VsZWN0b3I6OmRldGVy
bWluZVNjb3BpbmdFbGVtZW50KGNvbnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0KQoreworICAgIEFT
U0VSVChzaGVldCk7CisKKyAgICBOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+ZmluZFN0eWxlU2hl
ZXRPd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSB8fCAhb3duZXJOb2RlLT5pc0hUTUxF
bGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3duZXJOb2RlKTsKKyAgICBpZiAoIXN0
eWxlRWxlbWVudC0+c2NvcGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0
eWxlRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworfQorI2VuZGlmCisKK3ZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6cHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpCit7CisgICAgLy8gV2UgYXJlIG5v
dCBhbHdheXMgaW52b2tlZCBjb25zaXN0ZW50bHkuIEZvciBleGFtcGxlLCBzY3JpcHQgZXhlY3V0
aW9uIGNhbiBjYXVzZSB1cyB0byBlbnRlcgorICAgIC8vIHN0eWxlIHJlY2FsYyBpbiB0aGUgbWlk
ZGxlIG9mIHRyZWUgYnVpbGRpbmcuIFdlIG1heSBhbHNvIGJlIGludm9rZWQgZnJvbSBzb21ld2hl
cmUgd2l0aGluIHRoZSB0cmVlLgorICAgIC8vIFJlc2V0IHRoZSBzdGFjayBpbiB0aGlzIGNhc2Us
IG9yIGlmIHdlIHNlZSBhIG5ldyByb290IGVsZW1lbnQuCisgICAgaWYgKCFwYXJlbnQtPnBhcmVu
dE9ySG9zdEVsZW1lbnQoKSB8fCBtX2NoZWNrZXIucGFyZW50U3RhY2tJc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV9jaGVja2VyLnNldHVwUGFyZW50U3RhY2socGFyZW50KTsKKyNpZiBFTkFCTEUoU1RZ
TEVfU0NPUEVEKQorICAgICAgICBtX3Njb3BpbmdFbGVtZW50U3RhY2sucmVzaXplKDApOworICAg
ICAgICBmb3IgKDsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQo
KSkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkg
eworICAgICAgICAgICAgICAgIGNvbnN0IFJ1bGVTZXQqIHJ1bGVTZXQgPSBzY29wZWRSdWxlU2V0
Rm9yRWxlbWVudChwYXJlbnQpOworICAgICAgICAgICAgICAgIGlmIChydWxlU2V0KQorICAgICAg
ICAgICAgICAgICAgICBtX3Njb3BpbmdFbGVtZW50U3RhY2suYXBwZW5kKHN0ZDo6cGFpcjxjb25z
dCBFbGVtZW50KiwgY29uc3QgUnVsZVNldCo+KHBhcmVudCwgcnVsZVNldCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIG1fc2NvcGluZ0VsZW1lbnRTdGFjay5yZXZlcnNlKCk7
CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBPdGhlcndpc2UsIGp1c3Qg
cHVzaCB0aGUgbmV3IHBhcmVudC4gSG93ZXZlciwgbm90ZSB0aGF0IHdlIG1heSBnZXQgaW52b2tl
ZCBmb3Igc29tZSByYW5kb20gZWxlbWVudHMKKyAgICAvLyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1
cmluZyBzdHlsZSByZXNvbHZlLiBQYXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBj
YXNlLgorICAgIG1fY2hlY2tlci5wdXNoUGFyZW50KHBhcmVudCk7CisjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkKKyAgICBpZiAobV9jaGVja2VyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHBhcmVu
dCkgJiYgcGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKSB7CisgICAgICAgIGNvbnN0
IFJ1bGVTZXQqIHJ1bGVTZXQgPSBzY29wZWRSdWxlU2V0Rm9yRWxlbWVudChwYXJlbnQpOworICAg
ICAgICBpZiAocnVsZVNldCkKKyAgICAgICAgICAgIG1fc2NvcGluZ0VsZW1lbnRTdGFjay5hcHBl
bmQoc3RkOjpwYWlyPGNvbnN0IEVsZW1lbnQqLCBjb25zdCBSdWxlU2V0Kj4ocGFyZW50LCBydWxl
U2V0KSk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFy
ZW50KEVsZW1lbnQqIHBhcmVudCkKK3sKKyAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGdldCBpbnZv
a2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBz
dHlsZSByZXNvbHZlLgorICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlz
IGNhc2UuCisgICAgaWYgKG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJlbnQp
KSB7CisgICAgICAgIG1fY2hlY2tlci5wb3BQYXJlbnQoKTsKKyNpZiBFTkFCTEUoU1RZTEVfU0NP
UEVEKQorICAgICAgICBpZiAoIW1fc2NvcGluZ0VsZW1lbnRTdGFjay5pc0VtcHR5KCkgJiYgcGFy
ZW50ID09IG1fc2NvcGluZ0VsZW1lbnRTdGFjay5sYXN0KCkuZmlyc3QpCisgICAgICAgICAgICBt
X3Njb3BpbmdFbGVtZW50U3RhY2sucmVtb3ZlTGFzdCgpOworI2VuZGlmCisgICAgfQorfQorCiB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZFJlZ2lvblJ1bGUoUGFzc1JlZlB0cjxXZWJLaXRDU1NS
ZWdpb25SdWxlPiByZWdpb25TdHlsZVJ1bGUpCiB7CiAgICAgbV9yZWdpb25TdHlsZVJ1bGVzLmFw
cGVuZChyZWdpb25TdHlsZVJ1bGUpOwpAQCAtNTkzLDYgKzY3OSw0MyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogc3R5bGVEZQogICAgIG5ld0RlY2xhcmF0aW9uLmxpbmtNYXRjaFR5cGUgPSBsaW5rTWF0Y2hU
eXBlOwogfQogCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQXV0aG9yUnVsZXMoaW50JiBm
aXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVz
KQoreworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICAvLyBNYXRjaCBnbG9iYWwg
YXV0aG9yIHJ1bGVzLgorICAgIG1hdGNoUnVsZVNldChtX2F1dGhvclN0eWxlLmdldCgpLCBmaXJz
dFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworI2lmIEVOQUJM
RShTVFlMRV9TQ09QRUQpCisgICAgLy8gTWF0Y2ggc2NvcGVkIHN0eWxlIHNoZWV0J3MgcnVsZXMs
IGJ1dCBvbmx5IGlmIHRoZXJlIGFyZSBpbmRlZWQgc2NvcGVkIHN0eWxlcyBhbnl3aGVyZSAoc2hv
cnRjdXQpLgorICAgIGlmICghbV9zY29wZWRBdXRob3JTdHlsZXMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGlmIChtX2NoZWNrZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQobV9wYXJlbnROb2RlKSkg
eworICAgICAgICAgICAgLy8gRmFzdCBicmFuY2g6IGFjY2VzcyBlbmNsb3Npbmcgc2NvcGVzIGRp
cmVjdGx5IGZyb20gdmVjdG9yLCBidXQgc3RhcnQgd2l0aCBjdXJyZW50IGVsZW1lbnQuCisgICAg
ICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKSB7CisgICAg
ICAgICAgICAgICAgY29uc3QgUnVsZVNldCogcnVsZVNldCA9IHNjb3BlZFJ1bGVTZXRGb3JFbGVt
ZW50KG1fZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAg
ICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IG1fc2NvcGluZ0VsZW1lbnRTdGFjay5zaXplKCk7IGkgPiAwOyAtLWkpCisg
ICAgICAgICAgICAgICAgbWF0Y2hSdWxlU2V0KG1fc2NvcGluZ0VsZW1lbnRTdGFja1tpIC0gMV0u
c2Vjb25kLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gU2xvdyBicmFuY2g6IGNsaW1iIHRy
ZWUsIGNoZWNrIGZvciBzdHlsZSBzY29wZXMgYXQgZXZlcnkgZWxlbWVudC4KKyAgICAgICAgICAg
IGZvciAoY29uc3QgTm9kZSogbm9kZSA9IG1fZWxlbWVudDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBh
cmVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjb25zdCBF
bGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOworICAgICAgICAgICAgICAgIGlmICgh
ZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgY29uc3QgUnVsZVNldCogcnVsZVNldCA9IHNjb3Bl
ZFJ1bGVTZXRGb3JFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGlmIChydWxlU2V0
KQorICAgICAgICAgICAgICAgICAgICBtYXRjaFJ1bGVTZXQocnVsZVNldCwgZmlyc3RSdWxlSW5k
ZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVz
KCk7Cit9CisKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxl
cywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKQogewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CkBAIC02MDAsNiArNzIz
LDE3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywg
aW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0CiAgICAgaWYgKCFydWxlcyB8fCAhbV9lbGVt
ZW50KQogICAgICAgICByZXR1cm47CiAKKyAgICBtYXRjaFJ1bGVTZXQocnVsZXMsIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgc29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKCk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hS
dWxlU2V0KGNvbnN0IFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7CisgICAgbV9tYXRjaGVkUnVs
ZXMuY2xlYXIoKTsKKworICAgIGlmICghcnVsZXMgfHwgIW1fZWxlbWVudCkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQsIGNsYXNz
LCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAvLyB0aGVu
IHNvcnQgdGhlIGJ1ZmZlci4KICAgICBpZiAobV9lbGVtZW50LT5oYXNJRCgpKQpAQCAtNjIyLDMz
ICs3NTYsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVs
ZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdAogICAgICAgICBtYXRjaFJ1bGVzRm9y
TGlzdChydWxlcy0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0
UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVs
ZXMtPnRhZ1J1bGVzKG1fZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5k
ZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBtYXRjaFJ1bGVzRm9y
TGlzdChydWxlcy0+dW5pdmVyc2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5k
ZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLQotICAgIC8vIElmIHdlIGRpZG4ndCBtYXRjaCBhbnkg
cnVsZXMsIHdlJ3JlIGRvbmUuCi0gICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gU29ydCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMuCi0g
ICAgc29ydE1hdGNoZWRSdWxlcygpOwotCi0gICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2Yg
bWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xzLgotICAgIGlmICghbV9jaGVj
a2VyLmlzQ29sbGVjdGluZ1J1bGVzT25seSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHN1
Y2tzLCB0aGUgaW5zcGVjdG9yIHNob3VsZCBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIHZpc2l0ZWQg
c3R5bGUgaXRzZWxmLgotICAgICAgICBib29sIHN3YXBWaXNpdGVkVW52aXNpdGVkID0gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKG1fZWxlbWVudCwgQ1NTU2VsZWN0
b3I6OlBzZXVkb1Zpc2l0ZWQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9t
YXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlICYmIG1f
bWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRBZmZlY3RlZEJ5VW5jb21tb25BdHRyaWJ1dGVTZWxl
Y3RvcnMoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtX21hdGNoZWRS
dWxlc1tpXS0+bGlua01hdGNoVHlwZSgpOwotICAgICAgICAgICAgaWYgKHN3YXBWaXNpdGVkVW52
aXNpdGVkICYmIGxpbmtNYXRjaFR5cGUgJiYgbGlua01hdGNoVHlwZSAhPSBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoQWxsKQotICAgICAgICAgICAgICAgIGxpbmtNYXRjaFR5cGUgPSAobGlua01hdGNo
VHlwZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCkgPyBTZWxlY3RvckNoZWNrZXI6
Ok1hdGNoTGluayA6IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOwotICAgICAgICAgICAg
YWRkTWF0Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0
aW9uKCksIGxpbmtNYXRjaFR5cGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICAgICAgICBpZiAoIW1fcnVsZUxpc3QpCi0gICAgICAgICAgICAgICAgbV9ydWxlTGlzdCA9
IENTU1J1bGVMaXN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIG1fcnVsZUxpc3QtPmFwcGVuZCht
X21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpKTsKLSAgICAgICAgfQotICAgIH0KIH0KIAogY2xhc3Mg
TWF0Y2hpbmdVQVJ1bGVzU2NvcGUgewpAQCAtNzQwLDYgKzg0NywzNCBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OnNvcnRNYXRjaGVkUnVsZXMoKQogICAgIHN0ZDo6c29ydChtX21hdGNoZWRSdWxl
cy5iZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKIH0KIAordm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoKQoreworICAg
IGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0
ZDo6c29ydChtX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQoKSwgY29t
cGFyZVJ1bGVzKTsKKworICAgIGlmIChtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUo
KTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIW1fcnVsZUxpc3QpCisgICAgICAgICAgICAgICAg
bV9ydWxlTGlzdCA9IENTU1J1bGVMaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIG1fcnVsZUxp
c3QtPmFwcGVuZChtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IFRoaXMgc3Vja3MsIHRoZSBpbnNwZWN0
b3Igc2hvdWxkIGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgdmlzaXRlZCBzdHlsZSBpdHNlbGYuCisg
ICAgYm9vbCBzd2FwVmlzaXRlZFVudmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Zm9yY2VQc2V1ZG9TdGF0ZShtX2VsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgaWYgKG1fc3R5bGUgJiYgbV9tYXRjaGVkUnVsZXNbaV0tPmNvbnRhaW5zVW5j
b21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0QWZmZWN0
ZWRCeVVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3JzKCk7CisgICAgICAgIHVuc2lnbmVkIGxpbmtN
YXRjaFR5cGUgPSBtX21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgpOworICAgICAgICBp
ZiAoc3dhcFZpc2l0ZWRVbnZpc2l0ZWQgJiYgbGlua01hdGNoVHlwZSAmJiBsaW5rTWF0Y2hUeXBl
ICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwpCisgICAgICAgICAgICBsaW5rTWF0Y2hUeXBl
ID0gKGxpbmtNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpID8gU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaExpbmsgOiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsK
KyAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCkt
PmRlY2xhcmF0aW9uKCksIGxpbmtNYXRjaFR5cGUpOworICAgIH0KK30KKwogdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7CiAgICAgbWF0
Y2hVQVJ1bGVzKHJlc3VsdCk7CkBAIC03OTIsNyArOTI3LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAgICAgCiAgICAgLy8gQ2hl
Y2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMgbmV4dC4KICAgICBpZiAobV9tYXRjaEF1dGhv
ckFuZFVzZXJTdHlsZXMpCi0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwg
cmVzdWx0LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0Lmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7Cisg
ICAgICAgIG1hdGNoQXV0aG9yUnVsZXMocmVzdWx0LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0Lmxh
c3RBdXRob3JSdWxlLCBmYWxzZSk7CiAgICAgICAgIAogICAgIC8vIE5vdyBjaGVjayBvdXIgaW5s
aW5lIHN0eWxlIGF0dHJpYnV0ZS4KICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMg
JiYgbV9zdHlsZWRFbGVtZW50KSB7CkBAIC04NTUsNiArOTkwLDEwIEBAIE5vZGUqIENTU1N0eWxl
U2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlz
aXRlZE5vZGVDCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQt
PmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUoU1RZTEVf
U0NPUEVEKQorICAgIGlmIChwYXJlbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAg
ICAgIHJldHVybiAwOworI2VuZGlmCiAgICAgU3R5bGVkRWxlbWVudCogcCA9IHN0YXRpY19jYXN0
PFN0eWxlZEVsZW1lbnQqPihwYXJlbnQpOwogICAgIGlmIChwLT5pbmxpbmVTdHlsZURlY2woKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDA1LDYgKzExNDQsMTEgQEAgYm9vbCBDU1NTdHlsZVNl
bGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9kZSogbm9kZSkgY29uc3QKICAgICBp
ZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoZWxl
bWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIGlmIChlbGVtZW50LT5oYXNTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKwogICAg
IGJvb2wgaXNDb250cm9sID0gZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKIAogICAg
IGlmIChpc0NvbnRyb2wgIT0gbV9lbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQpAQCAt
MTA3Niw2ICsxMjIwLDEwIEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVT
aGFyZWRTdHlsZSgpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChwYXJlbnRTdHlsZVByZXZl
bnRzU2hhcmluZyhtX3BhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxF
KFNUWUxFX1NDT1BFRCkKKyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5
bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgogCiAgICAgLy8gQ2hlY2sgcHJl
dmlvdXMgc2libGluZ3MgYW5kIHRoZWlyIGNvdXNpbnMuCiAgICAgdW5zaWduZWQgY291bnQgPSAw
OwpAQCAtMTM5Myw3ICsxNTQxLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVT
ZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywKIAogICAgIGlm
IChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgewogICAgICAgICBtYXRjaFJ1bGVzKG1fdXNl
clN0eWxlLmdldCgpLCBtYXRjaFJlc3VsdC5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5sYXN0
VXNlclJ1bGUsIGZhbHNlKTsKLSAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgp
LCBtYXRjaFJlc3VsdC5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0Lmxhc3RBdXRob3JSdWxl
LCBmYWxzZSk7CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMobWF0Y2hSZXN1bHQuZmlyc3RBdXRo
b3JSdWxlLCBtYXRjaFJlc3VsdC5sYXN0QXV0aG9yUnVsZSwgZmFsc2UpOwogICAgIH0KIAogICAg
IGlmIChtX21hdGNoZWREZWNscy5pc0VtcHR5KCkpCkBAIC0xNDMwLDYgKzE1NzgsNyBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UoaW50IHBh
Z2VJbmRleCkKICAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRleCk7CiAg
ICAgbWF0Y2hQYWdlUnVsZXMoZGVmYXVsdFByaW50U3R5bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFn
ZSk7CiAgICAgbWF0Y2hQYWdlUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJz
dCwgcGFnZSk7CisgICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFsIFJ1bGVTZXQgZm9yIEBw
YWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCiAgICAgbWF0Y2hQYWdlUnVsZXMobV9h
dXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICBtX2xpbmVIZWln
aHRWYWx1ZSA9IDA7CiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CkBAIC0xNjc5LDYg
KzE4MjgsOCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrUmVnaW9uU3R5bGUoRWxlbWVu
dCogZSkKICAgICBmb3IgKFZlY3RvcjxSZWZQdHI8V2ViS2l0Q1NTUmVnaW9uUnVsZT4gPjo6aXRl
cmF0b3IgaXQgPSBtX3JlZ2lvblN0eWxlUnVsZXMuYmVnaW4oKTsgaXQgIT0gbV9yZWdpb25TdHls
ZVJ1bGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgcmVn
aW9uU2VsZWN0b3JMaXN0ID0gKCppdCktPnNlbGVjdG9yTGlzdCgpOwogICAgICAgICBmb3IgKENT
U1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3JMaXN0LmZpcnN0KCk7IHM7IHMgPSByZWdpb25T
ZWxlY3Rvckxpc3QubmV4dChzKSkgeworICAgICAgICAgICAgLy8gRklYTUUgKEJVRyA3MjQ3Mik6
IFdlIGRvbid0IGFkZCBALXdlYmtpdC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0
cyBmb3IgdGhlIG1vbWVudCwKKyAgICAgICAgICAgIC8vIHNvIGFsbCByZWdpb24gcnVsZXMgYXJl
IGdsb2JhbCBieSBkZWZhdWx0LiBWZXJpZnkgd2hldGhlciB0aGF0IGNhbiBzdGFuZCBvciBuZWVk
cyBjaGFuZ2luJy4KICAgICAgICAgICAgIGlmIChtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzLCBl
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTczOCw3ICsx
ODg5LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRv
U3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwKICAgICAgICAgbV9zYW1lT3JpZ2luT25s
eSA9ICEocnVsZXNUb0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKTsKIAogICAgICAgICAv
LyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KLSAgICAgICAgbWF0Y2hSdWxlcyht
X2F1dGhvclN0eWxlLmdldCgpLCBkdW1teS5maXJzdEF1dGhvclJ1bGUsIGR1bW15Lmxhc3RBdXRo
b3JSdWxlLCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOworICAgICAgICBtYXRjaEF1
dGhvclJ1bGVzKGR1bW15LmZpcnN0QXV0aG9yUnVsZSwgZHVtbXkubGFzdEF1dGhvclJ1bGUsIHJ1
bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CiAKICAgICAgICAgbV9zYW1lT3JpZ2luT25s
eSA9IGZhbHNlOwogICAgIH0KQEAgLTE5MDksOCArMjA2MCwxNSBAQCB2b2lkIFJ1bGVTZXQ6OmFk
ZFBhZ2VSdWxlKENTU1BhZ2VSdWxlKiBydWxlKQogICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChSdWxl
RGF0YShydWxlLCBydWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCBtX3BhZ2VSdWxlcy5zaXpl
KCkpKTsKIH0KIAorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1
bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IsIGNvbnN0IEVsZW1l
bnQqIHNjb3BlKQoreworI2Vsc2UKIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NT
U3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NT
U3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcikKIHsKKyAgICBjb25zdCBFbGVtZW50KiBjb25z
dCBzY29wZSA9IDA7CisjZW5kaWYKKwogICAgIGlmICghc2hlZXQpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTkzMCw3ICsyMDg4LDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChD
U1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICAgICAg
ZWxzZSBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKICAgICAgICAgICAgIENTU0ltcG9ydFJ1
bGUqIGltcG9ydCA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihydWxlKTsKICAgICAgICAg
ICAgIGlmICghaW1wb3J0LT5tZWRpYSgpIHx8IG1lZGl1bS5ldmFsKGltcG9ydC0+bWVkaWEoKSwg
c3R5bGVTZWxlY3RvcikpCi0gICAgICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0
LT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgc3R5bGVTZWxlY3Rvcik7CisgICAgICAgICAgICAgICAg
YWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0LT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgc3R5bGVTZWxl
Y3Rvciwgc2NvcGUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzTWVkaWFS
dWxlKCkpIHsKICAgICAgICAgICAgIENTU01lZGlhUnVsZSogciA9IHN0YXRpY19jYXN0PENTU01l
ZGlhUnVsZSo+KHJ1bGUpOwpAQCAtMTk0NiwyMiArMjEwNCwzOCBAQCB2b2lkIFJ1bGVTZXQ6OmFk
ZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yJgogICAgICAgICAgICAgICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8
Q1NTUGFnZVJ1bGUqPihjaGlsZEl0ZW0pKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
Y2hpbGRJdGVtLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcyNDYxKTogV2UgZG9uJ3QgYWRkIEBmb250
LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENTU0ZvbnRGYWNlUnVs
ZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4oY2hpbGRJdGVt
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3Rvcigp
LT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChjaGlsZEl0ZW0tPmlzS2V5ZnJhbWVzUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHJ1bGUgdG8gb3Vy
IHNldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2Mik6IFdlIGRv
bid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1v
bWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2Vs
ZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZSo+KGNoaWxkSXRlbSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fSAgIC8vIGZvciBydWxlcwogICAgICAgICAgICAgfSAgIC8vIGlmIHJ1bGVzCiAgICAgICAgIH0g
ZWxzZSBpZiAocnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAg
ICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KKyAgICAgICAgICAgIC8v
IEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3Bl
ZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2NvcGUpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjb25zdCBDU1NGb250RmFjZVJ1
bGUqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KHJ1bGUpOwog
ICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVs
ZShmb250RmFjZVJ1bGUpOwotICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVs
ZSgpKQorICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxl
cyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYg
KHNjb3BlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3R5bGVTZWxl
Y3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
Kj4ocnVsZSkpOwotICAgICAgICBlbHNlIGlmIChydWxlLT5pc1JlZ2lvblJ1bGUoKSAmJiBzdHls
ZVNlbGVjdG9yKQorICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9uUnVsZSgpICYmIHN0
eWxlU2VsZWN0b3IpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24n
dCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRo
ZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRSZWdpb25SdWxlKHN0YXRpY19jYXN0
PFdlYktpdENTU1JlZ2lvblJ1bGUqPihydWxlKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgaWYg
KG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCmluZGV4IGE5OGIyZjA1M2NjNDhiYzU3NWU5ZmY0
YmM0MzUzNWUwOGVmZmU5MjMuLjBlMWMzYzkyMWI5ZThhM2VhNzI5MjNhNWM4NTk1ZDczZTk4Y2Q5
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaApAQCAtNjUsNiArNjUsNyBA
QCBjbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOwogY2xhc3MgTm9kZTsKIGNsYXNzIFJ1bGVEYXRh
OwogY2xhc3MgUnVsZVNldDsKK2NsYXNzIFNjb3BlZFJ1bGVTZXRzOwogY2xhc3MgU2V0dGluZ3M7
CiBjbGFzcyBTdHlsZUltYWdlOwogY2xhc3MgU3R5bGVQZW5kaW5nSW1hZ2U7CkBAIC0xMDAsOSAr
MTAxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaWN0UGFyc2lu
ZywgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpOwogICAgIH5DU1NTdHlsZVNlbGVjdG9y
KCk7CiAKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIHN0YXRpYyBFbGVtZW50KiBkZXRl
cm1pbmVTY29waW5nRWxlbWVudChjb25zdCBDU1NTdHlsZVNoZWV0Kik7CisjZW5kaWYKKwogICAg
IC8vIFVzaW5nIHRoZXNlIGR1cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBzZWxlY3Rv
ciB0byBvcHRpbWl6ZSBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBzLgotICAg
IHZvaWQgcHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpIHsgbV9jaGVja2VyLnB1c2hQYXJlbnQo
cGFyZW50KTsgfQotICAgIHZvaWQgcG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCkgeyBtX2NoZWNr
ZXIucG9wUGFyZW50KHBhcmVudCk7IH0KKyAgICB2b2lkIHB1c2hQYXJlbnQoRWxlbWVudCopOwor
ICAgIHZvaWQgcG9wUGFyZW50KEVsZW1lbnQqKTsKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
MCwgYm9vbCBhbGxvd1NoYXJpbmcgPSB0cnVlLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9
IGZhbHNlKTsKIApAQCAtMjU4LDEwICsyNjMsMTMgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHZv
aWQgbWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYpOwogICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1h
dGNoUmVzdWx0Jik7CisgICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKGludCYgZmlyc3RSdWxlSW5k
ZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9p
ZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxl
SW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hSdWxlU2V0KGNv
bnN0IFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3Qg
VmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRl
eCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3Io
Y29uc3QgUnVsZURhdGEmKSBjb25zdDsKICAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAg
ICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcygpOwogCiAgICAgYm9vbCBjaGVja1Nl
bGVjdG9yKGNvbnN0IFJ1bGVEYXRhJik7CiAKQEAgLTI3OCw2ICsyODYsMTQgQEAgcHJpdmF0ZToK
ICAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwogICAgIFN0cmluZyBw
YWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsKIAorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
CisgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEVsZW1lbnQqLCBPd25QdHI8UnVsZVNldD4gPiBT
Y29wZWRSdWxlU2V0TWFwOworCisgICAgUnVsZVNldCogc2NvcGVkUnVsZVNldEZvckVsZW1lbnQo
Y29uc3QgRWxlbWVudCogZWxlbWVudCkgeyBTY29wZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9
IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQoZWxlbWVudCk7IHJldHVybiBpdCAhPSBtX3Njb3Bl
ZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyB9CisKKyAgICBTY29w
ZWRSdWxlU2V0TWFwIG1fc2NvcGVkQXV0aG9yU3R5bGVzOworI2VuZGlmCisKICAgICBPd25QdHI8
UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKICAgICBPd25QdHI8UnVsZVNldD4gbV91c2VyU3R5bGU7
CiAKQEAgLTQwMyw3ICs0MTksMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlOwogICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlOwogICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0eSYgbV9hcHBseVByb3BlcnR5Owot
ICAgIAorCisgICAgLy8gVmVjdG9yICh1c2VkIGFzIHN0YWNrKSB0aGF0IGtlZXBzIHRyYWNrIG9m
IHNjb3BpbmcgZWxlbWVudHMgKGkuZS4sIGVsZW1lbnRzIHdpdGggYSA8c3R5bGUgc2NvcGVkPiBj
aGlsZCkKKyAgICAvLyBlbmNvdW50ZXJlZCBkdXJpbmcgdHJlZSBpdGVyYXRpb24gZm9yIHN0eWxl
IHJlc29sdXRpb24uCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxjb25zdCBFbGVtZW50KiwgY29uc3Qg
UnVsZVNldCo+ID4gbV9zY29waW5nRWxlbWVudFN0YWNrOworCiAjaWYgRU5BQkxFKENTU19TSEFE
RVJTKQogICAgIGJvb2wgbV9oYXNQZW5kaW5nU2hhZGVyczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCAyYzVjNzMyMDBkMTk3YWZkOTZkMDliZTY5ZTll
YWE3ZmE5OWMxZjllLi5mNTM3N2I5ZGMzYTVjZTI3ZTUwMDI0YjdjOTI5MjA3YTkxN2M3NWViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtMTIzLDQwICsxMjMsMzIg
QEAgdm9pZCBTZWxlY3RvckNoZWNrZXI6OnBvcFBhcmVudFN0YWNrRnJhbWUoKQogCiB2b2lkIFNl
bGVjdG9yQ2hlY2tlcjo6cHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpCiB7Ci0gICAgaWYgKG1f
cGFyZW50U3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9hbmNlc3RvcklkZW50
aWZpZXJGaWx0ZXIpOwotICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlciA9IGFkb3B0
UHRyKG5ldyBCbG9vbUZpbHRlcjxibG9vbUZpbHRlcktleUJpdHM+KTsKLSAgICAgICAgLy8gSWYg
dGhlIGVsZW1lbnQgaXMgbm90IHRoZSByb290IGl0c2VsZiwgYnVpbGQgdGhlIHN0YWNrIHN0YXJ0
aW5nIGZyb20gdGhlIHJvb3QuCi0gICAgICAgIGlmIChwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUo
KSkgewotICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqLCAzMD4gYW5jZXN0b3JzOwotICAgICAg
ICAgICAgZm9yIChFbGVtZW50KiBhbmNlc3RvciA9IHBhcmVudDsgYW5jZXN0b3I7IGFuY2VzdG9y
ID0gYW5jZXN0b3ItPnBhcmVudE9ySG9zdEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICBhbmNl
c3RvcnMuYXBwZW5kKGFuY2VzdG9yKTsKLSAgICAgICAgICAgIGludCBjb3VudCA9IGFuY2VzdG9y
cy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBuID0gY291bnQgLSAxOyBuID49IDA7IC0t
bikKLSAgICAgICAgICAgICAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShhbmNlc3RvcnNbbl0pOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghcGFyZW50LT5w
YXJlbnRPckhvc3RFbGVtZW50KCkpIHsKLSAgICAgICAgLy8gV2UgYXJlIG5vdCBhbHdheXMgaW52
b2tlZCBjb25zaXN0ZW50bHkuIEZvciBleGFtcGxlLCBzY3JpcHQgZXhlY3V0aW9uIGNhbiBjYXVz
ZSB1cyB0byBlbnRlcgotICAgICAgICAvLyBzdHlsZSByZWNhbGMgaW4gdGhlIG1pZGRsZSBvZiB0
cmVlIGJ1aWxkaW5nLiBSZXNldCB0aGUgc3RhY2sgaWYgd2Ugc2VlIGEgbmV3IHJvb3QgZWxlbWVu
dC4KLSAgICAgICAgQVNTRVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKLSAgICAgICAg
bV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXItPmNsZWFyKCk7Ci0gICAgICAgIG1fcGFyZW50U3Rh
Y2sucmVzaXplKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX2FuY2VzdG9ySWRl
bnRpZmllckZpbHRlcik7Ci0gICAgICAgIC8vIFdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSBy
YW5kb20gZWxlbWVudHMgaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4K
LSAgICAgICAgLy8gUGF1c2UgbWFpbnRhaW5pbmcgdGhlIHN0YWNrIGluIHRoaXMgY2FzZS4KLSAg
ICAgICAgaWYgKG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgIT0gcGFyZW50LT5wYXJlbnRP
ckhvc3RFbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVCht
X2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7CisgICAgLy8gV2UgbWF5IGdldCBpbnZva2VkIGZv
ciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSBy
ZXNvbHZlLgorICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2Uu
CisgICAgaWYgKG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgIT0gcGFyZW50LT5wYXJlbnRP
ckhvc3RFbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKICAgICBwdXNoUGFyZW50U3RhY2tGcmFt
ZShwYXJlbnQpOwogfQogCi12b2lkIFNlbGVjdG9yQ2hlY2tlcjo6cG9wUGFyZW50KEVsZW1lbnQq
IHBhcmVudCkKK3ZvaWQgU2VsZWN0b3JDaGVja2VyOjpzZXR1cFBhcmVudFN0YWNrKEVsZW1lbnQq
IHBhcmVudCkKIHsKLSAgICBpZiAobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgfHwgbV9wYXJlbnRT
dGFjay5sYXN0KCkuZWxlbWVudCAhPSBwYXJlbnQpCisgICAgQVNTRVJUKG1fcGFyZW50U3RhY2su
aXNFbXB0eSgpID09ICFtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7CisgICAgLy8gS2lsbCB3
aGF0ZXZlciB3ZSBzdG9yZWQgYmVmb3JlLgorICAgIG1fcGFyZW50U3RhY2sucmVzaXplKDApOwor
ICAgIG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyID0gYWRvcHRQdHIobmV3IEJsb29tRmlsdGVy
PGJsb29tRmlsdGVyS2V5Qml0cz4pOworICAgIC8vIEZhc3QgdmVyc2lvbiBpZiBwYXJlbnQgaXMg
YSByb290IGVsZW1lbnQ6CisgICAgaWYgKCFwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSkgewor
ICAgICAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShwYXJlbnQpOwogICAgICAgICByZXR1cm47Ci0g
ICAgcG9wUGFyZW50U3RhY2tGcmFtZSgpOworICAgIH0KKyAgICAvLyBPdGhlcndpc2UgY2xpbWIg
dXAgdGhlIHRyZWUuCisgICAgVmVjdG9yPEVsZW1lbnQqLCAzMD4gYW5jZXN0b3JzOworICAgIGZv
ciAoRWxlbWVudCogYW5jZXN0b3IgPSBwYXJlbnQ7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2Vz
dG9yLT5wYXJlbnRPckhvc3RFbGVtZW50KCkpCisgICAgICAgIGFuY2VzdG9ycy5hcHBlbmQoYW5j
ZXN0b3IpOworICAgIGludCBjb3VudCA9IGFuY2VzdG9ycy5zaXplKCk7CisgICAgZm9yIChpbnQg
biA9IGNvdW50IC0gMTsgbiA+PSAwOyAtLW4pCisgICAgICAgIHB1c2hQYXJlbnRTdGFja0ZyYW1l
KGFuY2VzdG9yc1tuXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0RGVzY2VuZGFu
dFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcyhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIHVu
c2lnbmVkKiYgaGFzaCwgY29uc3QgdW5zaWduZWQqIGVuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuaAppbmRleCA3NjBiYTUyMDdiZTU3NGM1ZGZlOGE5YTA0Yjk3MDBlNGQwY2RmMjhk
Li42ZjgxN2NjMjIxZjIxZDY3ZWRjYTYwZjNiNWEzMTU2OGZhZDc5ZGMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC02MCw5ICs2MCwxMSBAQCBwdWJsaWM6CiAgICAgaW5s
aW5lIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IHVuc2lnbmVkKiBpZGVudGlmaWVySGFz
aGVzKSBjb25zdDsKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0SWRlbnRpZmllckhhc2hlcyhjb25z
dCBDU1NTZWxlY3RvciosIHVuc2lnbmVkKiBpZGVudGlmaWVySGFzaGVzLCB1bnNpZ25lZCBtYXhp
bXVtSWRlbnRpZmllckNvdW50KTsKIAorICAgIHZvaWQgc2V0dXBQYXJlbnRTdGFjayhFbGVtZW50
KiBwYXJlbnQpOwogICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpOwotICAgIHZv
aWQgcG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCk7Ci0gICAgYm9vbCBwYXJlbnRTdGFja0lzQ29u
c2lzdGVudChDb250YWluZXJOb2RlKiBwYXJlbnROb2RlKSBjb25zdCB7IHJldHVybiAhbV9wYXJl
bnRTdGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCA9PSBwYXJl
bnROb2RlOyB9CisgICAgdm9pZCBwb3BQYXJlbnQoKSB7IHBvcFBhcmVudFN0YWNrRnJhbWUoKTsg
fQorICAgIGJvb2wgcGFyZW50U3RhY2tJc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRT
dGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIHBhcmVudFN0YWNrSXNDb25zaXN0ZW50KGNvbnN0
IENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUpIGNvbnN0IHsgcmV0dXJuICFtX3BhcmVudFN0YWNr
LmlzRW1wdHkoKSAmJiBtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ID09IHBhcmVudE5vZGU7
IH0KIAogICAgIEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZShFbGVtZW50KikgY29uc3Q7
CiAgICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWVmYjEyZDMzOTI3
NjhiYmRmNzdiNjVhYTE3NGVlNTI3N2ViMTI5NS4uMGQ3NWI1YjhkZGZmZmQ0NjEyY2U5Yzk2MjMz
YzcyYmJiYmE0YTkxNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTEyLTA3ICBSb2xhbmQg
U3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIDxzdHlsZSBz
Y29wZWQ+OiBJbXBsZW1lbnQgc2NvcGVkIHN0eWxlc2hlZXRzIGFuZCBiYXNpYyBhcHBsaWNhdGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxOTAK
KworICAgICAgICBUZXN0IHRoYXQgPHN0eWxlIHNjb3BlZD4gYWZmZWN0cyBzdHlsZXMgYW5kIGlz
IHVwZGF0ZWQgY29ycmVjdGx5OgorICAgICAgICAtKSBiYXNpYyB0ZXN0CisgICAgICAgIC0pIHRl
c3Qgc2V0dGluZy91bi1zZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUKKyAgICAgICAgLSkg
dGVzdCBpbnNlcnRpbmcvcmVtb3ZpbmcgYSB3aG9sZSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Nz
cy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFz
aWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQv
c3R5bGUtc2NvcGVkLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2Nv
cGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNj
b3BlZC5odG1sOiBBZGRlZC4KKwogMjAxMS0xMS0xNiAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRz
dGVpbmVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8c3R5bGUgc2NvcGVkPjogSW1wbGVtZW50
IHJlZ2lzdGVyaW5nIG9mIDxzdHlsZSBzY29wZWQ+IHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1hdHRhY2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmZTA2NzFmYWM2
ZTE2ZTMzYTQyYzQyOWFmZWZlZGQxYTM1YWY4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCBhdHRhY2hpbmcgYSBuZXcgPHN0eWxlIHNjb3BlZD4g
ZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0g
T1JJR0lOQUwgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdi
KDAsIDAsIDApCitQMjogcmdiKDAsIDAsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAs
IDAsIDApCistLS0gQUZURVIgQVRUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLQorUzE6IHJnYigw
LCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAs
IDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hF
RCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0
eWxlLXNjb3BlZC1hdHRhY2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjAzZGY1NWRlNDliZjZjZmUx
ZjhjNmFkNDBiMGU2NTBjZjhhZTZlNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwKQEAgLTAsMCArMSw3
MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgewor
ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcg
KyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFBy
b3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVz
dEFsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0
ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1Ay
Jyk7CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOwor
CisgICAgICAgICAgICBsb2coJy0tLSBBRlRFUiBBVFRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0t
Jyk7CisgICAgICAgICAgICB2YXIgZGl2RWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdE
SVYnKTsKKyAgICAgICAgICAgIHZhciBzdHlsZUVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdzdHlsZScpOworICAgICAgICAgICAgc3R5bGVFbGVtLnNldEF0dHJpYnV0ZSgnc2NvcGVkJywg
dHJ1ZSk7CisgICAgICAgICAgICBzdHlsZUVsZW0uaW5uZXJIVE1MID0gJ2RpdiB7IGNvbG9yOiBy
ZWQ7IH0gcCB7IGNvbG9yOiBncmVlbjsgfSc7CisgICAgICAgICAgICBkaXZFbGVtLmluc2VydEJl
Zm9yZShzdHlsZUVsZW0sIGRpdkVsZW0uZmlyc3RDaGlsZCk7CisgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAg
ICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAg
IDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBi
b2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgYXR0YWNoaW5nIGEgbmV3ICZsdDtzdHlsZSBz
Y29wZWQmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5U
ZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAg
PGRpdiBpZD0iRElWIj4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAg
ICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNw
YW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAg
PC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LWJhc2ljLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9z
dHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5MTJmZGMwZjgzZWMx
NDkzYTQyYzI1OWIzZjE4MmJiMGY1NmM3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDQyIEBACitUZXN0IDxzdHlsZSBzY29wZWQ+CisKK1RleHQKK1RleHQKKworVGV4
dAorVGV4dAorVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKK1Rl
eHQKK1RleHQKKworVGV4dAorVGV4dAorLS0tIENPTVBVVEVEIFNUWUxFUyAtLS0KK1MxOiByZ2Io
MCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1IxOiByZ2IoMCwgMCwgMCkKK0UxOiByZ2IoMCwg
MCwgMCkKKworUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1IyOiByZ2Io
MCwgMCwgMjU1KQorCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCitSMzogcmdi
KDAsIDAsIDApCitFMzogcmdiKDAsIDAsIDApCisKK1M0OiByZ2IoMCwgMCwgMCkKK1A0OiByZ2Io
MCwgMCwgMCkKK1I0OiByZ2IoMCwgMCwgMCkKK0U0OiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hF
RCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0
eWxlLXNjb3BlZC1iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1iYXNpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlNWI0MzFhOTE2YTM5YzY5ZmJk
Zjg2Njg2NGFlOGRmZjNkNjhjZWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLmh0bWwKQEAgLTAsMCArMSw4MSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAg
ICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBk
b2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3Bl
cnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVz
dHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KworICAgICAgICAgICAgbG9nKCctLS0gQ09NUFVURUQgU1RZTEVTIC0tLScpOworCisgICAgICAg
ICAgICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRl
c3QoJ1IxJyk7CisgICAgICAgICAgICB0ZXN0KCdFMScpOworICAgICAgICAgICAgbG9nKCcnKTsK
KyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAg
ICAgICAgdGVzdCgnUjInKTsKKyAgICAgICAgICAgIGxvZygnJyk7CisgICAgICAgICAgICB0ZXN0
KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1IzJyk7
CisgICAgICAgICAgICB0ZXN0KCdFMycpOworICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAgICAg
ICAgIHRlc3QoJ1M0Jyk7CisgICAgICAgICAgICB0ZXN0KCdQNCcpOworICAgICAgICAgICAgdGVz
dCgnUjQnKTsKKyAgICAgICAgICAgIHRlc3QoJ0U0Jyk7CisKKyAgICAgICAgICAgIGxvZygnLS0t
IEZJTklTSEVEIC0tLScpOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5
cGU9InRleHQvY3NzIj4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5
bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0ICZs
dDtzdHlsZSBzY29wZWQmZ3Q7PC9wPgorICAgIDxkaXYgY2xhc3M9ImZvbyI+CisgICAgICAgIDxz
cGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAg
ICAgICA8cHJlIGlkID0gIlIxIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgIDxwcmUg
aWQ9IkUxIiBjbGFzcz0iYmF6Ij5UZXh0PC9wcmU+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAg
ICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgor
ICAgICAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgICAgICBwIHsg
Y29sb3I6IGdyZWVuOyB9CisgICAgICAgICAgICAgICAgZGl2IC5iYXIgeyBjb2xvcjogYmx1ZTsg
fQorICAgICAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwv
c3Bhbj4KKyAgICAgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICAgICAgICAgIDxwcmUg
aWQ9IlIyIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8
c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAg
ICAgICAgPHByZSBpZCA9ICJSMyIgY2xhc3M9ImJhciI+VGV4dDwvcHJlPgorICAgICAgICA8cHJl
IGlkPSJFMyIgY2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xh
c3M9ImZvbyI+CisgICAgICAgIDxzcGFuIGlkPSJTNCI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAg
aWQ9IlA0Ij5UZXh0PC9wPgorICAgICAgICA8cHJlIGlkID0gIlI0IiBjbGFzcz0iYmFyIj5UZXh0
PC9wcmU+CisgICAgICAgIDxwcmUgaWQ9IkU0IiBjbGFzcz0iYmF6Ij5UZXh0PC9wcmU+CisgICAg
PC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LWRldGFjaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQv
c3R5bGUtc2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDdlZjY1MzE3NDA3
MmI3ODg3ZjdkZjNkYWJmOTFhOWE3MzQwZTNlOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDI3IEBACitUZXN0IGRldGFjaGluZyBhIDxzdHlsZSBzY29wZWQ+IGVsZW1l
bnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJ
TkFMIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUs
IDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwg
MCwgMCkKKy0tLSBBRlRFUiBERVRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tCitTMTogcmdiKDAs
IDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDAsIDAsIDApCitQMjogcmdiKDAsIDAs
IDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0t
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtZGV0YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5
bGUtc2NvcGVkLWRldGFjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjOGJmNmE4NjYxMjcwZjg2MWNiODU1
OGFjMzI3YTE4NzcxZjM5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC5odG1sCkBAIC0wLDAgKzEsNzIgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9j
dW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0
eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwo
KQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgn
UDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOwor
ICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAg
ICAgICAgICAgbG9nKCctLS0gQUZURVIgREVUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLScpOwor
ICAgICAgICAgICAgdmFyIGRpdkVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRElWJyk7
CisgICAgICAgICAgICB2YXIgc3R5bGVFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NU
WUxFJyk7CisgICAgICAgICAgICBkaXZFbGVtLnJlbW92ZUNoaWxkKHN0eWxlRWxlbSk7CisgICAg
ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwo
KTsKKyAgICAgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsK
KyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2Nv
cGVkPgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVh
ZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgZGV0YWNoaW5nIGEg
Jmx0O3N0eWxlIHNjb3BlZCZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAgICA8c3Bh
biBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICA8
L2Rpdj4KKyAgICA8ZGl2IGlkPSJESVYiPgorICAgICAgICA8c3R5bGUgaWQ9IlNUWUxFIiB0eXBl
PSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAg
ICAgICAgICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8
c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAg
ICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+Cisg
ICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25z
b2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92
ZS1zY29wZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMjA1ODdkZjVhZmZmNjJkYzI3ZjYy
YWFlYzQ1MGIzMzc2NWNhYzgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMjcgQEAKK1Rlc3QgcmVtb3ZpbmcgdGhlICdzY29wZWQnIGF0dHJpYnV0ZSBvbiBh
IDxzdHlsZT4gZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4
dAorCistLS0gT1JJR0lOQUwgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDAp
CitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigwLCAwLCAw
KQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEFGVEVSIFVOLVNFVFRJTkcgQFNDT1BFRCAtLS0KK1Mx
OiByZ2IoMjU1LCAwLCAwKQorUDE6IHJnYigwLCAxMjgsIDApCitTMjogcmdiKDI1NSwgMCwgMCkK
K1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigyNTUsIDAsIDApCitQMzogcmdiKDAsIDEyOCwg
MCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lYWFmMzc3NGNhYjJmYTc0ZmQ3MGM2MTFhZTAzMmJhMTE4NDNkN2VkCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNj
b3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAg
ICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlk
KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmll
dy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykp
OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEFsbCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAg
ICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0
KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZygnLS0tIE9SSUdJ
TkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOworCisgICAgICAgICAgICBsb2coJy0t
LSBBRlRFUiBVTi1TRVRUSU5HIEBTQ09QRUQgLS0tJyk7CisgICAgICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnU1RZTEUnKS5yZW1vdmVBdHRyaWJ1dGUoJ3Njb3BlZCcpOworICAgICAg
ICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7
CisgICAgICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7Cisg
ICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3Bl
ZD4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0IHJlbW92aW5nIHRoZSAn
c2NvcGVkJyBhdHRyaWJ1dGUgb24gYSAmbHQ7c3R5bGUmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRp
dj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEi
PlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlM
RSIgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7
IH0KKyAgICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgPC9zdHlsZT4KKyAg
ICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8
L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9z
cGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBp
ZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1z
ZXQtc2NvcGVkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTBjNzk2M2M5N2M0NzgwMWUwODQ5
Njc1MTEzNzIyMmM0NjY1ZDFjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDI3IEBACitUZXN0IHNldHRpbmcgdGhlICdzY29wZWQnIGF0dHJpYnV0ZSBvbiBhIDxz
dHlsZT4gZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAor
CistLS0gT1JJR0lOQUwgLS0tCitTMTogcmdiKDI1NSwgMCwgMCkKK1AxOiByZ2IoMCwgMTI4LCAw
KQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMjU1LCAw
LCAwKQorUDM6IHJnYigwLCAxMjgsIDApCistLS0gQUZURVIgU0VUVElORyBAU0NPUEVEIC0tLQor
UzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQ
MjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0t
LSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
OTAzYmQ0MWUyOTlkMDM1MDFjZWYxMDU0MGZlMTk1MDBjNGU4MmVlCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2Nv
cGVkLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24g
bG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4n
KSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7Cisg
ICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAg
ICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0
eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gdGVzdEFsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3Qo
J1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsK
KyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAg
ICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3Rz
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAg
ICAgICAgICAgdGVzdEFsbCgpOworCisgICAgICAgICAgICBsb2coJy0tLSBBRlRFUiBTRVRUSU5H
IEBTQ09QRUQgLS0tJyk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU1RZ
TEUnKS5zZXRBdHRyaWJ1dGUoJ3Njb3BlZCcsIHRydWUpOworICAgICAgICAgICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAg
ICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8
L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9k
eSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9
InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0IHNldHRpbmcgdGhlICdzY29wZWQnIGF0dHJpYnV0
ZSBvbiBhICZsdDtzdHlsZSZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAgICA8c3Bh
biBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICA8
L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3R5bGUgaWQ9IlNUWUxFIiB0eXBlPSJ0ZXh0L2Nz
cyI+CisgICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAgICAgICBwIHsgY29s
b3I6IGdyZWVuOyB9CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4
dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxk
aXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAz
Ij5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9i
b2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119172</attachid>
            <date>2011-12-14 00:36:24 -0800</date>
            <delta_ts>2012-01-25 20:49:14 -0800</delta_ts>
            <desc>patch (requires 67790), with flag</desc>
            <filename>bug-73190-20111214173622.patch</filename>
            <type>text/plain</type>
            <size>48344</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjFjZDRmY2UyMDBhM2Vl
MmFkYTZkYjNjMDRjOWE5Y2Y3ZDU1NTFjNi4uZDgwYjMxMmIzOGJhZjU3ZGFkZGQ0OWNiNzFlYTRm
MzVhYjAyMDdkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDExLTEyLTA3ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIDxzdHls
ZSBzY29wZWQ+OiBJbXBsZW1lbnQgc2NvcGVkIHN0eWxlc2hlZXRzIGFuZCBiYXNpYyBhcHBsaWNh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMx
OTAKKworICAgICAgICBJbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgPHN0eWxlIHNjb3BlZD46Cisg
ICAgICAgIFN0b3JlIHNjb3BlZCBzdHlsZSBzaGVldHMgaW4gYSBzZXBhcmF0ZSBkYXRhIHN0cnVj
dHVyZSBTY29wZWRSdWxlU2V0cy4KKyAgICAgICAgQWRkIGEgdmVjdG9yIHN0YWNrIHRvIENTU1N0
eWxlU2VsZWN0b3IgdGhhdCBrZWVwcyB0cmFjayBvZiBlbmNvdW50ZXJlZCBzY29waW5nIGVsZW1l
bnRzLiBUaGlzIGlzCisgICAgICAgIHVzZWQgZm9yIE8oMSkgYWNjZXNzIHRvIGFsbCByZWxldmFu
dCBzdHlsZSBzaGVldHMgZm9yIGEgZ2l2ZW4gZWxlbWVudC4KKyAgICAgICAgRmluYWxseSwgcHJl
dmVudCBzdHlsZSBzaGFyaW5nIGZyb20gY3Jvc3NpbmcgaW50by9vdXQgb2Ygc2NvcGVkIHN0eWxl
IGJvdW5kYXJpZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdHM6IGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFz
aWMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1kZXRhY2guaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHA6IGFkZCBzdXBwb3J0IGZvciBzY29wZWQgYXV0aG9yIHNoZWV0cwor
ICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OlNjb3BlZFJ1bGVTZXRzKTogY2xhc3Mg
Zm9yIHNjb3BlZCBhdXRob3Igc2hlZXRzCisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0
czo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2Vs
ZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU2Nv
cGluZ0VsZW1lbnQpOiBkZXRlcm1pbmUgd2hldGhlciBhbiBhdXRob3Igc2hlZXQgaXMgc2NvcGVk
IChhbmQgdG8gd2hpY2ggc2NvcGUpLCBvciBnbG9iYWwKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OnB1c2hQYXJlbnQpOiB0YWtlIG92ZXIgc29tZSBvZiB0aGUgbG9naWMgb2Yg
U2VsZWN0b3JDaGVja2VyOjpwdXNoUGFyZW50LCBpbiBvcmRlciB0byBtYWludGFpbiBtX3Njb3Bp
bmdQYXJlbnRTdGFjaworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFy
ZW50KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyk6IGhlbHBlciBmdW5jdGlvbgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6IGNoYW5nZWQgY2FsbCB0byBtYXRjaEF1
dGhvclJ1bGVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhv
clJ1bGVzKTogbWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcworICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyk6IGFkZCAnc2NvcGUnIHBhcmFtZXRlcgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlU2V0KTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KTogZGl0dG8K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QpOiBw
cmV2ZW50IHN0eWxlIHNoYXJpbmcgYWNyb3NzIHNjb3BlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6IGRpdHRv
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGFyZWRTdHlsZSk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZv
ckVsZW1lbnQpOiBjaGFuZ2VkIGNhbGwgdG8gbWF0Y2hBdXRob3JSdWxlcworICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKTogY29tbWVudAorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tSZWdpb25TdHlsZSk6IGFkZCBnbG9iYWwg
c2NvcGUgcGFyYW1ldGVyCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6IGNoYW5nZWQgY2FsbCB0byBtYXRjaEF1dGhvclJ1bGVz
CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCk6IGFkZCBjb21t
ZW50cyBmb3IgQGZvbnQtZmFjZSBhbmQgQGtleWZyYW1lcworICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzY29wZWRS
dWxlU2V0Rm9yRWxlbWVudCk6IGhlbHBlciBmdW5jdGlvbiwgbWF5IHJldHVybiBOVUxMIAorICAg
ICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDaGVja2VyOjpwdXNoUGFyZW50KTogc2ltcGxpZnkKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ2hlY2tlcjo6c2V0dXBQYXJlbnRTdGFjayk6IHJlZmFjdG9yaW5nIG9mIHByZXZpb3VzIHB1
c2hQYXJlbnQKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6OnBvcFBhcmVudCk6IHNpbXBsaWZ5CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6OnBhcmVudFN0YWNrSXNFbXB0eSk6IGFkZGl0aW9uYWwgaGVs
cGVyIGZ1bmN0aW9uCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnBhcmVudFN0
YWNrSXNDb25zaXN0ZW50KTogbWFrZSBwYXJhbWV0ZXIgY29uc3QKKwogMjAxMS0xMS0xNiAgUm9s
YW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8c3R5
bGUgc2NvcGVkPjogSW1wbGVtZW50IHJlZ2lzdGVyaW5nIG9mIDxzdHlsZSBzY29wZWQ+IHdpdGgg
dGhlIHNjb3BpbmcgZWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CmluZGV4IDNjODRhYmVlODQ1MzYxMzQwNTkyZjc1ZDIwMDFkMDE0ZjEyZTE5MTAuLjEyYWYzN2Ni
OWNlOGQxZDAwZWI4ZjgwYzIzNjk5NWU4Yzc2YmNjMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFByb2dyZXNz
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
VGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCiAjaW5jbHVkZSAi
TGlua0hhc2guaCIKQEAgLTIwOCw3ICsyMDksMTEgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+ID4gQXRv
bVJ1bGVNYXA7CiAKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIHZvaWQgYWRkUnVsZXNG
cm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NT
dHlsZVNlbGVjdG9yKiA9IDAsIGNvbnN0IEVsZW1lbnQqID0gMCk7CisjZWxzZQogICAgIHZvaWQg
YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImLCBDU1NTdHlsZVNlbGVjdG9yKiA9IDApOworI2VuZGlmCiAKICAgICB2b2lkIGFkZFN0eWxl
UnVsZShDU1NTdHlsZVJ1bGUqIGl0ZW0pOwogICAgIHZvaWQgYWRkUnVsZShDU1NTdHlsZVJ1bGUq
IHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOwpAQCAtMzcxLDcgKzM3Niw4IEBAIENTU1N0eWxlU2Vs
ZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlz
dCogc3R5bGVTaGVlCiAgICAgICAgIG1fbWVkaXVtID0gYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlF
dmFsdWF0b3Iodmlldy0+bWVkaWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRT
dHlsZS5nZXQoKSkpOwogCiAgICAgbV9hdXRob3JTdHlsZSA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0
KTsKLSAgICAvLyBBZGRpbmcgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0
aGUgZW5kLgorICAgIC8vIEFkZGluZyBnbG9iYWwgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMs
IHNocmluayBhdCB0aGUgZW5kLgorICAgIC8vIE5vdGUgdGhhdCB0aGVyZSB1c3VhbGx5IGlzIG9u
bHkgMSBzaGVldCBmb3Igc2NvcGVkIHJ1bGVzLCBzbyBhdXRvLXNocmluay10by1maXQgaXMgZmlu
ZS4KICAgICBtX2F1dGhvclN0eWxlLT5kaXNhYmxlQXV0b1Nocmlua1RvRml0KCk7CiAKICAgICAv
LyBGSVhNRTogVGhpcyBzdWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGlt
ZSEKQEAgLTQwMSwxNSArNDA3LDI5IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0
b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAgICAg
IG1fdXNlclN0eWxlID0gdGVtcFVzZXJTdHlsZS5yZWxlYXNlKCk7CiAKICAgICAvLyBBZGQgcnVs
ZXMgZnJvbSBlbGVtZW50cyBsaWtlIFNWRydzIDxmb250LWZhY2U+Ci0gICAgaWYgKG1hcHBlZEVs
ZW1lbnRTaGVldCkKKyAgICBpZiAobWFwcGVkRWxlbWVudFNoZWV0KSB7CisgICAgICAgIC8vIEZJ
WE1FOiBzZWUgaWYgc3R5bGUgc2NvcGVzIGNhbi9zaG91bGQgYmUgYWRkZWQgaGVyZS4KICAgICAg
ICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWFwcGVkRWxlbWVudFNoZWV0LCAq
bV9tZWRpdW0sIHRoaXMpOworICAgIH0KIAogICAgIC8vIGFkZCBzdHlsZXNoZWV0cyBmcm9tIGRv
Y3VtZW50CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3R5bGVTaGVldHMtPmxlbmd0aCgpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICBTdHlsZVNo
ZWV0KiBzaGVldCA9IHN0eWxlU2hlZXRzLT5pdGVtKGkpOwotICAgICAgICBpZiAoc2hlZXQtPmlz
Q1NTU3R5bGVTaGVldCgpICYmICFzaGVldC0+ZGlzYWJsZWQoKSkKLSAgICAgICAgICAgIG1fYXV0
aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihz
aGVldCksICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNo
ZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxlZCgpKSB7CisgICAgICAgICAgICBDU1NTdHlsZVNoZWV0
KiBjc3NTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCk7CisjaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIHNjb3BlID0gZGV0
ZXJtaW5lU2NvcGluZ0VsZW1lbnQoY3NzU2hlZXQpOworICAgICAgICAgICAgaWYgKHNjb3BlKSB7
CisgICAgICAgICAgICAgICAgc3RkOjpwYWlyPFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yLCBi
b29sPiBhZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5hZGQoc2NvcGUsIG51bGxwdHIp
OworICAgICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuc2Vjb25kKQorICAgICAgICAgICAgICAg
ICAgICBhZGRSZXN1bHQuZmlyc3QtPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KCkpOwor
ICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5maXJzdC0+c2Vjb25kLT5hZGRSdWxlc0Zyb21TaGVl
dChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUt
PmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAgICB9
CiAgICAgfQogICAgIC8vIENvbGxlY3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2libGluZyBz
ZWxlY3RvcnMgKDpmaXJzdC1jaGlsZCBhbmQgc2ltaWxhcikKICAgICAvLyBpbiB0aGUgY3VycmVu
dCBzZXQgb2Ygc3R5bGVzaGVldHMuIFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMgaW5mb3Jt
YXRpb24gdG8gcmVqZWN0CkBAIC00MjAsNiArNDQwLDEwIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNT
U1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVT
aGVlCiAgICAgaWYgKHVuY29tbW9uQXR0cmlidXRlUnVsZXNJbkRlZmF1bHRTdHlsZSkKICAgICAg
ICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlc0luRGVmYXVsdFN0eWxlLT5jb2xsZWN0RmVhdHVyZXMo
bV9mZWF0dXJlcyk7CiAgICAgbV9hdXRob3JTdHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVy
ZXMpOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgZm9yIChTY29wZWRSdWxlU2V0TWFw
OjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fc2Nv
cGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5jb2xsZWN0
RmVhdHVyZXMobV9mZWF0dXJlcyk7CisjZW5kaWYKICAgICBpZiAobV91c2VyU3R5bGUpCiAgICAg
ICAgIG1fdXNlclN0eWxlLT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7CiAKQEAgLTQzMyw2
ICs0NTcsNjggQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCog
ZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAgZG9jdW1lbnQtPnJl
bmRlcmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogfQogCisj
aWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKK0VsZW1lbnQqIENTU1N0eWxlU2VsZWN0b3I6OmRldGVy
bWluZVNjb3BpbmdFbGVtZW50KGNvbnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0KQoreworICAgIEFT
U0VSVChzaGVldCk7CisKKyAgICBOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+ZmluZFN0eWxlU2hl
ZXRPd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSB8fCAhb3duZXJOb2RlLT5pc0hUTUxF
bGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3duZXJOb2RlKTsKKyAgICBpZiAoIXN0
eWxlRWxlbWVudC0+c2NvcGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0
eWxlRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworfQorI2VuZGlmCisKK3ZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6cHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpCit7CisgICAgLy8gV2UgYXJlIG5v
dCBhbHdheXMgaW52b2tlZCBjb25zaXN0ZW50bHkuIEZvciBleGFtcGxlLCBzY3JpcHQgZXhlY3V0
aW9uIGNhbiBjYXVzZSB1cyB0byBlbnRlcgorICAgIC8vIHN0eWxlIHJlY2FsYyBpbiB0aGUgbWlk
ZGxlIG9mIHRyZWUgYnVpbGRpbmcuIFdlIG1heSBhbHNvIGJlIGludm9rZWQgZnJvbSBzb21ld2hl
cmUgd2l0aGluIHRoZSB0cmVlLgorICAgIC8vIFJlc2V0IHRoZSBzdGFjayBpbiB0aGlzIGNhc2Us
IG9yIGlmIHdlIHNlZSBhIG5ldyByb290IGVsZW1lbnQuCisgICAgaWYgKCFwYXJlbnQtPnBhcmVu
dE9ySG9zdEVsZW1lbnQoKSB8fCBtX2NoZWNrZXIucGFyZW50U3RhY2tJc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV9jaGVja2VyLnNldHVwUGFyZW50U3RhY2socGFyZW50KTsKKyNpZiBFTkFCTEUoU1RZ
TEVfU0NPUEVEKQorICAgICAgICBtX3Njb3BpbmdFbGVtZW50U3RhY2sucmVzaXplKDApOworICAg
ICAgICBmb3IgKDsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQo
KSkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkg
eworICAgICAgICAgICAgICAgIGNvbnN0IFJ1bGVTZXQqIHJ1bGVTZXQgPSBzY29wZWRSdWxlU2V0
Rm9yRWxlbWVudChwYXJlbnQpOworICAgICAgICAgICAgICAgIGlmIChydWxlU2V0KQorICAgICAg
ICAgICAgICAgICAgICBtX3Njb3BpbmdFbGVtZW50U3RhY2suYXBwZW5kKHN0ZDo6cGFpcjxjb25z
dCBFbGVtZW50KiwgY29uc3QgUnVsZVNldCo+KHBhcmVudCwgcnVsZVNldCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIG1fc2NvcGluZ0VsZW1lbnRTdGFjay5yZXZlcnNlKCk7
CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBPdGhlcndpc2UsIGp1c3Qg
cHVzaCB0aGUgbmV3IHBhcmVudC4gSG93ZXZlciwgbm90ZSB0aGF0IHdlIG1heSBnZXQgaW52b2tl
ZCBmb3Igc29tZSByYW5kb20gZWxlbWVudHMKKyAgICAvLyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1
cmluZyBzdHlsZSByZXNvbHZlLiBQYXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBj
YXNlLgorICAgIG1fY2hlY2tlci5wdXNoUGFyZW50KHBhcmVudCk7CisjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkKKyAgICBpZiAobV9jaGVja2VyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHBhcmVu
dCkgJiYgcGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKSB7CisgICAgICAgIGNvbnN0
IFJ1bGVTZXQqIHJ1bGVTZXQgPSBzY29wZWRSdWxlU2V0Rm9yRWxlbWVudChwYXJlbnQpOworICAg
ICAgICBpZiAocnVsZVNldCkKKyAgICAgICAgICAgIG1fc2NvcGluZ0VsZW1lbnRTdGFjay5hcHBl
bmQoc3RkOjpwYWlyPGNvbnN0IEVsZW1lbnQqLCBjb25zdCBSdWxlU2V0Kj4ocGFyZW50LCBydWxl
U2V0KSk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFy
ZW50KEVsZW1lbnQqIHBhcmVudCkKK3sKKyAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGdldCBpbnZv
a2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBz
dHlsZSByZXNvbHZlLgorICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlz
IGNhc2UuCisgICAgaWYgKG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJlbnQp
KSB7CisgICAgICAgIG1fY2hlY2tlci5wb3BQYXJlbnQoKTsKKyNpZiBFTkFCTEUoU1RZTEVfU0NP
UEVEKQorICAgICAgICBpZiAoIW1fc2NvcGluZ0VsZW1lbnRTdGFjay5pc0VtcHR5KCkgJiYgcGFy
ZW50ID09IG1fc2NvcGluZ0VsZW1lbnRTdGFjay5sYXN0KCkuZmlyc3QpCisgICAgICAgICAgICBt
X3Njb3BpbmdFbGVtZW50U3RhY2sucmVtb3ZlTGFzdCgpOworI2VuZGlmCisgICAgfQorfQorCiB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZFJlZ2lvblJ1bGUoUGFzc1JlZlB0cjxXZWJLaXRDU1NS
ZWdpb25SdWxlPiByZWdpb25TdHlsZVJ1bGUpCiB7CiAgICAgbV9yZWdpb25TdHlsZVJ1bGVzLmFw
cGVuZChyZWdpb25TdHlsZVJ1bGUpOwpAQCAtNjAwLDYgKzY4Niw0NiBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogc3R5bGVEZQogICAgIG5ld0RlY2xhcmF0aW9uLnJlZ2lvblN0eWxlUnVsZSA9IHJlZ2lvblN0
eWxlUnVsZTsKIH0KIAordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVzKGlu
dCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlS
dWxlcykKK3sKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworCisgICAgaWYgKCFtX2VsZW1l
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMu
CisgICAgbWF0Y2hSdWxlU2V0KG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BF
RCkKKyAgICAvLyBNYXRjaCBzY29wZWQgc3R5bGUgc2hlZXQncyBydWxlcywgYnV0IG9ubHkgaWYg
dGhlcmUgYXJlIGluZGVlZCBzY29wZWQgc3R5bGVzIGFueXdoZXJlIChzaG9ydGN1dCkuCisgICAg
aWYgKCFtX3Njb3BlZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fY2hl
Y2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChtX3BhcmVudE5vZGUpKSB7CisgICAgICAgICAg
ICAvLyBGYXN0IGJyYW5jaDogYWNjZXNzIGVuY2xvc2luZyBzY29wZXMgZGlyZWN0bHkgZnJvbSB2
ZWN0b3IsIGJ1dCBzdGFydCB3aXRoIGN1cnJlbnQgZWxlbWVudC4KKyAgICAgICAgICAgIGlmICht
X2VsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBSdWxlU2V0KiBydWxlU2V0ID0gc2NvcGVkUnVsZVNldEZvckVsZW1lbnQobV9lbGVtZW50
KTsKKyAgICAgICAgICAgICAgICBpZiAocnVsZVNldCkKKyAgICAgICAgICAgICAgICAgICAgbWF0
Y2hSdWxlU2V0KHJ1bGVTZXQsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRl
RW1wdHlSdWxlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
bV9zY29waW5nRWxlbWVudFN0YWNrLnNpemUoKTsgaSA+IDA7IC0taSkKKyAgICAgICAgICAgICAg
ICBtYXRjaFJ1bGVTZXQobV9zY29waW5nRWxlbWVudFN0YWNrW2kgLSAxXS5zZWNvbmQsIGZpcnN0
UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBTbG93IGJyYW5jaDogY2xpbWIgdHJlZSwgY2hlY2sgZm9y
IHN0eWxlIHNjb3BlcyBhdCBldmVyeSBlbGVtZW50LgorICAgICAgICAgICAgZm9yIChjb25zdCBO
b2RlKiBub2RlID0gbV9lbGVtZW50OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNT
Y29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBSdWxlU2V0KiBydWxlU2V0ID0gc2NvcGVkUnVsZVNldEZvckVs
ZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAg
ICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorI2VuZGlmCisKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoKTsKK30KKwogdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0
UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7
CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKQEAgLTYwNyw2ICs3MzMsMTUgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3QKICAgICBpZiAoIXJ1bGVzIHx8ICFtX2VsZW1lbnQpCiAgICAgICAg
IHJldHVybjsKIAorICAgIG1hdGNoUnVsZVNldChydWxlcywgZmlyc3RSdWxlSW5kZXgsIGxhc3RS
dWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVk
UnVsZXMoKTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVTZXQoY29uc3Qg
UnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKKyAgICBBU1NFUlQobV9lbGVtZW50KTsKKyAgICBB
U1NFUlQocnVsZXMpOworCiAgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3Ig
aWQsIGNsYXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAg
ICAvLyB0aGVuIHNvcnQgdGhlIGJ1ZmZlci4KICAgICBpZiAobV9lbGVtZW50LT5oYXNJRCgpKQpA
QCAtNjI5LDMzICs3NjQsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVs
ZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdAogICAgICAgICBtYXRj
aFJ1bGVzRm9yTGlzdChydWxlcy0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIGZpcnN0UnVsZUlu
ZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgbWF0Y2hSdWxlc0Zv
ckxpc3QocnVsZXMtPnRhZ1J1bGVzKG1fZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgZmly
c3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBtYXRj
aFJ1bGVzRm9yTGlzdChydWxlcy0+dW5pdmVyc2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxh
c3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLQotICAgIC8vIElmIHdlIGRpZG4ndCBt
YXRjaCBhbnkgcnVsZXMsIHdlJ3JlIGRvbmUuCi0gICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU29ydCB0aGUgc2V0IG9mIG1hdGNoZWQg
cnVsZXMuCi0gICAgc29ydE1hdGNoZWRSdWxlcygpOwotCi0gICAgLy8gTm93IHRyYW5zZmVyIHRo
ZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xzLgotICAgIGlm
ICghbV9jaGVja2VyLmlzQ29sbGVjdGluZ1J1bGVzT25seSgpKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBUaGlzIHN1Y2tzLCB0aGUgaW5zcGVjdG9yIHNob3VsZCBnZXQgdGhlIHN0eWxlIGZyb20gdGhl
IHZpc2l0ZWQgc3R5bGUgaXRzZWxmLgotICAgICAgICBib29sIHN3YXBWaXNpdGVkVW52aXNpdGVk
ID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKG1fZWxlbWVudCwg
Q1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChtX3N0
eWxlICYmIG1fbWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0
b3IoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRBZmZlY3RlZEJ5VW5jb21tb25BdHRy
aWJ1dGVTZWxlY3RvcnMoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBt
X21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgpOwotICAgICAgICAgICAgaWYgKHN3YXBW
aXNpdGVkVW52aXNpdGVkICYmIGxpbmtNYXRjaFR5cGUgJiYgbGlua01hdGNoVHlwZSAhPSBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoQWxsKQotICAgICAgICAgICAgICAgIGxpbmtNYXRjaFR5cGUgPSAo
bGlua01hdGNoVHlwZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCkgPyBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoTGluayA6IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOwotICAg
ICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCkt
PmRlY2xhcmF0aW9uKCksIGxpbmtNYXRjaFR5cGUsIG1fbWF0Y2hlZFJ1bGVzW2ldLT5yZWdpb25T
dHlsZVJ1bGUoKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAg
IGlmICghbV9ydWxlTGlzdCkKLSAgICAgICAgICAgICAgICBtX3J1bGVMaXN0ID0gQ1NTUnVsZUxp
c3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgbV9ydWxlTGlzdC0+YXBwZW5kKG1fbWF0Y2hlZFJ1
bGVzW2ldLT5ydWxlKCkpOwotICAgICAgICB9Ci0gICAgfQogfQogCiBjbGFzcyBNYXRjaGluZ1VB
UnVsZXNTY29wZSB7CkBAIC03NDcsNiArODU1LDM0IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
c29ydE1hdGNoZWRSdWxlcygpCiAgICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCks
IG1fbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMpOwogfQogCit2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcygpCit7CisgICAgaWYgKG1fbWF0
Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpzb3J0KG1f
bWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMp
OworCisgICAgaWYgKG1fY2hlY2tlci5pc0NvbGxlY3RpbmdSdWxlc09ubHkoKSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgICAgIGlmICghbV9ydWxlTGlzdCkKKyAgICAgICAgICAgICAgICBtX3J1bGVMaXN0
ID0gQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgbV9ydWxlTGlzdC0+YXBwZW5k
KG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBzdWNrcywgdGhlIGluc3BlY3RvciBzaG91bGQg
Z2V0IHRoZSBzdHlsZSBmcm9tIHRoZSB2aXNpdGVkIHN0eWxlIGl0c2VsZi4KKyAgICBib29sIHN3
YXBWaXNpdGVkVW52aXNpdGVkID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVk
b1N0YXRlKG1fZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgeworICAgICAg
ICBpZiAobV9zdHlsZSAmJiBtX21hdGNoZWRSdWxlc1tpXS0+Y29udGFpbnNVbmNvbW1vbkF0dHJp
YnV0ZVNlbGVjdG9yKCkpCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRBZmZlY3RlZEJ5VW5jb21t
b25BdHRyaWJ1dGVTZWxlY3RvcnMoKTsKKyAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9
IG1fbWF0Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hUeXBlKCk7CisgICAgICAgIGlmIChzd2FwVmlz
aXRlZFVudmlzaXRlZCAmJiBsaW5rTWF0Y2hUeXBlICYmIGxpbmtNYXRjaFR5cGUgIT0gU2VsZWN0
b3JDaGVja2VyOjpNYXRjaEFsbCkKKyAgICAgICAgICAgIGxpbmtNYXRjaFR5cGUgPSAobGlua01h
dGNoVHlwZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCkgPyBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoTGluayA6IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOworICAgICAgICBh
ZGRNYXRjaGVkRGVjbGFyYXRpb24obV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+ZGVjbGFyYXRp
b24oKSwgbGlua01hdGNoVHlwZSk7CisgICAgfQorfQorCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBtYXRjaFVBUnVsZXMo
cmVzdWx0KTsKQEAgLTc5OSw3ICs5MzUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNo
QWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKICAgICAKICAgICAvLyBDaGVjayB0aGUgcnVs
ZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcykKLSAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQuZmly
c3RBdXRob3JSdWxlLCByZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0
Y2hBdXRob3JSdWxlcyhyZXN1bHQuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQubGFzdEF1dGhvclJ1
bGUsIGZhbHNlKTsKIAogICAgIGlmIChtX3JlZ2lvbkZvclN0eWxpbmcpCiAgICAgICAgIG1hdGNo
UnVsZXMobV9yZWdpb25SdWxlcy5nZXQoKSwgcmVzdWx0LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0
Lmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7CkBAIC04OTIsNiArMTAyOCwxMCBAQCBOb2RlKiBDU1NT
dHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQm
IHZpc2l0ZWROb2RlQwogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFy
ZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNU
WUxFX1NDT1BFRCkKKyAgICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQor
ICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgogICAgIFN0eWxlZEVsZW1lbnQqIHAgPSBzdGF0aWNf
Y2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50KTsKICAgICBpZiAocC0+aW5saW5lU3R5bGVEZWNs
KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA0Miw2ICsxMTgyLDExIEBAIGJvb2wgQ1NTU3R5
bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5vZGUqIG5vZGUpIGNvbnN0CiAg
ICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5z
KGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICBpZiAoZWxlbWVudC0+aGFz
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisK
ICAgICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAK
ICAgICBpZiAoaXNDb250cm9sICE9IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
QEAgLTExMTMsNiArMTI1OCwxMCBAQCBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9j
YXRlU2hhcmVkU3R5bGUoKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAocGFyZW50U3R5bGVQ
cmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiAwOworI2lmIEVO
QUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRN
TFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKIAogICAgIC8vIENoZWNr
IHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0aGVpciBjb3VzaW5zLgogICAgIHVuc2lnbmVkIGNvdW50
ID0gMDsKQEAgLTE0MzIsNyArMTU4MSw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0
eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sCiAKICAg
ICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKICAgICAgICAgbWF0Y2hSdWxlcyht
X3VzZXJTdHlsZS5nZXQoKSwgbWF0Y2hSZXN1bHQuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQu
bGFzdFVzZXJSdWxlLCBmYWxzZSk7Ci0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5n
ZXQoKSwgbWF0Y2hSZXN1bHQuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5sYXN0QXV0aG9y
UnVsZSwgZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKG1hdGNoUmVzdWx0LmZpcnN0
QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKICAgICB9CiAK
ICAgICBpZiAobV9tYXRjaGVkRGVjbHMuaXNFbXB0eSgpKQpAQCAtMTQ2OSw2ICsxNjE4LDcgQEAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKGlu
dCBwYWdlSW5kZXgpCiAgICAgY29uc3QgU3RyaW5nIHBhZ2UgPSBwYWdlTmFtZShwYWdlSW5kZXgp
OwogICAgIG1hdGNoUGFnZVJ1bGVzKGRlZmF1bHRQcmludFN0eWxlLCBpc0xlZnQsIGlzRmlyc3Qs
IHBhZ2UpOwogICAgIG1hdGNoUGFnZVJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCBpc0xlZnQsIGlz
Rmlyc3QsIHBhZ2UpOworICAgIC8vIE9ubHkgY29uc2lkZXIgdGhlIGdsb2JhbCBSdWxlU2V0IGZv
ciBAcGFnZSBydWxlcywgYXMgcGVyIHRoZSBIVE1MNSBzcGVjLgogICAgIG1hdGNoUGFnZVJ1bGVz
KG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgbV9saW5l
SGVpZ2h0VmFsdWUgPSAwOwogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwpAQCAtMTcx
OCw2ICsxODY4LDggQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1JlZ2lvblN0eWxlKEVs
ZW1lbnQqIGUpCiAgICAgZm9yIChWZWN0b3I8UmVmUHRyPFdlYktpdENTU1JlZ2lvblJ1bGU+ID46
Oml0ZXJhdG9yIGl0ID0gbV9yZWdpb25TdHlsZVJ1bGVzLmJlZ2luKCk7IGl0ICE9IG1fcmVnaW9u
U3R5bGVSdWxlcy5lbmQoKTsgKytpdCkgewogICAgICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3Qm
IHJlZ2lvblNlbGVjdG9yTGlzdCA9ICgqaXQpLT5zZWxlY3Rvckxpc3QoKTsKICAgICAgICAgZm9y
IChDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVjdG9yTGlzdC5maXJzdCgpOyBzOyBzID0gcmVn
aW9uU2VsZWN0b3JMaXN0Lm5leHQocykpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0
NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBz
aGVldHMgZm9yIHRoZSBtb21lbnQsCisgICAgICAgICAgICAvLyBzbyBhbGwgcmVnaW9uIHJ1bGVz
IGFyZSBnbG9iYWwgYnkgZGVmYXVsdC4gVmVyaWZ5IHdoZXRoZXIgdGhhdCBjYW4gc3RhbmQgb3Ig
bmVlZHMgY2hhbmdpbicuCiAgICAgICAgICAgICBpZiAobV9jaGVja2VyLmNoZWNrU2VsZWN0b3Io
cywgZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE3Nzcs
NyArMTkyOSw3IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2VsZWN0b3I6OnBz
ZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsCiAgICAgICAgIG1fc2FtZU9yaWdp
bk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CiAKICAgICAg
ICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCi0gICAgICAgIG1hdGNoUnVs
ZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZHVtbXkuZmlyc3RBdXRob3JSdWxlLCBkdW1teS5sYXN0
QXV0aG9yUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICAgICAgbWF0
Y2hBdXRob3JSdWxlcyhkdW1teS5maXJzdEF1dGhvclJ1bGUsIGR1bW15Lmxhc3RBdXRob3JSdWxl
LCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogCiAgICAgICAgIG1fc2FtZU9yaWdp
bk9ubHkgPSBmYWxzZTsKICAgICB9CkBAIC0xOTUwLDggKzIxMDIsMTUgQEAgdm9pZCBSdWxlU2V0
OjphZGRQYWdlUnVsZShDU1NQYWdlUnVsZSogcnVsZSkKICAgICBtX3BhZ2VSdWxlcy5hcHBlbmQo
UnVsZURhdGEocnVsZSwgcnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKSwgbV9wYWdlUnVsZXMu
c2l6ZSgpKSk7CiB9CiAKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQordm9pZCBSdWxlU2V0Ojph
ZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2
YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yLCBjb25zdCBF
bGVtZW50KiBzY29wZSkKK3sKKyNlbHNlCiB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0
KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0s
IENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpCiB7CisgICAgY29uc3QgRWxlbWVudCog
Y29uc3Qgc2NvcGUgPSAwOworI2VuZGlmCisKICAgICBpZiAoIXNoZWV0KQogICAgICAgICByZXR1
cm47CiAKQEAgLTE5NzEsNyArMjEzMCwxMSBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNo
ZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJgogICAg
ICAgICBlbHNlIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewogICAgICAgICAgICAgQ1NTSW1w
b3J0UnVsZSogaW1wb3J0ID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KHJ1bGUpOwogICAg
ICAgICAgICAgaWYgKCFpbXBvcnQtPm1lZGlhKCkgfHwgbWVkaXVtLmV2YWwoaW1wb3J0LT5tZWRp
YSgpLCBzdHlsZVNlbGVjdG9yKSkKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgICAgICAg
ICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydC0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHN0
eWxlU2VsZWN0b3IsIHNjb3BlKTsKKyNlbHNlCiAgICAgICAgICAgICAgICAgYWRkUnVsZXNGcm9t
U2hlZXQoaW1wb3J0LT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgc3R5bGVTZWxlY3Rvcik7CisjZW5k
aWYKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChydWxlLT5pc01lZGlhUnVsZSgpKSB7CiAg
ICAgICAgICAgICBDU1NNZWRpYVJ1bGUqIHIgPSBzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihy
dWxlKTsKQEAgLTE5ODcsMjIgKzIxNTAsMzggQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21T
aGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYKICAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PENTU1BhZ2VSdWxl
Kj4oY2hpbGRJdGVtKSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkSXRlbS0+
aXNGb250RmFjZVJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVz
IG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNl
UnVsZSA9IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGNoaWxkSXRlbSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZh
Y2VSdWxlKGZvbnRGYWNlUnVsZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hp
bGRJdGVtLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtl
eWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRL
ZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGlsZEl0
ZW0pKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gICAvLyBmb3Ig
cnVsZXMKICAgICAgICAgICAgIH0gICAvLyBpZiBydWxlcwogICAgICAgICB9IGVsc2UgaWYgKHJ1
bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAgICAgLy8g
QWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAvLyBGSVhNRShCVUcg
NzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hl
ZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFj
ZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxlKTsKICAgICAgICAgICAg
IHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VS
dWxlKTsKLSAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0tleWZyYW1lc1J1bGUoKSkKKyAgICAg
ICAgfSBlbHNlIGlmIChydWxlLT5pc0tleWZyYW1lc1J1bGUoKSkgeworICAgICAgICAgICAgLy8g
RklYTUUgKEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVk
IHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtl
eWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KHJ1bGUpKTsK
LSAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNSZWdpb25SdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikK
KyAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc1JlZ2lvblJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9y
KSB7CisgICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9uJ3QgYWRkIEAtd2Vi
a2l0LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50Lgor
ICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NS
ZWdpb25SdWxlKj4ocnVsZSkpOworICAgICAgICB9CiAgICAgfQogICAgIGlmIChtX2F1dG9TaHJp
bmtUb0ZpdEVuYWJsZWQpCiAgICAgICAgIHNocmlua1RvRml0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuaAppbmRleCAxOWFmZWUwMDVmZmU1ZTk5NTdmNDQ0MjliMWQxZjFlNGVh
OGM2OTU2Li5kNjdkMWI2ZjViMGEyNTJkMDUyNzZhZjlmZjdmZDJmNDQ5ZTU2YjE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKQEAgLTY2LDYgKzY2LDcgQEAgY2xhc3MgTm9k
ZTsKIGNsYXNzIFJlbmRlclJlZ2lvbjsKIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3MgUnVsZVNldDsK
K2NsYXNzIFNjb3BlZFJ1bGVTZXRzOwogY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBTdHlsZUltYWdl
OwogY2xhc3MgU3R5bGVQZW5kaW5nSW1hZ2U7CkBAIC0xMDEsOSArMTAyLDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZywgYm9vbCBtYXRjaEF1dGhv
ckFuZFVzZXJTdHlsZXMpOwogICAgIH5DU1NTdHlsZVNlbGVjdG9yKCk7CiAKKyNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKQorICAgIHN0YXRpYyBFbGVtZW50KiBkZXRlcm1pbmVTY29waW5nRWxlbWVu
dChjb25zdCBDU1NTdHlsZVNoZWV0Kik7CisjZW5kaWYKKwogICAgIC8vIFVzaW5nIHRoZXNlIGR1
cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBzZWxlY3RvciB0byBvcHRpbWl6ZSBjaGls
ZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBzLgotICAgIHZvaWQgcHVzaFBhcmVudChF
bGVtZW50KiBwYXJlbnQpIHsgbV9jaGVja2VyLnB1c2hQYXJlbnQocGFyZW50KTsgfQotICAgIHZv
aWQgcG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCkgeyBtX2NoZWNrZXIucG9wUGFyZW50KHBhcmVu
dCk7IH0KKyAgICB2b2lkIHB1c2hQYXJlbnQoRWxlbWVudCopOworICAgIHZvaWQgcG9wUGFyZW50
KEVsZW1lbnQqKTsKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVu
dChFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBhbGxvd1NoYXJp
bmcgPSB0cnVlLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNlLCBSZW5kZXJSZWdp
b24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKIApAQCAtMjYzLDEwICsyNjgsMTMgQEAgcHJpdmF0
ZToKICAgICB9OwogICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYpOwogICAgIHZv
aWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0Jik7CisgICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVz
KGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUlu
ZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZv
aWQgbWF0Y2hSdWxlU2V0KGNvbnN0IFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQm
IGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hS
dWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgYm9vbCBm
YXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKICAgICB2b2lkIHNvcnRN
YXRjaGVkUnVsZXMoKTsKKyAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcygpOwog
CiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJik7CiAKQEAgLTI4Myw2ICsy
OTEsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNv
bnN0OwogICAgIFN0cmluZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsKIAorI2lmIEVO
QUJMRShTVFlMRV9TQ09QRUQpCisgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEVsZW1lbnQqLCBP
d25QdHI8UnVsZVNldD4gPiBTY29wZWRSdWxlU2V0TWFwOworCisgICAgUnVsZVNldCogc2NvcGVk
UnVsZVNldEZvckVsZW1lbnQoY29uc3QgRWxlbWVudCogZWxlbWVudCkgeyBTY29wZWRSdWxlU2V0
TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQoZWxlbWVudCk7IHJl
dHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkg
OiAwOyB9CisKKyAgICBTY29wZWRSdWxlU2V0TWFwIG1fc2NvcGVkQXV0aG9yU3R5bGVzOworI2Vu
ZGlmCisKICAgICBPd25QdHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKICAgICBPd25QdHI8UnVs
ZVNldD4gbV91c2VyU3R5bGU7CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fcmVnaW9uUnVsZXM7CkBA
IC00MTMsNyArNDI5LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGU7CiAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ2lvblN0eWxlOwog
ICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0eSYgbV9hcHBseVByb3BlcnR5OwotICAgIAor
CisgICAgLy8gVmVjdG9yICh1c2VkIGFzIHN0YWNrKSB0aGF0IGtlZXBzIHRyYWNrIG9mIHNjb3Bp
bmcgZWxlbWVudHMgKGkuZS4sIGVsZW1lbnRzIHdpdGggYSA8c3R5bGUgc2NvcGVkPiBjaGlsZCkK
KyAgICAvLyBlbmNvdW50ZXJlZCBkdXJpbmcgdHJlZSBpdGVyYXRpb24gZm9yIHN0eWxlIHJlc29s
dXRpb24uCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxjb25zdCBFbGVtZW50KiwgY29uc3QgUnVsZVNl
dCo+ID4gbV9zY29waW5nRWxlbWVudFN0YWNrOworCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQog
ICAgIGJvb2wgbV9oYXNQZW5kaW5nU2hhZGVyczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmNwcAppbmRleCAyYzVjNzMyMDBkMTk3YWZkOTZkMDliZTY5ZTllYWE3ZmE5
OWMxZjllLi5mNTM3N2I5ZGMzYTVjZTI3ZTUwMDI0YjdjOTI5MjA3YTkxN2M3NWViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtMTIzLDQwICsxMjMsMzIgQEAgdm9p
ZCBTZWxlY3RvckNoZWNrZXI6OnBvcFBhcmVudFN0YWNrRnJhbWUoKQogCiB2b2lkIFNlbGVjdG9y
Q2hlY2tlcjo6cHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpCiB7Ci0gICAgaWYgKG1fcGFyZW50
U3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9hbmNlc3RvcklkZW50aWZpZXJG
aWx0ZXIpOwotICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlciA9IGFkb3B0UHRyKG5l
dyBCbG9vbUZpbHRlcjxibG9vbUZpbHRlcktleUJpdHM+KTsKLSAgICAgICAgLy8gSWYgdGhlIGVs
ZW1lbnQgaXMgbm90IHRoZSByb290IGl0c2VsZiwgYnVpbGQgdGhlIHN0YWNrIHN0YXJ0aW5nIGZy
b20gdGhlIHJvb3QuCi0gICAgICAgIGlmIChwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSkgewot
ICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqLCAzMD4gYW5jZXN0b3JzOwotICAgICAgICAgICAg
Zm9yIChFbGVtZW50KiBhbmNlc3RvciA9IHBhcmVudDsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5j
ZXN0b3ItPnBhcmVudE9ySG9zdEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICBhbmNlc3RvcnMu
YXBwZW5kKGFuY2VzdG9yKTsKLSAgICAgICAgICAgIGludCBjb3VudCA9IGFuY2VzdG9ycy5zaXpl
KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBuID0gY291bnQgLSAxOyBuID49IDA7IC0tbikKLSAg
ICAgICAgICAgICAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShhbmNlc3RvcnNbbl0pOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghcGFyZW50LT5wYXJlbnRP
ckhvc3RFbGVtZW50KCkpIHsKLSAgICAgICAgLy8gV2UgYXJlIG5vdCBhbHdheXMgaW52b2tlZCBj
b25zaXN0ZW50bHkuIEZvciBleGFtcGxlLCBzY3JpcHQgZXhlY3V0aW9uIGNhbiBjYXVzZSB1cyB0
byBlbnRlcgotICAgICAgICAvLyBzdHlsZSByZWNhbGMgaW4gdGhlIG1pZGRsZSBvZiB0cmVlIGJ1
aWxkaW5nLiBSZXNldCB0aGUgc3RhY2sgaWYgd2Ugc2VlIGEgbmV3IHJvb3QgZWxlbWVudC4KLSAg
ICAgICAgQVNTRVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKLSAgICAgICAgbV9hbmNl
c3RvcklkZW50aWZpZXJGaWx0ZXItPmNsZWFyKCk7Ci0gICAgICAgIG1fcGFyZW50U3RhY2sucmVz
aXplKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmll
ckZpbHRlcik7Ci0gICAgICAgIC8vIFdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSByYW5kb20g
ZWxlbWVudHMgaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4KLSAgICAg
ICAgLy8gUGF1c2UgbWFpbnRhaW5pbmcgdGhlIHN0YWNrIGluIHRoaXMgY2FzZS4KLSAgICAgICAg
aWYgKG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgIT0gcGFyZW50LT5wYXJlbnRPckhvc3RF
bGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVChtX2FuY2Vz
dG9ySWRlbnRpZmllckZpbHRlcik7CisgICAgLy8gV2UgbWF5IGdldCBpbnZva2VkIGZvciBzb21l
IHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZl
LgorICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCisgICAg
aWYgKG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgIT0gcGFyZW50LT5wYXJlbnRPckhvc3RF
bGVtZW50KCkpCisgICAgICAgIHJldHVybjsKICAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShwYXJl
bnQpOwogfQogCi12b2lkIFNlbGVjdG9yQ2hlY2tlcjo6cG9wUGFyZW50KEVsZW1lbnQqIHBhcmVu
dCkKK3ZvaWQgU2VsZWN0b3JDaGVja2VyOjpzZXR1cFBhcmVudFN0YWNrKEVsZW1lbnQqIHBhcmVu
dCkKIHsKLSAgICBpZiAobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgfHwgbV9wYXJlbnRTdGFjay5s
YXN0KCkuZWxlbWVudCAhPSBwYXJlbnQpCisgICAgQVNTRVJUKG1fcGFyZW50U3RhY2suaXNFbXB0
eSgpID09ICFtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7CisgICAgLy8gS2lsbCB3aGF0ZXZl
ciB3ZSBzdG9yZWQgYmVmb3JlLgorICAgIG1fcGFyZW50U3RhY2sucmVzaXplKDApOworICAgIG1f
YW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyID0gYWRvcHRQdHIobmV3IEJsb29tRmlsdGVyPGJsb29t
RmlsdGVyS2V5Qml0cz4pOworICAgIC8vIEZhc3QgdmVyc2lvbiBpZiBwYXJlbnQgaXMgYSByb290
IGVsZW1lbnQ6CisgICAgaWYgKCFwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSkgeworICAgICAg
ICBwdXNoUGFyZW50U3RhY2tGcmFtZShwYXJlbnQpOwogICAgICAgICByZXR1cm47Ci0gICAgcG9w
UGFyZW50U3RhY2tGcmFtZSgpOworICAgIH0KKyAgICAvLyBPdGhlcndpc2UgY2xpbWIgdXAgdGhl
IHRyZWUuCisgICAgVmVjdG9yPEVsZW1lbnQqLCAzMD4gYW5jZXN0b3JzOworICAgIGZvciAoRWxl
bWVudCogYW5jZXN0b3IgPSBwYXJlbnQ7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5w
YXJlbnRPckhvc3RFbGVtZW50KCkpCisgICAgICAgIGFuY2VzdG9ycy5hcHBlbmQoYW5jZXN0b3Ip
OworICAgIGludCBjb3VudCA9IGFuY2VzdG9ycy5zaXplKCk7CisgICAgZm9yIChpbnQgbiA9IGNv
dW50IC0gMTsgbiA+PSAwOyAtLW4pCisgICAgICAgIHB1c2hQYXJlbnRTdGFja0ZyYW1lKGFuY2Vz
dG9yc1tuXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0RGVzY2VuZGFudFNlbGVj
dG9ySWRlbnRpZmllckhhc2hlcyhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIHVuc2lnbmVk
KiYgaGFzaCwgY29uc3QgdW5zaWduZWQqIGVuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuaAppbmRleCA3NjBiYTUyMDdiZTU3NGM1ZGZlOGE5YTA0Yjk3MDBlNGQwY2RmMjhkLi42Zjgx
N2NjMjIxZjIxZDY3ZWRjYTYwZjNiNWEzMTU2OGZhZDc5ZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5oCkBAIC02MCw5ICs2MCwxMSBAQCBwdWJsaWM6CiAgICAgaW5saW5lIGJv
b2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IHVuc2lnbmVkKiBpZGVudGlmaWVySGFzaGVzKSBj
b25zdDsKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0SWRlbnRpZmllckhhc2hlcyhjb25zdCBDU1NT
ZWxlY3RvciosIHVuc2lnbmVkKiBpZGVudGlmaWVySGFzaGVzLCB1bnNpZ25lZCBtYXhpbXVtSWRl
bnRpZmllckNvdW50KTsKIAorICAgIHZvaWQgc2V0dXBQYXJlbnRTdGFjayhFbGVtZW50KiBwYXJl
bnQpOwogICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpOwotICAgIHZvaWQgcG9w
UGFyZW50KEVsZW1lbnQqIHBhcmVudCk7Ci0gICAgYm9vbCBwYXJlbnRTdGFja0lzQ29uc2lzdGVu
dChDb250YWluZXJOb2RlKiBwYXJlbnROb2RlKSBjb25zdCB7IHJldHVybiAhbV9wYXJlbnRTdGFj
ay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCA9PSBwYXJlbnROb2Rl
OyB9CisgICAgdm9pZCBwb3BQYXJlbnQoKSB7IHBvcFBhcmVudFN0YWNrRnJhbWUoKTsgfQorICAg
IGJvb2wgcGFyZW50U3RhY2tJc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdGFjay5p
c0VtcHR5KCk7IH0KKyAgICBib29sIHBhcmVudFN0YWNrSXNDb25zaXN0ZW50KGNvbnN0IENvbnRh
aW5lck5vZGUqIHBhcmVudE5vZGUpIGNvbnN0IHsgcmV0dXJuICFtX3BhcmVudFN0YWNrLmlzRW1w
dHkoKSAmJiBtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ID09IHBhcmVudE5vZGU7IH0KIAog
ICAgIEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZShFbGVtZW50KikgY29uc3Q7CiAgICAg
dm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjZjYTM4NDFjZDE4NjIwZTM2
MzQ0MTg2ODJiMjM3N2E0YzIyM2ZjNS4uODZkNzcyY2I2YTRmZjhmNTk2NDRhZDM3MTkyYWUwZGIy
ZGRhNWZlZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTEyLTA3ICBSb2xhbmQgU3RlaW5l
ciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIDxzdHlsZSBzY29wZWQ+
OiBJbXBsZW1lbnQgc2NvcGVkIHN0eWxlc2hlZXRzIGFuZCBiYXNpYyBhcHBsaWNhdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxOTAKKworICAg
ICAgICBUZXN0IHRoYXQgPHN0eWxlIHNjb3BlZD4gYWZmZWN0cyBzdHlsZXMgYW5kIGlzIHVwZGF0
ZWQgY29ycmVjdGx5OgorICAgICAgICAtKSBiYXNpYyB0ZXN0CisgICAgICAgIC0pIHRlc3Qgc2V0
dGluZy91bi1zZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUKKyAgICAgICAgLSkgdGVzdCBp
bnNlcnRpbmcvcmVtb3ZpbmcgYSB3aG9sZSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Nzcy9zdHls
ZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUt
c2NvcGVkLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0
eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5o
dG1sOiBBZGRlZC4KKwogMjAxMS0xMS0xNiAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVy
QGNocm9taXVtLm9yZz4KIAogICAgICAgICA8c3R5bGUgc2NvcGVkPjogSW1wbGVtZW50IHJlZ2lz
dGVyaW5nIG9mIDxzdHlsZSBzY29wZWQ+IHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRh
Y2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmZTA2NzFmYWM2ZTE2ZTMz
YTQyYzQyOWFmZWZlZGQxYTM1YWY4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwyNyBAQAorVGVzdCBhdHRhY2hpbmcgYSBuZXcgPHN0eWxlIHNjb3BlZD4gZWxlbWVu
dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0gT1JJR0lO
QUwgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDAsIDAs
IDApCitQMjogcmdiKDAsIDAsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDAp
CistLS0gQUZURVIgQVRUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLQorUzE6IHJnYigwLCAwLCAw
KQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwg
MCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0K
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNj
b3BlZC1hdHRhY2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHls
ZS1zY29wZWQtYXR0YWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjAzZGY1NWRlNDliZjZjZmUxZjhjNmFk
NDBiMGU2NTBjZjhhZTZlNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwKQEAgLTAsMCArMSw3MCBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1
bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5
VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEFsbCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQ
MScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7Cisg
ICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOworCisgICAg
ICAgICAgICBsb2coJy0tLSBBRlRFUiBBVFRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tJyk7Cisg
ICAgICAgICAgICB2YXIgZGl2RWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdESVYnKTsK
KyAgICAgICAgICAgIHZhciBzdHlsZUVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHls
ZScpOworICAgICAgICAgICAgc3R5bGVFbGVtLnNldEF0dHJpYnV0ZSgnc2NvcGVkJywgdHJ1ZSk7
CisgICAgICAgICAgICBzdHlsZUVsZW0uaW5uZXJIVE1MID0gJ2RpdiB7IGNvbG9yOiByZWQ7IH0g
cCB7IGNvbG9yOiBncmVlbjsgfSc7CisgICAgICAgICAgICBkaXZFbGVtLmluc2VydEJlZm9yZShz
dHlsZUVsZW0sIGRpdkVsZW0uZmlyc3RDaGlsZCk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAgICAgICBs
b2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAgIDwvc2Ny
aXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBib2R5IHsg
Y29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVu
VGVzdHMoKTsiPgorICAgIDxwPlRlc3QgYXR0YWNoaW5nIGEgbmV3ICZsdDtzdHlsZSBzY29wZWQm
Z3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9z
cGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdiBp
ZD0iRElWIj4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBp
ZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9
IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+
CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2lj
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5MTJmZGMwZjgzZWMxNDkzYTQy
YzI1OWIzZjE4MmJiMGY1NmM3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDQyIEBACitUZXN0IDxzdHlsZSBzY29wZWQ+CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4
dAorVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKK1RleHQKK1Rl
eHQKKworVGV4dAorVGV4dAorLS0tIENPTVBVVEVEIFNUWUxFUyAtLS0KK1MxOiByZ2IoMCwgMCwg
MCkKK1AxOiByZ2IoMCwgMCwgMCkKK1IxOiByZ2IoMCwgMCwgMCkKK0UxOiByZ2IoMCwgMCwgMCkK
KworUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1IyOiByZ2IoMCwgMCwg
MjU1KQorCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCitSMzogcmdiKDAsIDAs
IDApCitFMzogcmdiKDAsIDAsIDApCisKK1M0OiByZ2IoMCwgMCwgMCkKK1A0OiByZ2IoMCwgMCwg
MCkKK1I0OiByZ2IoMCwgMCwgMCkKK0U0OiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0K
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNj
b3BlZC1iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1iYXNpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlNWI0MzFhOTE2YTM5YzY5ZmJkZjg2Njg2
NGFlOGRmZjNkNjhjZWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVu
dC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFs
dWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAg
ICAgICAgICAgbG9nKCctLS0gQ09NUFVURUQgU1RZTEVTIC0tLScpOworCisgICAgICAgICAgICB0
ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1Ix
Jyk7CisgICAgICAgICAgICB0ZXN0KCdFMScpOworICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAg
ICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAg
dGVzdCgnUjInKTsKKyAgICAgICAgICAgIGxvZygnJyk7CisgICAgICAgICAgICB0ZXN0KCdTMycp
OworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1IzJyk7CisgICAg
ICAgICAgICB0ZXN0KCdFMycpOworICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAgICAgICAgIHRl
c3QoJ1M0Jyk7CisgICAgICAgICAgICB0ZXN0KCdQNCcpOworICAgICAgICAgICAgdGVzdCgnUjQn
KTsKKyAgICAgICAgICAgIHRlc3QoJ0U0Jyk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEZJTklT
SEVEIC0tLScpOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRl
eHQvY3NzIj4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0ICZsdDtzdHls
ZSBzY29wZWQmZ3Q7PC9wPgorICAgIDxkaXYgY2xhc3M9ImZvbyI+CisgICAgICAgIDxzcGFuIGlk
PSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgICAgICA8
cHJlIGlkID0gIlIxIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgIDxwcmUgaWQ9IkUx
IiBjbGFzcz0iYmF6Ij5UZXh0PC9wcmU+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAg
PGRpdj4KKyAgICAgICAgICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAg
ICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgICAgICBwIHsgY29sb3I6
IGdyZWVuOyB9CisgICAgICAgICAgICAgICAgZGl2IC5iYXIgeyBjb2xvcjogYmx1ZTsgfQorICAg
ICAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4K
KyAgICAgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICAgICAgICAgIDxwcmUgaWQ9IlIy
IiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8c3BhbiBp
ZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICAgICAg
PHByZSBpZCA9ICJSMyIgY2xhc3M9ImJhciI+VGV4dDwvcHJlPgorICAgICAgICA8cHJlIGlkPSJF
MyIgY2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImZv
byI+CisgICAgICAgIDxzcGFuIGlkPSJTNCI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlA0
Ij5UZXh0PC9wPgorICAgICAgICA8cHJlIGlkID0gIlI0IiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+
CisgICAgICAgIDxwcmUgaWQ9IkU0IiBjbGFzcz0iYmF6Ij5UZXh0PC9wcmU+CisgICAgPC9kaXY+
CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFj
aC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUt
c2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDdlZjY1MzE3NDA3MmI3ODg3
ZjdkZjNkYWJmOTFhOWE3MzQwZTNlOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDI3IEBACitUZXN0IGRldGFjaGluZyBhIDxzdHlsZSBzY29wZWQ+IGVsZW1lbnQKKwor
VGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0t
LQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDAp
CitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkK
Ky0tLSBBRlRFUiBERVRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tCitTMTogcmdiKDAsIDAsIDAp
CitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDAsIDAsIDApCitQMjogcmdiKDAsIDAsIDApCitT
MzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQt
ZGV0YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLWRldGFjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjOGJmNmE4NjYxMjcwZjg2MWNiODU1OGFjMzI3
YTE4NzcxZjM5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHls
ZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC5odG1sCkBAIC0wLDAgKzEsNzIgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQu
ZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVl
KCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQorICAg
ICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsK
KyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAg
ICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2co
Jy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAgICAg
ICAgbG9nKCctLS0gQUZURVIgREVUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLScpOworICAgICAg
ICAgICAgdmFyIGRpdkVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRElWJyk7CisgICAg
ICAgICAgICB2YXIgc3R5bGVFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxFJyk7
CisgICAgICAgICAgICBkaXZFbGVtLnJlbW92ZUNoaWxkKHN0eWxlRWxlbSk7CisgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAg
ICAgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAg
ICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgor
ICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxi
b2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgZGV0YWNoaW5nIGEgJmx0O3N0
eWxlIHNjb3BlZCZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0i
UzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4K
KyAgICA8ZGl2IGlkPSJESVYiPgorICAgICAgICA8c3R5bGUgaWQ9IlNUWUxFIiB0eXBlPSJ0ZXh0
L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAg
ICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c3BhbiBp
ZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rp
dj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAg
IDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48
L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29w
ZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMjA1ODdkZjVhZmZmNjJkYzI3ZjYyYWFlYzQ1
MGIzMzc2NWNhYzgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHls
ZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMjcgQEAKK1Rlc3QgcmVtb3ZpbmcgdGhlICdzY29wZWQnIGF0dHJpYnV0ZSBvbiBhIDxzdHls
ZT4gZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCist
LS0gT1JJR0lOQUwgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjog
cmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6
IHJnYigwLCAwLCAwKQorLS0tIEFGVEVSIFVOLVNFVFRJTkcgQFNDT1BFRCAtLS0KK1MxOiByZ2Io
MjU1LCAwLCAwKQorUDE6IHJnYigwLCAxMjgsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiBy
Z2IoMCwgMTI4LCAwKQorUzM6IHJnYigyNTUsIDAsIDApCitQMzogcmdiKDAsIDEyOCwgMCkKKy0t
LSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lYWFmMzc3NGNhYjJmYTc0ZmQ3MGM2MTFhZTAzMmJhMTE4NDNkN2VkCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1y
ZW1vdmUtc2NvcGVkLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAg
ZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSht
c2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlk
KTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRD
b21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEFsbCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVz
dCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdTMycp
OworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZygnLS0tIE9SSUdJTkFMIC0t
LScpOworICAgICAgICAgICAgdGVzdEFsbCgpOworCisgICAgICAgICAgICBsb2coJy0tLSBBRlRF
UiBVTi1TRVRUSU5HIEBTQ09QRUQgLS0tJyk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnU1RZTEUnKS5yZW1vdmVBdHRyaWJ1dGUoJ3Njb3BlZCcpOworICAgICAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAg
ICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAg
IH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAg
ICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0IHJlbW92aW5nIHRoZSAnc2NvcGVk
JyBhdHRyaWJ1dGUgb24gYSAmbHQ7c3R5bGUmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAg
ICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8
L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlw
ZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAg
ICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAg
PHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+Cisg
ICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgor
ICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29u
c29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2Nv
cGVkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTBjNzk2M2M5N2M0NzgwMWUwODQ5Njc1MTEz
NzIyMmM0NjY1ZDFjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDI3IEBACitUZXN0IHNldHRpbmcgdGhlICdzY29wZWQnIGF0dHJpYnV0ZSBvbiBhIDxzdHlsZT4g
ZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0g
T1JJR0lOQUwgLS0tCitTMTogcmdiKDI1NSwgMCwgMCkKK1AxOiByZ2IoMCwgMTI4LCAwKQorUzI6
IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMjU1LCAwLCAwKQor
UDM6IHJnYigwLCAxMjgsIDApCistLS0gQUZURVIgU0VUVElORyBAU0NPUEVEIC0tLQorUzE6IHJn
YigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdi
KDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5J
U0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHls
ZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTAzYmQ0
MWUyOTlkMDM1MDFjZWYxMDU0MGZlMTk1MDBjNGU4MmVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0
bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1z
ZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNv
bGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAg
ICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAg
IGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVs
ZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gdGVzdEFsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7
CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAg
ICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAg
dGVzdCgnUDMnKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewor
ICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAgICAgICAg
ICAgdGVzdEFsbCgpOworCisgICAgICAgICAgICBsb2coJy0tLSBBRlRFUiBTRVRUSU5HIEBTQ09Q
RUQgLS0tJyk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU1RZTEUnKS5z
ZXRBdHRyaWJ1dGUoJ3Njb3BlZCcsIHRydWUpOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAgICAgbG9n
KCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8L3Njcmlw
dD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNv
bG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRl
c3RzKCk7Ij4KKyAgICA8cD5UZXN0IHNldHRpbmcgdGhlICdzY29wZWQnIGF0dHJpYnV0ZSBvbiBh
ICZsdDtzdHlsZSZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0i
UzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4K
KyAgICA8ZGl2PgorICAgICAgICA8c3R5bGUgaWQ9IlNUWUxFIiB0eXBlPSJ0ZXh0L2NzcyI+Cisg
ICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAgICAgICBwIHsgY29sb3I6IGdy
ZWVuOyB9CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bh
bj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+Cisg
ICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0
PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124058</attachid>
            <date>2012-01-25 20:49:22 -0800</date>
            <delta_ts>2012-01-26 01:37:22 -0800</delta_ts>
            <desc>patch, updated, deconflicted</desc>
            <filename>bug-73190-20120126134920.patch</filename>
            <type>text/plain</type>
            <size>46855</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1ODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWY0ZTQyMTMxNjViOGJh
OGI3NWU4YWNiYjQxYTgyNzVkZTg4NjgwZC4uZjY2NmQ1NzRhMGM5MDZjZDIzMDE0OGNlNzY2NDY2
NTAwOWNkNmYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTAxLTI2ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIDxzdHls
ZSBzY29wZWQ+OiBJbXBsZW1lbnQgc2NvcGVkIHN0eWxlc2hlZXRzIGFuZCBiYXNpYyBhcHBsaWNh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMx
OTAKKworICAgICAgICBJbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgPHN0eWxlIHNjb3BlZD46Cisg
ICAgICAgIFN0b3JlIHNjb3BlZCBzdHlsZSBzaGVldHMgaW4gYSBzZXBhcmF0ZSBkYXRhIHN0cnVj
dHVyZSBTY29wZWRSdWxlU2V0cy4KKyAgICAgICAgQWRkIGEgdmVjdG9yIHN0YWNrIHRvIENTU1N0
eWxlU2VsZWN0b3IgdGhhdCBrZWVwcyB0cmFjayBvZiBlbmNvdW50ZXJlZCBzY29waW5nIGVsZW1l
bnRzLiBUaGlzIGlzCisgICAgICAgIHVzZWQgZm9yIE8oMSkgYWNjZXNzIHRvIGFsbCByZWxldmFu
dCBzdHlsZSBzaGVldHMgZm9yIGEgZ2l2ZW4gZWxlbWVudC4KKyAgICAgICAgRmluYWxseSwgcHJl
dmVudCBzdHlsZSBzaGFyaW5nIGZyb20gY3Jvc3NpbmcgaW50by9vdXQgb2Ygc2NvcGVkIHN0eWxl
IGJvdW5kYXJpZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdHM6IGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFz
aWMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1kZXRhY2guaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHA6IGFkZCBzdXBwb3J0IGZvciBzY29wZWQgYXV0aG9yIHNoZWV0cwor
ICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OlNjb3BlZFJ1bGVTZXRzKTogY2xhc3Mg
Zm9yIHNjb3BlZCBhdXRob3Igc2hlZXRzCisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0
czo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2Vs
ZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU2Nv
cGluZ0VsZW1lbnQpOiBkZXRlcm1pbmUgd2hldGhlciBhbiBhdXRob3Igc2hlZXQgaXMgc2NvcGVk
IChhbmQgdG8gd2hpY2ggc2NvcGUpLCBvciBnbG9iYWwKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OnB1c2hQYXJlbnQpOiB0YWtlIG92ZXIgc29tZSBvZiB0aGUgbG9naWMgb2Yg
U2VsZWN0b3JDaGVja2VyOjpwdXNoUGFyZW50LCBpbiBvcmRlciB0byBtYWludGFpbiBtX3Njb3Bp
bmdQYXJlbnRTdGFjaworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFy
ZW50KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyk6IGhlbHBlciBmdW5jdGlvbgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6IGNoYW5nZWQgY2FsbCB0byBtYXRjaEF1
dGhvclJ1bGVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhv
clJ1bGVzKTogbWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcworICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyk6IGFkZCAnc2NvcGUnIHBhcmFtZXRlcgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlU2V0KTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KTogZGl0dG8K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QpOiBw
cmV2ZW50IHN0eWxlIHNoYXJpbmcgYWNyb3NzIHNjb3BlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6IGRpdHRv
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGFyZWRTdHlsZSk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZv
ckVsZW1lbnQpOiBjaGFuZ2VkIGNhbGwgdG8gbWF0Y2hBdXRob3JSdWxlcworICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKTogY29tbWVudAorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tSZWdpb25TdHlsZSk6IGFkZCBnbG9iYWwg
c2NvcGUgcGFyYW1ldGVyCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6IGNoYW5nZWQgY2FsbCB0byBtYXRjaEF1dGhvclJ1bGVz
CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCk6IGFkZCBjb21t
ZW50cyBmb3IgQGZvbnQtZmFjZSBhbmQgQGtleWZyYW1lcworICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzY29wZWRS
dWxlU2V0Rm9yRWxlbWVudCk6IGhlbHBlciBmdW5jdGlvbiwgbWF5IHJldHVybiBOVUxMIAorICAg
ICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDaGVja2VyOjpwdXNoUGFyZW50KTogc2ltcGxpZnkKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ2hlY2tlcjo6c2V0dXBQYXJlbnRTdGFjayk6IHJlZmFjdG9yaW5nIG9mIHByZXZpb3VzIHB1
c2hQYXJlbnQKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6OnBvcFBhcmVudCk6IHNpbXBsaWZ5CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6OnBhcmVudFN0YWNrSXNFbXB0eSk6IGFkZGl0aW9uYWwgaGVs
cGVyIGZ1bmN0aW9uCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnBhcmVudFN0
YWNrSXNDb25zaXN0ZW50KTogbWFrZSBwYXJhbWV0ZXIgY29uc3QKKwogMjAxMi0wMS0yNSAgUm9s
YW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8c3R5
bGUgc2NvcGVkPjogSW1wbGVtZW50IHJlZ2lzdGVyaW5nIG9mIDxzdHlsZSBzY29wZWQ+IHdpdGgg
dGhlIHNjb3BpbmcgZWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CmluZGV4IDhkNDRjYTYyMTFlN2VkODNjYWZlNTM1OWQxMzM3NmQxNGMwZWZjMjMuLjI2YWY2MTVj
NTg4OGNmNzM4ZmJiYzg3OWRiODU2MmNmMDdlZDYxMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFByb2dyZXNz
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
VGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgi
CiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCkBAIC0yMjIsNyArMjIzLDExIEBAIHB1YmxpYzoK
IAogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgT3duUHRyPFZlY3RvcjxS
dWxlRGF0YT4gPiA+IEF0b21SdWxlTWFwOwogCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAg
ICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBNZWRpYVF1ZXJ5
RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwLCBjb25zdCBFbGVtZW50KiA9IDApOwor
I2Vsc2UKICAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwKTsKKyNlbmRpZgogCiAg
ICAgdm9pZCBhZGRTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxlKik7CiAgICAgdm9pZCBhZGRSdWxlKENT
U1N0eWxlUnVsZSosIENTU1NlbGVjdG9yKik7CkBAIC0zNjgsNiArMzczLDggQEAgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRM
aXN0KiBzdHlsZVNoZWUKIAogICAgIG1fYXV0aG9yU3R5bGUgPSBhZG9wdFB0cihuZXcgUnVsZVNl
dCk7CiAgICAgLy8gQWRkaW5nIHJ1bGVzIGZyb20gbXVsdGlwbGUgc2hlZXRzLCBzaHJpbmsgYXQg
dGhlIGVuZC4KKyAgICAvLyBBZGRpbmcgZ2xvYmFsIHJ1bGVzIGZyb20gbXVsdGlwbGUgc2hlZXRz
LCBzaHJpbmsgYXQgdGhlIGVuZC4KKyAgICAvLyBOb3RlIHRoYXQgdGhlcmUgdXN1YWxseSBpcyBv
bmx5IDEgc2hlZXQgZm9yIHNjb3BlZCBydWxlcywgc28gYXV0by1zaHJpbmstdG8tZml0IGlzIGZp
bmUuCiAgICAgbV9hdXRob3JTdHlsZS0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgc3Vja3MhIFRoZSB1c2VyIHNoZWV0IGlzIHJlcGFyc2VkIGV2ZXJ5IHRp
bWUhCkBAIC0zOTcsOCArNDA0LDEwIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0
b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAgICAg
IG1fdXNlclN0eWxlID0gdGVtcFVzZXJTdHlsZS5yZWxlYXNlKCk7CiAKICAgICAvLyBBZGQgcnVs
ZXMgZnJvbSBlbGVtZW50cyBsaWtlIFNWRydzIDxmb250LWZhY2U+Ci0gICAgaWYgKG1hcHBlZEVs
ZW1lbnRTaGVldCkKKyAgICBpZiAobWFwcGVkRWxlbWVudFNoZWV0KSB7CisgICAgICAgIC8vIEZJ
WE1FOiBzZWUgaWYgc3R5bGUgc2NvcGVzIGNhbi9zaG91bGQgYmUgYWRkZWQgaGVyZS4KICAgICAg
ICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWFwcGVkRWxlbWVudFNoZWV0LCAq
bV9tZWRpdW0sIHRoaXMpOworICAgIH0KIAogICAgIC8vIGFkZCBzdHlsZXNoZWV0cyBmcm9tIGRv
Y3VtZW50CiAgICAgYXBwZW5kQXV0aG9yU3R5bGVzaGVldHMoMCwgc3R5bGVTaGVldHMtPnZlY3Rv
cigpKTsKQEAgLTQyMyw2ICs0MzIsMTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0
RmVhdHVyZXMoKQogICAgIC8vIHNoYXJpbmcgY2FuZGlkYXRlcy4KICAgICBtX2ZlYXR1cmVzLmFk
ZChkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkpOwogICAgIG1fZmVhdHVyZXMuYWRkKG1fYXV0aG9y
U3R5bGUtPmZlYXR1cmVzKCkpOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgZm9yIChT
Y29wZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmJlZ2lu
KCk7IGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQorICAgICAgICBtX2Zl
YXR1cmVzLmFkZChpdC0+c2Vjb25kLT5mZWF0dXJlcygpKTsKKyNlbmRpZgogICAgIGlmIChtX3Vz
ZXJTdHlsZSkKICAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkp
OwogCkBAIC00MzAsNiArNDQzLDIzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdEZl
YXR1cmVzKCkKICAgICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1f
ZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7CiB9CiAKKyNpZiBFTkFCTEUoU1RZTEVf
U0NPUEVEKQorRWxlbWVudCogQ1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU2NvcGluZ0VsZW1l
bnQoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQpCit7CisgICAgQVNTRVJUKHNoZWV0KTsKKwor
ICAgIE5vZGUqIG93bmVyTm9kZSA9IHNoZWV0LT5maW5kU3R5bGVTaGVldE93bmVyTm9kZSgpOwor
ICAgIGlmICghb3duZXJOb2RlIHx8ICFvd25lck5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAhb3du
ZXJOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIEhUTUxTdHlsZUVsZW1lbnQqIHN0eWxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxTdHlsZUVsZW1lbnQqPihvd25lck5vZGUpOworICAgIGlmICghc3R5bGVFbGVtZW50LT5zY29w
ZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5wYXJl
bnRFbGVtZW50KCk7Cit9CisjZW5kaWYKKwogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBlbmRB
dXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxT
dHlsZVNoZWV0PiA+JiBzdHlsZXNoZWV0cykKIHsKICAgICAvLyBUaGlzIGhhbmRsZXMgc2hlZXRz
IGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHN0eWxlc2hlZXQgbGlzdCBvbmx5LiBJbiBvdGhlciBj
YXNlcyB0aGUgc3R5bGUgcmVzb2x2ZXIKQEAgLTQzOCw3ICs0NjgsMTggQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29u
c3QgVmVjdG9yPFIKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdE5ldzsgaSA8IHNpemU7ICsr
aSkgewogICAgICAgICBpZiAoIXN0eWxlc2hlZXRzW2ldLT5pc0NTU1N0eWxlU2hlZXQoKSB8fCBz
dHlsZXNoZWV0c1tpXS0+ZGlzYWJsZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0Kj4oc3R5bGVzaGVldHNbaV0uZ2V0KCkpLCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAgICBD
U1NTdHlsZVNoZWV0KiBjc3NTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHls
ZXNoZWV0c1tpXS5nZXQoKSk7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAgICAgY29u
c3QgRWxlbWVudCogc2NvcGUgPSBkZXRlcm1pbmVTY29waW5nRWxlbWVudChjc3NTaGVldCk7Cisg
ICAgICAgIGlmIChzY29wZSkgeworICAgICAgICAgICAgcGFpcjxTY29wZWRSdWxlU2V0TWFwOjpp
dGVyYXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYWRkKHNjb3Bl
LCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuc2Vjb25kKQorICAgICAgICAg
ICAgICAgIGFkZFJlc3VsdC5maXJzdC0+c2Vjb25kID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQoKSk7
CisgICAgICAgICAgICBhZGRSZXN1bHQuZmlyc3QtPnNlY29uZC0+YWRkUnVsZXNGcm9tU2hlZXQo
Y3NzU2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICB9CiAgICAgbV9hdXRob3JTdHls
ZS0+c2hyaW5rVG9GaXQoKTsKICAgICBjb2xsZWN0RmVhdHVyZXMoKTsKQEAgLTQ0Nyw2ICs0ODgs
NTEgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNp
Z25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFIKICAgICAgICAgZG9jdW1lbnQoKS0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CiB9CiAKK3ZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6cHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpCit7CisgICAgLy8g
V2UgYXJlIG5vdCBhbHdheXMgaW52b2tlZCBjb25zaXN0ZW50bHkuIEZvciBleGFtcGxlLCBzY3Jp
cHQgZXhlY3V0aW9uIGNhbiBjYXVzZSB1cyB0byBlbnRlcgorICAgIC8vIHN0eWxlIHJlY2FsYyBp
biB0aGUgbWlkZGxlIG9mIHRyZWUgYnVpbGRpbmcuIFdlIG1heSBhbHNvIGJlIGludm9rZWQgZnJv
bSBzb21ld2hlcmUgd2l0aGluIHRoZSB0cmVlLgorICAgIC8vIFJlc2V0IHRoZSBzdGFjayBpbiB0
aGlzIGNhc2UsIG9yIGlmIHdlIHNlZSBhIG5ldyByb290IGVsZW1lbnQuCisgICAgaWYgKCFwYXJl
bnQtPnBhcmVudE9ySG9zdEVsZW1lbnQoKSB8fCBtX2NoZWNrZXIucGFyZW50U3RhY2tJc0VtcHR5
KCkpIHsKKyAgICAgICAgbV9jaGVja2VyLnNldHVwUGFyZW50U3RhY2socGFyZW50KTsKKyNpZiBF
TkFCTEUoU1RZTEVfU0NPUEVEKQorICAgICAgICBtX3Njb3BpbmdFbGVtZW50U3RhY2sucmVzaXpl
KDApOworICAgICAgICBmb3IgKDsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9ySG9z
dEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+aGFzU2NvcGVkSFRNTFN0eWxl
Q2hpbGQoKSkgeworICAgICAgICAgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBzY29wZWRSdWxl
U2V0Rm9yRWxlbWVudChwYXJlbnQpOworICAgICAgICAgICAgICAgIGlmIChydWxlU2V0KQorICAg
ICAgICAgICAgICAgICAgICBtX3Njb3BpbmdFbGVtZW50U3RhY2suYXBwZW5kKHN0ZDo6cGFpcjxj
b25zdCBFbGVtZW50KiwgUnVsZVNldCo+KHBhcmVudCwgcnVsZVNldCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIG1fc2NvcGluZ0VsZW1lbnRTdGFjay5yZXZlcnNlKCk7Cisj
ZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBPdGhlcndpc2UsIGp1c3QgcHVz
aCB0aGUgbmV3IHBhcmVudC4gSG93ZXZlciwgbm90ZSB0aGF0IHdlIG1heSBnZXQgaW52b2tlZCBm
b3Igc29tZSByYW5kb20gZWxlbWVudHMKKyAgICAvLyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmlu
ZyBzdHlsZSByZXNvbHZlLiBQYXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNl
LgorICAgIG1fY2hlY2tlci5wdXNoUGFyZW50KHBhcmVudCk7CisjaWYgRU5BQkxFKFNUWUxFX1ND
T1BFRCkKKyAgICBpZiAobV9jaGVja2VyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHBhcmVudCkg
JiYgcGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKSB7CisgICAgICAgIFJ1bGVTZXQq
IHJ1bGVTZXQgPSBzY29wZWRSdWxlU2V0Rm9yRWxlbWVudChwYXJlbnQpOworICAgICAgICBpZiAo
cnVsZVNldCkKKyAgICAgICAgICAgIG1fc2NvcGluZ0VsZW1lbnRTdGFjay5hcHBlbmQoc3RkOjpw
YWlyPGNvbnN0IEVsZW1lbnQqLCBSdWxlU2V0Kj4ocGFyZW50LCBydWxlU2V0KSk7CisgICAgfQor
I2VuZGlmCit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFyZW50KEVsZW1lbnQqIHBh
cmVudCkKK3sKKyAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGdldCBpbnZva2VkIGZvciBzb21lIHJh
bmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlLgor
ICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCisgICAgaWYg
KG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJlbnQpKSB7CisgICAgICAgIG1f
Y2hlY2tlci5wb3BQYXJlbnQoKTsKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgICAgICBp
ZiAoIW1fc2NvcGluZ0VsZW1lbnRTdGFjay5pc0VtcHR5KCkgJiYgcGFyZW50ID09IG1fc2NvcGlu
Z0VsZW1lbnRTdGFjay5sYXN0KCkuZmlyc3QpCisgICAgICAgICAgICBtX3Njb3BpbmdFbGVtZW50
U3RhY2sucmVtb3ZlTGFzdCgpOworI2VuZGlmCisgICAgfQorfQorCiAvLyBUaGlzIGlzIGEgc2lt
cGxpZmllZCBzdHlsZSBzZXR0aW5nIGZ1bmN0aW9uIGZvciBrZXlmcmFtZSBzdHlsZXMKIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFdlYktpdENTU0tl
eWZyYW1lc1J1bGU+IHJ1bGUpCiB7CkBAIC02ODcsMTYgKzc3Myw4IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCogcnVsZXMsIGlu
dCYgZmlyc3RSCiAgICAgfQogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMo
UnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKCkKIHsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwotCi0g
ICAgaWYgKCFydWxlcyB8fCAhbV9lbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlcyhydWxlcywgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihydWxl
cywgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLQog
ICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NzIzLDYgKzgwMSw2OCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNl
dCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdAogICAgIH0KIH0KIAordm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVzKGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKKyAgICBtX21h
dGNoZWRSdWxlcy5jbGVhcigpOworCisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMuCisgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5k
ZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lv
bihtX2F1dGhvclN0eWxlLmdldCgpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5j
bHVkZUVtcHR5UnVsZXMpOworCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAvLyBNYXRj
aCBzY29wZWQgc3R5bGUgc2hlZXQncyBydWxlcywgYnV0IG9ubHkgaWYgdGhlcmUgYXJlIGluZGVl
ZCBzY29wZWQgc3R5bGVzIGFueXdoZXJlIChzaG9ydGN1dCkuCisgICAgaWYgKCFtX3Njb3BlZEF1
dGhvclN0eWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fY2hlY2tlci5wYXJlbnRTdGFj
a0lzQ29uc2lzdGVudChtX3BhcmVudE5vZGUpKSB7CisgICAgICAgICAgICAvLyBGYXN0IGJyYW5j
aDogYWNjZXNzIGVuY2xvc2luZyBzY29wZXMgZGlyZWN0bHkgZnJvbSB2ZWN0b3IsIGJ1dCBzdGFy
dCB3aXRoIGN1cnJlbnQgZWxlbWVudC4KKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1Nj
b3BlZEhUTUxTdHlsZUNoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICBSdWxlU2V0KiBydWxlU2V0
ID0gc2NvcGVkUnVsZVNldEZvckVsZW1lbnQobV9lbGVtZW50KTsKKyAgICAgICAgICAgICAgICBp
ZiAocnVsZVNldCkgeworICAgICAgICAgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhy
dWxlU2V0LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMp
OworICAgICAgICAgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihydWxl
U2V0LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBtX3Njb3BpbmdFbGVtZW50U3RhY2suc2l6ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAg
ICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGluZ0VsZW1lbnRTdGFja1tpIC0gMV0u
c2Vjb25kOworICAgICAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVTZXQsIGZp
cnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAg
ICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24ocnVsZVNldCwgZmlyc3RSdWxl
SW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFNsb3cgYnJhbmNoOiBjbGltYiB0cmVl
LCBjaGVjayBmb3Igc3R5bGUgc2NvcGVzIGF0IGV2ZXJ5IGVsZW1lbnQuCisgICAgICAgICAgICBm
b3IgKGNvbnN0IE5vZGUqIG5vZGUgPSBtX2VsZW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJl
bnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY29uc3QgRWxl
bWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVs
ZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBzY29wZWRSdWxlU2V0
Rm9yRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBpZiAocnVsZVNldCkgeworICAg
ICAgICAgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhydWxlU2V0LCBmaXJzdFJ1bGVJ
bmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICAgICAgICAg
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihydWxlU2V0LCBmaXJzdFJ1bGVJbmRl
eCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgc29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKCk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hS
dWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUlu
ZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFy
KCk7CisKKyAgICBpZiAoIXJ1bGVzIHx8ICFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVn
aW9uKHJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVs
ZXMpOworCisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKCk7Cit9CisKIGNsYXNzIE1h
dGNoaW5nVUFSdWxlc1Njb3BlIHsKIHB1YmxpYzoKICAgICBNYXRjaGluZ1VBUnVsZXNTY29wZSgp
OwpAQCAtODc1LDcgKzEwMTUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKICAgICAKICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4g
YXV0aG9yIHNoZWV0cyBuZXh0LgogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykK
LSAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZp
cnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgZmFsc2UpOworICAg
ICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1
bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7CiAKICAgICAvLyBOb3cgY2hlY2sgb3Vy
IGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5
bGVzICYmIG1fc3R5bGVkRWxlbWVudCkgewpAQCAtOTM4LDYgKzEwNzgsMTAgQEAgTm9kZSogQ1NT
U3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVk
JiB2aXNpdGVkTm9kZUMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFwYXJlbnQgfHwgIXBh
cmVudC0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiAwOworI2lmIEVOQUJMRShT
VFlMRV9TQ09QRUQpCisgICAgaWYgKHBhcmVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKICAgICBTdHlsZWRFbGVtZW50KiBwID0gc3RhdGlj
X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudCk7CiAgICAgaWYgKHAtPmlubGluZVN0eWxlRGVj
bCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTExMDEsNiArMTI0NSwxMSBAQCBib29sIENTU1N0
eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVt
ZW50KSBjb25zdAogICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5S
dWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYg
KGVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgorCiAgICAgYm9vbCBpc0NvbnRyb2wgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9s
RWxlbWVudCgpOwogCiAgICAgaWYgKGlzQ29udHJvbCAhPSBtX2VsZW1lbnQtPmlzRm9ybUNvbnRy
b2xFbGVtZW50KCkpCkBAIC0xMTcyLDYgKzEzMjEsMTAgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxl
U2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYg
KHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1
cm4gMDsKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIGlmIChtX3N0eWxlZEVsZW1lbnQt
Pmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgIHJldHVybiAwOworI2VuZGlmCiAK
ICAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQgdGhlaXIgY291c2lucy4KICAgICB1
bnNpZ25lZCBjb3VudCA9IDA7CkBAIC0xNDkxLDcgKzE2NDQsNyBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQg
cHNldWRvLAogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7CiAgICAgICAg
IG1hdGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVz
ZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBmYWxzZSk7Ci0gICAgICAg
IG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0
QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7Cisg
ICAgICAgIG1hdGNoQXV0aG9yUnVsZXMobWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVs
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7CiAgICAgfQogCiAg
ICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlzRW1wdHkoKSkKQEAgLTE1MjgsNiArMTY4MSw3IEBAIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yUGFnZShpbnQg
cGFnZUluZGV4KQogICAgIGNvbnN0IFN0cmluZyBwYWdlID0gcGFnZU5hbWUocGFnZUluZGV4KTsK
ICAgICBtYXRjaFBhZ2VSdWxlcyhkZWZhdWx0UHJpbnRTdHlsZSwgaXNMZWZ0LCBpc0ZpcnN0LCBw
YWdlKTsKICAgICBtYXRjaFBhZ2VSdWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0Zp
cnN0LCBwYWdlKTsKKyAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVT
ZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCiAgICAgbWF0Y2hQYWdl
UnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICBt
X2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CkBA
IC0xNzcxLDYgKzE5MjUsOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0
eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudAogCiBib29sIENTU1N0
eWxlU2VsZWN0b3I6OmNoZWNrUmVnaW9uU3R5bGUoRWxlbWVudCogcmVnaW9uRWxlbWVudCkKIHsK
KyAgICAvLyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9uJ3QgYWRkIEAtd2Via2l0LXJlZ2lvbiBy
dWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LAorICAgIC8vIHNvIGFs
bCByZWdpb24gcnVsZXMgYXJlIGdsb2JhbCBieSBkZWZhdWx0LiBWZXJpZnkgd2hldGhlciB0aGF0
IGNhbiBzdGFuZCBvciBuZWVkcyBjaGFuZ2luZy4KKwogICAgIHVuc2lnbmVkIHJ1bGVzU2l6ZSA9
IG1fYXV0aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlc1NpemU7ICsraSkgewogICAgICAgICBBU1NF
UlQobV9hdXRob3JTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxl
U2V0LmdldCgpKTsKQEAgLTE4NDEsNyArMTk5OCw3IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+
IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUs
CiAgICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmln
aW5DU1NSdWxlcyk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVl
dHMuCi0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZHVtbXkucmFuZ2Vz
LmZpcnN0QXV0aG9yUnVsZSwgZHVtbXkucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBydWxlc1RvSW5j
bHVkZSAmIEVtcHR5Q1NTUnVsZXMpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKGR1bW15LnJh
bmdlcy5maXJzdEF1dGhvclJ1bGUsIGR1bW15LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgcnVsZXNU
b0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKIAogICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0g
ZmFsc2U7CiAgICAgfQpAQCAtMjExOSwxMCArMjI3NiwxOSBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJl
Z2lvblJ1bGUoV2ViS2l0Q1NTUmVnaW9uUnVsZSogcnVsZSkKICAgICBtX3JlZ2lvblNlbGVjdG9y
c0FuZFJ1bGVTZXRzLmFwcGVuZChSdWxlU2V0U2VsZWN0b3JQYWlyKHJ1bGUtPnNlbGVjdG9yTGlz
dCgpLmZpcnN0KCksIHJlZ2lvblJ1bGVTZXQpKTsKIH0KIAorI2lmIEVOQUJMRShTVFlMRV9TQ09Q
RUQpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0
LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0
eWxlU2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIHNjb3BlKQoreworI2Vsc2UKIHZvaWQgUnVsZVNl
dDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVl
cnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcikKIHsK
ICAgICBBU1NFUlQoc2hlZXQpOworICAgIGNvbnN0IEVsZW1lbnQqIGNvbnN0IHNjb3BlID0gMDsK
KyNlbmRpZgogCisgICAgaWYgKCFzaGVldCkKKyAgICAgICAgcmV0dXJuOworIAogICAgIC8vIE5v
IG1lZGlhIGltcGxpZXMgImFsbCIsIGJ1dCBpZiBhIG1lZGlhIGxpc3QgZXhpc3RzIGl0IG11c3QK
ICAgICAvLyBjb250YWluIG91ciBjdXJyZW50IG1lZGl1bQogICAgIGlmIChzaGVldC0+bWVkaWEo
KSAmJiAhbWVkaXVtLmV2YWwoc2hlZXQtPm1lZGlhKCksIHN0eWxlU2VsZWN0b3IpKQpAQCAtMjEz
OCw4ICsyMzA0LDEzIEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVT
aGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImCiAgICAgICAgICAgICBhZGRQ
YWdlUnVsZShzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+KHJ1bGUpKTsKICAgICAgICAgZWxzZSBp
ZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKICAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGlt
cG9ydCA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihydWxlKTsKLSAgICAgICAgICAgIGlm
IChpbXBvcnQtPnN0eWxlU2hlZXQoKSAmJiAoIWltcG9ydC0+bWVkaWEoKSB8fCBtZWRpdW0uZXZh
bChpbXBvcnQtPm1lZGlhKCksIHN0eWxlU2VsZWN0b3IpKSkKKyAgICAgICAgICAgIGlmIChpbXBv
cnQtPnN0eWxlU2hlZXQoKSAmJiAoIWltcG9ydC0+bWVkaWEoKSB8fCBtZWRpdW0uZXZhbChpbXBv
cnQtPm1lZGlhKCksIHN0eWxlU2VsZWN0b3IpKSkgeworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
CisgICAgICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0LT5zdHlsZVNoZWV0KCks
IG1lZGl1bSwgc3R5bGVTZWxlY3Rvciwgc2NvcGUpOworI2Vsc2UKICAgICAgICAgICAgICAgICBh
ZGRSdWxlc0Zyb21TaGVldChpbXBvcnQtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCBzdHlsZVNlbGVj
dG9yKTsKKyNlbmRpZgorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYg
KHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKICAgICAgICAgICAgIENTU01lZGlhUnVsZSogciA9IHN0
YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KHJ1bGUpOwpAQCAtMjE1NSwyNCArMjMyNiw0MCBAQCB2
b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25z
dCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJgogICAgICAgICAgICAgICAgICAgICAgICAgYWRkUGFnZVJ1
bGUoc3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGUqPihjaGlsZEl0ZW0pKTsKICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY2hpbGRJdGVtLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0
b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBv
dXIgc2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcyNDYxKTogV2Ug
ZG9uJ3QgYWRkIEBmb250LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhl
IG1vbWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VS
dWxlKj4oY2hpbGRJdGVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3It
PmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFyYXRp
b25DYWNoZSgpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkSXRlbS0+aXNL
ZXlmcmFtZXNSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgcnVsZSB0byBvdXIgc2V0LgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUUoQlVHIDcyNDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxl
cyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHls
ZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4oY2hpbGRJdGVtKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9ICAgLy8gZm9yIHJ1bGVzCiAgICAg
ICAgICAgICB9ICAgLy8gaWYgcnVsZXMKICAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0ZvbnRG
YWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZv
bnQgZmFjZSB0byBvdXIgc2V0LgorICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcyNDYxKTogV2Ug
ZG9uJ3QgYWRkIEBmb250LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhl
IG1vbWVudC4KKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGNvbnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3Rh
dGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4ocnVsZSk7CiAgICAgICAgICAgICBzdHlsZVNlbGVj
dG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7CiAgICAg
ICAgICAgICBzdHlsZVNlbGVjdG9yLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uQ2FjaGUo
KTsKLSAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0tleWZyYW1lc1J1bGUoKSkKKyAgICAgICAg
fSBlbHNlIGlmIChydWxlLT5pc0tleWZyYW1lc1J1bGUoKSkgeworICAgICAgICAgICAgLy8gRklY
TUUgKEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVkIHN0
eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZy
YW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KHJ1bGUpKTsKLSAg
ICAgICAgZWxzZSBpZiAocnVsZS0+aXNSZWdpb25SdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikKKyAg
ICAgICAgfSBlbHNlIGlmIChydWxlLT5pc1JlZ2lvblJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7
CisgICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9uJ3QgYWRkIEAtd2Via2l0
LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAg
ICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NSZWdpb25SdWxlKj4ocnVsZSkp
OworICAgICAgICB9CiAgICAgfQogICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCiAg
ICAgICAgIHNocmlua1RvRml0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaApp
bmRleCAzNTJhOWU0NjQ2MDk3ZTliMmMwYmM2YzU0N2Y3ZjFiYzFkYzJmOTE0Li40ZDYyZjYyNDcw
NTZkYzkwNzQzZTk0N2I1YjA5Mzg1NWM1ZDY2ZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmgKQEAgLTY3LDYgKzY3LDcgQEAgY2xhc3MgTm9kZTsKIGNsYXNzIFJlbmRlclJl
Z2lvbjsKIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3MgUnVsZVNldDsKK2NsYXNzIFNjb3BlZFJ1bGVT
ZXRzOwogY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBTdHlsZUltYWdlOwogY2xhc3MgU3R5bGVQZW5k
aW5nSW1hZ2U7CkBAIC0xMDYsOSArMTA3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgc3RyaWN0UGFyc2luZywgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpOwog
ICAgIH5DU1NTdHlsZVNlbGVjdG9yKCk7CiAKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAg
IHN0YXRpYyBFbGVtZW50KiBkZXRlcm1pbmVTY29waW5nRWxlbWVudChjb25zdCBDU1NTdHlsZVNo
ZWV0Kik7CisjZW5kaWYKKwogICAgIC8vIFVzaW5nIHRoZXNlIGR1cmluZyB0cmVlIHdhbGsgd2ls
bCBhbGxvdyBzdHlsZSBzZWxlY3RvciB0byBvcHRpbWl6ZSBjaGlsZCBhbmQgZGVzY2VuZGFudCBz
ZWxlY3RvciBsb29rdXBzLgotICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpIHsg
bV9jaGVja2VyLnB1c2hQYXJlbnQocGFyZW50KTsgfQotICAgIHZvaWQgcG9wUGFyZW50KEVsZW1l
bnQqIHBhcmVudCkgeyBtX2NoZWNrZXIucG9wUGFyZW50KHBhcmVudCk7IH0KKyAgICB2b2lkIHB1
c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KTsKKyAgICB2b2lkIHBvcFBhcmVudChFbGVtZW50KiBw
YXJlbnQpOwogCiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVs
ZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBib29sIGFsbG93U2hhcmluZyA9
IHRydWUsIGJvb2wgcmVzb2x2ZUZvclJvb3REZWZhdWx0ID0gZmFsc2UsIFJlbmRlclJlZ2lvbiog
cmVnaW9uRm9yU3R5bGluZyA9IDApOwogCkBAIC0yNzYsMTEgKzI4MSwxMyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYpOwogICAgIHZvaWQgbWF0Y2hVQVJ1
bGVzKE1hdGNoUmVzdWx0Jik7CiAgICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZp
cnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
OworICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgY29sbGVjdE1h
dGNoaW5nUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJ
bmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdS
dWxlc0ZvclJlZ2lvbihSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVs
ZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRl
eCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBib29s
IGZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwogICAgIHZvaWQgc29y
dE1hdGNoZWRSdWxlcygpOworICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKCk7
CiAKICAgICBib29sIGNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKTsKICAgICBib29sIGNo
ZWNrUmVnaW9uU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiBy
ZWdpb25FbGVtZW50KTsKQEAgLTI5OSw2ICszMDYsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIGlz
Rmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwogICAgIFN0cmluZyBwYWdlTmFtZShpbnQg
cGFnZUluZGV4KSBjb25zdDsKIAorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgdHlwZWRl
ZiBIYXNoTWFwPGNvbnN0IEVsZW1lbnQqLCBPd25QdHI8UnVsZVNldD4gPiBTY29wZWRSdWxlU2V0
TWFwOworCisgICAgUnVsZVNldCogc2NvcGVkUnVsZVNldEZvckVsZW1lbnQoY29uc3QgRWxlbWVu
dCogZWxlbWVudCkgeyBTY29wZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0
aG9yU3R5bGVzLmZpbmQoZWxlbWVudCk7IHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxl
cy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyB9CisKKyAgICBTY29wZWRSdWxlU2V0TWFw
IG1fc2NvcGVkQXV0aG9yU3R5bGVzOworI2VuZGlmCisKICAgICBPd25QdHI8UnVsZVNldD4gbV9h
dXRob3JTdHlsZTsKICAgICBPd25QdHI8UnVsZVNldD4gbV91c2VyU3R5bGU7CiAKQEAgLTQzNCw3
ICs0NDksMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlOwogICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOwogICAgIGNv
bnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0eSYgbV9hcHBseVByb3BlcnR5OwotICAgIAorCisgICAg
Ly8gVmVjdG9yICh1c2VkIGFzIHN0YWNrKSB0aGF0IGtlZXBzIHRyYWNrIG9mIHNjb3BpbmcgZWxl
bWVudHMgKGkuZS4sIGVsZW1lbnRzIHdpdGggYSA8c3R5bGUgc2NvcGVkPiBjaGlsZCkKKyAgICAv
LyBlbmNvdW50ZXJlZCBkdXJpbmcgdHJlZSBpdGVyYXRpb24gZm9yIHN0eWxlIHJlc29sdXRpb24u
CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxjb25zdCBFbGVtZW50KiwgUnVsZVNldCo+ID4gbV9zY29w
aW5nRWxlbWVudFN0YWNrOworCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIGJvb2wgbV9o
YXNQZW5kaW5nU2hhZGVyczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcAppbmRleCBmNzRlZWQwMmM2YTAyM2RlZTUzMmI5MWM5Y2I3NWFjMjI4MGE4NGFiLi45MTE1
NGViZTEwOWY2ODAwNDdjZDBiNTdmMzVkY2U3ZGQ0MzY2MGM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFByb2dy
ZXNzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCkBAIC0xMjUsNDIgKzEyNiwzMyBAQCB2b2lkIFNlbGVjdG9yQ2hl
Y2tlcjo6cG9wUGFyZW50U3RhY2tGcmFtZSgpCiAgICAgfQogfQogCi12b2lkIFNlbGVjdG9yQ2hl
Y2tlcjo6cHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpCit2b2lkIFNlbGVjdG9yQ2hlY2tlcjo6
c2V0dXBQYXJlbnRTdGFjayhFbGVtZW50KiBwYXJlbnQpCiB7Ci0gICAgaWYgKG1fcGFyZW50U3Rh
Y2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0
ZXIpOwotICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlciA9IGFkb3B0UHRyKG5ldyBC
bG9vbUZpbHRlcjxibG9vbUZpbHRlcktleUJpdHM+KTsKLSAgICAgICAgLy8gSWYgdGhlIGVsZW1l
bnQgaXMgbm90IHRoZSByb290IGl0c2VsZiwgYnVpbGQgdGhlIHN0YWNrIHN0YXJ0aW5nIGZyb20g
dGhlIHJvb3QuCi0gICAgICAgIGlmIChwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSkgewotICAg
ICAgICAgICAgVmVjdG9yPEVsZW1lbnQqLCAzMD4gYW5jZXN0b3JzOwotICAgICAgICAgICAgZm9y
IChFbGVtZW50KiBhbmNlc3RvciA9IHBhcmVudDsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0
b3ItPnBhcmVudE9ySG9zdEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICBhbmNlc3RvcnMuYXBw
ZW5kKGFuY2VzdG9yKTsKLSAgICAgICAgICAgIGludCBjb3VudCA9IGFuY2VzdG9ycy5zaXplKCk7
Ci0gICAgICAgICAgICBmb3IgKGludCBuID0gY291bnQgLSAxOyBuID49IDA7IC0tbikKLSAgICAg
ICAgICAgICAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShhbmNlc3RvcnNbbl0pOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghcGFyZW50LT5wYXJlbnRPckhv
c3RFbGVtZW50KCkpIHsKLSAgICAgICAgLy8gV2UgYXJlIG5vdCBhbHdheXMgaW52b2tlZCBjb25z
aXN0ZW50bHkuIEZvciBleGFtcGxlLCBzY3JpcHQgZXhlY3V0aW9uIGNhbiBjYXVzZSB1cyB0byBl
bnRlcgotICAgICAgICAvLyBzdHlsZSByZWNhbGMgaW4gdGhlIG1pZGRsZSBvZiB0cmVlIGJ1aWxk
aW5nLiBSZXNldCB0aGUgc3RhY2sgaWYgd2Ugc2VlIGEgbmV3IHJvb3QgZWxlbWVudC4KLSAgICAg
ICAgQVNTRVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKLSAgICAgICAgbV9hbmNlc3Rv
cklkZW50aWZpZXJGaWx0ZXItPmNsZWFyKCk7Ci0gICAgICAgIG1fcGFyZW50U3RhY2sucmVzaXpl
KDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZp
bHRlcik7Ci0gICAgICAgIC8vIFdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSByYW5kb20gZWxl
bWVudHMgaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4KLSAgICAgICAg
Ly8gUGF1c2UgbWFpbnRhaW5pbmcgdGhlIHN0YWNrIGluIHRoaXMgY2FzZS4KLSAgICAgICAgaWYg
KG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgIT0gcGFyZW50LT5wYXJlbnRPckhvc3RFbGVt
ZW50KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fcGFyZW50U3RhY2suaXNF
bXB0eSgpID09ICFtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7CisgICAgLy8gS2lsbCB3aGF0
ZXZlciB3ZSBzdG9yZWQgYmVmb3JlLgorICAgIG1fcGFyZW50U3RhY2sucmVzaXplKDApOworICAg
IG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyID0gYWRvcHRQdHIobmV3IEJsb29tRmlsdGVyPGJs
b29tRmlsdGVyS2V5Qml0cz4pOworICAgIC8vIEZhc3QgdmVyc2lvbiBpZiBwYXJlbnQgaXMgYSBy
b290IGVsZW1lbnQ6CisgICAgaWYgKCFwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSkgeworICAg
ICAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShwYXJlbnQpOworICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIHB1c2hQYXJlbnRTdGFja0ZyYW1lKHBhcmVudCk7CisgICAgLy8gT3RoZXJ3aXNlIGNs
aW1iIHVwIHRoZSB0cmVlLgorICAgIFZlY3RvcjxFbGVtZW50KiwgMzA+IGFuY2VzdG9yczsKKyAg
ICBmb3IgKEVsZW1lbnQqIGFuY2VzdG9yID0gcGFyZW50OyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBh
bmNlc3Rvci0+cGFyZW50T3JIb3N0RWxlbWVudCgpKQorICAgICAgICBhbmNlc3RvcnMuYXBwZW5k
KGFuY2VzdG9yKTsKKyAgICBmb3IgKHNpemVfdCBuID0gYW5jZXN0b3JzLnNpemUoKTsgbjsgLS1u
KQorICAgICAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShhbmNlc3RvcnNbbiAtIDFdKTsKIH0KIAot
dm9pZCBTZWxlY3RvckNoZWNrZXI6OnBvcFBhcmVudChFbGVtZW50KiBwYXJlbnQpCit2b2lkIFNl
bGVjdG9yQ2hlY2tlcjo6cHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpCiB7Ci0gICAgaWYgKG1f
cGFyZW50U3RhY2suaXNFbXB0eSgpIHx8IG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgIT0g
cGFyZW50KQorICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7CisgICAgLy8g
V2UgbWF5IGdldCBpbnZva2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5
IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlLgorICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRo
ZSBzdGFjayBpbiB0aGlzIGNhc2UuCisgICAgaWYgKG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1l
bnQgIT0gcGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBwb3BQYXJlbnRTdGFja0ZyYW1lKCk7CisgICAgcHVzaFBhcmVudFN0YWNrRnJhbWUocGFyZW50
KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3REZXNjZW5kYW50U2VsZWN0b3JJZGVu
dGlmaWVySGFzaGVzKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgdW5zaWduZWQqJiBoYXNo
LCBjb25zdCB1bnNpZ25lZCogZW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmlu
ZGV4IDcyOWEwNTY1MTE3ODUxZjQ4OWI3NjI5MGJkNGE0OGI0MTMxNDc5ZTcuLjNmOTQ2OWU1ZDc5
YjA5YzlhYjg0MmU3NDJkODVmYWQ3MTdiOTQ3MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmgKQEAgLTYwLDkgKzYwLDExIEBAIHB1YmxpYzoKICAgICBpbmxpbmUgYm9vbCBmYXN0
UmVqZWN0U2VsZWN0b3IoY29uc3QgdW5zaWduZWQqIGlkZW50aWZpZXJIYXNoZXMpIGNvbnN0Owog
ICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RJZGVudGlmaWVySGFzaGVzKGNvbnN0IENTU1NlbGVjdG9y
KiwgdW5zaWduZWQqIGlkZW50aWZpZXJIYXNoZXMsIHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVy
Q291bnQpOwogCisgICAgdm9pZCBzZXR1cFBhcmVudFN0YWNrKEVsZW1lbnQqIHBhcmVudCk7CiAg
ICAgdm9pZCBwdXNoUGFyZW50KEVsZW1lbnQqIHBhcmVudCk7Ci0gICAgdm9pZCBwb3BQYXJlbnQo
RWxlbWVudCogcGFyZW50KTsKLSAgICBib29sIHBhcmVudFN0YWNrSXNDb25zaXN0ZW50KENvbnRh
aW5lck5vZGUqIHBhcmVudE5vZGUpIGNvbnN0IHsgcmV0dXJuICFtX3BhcmVudFN0YWNrLmlzRW1w
dHkoKSAmJiBtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ID09IHBhcmVudE5vZGU7IH0KKyAg
ICB2b2lkIHBvcFBhcmVudCgpIHsgcG9wUGFyZW50U3RhY2tGcmFtZSgpOyB9CisgICAgYm9vbCBw
YXJlbnRTdGFja0lzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0YWNrLmlzRW1wdHko
KTsgfQorICAgIGJvb2wgcGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoY29uc3QgQ29udGFpbmVyTm9k
ZSogcGFyZW50Tm9kZSkgY29uc3QgeyByZXR1cm4gIW1fcGFyZW50U3RhY2suaXNFbXB0eSgpICYm
IG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgPT0gcGFyZW50Tm9kZTsgfQogCiAgICAgRUlu
c2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqKSBjb25zdDsKICAgICB2b2lkIGFs
bFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhZTg3NDAxYmMwZWYzZjhhMmVlZDc1YjM0
ZjY2NDgwOWVhMTgxNWJhLi5kZjYwMmNhNjQ0ZjBiYjQ0NzRkMTg5NjE0YTVjMjg0MjM3ZTUyNGM3
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTItMDEtMjYgIFJvbGFuZCBTdGVpbmVyICA8cm9s
YW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgPHN0eWxlIHNjb3BlZD46IEltcGxl
bWVudCBzY29wZWQgc3R5bGVzaGVldHMgYW5kIGJhc2ljIGFwcGxpY2F0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzE5MAorCisgICAgICAgIFRl
c3QgdGhhdCA8c3R5bGUgc2NvcGVkPiBhZmZlY3RzIHN0eWxlcyBhbmQgaXMgdXBkYXRlZCBjb3Jy
ZWN0bHk6CisgICAgICAgIC0pIGJhc2ljIHRlc3QKKyAgICAgICAgLSkgdGVzdCBzZXR0aW5nL3Vu
LXNldHRpbmcgdGhlICdzY29wZWQnIGF0dHJpYnV0ZQorICAgICAgICAtKSB0ZXN0IGluc2VydGlu
Zy9yZW1vdmluZyBhIHdob2xlIDxzdHlsZSBzY29wZWQ+IGVsZW1lbnQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2guaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQt
YmFzaWMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1kZXRhY2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9z
dHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LXJlbW92ZS1zY29wZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0bWw6IEFk
ZGVkLgorCiAyMDEyLTAxLTI1ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIDxzdHlsZSBzY29wZWQ+OiBJbXBsZW1lbnQgcmVnaXN0ZXJpbmcg
b2YgPHN0eWxlIHNjb3BlZD4gd2l0aCB0aGUgc2NvcGluZyBlbGVtZW50CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LWF0dGFjaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZlMDY3MWZhYzZlMTZlMzNhNDJjNDI5
YWZlZmVkZDFhMzVhZjhjZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDI3IEBACitUZXN0IGF0dGFjaGluZyBhIG5ldyA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisKK1Rl
eHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0K
K1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMCwgMCwgMCkKK1Ay
OiByZ2IoMCwgMCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBB
RlRFUiBBVFRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTog
cmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6
IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0
dGFjaC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1hdHRhY2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDNkZjU1ZGU0OWJmNmNmZTFmOGM2YWQ0MGIwZTY1
MGNmOGFlNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2guaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRl
ZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgn
Y29sb3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7Cisg
ICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAg
ICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCct
LS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAg
IGxvZygnLS0tIEFGVEVSIEFUVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0nKTsKKyAgICAgICAg
ICAgIHZhciBkaXZFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RJVicpOworICAgICAg
ICAgICAgdmFyIHN0eWxlRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7Cisg
ICAgICAgICAgICBzdHlsZUVsZW0uc2V0QXR0cmlidXRlKCdzY29wZWQnLCB0cnVlKTsKKyAgICAg
ICAgICAgIHN0eWxlRWxlbS5pbm5lckhUTUwgPSAnZGl2IHsgY29sb3I6IHJlZDsgfSBwIHsgY29s
b3I6IGdyZWVuOyB9JzsKKyAgICAgICAgICAgIGRpdkVsZW0uaW5zZXJ0QmVmb3JlKHN0eWxlRWxl
bSwgZGl2RWxlbS5maXJzdENoaWxkKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0t
IEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cisg
ICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjog
YmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygp
OyI+CisgICAgPHA+VGVzdCBhdHRhY2hpbmcgYSBuZXcgJmx0O3N0eWxlIHNjb3BlZCZndDsgZWxl
bWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+Cisg
ICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJESVYi
PgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+
VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRl
eHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8
cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1i
YXNpYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTkxMmZkYzBmODNlYzE0OTNhNDJjMjU5YjNm
MTgyYmIwZjU2YzcxNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0
eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDIg
QEAKK1Rlc3QgPHN0eWxlIHNjb3BlZD4KKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0
CitUZXh0CisKK1RleHQKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorVGV4dAorVGV4dAorCitU
ZXh0CitUZXh0CistLS0gQ09NUFVURUQgU1RZTEVTIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6
IHJnYigwLCAwLCAwKQorUjE6IHJnYigwLCAwLCAwKQorRTE6IHJnYigwLCAwLCAwKQorCitTMjog
cmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUjI6IHJnYigwLCAwLCAyNTUpCisK
K1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKK1IzOiByZ2IoMCwgMCwgMCkKK0Uz
OiByZ2IoMCwgMCwgMCkKKworUzQ6IHJnYigwLCAwLCAwKQorUDQ6IHJnYigwLCAwLCAwKQorUjQ6
IHJnYigwLCAwLCAwKQorRTQ6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJh
c2ljLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LWJhc2ljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmU1YjQzMWE5MTZhMzljNjlmYmRmODY2ODY0YWU4ZGZm
M2Q2OGNlZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNj
b3BlZC9zdHlsZS1zY29wZWQtYmFzaWMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
PgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRl
c3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1
bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29s
b3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAg
ICBsb2coJy0tLSBDT01QVVRFRCBTVFlMRVMgLS0tJyk7CisKKyAgICAgICAgICAgIHRlc3QoJ1Mx
Jyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUjEnKTsKKyAg
ICAgICAgICAgIHRlc3QoJ0UxJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAgICAg
dGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdS
MicpOworICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAg
ICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICAgICAgdGVzdCgnUjMnKTsKKyAgICAgICAgICAg
IHRlc3QoJ0UzJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAgICAgdGVzdCgnUzQn
KTsKKyAgICAgICAgICAgIHRlc3QoJ1A0Jyk7CisgICAgICAgICAgICB0ZXN0KCdSNCcpOworICAg
ICAgICAgICAgdGVzdCgnRTQnKTsKKworICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0t
Jyk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3Mi
PgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4K
Kzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgJmx0O3N0eWxlIHNjb3Bl
ZCZndDs8L3A+CisgICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5U
ZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgICAgIDxwcmUgaWQg
PSAiUjEiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBpZD0iRTEiIGNsYXNz
PSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8ZGl2Pgor
ICAgICAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgICAgICAg
ICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47
IH0KKyAgICAgICAgICAgICAgICBkaXYgLmJhciB7IGNvbG9yOiBibHVlOyB9CisgICAgICAgICAg
ICA8L3N0eWxlPgorICAgICAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAg
ICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgICAgICAgICAgPHByZSBpZD0iUjIiIGNsYXNz
PSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+
VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgICAgICA8cHJlIGlk
ID0gIlIzIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgIDxwcmUgaWQ9IkUzIiBjbGFz
cz0iYmF6Ij5UZXh0PC9wcmU+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAg
ICAgICAgPHNwYW4gaWQ9IlM0Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDQiPlRleHQ8
L3A+CisgICAgICAgIDxwcmUgaWQgPSAiUjQiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAg
ICAgPHByZSBpZD0iRTQiIGNsYXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8
cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQt
ZGV0YWNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kN2VmNjUzMTc0MDcyYjc4ODdmN2RmM2Rh
YmY5MWE5YTczNDBlM2U4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MjcgQEAKK1Rlc3QgZGV0YWNoaW5nIGEgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCitUZXh0CitU
ZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0gT1JJR0lOQUwgLS0tCitTMTog
cmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiBy
Z2IoMCwgMTI4LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEFG
VEVSIERFVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiBy
Z2IoMCwgMCwgMCkKK1MyOiByZ2IoMCwgMCwgMCkKK1AyOiByZ2IoMCwgMCwgMCkKK1MzOiByZ2Io
MCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2gu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0
YWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGM4YmY2YTg2NjEyNzBmODYxY2I4NTU4YWMzMjdhMTg3NzFm
MzllZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K
KyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0
KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0
Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9y
JykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEFsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAg
ICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0
ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZygnLS0tIE9S
SUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOworCisgICAgICAgICAgICBsb2co
Jy0tLSBBRlRFUiBERVRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tJyk7CisgICAgICAgICAgICB2
YXIgZGl2RWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdESVYnKTsKKyAgICAgICAgICAg
IHZhciBzdHlsZUVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU1RZTEUnKTsKKyAgICAg
ICAgICAgIGRpdkVsZW0ucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtKTsKKyAgICAgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAg
ICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9Cisg
ICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAg
IGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCBkZXRhY2hpbmcgYSAmbHQ7c3R5bGUgc2Nv
cGVkJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4
dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxk
aXYgaWQ9IkRJViI+CisgICAgICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIiBz
Y29wZWQ+CisgICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAgICAgICBwIHsg
Y29sb3I6IGdyZWVuOyB9CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+
VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAg
IDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9
IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2EyMDU4N2RmNWFmZmY2MmRjMjdmNjJhYWVjNDUwYjMzNzY1
Y2FjOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBA
QAorVGVzdCByZW1vdmluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgPHN0eWxlPiBlbGVt
ZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklH
SU5BTCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1
LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAs
IDAsIDApCistLS0gQUZURVIgVU4tU0VUVElORyBAU0NPUEVEIC0tLQorUzE6IHJnYigyNTUsIDAs
IDApCitQMTogcmdiKDAsIDEyOCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAx
MjgsIDApCitTMzogcmdiKDI1NSwgMCwgMCkKK1AzOiByZ2IoMCwgMTI4LCAwKQorLS0tIEZJTklT
SEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQv
c3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0
eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVh
YWYzNzc0Y2FiMmZhNzRmZDcwYzYxMWFlMDMyYmExMTg0M2Q3ZWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1z
Y29wZWQuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlv
biBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdc
bicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAg
ICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVk
U3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVz
dCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicp
OworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAg
ICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVz
dHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7Cisg
ICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIFVOLVNF
VFRJTkcgQFNDT1BFRCAtLS0nKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdTVFlMRScpLnJlbW92ZUF0dHJpYnV0ZSgnc2NvcGVkJyk7CisgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAg
ICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAg
IDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBi
b2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgcmVtb3ZpbmcgdGhlICdzY29wZWQnIGF0dHJp
YnV0ZSBvbiBhICZsdDtzdHlsZSZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAgICA8
c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAg
ICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3R5bGUgaWQ9IlNUWUxFIiB0eXBlPSJ0ZXh0
L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAg
ICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c3BhbiBp
ZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rp
dj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAg
IDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48
L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMGM3OTYzYzk3YzQ3ODAxZTA4NDk2NzUxMTM3MjIyYzQ2
NjVkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29w
ZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjcgQEAK
K1Rlc3Qgc2V0dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgPHN0eWxlPiBlbGVtZW50
CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5B
TCAtLS0KK1MxOiByZ2IoMjU1LCAwLCAwKQorUDE6IHJnYigwLCAxMjgsIDApCitTMjogcmdiKDI1
NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigyNTUsIDAsIDApCitQMzogcmdi
KDAsIDEyOCwgMCkKKy0tLSBBRlRFUiBTRVRUSU5HIEBTQ09QRUQgLS0tCitTMTogcmdiKDAsIDAs
IDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4
LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0t
LQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUt
c2NvcGVkLXNldC1zY29wZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5MDNiZDQxZTI5OWQw
MzUwMWNlZjEwNTQwZmUxOTUwMGM0ZTgyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbApAQCAt
MCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAg
ICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZh
ciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlk
ICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVs
bCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAg
ICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAg
dGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQ
MycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAgICB0ZXN0
QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIFNFVFRJTkcgQFNDT1BFRCAtLS0n
KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScpLnNldEF0dHJp
YnV0ZSgnc2NvcGVkJywgdHJ1ZSk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAgICAgICBsb2coJy0tLSBG
SU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAg
IDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBib2R5IHsgY29sb3I6IGJs
YWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsi
PgorICAgIDxwPlRlc3Qgc2V0dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgJmx0O3N0
eWxlJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4
dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxk
aXY+CisgICAgICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIj4KKyAgICAgICAg
ICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0K
KyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAg
ICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAg
PHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+Cisg
ICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124078</attachid>
            <date>2012-01-26 01:37:30 -0800</date>
            <delta_ts>2012-01-30 02:24:53 -0800</delta_ts>
            <desc>patch, alternative, using iterator</desc>
            <filename>bug-73190-20120126183728.patch</filename>
            <type>text/plain</type>
            <size>49119</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1ODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWY0ZTQyMTMxNjViOGJh
OGI3NWU4YWNiYjQxYTgyNzVkZTg4NjgwZC4uNGE1MmY0MWQwNzQwZDRjZjc1ZDAxYjM4M2RhMTg3
MDVkMDU2ZTU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTAxLTI2ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIDxzdHls
ZSBzY29wZWQ+OiBJbXBsZW1lbnQgc2NvcGVkIHN0eWxlc2hlZXRzIGFuZCBiYXNpYyBhcHBsaWNh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMx
OTAKKworICAgICAgICBJbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgPHN0eWxlIHNjb3BlZD46Cisg
ICAgICAgIFN0b3JlIHNjb3BlZCBzdHlsZSBzaGVldHMgaW4gYSBzZXBhcmF0ZSBkYXRhIHN0cnVj
dHVyZSBTY29wZWRSdWxlU2V0cy4KKyAgICAgICAgQWRkIGEgdmVjdG9yIHN0YWNrIHRvIENTU1N0
eWxlU2VsZWN0b3IgdGhhdCBrZWVwcyB0cmFjayBvZiBlbmNvdW50ZXJlZCBzY29waW5nIGVsZW1l
bnRzLiBUaGlzIGlzCisgICAgICAgIHVzZWQgZm9yIE8oMSkgYWNjZXNzIHRvIGFsbCByZWxldmFu
dCBzdHlsZSBzaGVldHMgZm9yIGEgZ2l2ZW4gZWxlbWVudC4KKyAgICAgICAgQWRhcHQgbWF0Y2hp
bmcgb2YgYXV0aG9yIHN0eWxlIHNoZWV0cyB0byBhbHNvIGNvbnN1bHQgYXBwcm9wcmlhdGUgc2Nv
cGVkIHNoZWV0cy4KKyAgICAgICAgRmluYWxseSwgcHJldmVudCBzdHlsZSBzaGFyaW5nIGZyb20g
Y3Jvc3NpbmcgaW50by9vdXQgb2Ygc2NvcGVkIHN0eWxlIGJvdW5kYXJpZXMuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvY3NzL3N0
eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMuaHRtbAorICAgICAgICAgICAgICAg
ZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbAorICAgICAgICAg
ICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0
LXNjb3BlZC5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0
eWxlU2VsZWN0b3IpOiBhZGQgY29kZSBmb3Igc2NvcGVkIHN0eWxlIHNoZWV0cworICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdEZlYXR1cmVzKTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJt
aW5lU2NvcGluZ0VsZW1lbnQpOiBkZXRlcm1pbmUgd2hldGhlciBhbiBhdXRob3Igc2hlZXQgaXMg
c2NvcGVkIChhbmQgdG8gd2hpY2ggc2NvcGUpLCBvciBnbG9iYWwKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKTogYWRkIGNvZGUgZm9y
IHNjb3BlZCBzdHlsZSBzaGVldHMKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OnB1c2hQYXJlbnQpOiBzaW1wbGlmeSBhbmQgcmVmYWN0b3IgU2VsZWN0b3JDaGVja2VyOjpwdXNo
UGFyZW50LCBhcyBjb2RlIGluIENTU3R5bGVTZWxlY3RvciBuZWVkcyBwYXJ0aWFsIGFjY2Vzcwor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFyZW50KTogZGl0dG8KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcyk6IGhlbHBlciBmdW5jdGlvbgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yUnVsZVNldEl0
ZXJhdG9yOjpBdXRob3JSdWxlU2V0SXRlcmF0b3IpOiBzdHJ1Y3QgaG9sZGluZyBpbmZvcm1hdGlv
biBuZWNlc3NhcnkgdG8gaXRlcmF0ZSBvdmVyIGFsbCByZWxldmFudCBzY29wZWQgUnVsZVNldAor
ICAgICAgICAoQXV0aG9yUnVsZVNldEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhv
clJ1bGVTZXRJdGVyYXRvcjo6cnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjppbml0QXV0aG9yUnVsZVNldEl0ZXJhdG9yKTogaW5pdGlhbGl6ZSBhbiBBdXRob3JS
dWxlU2V0SXRlcmF0b3IgdG8gcG9pbnQgYXQgdGhlIGZpcnN0IHJlbGV2YW50IFJ1bGVTZXQKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFkdmFuY2VBdXRob3JSdWxlU2V0SXRl
cmF0b3IpOiBtb3ZlIGFuIEF1dGhvclJ1bGVTZXRJdGVyYXRvciB0byB0aGUgbmV4dCByZWxldmFu
dCBSdWxlU2V0CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhv
clJ1bGVzKTogdXNlIEF1dGhvclJ1bGVTZXRJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYWxsIHJl
bGV2YW50IFJ1bGVTZXRzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aFJ1bGVzKTogYWRhcHQgZm9yIHNjb3BlZCBzdHlsZSBydWxlcworICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6IGRpdHRvCisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KTogcHJldmVudCBzdHlsZSBzaGFy
aW5nIGFjcm9zcyBzY29wZSBib3VuZGFyaWVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlU2hhcmVkU3R5bGUpOiBkaXR0bworICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KTogY2hhbmdl
ZCBjYWxsIHRvIG1hdGNoQXV0aG9yUnVsZXMKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OnN0eWxlRm9yUGFnZSk6IGFkZCBjb21tZW50CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpjaGVja1JlZ2lvblN0eWxlKTogYWRkIGdsb2JhbCBzY29wZSBwYXJhbWV0
ZXIKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNG
b3JFbGVtZW50KTogY2hhbmdlZCBjYWxsIHRvIG1hdGNoQXV0aG9yUnVsZXMKKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KTogYWRhcHQgZm9yIHNjb3BlZCBzdHls
ZSBydWxlcworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgICgpOgor
ICAgICAgICAoQ1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjpzY29wZWRSdWxlU2V0Rm9yRWxlbWVudCk6CisgICAgICAgICogY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnNldHVwUGFy
ZW50U3RhY2spOiBzZXQgdXAgdGhlIHBhcmVudCBzdGFjayAocmVmYWN0b3JpbmcpCisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJlbnQpOiBzaW1wbGlmeSBhbmQgcmVm
YWN0b3IKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgICgpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpwb3BQYXJlbnQpOiBkaXR0bworICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpwYXJlbnRTdGFja0lzRW1wdHkpOiBkaXR0bwor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpwYXJlbnRTdGFja0lzQ29uc2lzdGVu
dCk6IG1ha2UgcGFyYW1ldGVyIGNvbnN0CisKIDIwMTItMDEtMjUgIFJvbGFuZCBTdGVpbmVyICA8
cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgPHN0eWxlIHNjb3BlZD46IElt
cGxlbWVudCByZWdpc3RlcmluZyBvZiA8c3R5bGUgc2NvcGVkPiB3aXRoIHRoZSBzY29waW5nIGVs
ZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA4ZDQ0Y2E2
MjExZTdlZDgzY2FmZTUzNTlkMTMzNzZkMTRjMGVmYzIzLi5kMzU5YmNiYmIwNjViZjc3NDBjZTZk
NzNkNTRmYmFiMmMwMzg5OTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIktl
eWZyYW1lTGlzdC5oIgpAQCAtMjIyLDcgKzIyMywxMSBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVm
IEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBB
dG9tUnVsZU1hcDsKIAorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgdm9pZCBhZGRSdWxl
c0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIENT
U1N0eWxlU2VsZWN0b3IqID0gMCwgY29uc3QgRWxlbWVudCogPSAwKTsKKyNlbHNlCiAgICAgdm9p
ZCBhZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1
YXRvciYsIENTU1N0eWxlU2VsZWN0b3IqID0gMCk7CisjZW5kaWYKIAogICAgIHZvaWQgYWRkU3R5
bGVSdWxlKENTU1N0eWxlUnVsZSopOwogICAgIHZvaWQgYWRkUnVsZShDU1NTdHlsZVJ1bGUqLCBD
U1NTZWxlY3RvciopOwpAQCAtMzY4LDYgKzM3Myw4IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0
eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVl
CiAKICAgICBtX2F1dGhvclN0eWxlID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOwogICAgIC8vIEFk
ZGluZyBydWxlcyBmcm9tIG11bHRpcGxlIHNoZWV0cywgc2hyaW5rIGF0IHRoZSBlbmQuCisgICAg
Ly8gQWRkaW5nIGdsb2JhbCBydWxlcyBmcm9tIG11bHRpcGxlIHNoZWV0cywgc2hyaW5rIGF0IHRo
ZSBlbmQuCisgICAgLy8gTm90ZSB0aGF0IHRoZXJlIHVzdWFsbHkgaXMgb25seSAxIHNoZWV0IGZv
ciBzY29wZWQgcnVsZXMsIHNvIGF1dG8tc2hyaW5rLXRvLWZpdCBpcyBmaW5lLgogICAgIG1fYXV0
aG9yU3R5bGUtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKIAogICAgIC8vIEZJWE1FOiBUaGlz
IHN1Y2tzISBUaGUgdXNlciBzaGVldCBpcyByZXBhcnNlZCBldmVyeSB0aW1lIQpAQCAtMzk3LDgg
KzQwNCwxMCBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBk
b2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAgICAgICBtX3VzZXJTdHlsZSA9
IHRlbXBVc2VyU3R5bGUucmVsZWFzZSgpOwogCiAgICAgLy8gQWRkIHJ1bGVzIGZyb20gZWxlbWVu
dHMgbGlrZSBTVkcncyA8Zm9udC1mYWNlPgotICAgIGlmIChtYXBwZWRFbGVtZW50U2hlZXQpCisg
ICAgaWYgKG1hcHBlZEVsZW1lbnRTaGVldCkgeworICAgICAgICAvLyBGSVhNRTogc2VlIGlmIHN0
eWxlIHNjb3BlcyBjYW4vc2hvdWxkIGJlIGFkZGVkIGhlcmUuCiAgICAgICAgIG1fYXV0aG9yU3R5
bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1hcHBlZEVsZW1lbnRTaGVldCwgKm1fbWVkaXVtLCB0aGlz
KTsKKyAgICB9CiAKICAgICAvLyBhZGQgc3R5bGVzaGVldHMgZnJvbSBkb2N1bWVudAogICAgIGFw
cGVuZEF1dGhvclN0eWxlc2hlZXRzKDAsIHN0eWxlU2hlZXRzLT52ZWN0b3IoKSk7CkBAIC00MjMs
NiArNDMyLDEwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdEZlYXR1cmVzKCkKICAg
ICAvLyBzaGFyaW5nIGNhbmRpZGF0ZXMuCiAgICAgbV9mZWF0dXJlcy5hZGQoZGVmYXVsdFN0eWxl
LT5mZWF0dXJlcygpKTsKICAgICBtX2ZlYXR1cmVzLmFkZChtX2F1dGhvclN0eWxlLT5mZWF0dXJl
cygpKTsKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIGZvciAoU2NvcGVkUnVsZVNldE1h
cDo6aXRlcmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5iZWdpbigpOyBpdCAhPSBtX3Nj
b3BlZEF1dGhvclN0eWxlcy5lbmQoKTsgKytpdCkKKyAgICAgICAgbV9mZWF0dXJlcy5hZGQoaXQt
PnNlY29uZC0+ZmVhdHVyZXMoKSk7CisjZW5kaWYKICAgICBpZiAobV91c2VyU3R5bGUpCiAgICAg
ICAgIG1fZmVhdHVyZXMuYWRkKG1fdXNlclN0eWxlLT5mZWF0dXJlcygpKTsKIApAQCAtNDMwLDYg
KzQ0MywyMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RGZWF0dXJlcygpCiAgICAg
bV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQgPSBtYWtlUnVsZVNldChtX2ZlYXR1cmVzLnVuY29t
bW9uQXR0cmlidXRlUnVsZXMpOwogfQogCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKK0VsZW1l
bnQqIENTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVNjb3BpbmdFbGVtZW50KGNvbnN0IENTU1N0
eWxlU2hlZXQqIHNoZWV0KQoreworICAgIEFTU0VSVChzaGVldCk7CisKKyAgICBOb2RlKiBvd25l
ck5vZGUgPSBzaGVldC0+ZmluZFN0eWxlU2hlZXRPd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVy
Tm9kZSB8fCAhb3duZXJOb2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIVE1M
U3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50
Kj4ob3duZXJOb2RlKTsKKyAgICBpZiAoIXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwor
fQorI2VuZGlmCisKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVl
dHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYg
c3R5bGVzaGVldHMpCiB7CiAgICAgLy8gVGhpcyBoYW5kbGVzIHNoZWV0cyBhZGRlZCB0byB0aGUg
ZW5kIG9mIHRoZSBzdHlsZXNoZWV0IGxpc3Qgb25seS4gSW4gb3RoZXIgY2FzZXMgdGhlIHN0eWxl
IHJlc29sdmVyCkBAIC00MzgsNyArNDY4LDE4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBw
ZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3ROZXc7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAg
aWYgKCFzdHlsZXNoZWV0c1tpXS0+aXNDU1NTdHlsZVNoZWV0KCkgfHwgc3R5bGVzaGVldHNbaV0t
PmRpc2FibGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9hdXRob3JTdHls
ZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlc2hl
ZXRzW2ldLmdldCgpKSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgQ1NTU3R5bGVTaGVldCog
Y3NzU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVzaGVldHNbaV0uZ2V0
KCkpOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgICAgIGNvbnN0IEVsZW1lbnQqIHNj
b3BlID0gZGV0ZXJtaW5lU2NvcGluZ0VsZW1lbnQoY3NzU2hlZXQpOworICAgICAgICBpZiAoc2Nv
cGUpIHsKKyAgICAgICAgICAgIHBhaXI8U2NvcGVkUnVsZVNldE1hcDo6aXRlcmF0b3IsIGJvb2w+
IGFkZFJlc3VsdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmFkZChzY29wZSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBpZiAoYWRkUmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAgICAgICBhZGRSZXN1
bHQuZmlyc3QtPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KCkpOworICAgICAgICAgICAg
YWRkUmVzdWx0LmZpcnN0LT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9t
ZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisj
ZW5kaWYKKyAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQs
ICptX21lZGl1bSwgdGhpcyk7CiAgICAgfQogICAgIG1fYXV0aG9yU3R5bGUtPnNocmlua1RvRml0
KCk7CiAgICAgY29sbGVjdEZlYXR1cmVzKCk7CkBAIC00NDcsNiArNDg4LDUxIEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcs
IGNvbnN0IFZlY3RvcjxSCiAgICAgICAgIGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCkt
PmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogfQogCit2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OnB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KQoreworICAgIC8vIFdlIGFyZSBub3QgYWx3
YXlzIGludm9rZWQgY29uc2lzdGVudGx5LiBGb3IgZXhhbXBsZSwgc2NyaXB0IGV4ZWN1dGlvbiBj
YW4gY2F1c2UgdXMgdG8gZW50ZXIKKyAgICAvLyBzdHlsZSByZWNhbGMgaW4gdGhlIG1pZGRsZSBv
ZiB0cmVlIGJ1aWxkaW5nLiBXZSBtYXkgYWxzbyBiZSBpbnZva2VkIGZyb20gc29tZXdoZXJlIHdp
dGhpbiB0aGUgdHJlZS4KKyAgICAvLyBSZXNldCB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLCBvciBp
ZiB3ZSBzZWUgYSBuZXcgcm9vdCBlbGVtZW50LgorICAgIGlmICghcGFyZW50LT5wYXJlbnRPckhv
c3RFbGVtZW50KCkgfHwgbV9jaGVja2VyLnBhcmVudFN0YWNrSXNFbXB0eSgpKSB7CisgICAgICAg
IG1fY2hlY2tlci5zZXR1cFBhcmVudFN0YWNrKHBhcmVudCk7CisjaWYgRU5BQkxFKFNUWUxFX1ND
T1BFRCkKKyAgICAgICAgbV9zY29waW5nRWxlbWVudFN0YWNrLnJlc2l6ZSgwKTsKKyAgICAgICAg
Zm9yICg7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCkpIHsK
KyAgICAgICAgICAgIGlmIChwYXJlbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpIHsKKyAg
ICAgICAgICAgICAgICBSdWxlU2V0KiBydWxlU2V0ID0gc2NvcGVkUnVsZVNldEZvckVsZW1lbnQo
cGFyZW50KTsKKyAgICAgICAgICAgICAgICBpZiAocnVsZVNldCkKKyAgICAgICAgICAgICAgICAg
ICAgbV9zY29waW5nRWxlbWVudFN0YWNrLmFwcGVuZChzdGQ6OnBhaXI8Y29uc3QgRWxlbWVudCos
IFJ1bGVTZXQqPihwYXJlbnQsIHJ1bGVTZXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBtX3Njb3BpbmdFbGVtZW50U3RhY2sucmV2ZXJzZSgpOworI2VuZGlmCisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IHB1c2ggdGhlIG5ldyBwYXJl
bnQuIEhvd2V2ZXIsIG5vdGUgdGhhdCB3ZSBtYXkgZ2V0IGludm9rZWQgZm9yIHNvbWUgcmFuZG9t
IGVsZW1lbnRzCisgICAgLy8gaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2
ZS4gUGF1c2UgbWFpbnRhaW5pbmcgdGhlIHN0YWNrIGluIHRoaXMgY2FzZS4KKyAgICBtX2NoZWNr
ZXIucHVzaFBhcmVudChwYXJlbnQpOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYg
KG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJlbnQpICYmIHBhcmVudC0+aGFz
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkgeworICAgICAgICBSdWxlU2V0KiBydWxlU2V0ID0gc2Nv
cGVkUnVsZVNldEZvckVsZW1lbnQocGFyZW50KTsKKyAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAg
ICAgICAgICBtX3Njb3BpbmdFbGVtZW50U3RhY2suYXBwZW5kKHN0ZDo6cGFpcjxjb25zdCBFbGVt
ZW50KiwgUnVsZVNldCo+KHBhcmVudCwgcnVsZVNldCkpOworICAgIH0KKyNlbmRpZgorfQorCit2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OnBvcFBhcmVudChFbGVtZW50KiBwYXJlbnQpCit7CisgICAg
Ly8gTm90ZSB0aGF0IHdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSByYW5kb20gZWxlbWVudHMg
aW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4KKyAgICAvLyBQYXVzZSBt
YWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgorICAgIGlmIChtX2NoZWNrZXIucGFy
ZW50U3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkgeworICAgICAgICBtX2NoZWNrZXIucG9wUGFy
ZW50KCk7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAgICAgaWYgKCFtX3Njb3BpbmdF
bGVtZW50U3RhY2suaXNFbXB0eSgpICYmIHBhcmVudCA9PSBtX3Njb3BpbmdFbGVtZW50U3RhY2su
bGFzdCgpLmZpcnN0KQorICAgICAgICAgICAgbV9zY29waW5nRWxlbWVudFN0YWNrLnJlbW92ZUxh
c3QoKTsKKyNlbmRpZgorICAgIH0KK30KKwogLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgc3R5bGUg
c2V0dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCiB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFkZEtleWZyYW1lU3R5bGUoUGFzc1JlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlPiBy
dWxlKQogewpAQCAtNjg3LDE2ICs3NzMsOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UgogICAg
IH0KIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVz
LCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcygpCiB7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKLQotICAgIGlmICghcnVsZXMg
fHwgIW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXMocnVsZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxl
cyk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24ocnVsZXMsIGZpcnN0UnVsZUlu
ZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0KICAgICBpZiAobV9tYXRj
aGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTcyMyw2ICs4MDEsMTI2
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50
JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0CiAgICAgfQogfQogCisjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkKK3N0cnVjdCBBdXRob3JSdWxlU2V0SXRlcmF0b3IgeworICAgIEF1dGhvclJ1bGVT
ZXRJdGVyYXRvcigpIDogbV9zY29wZSgwKSwgbV9ydWxlU2V0KDApLCBtX3N0YWNrSW5kZXgoLTEp
CisgICAgeyB9CisKKyAgICBpbmxpbmUgUnVsZVNldCogcnVsZVNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcnVsZVNldDsgfQorCisgICAgY29uc3QgRWxlbWVudCogbV9zY29wZTsKKyAgICBSdWxlU2V0
KiBtX3J1bGVTZXQ7CisgICAgaW50IG1fc3RhY2tJbmRleDsKK307CisKK3ZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6aW5pdEF1dGhvclJ1bGVTZXRJdGVyYXRvcihjb25zdCBFbGVtZW50KiBlbGVtZW50
LCBBdXRob3JSdWxlU2V0SXRlcmF0b3ImIGl0KQoreworICAgIC8vIFNob3J0LWN1dCB0byBnbG9i
YWwgcnVsZSBzZXQgb25seSBpZiBzY29wZWQgc3R5bGVzIGFyZW4ndCBiZWluZyB1c2VkLgorICAg
IGlmIChtX3Njb3BlZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaXQubV9ydWxl
U2V0ID0gbV9hdXRob3JTdHlsZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAv
LyBTZXQgdXAgZmFzdCBwYXRoIGlmIHZpYWJsZSAoaW5kaWNhdGVkIGJ5IG1fc3RhY2tJbmRleCA+
PSAwKQorICAgIGlmIChtX2NoZWNrZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpKSkgeworICAgICAgICAvLyBTdGFydCBhdCBpbmRleCAxIGJleW9uZCB0
aGUgbGFzdCwgYmVjYXVzZSBpdCB3aWxsIGdldCBwcmUtZGVjcmVtZW50ZWQgb24gYWR2YW5jZS4K
KyAgICAgICAgaXQubV9zdGFja0luZGV4ID0gbV9zY29waW5nRWxlbWVudFN0YWNrLnNpemUoKTsK
KyAgICB9CisgICAgLy8gU3RhcnQgd2l0aCBjdXJyZW50IGVsZW1lbnQuCisgICAgaXQubV9zY29w
ZSA9IGVsZW1lbnQ7CisgICAgaWYgKGVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkp
IHsKKyAgICAgICAgaXQubV9ydWxlU2V0ID0gc2NvcGVkUnVsZVNldEZvckVsZW1lbnQoZWxlbWVu
dCk7CisgICAgICAgIEFTU0VSVChpdC5tX3J1bGVTZXQpOworICAgIH0KKyAgICAvLyBJZiB0aGUg
Y3VycmVudCBlbGVtZW50IGlzbid0IGEgc3R5bGUgc2NvcGUsIGFkdmFuY2UgaW1tZWRpYXRlbHku
CisgICAgaWYgKCFpdC5tX3J1bGVTZXQpCisgICAgICAgIGFkdmFuY2VBdXRob3JSdWxlU2V0SXRl
cmF0b3IoaXQpOworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkdmFuY2VBdXRob3JSdWxl
U2V0SXRlcmF0b3IoQXV0aG9yUnVsZVNldEl0ZXJhdG9yJiBpdCkKK3sKKyAgICBpZiAoaXQubV9z
dGFja0luZGV4ID49IDApIHsKKyAgICAgICAgLy8gRmFzdCBwYXRoOiBpdGVyYXRlIG1fc2NvcGlu
Z0VsZW1lbnRTdGFjay4KKyAgICAgICAgLS1pdC5tX3N0YWNrSW5kZXg7CisgICAgICAgIGlmIChp
dC5tX3N0YWNrSW5kZXggPj0gMCkgeworICAgICAgICAgICAgaXQubV9zY29wZSA9IG1fc2NvcGlu
Z0VsZW1lbnRTdGFja1tpdC5tX3N0YWNrSW5kZXhdLmZpcnN0OworICAgICAgICAgICAgaXQubV9y
dWxlU2V0ID0gbV9zY29waW5nRWxlbWVudFN0YWNrW2l0Lm1fc3RhY2tJbmRleF0uc2Vjb25kOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFdlbnQgcGFzdCBsYXN0
IGVudHJ5IC0+IGNvbnRpbnVlIHdpdGggZ2xvYmFsIHN0eWxlIHJ1bGVzIGJlbG93LgorICAgIH0g
ZWxzZSBpZiAoaXQubV9zY29wZSkgeworICAgICAgICAvLyBTbG93IHBhdGg6IGNsaW1iIERPTSB0
cmVlLgorICAgICAgICBmb3IgKGl0Lm1fc2NvcGUgPSBpdC5tX3Njb3BlLT5wYXJlbnRFbGVtZW50
KCk7IGl0Lm1fc2NvcGU7IGl0Lm1fc2NvcGUgPSBpdC5tX3Njb3BlLT5wYXJlbnRFbGVtZW50KCkp
IHsKKyAgICAgICAgICAgIGlmICghaXQubV9zY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGl0Lm1fcnVsZVNldCA9
IHNjb3BlZFJ1bGVTZXRGb3JFbGVtZW50KGl0Lm1fc2NvcGUpOworICAgICAgICAgICAgQVNTRVJU
KGl0Lm1fcnVsZVNldCk7CisgICAgICAgICAgICBpZiAoaXQubV9ydWxlU2V0KQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZW50IHBhc3Qgcm9vdCBub2Rl
IC0+IGNvbnRpbnVlIHdpdGggZ2xvYmFsIHN0eWxlIHJ1bGVzIGJlbG93LgorICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIFdlIGN1cnJlbnRseSBhcmUgYXQgdGhlIGdsb2JhbCBhdXRob3Igc3R5bGVz
IC0+IHNldCBSdWxlU2V0KiB0byAwLCBpbiBvcmRlciB0byBzaWduYWwgImVuZCIuCisgICAgICAg
IEFTU0VSVChpdC5tX3J1bGVTZXQpOworICAgICAgICBBU1NFUlQoIWl0Lm1fc2NvcGUpOworICAg
ICAgICBpdC5tX3J1bGVTZXQgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIERy
b3BwZWQgb2ZmIGZyb20gZmFzdCBvciBzbG93IHBhdGggLT4gc3dpdGNoIHRvIGdsb2JhbCBzdHls
ZSBhdCB0aGUgZW5kCisgICAgaXQubV9ydWxlU2V0ID0gbV9hdXRob3JTdHlsZS5nZXQoKTsKKyAg
ICBpdC5tX3Njb3BlID0gMDsKK30KKyNlbHNlCitzdHJ1Y3QgQXV0aG9yUnVsZVNldEl0ZXJhdG9y
IHsKKyAgICBBdXRob3JSdWxlU2V0SXRlcmF0b3IoKSA6IG1fcnVsZVNldCgwKQorICAgIHsgfQor
CisgICAgaW5saW5lIFJ1bGVTZXQqIHJ1bGVTZXQoKSBjb25zdCB7IHJldHVybiBtX3J1bGVTZXQ7
IH0KKworICAgIFJ1bGVTZXQqIG1fcnVsZVNldDsKK307CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6aW5pdEF1dGhvclJ1bGVTZXRJdGVyYXRvcihjb25zdCBFbGVtZW50KiwgQXV0aG9yUnVsZVNl
dEl0ZXJhdG9yJiBpdCkKK3sKKyAgICBpdC5tX3J1bGVTZXQgPSBtX2F1dGhvclN0eWxlLmdldCgp
OworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkdmFuY2VBdXRob3JSdWxlU2V0SXRlcmF0
b3IoQXV0aG9yUnVsZVNldEl0ZXJhdG9yJiBpdCkKK3sKKyAgICBBU1NFUlQoaXQubV9ydWxlU2V0
KTsKKyAgICBpdC5tX3J1bGVTZXQgPSAwOworfQorI2VuZGlmCisKK3ZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hBdXRob3JSdWxlcyhpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxl
SW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xl
YXIoKTsKKworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBN
YXRjaCBnbG9iYWwgYW5kIHNjb3BlZCBhdXRob3IgcnVsZXMuCisgICAgQXV0aG9yUnVsZVNldEl0
ZXJhdG9yIGl0OworICAgIGZvciAoaW5pdEF1dGhvclJ1bGVTZXRJdGVyYXRvcihtX2VsZW1lbnQs
IGl0KTsgaXQucnVsZVNldCgpOyBhZHZhbmNlQXV0aG9yUnVsZVNldEl0ZXJhdG9yKGl0KSkgewor
ICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhpdC5ydWxlU2V0KCksIGZpcnN0UnVsZUluZGV4
LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yUmVnaW9uKGl0LnJ1bGVTZXQoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxl
SW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB9CisKKyAgICBzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMoKTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1
bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKwor
ICAgIGlmICghcnVsZXMgfHwgIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXMocnVsZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBp
bmNsdWRlRW1wdHlSdWxlcyk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24ocnVs
ZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisK
KyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoKTsKK30KKwogY2xhc3MgTWF0Y2hpbmdV
QVJ1bGVzU2NvcGUgewogcHVibGljOgogICAgIE1hdGNoaW5nVUFSdWxlc1Njb3BlKCk7CkBAIC04
NzUsNyArMTA3Myw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0KQogICAgIAogICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Ig
c2hlZXRzIG5leHQuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAg
ICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRo
b3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7CisgICAgICAgIG1h
dGNoQXV0aG9yUnVsZXMocmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5n
ZXMubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKIAogICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5l
IHN0eWxlIGF0dHJpYnV0ZS4KICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYg
bV9zdHlsZWRFbGVtZW50KSB7CkBAIC05MzgsNiArMTEzNiwxMCBAQCBOb2RlKiBDU1NTdHlsZVNl
bGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0
ZWROb2RlQwogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5p
c1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNUWUxFX1ND
T1BFRCkKKyAgICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAg
ICByZXR1cm4gMDsKKyNlbmRpZgogICAgIFN0eWxlZEVsZW1lbnQqIHAgPSBzdGF0aWNfY2FzdDxT
dHlsZWRFbGVtZW50Kj4ocGFyZW50KTsKICAgICBpZiAocC0+aW5saW5lU3R5bGVEZWNsKCkpCiAg
ICAgICAgIHJldHVybiAwOwpAQCAtMTEwMSw2ICsxMzAzLDExIEBAIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNv
bnN0CiAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNv
bnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICBpZiAoZWxlbWVu
dC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCisKICAgICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCk7CiAKICAgICBpZiAoaXNDb250cm9sICE9IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKQEAgLTExNzIsNiArMTM3OSwxMCBAQCBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rv
cjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAocGFyZW50
U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiAwOwor
I2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzU2Nv
cGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKIAogICAgIC8v
IENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0aGVpciBjb3VzaW5zLgogICAgIHVuc2lnbmVk
IGNvdW50ID0gMDsKQEAgLTE0OTEsNyArMTcwMiw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8s
CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKICAgICAgICAgbWF0Y2hS
dWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGZhbHNlKTsKLSAgICAgICAgbWF0Y2hS
dWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JS
dWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAg
bWF0Y2hBdXRob3JSdWxlcyhtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRj
aFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAo
bV9tYXRjaGVkRGVjbHMuaXNFbXB0eSgpKQpAQCAtMTUyOCw2ICsxNzM5LDcgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5k
ZXgpCiAgICAgY29uc3QgU3RyaW5nIHBhZ2UgPSBwYWdlTmFtZShwYWdlSW5kZXgpOwogICAgIG1h
dGNoUGFnZVJ1bGVzKGRlZmF1bHRQcmludFN0eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwog
ICAgIG1hdGNoUGFnZVJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBh
Z2UpOworICAgIC8vIE9ubHkgY29uc2lkZXIgdGhlIGdsb2JhbCBhdXRob3IgUnVsZVNldCBmb3Ig
QHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRNTDUgc3BlYy4KICAgICBtYXRjaFBhZ2VSdWxlcyht
X2F1dGhvclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwogICAgIG1fbGluZUhl
aWdodFZhbHVlID0gMDsKICAgICBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZTsKQEAgLTE3NzEs
NiArMTk4Myw5IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50CiAKIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Y2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiByZWdpb25FbGVtZW50KQogeworICAgIC8v
IEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9m
IHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQsCisgICAgLy8gc28gYWxsIHJlZ2lv
biBydWxlcyBhcmUgZ2xvYmFsIGJ5IGRlZmF1bHQuIFZlcmlmeSB3aGV0aGVyIHRoYXQgY2FuIHN0
YW5kIG9yIG5lZWRzIGNoYW5naW5nLgorCiAgICAgdW5zaWduZWQgcnVsZXNTaXplID0gbV9hdXRo
b3JTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChtX2F1
dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0
KCkpOwpAQCAtMTg0MSw3ICsyMDU2LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5
bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwKICAgICAg
ICAgbV9zYW1lT3JpZ2luT25seSA9ICEocnVsZXNUb0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1
bGVzKTsKIAogICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KLSAg
ICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBkdW1teS5yYW5nZXMuZmlyc3RB
dXRob3JSdWxlLCBkdW1teS5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIHJ1bGVzVG9JbmNsdWRlICYg
RW1wdHlDU1NSdWxlcyk7CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXkucmFuZ2VzLmZp
cnN0QXV0aG9yUnVsZSwgZHVtbXkucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBydWxlc1RvSW5jbHVk
ZSAmIEVtcHR5Q1NTUnVsZXMpOwogCiAgICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsK
ICAgICB9CkBAIC0yMTE5LDEwICsyMzM0LDE5IEBAIHZvaWQgUnVsZVNldDo6YWRkUmVnaW9uUnVs
ZShXZWJLaXRDU1NSZWdpb25SdWxlKiBydWxlKQogICAgIG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVs
ZVNldHMuYXBwZW5kKFJ1bGVTZXRTZWxlY3RvclBhaXIocnVsZS0+c2VsZWN0b3JMaXN0KCkuZmly
c3QoKSwgcmVnaW9uUnVsZVNldCkpOwogfQogCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKK3Zv
aWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0
IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxl
Y3RvciwgY29uc3QgRWxlbWVudCogc2NvcGUpCit7CisjZWxzZQogdm9pZCBSdWxlU2V0OjphZGRS
dWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1
YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yKQogewogICAgIEFT
U0VSVChzaGVldCk7CisgICAgY29uc3QgRWxlbWVudCogY29uc3Qgc2NvcGUgPSAwOworI2VuZGlm
CiAKKyAgICBpZiAoIXNoZWV0KQorICAgICAgICByZXR1cm47CisgCiAgICAgLy8gTm8gbWVkaWEg
aW1wbGllcyAiYWxsIiwgYnV0IGlmIGEgbWVkaWEgbGlzdCBleGlzdHMgaXQgbXVzdAogICAgIC8v
IGNvbnRhaW4gb3VyIGN1cnJlbnQgbWVkaXVtCiAgICAgaWYgKHNoZWV0LT5tZWRpYSgpICYmICFt
ZWRpdW0uZXZhbChzaGVldC0+bWVkaWEoKSwgc3R5bGVTZWxlY3RvcikpCkBAIC0yMTM4LDggKzIz
NjIsMTMgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBz
aGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICAgICAgICAgIGFkZFBhZ2VSdWxl
KHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4ocnVsZSkpOwogICAgICAgICBlbHNlIGlmIChydWxl
LT5pc0ltcG9ydFJ1bGUoKSkgewogICAgICAgICAgICAgQ1NTSW1wb3J0UnVsZSogaW1wb3J0ID0g
c3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KHJ1bGUpOwotICAgICAgICAgICAgaWYgKGltcG9y
dC0+c3R5bGVTaGVldCgpICYmICghaW1wb3J0LT5tZWRpYSgpIHx8IG1lZGl1bS5ldmFsKGltcG9y
dC0+bWVkaWEoKSwgc3R5bGVTZWxlY3RvcikpKQorICAgICAgICAgICAgaWYgKGltcG9ydC0+c3R5
bGVTaGVldCgpICYmICghaW1wb3J0LT5tZWRpYSgpIHx8IG1lZGl1bS5ldmFsKGltcG9ydC0+bWVk
aWEoKSwgc3R5bGVTZWxlY3RvcikpKSB7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAg
ICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChpbXBvcnQtPnN0eWxlU2hlZXQoKSwgbWVkaXVt
LCBzdHlsZVNlbGVjdG9yLCBzY29wZSk7CisjZWxzZQogICAgICAgICAgICAgICAgIGFkZFJ1bGVz
RnJvbVNoZWV0KGltcG9ydC0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IpOwor
I2VuZGlmCisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAocnVsZS0+
aXNNZWRpYVJ1bGUoKSkgewogICAgICAgICAgICAgQ1NTTWVkaWFSdWxlKiByID0gc3RhdGljX2Nh
c3Q8Q1NTTWVkaWFSdWxlKj4ocnVsZSk7CkBAIC0yMTU1LDI0ICsyMzg0LDQwIEBAIHZvaWQgUnVs
ZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlh
UXVlcnlFdmFsdWF0b3ImCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRQYWdlUnVsZShzdGF0
aWNfY2FzdDxDU1NQYWdlUnVsZSo+KGNoaWxkSXRlbSkpOwogICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChjaGlsZEl0ZW0tPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3Rvcikgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQu
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBh
ZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50
LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1NTRm9u
dEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihj
aGlsZEl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNl
bGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlvbkNhY2hl
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRJdGVtLT5pc0tleWZyYW1l
c1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBB
ZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRShCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNj
b3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRp
Y19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGlsZEl0ZW0pKTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gICAvLyBmb3IgcnVsZXMKICAgICAgICAgICAg
IH0gICAvLyBpZiBydWxlcwogICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzRm9udEZhY2VSdWxl
KCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNl
IHRvIG91ciBzZXQuCisgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBh
ZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50
LgorICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2Fz
dDxDU1NGb250RmFjZVJ1bGUqPihydWxlKTsKICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZv
bnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKICAgICAgICAgICAg
IHN0eWxlU2VsZWN0b3ItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFyYXRpb25DYWNoZSgpOwotICAg
ICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpKQorICAgICAgICB9IGVsc2Ug
aWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRSAoQlVH
IDcyNDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hl
ZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHls
ZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4ocnVsZSkpOwotICAgICAgICBl
bHNlIGlmIChydWxlLT5pc1JlZ2lvblJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKQorICAgICAgICB9
IGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9uUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9u
IHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAg
ICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBhZGRS
ZWdpb25SdWxlKHN0YXRpY19jYXN0PFdlYktpdENTU1JlZ2lvblJ1bGUqPihydWxlKSk7CisgICAg
ICAgIH0KICAgICB9CiAgICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCkKICAgICAgICAg
c2hyaW5rVG9GaXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCmluZGV4IDM1
MmE5ZTQ2NDYwOTdlOWIyYzBiYzZjNTQ3ZjdmMWJjMWRjMmY5MTQuLjdhY2U2ZGQ1OTJiMzhhNjU3
ODg3NTczYWQ0NWQyOTYzMGUxNjdhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuaApAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gRVNtYXJ0
TWluaW11bUZvckZvbnRTaXplIHsgRG9Ob3RVc2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSwgVXNl
U21hcnRNaW5pbXVtRm9yRm9udEZpemUgfTsKIAorc3RydWN0IEF1dGhvclJ1bGVTZXRJdGVyYXRv
cjsgCiBjbGFzcyBDU1NGb250U2VsZWN0b3I7CiBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjsKIGNsYXNzIENTU1BhZ2VSdWxlOwpAQCAtNjcsNiArNjgsNyBAQCBjbGFzcyBOb2RlOwog
Y2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3MgUnVsZURhdGE7CiBjbGFzcyBSdWxlU2V0OworY2xh
c3MgU2NvcGVkUnVsZVNldHM7CiBjbGFzcyBTZXR0aW5nczsKIGNsYXNzIFN0eWxlSW1hZ2U7CiBj
bGFzcyBTdHlsZVBlbmRpbmdJbWFnZTsKQEAgLTEwNiw5ICsxMDgsMTMgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBzdHJpY3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcyk7CiAgICAgfkNTU1N0eWxlU2VsZWN0b3IoKTsKIAorI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCisgICAgc3RhdGljIEVsZW1lbnQqIGRldGVybWluZVNjb3BpbmdFbGVtZW50KGNv
bnN0IENTU1N0eWxlU2hlZXQqKTsKKyNlbmRpZgorCiAgICAgLy8gVXNpbmcgdGhlc2UgZHVyaW5n
IHRyZWUgd2FsayB3aWxsIGFsbG93IHN0eWxlIHNlbGVjdG9yIHRvIG9wdGltaXplIGNoaWxkIGFu
ZCBkZXNjZW5kYW50IHNlbGVjdG9yIGxvb2t1cHMuCi0gICAgdm9pZCBwdXNoUGFyZW50KEVsZW1l
bnQqIHBhcmVudCkgeyBtX2NoZWNrZXIucHVzaFBhcmVudChwYXJlbnQpOyB9Ci0gICAgdm9pZCBw
b3BQYXJlbnQoRWxlbWVudCogcGFyZW50KSB7IG1fY2hlY2tlci5wb3BQYXJlbnQocGFyZW50KTsg
fQorICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpOworICAgIHZvaWQgcG9wUGFy
ZW50KEVsZW1lbnQqIHBhcmVudCk7CiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHls
ZUZvckVsZW1lbnQoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJvb2wg
YWxsb3dTaGFyaW5nID0gdHJ1ZSwgYm9vbCByZXNvbHZlRm9yUm9vdERlZmF1bHQgPSBmYWxzZSwg
UmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7CiAKQEAgLTI3NiwxMSArMjgyLDEz
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAgICAg
dm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmKTsKICAgICB2b2lkIG1hdGNoUnVsZXMoUnVs
ZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKGludCYgZmlyc3RSdWxl
SW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAg
dm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIGNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4
LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQm
IGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMpOwogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7
CiAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisgICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMoKTsKIAogICAgIGJvb2wgY2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYp
OwogICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3RvcihDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0
b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwpAQCAtMjk5LDYgKzMwNywxNiBAQCBwcml2YXRl
OgogICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CiAgICAgU3RyaW5n
IHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OwogCisgICAgdm9pZCBpbml0QXV0aG9yUnVs
ZVNldEl0ZXJhdG9yKGNvbnN0IEVsZW1lbnQqLCBBdXRob3JSdWxlU2V0SXRlcmF0b3ImKTsKKyAg
ICB2b2lkIGFkdmFuY2VBdXRob3JSdWxlU2V0SXRlcmF0b3IoQXV0aG9yUnVsZVNldEl0ZXJhdG9y
Jik7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
RWxlbWVudCosIE93blB0cjxSdWxlU2V0PiA+IFNjb3BlZFJ1bGVTZXRNYXA7CisKKyAgICBSdWxl
U2V0KiBzY29wZWRSdWxlU2V0Rm9yRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KSB7IFNj
b3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuZmluZChl
bGVtZW50KTsgcmV0dXJuIGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpID8gaXQtPnNl
Y29uZC5nZXQoKSA6IDA7IH0KKworICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9zY29wZWRBdXRob3JT
dHlsZXM7CisjZW5kaWYKKwogICAgIE93blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0eWxlOwogICAg
IE93blB0cjxSdWxlU2V0PiBtX3VzZXJTdHlsZTsKIApAQCAtNDM0LDcgKzQ1MiwxMSBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7CiAgICAgYm9vbCBt
X2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7CiAgICAgY29uc3QgQ1NTU3R5bGVBcHBs
eVByb3BlcnR5JiBtX2FwcGx5UHJvcGVydHk7Ci0gICAgCisKKyAgICAvLyBWZWN0b3IgKHVzZWQg
YXMgc3RhY2spIHRoYXQga2VlcHMgdHJhY2sgb2Ygc2NvcGluZyBlbGVtZW50cyAoaS5lLiwgZWxl
bWVudHMgd2l0aCBhIDxzdHlsZSBzY29wZWQ+IGNoaWxkKQorICAgIC8vIGVuY291bnRlcmVkIGR1
cmluZyB0cmVlIGl0ZXJhdGlvbiBmb3Igc3R5bGUgcmVzb2x1dGlvbi4KKyAgICBWZWN0b3I8c3Rk
OjpwYWlyPGNvbnN0IEVsZW1lbnQqLCBSdWxlU2V0Kj4gPiBtX3Njb3BpbmdFbGVtZW50U3RhY2s7
CisKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJz
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IGY3NGVl
ZDAyYzZhMDIzZGVlNTMyYjkxYzljYjc1YWMyMjgwYTg0YWIuLjkxMTU0ZWJlMTA5ZjY4MDA0N2Nk
MGI1N2YzNWRjZTdkZDQzNjYwYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
Y3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKQEAgLTEyNSw0MiArMTI2LDMzIEBAIHZvaWQgU2VsZWN0b3JDaGVja2VyOjpwb3BQYXJlbnRT
dGFja0ZyYW1lKCkKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JDaGVja2VyOjpwdXNoUGFyZW50
KEVsZW1lbnQqIHBhcmVudCkKK3ZvaWQgU2VsZWN0b3JDaGVja2VyOjpzZXR1cFBhcmVudFN0YWNr
KEVsZW1lbnQqIHBhcmVudCkKIHsKLSAgICBpZiAobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkpIHsK
LSAgICAgICAgQVNTRVJUKCFtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7Ci0gICAgICAgIG1f
YW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyID0gYWRvcHRQdHIobmV3IEJsb29tRmlsdGVyPGJsb29t
RmlsdGVyS2V5Qml0cz4pOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBub3QgdGhlIHJv
b3QgaXRzZWxmLCBidWlsZCB0aGUgc3RhY2sgc3RhcnRpbmcgZnJvbSB0aGUgcm9vdC4KLSAgICAg
ICAgaWYgKHBhcmVudC0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8
RWxlbWVudCosIDMwPiBhbmNlc3RvcnM7Ci0gICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGFuY2Vz
dG9yID0gcGFyZW50OyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50T3JIb3N0
RWxlbWVudCgpKQotICAgICAgICAgICAgICAgIGFuY2VzdG9ycy5hcHBlbmQoYW5jZXN0b3IpOwot
ICAgICAgICAgICAgaW50IGNvdW50ID0gYW5jZXN0b3JzLnNpemUoKTsKLSAgICAgICAgICAgIGZv
ciAoaW50IG4gPSBjb3VudCAtIDE7IG4gPj0gMDsgLS1uKQotICAgICAgICAgICAgICAgIHB1c2hQ
YXJlbnRTdGFja0ZyYW1lKGFuY2VzdG9yc1tuXSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKCFwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQoKSkgewot
ICAgICAgICAvLyBXZSBhcmUgbm90IGFsd2F5cyBpbnZva2VkIGNvbnNpc3RlbnRseS4gRm9yIGV4
YW1wbGUsIHNjcmlwdCBleGVjdXRpb24gY2FuIGNhdXNlIHVzIHRvIGVudGVyCi0gICAgICAgIC8v
IHN0eWxlIHJlY2FsYyBpbiB0aGUgbWlkZGxlIG9mIHRyZWUgYnVpbGRpbmcuIFJlc2V0IHRoZSBz
dGFjayBpZiB3ZSBzZWUgYSBuZXcgcm9vdCBlbGVtZW50LgotICAgICAgICBBU1NFUlQobV9hbmNl
c3RvcklkZW50aWZpZXJGaWx0ZXIpOwotICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRl
ci0+Y2xlYXIoKTsKLSAgICAgICAgbV9wYXJlbnRTdGFjay5yZXNpemUoMCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgQVNTRVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKLSAgICAgICAg
Ly8gV2UgbWF5IGdldCBpbnZva2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdh
Y2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlLgotICAgICAgICAvLyBQYXVzZSBtYWludGFp
bmluZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgotICAgICAgICBpZiAobV9wYXJlbnRTdGFjay5s
YXN0KCkuZWxlbWVudCAhPSBwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgPT0gIW1fYW5j
ZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKKyAgICAvLyBLaWxsIHdoYXRldmVyIHdlIHN0b3JlZCBi
ZWZvcmUuCisgICAgbV9wYXJlbnRTdGFjay5yZXNpemUoMCk7CisgICAgbV9hbmNlc3RvcklkZW50
aWZpZXJGaWx0ZXIgPSBhZG9wdFB0cihuZXcgQmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlCaXRz
Pik7CisgICAgLy8gRmFzdCB2ZXJzaW9uIGlmIHBhcmVudCBpcyBhIHJvb3QgZWxlbWVudDoKKyAg
ICBpZiAoIXBhcmVudC0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgIHB1c2hQYXJlbnRT
dGFja0ZyYW1lKHBhcmVudCk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcHVzaFBhcmVu
dFN0YWNrRnJhbWUocGFyZW50KTsKKyAgICAvLyBPdGhlcndpc2UgY2xpbWIgdXAgdGhlIHRyZWUu
CisgICAgVmVjdG9yPEVsZW1lbnQqLCAzMD4gYW5jZXN0b3JzOworICAgIGZvciAoRWxlbWVudCog
YW5jZXN0b3IgPSBwYXJlbnQ7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRP
ckhvc3RFbGVtZW50KCkpCisgICAgICAgIGFuY2VzdG9ycy5hcHBlbmQoYW5jZXN0b3IpOworICAg
IGZvciAoc2l6ZV90IG4gPSBhbmNlc3RvcnMuc2l6ZSgpOyBuOyAtLW4pCisgICAgICAgIHB1c2hQ
YXJlbnRTdGFja0ZyYW1lKGFuY2VzdG9yc1tuIC0gMV0pOwogfQogCi12b2lkIFNlbGVjdG9yQ2hl
Y2tlcjo6cG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKK3ZvaWQgU2VsZWN0b3JDaGVja2VyOjpw
dXNoUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKIHsKLSAgICBpZiAobV9wYXJlbnRTdGFjay5pc0Vt
cHR5KCkgfHwgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCAhPSBwYXJlbnQpCisgICAgQVNT
RVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKKyAgICAvLyBXZSBtYXkgZ2V0IGludm9r
ZWQgZm9yIHNvbWUgcmFuZG9tIGVsZW1lbnRzIGluIHNvbWUgd2Fja3kgY2FzZXMgZHVyaW5nIHN0
eWxlIHJlc29sdmUuCisgICAgLy8gUGF1c2UgbWFpbnRhaW5pbmcgdGhlIHN0YWNrIGluIHRoaXMg
Y2FzZS4KKyAgICBpZiAobV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCAhPSBwYXJlbnQtPnBh
cmVudE9ySG9zdEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBvcFBhcmVudFN0YWNr
RnJhbWUoKTsKKyAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShwYXJlbnQpOwogfQogCiBzdGF0aWMg
aW5saW5lIHZvaWQgY29sbGVjdERlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZComIGhhc2gsIGNvbnN0IHVuc2lnbmVk
KiBlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKaW5kZXggNzI5YTA1NjUxMTc4
NTFmNDg5Yjc2MjkwYmQ0YTQ4YjQxMzE0NzllNy4uM2Y5NDY5ZTVkNzliMDljOWFiODQyZTc0MmQ4
NWZhZDcxN2I5NDcxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtNjAs
OSArNjAsMTEgQEAgcHVibGljOgogICAgIGlubGluZSBib29sIGZhc3RSZWplY3RTZWxlY3Rvcihj
b25zdCB1bnNpZ25lZCogaWRlbnRpZmllckhhc2hlcykgY29uc3Q7CiAgICAgc3RhdGljIHZvaWQg
Y29sbGVjdElkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqLCB1bnNpZ25lZCogaWRl
bnRpZmllckhhc2hlcywgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudCk7CiAKKyAgICB2
b2lkIHNldHVwUGFyZW50U3RhY2soRWxlbWVudCogcGFyZW50KTsKICAgICB2b2lkIHB1c2hQYXJl
bnQoRWxlbWVudCogcGFyZW50KTsKLSAgICB2b2lkIHBvcFBhcmVudChFbGVtZW50KiBwYXJlbnQp
OwotICAgIGJvb2wgcGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoQ29udGFpbmVyTm9kZSogcGFyZW50
Tm9kZSkgY29uc3QgeyByZXR1cm4gIW1fcGFyZW50U3RhY2suaXNFbXB0eSgpICYmIG1fcGFyZW50
U3RhY2subGFzdCgpLmVsZW1lbnQgPT0gcGFyZW50Tm9kZTsgfQorICAgIHZvaWQgcG9wUGFyZW50
KCkgeyBwb3BQYXJlbnRTdGFja0ZyYW1lKCk7IH0KKyAgICBib29sIHBhcmVudFN0YWNrSXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3RhY2suaXNFbXB0eSgpOyB9CisgICAgYm9vbCBw
YXJlbnRTdGFja0lzQ29uc2lzdGVudChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlKSBj
b25zdCB7IHJldHVybiAhbV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFjay5s
YXN0KCkuZWxlbWVudCA9PSBwYXJlbnROb2RlOyB9CiAKICAgICBFSW5zaWRlTGluayBkZXRlcm1p
bmVMaW5rU3RhdGUoRWxlbWVudCopIGNvbnN0OwogICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hh
bmdlZCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IGFlODc0MDFiYzBlZjNmOGEyZWVkNzViMzRmNjY0ODA5ZWExODE1YmEu
LmRmNjAyY2E2NDRmMGJiNDQ3NGQxODk2MTRhNWMyODQyMzdlNTI0YzcgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNiBAQAorMjAxMi0wMS0yNiAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICA8c3R5bGUgc2NvcGVkPjogSW1wbGVtZW50IHNjb3BlZCBzdHls
ZXNoZWV0cyBhbmQgYmFzaWMgYXBwbGljYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTkwCisKKyAgICAgICAgVGVzdCB0aGF0IDxzdHlsZSBz
Y29wZWQ+IGFmZmVjdHMgc3R5bGVzIGFuZCBpcyB1cGRhdGVkIGNvcnJlY3RseToKKyAgICAgICAg
LSkgYmFzaWMgdGVzdAorICAgICAgICAtKSB0ZXN0IHNldHRpbmcvdW4tc2V0dGluZyB0aGUgJ3Nj
b3BlZCcgYXR0cmlidXRlCisgICAgICAgIC0pIHRlc3QgaW5zZXJ0aW5nL3JlbW92aW5nIGEgd2hv
bGUgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1h
dHRhY2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29w
ZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9z
dHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHls
ZS1zY29wZWQtZGV0YWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNj
b3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LXNldC1zY29wZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHls
ZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbDogQWRkZWQuCisKIDIwMTItMDEt
MjUgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgPHN0eWxlIHNjb3BlZD46IEltcGxlbWVudCByZWdpc3RlcmluZyBvZiA8c3R5bGUgc2NvcGVk
PiB3aXRoIHRoZSBzY29waW5nIGVsZW1lbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41ZmUwNjcxZmFjNmUxNmUzM2E0MmM0MjlhZmVmZWRkMWEzNWFmOGNk
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0
eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1Rlc3QgYXR0
YWNoaW5nIGEgbmV3IDxzdHlsZSBzY29wZWQ+IGVsZW1lbnQKKworVGV4dAorVGV4dAorCitUZXh0
CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0tLQorUzE6IHJnYigwLCAwLCAw
KQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigwLCAwLCAwKQorUDI6IHJnYigwLCAwLCAwKQor
UzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEFGVEVSIEFUVEFDSElORyA8
U1RZTEUgU0NPUEVEPiAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1My
OiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQ
MzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjYwM2RmNTVkZTQ5YmY2Y2ZlMWY4YzZhZDQwYjBlNjUwY2Y4YWU2ZTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLWF0dGFjaC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1
bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNn
ICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7
CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29t
cHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAg
ICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3Qo
J1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsK
KyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBy
dW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0n
KTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIg
QVRUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLScpOworICAgICAgICAgICAgdmFyIGRpdkVsZW0g
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRElWJyk7CisgICAgICAgICAgICB2YXIgc3R5bGVF
bGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKKyAgICAgICAgICAgIHN0eWxl
RWxlbS5zZXRBdHRyaWJ1dGUoJ3Njb3BlZCcsIHRydWUpOworICAgICAgICAgICAgc3R5bGVFbGVt
LmlubmVySFRNTCA9ICdkaXYgeyBjb2xvcjogcmVkOyB9IHAgeyBjb2xvcjogZ3JlZW47IH0nOwor
ICAgICAgICAgICAgZGl2RWxlbS5pbnNlcnRCZWZvcmUoc3R5bGVFbGVtLCBkaXZFbGVtLmZpcnN0
Q2hpbGQpOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7
CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAg
ICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwv
c3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0
IGF0dGFjaGluZyBhIG5ldyAmbHQ7c3R5bGUgc2NvcGVkJmd0OyBlbGVtZW50PC9wPgorICAgIDxk
aXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAx
Ij5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9IkRJViI+CisgICAgICAgIDxzcGFu
IGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwv
ZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAg
ICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUi
PjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lOTEyZmRjMGY4M2VjMTQ5M2E0MmMyNTliM2YxODJiYjBmNTZjNzE1Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0MiBAQAorVGVzdCA8c3R5bGUg
c2NvcGVkPgorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKK1RleHQKK1RleHQKKworVGV4dAor
VGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKy0tLSBD
T01QVVRFRCBTVFlMRVMgLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitS
MTogcmdiKDAsIDAsIDApCitFMTogcmdiKDAsIDAsIDApCisKK1MyOiByZ2IoMjU1LCAwLCAwKQor
UDI6IHJnYigwLCAxMjgsIDApCitSMjogcmdiKDAsIDAsIDI1NSkKKworUzM6IHJnYigwLCAwLCAw
KQorUDM6IHJnYigwLCAwLCAwKQorUjM6IHJnYigwLCAwLCAwKQorRTM6IHJnYigwLCAwLCAwKQor
CitTNDogcmdiKDAsIDAsIDApCitQNDogcmdiKDAsIDAsIDApCitSNDogcmdiKDAsIDAsIDApCitF
NDogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mZTViNDMxYTkxNmEzOWM2OWZiZGY4NjY4NjRhZThkZmYzZDY4Y2VlCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1iYXNpYy5odG1sCkBAIC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0
aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsg
J1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAg
eworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Cisg
ICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0
ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIENPTVBV
VEVEIFNUWUxFUyAtLS0nKTsKKworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAg
IHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdSMScpOworICAgICAgICAgICAgdGVzdCgn
RTEnKTsKKyAgICAgICAgICAgIGxvZygnJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAg
ICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1IyJyk7CisgICAgICAgICAg
ICBsb2coJycpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1Az
Jyk7CisgICAgICAgICAgICB0ZXN0KCdSMycpOworICAgICAgICAgICAgdGVzdCgnRTMnKTsKKyAg
ICAgICAgICAgIGxvZygnJyk7CisgICAgICAgICAgICB0ZXN0KCdTNCcpOworICAgICAgICAgICAg
dGVzdCgnUDQnKTsKKyAgICAgICAgICAgIHRlc3QoJ1I0Jyk7CisgICAgICAgICAgICB0ZXN0KCdF
NCcpOworCisgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgfQor
ICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgIGJvZHkg
eyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJy
dW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCAmbHQ7c3R5bGUgc2NvcGVkJmd0OzwvcD4KKyAgICA8
ZGl2IGNsYXNzPSJmb28iPgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAg
ICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICAgICAgPHByZSBpZCA9ICJSMSIgY2xhc3M9ImJh
ciI+VGV4dDwvcHJlPgorICAgICAgICA8cHJlIGlkPSJFMSIgY2xhc3M9ImJheiI+VGV4dDwvcHJl
PgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8c3R5
bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgICAgICAgICBkaXYgeyBjb2xvcjog
cmVkOyB9CisgICAgICAgICAgICAgICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICAgICAg
ICAgIGRpdiAuYmFyIHsgY29sb3I6IGJsdWU7IH0KKyAgICAgICAgICAgIDwvc3R5bGU+CisgICAg
ICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgICAgICA8cCBpZD0iUDIi
PlRleHQ8L3A+CisgICAgICAgICAgICA8cHJlIGlkPSJSMiIgY2xhc3M9ImJhciI+VGV4dDwvcHJl
PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAg
ICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgICAgIDxwcmUgaWQgPSAiUjMiIGNsYXNzPSJi
YXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBpZD0iRTMiIGNsYXNzPSJiYXoiPlRleHQ8L3By
ZT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJmb28iPgorICAgICAgICA8c3BhbiBpZD0i
UzQiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQNCI+VGV4dDwvcD4KKyAgICAgICAgPHBy
ZSBpZCA9ICJSNCIgY2xhc3M9ImJhciI+VGV4dDwvcHJlPgorICAgICAgICA8cHJlIGlkPSJFNCIg
Y2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUi
PjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2gtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ3ZWY2NTMxNzQwNzJiNzg4N2Y3ZGYzZGFiZjkxYTlhNzM0MGUzZTgK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5
bGUtc2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCBkZXRh
Y2hpbmcgYSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4
dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1Ax
OiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitT
MzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gQUZURVIgREVUQUNISU5HIDxT
VFlMRSBTQ09QRUQ+IC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6
IHJnYigwLCAwLCAwKQorUDI6IHJnYigwLCAwLCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJn
YigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YzhiZjZhODY2MTI3MGY4NjFjYjg1NThhYzMyN2ExODc3MWYzOWVkCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1k
ZXRhY2guaHRtbApAQCAtMCwwICsxLDcyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlv
biBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdc
bicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAg
ICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVk
U3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVz
dCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicp
OworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAg
ICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVz
dHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7Cisg
ICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIERFVEFD
SElORyA8U1RZTEUgU0NPUEVEPiAtLS0nKTsKKyAgICAgICAgICAgIHZhciBkaXZFbGVtID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RJVicpOworICAgICAgICAgICAgdmFyIHN0eWxlRWxlbSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScpOworICAgICAgICAgICAgZGl2RWxlbS5y
ZW1vdmVDaGlsZChzdHlsZUVsZW0pOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAgICAgbG9nKCctLS0g
RklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAg
ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBi
bGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7
Ij4KKyAgICA8cD5UZXN0IGRldGFjaGluZyBhICZsdDtzdHlsZSBzY29wZWQmZ3Q7IGVsZW1lbnQ8
L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9zcGFuPgorICAgICAg
ICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0iRElWIj4KKyAg
ICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAg
ICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0K
KyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAg
ICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAg
PHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+Cisg
ICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLXJlbW92ZS1zY29wZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zYTIwNTg3ZGY1YWZmZjYyZGMyN2Y2MmFhZWM0NTBiMzM3NjVjYWM4Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1y
ZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitUZXN0IHJlbW92aW5n
IHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSA8c3R5bGU+IGVsZW1lbnQKKworVGV4dAorVGV4
dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0tLQorUzE6IHJn
YigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdi
KDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBBRlRF
UiBVTi1TRVRUSU5HIEBTQ09QRUQgLS0tCitTMTogcmdiKDI1NSwgMCwgMCkKK1AxOiByZ2IoMCwg
MTI4LCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2Io
MjU1LCAwLCAwKQorUDM6IHJnYigwLCAxMjgsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVt
b3ZlLXNjb3BlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWFhZjM3NzRjYWIyZmE3NGZk
NzBjNjExYWUwMzJiYTExODQzZDdlZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCkBAIC0w
LDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9
CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFy
IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQg
KyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxs
KS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAg
ICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0
ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1Az
Jyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RB
bGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgVU4tU0VUVElORyBAU0NPUEVEIC0t
LScpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxFJykucmVtb3Zl
QXR0cmlidXRlKCdzY29wZWQnKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJ
TklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAg
PHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxh
Y2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+
CisgICAgPHA+VGVzdCByZW1vdmluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgJmx0O3N0
eWxlJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4
dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxk
aXY+CisgICAgICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+Cisg
ICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAgICAgICBwIHsgY29sb3I6IGdy
ZWVuOyB9CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bh
bj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+Cisg
ICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0
PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0
eWxlLXNjb3BlZC1zZXQtc2NvcGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmEwYzc5NjNjOTdjNDc4MDFlMDg0OTY3NTExMzcyMjJjNDY2NWQxYwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQt
c2V0LXNjb3BlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCBzZXR0aW5nIHRo
ZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSA8c3R5bGU+IGVsZW1lbnQKKworVGV4dAorVGV4dAor
CitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0tLQorUzE6IHJnYigy
NTUsIDAsIDApCitQMTogcmdiKDAsIDEyOCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJn
YigwLCAxMjgsIDApCitTMzogcmdiKDI1NSwgMCwgMCkKK1AzOiByZ2IoMCwgMTI4LCAwKQorLS0t
IEFGVEVSIFNFVFRJTkcgQFNDT1BFRCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwg
MCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAs
IDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3Bl
ZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1z
ZXQtc2NvcGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTkwM2JkNDFlMjk5ZDAzNTAxY2VmMTA1NDBmZTE5
NTAwYzRlODJlZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1l
bnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZh
bHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQor
ICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEn
KTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAg
ICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBs
b2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAg
ICAgICAgbG9nKCctLS0gQUZURVIgU0VUVElORyBAU0NPUEVEIC0tLScpOworICAgICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxFJykuc2V0QXR0cmlidXRlKCdzY29wZWQnLCB0
cnVlKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOwor
ICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAg
ICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRl
eHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0
eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCBz
ZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSAmbHQ7c3R5bGUmZ3Q7IGVsZW1lbnQ8
L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9zcGFuPgorICAgICAg
ICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHN0
eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9jc3MiPgorICAgICAgICAgICAgZGl2IHsgY29sb3I6
IHJlZDsgfQorICAgICAgICAgICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICA8L3N0eWxl
PgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+
VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRl
eHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8
cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124514</attachid>
            <date>2012-01-30 02:25:02 -0800</date>
            <delta_ts>2012-01-30 04:55:21 -0800</delta_ts>
            <desc>patch, removed iterator</desc>
            <filename>bug-73190-20120130192500.patch</filename>
            <type>text/plain</type>
            <size>48282</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ0MjYxN2UzZGNkYWJj
YWRkNGUwM2NjZjI0ZDVmYTU2ZmNjYThjOS4uYjIxNDcyMzI1YmY2MjdhZTRjYmZiZmQ3YTViNmE3
NDhmOGI1MmFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTAxLTMwICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIDxzdHls
ZSBzY29wZWQ+OiBJbXBsZW1lbnQgc2NvcGVkIHN0eWxlc2hlZXRzIGFuZCBiYXNpYyBhcHBsaWNh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMx
OTAKKworICAgICAgICBJbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgPHN0eWxlIHNjb3BlZD46Cisg
ICAgICAgIFN0b3JlIHNjb3BlZCBzdHlsZSBzaGVldHMgaW4gYSBzZXBhcmF0ZSBkYXRhIHN0cnVj
dHVyZSBTY29wZWRSdWxlU2V0cy4KKyAgICAgICAgQWRkIGEgdmVjdG9yIHN0YWNrIHRvIENTU1N0
eWxlU2VsZWN0b3IgdGhhdCBrZWVwcyB0cmFjayBvZiBlbmNvdW50ZXJlZCBzY29waW5nIGVsZW1l
bnRzLiBUaGlzIGlzCisgICAgICAgIHVzZWQgZm9yIE8oMSkgYWNjZXNzIHRvIGFsbCByZWxldmFu
dCBzdHlsZSBzaGVldHMgZm9yIGEgZ2l2ZW4gZWxlbWVudC4KKyAgICAgICAgQWRhcHQgbWF0Y2hp
bmcgb2YgYXV0aG9yIHN0eWxlIHNoZWV0cyB0byBhbHNvIGNvbnN1bHQgYXBwcm9wcmlhdGUgc2Nv
cGVkIHNoZWV0cy4KKyAgICAgICAgRmluYWxseSwgcHJldmVudCBzdHlsZSBzaGFyaW5nIGZyb20g
Y3Jvc3NpbmcgaW50by9vdXQgb2Ygc2NvcGVkIHN0eWxlIGJvdW5kYXJpZXMuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvY3NzL3N0
eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMuaHRtbAorICAgICAgICAgICAgICAg
ZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbAorICAgICAgICAg
ICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0
LXNjb3BlZC5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0
eWxlU2VsZWN0b3IpOiBhZGQgY29kZSBmb3Igc2NvcGVkIHN0eWxlIHNoZWV0cworICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdEZlYXR1cmVzKTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJt
aW5lU2NvcGluZ0VsZW1lbnQpOiBkZXRlcm1pbmUgd2hldGhlciBhbiBhdXRob3Igc2hlZXQgaXMg
c2NvcGVkIChhbmQgdG8gd2hpY2ggc2NvcGUpLCBvciBnbG9iYWwKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKTogYWRkIGNvZGUgZm9y
IHNjb3BlZCBzdHlsZSBzaGVldHMKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OnB1c2hQYXJlbnQpOiBzaW1wbGlmeSBhbmQgcmVmYWN0b3IgU2VsZWN0b3JDaGVja2VyOjpwdXNo
UGFyZW50LCBhcyBjb2RlIGluIENTU3R5bGVTZWxlY3RvciBuZWVkcyBwYXJ0aWFsIGFjY2Vzcwor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFyZW50KTogZGl0dG8KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcyk6IGhlbHBlciBmdW5jdGlvbgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6cGFyZW50U2NvcGVzRm9yQ3VycmVudEVsZW1lbnQpOiBjb21wdXRlIGFsbCBlbmNsb3Npbmcg
c2NvcGluZyBlbGVtZW50cworICAgICAgICAoV2ViQ29yZTo6QXV0aG9yUnVsZVNldEl0ZXJhdG9y
OjpBdXRob3JSdWxlU2V0SXRlcmF0b3IpOiBzdHJ1Y3QgaG9sZGluZyBpbmZvcm1hdGlvbiBuZWNl
c3NhcnkgdG8gaXRlcmF0ZSBvdmVyIGFsbCByZWxldmFudCBzY29wZWQgUnVsZVNldAorICAgICAg
ICAoQXV0aG9yUnVsZVNldEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhvclJ1bGVT
ZXRJdGVyYXRvcjo6cnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9y
Ojppbml0QXV0aG9yUnVsZVNldEl0ZXJhdG9yKTogaW5pdGlhbGl6ZSBhbiBBdXRob3JSdWxlU2V0
SXRlcmF0b3IgdG8gcG9pbnQgYXQgdGhlIGZpcnN0IHJlbGV2YW50IFJ1bGVTZXQKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFkdmFuY2VBdXRob3JSdWxlU2V0SXRlcmF0b3Ip
OiBtb3ZlIGFuIEF1dGhvclJ1bGVTZXRJdGVyYXRvciB0byB0aGUgbmV4dCByZWxldmFudCBSdWxl
U2V0CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVz
KTogdXNlIEF1dGhvclJ1bGVTZXRJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYWxsIHJlbGV2YW50
IFJ1bGVTZXRzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVz
KTogYWRhcHQgZm9yIHNjb3BlZCBzdHlsZSBydWxlcworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KTogcHJldmVudCBzdHlsZSBzaGFyaW5nIGFj
cm9zcyBzY29wZSBib3VuZGFyaWVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9y
OjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6bG9jYXRlU2hhcmVkU3R5bGUpOiBkaXR0bworICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KTogY2hhbmdlZCBjYWxs
IHRvIG1hdGNoQXV0aG9yUnVsZXMKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OnN0eWxlRm9yUGFnZSk6IGFkZCBjb21tZW50CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjpjaGVja1JlZ2lvblN0eWxlKTogYWRkIGdsb2JhbCBzY29wZSBwYXJhbWV0ZXIKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVt
ZW50KTogY2hhbmdlZCBjYWxsIHRvIG1hdGNoQXV0aG9yUnVsZXMKKyAgICAgICAgKFdlYkNvcmU6
OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KTogYWRhcHQgZm9yIHNjb3BlZCBzdHlsZSBydWxl
cworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgIChDU1NTdHlsZVNl
bGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlNjb3BlU3RhY2tG
cmFtZTo6U2NvcGVTdGFja0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OnNjb3BlZFJ1bGVTZXRGb3JFbGVtZW50KTogcmV0dXJuIHJ1bGUgc2V0IGZvciBhIDxzdHls
ZSBzY29wZWQ+IHVuZGVyIHRoZSBlbGVtZW50LCBvciBOVUxMCisgICAgICAgICogY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnNldHVw
UGFyZW50U3RhY2spOiBzZXQgdXAgdGhlIHBhcmVudCBzdGFjayAocmVmYWN0b3JpbmcpCisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJlbnQpOiBzaW1wbGlmeSBhbmQg
cmVmYWN0b3IKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6OnBvcFBhcmVudCk6IGRpdHRvCisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6OnBhcmVudFN0YWNrSXNFbXB0eSk6IGRpdHRvCisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KTogbWFrZSBw
YXJhbWV0ZXIgY29uc3QKKwogMjAxMi0wMS0yOSAgTm9lbCBHb3Jkb24gIDxub2VsLmdvcmRvbkBn
bWFpbC5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBVc2UgZGVjb2Rpbmcgc3dpenpsZSBvbmx5
IG9uIGxpYmpwZWctdHVyYm8gMS4xLjkwKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwCmluZGV4IGUzMmI2NWJiNmJhOTVlMjYwM2IzYmFiODQ1ODc3NDM1ZmM5NDQyNzUuLmYy
MDZjYmViZjJmOGQ5MTA0N2JhZGRmNDM1NjM4N2IyMjhjYTcxNGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJIVE1M
SW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBy
b2dyZXNzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCkBAIC0yMjIsNyArMjIzLDExIEBAIHB1
YmxpYzoKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgT3duUHRyPFZl
Y3RvcjxSdWxlRGF0YT4gPiA+IEF0b21SdWxlTWFwOwogCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BF
RCkKKyAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwLCBjb25zdCBFbGVtZW50KiA9
IDApOworI2Vsc2UKICAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqLCBj
b25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwKTsKKyNlbmRp
ZgogCiAgICAgdm9pZCBhZGRTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxlKik7CiAgICAgdm9pZCBhZGRS
dWxlKENTU1N0eWxlUnVsZSosIENTU1NlbGVjdG9yKik7CkBAIC0zNjgsNiArMzczLDggQEAgQ1NT
U3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxl
U2hlZXRMaXN0KiBzdHlsZVNoZWUKIAogICAgIG1fYXV0aG9yU3R5bGUgPSBhZG9wdFB0cihuZXcg
UnVsZVNldCk7CiAgICAgLy8gQWRkaW5nIHJ1bGVzIGZyb20gbXVsdGlwbGUgc2hlZXRzLCBzaHJp
bmsgYXQgdGhlIGVuZC4KKyAgICAvLyBBZGRpbmcgZ2xvYmFsIHJ1bGVzIGZyb20gbXVsdGlwbGUg
c2hlZXRzLCBzaHJpbmsgYXQgdGhlIGVuZC4KKyAgICAvLyBOb3RlIHRoYXQgdGhlcmUgdXN1YWxs
eSBpcyBvbmx5IDEgc2hlZXQgZm9yIHNjb3BlZCBydWxlcywgc28gYXV0by1zaHJpbmstdG8tZml0
IGlzIGZpbmUuCiAgICAgbV9hdXRob3JTdHlsZS0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOwog
CiAgICAgLy8gRklYTUU6IFRoaXMgc3Vja3MhIFRoZSB1c2VyIHNoZWV0IGlzIHJlcGFyc2VkIGV2
ZXJ5IHRpbWUhCkBAIC0zOTcsOCArNDA0LDEwIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxl
U2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAg
ICAgICAgIG1fdXNlclN0eWxlID0gdGVtcFVzZXJTdHlsZS5yZWxlYXNlKCk7CiAKICAgICAvLyBB
ZGQgcnVsZXMgZnJvbSBlbGVtZW50cyBsaWtlIFNWRydzIDxmb250LWZhY2U+Ci0gICAgaWYgKG1h
cHBlZEVsZW1lbnRTaGVldCkKKyAgICBpZiAobWFwcGVkRWxlbWVudFNoZWV0KSB7CisgICAgICAg
IC8vIEZJWE1FOiBzZWUgaWYgc3R5bGUgc2NvcGVzIGNhbi9zaG91bGQgYmUgYWRkZWQgaGVyZS4K
ICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWFwcGVkRWxlbWVudFNo
ZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgIH0KIAogICAgIC8vIGFkZCBzdHlsZXNoZWV0cyBm
cm9tIGRvY3VtZW50CiAgICAgYXBwZW5kQXV0aG9yU3R5bGVzaGVldHMoMCwgc3R5bGVTaGVldHMt
PnZlY3RvcigpKTsKQEAgLTQyMyw2ICs0MzIsMTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpj
b2xsZWN0RmVhdHVyZXMoKQogICAgIC8vIHNoYXJpbmcgY2FuZGlkYXRlcy4KICAgICBtX2ZlYXR1
cmVzLmFkZChkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkpOwogICAgIG1fZmVhdHVyZXMuYWRkKG1f
YXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkpOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAg
Zm9yIChTY29wZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVz
LmJlZ2luKCk7IGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQorICAgICAg
ICBtX2ZlYXR1cmVzLmFkZChpdC0+c2Vjb25kLT5mZWF0dXJlcygpKTsKKyNlbmRpZgogICAgIGlm
IChtX3VzZXJTdHlsZSkKICAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1
cmVzKCkpOwogCkBAIC00MzAsNiArNDQzLDMxIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29s
bGVjdEZlYXR1cmVzKCkKICAgICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1ha2VSdWxl
U2V0KG1fZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7CiB9CiAKKyNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKQorRWxlbWVudCogQ1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU2NvcGlu
Z0VsZW1lbnQoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQpCit7CisgICAgQVNTRVJUKHNoZWV0
KTsKKworICAgIE5vZGUqIG93bmVyTm9kZSA9IHNoZWV0LT5maW5kU3R5bGVTaGVldE93bmVyTm9k
ZSgpOworICAgIGlmICghb3duZXJOb2RlIHx8ICFvd25lck5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8
fCAhb3duZXJOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIEhUTUxTdHlsZUVsZW1lbnQqIHN0eWxlRWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxTdHlsZUVsZW1lbnQqPihvd25lck5vZGUpOworICAgIGlmICghc3R5bGVFbGVtZW50
LT5zY29wZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3R5bGVFbGVtZW50
LT5wYXJlbnRFbGVtZW50KCk7Cit9CisKK2lubGluZSBSdWxlU2V0KiBDU1NTdHlsZVNlbGVjdG9y
OjpzY29wZWRSdWxlU2V0Rm9yRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAor
eworICAgIGlmICghZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Nj
b3BlZEF1dGhvclN0eWxlcy5maW5kKGVsZW1lbnQpOworICAgIHJldHVybiBpdCAhPSBtX3Njb3Bl
ZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKK30KKyNlbmRpZgor
CiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVk
IGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHN0eWxlc2hlZXRz
KQogewogICAgIC8vIFRoaXMgaGFuZGxlcyBzaGVldHMgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUg
c3R5bGVzaGVldCBsaXN0IG9ubHkuIEluIG90aGVyIGNhc2VzIHRoZSBzdHlsZSByZXNvbHZlcgpA
QCAtNDM4LDcgKzQ3NiwxOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0
eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UgogICAgIGZvciAodW5z
aWduZWQgaSA9IGZpcnN0TmV3OyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGlmICghc3R5bGVz
aGVldHNbaV0tPmlzQ1NTU3R5bGVTaGVldCgpIHx8IHN0eWxlc2hlZXRzW2ldLT5kaXNhYmxlZCgp
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVz
RnJvbVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZXNoZWV0c1tpXS5nZXQo
KSksICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgIENTU1N0eWxlU2hlZXQqIGNzc1NoZWV0ID0g
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlc2hlZXRzW2ldLmdldCgpKTsKKyNpZiBF
TkFCTEUoU1RZTEVfU0NPUEVEKQorICAgICAgICBjb25zdCBFbGVtZW50KiBzY29wZSA9IGRldGVy
bWluZVNjb3BpbmdFbGVtZW50KGNzc1NoZWV0KTsKKyAgICAgICAgaWYgKHNjb3BlKSB7CisgICAg
ICAgICAgICBwYWlyPFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQg
PSBtX3Njb3BlZEF1dGhvclN0eWxlcy5hZGQoc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAg
aWYgKGFkZFJlc3VsdC5zZWNvbmQpCisgICAgICAgICAgICAgICAgYWRkUmVzdWx0LmZpcnN0LT5z
ZWNvbmQgPSBhZG9wdFB0cihuZXcgUnVsZVNldCgpKTsKKyAgICAgICAgICAgIGFkZFJlc3VsdC5m
aXJzdC0+c2Vjb25kLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlz
LCBzY29wZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAg
ICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0s
IHRoaXMpOwogICAgIH0KICAgICBtX2F1dGhvclN0eWxlLT5zaHJpbmtUb0ZpdCgpOwogICAgIGNv
bGxlY3RGZWF0dXJlcygpOwpAQCAtNDQ3LDYgKzQ5Niw0OSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0
b3I8UgogICAgICAgICBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBk
YXRlKGZvbnRTZWxlY3RvcigpKTsKIH0KIAordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpwdXNoUGFy
ZW50KEVsZW1lbnQqIHBhcmVudCkKK3sKKyAgICAvLyBXZSBhcmUgbm90IGFsd2F5cyBpbnZva2Vk
IGNvbnNpc3RlbnRseS4gRm9yIGV4YW1wbGUsIHNjcmlwdCBleGVjdXRpb24gY2FuIGNhdXNlIHVz
IHRvIGVudGVyCisgICAgLy8gc3R5bGUgcmVjYWxjIGluIHRoZSBtaWRkbGUgb2YgdHJlZSBidWls
ZGluZy4gV2UgbWF5IGFsc28gYmUgaW52b2tlZCBmcm9tIHNvbWV3aGVyZSB3aXRoaW4gdGhlIHRy
ZWUuCisgICAgLy8gUmVzZXQgdGhlIHN0YWNrIGluIHRoaXMgY2FzZSwgb3IgaWYgd2Ugc2VlIGEg
bmV3IHJvb3QgZWxlbWVudC4KKyAgICBpZiAoIXBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgp
IHx8IG1fY2hlY2tlci5wYXJlbnRTdGFja0lzRW1wdHkoKSkgeworICAgICAgICBtX2NoZWNrZXIu
c2V0dXBQYXJlbnRTdGFjayhwYXJlbnQpOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAg
ICAgIG1fc2NvcGluZ0VsZW1lbnRTdGFjay5zaHJpbmsoMCk7CisgICAgICAgIGZvciAoOyBwYXJl
bnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpKSB7CisgICAgICAgICAg
ICBSdWxlU2V0KiBydWxlU2V0ID0gc2NvcGVkUnVsZVNldEZvckVsZW1lbnQocGFyZW50KTsKKyAg
ICAgICAgICAgIGlmIChydWxlU2V0KQorICAgICAgICAgICAgICAgIG1fc2NvcGluZ0VsZW1lbnRT
dGFjay5hcHBlbmQoU2NvcGVTdGFja0ZyYW1lKHBhcmVudCwgcnVsZVNldCkpOworICAgICAgICB9
CisgICAgICAgIG1fc2NvcGluZ0VsZW1lbnRTdGFjay5yZXZlcnNlKCk7CisjZW5kaWYKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBPdGhlcndpc2UsIGp1c3QgcHVzaCB0aGUgbmV3IHBh
cmVudC4gSG93ZXZlciwgbm90ZSB0aGF0IHdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSByYW5k
b20gZWxlbWVudHMKKyAgICAvLyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNv
bHZlLiBQYXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgorICAgIG1fY2hl
Y2tlci5wdXNoUGFyZW50KHBhcmVudCk7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICBp
ZiAobV9jaGVja2VyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHBhcmVudCkpIHsKKyAgICAgICAg
UnVsZVNldCogcnVsZVNldCA9IHNjb3BlZFJ1bGVTZXRGb3JFbGVtZW50KHBhcmVudCk7CisgICAg
ICAgIGlmIChydWxlU2V0KQorICAgICAgICAgICAgbV9zY29waW5nRWxlbWVudFN0YWNrLmFwcGVu
ZChTY29wZVN0YWNrRnJhbWUocGFyZW50LCBydWxlU2V0KSk7CisgICAgfQorI2VuZGlmCit9CisK
K3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKK3sKKyAg
ICAvLyBOb3RlIHRoYXQgd2UgbWF5IGdldCBpbnZva2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50
cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlLgorICAgIC8vIFBhdXNl
IG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCisgICAgaWYgKG1fY2hlY2tlci5w
YXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJlbnQpKSB7CisgICAgICAgIG1fY2hlY2tlci5wb3BQ
YXJlbnQoKTsKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgICAgICBpZiAoIW1fc2NvcGlu
Z0VsZW1lbnRTdGFjay5pc0VtcHR5KCkgJiYgcGFyZW50ID09IG1fc2NvcGluZ0VsZW1lbnRTdGFj
ay5sYXN0KCkubV9lbGVtZW50KQorICAgICAgICAgICAgbV9zY29waW5nRWxlbWVudFN0YWNrLnJl
bW92ZUxhc3QoKTsKKyNlbmRpZgorICAgIH0KK30KKwogLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQg
c3R5bGUgc2V0dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCiB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmFkZEtleWZyYW1lU3R5bGUoUGFzc1JlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlPiBydWxlKQogewpAQCAtNjg3LDE2ICs3NzksOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0
UgogICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQq
IHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcygpCiB7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKLQotICAgIGlmICgh
cnVsZXMgfHwgIW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29sbGVjdE1hdGNo
aW5nUnVsZXMocnVsZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1w
dHlSdWxlcyk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24ocnVsZXMsIGZpcnN0
UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0KICAgICBpZiAo
bV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTcyMyw2ICs4
MDcsNzAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVz
LCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3QKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKQorY29uc3QgVmVjdG9yPENTU1N0eWxlU2VsZWN0b3I6OlNjb3BlU3RhY2tG
cmFtZT4mIENTU1N0eWxlU2VsZWN0b3I6OnBhcmVudFNjb3Blc0ZvckN1cnJlbnRFbGVtZW50KCkK
K3sKKyAgICAvLyBtX3Njb3BpbmdFbGVtZW50U3RhY2sgYW5kIFNlbGVjdG9yQ2hlY2tlcjo6bV9w
YXJlbnRTdGFjayBzdGFydCB3aXRoIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudC4K
KyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50ID0gbV9lbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7
CisgICAgCisgICAgaWYgKCFlbGVtZW50KSB7CisgICAgICAgIG1fc2NyYXRjaFNjb3BpbmdFbGVt
ZW50U3RhY2suc2hyaW5rKDApOworICAgICAgICByZXR1cm4gbV9zY3JhdGNoU2NvcGluZ0VsZW1l
bnRTdGFjazsKKyAgICB9CisgICAgaWYgKG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVu
dChlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIG1fc2NvcGluZ0VsZW1lbnRTdGFjazsKKyAgICBt
X3NjcmF0Y2hTY29waW5nRWxlbWVudFN0YWNrLnNocmluaygwKTsKKyAgICBmb3IgKDsgZWxlbWVu
dDsgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICBSdWxlU2V0
KiBydWxlU2V0ID0gc2NvcGVkUnVsZVNldEZvckVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIGlm
IChydWxlU2V0KQorICAgICAgICAgICAgbV9zY3JhdGNoU2NvcGluZ0VsZW1lbnRTdGFjay5hcHBl
bmQoU2NvcGVTdGFja0ZyYW1lKGVsZW1lbnQsIHJ1bGVTZXQpKTsKKyAgICB9CisgICAgbV9zY3Jh
dGNoU2NvcGluZ0VsZW1lbnRTdGFjay5yZXZlcnNlKCk7CisgICAgcmV0dXJuIG1fc2NyYXRjaFNj
b3BpbmdFbGVtZW50U3RhY2s7Cit9CisjZW5kaWYKKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXRjaEF1dGhvclJ1bGVzKGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwor
CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE1hdGNoIGds
b2JhbCBhdXRob3IgcnVsZXMuCisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobV9hdXRob3JTdHls
ZS5nZXQoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVz
KTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtX2F1dGhvclN0eWxlLmdldCgp
LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworCisj
aWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVz
IChzdGFydCB3aXRoIHRoZSBjdXJyZW50IGVsZW1lbnQpLgorICAgIFJ1bGVTZXQqIHJ1bGVTZXQg
PSBzY29wZWRSdWxlU2V0Rm9yRWxlbWVudChtX2VsZW1lbnQpOworICAgIGlmIChydWxlU2V0KSB7
CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVTZXQsIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yUmVnaW9uKHJ1bGVTZXQsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBp
bmNsdWRlRW1wdHlSdWxlcyk7CisgICAgfQorICAgIGNvbnN0IFZlY3RvcjxTY29wZVN0YWNrRnJh
bWU+JiBzY29wZVZlY3RvciA9IHBhcmVudFNjb3Blc0ZvckN1cnJlbnRFbGVtZW50KCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IHNjb3BlVmVjdG9yLnNpemUoKTsgaTsgLS1pKSB7CisgICAgICAgIGNv
bGxlY3RNYXRjaGluZ1J1bGVzKHNjb3BlVmVjdG9yW2kgLSAxXS5tX3J1bGVTZXQsIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKHNjb3BlVmVjdG9yW2kgLSAxXS5tX3J1bGVTZXQsIGZp
cnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgfQor
I2VuZGlmCisKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoKTsKK30KKwordm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7Cisg
ICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKworICAgIGlmICghcnVsZXMgfHwgIW1fZWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMocnVsZXMsIGZp
cnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24ocnVsZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVs
ZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVk
UnVsZXMoKTsKK30KKwogY2xhc3MgTWF0Y2hpbmdVQVJ1bGVzU2NvcGUgewogcHVibGljOgogICAg
IE1hdGNoaW5nVUFSdWxlc1Njb3BlKCk7CkBAIC04NzAsNyArMTAxOCw3IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogICAgIAogICAg
IC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzIG5leHQuCiAgICAgaWYgKG1fbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUu
Z2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RB
dXRob3JSdWxlLCBmYWxzZSk7CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMocmVzdWx0LnJhbmdl
cy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsK
IAogICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KICAgICBpZiAo
bV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50KSB7CkBAIC05MzMs
NiArMTA4MSwxMCBAQCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVs
ZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQwogICAgICAgICByZXR1cm4gMDsK
ICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAg
cmV0dXJuIDA7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICBpZiAocGFyZW50LT5oYXNT
Y29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgogICAgIFN0
eWxlZEVsZW1lbnQqIHAgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50KTsKICAg
ICBpZiAocC0+aW5saW5lU3R5bGVEZWNsKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA5Niw2
ICsxMjQ4LDExIEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVt
ZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnQtPmhhc0lE
KCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVS
ZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisjaWYgRU5BQkxF
KFNUWUxFX1NDT1BFRCkKKyAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKICAgICBib29sIGlzQ29udHJvbCA9
IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKICAgICBpZiAoaXNDb250cm9sICE9
IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKQEAgLTExNjcsNiArMTMyNCwxMCBA
QCBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAg
ICAgICByZXR1cm4gMDsKICAgICBpZiAocGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJl
bnRTdHlsZSkpCiAgICAgICAgIHJldHVybiAwOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisg
ICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisjZW5kaWYKIAogICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFu
ZCB0aGVpciBjb3VzaW5zLgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKQEAgLTE0ODYsNyArMTY0
Nyw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0
eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sCiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMpIHsKICAgICAgICAgbWF0Y2hSdWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNl
clJ1bGUsIGZhbHNlKTsKLSAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBt
YXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFz
dEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhtYXRjaFJlc3Vs
dC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAobV9tYXRjaGVkRGVjbHMuaXNFbXB0eSgpKQpA
QCAtMTUyMyw2ICsxNjg0LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxl
Y3Rvcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgY29uc3QgU3RyaW5nIHBhZ2Ug
PSBwYWdlTmFtZShwYWdlSW5kZXgpOwogICAgIG1hdGNoUGFnZVJ1bGVzKGRlZmF1bHRQcmludFN0
eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwogICAgIG1hdGNoUGFnZVJ1bGVzKG1fdXNlclN0
eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOworICAgIC8vIE9ubHkgY29uc2lkZXIg
dGhlIGdsb2JhbCBhdXRob3IgUnVsZVNldCBmb3IgQHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRN
TDUgc3BlYy4KICAgICBtYXRjaFBhZ2VSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBpc0xlZnQs
IGlzRmlyc3QsIHBhZ2UpOwogICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKICAgICBib29sIGlu
aGVyaXRlZE9ubHkgPSBmYWxzZTsKQEAgLTE3NjYsNiArMTkyOCw5IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHls
ZSogcGFyZW50CiAKIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tSZWdpb25TdHlsZShFbGVt
ZW50KiByZWdpb25FbGVtZW50KQogeworICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24n
dCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRo
ZSBtb21lbnQsCisgICAgLy8gc28gYWxsIHJlZ2lvbiBydWxlcyBhcmUgZ2xvYmFsIGJ5IGRlZmF1
bHQuIFZlcmlmeSB3aGV0aGVyIHRoYXQgY2FuIHN0YW5kIG9yIG5lZWRzIGNoYW5naW5nLgorCiAg
ICAgdW5zaWduZWQgcnVsZXNTaXplID0gbV9hdXRob3JTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNB
bmRSdWxlU2V0cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6
ZTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChtX2F1dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9y
c0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOwpAQCAtMTgzNiw3ICsyMDAxLDcgQEAg
UGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxl
c0ZvckVsZW1lbnQoRWxlbWVudCogZSwKICAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9ICEocnVs
ZXNUb0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKTsKIAogICAgICAgICAvLyBDaGVjayB0
aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KLSAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0
eWxlLmdldCgpLCBkdW1teS5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBkdW1teS5yYW5nZXMubGFz
dEF1dGhvclJ1bGUsIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgICAgIG1h
dGNoQXV0aG9yUnVsZXMoZHVtbXkucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgZHVtbXkucmFuZ2Vz
Lmxhc3RBdXRob3JSdWxlLCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogCiAgICAg
ICAgIG1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKICAgICB9CkBAIC0yMTE0LDEwICsyMjc5LDE5
IEBAIHZvaWQgUnVsZVNldDo6YWRkUmVnaW9uUnVsZShXZWJLaXRDU1NSZWdpb25SdWxlKiBydWxl
KQogICAgIG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXBwZW5kKFJ1bGVTZXRTZWxlY3Rv
clBhaXIocnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKSwgcmVnaW9uUnVsZVNldCkpOwogfQog
CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hl
ZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1
bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvciwgY29uc3QgRWxlbWVudCogc2NvcGUp
Cit7CisjZWxzZQogdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0
KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVj
dG9yKiBzdHlsZVNlbGVjdG9yKQogewogICAgIEFTU0VSVChzaGVldCk7CisgICAgY29uc3QgRWxl
bWVudCogY29uc3Qgc2NvcGUgPSAwOworI2VuZGlmCiAKKyAgICBpZiAoIXNoZWV0KQorICAgICAg
ICByZXR1cm47CisgCiAgICAgLy8gTm8gbWVkaWEgaW1wbGllcyAiYWxsIiwgYnV0IGlmIGEgbWVk
aWEgbGlzdCBleGlzdHMgaXQgbXVzdAogICAgIC8vIGNvbnRhaW4gb3VyIGN1cnJlbnQgbWVkaXVt
CiAgICAgaWYgKHNoZWV0LT5tZWRpYSgpICYmICFtZWRpdW0uZXZhbChzaGVldC0+bWVkaWEoKSwg
c3R5bGVTZWxlY3RvcikpCkBAIC0yMTMzLDggKzIzMDcsMTMgQEAgdm9pZCBSdWxlU2V0OjphZGRS
dWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1
YXRvciYKICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4o
cnVsZSkpOwogICAgICAgICBlbHNlIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgewogICAgICAg
ICAgICAgQ1NTSW1wb3J0UnVsZSogaW1wb3J0ID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+
KHJ1bGUpOwotICAgICAgICAgICAgaWYgKGltcG9ydC0+c3R5bGVTaGVldCgpICYmICghaW1wb3J0
LT5tZWRpYSgpIHx8IG1lZGl1bS5ldmFsKGltcG9ydC0+bWVkaWEoKSwgc3R5bGVTZWxlY3Rvcikp
KQorICAgICAgICAgICAgaWYgKGltcG9ydC0+c3R5bGVTaGVldCgpICYmICghaW1wb3J0LT5tZWRp
YSgpIHx8IG1lZGl1bS5ldmFsKGltcG9ydC0+bWVkaWEoKSwgc3R5bGVTZWxlY3RvcikpKSB7Cisj
aWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAgICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVl
dChpbXBvcnQtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCBzdHlsZVNlbGVjdG9yLCBzY29wZSk7Cisj
ZWxzZQogICAgICAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydC0+c3R5bGVTaGVl
dCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IpOworI2VuZGlmCisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNNZWRpYVJ1bGUoKSkgewogICAgICAgICAg
ICAgQ1NTTWVkaWFSdWxlKiByID0gc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4ocnVsZSk7CkBA
IC0yMTUwLDI0ICsyMzI5LDQwIEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NT
U3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImCiAgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+KGNoaWxk
SXRlbSkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZEl0ZW0tPmlzRm9udEZh
Y2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29w
ZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNjb3BlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBz
dGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihjaGlsZEl0ZW0pOwogICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShm
b250RmFjZVJ1bGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW52
YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlvbkNhY2hlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2hpbGRJdGVtLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91
ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjIpOiBXZSBk
b24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBt
b21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNl
bGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1
bGUqPihjaGlsZEl0ZW0pKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0gICAvLyBmb3IgcnVsZXMKICAgICAgICAgICAgIH0gICAvLyBpZiBydWxlcwogICAgICAgICB9
IGVsc2UgaWYgKHJ1bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAg
ICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAv
LyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29w
ZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYgKHNjb3BlKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VS
dWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxlKTsK
ICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1
bGUoZm9udEZhY2VSdWxlKTsKICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmludmFsaWRhdGVN
YXRjaGVkRGVjbGFyYXRpb25DYWNoZSgpOwotICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5
ZnJhbWVzUnVsZSgpKQorICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlm
cmFtZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAg
ICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
c3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlKj4ocnVsZSkpOwotICAgICAgICBlbHNlIGlmIChydWxlLT5pc1JlZ2lvblJ1bGUo
KSAmJiBzdHlsZVNlbGVjdG9yKQorICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9uUnVs
ZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NzIp
OiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVl
dHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBhZGRSZWdpb25SdWxlKHN0YXRpY19jYXN0PFdlYktp
dENTU1JlZ2lvblJ1bGUqPihydWxlKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgaWYgKG1fYXV0
b1Nocmlua1RvRml0RW5hYmxlZCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5oCmluZGV4IDY1OWQyNDYzZGFhYTlkMTZmMzAzOTY5ZjI0M2U3
NWVlMjExZTRmZDEuLmVjMzdlNWUyZmQwYmUxNzM3M2VlNDhiNTM2ODYyODI5Njk5YTU0MjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaApAQCAtMzcsNiArMzcsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHsgRG9Ob3RV
c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSwgVXNlU21hcnRNaW5pbXVtRm9yRm9udEZpemUgfTsK
IAorc3RydWN0IEF1dGhvclJ1bGVTZXRJdGVyYXRvcjsgCiBjbGFzcyBDU1NGb250U2VsZWN0b3I7
CiBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENTU1BhZ2VSdWxlOwpA
QCAtNjcsNiArNjgsNyBAQCBjbGFzcyBOb2RlOwogY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3Mg
UnVsZURhdGE7CiBjbGFzcyBSdWxlU2V0OworY2xhc3MgU2NvcGVkUnVsZVNldHM7CiBjbGFzcyBT
ZXR0aW5nczsKIGNsYXNzIFN0eWxlSW1hZ2U7CiBjbGFzcyBTdHlsZVBlbmRpbmdJbWFnZTsKQEAg
LTEwNiw5ICsxMDgsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdHJp
Y3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyk7CiAgICAgfkNTU1N0eWxl
U2VsZWN0b3IoKTsKIAorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgc3RhdGljIEVsZW1l
bnQqIGRldGVybWluZVNjb3BpbmdFbGVtZW50KGNvbnN0IENTU1N0eWxlU2hlZXQqKTsKKyNlbmRp
ZgorCiAgICAgLy8gVXNpbmcgdGhlc2UgZHVyaW5nIHRyZWUgd2FsayB3aWxsIGFsbG93IHN0eWxl
IHNlbGVjdG9yIHRvIG9wdGltaXplIGNoaWxkIGFuZCBkZXNjZW5kYW50IHNlbGVjdG9yIGxvb2t1
cHMuCi0gICAgdm9pZCBwdXNoUGFyZW50KEVsZW1lbnQqIHBhcmVudCkgeyBtX2NoZWNrZXIucHVz
aFBhcmVudChwYXJlbnQpOyB9Ci0gICAgdm9pZCBwb3BQYXJlbnQoRWxlbWVudCogcGFyZW50KSB7
IG1fY2hlY2tlci5wb3BQYXJlbnQocGFyZW50KTsgfQorICAgIHZvaWQgcHVzaFBhcmVudChFbGVt
ZW50KiBwYXJlbnQpOworICAgIHZvaWQgcG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCk7CiAKICAg
ICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCosIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJvb2wgYWxsb3dTaGFyaW5nID0gdHJ1ZSwgYm9vbCBy
ZXNvbHZlRm9yUm9vdERlZmF1bHQgPSBmYWxzZSwgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHls
aW5nID0gMCk7CiAKQEAgLTI3NSwxMSArMjgxLDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXRj
aEFsbFJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAgICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1
bHQmKTsKICAgICB2b2lkIG1hdGNoUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBt
YXRjaEF1dGhvclJ1bGVzKGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhS
dWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9u
KFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RS
dWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIGJvb2wgZmFzdFJlamVjdFNl
bGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7CiAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVz
KCk7CisgICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoKTsKIAogICAgIGJvb2wg
Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpOwogICAgIGJvb2wgY2hlY2tSZWdpb25TZWxl
Y3RvcihDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQp
OwpAQCAtNDMzLDExICs0NDEsMzcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlOwogICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlOwogICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0eSYgbV9hcHBseVByb3BlcnR5Owot
ICAgIAorCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIGJvb2wgbV9oYXNQZW5kaW5nU2hh
ZGVyczsKICNlbmRpZgogCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICB0eXBlZGVmIEhh
c2hNYXA8Y29uc3QgRWxlbWVudCosIE93blB0cjxSdWxlU2V0PiA+IFNjb3BlZFJ1bGVTZXRNYXA7
CisKKyAgICBSdWxlU2V0KiBzY29wZWRSdWxlU2V0Rm9yRWxlbWVudChjb25zdCBFbGVtZW50Kikg
Y29uc3Q7CisKKyAgICBTY29wZWRSdWxlU2V0TWFwIG1fc2NvcGVkQXV0aG9yU3R5bGVzOworICAg
IAorICAgIHN0cnVjdCBTY29wZVN0YWNrRnJhbWUgeworICAgICAgICBTY29wZVN0YWNrRnJhbWUo
KSA6IG1fZWxlbWVudCgwKSwgbV9ydWxlU2V0KDApIHsgfQorICAgICAgICBTY29wZVN0YWNrRnJh
bWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgUnVsZVNldCogcnVsZVNldCkgOiBtX2VsZW1lbnQo
ZWxlbWVudCksIG1fcnVsZVNldChydWxlU2V0KSB7IH0KKyAgICAgICAgY29uc3QgRWxlbWVudCog
bV9lbGVtZW50OworICAgICAgICBSdWxlU2V0KiBtX3J1bGVTZXQ7CisgICAgfTsKKworICAgIC8v
IFJldHVybnMgdGhlIChjYWNoZWQgb3Igc2NyYXRjaC1idWlsdCkgdmVjdG9yIG9mIGVuY2xvc2lu
ZyBzY29wZXMuCisgICAgLy8gTk9URSAjMTogVGhpcyBkb2VzIE5PVCBpbmNsdWRlIHRoZSBjdXJy
ZW50IGVsZW1lbnQgKG1fZWxlbWVudCkhCisgICAgLy8gTk9URSAjMjogVGhpcyBmdW5jdGlvbiBp
cyBOT1QgcmVlbnRyYW50IQorICAgIGNvbnN0IFZlY3RvcjxTY29wZVN0YWNrRnJhbWU+JiBwYXJl
bnRTY29wZXNGb3JDdXJyZW50RWxlbWVudCgpOworCisgICAgLy8gVmVjdG9yICh1c2VkIGFzIHN0
YWNrKSB0aGF0IGtlZXBzIHRyYWNrIG9mIHNjb3BpbmcgZWxlbWVudHMgKGkuZS4sIGVsZW1lbnRz
IHdpdGggYSA8c3R5bGUgc2NvcGVkPiBjaGlsZCkKKyAgICAvLyBlbmNvdW50ZXJlZCBkdXJpbmcg
dHJlZSBpdGVyYXRpb24gZm9yIHN0eWxlIHJlc29sdXRpb24uCisgICAgVmVjdG9yPFNjb3BlU3Rh
Y2tGcmFtZT4gbV9zY29waW5nRWxlbWVudFN0YWNrOworICAgIC8vIFNhbWUgYXMgYWJvdmUgZm9y
IGNhc2VzIHdoZW4gZWxlbWVudCBzY29wZXMgYXJlIHJlcXVlc3RlZCBvdXQgb2Ygb3JkZXIuCisg
ICAgVmVjdG9yPFNjb3BlU3RhY2tGcmFtZT4gbV9zY3JhdGNoU2NvcGluZ0VsZW1lbnRTdGFjazsK
KyNlbmRpZgorCiAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlQXBwbHlQcm9wZXJ0eTsKICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uJiwgY29u
c3QgTWF0Y2hlZFN0eWxlRGVjbGFyYXRpb24mKTsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uJiwgY29uc3QgTWF0Y2hlZFN0eWxlRGVjbGFy
YXRpb24mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggZjc0ZWVk
MDJjNmEwMjNkZWU1MzJiOTFjOWNiNzVhYzIyODBhODRhYi4uODIwNWFmMDM5Y2E5YzgzYmE5YzZi
NDcwMzkxZjk5ODVlY2ZiZWVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJI
VE1MT3B0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgpAQCAtMTI1LDQyICsxMjYsMzMgQEAgdm9pZCBTZWxlY3RvckNoZWNrZXI6OnBvcFBhcmVudFN0
YWNrRnJhbWUoKQogICAgIH0KIH0KIAotdm9pZCBTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJlbnQo
RWxlbWVudCogcGFyZW50KQordm9pZCBTZWxlY3RvckNoZWNrZXI6OnNldHVwUGFyZW50U3RhY2so
RWxlbWVudCogcGFyZW50KQogewotICAgIGlmIChtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSkgewot
ICAgICAgICBBU1NFUlQoIW1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKLSAgICAgICAgbV9h
bmNlc3RvcklkZW50aWZpZXJGaWx0ZXIgPSBhZG9wdFB0cihuZXcgQmxvb21GaWx0ZXI8Ymxvb21G
aWx0ZXJLZXlCaXRzPik7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG5vdCB0aGUgcm9v
dCBpdHNlbGYsIGJ1aWxkIHRoZSBzdGFjayBzdGFydGluZyBmcm9tIHRoZSByb290LgotICAgICAg
ICBpZiAocGFyZW50LT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxF
bGVtZW50KiwgMzA+IGFuY2VzdG9yczsKLSAgICAgICAgICAgIGZvciAoRWxlbWVudCogYW5jZXN0
b3IgPSBwYXJlbnQ7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRPckhvc3RF
bGVtZW50KCkpCi0gICAgICAgICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChhbmNlc3Rvcik7Ci0g
ICAgICAgICAgICBpbnQgY291bnQgPSBhbmNlc3RvcnMuc2l6ZSgpOwotICAgICAgICAgICAgZm9y
IChpbnQgbiA9IGNvdW50IC0gMTsgbiA+PSAwOyAtLW4pCi0gICAgICAgICAgICAgICAgcHVzaFBh
cmVudFN0YWNrRnJhbWUoYW5jZXN0b3JzW25dKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoIXBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpKSB7Ci0g
ICAgICAgIC8vIFdlIGFyZSBub3QgYWx3YXlzIGludm9rZWQgY29uc2lzdGVudGx5LiBGb3IgZXhh
bXBsZSwgc2NyaXB0IGV4ZWN1dGlvbiBjYW4gY2F1c2UgdXMgdG8gZW50ZXIKLSAgICAgICAgLy8g
c3R5bGUgcmVjYWxjIGluIHRoZSBtaWRkbGUgb2YgdHJlZSBidWlsZGluZy4gUmVzZXQgdGhlIHN0
YWNrIGlmIHdlIHNlZSBhIG5ldyByb290IGVsZW1lbnQuCi0gICAgICAgIEFTU0VSVChtX2FuY2Vz
dG9ySWRlbnRpZmllckZpbHRlcik7Ci0gICAgICAgIG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVy
LT5jbGVhcigpOwotICAgICAgICBtX3BhcmVudFN0YWNrLnJlc2l6ZSgwKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOwotICAgICAgICAv
LyBXZSBtYXkgZ2V0IGludm9rZWQgZm9yIHNvbWUgcmFuZG9tIGVsZW1lbnRzIGluIHNvbWUgd2Fj
a3kgY2FzZXMgZHVyaW5nIHN0eWxlIHJlc29sdmUuCi0gICAgICAgIC8vIFBhdXNlIG1haW50YWlu
aW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCi0gICAgICAgIGlmIChtX3BhcmVudFN0YWNrLmxh
c3QoKS5lbGVtZW50ICE9IHBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVChtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSA9PSAhbV9hbmNl
c3RvcklkZW50aWZpZXJGaWx0ZXIpOworICAgIC8vIEtpbGwgd2hhdGV2ZXIgd2Ugc3RvcmVkIGJl
Zm9yZS4KKyAgICBtX3BhcmVudFN0YWNrLnNocmluaygwKTsKKyAgICBtX2FuY2VzdG9ySWRlbnRp
ZmllckZpbHRlciA9IGFkb3B0UHRyKG5ldyBCbG9vbUZpbHRlcjxibG9vbUZpbHRlcktleUJpdHM+
KTsKKyAgICAvLyBGYXN0IHZlcnNpb24gaWYgcGFyZW50IGlzIGEgcm9vdCBlbGVtZW50OgorICAg
IGlmICghcGFyZW50LT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKKyAgICAgICAgcHVzaFBhcmVudFN0
YWNrRnJhbWUocGFyZW50KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwdXNoUGFyZW50
U3RhY2tGcmFtZShwYXJlbnQpOworICAgIC8vIE90aGVyd2lzZSBjbGltYiB1cCB0aGUgdHJlZS4K
KyAgICBWZWN0b3I8RWxlbWVudCosIDMwPiBhbmNlc3RvcnM7CisgICAgZm9yIChFbGVtZW50KiBh
bmNlc3RvciA9IHBhcmVudDsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE9y
SG9zdEVsZW1lbnQoKSkKKyAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChhbmNlc3Rvcik7CisgICAg
Zm9yIChzaXplX3QgbiA9IGFuY2VzdG9ycy5zaXplKCk7IG47IC0tbikKKyAgICAgICAgcHVzaFBh
cmVudFN0YWNrRnJhbWUoYW5jZXN0b3JzW24gLSAxXSk7CiB9CiAKLXZvaWQgU2VsZWN0b3JDaGVj
a2VyOjpwb3BQYXJlbnQoRWxlbWVudCogcGFyZW50KQordm9pZCBTZWxlY3RvckNoZWNrZXI6OnB1
c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KQogewotICAgIGlmIChtX3BhcmVudFN0YWNrLmlzRW1w
dHkoKSB8fCBtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ICE9IHBhcmVudCkKKyAgICBBU1NF
UlQobV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOworICAgIC8vIFdlIG1heSBnZXQgaW52b2tl
ZCBmb3Igc29tZSByYW5kb20gZWxlbWVudHMgaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5
bGUgcmVzb2x2ZS4KKyAgICAvLyBQYXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBj
YXNlLgorICAgIGlmIChtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ICE9IHBhcmVudC0+cGFy
ZW50T3JIb3N0RWxlbWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgcG9wUGFyZW50U3RhY2tG
cmFtZSgpOworICAgIHB1c2hQYXJlbnRTdGFja0ZyYW1lKHBhcmVudCk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb2xsZWN0RGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcyhjb25z
dCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIHVuc2lnbmVkKiYgaGFzaCwgY29uc3QgdW5zaWduZWQq
IGVuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCA3MjlhMDU2NTExNzg1
MWY0ODliNzYyOTBiZDRhNDhiNDEzMTQ3OWU3Li4zZjk0NjllNWQ3OWIwOWM5YWI4NDJlNzQyZDg1
ZmFkNzE3Yjk0NzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC02MCw5
ICs2MCwxMSBAQCBwdWJsaWM6CiAgICAgaW5saW5lIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNv
bnN0IHVuc2lnbmVkKiBpZGVudGlmaWVySGFzaGVzKSBjb25zdDsKICAgICBzdGF0aWMgdm9pZCBj
b2xsZWN0SWRlbnRpZmllckhhc2hlcyhjb25zdCBDU1NTZWxlY3RvciosIHVuc2lnbmVkKiBpZGVu
dGlmaWVySGFzaGVzLCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKIAorICAgIHZv
aWQgc2V0dXBQYXJlbnRTdGFjayhFbGVtZW50KiBwYXJlbnQpOwogICAgIHZvaWQgcHVzaFBhcmVu
dChFbGVtZW50KiBwYXJlbnQpOwotICAgIHZvaWQgcG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCk7
Ci0gICAgYm9vbCBwYXJlbnRTdGFja0lzQ29uc2lzdGVudChDb250YWluZXJOb2RlKiBwYXJlbnRO
b2RlKSBjb25zdCB7IHJldHVybiAhbV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRT
dGFjay5sYXN0KCkuZWxlbWVudCA9PSBwYXJlbnROb2RlOyB9CisgICAgdm9pZCBwb3BQYXJlbnQo
KSB7IHBvcFBhcmVudFN0YWNrRnJhbWUoKTsgfQorICAgIGJvb2wgcGFyZW50U3RhY2tJc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIHBh
cmVudFN0YWNrSXNDb25zaXN0ZW50KGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUpIGNv
bnN0IHsgcmV0dXJuICFtX3BhcmVudFN0YWNrLmlzRW1wdHkoKSAmJiBtX3BhcmVudFN0YWNrLmxh
c3QoKS5lbGVtZW50ID09IHBhcmVudE5vZGU7IH0KIAogICAgIEVJbnNpZGVMaW5rIGRldGVybWlu
ZUxpbmtTdGF0ZShFbGVtZW50KikgY29uc3Q7CiAgICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFu
Z2VkKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggOGFiMzQyNTUzMjNlYWQ0MzRlNzA3N2JmNTBhMGE4ZTc1NGE5ODU2Yy4u
NWExY2M4OWFhYzVhOWY5MDcxY2M3OTlkNjI3NjZlYWRiNzhmNzg1YSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI2IEBACisyMDEyLTAxLTMwICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIDxzdHlsZSBzY29wZWQ+OiBJbXBsZW1lbnQgc2NvcGVkIHN0eWxl
c2hlZXRzIGFuZCBiYXNpYyBhcHBsaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxOTAKKworICAgICAgICBUZXN0IHRoYXQgPHN0eWxlIHNj
b3BlZD4gYWZmZWN0cyBzdHlsZXMgYW5kIGlzIHVwZGF0ZWQgY29ycmVjdGx5OgorICAgICAgICAt
KSBiYXNpYyB0ZXN0CisgICAgICAgIC0pIHRlc3Qgc2V0dGluZy91bi1zZXR0aW5nIHRoZSAnc2Nv
cGVkJyBhdHRyaWJ1dGUKKyAgICAgICAgLSkgdGVzdCBpbnNlcnRpbmcvcmVtb3ZpbmcgYSB3aG9s
ZSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0
dGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0
eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1kZXRhY2guaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQt
c2V0LXNjb3BlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sOiBBZGRlZC4KKwogMjAxMi0wMS0y
OSAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVzZXJ2
ZWQgV29yZCB0ZXN0cyBmYWlsIG9uIENocm9taXVtIGFmdGVyIHIxMDYxOTgKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29w
ZWQtYXR0YWNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmUwNjcxZmFjNmUxNmUzM2E0MmM0
MjlhZmVmZWRkMWEzNWFmOGNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMjcgQEAKK1Rlc3QgYXR0YWNoaW5nIGEgbmV3IDxzdHlsZSBzY29wZWQ+IGVsZW1lbnQKKwor
VGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0t
LQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigwLCAwLCAwKQor
UDI6IHJnYigwLCAwLCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0t
IEFGVEVSIEFUVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1Ax
OiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitT
MzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQt
YXR0YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLWF0dGFjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwM2RmNTVkZTQ5YmY2Y2ZlMWY4YzZhZDQwYjBl
NjUwY2Y4YWU2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHls
ZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQu
ZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVl
KCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQorICAg
ICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsK
KyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAg
ICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2co
Jy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAgICAg
ICAgbG9nKCctLS0gQUZURVIgQVRUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLScpOworICAgICAg
ICAgICAgdmFyIGRpdkVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRElWJyk7CisgICAg
ICAgICAgICB2YXIgc3R5bGVFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsK
KyAgICAgICAgICAgIHN0eWxlRWxlbS5zZXRBdHRyaWJ1dGUoJ3Njb3BlZCcsIHRydWUpOworICAg
ICAgICAgICAgc3R5bGVFbGVtLmlubmVySFRNTCA9ICdkaXYgeyBjb2xvcjogcmVkOyB9IHAgeyBj
b2xvcjogZ3JlZW47IH0nOworICAgICAgICAgICAgZGl2RWxlbS5pbnNlcnRCZWZvcmUoc3R5bGVF
bGVtLCBkaXZFbGVtLmZpcnN0Q2hpbGQpOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAgICAgbG9nKCct
LS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4K
KyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNvbG9y
OiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3Rz
KCk7Ij4KKyAgICA8cD5UZXN0IGF0dGFjaGluZyBhIG5ldyAmbHQ7c3R5bGUgc2NvcGVkJmd0OyBl
bGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4K
KyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9IkRJ
ViI+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAy
Ij5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+
VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAg
IDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LWJhc2ljLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTEyZmRjMGY4M2VjMTQ5M2E0MmMyNTli
M2YxODJiYjBmNTZjNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0
MiBAQAorVGVzdCA8c3R5bGUgc2NvcGVkPgorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKK1Rl
eHQKK1RleHQKKworVGV4dAorVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CitUZXh0CisK
K1RleHQKK1RleHQKKy0tLSBDT01QVVRFRCBTVFlMRVMgLS0tCitTMTogcmdiKDAsIDAsIDApCitQ
MTogcmdiKDAsIDAsIDApCitSMTogcmdiKDAsIDAsIDApCitFMTogcmdiKDAsIDAsIDApCisKK1My
OiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitSMjogcmdiKDAsIDAsIDI1NSkK
KworUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorUjM6IHJnYigwLCAwLCAwKQor
RTM6IHJnYigwLCAwLCAwKQorCitTNDogcmdiKDAsIDAsIDApCitQNDogcmdiKDAsIDAsIDApCitS
NDogcmdiKDAsIDAsIDApCitFNDogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQt
YmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29w
ZWQtYmFzaWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZTViNDMxYTkxNmEzOWM2OWZiZGY4NjY4NjRhZThk
ZmYzZDY4Y2VlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy5odG1sCkBAIC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
dGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVm
YXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdj
b2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAg
ICAgIGxvZygnLS0tIENPTVBVVEVEIFNUWUxFUyAtLS0nKTsKKworICAgICAgICAgICAgdGVzdCgn
UzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdSMScpOwor
ICAgICAgICAgICAgdGVzdCgnRTEnKTsKKyAgICAgICAgICAgIGxvZygnJyk7CisgICAgICAgICAg
ICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3Qo
J1IyJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAg
ICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgICAgICB0ZXN0KCdSMycpOworICAgICAgICAg
ICAgdGVzdCgnRTMnKTsKKyAgICAgICAgICAgIGxvZygnJyk7CisgICAgICAgICAgICB0ZXN0KCdT
NCcpOworICAgICAgICAgICAgdGVzdCgnUDQnKTsKKyAgICAgICAgICAgIHRlc3QoJ1I0Jyk7Cisg
ICAgICAgICAgICB0ZXN0KCdFNCcpOworCisgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAt
LS0nKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2Nz
cyI+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFk
PgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCAmbHQ7c3R5bGUgc2Nv
cGVkJmd0OzwvcD4KKyAgICA8ZGl2IGNsYXNzPSJmb28iPgorICAgICAgICA8c3BhbiBpZD0iUzEi
PlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICAgICAgPHByZSBp
ZCA9ICJSMSIgY2xhc3M9ImJhciI+VGV4dDwvcHJlPgorICAgICAgICA8cHJlIGlkPSJFMSIgY2xh
c3M9ImJheiI+VGV4dDwvcHJlPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxkaXY+
CisgICAgICAgICAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgICAg
ICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAgICAgICAgICAgcCB7IGNvbG9yOiBncmVl
bjsgfQorICAgICAgICAgICAgICAgIGRpdiAuYmFyIHsgY29sb3I6IGJsdWU7IH0KKyAgICAgICAg
ICAgIDwvc3R5bGU+CisgICAgICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAg
ICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgICAgICAgICA8cHJlIGlkPSJSMiIgY2xh
c3M9ImJhciI+VGV4dDwvcHJlPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMz
Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgICAgIDxwcmUg
aWQgPSAiUjMiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBpZD0iRTMiIGNs
YXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJmb28iPgor
ICAgICAgICA8c3BhbiBpZD0iUzQiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQNCI+VGV4
dDwvcD4KKyAgICAgICAgPHByZSBpZCA9ICJSNCIgY2xhc3M9ImJhciI+VGV4dDwvcHJlPgorICAg
ICAgICA8cHJlIGlkPSJFNCIgY2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgIDwvZGl2PgorICAg
IDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2gtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1kZXRhY2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3ZWY2NTMxNzQwNzJiNzg4N2Y3ZGYz
ZGFiZjkxYTlhNzM0MGUzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwyNyBAQAorVGVzdCBkZXRhY2hpbmcgYSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisKK1RleHQK
K1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0KK1Mx
OiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6
IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0g
QUZURVIgREVUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6
IHJnYigwLCAwLCAwKQorUzI6IHJnYigwLCAwLCAwKQorUDI6IHJnYigwLCAwLCAwKQorUzM6IHJn
YigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFj
aC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1k
ZXRhY2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzhiZjZhODY2MTI3MGY4NjFjYjg1NThhYzMyN2ExODc3
MWYzOWVkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbApAQCAtMCwwICsxLDcyIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
PgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRl
c3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1
bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29s
b3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAg
eworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAg
ICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAg
IHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0g
T1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxv
ZygnLS0tIEFGVEVSIERFVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0nKTsKKyAgICAgICAgICAg
IHZhciBkaXZFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RJVicpOworICAgICAgICAg
ICAgdmFyIHN0eWxlRWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScpOworICAg
ICAgICAgICAgZGl2RWxlbS5yZW1vdmVDaGlsZChzdHlsZUVsZW0pOworICAgICAgICAgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAg
ICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0K
KyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAg
ICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBv
bmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0IGRldGFjaGluZyBhICZsdDtzdHlsZSBz
Y29wZWQmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5U
ZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAg
PGRpdiBpZD0iRElWIj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9jc3Mi
IHNjb3BlZD4KKyAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgIHAg
eyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9IlMy
Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+Cisg
ICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBp
ZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHls
ZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTIwNTg3ZGY1YWZmZjYyZGMyN2Y2MmFhZWM0NTBiMzM3
NjVjYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3
IEBACitUZXN0IHJlbW92aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSA8c3R5bGU+IGVs
ZW1lbnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9S
SUdJTkFMIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigy
NTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2Io
MCwgMCwgMCkKKy0tLSBBRlRFUiBVTi1TRVRUSU5HIEBTQ09QRUQgLS0tCitTMTogcmdiKDI1NSwg
MCwgMCkKK1AxOiByZ2IoMCwgMTI4LCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAs
IDEyOCwgMCkKK1MzOiByZ2IoMjU1LCAwLCAwKQorUDM6IHJnYigwLCAxMjgsIDApCistLS0gRklO
SVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZWFhZjM3NzRjYWIyZmE3NGZkNzBjNjExYWUwMzJiYTExODQzZDdlZAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3Zl
LXNjb3BlZC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0
aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsg
J1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAg
eworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Cisg
ICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0
ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0
ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1My
Jyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAg
ICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5U
ZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsK
KyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgVU4t
U0VUVElORyBAU0NPUEVEIC0tLScpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ1NUWUxFJykucmVtb3ZlQXR0cmlidXRlKCdzY29wZWQnKTsKKyAgICAgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAg
ICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9Cisg
ICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAg
IGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCByZW1vdmluZyB0aGUgJ3Njb3BlZCcgYXR0
cmlidXRlIG9uIGEgJmx0O3N0eWxlJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAg
IDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgor
ICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9InRl
eHQvY3NzIiBzY29wZWQ+CisgICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAg
ICAgICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxzcGFu
IGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwv
ZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAg
ICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUi
PjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmEwYzc5NjNjOTdjNDc4MDFlMDg0OTY3NTExMzcyMjJj
NDY2NWQxYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNj
b3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBA
QAorVGVzdCBzZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSA8c3R5bGU+IGVsZW1l
bnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJ
TkFMIC0tLQorUzE6IHJnYigyNTUsIDAsIDApCitQMTogcmdiKDAsIDEyOCwgMCkKK1MyOiByZ2Io
MjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDI1NSwgMCwgMCkKK1AzOiBy
Z2IoMCwgMTI4LCAwKQorLS0tIEFGVEVSIFNFVFRJTkcgQFNDT1BFRCAtLS0KK1MxOiByZ2IoMCwg
MCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAx
MjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQg
LS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHls
ZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTkwM2JkNDFlMjk5
ZDAzNTAxY2VmMTA1NDBmZTE5NTAwYzRlODJlZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCkBA
IC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyku
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAg
ICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAg
dmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2co
aWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBu
dWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAg
ICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAg
ICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3Qo
J1AzJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRl
c3RBbGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgU0VUVElORyBAU0NPUEVEIC0t
LScpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxFJykuc2V0QXR0
cmlidXRlKCdzY29wZWQnLCB0cnVlKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0t
IEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cisg
ICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjog
YmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygp
OyI+CisgICAgPHA+VGVzdCBzZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSAmbHQ7
c3R5bGUmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5U
ZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAg
PGRpdj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9jc3MiPgorICAgICAg
ICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAgcCB7IGNvbG9yOiBncmVlbjsg
fQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+Cisg
ICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAg
ICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4K
KyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124525</attachid>
            <date>2012-01-30 04:55:30 -0800</date>
            <delta_ts>2012-01-30 21:04:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73190-20120130215528.patch</filename>
            <type>text/plain</type>
            <size>47146</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ0MjYxN2UzZGNkYWJj
YWRkNGUwM2NjZjI0ZDVmYTU2ZmNjYThjOS4uMWE2YzljYmQzZjk3Y2Y2MGI0NWQ3YzE1ZmM1ZWE1
MTFhODY5ZjI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTAxLTMwICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIDxzdHls
ZSBzY29wZWQ+OiBJbXBsZW1lbnQgc2NvcGVkIHN0eWxlc2hlZXRzIGFuZCBiYXNpYyBhcHBsaWNh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMx
OTAKKworICAgICAgICBJbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgPHN0eWxlIHNjb3BlZD46Cisg
ICAgICAgIEFkZCBhIHZlY3RvciBzdGFjayB0byBDU1NTdHlsZVNlbGVjdG9yIHRoYXQga2VlcHMg
dHJhY2sgb2YgZW5jb3VudGVyZWQgc2NvcGluZyBlbGVtZW50cy4gVGhpcyBpcworICAgICAgICB1
c2VkIGZvciBPKDEpIGFjY2VzcyB0byBhbGwgcmVsZXZhbnQgc3R5bGUgc2hlZXRzIGZvciBhIGdp
dmVuIGVsZW1lbnQuCisgICAgICAgIEFkYXB0IG1hdGNoaW5nIG9mIGF1dGhvciBzdHlsZSBzaGVl
dHMgdG8gYWxzbyBjb25zdWx0IGFwcHJvcHJpYXRlIHNjb3BlZCBzaGVldHMuCisgICAgICAgIEZp
bmFsbHksIHByZXZlbnQgc3R5bGUgc2hhcmluZyBmcm9tIGNyb3NzaW5nIGludG8vb3V0IG9mIHNj
b3BlZCBzdHlsZSBib3VuZGFyaWVzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVk
LWF0dGFjaC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUt
c2NvcGVkLWJhc2ljLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9z
dHlsZS1zY29wZWQtZGV0YWNoLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNj
b3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCisgICAgICAgICAgICAgICBmYXN0
L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbAorCisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoUnVsZVNldCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKTogYWRkIGNvZGUg
Zm9yIHNjb3BlZCBzdHlsZSBzaGVldHMKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OmNvbGxlY3RGZWF0dXJlcyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVNjb3BpbmdFbGVtZW50KTogZGV0
ZXJtaW5lIHdoZXRoZXIgYW4gYXV0aG9yIHNoZWV0IGlzIHNjb3BlZCAoYW5kIHRvIHdoaWNoIHNj
b3BlKSwgb3IgZ2xvYmFsCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzY29w
ZWRSdWxlU2V0Rm9yRWxlbWVudCk6IHJldHVybnMgdGhlIFJ1bGVTZXQgZm9yIHRoZSA8c3R5bGUg
c2NvcGVkPiBjb250YWluZWQgYnkgdGhlIHBhc3NlZC1pbiBlbGVtZW50IChpZiBhbnkpLCBvciAw
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBlbmRBdXRob3JTdHlsZXNo
ZWV0cyk6IGFkZCBjb2RlIGZvciBzY29wZWQgc3R5bGUgc2hlZXRzCisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpzZXR1cFNjb3BpbmdFbGVtZW50U3RhY2spOiBkZXRlcm1pbmUg
c2NvcGluZyBlbGVtZW50IGFuY2VzdG9ycyBvZiB0aGUgZ2l2ZW4gZWxlbWVudAorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHVzaFBhcmVudCk6IHNpbXBsaWZ5IGFuZCByZWZh
Y3RvciBTZWxlY3RvckNoZWNrZXI6OnB1c2hQYXJlbnQsIGFzIGNvZGUgaW4gQ1NTdHlsZVNlbGVj
dG9yIG5lZWRzIHBhcnRpYWwgYWNjZXNzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpwb3BQYXJlbnQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKTogaGVscGVyIGZ1bmN0aW9uCisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVzKTogdXNlIEF1dGhv
clJ1bGVTZXRJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYWxsIHJlbGV2YW50IFJ1bGVTZXRzCisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKTogYWRhcHQgZm9y
IHNjb3BlZCBzdHlsZSBydWxlcworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
bWF0Y2hBbGxSdWxlcyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9y
Ojpsb2NhdGVDb3VzaW5MaXN0KTogcHJldmVudCBzdHlsZSBzaGFyaW5nIGFjcm9zcyBzY29wZSBi
b3VuZGFyaWVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0
eWxlV2l0aEVsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6bG9jYXRlU2hhcmVkU3R5bGUpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KTogY2hhbmdlZCBjYWxsIHRvIG1hdGNoQXV0
aG9yUnVsZXMKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yUGFn
ZSk6IGFkZCBjb21tZW50CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjaGVj
a1JlZ2lvblN0eWxlKTogYWRkIGdsb2JhbCBzY29wZSBwYXJhbWV0ZXIKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KTogY2hhbmdl
ZCBjYWxsIHRvIG1hdGNoQXV0aG9yUnVsZXMKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFk
ZFJ1bGVzRnJvbVNoZWV0KTogYWRhcHQgZm9yIHNjb3BlZCBzdHlsZSBydWxlcworICAgICAgICAq
IGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgIChDU1NTdHlsZVNlbGVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlNjb3BlU3RhY2tGcmFtZTo6U2NvcGVT
dGFja0ZyYW1lKTogc3RydWN0IGhvbGRpbmcgYW4gRWxlbWVudCBwb2ludGVyIGFuZCBhIFJ1bGVT
ZXQgcG9pbnRlciwgdG8gYmUgdXNlZCBpbiBhIFZlY3RvcgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6c2NvcGluZ0VsZW1lbnRTdGFja0lzQ29uc2lzdGVudCk6IHJldHVybnMg
aWYgdGhlIGxhc3Qgc2VlbiBwYXJlbnQgbWF0Y2hlcyB0aGUgcGFzc2VkLWluIGVsZW1lbnQKKyAg
ICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ2hlY2tlcjo6c2V0dXBQYXJlbnRTdGFjayk6IHNldCB1cCB0aGUgcGFyZW50IHN0YWNrIChy
ZWZhY3RvcmluZykKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6cHVzaFBhcmVu
dCk6IHNpbXBsaWZ5IGFuZCByZWZhY3RvcgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6cG9wUGFyZW50KTogZGl0dG8K
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6cGFyZW50U3RhY2tJc0VtcHR5KTog
ZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6cGFyZW50U3RhY2tJc0Nv
bnNpc3RlbnQpOiBtYWtlIHBhcmFtZXRlciBjb25zdAorCiAyMDEyLTAxLTI5ICBOb2VsIEdvcmRv
biAgPG5vZWwuZ29yZG9uQGdtYWlsLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFVzZSBkZWNv
ZGluZyBzd2l6emxlIG9ubHkgb24gbGlianBlZy10dXJibyAxLjEuOTArCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggZTMyYjY1YmI2YmE5NWUyNjAzYjNiYWI4NDU4
Nzc0MzVmYzk0NDI3NS4uNTc4YzZhN2UwYTFhMmRjZjdlMDlkZjg5YjVmODViNTQ3MmJhMzVjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtNjUsNiArNjUsNyBA
QAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJLZXlmcmFtZUxpc3QuaCIKQEAgLTIy
Miw3ICsyMjMsNyBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5n
SW1wbCosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKIAotICAgIHZv
aWQgYWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFs
dWF0b3ImLCBDU1NTdHlsZVNlbGVjdG9yKiA9IDApOworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hl
ZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNl
bGVjdG9yKiA9IDAsIGNvbnN0IEVsZW1lbnQqID0gMCk7CiAKICAgICB2b2lkIGFkZFN0eWxlUnVs
ZShDU1NTdHlsZVJ1bGUqKTsKICAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiwgQ1NTU2Vs
ZWN0b3IqKTsKQEAgLTMzNyw2ICszMzgsOSBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNl
bGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKICAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCiAj
ZW5kaWYKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgICwgbV9zY29waW5nRWxlbWVudFN0
YWNrUGFyZW50KDApCisjZW5kaWYKIHsKICAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRv
Y3VtZW50RWxlbWVudCgpOwogCkBAIC0zNjgsNiArMzcyLDggQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6
Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHls
ZVNoZWUKIAogICAgIG1fYXV0aG9yU3R5bGUgPSBhZG9wdFB0cihuZXcgUnVsZVNldCk7CiAgICAg
Ly8gQWRkaW5nIHJ1bGVzIGZyb20gbXVsdGlwbGUgc2hlZXRzLCBzaHJpbmsgYXQgdGhlIGVuZC4K
KyAgICAvLyBBZGRpbmcgZ2xvYmFsIHJ1bGVzIGZyb20gbXVsdGlwbGUgc2hlZXRzLCBzaHJpbmsg
YXQgdGhlIGVuZC4KKyAgICAvLyBOb3RlIHRoYXQgdGhlcmUgdXN1YWxseSBpcyBvbmx5IDEgc2hl
ZXQgZm9yIHNjb3BlZCBydWxlcywgc28gYXV0by1zaHJpbmstdG8tZml0IGlzIGZpbmUuCiAgICAg
bV9hdXRob3JTdHlsZS0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOwogCiAgICAgLy8gRklYTUU6
IFRoaXMgc3Vja3MhIFRoZSB1c2VyIHNoZWV0IGlzIHJlcGFyc2VkIGV2ZXJ5IHRpbWUhCkBAIC0z
OTcsOCArNDAzLDEwIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1l
bnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAgICAgIG1fdXNlclN0
eWxlID0gdGVtcFVzZXJTdHlsZS5yZWxlYXNlKCk7CiAKICAgICAvLyBBZGQgcnVsZXMgZnJvbSBl
bGVtZW50cyBsaWtlIFNWRydzIDxmb250LWZhY2U+Ci0gICAgaWYgKG1hcHBlZEVsZW1lbnRTaGVl
dCkKKyAgICBpZiAobWFwcGVkRWxlbWVudFNoZWV0KSB7CisgICAgICAgIC8vIEZJWE1FOiBzZWUg
aWYgc3R5bGUgc2NvcGVzIGNhbi9zaG91bGQgYmUgYWRkZWQgaGVyZS4KICAgICAgICAgbV9hdXRo
b3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWFwcGVkRWxlbWVudFNoZWV0LCAqbV9tZWRpdW0s
IHRoaXMpOworICAgIH0KIAogICAgIC8vIGFkZCBzdHlsZXNoZWV0cyBmcm9tIGRvY3VtZW50CiAg
ICAgYXBwZW5kQXV0aG9yU3R5bGVzaGVldHMoMCwgc3R5bGVTaGVldHMtPnZlY3RvcigpKTsKQEAg
LTQyMyw2ICs0MzEsMTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0RmVhdHVyZXMo
KQogICAgIC8vIHNoYXJpbmcgY2FuZGlkYXRlcy4KICAgICBtX2ZlYXR1cmVzLmFkZChkZWZhdWx0
U3R5bGUtPmZlYXR1cmVzKCkpOwogICAgIG1fZmVhdHVyZXMuYWRkKG1fYXV0aG9yU3R5bGUtPmZl
YXR1cmVzKCkpOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgZm9yIChTY29wZWRSdWxl
U2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9
IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQorICAgICAgICBtX2ZlYXR1cmVzLmFk
ZChpdC0+c2Vjb25kLT5mZWF0dXJlcygpKTsKKyNlbmRpZgogICAgIGlmIChtX3VzZXJTdHlsZSkK
ICAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOwogCkBAIC00
MzAsNiArNDQyLDMxIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdEZlYXR1cmVzKCkK
ICAgICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMu
dW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7CiB9CiAKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQor
RWxlbWVudCogQ1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU2NvcGluZ0VsZW1lbnQoY29uc3Qg
Q1NTU3R5bGVTaGVldCogc2hlZXQpCit7CisgICAgQVNTRVJUKHNoZWV0KTsKKworICAgIE5vZGUq
IG93bmVyTm9kZSA9IHNoZWV0LT5maW5kU3R5bGVTaGVldE93bmVyTm9kZSgpOworICAgIGlmICgh
b3duZXJOb2RlIHx8ICFvd25lck5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAhb3duZXJOb2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IEhUTUxTdHlsZUVsZW1lbnQqIHN0eWxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVs
ZW1lbnQqPihvd25lck5vZGUpOworICAgIGlmICghc3R5bGVFbGVtZW50LT5zY29wZWQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5wYXJlbnRFbGVtZW50
KCk7Cit9CisKK2lubGluZSBSdWxlU2V0KiBDU1NTdHlsZVNlbGVjdG9yOjpzY29wZWRSdWxlU2V0
Rm9yRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIGlmICghZWxl
bWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
U2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxl
cy5maW5kKGVsZW1lbnQpOworICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5l
bmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKK30KKyNlbmRpZgorCiB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHN0eWxlc2hlZXRzKQogewogICAgIC8vIFRo
aXMgaGFuZGxlcyBzaGVldHMgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3R5bGVzaGVldCBsaXN0
IG9ubHkuIEluIG90aGVyIGNhc2VzIHRoZSBzdHlsZSByZXNvbHZlcgpAQCAtNDM4LDcgKzQ3NSwx
OCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2ln
bmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UgogICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0
TmV3OyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGlmICghc3R5bGVzaGVldHNbaV0tPmlzQ1NT
U3R5bGVTaGVldCgpIHx8IHN0eWxlc2hlZXRzW2ldLT5kaXNhYmxlZCgpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN0YXRp
Y19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZXNoZWV0c1tpXS5nZXQoKSksICptX21lZGl1bSwg
dGhpcyk7CisgICAgICAgIENTU1N0eWxlU2hlZXQqIGNzc1NoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldCo+KHN0eWxlc2hlZXRzW2ldLmdldCgpKTsKKyNpZiBFTkFCTEUoU1RZTEVfU0NP
UEVEKQorICAgICAgICBjb25zdCBFbGVtZW50KiBzY29wZSA9IGRldGVybWluZVNjb3BpbmdFbGVt
ZW50KGNzc1NoZWV0KTsKKyAgICAgICAgaWYgKHNjb3BlKSB7CisgICAgICAgICAgICBwYWlyPFNj
b3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhv
clN0eWxlcy5hZGQoc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5z
ZWNvbmQpCisgICAgICAgICAgICAgICAgYWRkUmVzdWx0LmZpcnN0LT5zZWNvbmQgPSBhZG9wdFB0
cihuZXcgUnVsZVNldCgpKTsKKyAgICAgICAgICAgIGFkZFJlc3VsdC5maXJzdC0+c2Vjb25kLT5h
ZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIG1fYXV0aG9yU3R5
bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOwogICAgIH0K
ICAgICBtX2F1dGhvclN0eWxlLT5zaHJpbmtUb0ZpdCgpOwogICAgIGNvbGxlY3RGZWF0dXJlcygp
OwpAQCAtNDQ3LDYgKzQ5NSw2NyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhv
clN0eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UgogICAgICAgICBk
b2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rv
cigpKTsKIH0KIAorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCit2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OnNldHVwU2NvcGluZ0VsZW1lbnRTdGFjayhjb25zdCBFbGVtZW50KiBwYXJlbnQpCit7Cisg
ICAgLy8gU2hvcnRjdXQ6IGFib3J0IGlmIDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hl
cmUKKyAgICBpZiAobV9zY29wZWRBdXRob3JTdHlsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIEFT
U0VSVCghbV9zY29waW5nRWxlbWVudFN0YWNrUGFyZW50KTsKKyAgICAgICAgQVNTRVJUKG1fc2Nv
cGluZ0VsZW1lbnRTdGFjay5pc0VtcHR5KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1fc2NvcGluZ0VsZW1lbnRTdGFjay5zaHJpbmsoMCk7CisgICAgZm9yICg7IHBhcmVudDsgcGFy
ZW50ID0gcGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCkpIHsKKyAgICAgICAgUnVsZVNldCog
cnVsZVNldCA9IHNjb3BlZFJ1bGVTZXRGb3JFbGVtZW50KHBhcmVudCk7CisgICAgICAgIGlmIChy
dWxlU2V0KQorICAgICAgICAgICAgbV9zY29waW5nRWxlbWVudFN0YWNrLmFwcGVuZChTY29wZVN0
YWNrRnJhbWUocGFyZW50LCBydWxlU2V0KSk7CisgICAgfQorICAgIG1fc2NvcGluZ0VsZW1lbnRT
dGFjay5yZXZlcnNlKCk7CisgICAgbV9zY29waW5nRWxlbWVudFN0YWNrUGFyZW50ID0gcGFyZW50
OworfQorI2VuZGlmCisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cHVzaFBhcmVudChFbGVtZW50
KiBwYXJlbnQpCit7CisgICAgY29uc3QgRWxlbWVudCogcGFyZW50c1BhcmVudCA9IHBhcmVudC0+
cGFyZW50T3JIb3N0RWxlbWVudCgpOworICAgIC8vIFdlIGFyZSBub3QgYWx3YXlzIGludm9rZWQg
Y29uc2lzdGVudGx5LiBGb3IgZXhhbXBsZSwgc2NyaXB0IGV4ZWN1dGlvbiBjYW4gY2F1c2UgdXMg
dG8gZW50ZXIKKyAgICAvLyBzdHlsZSByZWNhbGMgaW4gdGhlIG1pZGRsZSBvZiB0cmVlIGJ1aWxk
aW5nLiBXZSBtYXkgYWxzbyBiZSBpbnZva2VkIGZyb20gc29tZXdoZXJlIHdpdGhpbiB0aGUgdHJl
ZS4KKyAgICAvLyBSZXNldCB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLCBvciBpZiB3ZSBzZWUgYSBu
ZXcgcm9vdCBlbGVtZW50LgorICAgIC8vIE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIG5ldyBwYXJl
bnQuCisgICAgaWYgKCFwYXJlbnRzUGFyZW50IHx8IG1fY2hlY2tlci5wYXJlbnRTdGFja0lzRW1w
dHkoKSkKKyAgICAgICAgbV9jaGVja2VyLnNldHVwUGFyZW50U3RhY2socGFyZW50KTsKKyAgICBl
bHNlCisgICAgICAgIG1fY2hlY2tlci5wdXNoUGFyZW50KHBhcmVudCk7CisKKyNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKQorICAgIGlmICghc2NvcGluZ0VsZW1lbnRTdGFja0lzQ29uc2lzdGVudChw
YXJlbnRzUGFyZW50KSkgeworICAgICAgICAvLyBJbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBz
dHlsZSByZXNvbHZlIHdlIG1heSBnZXQgaW52b2tlZCBmb3IgcmFuZG9tIGVsZW1lbnRzIC0KKyAg
ICAgICAgLy8gcmVjcmVhdGUgdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpbiBzdWNoIGNhc2Vz
LgorICAgICAgICBzZXR1cFNjb3BpbmdFbGVtZW50U3RhY2socGFyZW50KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBSdWxlU2V0KiBydWxlU2V0ID0gc2NvcGVkUnVsZVNldEZvckVsZW1l
bnQocGFyZW50KTsKKyAgICBpZiAocnVsZVNldCkKKyAgICAgICAgbV9zY29waW5nRWxlbWVudFN0
YWNrLmFwcGVuZChTY29wZVN0YWNrRnJhbWUocGFyZW50LCBydWxlU2V0KSk7CisgICAgbV9zY29w
aW5nRWxlbWVudFN0YWNrUGFyZW50ID0gcGFyZW50OworI2VuZGlmCit9CisKK3ZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6cG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKK3sKKyAgICAvLyBOb3RlIHRo
YXQgd2UgbWF5IGdldCBpbnZva2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdh
Y2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlLgorICAgIC8vIFBhdXNlIG1haW50YWluaW5n
IHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCisgICAgaWYgKG1fY2hlY2tlci5wYXJlbnRTdGFja0lz
Q29uc2lzdGVudChwYXJlbnQpKQorICAgICAgICBtX2NoZWNrZXIucG9wUGFyZW50KCk7CisjaWYg
RU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAvLyBPbmx5IGJvdGhlciB0byB1cGRhdGUgdGhlIHNj
b3BpbmcgZWxlbWVudCBzdGFjayBpZiBpdCBpcyBjb25zaXN0ZW50LgorICAgIGlmIChzY29waW5n
RWxlbWVudFN0YWNrSXNDb25zaXN0ZW50KHBhcmVudCkpIHsKKyAgICAgICAgbV9zY29waW5nRWxl
bWVudFN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9zY29waW5nRWxlbWVudFN0YWNrUGFy
ZW50ID0gcGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCk7CisgICAgfQorI2VuZGlmCit9CisK
IC8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHN0eWxlIHNldHRpbmcgZnVuY3Rpb24gZm9yIGtleWZy
YW1lIHN0eWxlcwogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRLZXlmcmFtZVN0eWxlKFBhc3NS
ZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZT4gcnVsZSkKIHsKQEAgLTY4NywxNiArNzk2LDgg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihS
dWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFIKICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50
JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoKQogewotICAgIG1fbWF0Y2hlZFJ1
bGVzLmNsZWFyKCk7Ci0KLSAgICBpZiAoIXJ1bGVzIHx8ICFtX2VsZW1lbnQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwg
bGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yUmVnaW9uKHJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOwotCiAgICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC03MjMsNiArODI0LDUwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0
CiAgICAgfQogfQogCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQXV0aG9yUnVsZXMoaW50
JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1
bGVzKQoreworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICBpZiAoIW1fZWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWF0Y2ggZ2xvYmFsIGF1dGhvciBydWxlcy4K
KyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBmaXJzdFJ1bGVJ
bmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yUmVnaW9uKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisKKyNpZiBFTkFCTEUoU1RZTEVfU0NP
UEVEKQorICAgIC8vIE1hdGNoIHNjb3BlZCBhdXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUg
c2NvcGVkIGVsZW1lbnQgc3RhY2sgKHJlYnVpbGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCku
CisgICAgY29uc3QgRWxlbWVudCogcGFyZW50ID0gbV9lbGVtZW50LT5wYXJlbnRPckhvc3RFbGVt
ZW50KCk7CisgICAgaWYgKCFzY29waW5nRWxlbWVudFN0YWNrSXNDb25zaXN0ZW50KHBhcmVudCkp
CisgICAgICAgIHNldHVwU2NvcGluZ0VsZW1lbnRTdGFjayhwYXJlbnQpOworICAgIGZvciAoc2l6
ZV90IGkgPSBtX3Njb3BpbmdFbGVtZW50U3RhY2suc2l6ZSgpOyBpOyAtLWkpIHsKKyAgICAgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXMobV9zY29waW5nRWxlbWVudFN0YWNrW2kgLSAxXS5tX3J1bGVT
ZXQsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7Cisg
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1fc2NvcGluZ0VsZW1lbnRTdGFj
a1tpIC0gMV0ubV9ydWxlU2V0LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOworICAgIH0KKyAgICAvLyBBbHNvIGluY2x1ZGUgdGhlIGN1cnJlbnQgZWxl
bWVudC4KKyAgICBSdWxlU2V0KiBydWxlU2V0ID0gc2NvcGVkUnVsZVNldEZvckVsZW1lbnQobV9l
bGVtZW50KTsKKyAgICBpZiAocnVsZVNldCkgeworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxl
cyhydWxlU2V0LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVs
ZXMpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihydWxlU2V0LCBmaXJz
dFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIH0KKyNl
bmRpZgorCisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKCk7Cit9CisKK3ZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJ
bmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworICAg
IG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICBpZiAoIXJ1bGVzIHx8ICFtX2VsZW1lbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVzLCBmaXJz
dFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKHJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworCisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1
bGVzKCk7Cit9CisKIGNsYXNzIE1hdGNoaW5nVUFSdWxlc1Njb3BlIHsKIHB1YmxpYzoKICAgICBN
YXRjaGluZ1VBUnVsZXNTY29wZSgpOwpAQCAtODcwLDcgKzEwMTUsNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKICAgICAKICAgICAv
LyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgogICAgIGlmIChtX21hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdl
dCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0
aG9yUnVsZSwgZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdC5yYW5nZXMu
Zmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7CiAK
ICAgICAvLyBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCiAgICAgaWYgKG1f
bWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCkgewpAQCAtOTMzLDYg
KzEwNzgsMTAgQEAgTm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVt
ZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUMKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiAwOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYgKHBhcmVudC0+aGFzU2Nv
cGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKICAgICBTdHls
ZWRFbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudCk7CiAgICAg
aWYgKHAtPmlubGluZVN0eWxlRGVjbCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEwOTYsNiAr
MTI0NSwxMSBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVu
dChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmIChlbGVtZW50LT5oYXNJRCgp
ICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVz
b2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorI2lmIEVOQUJMRShT
VFlMRV9TQ09QRUQpCisgICAgaWYgKGVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCiAgICAgYm9vbCBpc0NvbnRyb2wgPSBl
bGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpOwogCiAgICAgaWYgKGlzQ29udHJvbCAhPSBt
X2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCkBAIC0xMTY3LDYgKzEzMjEsMTAgQEAg
UmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgaWYgKHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50
U3R5bGUpKQogICAgICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAg
IGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAg
IHJldHVybiAwOworI2VuZGlmCiAKICAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQg
dGhlaXIgY291c2lucy4KICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CkBAIC0xNDg2LDcgKzE2NDQs
NyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHls
ZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLAogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzKSB7CiAgICAgICAgIG1hdGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJS
dWxlLCBmYWxzZSk7Ci0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RB
dXRob3JSdWxlLCBmYWxzZSk7CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMobWF0Y2hSZXN1bHQu
cmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxl
LCBmYWxzZSk7CiAgICAgfQogCiAgICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlzRW1wdHkoKSkKQEAg
LTE1MjMsNiArMTY4MSw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0
b3I6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIGNvbnN0IFN0cmluZyBwYWdlID0g
cGFnZU5hbWUocGFnZUluZGV4KTsKICAgICBtYXRjaFBhZ2VSdWxlcyhkZWZhdWx0UHJpbnRTdHls
ZSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICBtYXRjaFBhZ2VSdWxlcyhtX3VzZXJTdHls
ZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICAvLyBPbmx5IGNvbnNpZGVyIHRo
ZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1
IHNwZWMuCiAgICAgbWF0Y2hQYWdlUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBp
c0ZpcnN0LCBwYWdlKTsKICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYm9vbCBpbmhl
cml0ZWRPbmx5ID0gZmFsc2U7CkBAIC0xNzY2LDYgKzE5MjUsOSBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUq
IHBhcmVudAogCiBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrUmVnaW9uU3R5bGUoRWxlbWVu
dCogcmVnaW9uRWxlbWVudCkKIHsKKyAgICAvLyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9uJ3Qg
YWRkIEAtd2Via2l0LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUg
bW9tZW50LAorICAgIC8vIHNvIGFsbCByZWdpb24gcnVsZXMgYXJlIGdsb2JhbCBieSBkZWZhdWx0
LiBWZXJpZnkgd2hldGhlciB0aGF0IGNhbiBzdGFuZCBvciBuZWVkcyBjaGFuZ2luZy4KKwogICAg
IHVuc2lnbmVkIHJ1bGVzU2l6ZSA9IG1fYXV0aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5k
UnVsZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlc1NpemU7
ICsraSkgewogICAgICAgICBBU1NFUlQobV9hdXRob3JTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNB
bmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpKTsKQEAgLTE4MzYsNyArMTk5OCw3IEBAIFBh
c3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNG
b3JFbGVtZW50KEVsZW1lbnQqIGUsCiAgICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVz
VG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhl
IHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCi0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHls
ZS5nZXQoKSwgZHVtbXkucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgZHVtbXkucmFuZ2VzLmxhc3RB
dXRob3JSdWxlLCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOworICAgICAgICBtYXRj
aEF1dGhvclJ1bGVzKGR1bW15LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIGR1bW15LnJhbmdlcy5s
YXN0QXV0aG9yUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKIAogICAgICAg
ICBtX3NhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CiAgICAgfQpAQCAtMjExNCw3ICsyMjc2LDcgQEAg
dm9pZCBSdWxlU2V0OjphZGRSZWdpb25SdWxlKFdlYktpdENTU1JlZ2lvblJ1bGUqIHJ1bGUpCiAg
ICAgbV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hcHBlbmQoUnVsZVNldFNlbGVjdG9yUGFp
cihydWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCByZWdpb25SdWxlU2V0KSk7CiB9CiAKLXZv
aWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0
IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxl
Y3RvcikKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hl
ZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciog
c3R5bGVTZWxlY3RvciwgY29uc3QgRWxlbWVudCogc2NvcGUpCiB7CiAgICAgQVNTRVJUKHNoZWV0
KTsKIApAQCAtMjEzNCw3ICsyMjk2LDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVl
dChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICAg
ICAgZWxzZSBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKICAgICAgICAgICAgIENTU0ltcG9y
dFJ1bGUqIGltcG9ydCA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihydWxlKTsKICAgICAg
ICAgICAgIGlmIChpbXBvcnQtPnN0eWxlU2hlZXQoKSAmJiAoIWltcG9ydC0+bWVkaWEoKSB8fCBt
ZWRpdW0uZXZhbChpbXBvcnQtPm1lZGlhKCksIHN0eWxlU2VsZWN0b3IpKSkKLSAgICAgICAgICAg
ICAgICBhZGRSdWxlc0Zyb21TaGVldChpbXBvcnQtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCBzdHls
ZVNlbGVjdG9yKTsKKyAgICAgICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChpbXBvcnQtPnN0
eWxlU2hlZXQoKSwgbWVkaXVtLCBzdHlsZVNlbGVjdG9yLCBzY29wZSk7CiAgICAgICAgIH0KICAg
ICAgICAgZWxzZSBpZiAocnVsZS0+aXNNZWRpYVJ1bGUoKSkgewogICAgICAgICAgICAgQ1NTTWVk
aWFSdWxlKiByID0gc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4ocnVsZSk7CkBAIC0yMTUwLDI0
ICsyMzEyLDQwIEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVl
dCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImCiAgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+KGNoaWxkSXRlbSkpOwog
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZEl0ZW0tPmlzRm9udEZhY2VSdWxlKCkg
JiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMg
Zm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShC
VUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUg
c2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3Bl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2Fz
dDxDU1NGb250RmFjZVJ1bGUqPihjaGlsZEl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICAg
c3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1
bGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW52YWxpZGF0ZU1h
dGNoZWREZWNsYXJhdGlvbkNhY2hlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y2hpbGRJdGVtLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQg
QGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5h
ZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGls
ZEl0ZW0pKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gICAvLyBm
b3IgcnVsZXMKICAgICAgICAgICAgIH0gICAvLyBpZiBydWxlcwogICAgICAgICB9IGVsc2UgaWYg
KHJ1bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAgICAg
Ly8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAvLyBGSVhNRShC
VUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUg
c2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250
RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxlKTsKICAgICAgICAg
ICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZh
Y2VSdWxlKTsKICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmludmFsaWRhdGVNYXRjaGVkRGVj
bGFyYXRpb25DYWNoZSgpOwotICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVs
ZSgpKQorICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxl
cyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYg
KHNjb3BlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3R5bGVTZWxl
Y3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
Kj4ocnVsZSkpOwotICAgICAgICBlbHNlIGlmIChydWxlLT5pc1JlZ2lvblJ1bGUoKSAmJiBzdHls
ZVNlbGVjdG9yKQorICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9uUnVsZSgpICYmIHN0
eWxlU2VsZWN0b3IpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24n
dCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRo
ZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBhZGRSZWdpb25SdWxlKHN0YXRpY19jYXN0PFdlYktpdENTU1JlZ2lv
blJ1bGUqPihydWxlKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgaWYgKG1fYXV0b1Nocmlua1Rv
Rml0RW5hYmxlZCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCmluZGV4IDY1OWQyNDYzZGFhYTlkMTZmMzAzOTY5ZjI0M2U3NWVlMjExZTRm
ZDEuLmE4YjJiYTJjNmU5YjBiYjUwMmE1NzVkYmRlMmU1YjBkNzNkMTMyOTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaApAQCAtMTA2LDkgKzEwNiwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICBib29sIHN0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRob3JB
bmRVc2VyU3R5bGVzKTsKICAgICB+Q1NTU3R5bGVTZWxlY3RvcigpOwogCisjaWYgRU5BQkxFKFNU
WUxFX1NDT1BFRCkKKyAgICBzdGF0aWMgRWxlbWVudCogZGV0ZXJtaW5lU2NvcGluZ0VsZW1lbnQo
Y29uc3QgQ1NTU3R5bGVTaGVldCopOworI2VuZGlmCisKICAgICAvLyBVc2luZyB0aGVzZSBkdXJp
bmcgdHJlZSB3YWxrIHdpbGwgYWxsb3cgc3R5bGUgc2VsZWN0b3IgdG8gb3B0aW1pemUgY2hpbGQg
YW5kIGRlc2NlbmRhbnQgc2VsZWN0b3IgbG9va3Vwcy4KLSAgICB2b2lkIHB1c2hQYXJlbnQoRWxl
bWVudCogcGFyZW50KSB7IG1fY2hlY2tlci5wdXNoUGFyZW50KHBhcmVudCk7IH0KLSAgICB2b2lk
IHBvcFBhcmVudChFbGVtZW50KiBwYXJlbnQpIHsgbV9jaGVja2VyLnBvcFBhcmVudChwYXJlbnQp
OyB9CisgICAgdm9pZCBwdXNoUGFyZW50KEVsZW1lbnQqIHBhcmVudCk7CisgICAgdm9pZCBwb3BQ
YXJlbnQoRWxlbWVudCogcGFyZW50KTsKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9v
bCBhbGxvd1NoYXJpbmcgPSB0cnVlLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNl
LCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKIApAQCAtMjc1LDExICsyNzks
MTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmKTsKICAg
ICB2b2lkIG1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYpOwogICAgIHZvaWQgbWF0Y2hSdWxlcyhS
dWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoaW50JiBmaXJzdFJ1
bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAg
ICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4
LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5k
ZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9p
ZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGlu
dCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlS
dWxlcyk7CiAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25z
dDsKICAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICB2b2lkIHNvcnRBbmRUcmFuc2Zl
ck1hdGNoZWRSdWxlcygpOwogCiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRh
Jik7CiAgICAgYm9vbCBjaGVja1JlZ2lvblNlbGVjdG9yKENTU1NlbGVjdG9yKiByZWdpb25TZWxl
Y3RvciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCk7CkBAIC00MzMsMTEgKzQzOSwzNSBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7CiAgICAgYm9vbCBt
X2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7CiAgICAgY29uc3QgQ1NTU3R5bGVBcHBs
eVByb3BlcnR5JiBtX2FwcGx5UHJvcGVydHk7Ci0gICAgCisKICNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCiAgICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKQorICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBFbGVtZW50KiwgT3duUHRy
PFJ1bGVTZXQ+ID4gU2NvcGVkUnVsZVNldE1hcDsKKworICAgIFJ1bGVTZXQqIHNjb3BlZFJ1bGVT
ZXRGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZvaWQgc2V0dXBTY29w
aW5nRWxlbWVudFN0YWNrKGNvbnN0IEVsZW1lbnQqKTsKKyAgICBib29sIHNjb3BpbmdFbGVtZW50
U3RhY2tJc0NvbnNpc3RlbnQoY29uc3QgRWxlbWVudCogcGFyZW50KSBjb25zdCB7IHJldHVybiBw
YXJlbnQgJiYgcGFyZW50ID09IG1fc2NvcGluZ0VsZW1lbnRTdGFja1BhcmVudDsgfQorCisgICAg
U2NvcGVkUnVsZVNldE1hcCBtX3Njb3BlZEF1dGhvclN0eWxlczsKKyAgICAKKyAgICBzdHJ1Y3Qg
U2NvcGVTdGFja0ZyYW1lIHsKKyAgICAgICAgU2NvcGVTdGFja0ZyYW1lKCkgOiBtX2VsZW1lbnQo
MCksIG1fcnVsZVNldCgwKSB7IH0KKyAgICAgICAgU2NvcGVTdGFja0ZyYW1lKGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQsIFJ1bGVTZXQqIHJ1bGVTZXQpIDogbV9lbGVtZW50KGVsZW1lbnQpLCBtX3J1
bGVTZXQocnVsZVNldCkgeyB9CisgICAgICAgIGNvbnN0IEVsZW1lbnQqIG1fZWxlbWVudDsKKyAg
ICAgICAgUnVsZVNldCogbV9ydWxlU2V0OworICAgIH07CisgICAgLy8gVmVjdG9yICh1c2VkIGFz
IHN0YWNrKSB0aGF0IGtlZXBzIHRyYWNrIG9mIHNjb3BpbmcgZWxlbWVudHMgKGkuZS4sIGVsZW1l
bnRzIHdpdGggYSA8c3R5bGUgc2NvcGVkPiBjaGlsZCkKKyAgICAvLyBlbmNvdW50ZXJlZCBkdXJp
bmcgdHJlZSBpdGVyYXRpb24gZm9yIHN0eWxlIHJlc29sdXRpb24uCisgICAgVmVjdG9yPFNjb3Bl
U3RhY2tGcmFtZT4gbV9zY29waW5nRWxlbWVudFN0YWNrOworICAgIC8vIEVsZW1lbnQgbGFzdCBz
ZWVuIGFzIHBhcmVudCBlbGVtZW50IHdoZW4gdXBkYXRpbmcgbV9zY29waW5nRWxlbWVudFN0YWNr
LgorICAgIC8vIFRoaXMgaXMgdXNlZCB0byBkZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50
U3RhY2sgaXMgY29uc2lzdGVudCwgc2VwYXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9w
YXJlbnRTdGFjay4KKyAgICBjb25zdCBFbGVtZW50KiBtX3Njb3BpbmdFbGVtZW50U3RhY2tQYXJl
bnQ7CisjZW5kaWYKKwogICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZUFwcGx5UHJvcGVydHk7CiAg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbiYs
IGNvbnN0IE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbiYsIGNvbnN0IE1hdGNoZWRTdHlsZURl
Y2xhcmF0aW9uJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IGY3
NGVlZDAyYzZhMDIzZGVlNTMyYjkxYzljYjc1YWMyMjgwYTg0YWIuLjgyMDVhZjAzOWNhOWM4M2Jh
OWM2YjQ3MDM5MWY5OTg1ZWNmYmVlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKQEAgLTEyNSw0MiArMTI2LDMzIEBAIHZvaWQgU2VsZWN0b3JDaGVja2VyOjpwb3BQYXJl
bnRTdGFja0ZyYW1lKCkKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JDaGVja2VyOjpwdXNoUGFy
ZW50KEVsZW1lbnQqIHBhcmVudCkKK3ZvaWQgU2VsZWN0b3JDaGVja2VyOjpzZXR1cFBhcmVudFN0
YWNrKEVsZW1lbnQqIHBhcmVudCkKIHsKLSAgICBpZiAobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkp
IHsKLSAgICAgICAgQVNTRVJUKCFtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7Ci0gICAgICAg
IG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyID0gYWRvcHRQdHIobmV3IEJsb29tRmlsdGVyPGJs
b29tRmlsdGVyS2V5Qml0cz4pOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBub3QgdGhl
IHJvb3QgaXRzZWxmLCBidWlsZCB0aGUgc3RhY2sgc3RhcnRpbmcgZnJvbSB0aGUgcm9vdC4KLSAg
ICAgICAgaWYgKHBhcmVudC0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgICAgICBWZWN0
b3I8RWxlbWVudCosIDMwPiBhbmNlc3RvcnM7Ci0gICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGFu
Y2VzdG9yID0gcGFyZW50OyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50T3JI
b3N0RWxlbWVudCgpKQotICAgICAgICAgICAgICAgIGFuY2VzdG9ycy5hcHBlbmQoYW5jZXN0b3Ip
OwotICAgICAgICAgICAgaW50IGNvdW50ID0gYW5jZXN0b3JzLnNpemUoKTsKLSAgICAgICAgICAg
IGZvciAoaW50IG4gPSBjb3VudCAtIDE7IG4gPj0gMDsgLS1uKQotICAgICAgICAgICAgICAgIHB1
c2hQYXJlbnRTdGFja0ZyYW1lKGFuY2VzdG9yc1tuXSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQoKSkg
ewotICAgICAgICAvLyBXZSBhcmUgbm90IGFsd2F5cyBpbnZva2VkIGNvbnNpc3RlbnRseS4gRm9y
IGV4YW1wbGUsIHNjcmlwdCBleGVjdXRpb24gY2FuIGNhdXNlIHVzIHRvIGVudGVyCi0gICAgICAg
IC8vIHN0eWxlIHJlY2FsYyBpbiB0aGUgbWlkZGxlIG9mIHRyZWUgYnVpbGRpbmcuIFJlc2V0IHRo
ZSBzdGFjayBpZiB3ZSBzZWUgYSBuZXcgcm9vdCBlbGVtZW50LgotICAgICAgICBBU1NFUlQobV9h
bmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOwotICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmllckZp
bHRlci0+Y2xlYXIoKTsKLSAgICAgICAgbV9wYXJlbnRTdGFjay5yZXNpemUoMCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgQVNTRVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKLSAgICAg
ICAgLy8gV2UgbWF5IGdldCBpbnZva2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21l
IHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlLgotICAgICAgICAvLyBQYXVzZSBtYWlu
dGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgotICAgICAgICBpZiAobV9wYXJlbnRTdGFj
ay5sYXN0KCkuZWxlbWVudCAhPSBwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgPT0gIW1f
YW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKKyAgICAvLyBLaWxsIHdoYXRldmVyIHdlIHN0b3Jl
ZCBiZWZvcmUuCisgICAgbV9wYXJlbnRTdGFjay5zaHJpbmsoMCk7CisgICAgbV9hbmNlc3Rvcklk
ZW50aWZpZXJGaWx0ZXIgPSBhZG9wdFB0cihuZXcgQmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlC
aXRzPik7CisgICAgLy8gRmFzdCB2ZXJzaW9uIGlmIHBhcmVudCBpcyBhIHJvb3QgZWxlbWVudDoK
KyAgICBpZiAoIXBhcmVudC0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgIHB1c2hQYXJl
bnRTdGFja0ZyYW1lKHBhcmVudCk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcHVzaFBh
cmVudFN0YWNrRnJhbWUocGFyZW50KTsKKyAgICAvLyBPdGhlcndpc2UgY2xpbWIgdXAgdGhlIHRy
ZWUuCisgICAgVmVjdG9yPEVsZW1lbnQqLCAzMD4gYW5jZXN0b3JzOworICAgIGZvciAoRWxlbWVu
dCogYW5jZXN0b3IgPSBwYXJlbnQ7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJl
bnRPckhvc3RFbGVtZW50KCkpCisgICAgICAgIGFuY2VzdG9ycy5hcHBlbmQoYW5jZXN0b3IpOwor
ICAgIGZvciAoc2l6ZV90IG4gPSBhbmNlc3RvcnMuc2l6ZSgpOyBuOyAtLW4pCisgICAgICAgIHB1
c2hQYXJlbnRTdGFja0ZyYW1lKGFuY2VzdG9yc1tuIC0gMV0pOwogfQogCi12b2lkIFNlbGVjdG9y
Q2hlY2tlcjo6cG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKK3ZvaWQgU2VsZWN0b3JDaGVja2Vy
OjpwdXNoUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKIHsKLSAgICBpZiAobV9wYXJlbnRTdGFjay5p
c0VtcHR5KCkgfHwgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCAhPSBwYXJlbnQpCisgICAg
QVNTRVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKKyAgICAvLyBXZSBtYXkgZ2V0IGlu
dm9rZWQgZm9yIHNvbWUgcmFuZG9tIGVsZW1lbnRzIGluIHNvbWUgd2Fja3kgY2FzZXMgZHVyaW5n
IHN0eWxlIHJlc29sdmUuCisgICAgLy8gUGF1c2UgbWFpbnRhaW5pbmcgdGhlIHN0YWNrIGluIHRo
aXMgY2FzZS4KKyAgICBpZiAobV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCAhPSBwYXJlbnQt
PnBhcmVudE9ySG9zdEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBvcFBhcmVudFN0
YWNrRnJhbWUoKTsKKyAgICBwdXNoUGFyZW50U3RhY2tGcmFtZShwYXJlbnQpOwogfQogCiBzdGF0
aWMgaW5saW5lIHZvaWQgY29sbGVjdERlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMo
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZComIGhhc2gsIGNvbnN0IHVuc2ln
bmVkKiBlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKaW5kZXggNzI5YTA1NjUx
MTc4NTFmNDg5Yjc2MjkwYmQ0YTQ4YjQxMzE0NzllNy4uM2Y5NDY5ZTVkNzliMDljOWFiODQyZTc0
MmQ4NWZhZDcxN2I5NDcxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAt
NjAsOSArNjAsMTEgQEAgcHVibGljOgogICAgIGlubGluZSBib29sIGZhc3RSZWplY3RTZWxlY3Rv
cihjb25zdCB1bnNpZ25lZCogaWRlbnRpZmllckhhc2hlcykgY29uc3Q7CiAgICAgc3RhdGljIHZv
aWQgY29sbGVjdElkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqLCB1bnNpZ25lZCog
aWRlbnRpZmllckhhc2hlcywgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudCk7CiAKKyAg
ICB2b2lkIHNldHVwUGFyZW50U3RhY2soRWxlbWVudCogcGFyZW50KTsKICAgICB2b2lkIHB1c2hQ
YXJlbnQoRWxlbWVudCogcGFyZW50KTsKLSAgICB2b2lkIHBvcFBhcmVudChFbGVtZW50KiBwYXJl
bnQpOwotICAgIGJvb2wgcGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoQ29udGFpbmVyTm9kZSogcGFy
ZW50Tm9kZSkgY29uc3QgeyByZXR1cm4gIW1fcGFyZW50U3RhY2suaXNFbXB0eSgpICYmIG1fcGFy
ZW50U3RhY2subGFzdCgpLmVsZW1lbnQgPT0gcGFyZW50Tm9kZTsgfQorICAgIHZvaWQgcG9wUGFy
ZW50KCkgeyBwb3BQYXJlbnRTdGFja0ZyYW1lKCk7IH0KKyAgICBib29sIHBhcmVudFN0YWNrSXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3RhY2suaXNFbXB0eSgpOyB9CisgICAgYm9v
bCBwYXJlbnRTdGFja0lzQ29uc2lzdGVudChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnROb2Rl
KSBjb25zdCB7IHJldHVybiAhbV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFj
ay5sYXN0KCkuZWxlbWVudCA9PSBwYXJlbnROb2RlOyB9CiAKICAgICBFSW5zaWRlTGluayBkZXRl
cm1pbmVMaW5rU3RhdGUoRWxlbWVudCopIGNvbnN0OwogICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRl
Q2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDhhYjM0MjU1MzIzZWFkNDM0ZTcwNzdiZjUwYTBhOGU3NTRhOTg1
NmMuLjVhMWNjODlhYWM1YTlmOTA3MWNjNzk5ZDYyNzY2ZWFkYjc4Zjc4NWEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAxMi0wMS0zMCAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNo
cm9taXVtLm9yZz4KKworICAgICAgICA8c3R5bGUgc2NvcGVkPjogSW1wbGVtZW50IHNjb3BlZCBz
dHlsZXNoZWV0cyBhbmQgYmFzaWMgYXBwbGljYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTkwCisKKyAgICAgICAgVGVzdCB0aGF0IDxzdHls
ZSBzY29wZWQ+IGFmZmVjdHMgc3R5bGVzIGFuZCBpcyB1cGRhdGVkIGNvcnJlY3RseToKKyAgICAg
ICAgLSkgYmFzaWMgdGVzdAorICAgICAgICAtKSB0ZXN0IHNldHRpbmcvdW4tc2V0dGluZyB0aGUg
J3Njb3BlZCcgYXR0cmlidXRlCisgICAgICAgIC0pIHRlc3QgaW5zZXJ0aW5nL3JlbW92aW5nIGEg
d2hvbGUgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3Bl
ZC1hdHRhY2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1z
Y29wZWQvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nz
cy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1iYXNpYy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWRldGFj
aC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9z
dHlsZS1zY29wZWQtZGV0YWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3Bl
ZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9z
dHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbDogQWRkZWQuCisKIDIwMTIt
MDEtMjkgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
c2VydmVkIFdvcmQgdGVzdHMgZmFpbCBvbiBDaHJvbWl1bSBhZnRlciByMTA2MTk4CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWF0dGFj
aC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUt
c2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZlMDY3MWZhYzZlMTZlMzNh
NDJjNDI5YWZlZmVkZDFhMzVhZjhjZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDI3IEBACitUZXN0IGF0dGFjaGluZyBhIG5ldyA8c3R5bGUgc2NvcGVkPiBlbGVtZW50
CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5B
TCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMCwgMCwg
MCkKK1AyOiByZ2IoMCwgMCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkK
Ky0tLSBBRlRFUiBBVFRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tCitTMTogcmdiKDAsIDAsIDAp
CitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAw
KQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLWF0dGFjaC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxl
LXNjb3BlZC1hdHRhY2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDNkZjU1ZGU0OWJmNmNmZTFmOGM2YWQ0
MGIwZTY1MGNmOGFlNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1hdHRhY2guaHRtbApAQCAtMCwwICsxLDcwIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3Vt
ZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlW
YWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkK
KyAgICAgICAgeworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1Ax
Jyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAg
ICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9
CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
bG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAg
ICAgICAgIGxvZygnLS0tIEFGVEVSIEFUVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0nKTsKKyAg
ICAgICAgICAgIHZhciBkaXZFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RJVicpOwor
ICAgICAgICAgICAgdmFyIHN0eWxlRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxl
Jyk7CisgICAgICAgICAgICBzdHlsZUVsZW0uc2V0QXR0cmlidXRlKCdzY29wZWQnLCB0cnVlKTsK
KyAgICAgICAgICAgIHN0eWxlRWxlbS5pbm5lckhUTUwgPSAnZGl2IHsgY29sb3I6IHJlZDsgfSBw
IHsgY29sb3I6IGdyZWVuOyB9JzsKKyAgICAgICAgICAgIGRpdkVsZW0uaW5zZXJ0QmVmb3JlKHN0
eWxlRWxlbSwgZGl2RWxlbS5maXJzdENoaWxkKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxv
ZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3Jp
cHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBj
b2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5U
ZXN0cygpOyI+CisgICAgPHA+VGVzdCBhdHRhY2hpbmcgYSBuZXcgJmx0O3N0eWxlIHNjb3BlZCZn
dDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3Nw
YW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlk
PSJESVYiPgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlk
PSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0i
UzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4K
KyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNj
b3BlZC1iYXNpYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTkxMmZkYzBmODNlYzE0OTNhNDJj
MjU5YjNmMTgyYmIwZjU2YzcxNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsNDIgQEAKK1Rlc3QgPHN0eWxlIHNjb3BlZD4KKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0
CitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorVGV4dAorVGV4
dAorCitUZXh0CitUZXh0CistLS0gQ09NUFVURUQgU1RZTEVTIC0tLQorUzE6IHJnYigwLCAwLCAw
KQorUDE6IHJnYigwLCAwLCAwKQorUjE6IHJnYigwLCAwLCAwKQorRTE6IHJnYigwLCAwLCAwKQor
CitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUjI6IHJnYigwLCAwLCAy
NTUpCisKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKK1IzOiByZ2IoMCwgMCwg
MCkKK0UzOiByZ2IoMCwgMCwgMCkKKworUzQ6IHJnYigwLCAwLCAwKQorUDQ6IHJnYigwLCAwLCAw
KQorUjQ6IHJnYigwLCAwLCAwKQorRTQ6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLWJhc2ljLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUt
c2NvcGVkLWJhc2ljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmU1YjQzMWE5MTZhMzljNjlmYmRmODY2ODY0
YWU4ZGZmM2Q2OGNlZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0
eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtYmFzaWMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50
LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1
ZSgnY29sb3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAg
ICAgICAgICBsb2coJy0tLSBDT01QVVRFRCBTVFlMRVMgLS0tJyk7CisKKyAgICAgICAgICAgIHRl
c3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUjEn
KTsKKyAgICAgICAgICAgIHRlc3QoJ0UxJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAg
ICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0
ZXN0KCdSMicpOworICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7
CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICAgICAgdGVzdCgnUjMnKTsKKyAgICAg
ICAgICAgIHRlc3QoJ0UzJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAgICAgdGVz
dCgnUzQnKTsKKyAgICAgICAgICAgIHRlc3QoJ1A0Jyk7CisgICAgICAgICAgICB0ZXN0KCdSNCcp
OworICAgICAgICAgICAgdGVzdCgnRTQnKTsKKworICAgICAgICAgICAgbG9nKCctLS0gRklOSVNI
RUQgLS0tJyk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4
dC9jc3MiPgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwv
aGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgJmx0O3N0eWxl
IHNjb3BlZCZndDs8L3A+CisgICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAgICAgICAgPHNwYW4gaWQ9
IlMxIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgICAgIDxw
cmUgaWQgPSAiUjEiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBpZD0iRTEi
IGNsYXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8
ZGl2PgorICAgICAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAg
ICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAgICAgIHAgeyBjb2xvcjog
Z3JlZW47IH0KKyAgICAgICAgICAgICAgICBkaXYgLmJhciB7IGNvbG9yOiBibHVlOyB9CisgICAg
ICAgICAgICA8L3N0eWxlPgorICAgICAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgor
ICAgICAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgICAgICAgICAgPHByZSBpZD0iUjIi
IGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxzcGFuIGlk
PSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgICAgICA8
cHJlIGlkID0gIlIzIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgIDxwcmUgaWQ9IkUz
IiBjbGFzcz0iYmF6Ij5UZXh0PC9wcmU+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iZm9v
Ij4KKyAgICAgICAgPHNwYW4gaWQ9IlM0Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDQi
PlRleHQ8L3A+CisgICAgICAgIDxwcmUgaWQgPSAiUjQiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4K
KyAgICAgICAgPHByZSBpZD0iRTQiIGNsYXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4K
KyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNo
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kN2VmNjUzMTc0MDcyYjc4ODdm
N2RmM2RhYmY5MWE5YTczNDBlM2U4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1kZXRhY2gtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMjcgQEAKK1Rlc3QgZGV0YWNoaW5nIGEgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCitU
ZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0gT1JJR0lOQUwgLS0t
CitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkK
K1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQor
LS0tIEFGVEVSIERFVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0KK1MxOiByZ2IoMCwgMCwgMCkK
K1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMCwgMCwgMCkKK1AyOiByZ2IoMCwgMCwgMCkKK1Mz
OiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1k
ZXRhY2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29w
ZWQtZGV0YWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGM4YmY2YTg2NjEyNzBmODYxY2I4NTU4YWMzMjdh
MTg3NzFmMzllZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5k
ZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUo
J2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEFsbCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOwor
ICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAg
ICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZygn
LS0tIE9SSUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOworCisgICAgICAgICAg
ICBsb2coJy0tLSBBRlRFUiBERVRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tJyk7CisgICAgICAg
ICAgICB2YXIgZGl2RWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdESVYnKTsKKyAgICAg
ICAgICAgIHZhciBzdHlsZUVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU1RZTEUnKTsK
KyAgICAgICAgICAgIGRpdkVsZW0ucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtKTsKKyAgICAgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAg
ICAgICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAg
ICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+Cisg
ICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJv
ZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCBkZXRhY2hpbmcgYSAmbHQ7c3R5
bGUgc2NvcGVkJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJT
MSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2Pgor
ICAgIDxkaXYgaWQ9IkRJViI+CisgICAgICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9InRleHQv
Y3NzIiBzY29wZWQ+CisgICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAgICAg
ICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxzcGFuIGlk
PSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwvZGl2
PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAgICAg
PHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwv
cHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3Bl
ZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2EyMDU4N2RmNWFmZmY2MmRjMjdmNjJhYWVjNDUw
YjMzNzY1Y2FjOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwyNyBAQAorVGVzdCByZW1vdmluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgPHN0eWxl
PiBlbGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0t
LSBPUklHSU5BTCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiBy
Z2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzog
cmdiKDAsIDAsIDApCistLS0gQUZURVIgVU4tU0VUVElORyBAU0NPUEVEIC0tLQorUzE6IHJnYigy
NTUsIDAsIDApCitQMTogcmdiKDAsIDEyOCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJn
YigwLCAxMjgsIDApCitTMzogcmdiKDI1NSwgMCwgMCkKK1AzOiByZ2IoMCwgMTI4LCAwKQorLS0t
IEZJTklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1z
Y29wZWQvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmVhYWYzNzc0Y2FiMmZhNzRmZDcwYzYxMWFlMDMyYmExMTg0M2Q3ZWQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXJl
bW92ZS1zY29wZWQuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBm
dW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1z
ZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQp
OworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENv
bXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0
KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7
CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
cnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0t
Jyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVS
IFVOLVNFVFRJTkcgQFNDT1BFRCAtLS0nKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdTVFlMRScpLnJlbW92ZUF0dHJpYnV0ZSgnc2NvcGVkJyk7CisgICAgICAgICAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAg
ICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAg
fQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAg
ICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5
IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgcmVtb3ZpbmcgdGhlICdzY29wZWQn
IGF0dHJpYnV0ZSBvbiBhICZsdDtzdHlsZSZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAg
ICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwv
cD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3R5bGUgaWQ9IlNUWUxFIiB0eXBl
PSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAg
ICAgICAgICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8
c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAg
ICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+Cisg
ICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25z
b2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29w
ZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMGM3OTYzYzk3YzQ3ODAxZTA4NDk2NzUxMTM3
MjIyYzQ2NjVkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHls
ZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MjcgQEAKK1Rlc3Qgc2V0dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgPHN0eWxlPiBl
bGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBP
UklHSU5BTCAtLS0KK1MxOiByZ2IoMjU1LCAwLCAwKQorUDE6IHJnYigwLCAxMjgsIDApCitTMjog
cmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigyNTUsIDAsIDApCitQ
MzogcmdiKDAsIDEyOCwgMCkKKy0tLSBBRlRFUiBTRVRUSU5HIEBTQ09QRUQgLS0tCitTMTogcmdi
KDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2Io
MCwgMTI4LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJTklT
SEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQv
c3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5MDNiZDQx
ZTI5OWQwMzUwMWNlZjEwNTQwZmUxOTUwMGM0ZTgyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRt
bApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNn
KQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29s
ZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAg
bG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxl
bSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdCgnUzEnKTsK
KyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAg
ICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0
ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAg
ICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIFNFVFRJTkcgQFNDT1BF
RCAtLS0nKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScpLnNl
dEF0dHJpYnV0ZSgnc2NvcGVkJywgdHJ1ZSk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAgICAgICBsb2co
Jy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0
PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBib2R5IHsgY29s
b3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVz
dHMoKTsiPgorICAgIDxwPlRlc3Qgc2V0dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEg
Jmx0O3N0eWxlJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJT
MSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2Pgor
ICAgIDxkaXY+CisgICAgICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIj4KKyAg
ICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgIHAgeyBjb2xvcjogZ3Jl
ZW47IH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFu
PgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAg
ICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8
L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>