<?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>54676</bug_id>
          
          <creation_ts>2011-02-17 11:10:54 -0800</creation_ts>
          <short_desc>Make ScriptElement match the HTML5 spec</short_desc>
          <delta_ts>2011-02-19 01:39:29 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Simonsen">simonjam</reporter>
          <assigned_to name="James Simonsen">simonjam</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>rniwa</cc>
    
    <cc>tonyg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>353035</commentid>
    <comment_count>0</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-17 11:10:54 -0800</bug_when>
    <thetext>Make ScriptElement match the HTML5 spec</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353058</commentid>
    <comment_count>1</comment_count>
      <attachid>82837</attachid>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-17 11:29:40 -0800</bug_when>
    <thetext>Created attachment 82837
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353059</commentid>
    <comment_count>2</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-17 11:31:45 -0800</bug_when>
    <thetext>As requested offline, this gets us to match up with the spec. It&apos;ll make it much easier to implement bug 50115 so that it matches the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353068</commentid>
    <comment_count>3</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-17 11:55:28 -0800</bug_when>
    <thetext>James and I talked offline about making sure to separate refactoring from functionality changes, so I expect a new patch is coming, but I&apos;ll still take a first pass over this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353071</commentid>
    <comment_count>4</comment_count>
      <attachid>82839</attachid>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-17 12:01:08 -0800</bug_when>
    <thetext>Created attachment 82839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353080</commentid>
    <comment_count>5</comment_count>
      <attachid>82843</attachid>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-17 12:12:32 -0800</bug_when>
    <thetext>Created attachment 82843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353097</commentid>
    <comment_count>6</comment_count>
      <attachid>82843</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-17 12:37:21 -0800</bug_when>
    <thetext>Comment on attachment 82843
Patch

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

Some random notes below.

&gt; Source/WebCore/dom/ScriptElement.cpp:103
&gt; +    /*

We usually use C++ type comments.

&gt; Source/WebCore/dom/ScriptElement.cpp:149
&gt; +    // FIXME: isLegacySupportedJavaScriptLanguage() is not valid HTML5. It is used here to maintain backwards compatibility with existing layout tests.

Compatibility with layout tests?  Maybe we should change the spec to match our list of mime types?  I don&apos;t know the history here.

&gt; Source/WebCore/dom/ScriptElement.cpp:161
&gt; +        m_wasParserInserted = true;
&gt; +        m_parserInserted = false;

Woah, there&apos;s wasParserInserted, which is different than parserInserted?

&gt; Source/WebCore/dom/ScriptElement.cpp:181
&gt; +    // FIXME: Eventually we&apos;d like to evaluate scripts which are inserted into a
&gt;      // viewless document but this&apos;ll do for now.
&gt;      // See http://bugs.webkit.org/show_bug.cgi?id=5727

Running scripts in viewless documents is pretty scary...  I&apos;m not sure we want to do that, but that&apos;s not really related to this patch.

&gt; Source/WebCore/dom/ScriptElement.cpp:197
&gt; +        eventAttribute = eventAttribute.stripWhiteSpace();
&gt; +        if (!equalIgnoringCase(eventAttribute, &quot;onload&quot;) &amp;&amp; !equalIgnoringCase(eventAttribute, &quot;onload()&quot;))
&gt; +            return false;

Do we have tests for these cases?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353143</commentid>
    <comment_count>7</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-17 13:29:16 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 82843 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82843&amp;action=review
&gt; 
&gt; Some random notes below.
&gt; 
&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:103
&gt; &gt; +    /*
&gt; 
&gt; We usually use C++ type comments.

Done.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:149
&gt; &gt; +    // FIXME: isLegacySupportedJavaScriptLanguage() is not valid HTML5. It is used here to maintain backwards compatibility with existing layout tests.
&gt; 
&gt; Compatibility with layout tests?  Maybe we should change the spec to match our list of mime types?  I don&apos;t know the history here.

Updated comment to explain the situation. The spec doesn&apos;t care about specific MIME types, just that we use them consistently.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:161
&gt; &gt; +        m_wasParserInserted = true;
&gt; &gt; +        m_parserInserted = false;
&gt; 
&gt; Woah, there&apos;s wasParserInserted, which is different than parserInserted?

Yep.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:181
&gt; &gt; +    // FIXME: Eventually we&apos;d like to evaluate scripts which are inserted into a
&gt; &gt;      // viewless document but this&apos;ll do for now.
&gt; &gt;      // See http://bugs.webkit.org/show_bug.cgi?id=5727
&gt; 
&gt; Running scripts in viewless documents is pretty scary...  I&apos;m not sure we want to do that, but that&apos;s not really related to this patch.

Yeah, I just moved that block of code without changing it.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:197
&gt; &gt; +        eventAttribute = eventAttribute.stripWhiteSpace();
&gt; &gt; +        if (!equalIgnoringCase(eventAttribute, &quot;onload&quot;) &amp;&amp; !equalIgnoringCase(eventAttribute, &quot;onload()&quot;))
&gt; &gt; +            return false;
&gt; 
&gt; Do we have tests for these cases?

Yep. fast/dom/HTMLScriptElement/script-for-attribute-unexpected-execution.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353144</commentid>
    <comment_count>8</comment_count>
      <attachid>82855</attachid>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-17 13:29:43 -0800</bug_when>
    <thetext>Created attachment 82855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353153</commentid>
    <comment_count>9</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-17 13:48:19 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=82843&amp;action=review

&gt; Source/WebCore/dom/ScriptElement.cpp:60
&gt;      , m_wasAlreadyStarted(wasAlreadyStarted)

Throughout the spec it refers to &quot;already started&quot; not &quot;was already started.&quot; Should this be m_alreadyStarted?

&gt; Source/WebCore/dom/ScriptElement.cpp:133
&gt; +bool ScriptElement::isScriptTypeSupported(LegacyTypeSupport supportLegacyTypes) const

Are there layout tests that cover the various ways the type and language can be fixed up here?

&gt;&gt; Source/WebCore/dom/ScriptElement.cpp:161
&gt;&gt; +        m_parserInserted = false;
&gt; 
&gt; Woah, there&apos;s wasParserInserted, which is different than parserInserted?

was-parser-inserted seems to only be used for the new async=false.

Regarding this step, the spec says:
&quot;This is done so that if parser-inserted script elements fail to run when the parser tries to run them, e.g. because they are empty or specify an unsupported scripting language, another script can later mutate them and cause them to run again.&quot;

This sounds like a behavior change. Is it possible to hold off on this part until the async=false patch so we can be sure to layout test the scenario above.

&gt; Source/WebCore/dom/ScriptElement.cpp:164
&gt; +

This would be a good place for a FIXME to check force-async here.

&gt; Source/WebCore/dom/ScriptElement.cpp:184
&gt; +

What about step 10 (the document changed)? Should there at least be a fixme?

&gt; Source/WebCore/dom/ScriptElement.cpp:188
&gt; +    String eventAttribute = eventAttributeValue();

I like the way you factored out isScriptTypeSupported(). I think we should also factor this out to a method like isScriptForEventSupported()..

&gt; Source/WebCore/dom/ScriptElement.cpp:205
&gt; +    if (hasSourceAttribute())

Do we also need an empty string check here or does hasSourceAttribute do that? Or this that behavior change we talked about before and it should just be a FIXME.

&gt; Source/WebCore/dom/ScriptElement.cpp:305
&gt; +    for (Node* n = m_element-&gt;firstChild(); n; n = n-&gt;nextSibling()) {

How did this work before? Did any functionality change and is it possible to add new tests?

&gt; Source/WebCore/dom/XMLDocumentParserLibxml2.cpp:884
&gt; +    if (!successfullyPrepared) {

I&apos;m guessing xhtml picked up some new behaviors here. Should we have any new tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353241</commentid>
    <comment_count>10</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-17 16:44:21 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82843&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:60
&gt; &gt;      , m_wasAlreadyStarted(wasAlreadyStarted)
&gt; 
&gt; Throughout the spec it refers to &quot;already started&quot; not &quot;was already started.&quot; Should this be m_alreadyStarted?

Done.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:133
&gt; &gt; +bool ScriptElement::isScriptTypeSupported(LegacyTypeSupport supportLegacyTypes) const
&gt; 
&gt; Are there layout tests that cover the various ways the type and language can be fixed up here?

There&apos;s no new behavior. I&apos;ve restructured the code to look more like the old code and less like the spec. The legacy stuff was added because some of the SVG layout tests depend on it.

&gt; &gt;&gt; Source/WebCore/dom/ScriptElement.cpp:161
&gt; &gt;&gt; +        m_parserInserted = false;
&gt; &gt; 
&gt; &gt; Woah, there&apos;s wasParserInserted, which is different than parserInserted?
&gt; 
&gt; was-parser-inserted seems to only be used for the new async=false.
&gt; 
&gt; Regarding this step, the spec says:
&gt; &quot;This is done so that if parser-inserted script elements fail to run when the parser tries to run them, e.g. because they are empty or specify an unsupported scripting language, another script can later mutate them and cause them to run again.&quot;
&gt; 
&gt; This sounds like a behavior change. Is it possible to hold off on this part until the async=false patch so we can be sure to layout test the scenario above.

The net effect is no new functionality. This code represents what had been in insertedIntoDocument, childrenChanged, and finishParsingChildren. We still need wasParserInserted to keep track of whether to reset isParserInserted at step 8, since we might remove parserInserted-ness as we used to in finishParsingChildren.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:164
&gt; &gt; +
&gt; 
&gt; This would be a good place for a FIXME to check force-async here.

Done.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:184
&gt; &gt; +
&gt; 
&gt; What about step 10 (the document changed)? Should there at least be a fixme?

Added fixme.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:188
&gt; &gt; +    String eventAttribute = eventAttributeValue();
&gt; 
&gt; I like the way you factored out isScriptTypeSupported(). I think we should also factor this out to a method like isScriptForEventSupported().

Done.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:205
&gt; &gt; +    if (hasSourceAttribute())
&gt; 
&gt; Do we also need an empty string check here or does hasSourceAttribute do that? Or this that behavior change we talked about before and it should just be a FIXME.

It matches the old behavior. Fixing it is new behavior (it fixes the &lt; parsing on empty scripts), so I added a fixme.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:305
&gt; &gt; +    for (Node* n = m_element-&gt;firstChild(); n; n = n-&gt;nextSibling()) {
&gt; 
&gt; How did this work before? Did any functionality change and is it possible to add new tests?

It&apos;s new functionality, so I reverted it to a fixme and restored the old check (which is incorrect, but works).

&gt; &gt; Source/WebCore/dom/XMLDocumentParserLibxml2.cpp:884
&gt; &gt; +    if (!successfullyPrepared) {
&gt; 
&gt; I&apos;m guessing xhtml picked up some new behaviors here. Should we have any new tests?

It should behave like the HTML parser when it comes to &quot;prepare a script.&quot; Is there a good way to add new tests for XHTML? I can copy &amp; paste a bunch of the HTML tests to XHTML, but that seems a bit redundant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353242</commentid>
    <comment_count>11</comment_count>
      <attachid>82876</attachid>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-17 16:44:37 -0800</bug_when>
    <thetext>Created attachment 82876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353269</commentid>
    <comment_count>12</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-17 17:33:00 -0800</bug_when>
    <thetext>This looks great to me! It removes duplication, lines us up with the spec, and paves the way for future changes to become even more compliant with the spec.

I don&apos;t have any more comments but would feel better if at least one other person took a pass through the final version as this is a lot of moving and opportunity to introduce subtle changes/bugs.

&gt; &gt; I&apos;m guessing xhtml picked up some new behaviors here. Should we have any new tests?
&gt; It should behave like the HTML parser when it comes to &quot;prepare a script.&quot; Is there a good way to add new tests for XHTML? I can copy &amp; paste a bunch of the HTML tests to XHTML, but that seems a bit redundant.

I&apos;m not really sure what do to here. There is a lot of missing coverage, but I agree it would be silly to duplicate all the tests in HTML and XHTML form. Anyone else have an opinion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353280</commentid>
    <comment_count>13</comment_count>
      <attachid>82876</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-17 17:47:46 -0800</bug_when>
    <thetext>Comment on attachment 82876
Patch

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

I don&apos;t think your changes to the layout tests are correct.  You&apos;re essentially disabling these tests.

&gt; LayoutTests/ChangeLog:22
&gt; +        * fast/dom/HTMLScriptElement/move-in-beforeload.html: Original author says test was only meant to check for crashes. Beforeload is not specified by HTML5. Test was modified to assume moved script wouldn&apos;t execute because wasAlreadyStarted is set.

You should make sure that we don&apos;t execute the script.  Just removing the check isn&apos;t sufficient.

&gt; LayoutTests/ChangeLog:23
&gt; +        * fast/dom/script-clone-rerun-src.xhtml: According to HTML5 spec, load should only fire after a script executes. Test was modified to match that. The old broken behavior was that load fired on the cloned element, even though it didn&apos;t execute.

What are you talking about?  This test was testing that load() is called exactly once.

&gt; LayoutTests/fast/dom/HTMLScriptElement/move-in-beforeload.html:21
&gt; -    }, false);
&gt; -    s.addEventListener(&quot;error&quot;, function() {
&gt; -        testFailed(&quot;error event should not fire.&quot;)
&gt; -    }, false);
&gt; -    s.addEventListener(&quot;load&quot;, function() {
&gt;          testPassed(&quot;&quot;);
&gt; -        if (window.layoutTestController)
&gt; -            layoutTestController.notifyDone();
&gt;      }, false);

I don&apos;t think removing all these checks is great.  If we think the script shouldn&apos;t execute, then we should verify that it doesn&apos;t.

&gt; LayoutTests/fast/dom/script-clone-rerun-src.xhtml:43
&gt; +loaded();
&gt; +

Why do we need to call loaded here?  It seems that we&apos;re breaking the test.  r- for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353291</commentid>
    <comment_count>14</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-17 18:05:09 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 82876 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82876&amp;action=review
&gt; &gt; LayoutTests/ChangeLog:22
&gt; &gt; +        * fast/dom/HTMLScriptElement/move-in-beforeload.html: Original author says test was only meant to check for crashes. Beforeload is not specified by HTML5. Test was modified to assume moved script wouldn&apos;t execute because wasAlreadyStarted is set.
&gt; 
&gt; You should make sure that we don&apos;t execute the script.  Just removing the check isn&apos;t sufficient.

Done.

&gt; &gt; LayoutTests/ChangeLog:23
&gt; &gt; +        * fast/dom/script-clone-rerun-src.xhtml: According to HTML5 spec, load should only fire after a script executes. Test was modified to match that. The old broken behavior was that load fired on the cloned element, even though it didn&apos;t execute.
&gt; 
&gt; What are you talking about?  This test was testing that load() is called exactly once.

No, it was testing that it was executed only once. It relied on loaded() being called twice in order to complete. With the refactoring, load only fires once, so the test hangs without an extra call to loaded(). I&apos;ve restructured the test to make it more clear what&apos;s going on. Let me know if that helps.

&gt; &gt; LayoutTests/fast/dom/HTMLScriptElement/move-in-beforeload.html:21
&gt; &gt; -    }, false);
&gt; &gt; -    s.addEventListener(&quot;error&quot;, function() {
&gt; &gt; -        testFailed(&quot;error event should not fire.&quot;)
&gt; &gt; -    }, false);
&gt; &gt; -    s.addEventListener(&quot;load&quot;, function() {
&gt; &gt;          testPassed(&quot;&quot;);
&gt; &gt; -        if (window.layoutTestController)
&gt; &gt; -            layoutTestController.notifyDone();
&gt; &gt;      }, false);
&gt; 
&gt; I don&apos;t think removing all these checks is great.  If we think the script shouldn&apos;t execute, then we should verify that it doesn&apos;t.

Done.

&gt; &gt; LayoutTests/fast/dom/script-clone-rerun-src.xhtml:43
&gt; &gt; +loaded();
&gt; &gt; +
&gt; 
&gt; Why do we need to call loaded here?  It seems that we&apos;re breaking the test.  r- for this.

See above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353292</commentid>
    <comment_count>15</comment_count>
      <attachid>82882</attachid>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-17 18:05:24 -0800</bug_when>
    <thetext>Created attachment 82882
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353302</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-17 18:17:44 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=82876&amp;action=review

Ok, I&apos;m still in the middle of reviewing but will do on the new patch.

&gt; Source/WebCore/dom/ScriptElement.cpp:54
&gt; -ScriptElement::ScriptElement(Element* element, bool wasInsertedByParser, bool wasAlreadyStarted)
&gt; +ScriptElement::ScriptElement(Element* element, bool parserInserted, bool alreadyStarted)

Please do not make these renames.  See comments in https://bugs.webkit.org/show_bug.cgi?id=49705.

&gt; Source/WebCore/dom/ScriptElement.cpp:58
&gt; +    , m_parserInserted(parserInserted)
&gt; +    , m_wasParserInserted(false)

Even if we&apos;re making the behavior change, I don&apos;t think it&apos;s great to have two variables called m_parserInserted and m_wasParserInserted.  We should definitely come with better variable names.

&gt; Source/WebCore/dom/ScriptElement.cpp:150
&gt; +    if (!type.isEmpty()) {
&gt; +        if (!MIMETypeRegistry::isSupportedJavaScriptMIMEType(type.stripWhiteSpace().lower()) &amp;&amp; !(supportLegacyTypes == AllowLegacyTypeInTypeAttribute &amp;&amp; isLegacySupportedJavaScriptLanguage(type)))
&gt; +            return false;
&gt; +    } else {
&gt; +        String language = languageAttributeValue();
&gt; +        if (!language.isEmpty()) {
&gt; +            String type = &quot;text/&quot; + language.lower();
&gt; +            if (!MIMETypeRegistry::isSupportedJavaScriptMIMEType(type) &amp;&amp; !isLegacySupportedJavaScriptLanguage(language))
&gt; +                return false;
&gt; +        }
&gt; +    }
&gt; +
&gt; +    return true;

There are too many not&apos;s in these statements.  Let&apos;s negate them do something along the line of:

if (type.isEmpty()) {
    String language = languageAttributeValue();
    if (language.isEmpty())
        return true;
    String type = &quot;text/&quot; + language.lower();
    if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(type) || isLegacySupportedJavaScriptLanguage(language))
        return true;
} else if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(type.stripWhiteSpace().lower()) || (supportLegacyTypes == AllowLegacyTypeInTypeAttribute &amp;&amp; isLegacySupportedJavaScriptLanguage(type)))
    return true;

return false;

&gt; Source/WebCore/dom/ScriptElement.cpp:163
&gt; +    if (m_parserInserted) {
&gt; +        m_wasParserInserted = true;
&gt; +        m_parserInserted = false;
&gt; +    } else
&gt; +        m_wasParserInserted = false;

It&apos;s totally unclear what we&apos;re doing here.  Again, we need better variable names so that this code is self-evident.

&gt; Source/WebCore/dom/ScriptElement.cpp:199
&gt; +    if (!charsetAttributeValue().isEmpty())
&gt; +        m_characterEncoding = charsetAttributeValue();
&gt; +    else
&gt; +        m_fallbackCharacterEncoding = m_element-&gt;document()-&gt;charset();

It seems like we only need one variable for this.

&gt; Source/WebCore/dom/ScriptElement.cpp:212
&gt; +    } else if (hasSourceAttribute() &amp;&amp; m_parserInserted &amp;&amp; !asyncAttributeValue())
&gt; +        m_willBeParserExecuted = true;
&gt; +    else if (!hasSourceAttribute() &amp;&amp; m_parserInserted &amp;&amp; !m_element-&gt;document()-&gt;haveStylesheetsLoaded()) {
&gt; +        m_willBeParserExecuted = true;
&gt; +        m_readyToBeParserExecuted = true;

It seems like we don&apos;t set m_readyToBeParserExecuted true anywhere else.  But then what does the former case mean?  It will be executed by parser but never ready?

&gt; Source/WebCore/dom/ScriptElement.cpp:321
&gt; +    if (!m_characterEncoding.isEmpty())
&gt; +        charset = m_characterEncoding;
&gt; +    else if (!m_fallbackCharacterEncoding.isEmpty())
&gt; +        charset = m_fallbackCharacterEncoding;

Why do we need two variables to do this?  We should just have one m_characterEncoding and set it in ScriptElement::prepareScript.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353307</commentid>
    <comment_count>17</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-17 18:29:17 -0800</bug_when>
    <thetext>(In reply to comment #16)

All of the names and structure comes from the HTML5 spec. The variable names have specific meaning in the spec. You should be able to read the spec and the code side-by-side and see exactly what&apos;s going on. See:

http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#prepare-a-script

I agree the spec can make the code look a bit convoluted. We can diverge from it some to help readability, but I&apos;d like to keep it as close as possible, which is what we did in the parser code. The closer it is, the easier it&apos;ll be to stay in sync with it in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353318</commentid>
    <comment_count>18</comment_count>
      <attachid>82882</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-17 18:54:31 -0800</bug_when>
    <thetext>Comment on attachment 82882
Patch

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

&gt; LayoutTests/ChangeLog:20
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=54676

This URL needs to be moved right beneath the bug title.

&gt; LayoutTests/fast/dom/script-clone-rerun-src.xhtml:30
&gt; +result = &apos;FAIL: script never ran&apos;;
&gt; +if (i == 1)
&gt; +  result = &apos;PASS&apos;;
&gt; +else if (i &gt; 1)
&gt; +  result = &apos;FAIL: script ran &apos; + i + &apos; times&apos;;
&gt; +document.body.appendChild(document.createTextNode(result));

But is this code guaranteed to run after the script loads for the second time?

&gt; Source/WebCore/dom/ScriptElement.cpp:148
&gt; +    if (!type.isEmpty()) {
&gt; +        if (!MIMETypeRegistry::isSupportedJavaScriptMIMEType(type.stripWhiteSpace().lower()) &amp;&amp; !(supportLegacyTypes == AllowLegacyTypeInTypeAttribute &amp;&amp; isLegacySupportedJavaScriptLanguage(type)))
&gt; +            return false;
&gt; +    } else {
&gt; +        String language = languageAttributeValue();
&gt; +        if (!language.isEmpty()) {
&gt; +            String type = &quot;text/&quot; + language.lower();
&gt; +            if (!MIMETypeRegistry::isSupportedJavaScriptMIMEType(type) &amp;&amp; !isLegacySupportedJavaScriptLanguage(language))
&gt; +                return false;
&gt; +        }
&gt; +    }

See my comment about negating these statements.

&gt; Source/WebCore/dom/ScriptElement.cpp:163
&gt; +    if (m_parserInserted) {
&gt; +        m_wasParserInserted = true;
&gt; +        m_parserInserted = false;
&gt; +    } else
&gt; +        m_wasParserInserted = false;

I still think we need to explain why we do this.  Can we add an inline function of a descriptive name and call it here?

&gt; Source/WebCore/dom/ScriptElement.cpp:178
&gt; +    if (m_wasParserInserted)
&gt; +        m_parserInserted = true;

It seems that the value of m_wasParserInserted is determined solely by the value of m_parserInserted at the time we entered this function.  We set it true if m_parserInserted is true and false otherwise.  Since none of functions we call here doesn&apos;t modify the value of m_wasParserInserted, we should make m_wasParserInserted a local variable.  Correct me if I&apos;m wrong.

&gt; Source/WebCore/dom/ScriptElement.cpp:209
&gt; +    } else if (hasSourceAttribute() &amp;&amp; m_parserInserted &amp;&amp; !asyncAttributeValue())
&gt; +        m_willBeParserExecuted = true;

Ok, so I guess this is the case where we need to wait for the script to load.

&gt; Source/WebCore/dom/ScriptElement.cpp:247
&gt; +    if (sourceCode.isEmpty())
&gt;          return;

Should we assert some other conditions here?  e.g. script hasn&apos;t already started

&gt; Source/WebCore/dom/ScriptElement.cpp:321
&gt; +    String charset;
&gt; +    if (!m_characterEncoding.isEmpty())
&gt; +        charset = m_characterEncoding;
&gt; +    else if (!m_fallbackCharacterEncoding.isEmpty())
&gt; +        charset = m_fallbackCharacterEncoding;

As I said earlier, I don&apos;t think we need two member variables for this.

&gt; Source/WebCore/dom/ScriptElement.h:36
&gt; +enum LegacyTypeSupport { DisallowLegacyTypeInTypeAttribute, AllowLegacyTypeInTypeAttribute };
&gt; +

We should declare this enum inside ScriptElement.

&gt; Source/WebCore/dom/ScriptElement.h:104
&gt; -    bool m_wasInsertedByParser;
&gt; +    bool m_parserInserted;
&gt; +    bool m_wasParserInserted;
&gt;      bool m_isExternalScript;
&gt; -    bool m_wasAlreadyStarted;
&gt; +    bool m_alreadyStarted;
&gt;      bool m_haveFiredLoad;
&gt; +    bool m_willBeParserExecuted; // Same as &quot;The parser will handle executing the script.&quot;
&gt; +    bool m_readyToBeParserExecuted;
&gt; +    bool m_willExecuteWhenDocumentFinishedParsing;

We should use bitfields here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353346</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-17 19:39:01 -0800</bug_when>
    <thetext>&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=54676
&gt; This URL needs to be moved right beneath the bug title.

Right above the title is even better - that way, you guarantee that CIA-bot messages on IRC will have a URL to click on.

It would certainly be great to have a more specific title. We are never going to eliminate all bugs, and we are never going to match the spec. The ChangeLog has a more detailed description, but it&apos;s unclear what implementing a section from HTML5 means in plain terms.

The only place I could find practically useful information was in LayoutTests/ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353451</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-17 23:42:29 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=54676
&gt; &gt; This URL needs to be moved right beneath the bug title.
&gt; 
&gt; Right above the title is even better - that way, you guarantee that CIA-bot messages on IRC will have a URL to click on.

It&apos;s possible to customize the CIA message or change the prepare-ChangeLog generated format.  BUt it seems we should match the generated format until we change it. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353454</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-18 00:01:21 -0800</bug_when>
    <thetext>&gt; BUt it seems we should match the generated format until we change it. :)

All prepare-ChangeLog emits is one line, &quot;Need a short description and bug URL (OOPS!)&quot;. But looking at ChangeLogs, looks like almost everyone now puts description first, so I&apos;m just outdated, and will change my ways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353455</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-18 00:04:34 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; BUt it seems we should match the generated format until we change it. :)
&gt; 
&gt; All prepare-ChangeLog emits is one line, &quot;Need a short description and bug URL (OOPS!)&quot;. But looking at ChangeLogs, looks like almost everyone now puts description first, so I&apos;m just outdated, and will change my ways.

If you pass -b NUMBER to prepare-ChangeLog which fills in the url and title for you (that&apos;s what webkit-patch does).  You should feel welcome to edit prepare-ChagneLog or the CIA template of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353597</commentid>
    <comment_count>23</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-18 08:32:16 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:54
&gt; &gt; -ScriptElement::ScriptElement(Element* element, bool wasInsertedByParser, bool wasAlreadyStarted)
&gt; &gt; +ScriptElement::ScriptElement(Element* element, bool parserInserted, bool alreadyStarted)
&gt; 
&gt; Please do not make these renames.  See comments in https://bugs.webkit.org/show_bug.cgi?id=49705.

I disagree. For members that behave exactly as the spec suggests, there&apos;s a lot of value in explicitly tying them to the names used in the spec. This has worked really well in the rest of the parser code. Given that the spec uses parserInserted and wasParserInserted separately, I don&apos;t think we can ignore or append verbs unless you want a wasWasParserInserted or isWasParserInserted.

If we vary the names from the flags used in the spec, then I&apos;d like to see comments tying each to the flag in the spec. But I think it is just more clear to match the names and skip the comments.

&gt; 
&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:58
&gt; &gt; +    , m_parserInserted(parserInserted)
&gt; &gt; +    , m_wasParserInserted(false)
&gt; 
&gt; Even if we&apos;re making the behavior change, I don&apos;t think it&apos;s great to have two variables called m_parserInserted and m_wasParserInserted.  We should definitely come with better variable names.

The thing is that tying them to the spec names allows a reader to go look at the spec and see exactly how they are used, what their purpose is, and notes about the behavior. We basically get documentation for free without having to embed it in the code or maintain it. It also helps maintainers to know to keep them in line with the spec. Again, if we rename, we&apos;d needs comments saying tying them to the flags in the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353614</commentid>
    <comment_count>24</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-18 08:53:48 -0800</bug_when>
    <thetext>&gt; For members that behave exactly as the spec suggests, there&apos;s a lot of value in explicitly tying them to the names used in the spec. This has worked really well in the rest of the parser code.

FWIW, the same didn&apos;t work as well for Application Cache code - trying to closely match the spec language backfired with every spec change. We ended up with obsolete concepts that are hard to deal with, because we relied on HTML5 for &quot;documentation&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353792</commentid>
    <comment_count>25</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-18 13:17:30 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 82882 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82882&amp;action=review
&gt; 
&gt; &gt; LayoutTests/ChangeLog:20
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=54676
&gt; 
&gt; This URL needs to be moved right beneath the bug title.

Done.

&gt; &gt; LayoutTests/fast/dom/script-clone-rerun-src.xhtml:30
&gt; &gt; +result = &apos;FAIL: script never ran&apos;;
&gt; &gt; +if (i == 1)
&gt; &gt; +  result = &apos;PASS&apos;;
&gt; &gt; +else if (i &gt; 1)
&gt; &gt; +  result = &apos;FAIL: script ran &apos; + i + &apos; times&apos;;
&gt; &gt; +document.body.appendChild(document.createTextNode(result));
&gt; 
&gt; But is this code guaranteed to run after the script loads for the second time?

I see what you&apos;re saying now. You&apos;re worried about detecting failures. I&apos;m not really sure how to robustly wait for something that might not (and should not) happen. I added a setTimeout() and verified it fails before my change though, so this seems to work.

&gt; 
&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:148
&gt; &gt; +    if (!type.isEmpty()) {
&gt; &gt; +        if (!MIMETypeRegistry::isSupportedJavaScriptMIMEType(type.stripWhiteSpace().lower()) &amp;&amp; !(supportLegacyTypes == AllowLegacyTypeInTypeAttribute &amp;&amp; isLegacySupportedJavaScriptLanguage(type)))
&gt; &gt; +            return false;
&gt; &gt; +    } else {
&gt; &gt; +        String language = languageAttributeValue();
&gt; &gt; +        if (!language.isEmpty()) {
&gt; &gt; +            String type = &quot;text/&quot; + language.lower();
&gt; &gt; +            if (!MIMETypeRegistry::isSupportedJavaScriptMIMEType(type) &amp;&amp; !isLegacySupportedJavaScriptLanguage(language))
&gt; &gt; +                return false;
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; See my comment about negating these statements.

Done.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:163
&gt; &gt; +    if (m_parserInserted) {
&gt; &gt; +        m_wasParserInserted = true;
&gt; &gt; +        m_parserInserted = false;
&gt; &gt; +    } else
&gt; &gt; +        m_wasParserInserted = false;
&gt; 
&gt; I still think we need to explain why we do this.  Can we add an inline function of a descriptive name and call it here?

Hmm. I&apos;ve thought about it for a bit, but can&apos;t come up with anything that succinctly explains it. I could copy the note from the spec. Any other ideas?

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:178
&gt; &gt; +    if (m_wasParserInserted)
&gt; &gt; +        m_parserInserted = true;
&gt; 
&gt; It seems that the value of m_wasParserInserted is determined solely by the value of m_parserInserted at the time we entered this function.  We set it true if m_parserInserted is true and false otherwise.  Since none of functions we call here doesn&apos;t modify the value of m_wasParserInserted, we should make m_wasParserInserted a local variable.  Correct me if I&apos;m wrong.

Done.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:209
&gt; &gt; +    } else if (hasSourceAttribute() &amp;&amp; m_parserInserted &amp;&amp; !asyncAttributeValue())
&gt; &gt; +        m_willBeParserExecuted = true;
&gt; 
&gt; Ok, so I guess this is the case where we need to wait for the script to load.

Yep.

We should also refactor HTMLScriptRunner to match the spec. We&apos;ve diverged there too.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:247
&gt; &gt; +    if (sourceCode.isEmpty())
&gt; &gt;          return;
&gt; 
&gt; Should we assert some other conditions here?  e.g. script hasn&apos;t already started

Sure. BTW, it _should_ have already started. This is a good check to ensure that prepareScript() has been called.

&gt; &gt; Source/WebCore/dom/ScriptElement.cpp:321
&gt; &gt; +    String charset;
&gt; &gt; +    if (!m_characterEncoding.isEmpty())
&gt; &gt; +        charset = m_characterEncoding;
&gt; &gt; +    else if (!m_fallbackCharacterEncoding.isEmpty())
&gt; &gt; +        charset = m_fallbackCharacterEncoding;
&gt; 
&gt; As I said earlier, I don&apos;t think we need two member variables for this.

Done.

&gt; &gt; Source/WebCore/dom/ScriptElement.h:36
&gt; &gt; +enum LegacyTypeSupport { DisallowLegacyTypeInTypeAttribute, AllowLegacyTypeInTypeAttribute };
&gt; &gt; +
&gt; 
&gt; We should declare this enum inside ScriptElement.

Done.

&gt; &gt; Source/WebCore/dom/ScriptElement.h:104
&gt; &gt; -    bool m_wasInsertedByParser;
&gt; &gt; +    bool m_parserInserted;
&gt; &gt; +    bool m_wasParserInserted;
&gt; &gt;      bool m_isExternalScript;
&gt; &gt; -    bool m_wasAlreadyStarted;
&gt; &gt; +    bool m_alreadyStarted;
&gt; &gt;      bool m_haveFiredLoad;
&gt; &gt; +    bool m_willBeParserExecuted; // Same as &quot;The parser will handle executing the script.&quot;
&gt; &gt; +    bool m_readyToBeParserExecuted;
&gt; &gt; +    bool m_willExecuteWhenDocumentFinishedParsing;
&gt; 
&gt; We should use bitfields here.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353794</commentid>
    <comment_count>26</comment_count>
      <attachid>83003</attachid>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-02-18 13:17:48 -0800</bug_when>
    <thetext>Created attachment 83003
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353911</commentid>
    <comment_count>27</comment_count>
      <attachid>83003</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-18 16:11:49 -0800</bug_when>
    <thetext>Comment on attachment 83003
Patch

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

Looks great.  Thanks!

&gt; Source/WebCore/dom/ScriptElement.cpp:222
&gt; +    if (!m_element-&gt;document()-&gt;contentSecurityPolicy()-&gt;canLoadExternalScriptFromSrc(sourceUrl))
&gt; +        return false;

This is wrong, but that&apos;s my job to deal with, not yours.

&gt; Source/WebCore/dom/ScriptElement.h:44
&gt; +    bool prepareScript(const TextPosition1&amp; scriptStartPosition = TextPosition1::minimumPosition(), LegacyTypeSupport supportLegacyTypes = DisallowLegacyTypeInTypeAttribute);

supportLegacyTypes parameter name isn&apos;t needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353946</commentid>
    <comment_count>28</comment_count>
      <attachid>83003</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-18 17:45:06 -0800</bug_when>
    <thetext>Comment on attachment 83003
Patch

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

&gt; Source/WebCore/dom/ScriptElement.cpp:145
&gt; +    } else
&gt; +        if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(type.stripWhiteSpace().lower()) || (supportLegacyTypes == AllowLegacyTypeInTypeAttribute &amp;&amp; isLegacySupportedJavaScriptLanguage(type)))

else and if needs to be on the same line.  You should split at || or &amp;&amp; (with || or &amp;&amp; on the next line).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353956</commentid>
    <comment_count>29</comment_count>
      <attachid>83043</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-18 18:14:54 -0800</bug_when>
    <thetext>Created attachment 83043
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354112</commentid>
    <comment_count>30</comment_count>
      <attachid>83043</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-19 01:39:22 -0800</bug_when>
    <thetext>Comment on attachment 83043
Patch for landing

Clearing flags on attachment: 83043

Committed r79114: &lt;http://trac.webkit.org/changeset/79114&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354113</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-19 01:39:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82837</attachid>
            <date>2011-02-17 11:29:40 -0800</date>
            <delta_ts>2011-02-17 12:01:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54676-20110217112939.patch</filename>
            <type>text/plain</type>
            <size>52889</size>
            <attacher name="James Simonsen">simonjam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1OTI3YzVlMDVkMjIwODg4MWQ5YTYxYmY0YWMwYmE0ZjgxOTZjYmI2Li5mMDhkOTcx
OWFmNzI1ZmFkMDdlOWQ5ODZmYjU4NTRkNjRhYWI3N2QyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAK
KzIwMTEtMDItMTYgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgU2NyaXB0
RWxlbWVudCBtYXRjaCB0aGUgSFRNTDUgc3BlYworCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB0
aGUgInByZXBhcmUgYSBzY3JpcHQiIHNlY3Rpb24gb2YgdGhlIEhUTUw1IHNwZWMgaW4gU2NyaXB0
RWxlbWVudDo6cHJlcGFyZVNjcmlwdCgpLgorICAgICAgICBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI3By
ZXBhcmUtYS1zY3JpcHQKKworICAgICAgICBUaGVyZSBpcyBubyBuZXcgZnVuY3Rpb25hbGl0eSwg
bGlrZSBzdXBwb3J0IGZvciBhc3luYz1mYWxzZS4gVGhpcyBwYXRjaCBtYWtlcyBpdCBlYXNpZXIg
dG8gaW1wbGVtZW50IHRob3VnaC4KKworICAgICAgICBUaGUgcGFyc2VycyB3ZXJlIHVwZGF0ZWQg
dG8gdXNlIHRoZSBuZXcgQVBJLCBidXQgbm90IHJld3JpdHRlbiB0byBsb29rIGxpa2UgdGhlIHNw
ZWMuIFRoYXQgd2lsbCBiZSBkb25lIHNlcGFyYXRlbHkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0Njc2CisKKyAgICAgICAgKiBmYXN0L2RvbS9I
VE1MU2NyaXB0RWxlbWVudC9lbXB0eS1zcmMtZXJyb3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9lbXB0eS1zcmMtZXJyb3IuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9kb20vSFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZv
cmVsb2FkLmh0bWw6IE9yaWdpbmFsIGF1dGhvciBzYXlzIHRlc3Qgd2FzIG9ubHkgbWVhbnQgdG8g
Y2hlY2sgZm9yIGNyYXNoZXMuIEJlZm9yZWxvYWQgaXMgbm90IHNwZWNpZmllZCBieSBIVE1MNS4g
VGVzdCB3YXMgbW9kaWZpZWQgdG8gYXNzdW1lIG1vdmVkIHNjcmlwdCB3b3VsZG4ndCBleGVjdXRl
IGJlY2F1c2Ugd2FzQWxyZWFkeVN0YXJ0ZWQgaXMgc2V0LgorICAgICAgICAqIGZhc3QvZG9tL3Nj
cmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWw6IEFjY29yZGluZyB0byBIVE1MNSBzcGVjLCBsb2Fk
IHNob3VsZCBvbmx5IGZpcmUgYWZ0ZXIgYSBzY3JpcHQgZXhlY3V0ZXMuIFRlc3Qgd2FzIG1vZGlm
aWVkIHRvIG1hdGNoIHRoYXQuIFRoZSBvbGQgYnJva2VuIGJlaGF2aW9yIHdhcyB0aGF0IGxvYWQg
ZmlyZWQgb24gdGhlIGNsb25lZCBlbGVtZW50LCBldmVuIHRob3VnaCBpdCBkaWRuJ3QgZXhlY3V0
ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS1tYWMvZmFzdC90b2tlbml6ZXIvMDAyLWV4
cGVjdGVkLnR4dDogQWNjb3JkaW5nIHRvIEhUTUw1LCBhIHNjcmlwdCB3aXRoIHNyYyBzZXQsIGJ1
dCBlbXB0eSwgc2hvdWxkIG5vdCBleGVjdXRlLiBUaGUgb2xkIGJyb2tlbiBiZWhhdmlvciB3YXMg
dGhhdCB0aGUgJzwnIGZyb20gPC9zY3JpcHQ+IHdhcyBleGVjdXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS1tYWMvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50
LXdyaXRlXzItZXhwZWN0ZWQudHh0OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS1tYWMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dDogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvdG9rZW5pemVyLzAwMi1l
eHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLXdpbi9mYXN0
L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGVfMi1leHBlY3RlZC50eHQ6
IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLXdpbi9mYXN0L3Rva2VuaXplci9z
Y3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dDogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3RrL2Zhc3QvdG9rZW5pemVyL2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0
ZV8yLWV4cGVjdGVkLnR4dDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zhc3QvdG9r
ZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0OiBEaXR0by4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3Vt
ZW50LXdyaXRlXzItZXhwZWN0ZWQudHh0OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
ZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dDogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dDogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0
LWRvY3VtZW50LXdyaXRlXzItZXhwZWN0ZWQudHh0OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9mYXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0OiBEaXR0
by4KKwogMjAxMS0wMi0xNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmViYXNlbGluZSBHVEsgdGVzdCByZXN1bHRzLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTFNjcmlwdEVsZW1lbnQvZW1wdHktc3Jj
LWVycm9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxTY3JpcHRFbGVt
ZW50L2VtcHR5LXNyYy1lcnJvci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTRmYTM1ZTc1YTAy
ZDQ4ZTAyZjQ0ZmUyNWQxNjQ2ZDk4ZjQ0NTU2OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL0hUTUxTY3JpcHRFbGVtZW50L2VtcHR5LXNyYy1lcnJvci1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw1IEBACitDaGVja3MgdGhhdCBhbiBlbXB0eSBzcmMgdGFnIGZpcmVzIGFu
IGVycm9yIGV2ZW50LgorUEFTUzEKK1BBU1MyCitQQVNTMworCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9lbXB0eS1zcmMtZXJyb3IuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxTY3JpcHRFbGVtZW50L2VtcHR5LXNyYy1lcnJvci5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjk5YzI0YTk1OGI0MWFhNTZlNzFhNDhiNDQ2ODQ0YzRjOGJmMzhlM2QKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9l
bXB0eS1zcmMtZXJyb3IuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KK0NoZWNrcyB0aGF0IGFuIGVtcHR5IHNyYyB0YWcgZmlyZXMgYW4g
ZXJyb3IgZXZlbnQuCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjIG9uZXJy
b3I9J2RlYnVnKCJQQVNTMSIpOyc+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iIiBvbmVycm9yPSdk
ZWJ1ZygiUEFTUzIiKTsnPjwvc2NyaXB0PgorPHNjcmlwdCBvbmVycm9yPSdkZWJ1ZygiRkFJTCIp
Oyc+ZGVidWcoIlBBU1MzIik7PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxv
YWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxTY3JpcHRFbGVtZW50L21vdmUtaW4t
YmVmb3JlbG9hZC5odG1sCmluZGV4IDc3YmVlZDA2YjM4MmRmNTQ3NTNmZjFiNjYxOWRjNGY3MGY5
NTk1MTMuLmQ4Zjg5ZjNkNGNhMmYyOWM0MzVlZTliYjFlNWI1NTM0OTg1ZmUwZTIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxTY3JpcHRFbGVtZW50L21vdmUtaW4tYmVmb3Jl
bG9hZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxTY3JpcHRFbGVtZW50L21v
dmUtaW4tYmVmb3JlbG9hZC5odG1sCkBAIC04LDcgKzgsNiBAQAogPGlmcmFtZSBzcmM9InJlc291
cmNlcy9mcmFtZS5odG1sIj48L2lmcmFtZT4KIDxzY3JpcHQ+CiBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OwogICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKIH0KIApAQCAtMTgsMTQg
KzE3LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgcy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVs
b2FkIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgIHZhciBzID0gZG9jdW1lbnQuYm9keS5yZW1vdmVD
aGlsZChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMl0pOwogICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWZyYW1lIilbMF0uY29udGVudERvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQocyk7Ci0gICAgfSwgZmFsc2UpOwotICAgIHMuYWRkRXZlbnRM
aXN0ZW5lcigiZXJyb3IiLCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiZXJyb3Ig
ZXZlbnQgc2hvdWxkIG5vdCBmaXJlLiIpCi0gICAgfSwgZmFsc2UpOwotICAgIHMuYWRkRXZlbnRM
aXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgewogICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKLSAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKICAgICB9LCBmYWxzZSk7CiAgICAgcy5zcmMg
PSAiZXh0ZXJuYWwuanMiOwogICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocyk7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtY2xvbmUtcmVydW4tc3JjLnhodG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNyYy54aHRtbAppbmRl
eCBlZGJlODI5YWM5YWYzOGQ0ZDMwNTMxNjUyZjFiYjI2ODM4MTdmZWRkLi5iMWQ1OTZhMGIxNGMx
NTI2NzdmNWMyMzMxZmU2NjFjODQzNzM3NGZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zY3JpcHQtY2xvbmUtcmVydW4tc3JjLnhodG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWwKQEAgLTksNyArOSw2IEBAIHZhciBpID0g
MDsKIAogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CiB9CiAKIHZhciBmaXJzdExvYWQgPSB0cnVlOwpAQCAtMjYsOCArMjUsNiBAQCBm
dW5jdGlvbiBsb2FkZWQoKSB7CiAgICAgZWxzZSBpZiAoaSA+IDIpCiAgICAgICByZXN1bHQgPSAn
RkFJTDogc2NyaXB0IHJhbiAnICsgaSArICcgdGltZXMnOwogICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdWx0KSk7Ci0KLSAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CiB9CiAKIDwvc2NyaXB0PgpAQCAtNDIsNiArMzks
OCBAQCB2YXIgZGl2ID0gc2NyaXB0LnBhcmVudE5vZGU7CiBkaXYucmVtb3ZlQ2hpbGQoc2NyaXB0
KTsKIGRpdi5hcHBlbmRDaGlsZChzY3JpcHQuY2xvbmVOb2RlKHRydWUpKTsKIAorbG9hZGVkKCk7
CisKIDwvc2NyaXB0PgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0tbWFjL2Zhc3QvdG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVj
dGVkLnR4dAppbmRleCBkMmEwMzRjY2RhZjBkNzM5YTYzZjIzMTgzOTc3ODNiYTI0ZDRjMzM1Li40
ZDZmYjU1MTlkZjYzNDY2NjFhMWJiYjc1YmRlNTRiY2E3OTc3ZjEwIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMvZmFzdC90b2tlbml6
ZXIvMDAyLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGlu
ZSAxOiBVbmNhdWdodCBTeW50YXhFcnJvcjogVW5leHBlY3RlZCB0b2tlbiA8CiBsYXllciBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKICAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKIGxh
eWVyIGF0ICgwLDApIHNpemUgODAweDYwMApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0tbWFjL2Zhc3QvdG9rZW5pemVyL2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13
cml0ZV8yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy9m
YXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGVfMi1leHBlY3RlZC50
eHQKaW5kZXggM2U2ZjE5ZDYzYjAxNDViMmEzMzFkYjJhOWRhMjRkYzU2Y2Q3OTc2OC4uYTliYTg3
YTIxNTBhNTJhZGY4M2RhNjMwNDFhNDUwOTY1YzMzZDlhMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2Zhc3QvdG9rZW5pemVyL2V4dGVybmFsLXNjcmlwdC1k
b2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS1tYWMvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRl
XzItZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6
IFVuY2F1Z2h0IFN5bnRheEVycm9yOiBVbmV4cGVjdGVkIHRva2VuIDwKIGxheWVyIGF0ICgwLDAp
IHNpemUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAogbGF5ZXIg
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS1tYWMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy9mYXN0L3Rva2VuaXplci9zY3Jp
cHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0CmluZGV4IGU2ZWY0NDQ2ZjI3MjA0ZjQ1ZDlmZTE3
ZmE0NzRiZjFjZTVjNTFkY2IuLmI3ODYxOWEyYjg5OWMyMmFkN2U3ZGRhYzNjOTkwNTk0Y2VlMWNj
MmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy9mYXN0L3Rv
a2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtLW1hYy9mYXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2Ut
ZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFVu
Y2F1Z2h0IFN5bnRheEVycm9yOiBVbmV4cGVjdGVkIHRva2VuIDwKIGxheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAogbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS13aW4vZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtLXdpbi9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0CmluZGV4
IDRlMmI0ZDkzNTI1YjJkNmU2YmFjMTk5NWY2ZjU4YzQ3YmYxYmEzODUuLmYxOWIwNTE1ZjRiYzk5
YjJmZDE1YWUwOTgzMjcxMGRlNmMxOWI5NmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtLXdpbi9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0
ZWQudHh0CkBAIC0xLDQgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFVuY2F1Z2h0
IFN5bnRheEVycm9yOiBVbmV4cGVjdGVkIHRva2VuIDwKIGxheWVyIGF0ICgwLDApIHNpemUgODAw
eDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAogbGF5ZXIgYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13
aW4vZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlXzItZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvdG9rZW5pemVy
L2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4dAppbmRleCA0YmNh
NDM1NWM1MjU3Njc4OGQ1NDY5MWU2MDdhZjM3MTA3YTg2NDJiLi4xNWZjMjlmMzcxYjdmNjJmMGI2
YWZhZTJkNDAzNGI3ZjU4MGJkMjJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS13aW4vZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRl
XzItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9m
YXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGVfMi1leHBlY3RlZC50
eHQKQEAgLTEsNCArMSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogVW5jYXVnaHQgU3lu
dGF4RXJyb3I6IFVuZXhwZWN0ZWQgdG9rZW4gPAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAw
CiAgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9m
YXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9z
ZS1leHBlY3RlZC50eHQKaW5kZXggMDFlMTc3YjU5ZjRmZmY3ZGU5YmExOWE2MTY2YzI5YjE4ZDA0
NjQwOS4uZGEwMWI0ZTQwZTRlOGQ1Y2IxY2I5ZmUyOTQ0NDg0OTY1MTYyZTA5MSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvdG9rZW5pemVyL3Njcmlw
dF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0td2luL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQK
QEAgLTEsNCArMSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogVW5jYXVnaHQgU3ludGF4
RXJyb3I6IFVuZXhwZWN0ZWQgdG9rZW4gPAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAg
IFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L3Rva2VuaXpl
ci8wMDItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvdG9rZW5p
emVyLzAwMi1leHBlY3RlZC50eHQKaW5kZXggZmQ0MDgyMDkxNTAzYjdiNzkzZWQ4ODhkZmRlZmJl
NDk2MWVlNDU3Ni4uNjQ3NjY0OTRlMDI0ZjIwZWY2YjJkNDI1MTk3ZjgzOTgyNmVkZTI3MyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvdG9rZW5pemVyLzAwMi1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvdG9rZW5pemVyLzAw
Mi1leHBlY3RlZC50eHQKQEAgLTEsNCArMSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTog
U3ludGF4RXJyb3I6IFBhcnNlIGVycm9yCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAg
UmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUgODAw
eDYwMApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvdG9rZW5pemVy
L2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9mYXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQt
d3JpdGVfMi1leHBlY3RlZC50eHQKaW5kZXggNjkwMmEzZjIwNDg4ZmY1NTAyOWQ2ZjYxZmUwZjQ2
YTI4MzYzODBjNy4uNGUzZmM4NjUxMmIwMTg1ZjM2ZTlkYjc1M2Y4NjM5Y2MxYmM5OWNiZiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvdG9rZW5pemVyL2V4dGVybmFs
LXNjcmlwdC1kb2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRl
XzItZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6
IFN5bnRheEVycm9yOiBQYXJzZSBlcnJvcgogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAg
IFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L3Rva2VuaXpl
ci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQKaW5kZXgg
MjQ3N2UxM2UyZWQ3MWZkMWU4MjJjYmQ3YmE0YjdjZTY1MmU1MDBjNi4uYzZlMjA3NWUyNzViYzYx
MjljMTUxZTBhOGY4MzNlYzEyNWE1N2IwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9j
bG9zZS1leHBlY3RlZC50eHQKQEAgLTEsNCArMSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUg
MTogU3ludGF4RXJyb3I6IFBhcnNlIGVycm9yCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
ICAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUg
ODAweDYwMApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvdG9rZW5p
emVyLzAwMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90b2tl
bml6ZXIvMDAyLWV4cGVjdGVkLnR4dAppbmRleCAxMWM5MDlhMDk3NGY4NTBkYzNmZjAyNGEyYjFh
MDc5ZDQ5MDM2NTUwLi40ZDZmYjU1MTlkZjYzNDY2NjFhMWJiYjc1YmRlNTRiY2E3OTc3ZjEwIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90b2tlbml6ZXIvMDAyLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90b2tlbml6ZXIv
MDAyLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAx
OiBTeW50YXhFcnJvcjogUGFyc2UgZXJyb3IKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAog
ICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90b2tlbml6
ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlXzItZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvdG9rZW5pemVyL2V4dGVybmFsLXNjcmlwdC1kb2N1bWVu
dC13cml0ZV8yLWV4cGVjdGVkLnR4dAppbmRleCAxZTUxZDQ5ZmQzYmEwNWNkZDZhNGZhZWM5ZjQ1
M2NjNzM4MjcwNzAxLi5hOWJhODdhMjE1MGE1MmFkZjgzZGE2MzA0MWE0NTA5NjVjMzNkOWEyIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90b2tlbml6ZXIvZXh0ZXJu
YWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlXzItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9mYXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3Jp
dGVfMi1leHBlY3RlZC50eHQKQEAgLTEsNCArMSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUg
MTogU3ludGF4RXJyb3I6IFBhcnNlIGVycm9yCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
ICAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUg
ODAweDYwMApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvdG9rZW5p
emVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dAppbmRl
eCBkNDlhOTcwZjc2ODBiYWMxMDM4NjdhM2FiOGYzOTcyNmVhNWIyOWRkLi5iNzg2MTlhMmI4OTlj
MjJhZDdlN2RkYWMzYzk5MDU5NGNlZTFjYzJmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJh
X2Nsb3NlLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGlu
ZSAxOiBTeW50YXhFcnJvcjogUGFyc2UgZXJyb3IKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYw
MAogICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAogbGF5ZXIgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L3Rva2Vu
aXplci8wMDItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC90b2tl
bml6ZXIvMDAyLWV4cGVjdGVkLnR4dAppbmRleCBkYTc0MzUzYWQ1YWI3OGI1OTNiNDI3ZjAyMTk3
N2I2ZmZmZDRhMjVkLi43MzZlNzI3MzM2ZDdhNzYzMjUxNmRmMjIyNTJjYzMwYmZhMTY5ZmNlIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L3Rva2VuaXplci8wMDItZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvdG9rZW5pemVyLzAw
Mi1leHBlY3RlZC50eHQKQEAgLTEsNCArMSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTog
U3ludGF4RXJyb3I6IFBhcnNlIGVycm9yCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAg
UmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUgODAw
eDYwMApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC90b2tlbml6ZXIv
ZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlXzItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdy
aXRlXzItZXhwZWN0ZWQudHh0CmluZGV4IGI2OWViYzM5OTUyYWMyNzRjZTQ2ZjUwMmUzZWYyNjg2
OWM4NGE5NGQuLmY5MWY1MTYzYTMzY2UyMWQ5MGNlMzQ0MGU2OTFkNzg4M2ExMTQ4MWQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvdG9rZW5pemVyL2V4dGVybmFsLXNj
cmlwdC1kb2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9mYXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGVfMi1l
eHBlY3RlZC50eHQKQEAgLTEsNCArMSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogU3lu
dGF4RXJyb3I6IFBhcnNlIGVycm9yCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgUmVu
ZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYw
MApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC90b2tlbml6ZXIvc2Ny
aXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zh
c3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQKaW5kZXggODNjNDM2
NzQ3NzVlNzQ4NGVhODQyNzk2YjYwNDQ3NTliMTc0MTcwMi4uNWQxNjk1OWFlMDM5MTJkYjYyOGNm
NGVhYWIzNzg3ZGYyMTI4NTM1NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
ZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhw
ZWN0ZWQudHh0CkBAIC0xLDQgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFN5bnRh
eEVycm9yOiBQYXJzZSBlcnJvcgogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgIFJlbmRl
clZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZTdiOWUwMjg5MjhkOGJkYzk5OGYzYTJjN2UzYTI3MWYzNWIzZjYwLi4y
MDlhYmJjZDI1ZmQ5OTc4Njk3ZjgyMmRjNzQwOTEwODQ1MDQ0ZDI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNjIgQEAKKzIwMTEtMDItMTYgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1ha2UgU2NyaXB0RWxlbWVudCBtYXRjaCB0aGUgSFRNTDUgc3BlYworCisgICAgICAgIFRoaXMg
aW1wbGVtZW50cyB0aGUgInByZXBhcmUgYSBzY3JpcHQiIHNlY3Rpb24gb2YgdGhlIEhUTUw1IHNw
ZWMgaW4gU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdCgpLgorICAgICAgICBodHRwOi8vd3d3
LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRp
bmctMS5odG1sI3ByZXBhcmUtYS1zY3JpcHQKKworICAgICAgICBUaGVyZSBpcyBubyBuZXcgZnVu
Y3Rpb25hbGl0eSwgbGlrZSBzdXBwb3J0IGZvciBhc3luYz1mYWxzZS4gVGhpcyBwYXRjaCBtYWtl
cyBpdCBlYXNpZXIgdG8gaW1wbGVtZW50IHRob3VnaC4KKworICAgICAgICBUaGUgcGFyc2VycyB3
ZXJlIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgQVBJLCBidXQgbm90IHJld3JpdHRlbiB0byBsb29r
IGxpa2UgdGhlIHNwZWMuIFRoYXQgd2lsbCBiZSBkb25lIHNlcGFyYXRlbHkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0Njc2CisKKyAgICAgICAg
VGVzdHM6IGZhc3QvZG9tL0hUTUxTY3JpcHRFbGVtZW50L2VtcHR5LXNyYy1lcnJvci5odG1sCisg
ICAgICAgICAgICAgICBBbGwgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBkb20vU2NyaXB0
RWxlbWVudC5jcHA6IFJld3JpdHRlbiB0byBtYXRjaCBIVE1MNSBzcGVjLgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RWxlbWVudDo6U2NyaXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IExvZ2ljIG1vdmVkIHRvIHByZXBh
cmVTY3JpcHQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpjaGlsZHJlbkNoYW5n
ZWQpOiBMb2dpYyBtb3ZlZCB0byBwcmVwYXJlU2NyaXB0LgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RWxlbWVudDo6aGFuZGxlU291cmNlQXR0cmlidXRlKTogTG9naWMgbW92ZWQgdG8gcHJlcGFy
ZVNjcmlwdC4KKyAgICAgICAgKFdlYkNvcmU6OmlzTGVnYWN5U3VwcG9ydGVkSmF2YVNjcmlwdExh
bmd1YWdlKTogQWRkZWQgdG8gc3VwcG9ydCBvbGQgc2NyaXB0IHR5cGVzIGluIGxheW91dCB0ZXN0
cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmlzU2NyaXB0VHlwZVN1cHBvcnRl
ZCk6IERlcml2ZWQgZnJvbSBvbGQgc2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpLgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdCk6IFNUQVJUIEhFUkUuIE1h
aW4gY2hhbmdlLiBTaG91bGQgcmVhZCBleGFjdGx5IGxpa2UgSFRNTDUncyAicHJlcGFyZSBhIHNj
cmlwdC4iIExlZ2FjeSB0eXBlIHN1cHBvcnQgbmVlZGVkIGZvciBsYXlvdXQgdGVzdHMgdXNpbmcg
WE1MIHBhcnNlci4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnJlcXVlc3RTY3Jp
cHQpOiBNb3N0IGxvZ2ljIG1vdmVkIHRvIHByZXBhcmVTY3JpcHQuIENoZWNrIHNlY3VyaXR5IHNl
dHRpbmdzIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpleGVjdXRlU2Ny
aXB0KTogQ29tYmluZWQgZXZhbHVhdGVTY3JpcHQoKSBhbmQgZXhlY3V0ZVNjcmlwdCgpIGZyb20g
b2xkIGNvZGUuIExvZ2ljIG1vdmVkIHRvIHByZXBhcmVTY3JpcHQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRFbGVtZW50OjpzdG9wTG9hZFJlcXVlc3QpOiBJZ25vcmUgcGFyc2VyIGV4ZWN1dGVk
IHNjcmlwdHMuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpleGVjdXRlKTogUmVu
YW1lZCBleGVjdXRlU2NyaXB0LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6bm90
aWZ5RmluaXNoZWQpOiBXZSBzaG91bGQgb25seSBsaXN0ZW4gZm9yIG5vbi1wYXJzZXIgZXhlY3V0
ZWQgc2NyaXB0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6Omlnbm9yZXNMb2Fk
UmVxdWVzdCk6IE5ldyB2YXJpYWJsZSBuYW1lcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVs
ZW1lbnQ6OmNoaWxkcmVuQXJlQ29tbWVudHNPckVtcHR5VGV4dCk6IEFkZGVkIGZvciBIVE1MNSBj
b21wbGlhbmNlLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6c2NyaXB0Q2hhcnNl
dCk6IFVzZSBIVE1MNSB2YXJpYWJsZXMuCisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OndpbGxCZVBhcnNlckV4ZWN1dGVkKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpyZWFkeVRvQmVQYXJzZXJF
eGVjdXRlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6d2lsbEV4
ZWN1dGVXaGVuRG9jdW1lbnRGaW5pc2hlZFBhcnNpbmcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEVsZW1lbnQ6OmNhY2hlZFNjcmlwdCk6IHByZXBhcmVTY3JpcHQoKSBpcyB0aGUg
b25seSBwbGFjZSB0aGF0IHNob3VsZCBsb2FkIHNjcmlwdHMuIFRoaXMgYWNjZXNzb3IgbGV0cyB0
aGUgcGFyc2VycyBsaXN0ZW4gZm9yIHdoZW4gbG9hZHMgZmluaXNoLgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RWxlbWVudDo6aXNQYXJzZXJJbnNlcnRlZCk6IEFkZGVkLgorICAgICAgICAqIGRv
bS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcyk6IFNob3VsZCBiZWhhdmUgdGhlIHNhbWUuIE9mZmxv
YWRzIG11Y2ggb2YgaXRzIHdvcmsgdG8gcHJlcGFyZVNjcmlwdCgpLgorICAgICAgICAqIGRvbS9Y
TUxEb2N1bWVudFBhcnNlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpwYXJzZUVuZEVsZW1lbnQpOiBJZGVudGljYWwgdG8gbGlieG1sMiBjaGFuZ2VzLgorICAg
ICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KTogTm8gbG9uZ2VyIG5lZWRzIHVy
bC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50OjpoYXNTb3VyY2VBdHRyaWJ1
dGUpOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxTY3JpcHRFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdCk6IFJlcXVlc3Rpbmcgc2NyaXB0
cyBvZmZsb2FkZWQgdG8gU2NyaXB0RWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3Jp
cHRSdW5uZXI6OnJ1blNjcmlwdCk6IFNob3VsZCBiZWhhdmUgdGhlIHNhbWUuIE9mZmxvYWRzIG11
Y2ggb2YgaXRzIHdvcmsgdG8gcHJlcGFyZVNjcmlwdCgpLgorICAgICAgICAqIHN2Zy9TVkdTY3Jp
cHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQpOiBOZXcgU2NyaXB0RWxlbWVudCBmdW5jdGlvbiBuYW1lcy4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KTogTm8g
bG9uZ2VyIG5lZWRzIHVybC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1lbnQ6OmZp
bmlzaFBhcnNpbmdDaGlsZHJlbik6IFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJl
biBpcyBnb25lLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6aGFzU291cmNl
QXR0cmlidXRlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50Ojpk
aXNwYXRjaExvYWRFdmVudCk6IE5ldyBTY3JpcHRFbGVtZW50IGZ1bmN0aW9uIG5hbWVzLgorICAg
ICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50Lmg6CisKIDIwMTEtMDItMTcgIEh1aSBIdWFuZyAg
PGh1aS4yLmh1YW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBMYXN6bG8gR29t
Ym9zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4IDE5MzlhMDgwZGZjODgz
NjlmMDJmZmY3NmNlNjgzYmM1NmJhMzg1MmIuLjdkMDc2NTQzMmU2OTM1MDIyOWEyNTVmZjBlZDcw
OGVmMzI4ODNiOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKQEAgLTUxLDEz
ICs1MSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNjcmlwdEVsZW1lbnQ6OlNjcmlw
dEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCBib29s
IHdhc0FscmVhZHlTdGFydGVkKQorU2NyaXB0RWxlbWVudDo6U2NyaXB0RWxlbWVudChFbGVtZW50
KiBlbGVtZW50LCBib29sIHBhcnNlckluc2VydGVkLCBib29sIHdhc0FscmVhZHlTdGFydGVkKQog
ICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCiAgICAgLCBtX2NhY2hlZFNjcmlwdCgwKQotICAgICwg
bV93YXNJbnNlcnRlZEJ5UGFyc2VyKHdhc0luc2VydGVkQnlQYXJzZXIpCisgICAgLCBtX3BhcnNl
ckluc2VydGVkKHBhcnNlckluc2VydGVkKQorICAgICwgbV93YXNQYXJzZXJJbnNlcnRlZChmYWxz
ZSkKICAgICAsIG1faXNFeHRlcm5hbFNjcmlwdChmYWxzZSkKICAgICAsIG1fd2FzQWxyZWFkeVN0
YXJ0ZWQod2FzQWxyZWFkeVN0YXJ0ZWQpCiAgICAgLCBtX2hhdmVGaXJlZExvYWQoZmFsc2UpCisg
ICAgLCBtX3dpbGxCZVBhcnNlckV4ZWN1dGVkKGZhbHNlKQorICAgICwgbV9yZWFkeVRvQmVQYXJz
ZXJFeGVjdXRlZChmYWxzZSkKKyAgICAsIG1fd2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRGaW5pc2hl
ZFBhcnNpbmcoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiB9CkBAIC02NywyMiAr
NzEsMTAgQEAgU2NyaXB0RWxlbWVudDo6flNjcmlwdEVsZW1lbnQoKQogICAgIHN0b3BMb2FkUmVx
dWVzdCgpOwogfQogCi12b2lkIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KGNv
bnN0IFN0cmluZyYgc291cmNlVXJsKQordm9pZCBTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9E
b2N1bWVudCgpCiB7Ci0gICAgaWYgKHdhc0luc2VydGVkQnlQYXJzZXIoKSAmJiAhaXNBc3luY2hy
b25vdXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3Jn
L3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jc2NyaXB0Ci0KLSAgICBpZiAoIXNvdXJjZVVy
bC5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVxdWVzdFNjcmlwdChzb3VyY2VVcmwpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUncyBhbiBlbXB0eSBzY3JpcHQgbm9k
ZSwgd2Ugc2hvdWxkbid0IGV2YWx1YXRlIHRoZSBzY3JpcHQKLSAgICAvLyBiZWNhdXNlIGlmIGEg
c2NyaXB0IGlzIGluc2VydGVkIGFmdGVyd2FyZHMgKGJ5IHNldHRpbmcgdGV4dCBvciBpbm5lclRl
eHQpCi0gICAgLy8gaXQgc2hvdWxkIGJlIGV2YWx1YXRlZCwgYW5kIGV2YWx1YXRlU2NyaXB0IG9u
bHkgZXZhbHVhdGVzIGEgc2NyaXB0IG9uY2UuCi0gICAgZXZhbHVhdGVTY3JpcHQoU2NyaXB0U291
cmNlQ29kZShzY3JpcHRDb250ZW50KCksIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+dXJsKCkpKTsg
Ly8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUuCisgICAg
aWYgKCFtX3BhcnNlckluc2VydGVkKQorICAgICAgICBwcmVwYXJlU2NyaXB0KCk7IC8vIEZJWE1F
OiBQcm92aWRlIGEgcmVhbCBzdGFydGluZyBsaW5lIG51bWJlciBoZXJlLgogfQogCiB2b2lkIFNj
cmlwdEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQpAQCAtOTMsMjIgKzg1LDggQEAgdm9p
ZCBTY3JpcHRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIAogdm9pZCBTY3JpcHRFbGVt
ZW50OjpjaGlsZHJlbkNoYW5nZWQoKQogewotICAgIGlmICh3YXNJbnNlcnRlZEJ5UGFyc2VyKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIGEgbm9kZSBpcyBpbnNlcnRlZCBhcyBhIGNo
aWxkIG9mIHRoZSBzY3JpcHQgZWxlbWVudAotICAgIC8vIGFuZCB0aGUgc2NyaXB0IGVsZW1lbnQg
aGFzIGJlZW4gaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50Ci0gICAgLy8gd2UgZXZhbHVhdGUgdGhl
IHNjcmlwdC4KLSAgICBpZiAobV9lbGVtZW50LT5pbkRvY3VtZW50KCkgJiYgbV9lbGVtZW50LT5m
aXJzdENoaWxkKCkpCi0gICAgICAgIGV2YWx1YXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2Ny
aXB0Q29udGVudCgpLCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnVybCgpKSk7IC8vIEZJWE1FOiBQ
cm92aWRlIGEgcmVhbCBzdGFydGluZyBsaW5lIG51bWJlciBoZXJlCi19Ci0KLXZvaWQgU2NyaXB0
RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQot
ewotICAgIC8vIFRoZSBwYXJzZXIganVzdCByZWFjaGVkIDwvc2NyaXB0Pi4gSWYgd2UgaGF2ZSBu
byBzcmMgYW5kIG5vIHRleHQsCi0gICAgLy8gYWxsb3cgZHluYW1pYyBsb2FkaW5nIGxhdGVyLgot
ICAgIGlmIChzb3VyY2VVcmwuaXNFbXB0eSgpICYmIHNjcmlwdENvbnRlbnQoKS5pc0VtcHR5KCkp
Ci0gICAgICAgIG1fd2FzSW5zZXJ0ZWRCeVBhcnNlciA9IGZhbHNlOworICAgIGlmICghbV9wYXJz
ZXJJbnNlcnRlZCAmJiBtX2VsZW1lbnQtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgcHJlcGFyZVNj
cmlwdCgpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVy
ZS4KIH0KIAogdm9pZCBTY3JpcHRFbGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3Qg
U3RyaW5nJiBzb3VyY2VVcmwpCkBAIC0xMTYsMTIgKzk0LDIxIEBAIHZvaWQgU2NyaXB0RWxlbWVu
dDo6aGFuZGxlU291cmNlQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQogICAgIGlm
IChpZ25vcmVzTG9hZFJlcXVlc3QoKSB8fCBzb3VyY2VVcmwuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICByZXF1ZXN0U2NyaXB0KHNvdXJjZVVybCk7CisgICAgcHJlcGFyZVNjcmlw
dCgpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4K
IH0KIAogLy8gSGVscGVyIGZ1bmN0aW9uCi1zdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3Jp
cHRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxhbmd1YWdlKQorc3RhdGljIGJvb2wgaXNMZWdhY3lT
dXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZ2UoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkKIHsKKyAg
ICAvKgorICAgICAgICAgTW96aWxsYSAxLjggYWNjZXB0cyBqYXZhc2NyaXB0MS4wIC0gamF2YXNj
cmlwdDEuNywgYnV0IFdpbklFIDcgYWNjZXB0cyBvbmx5IGphdmFzY3JpcHQxLjEgLSBqYXZhc2Ny
aXB0MS4zLgorICAgICAgICAgTW96aWxsYSAxLjggYW5kIFdpbklFIDcgYm90aCBhY2NlcHQgamF2
YXNjcmlwdCBhbmQgbGl2ZXNjcmlwdC4KKyAgICAgICAgIFdpbklFIDcgYWNjZXB0cyBlY21hc2Ny
aXB0IGFuZCBqc2NyaXB0LCBidXQgTW96aWxsYSAxLjggZG9lc24ndC4KKyAgICAgICAgIE5laXRo
ZXIgTW96aWxsYSAxLjggbm9yIFdpbklFIDcgYWNjZXB0IGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hp
dGVzcGFjZS4KKyAgICAgICAgIFdlIHdhbnQgdG8gYWNjZXB0IGFsbCB0aGUgdmFsdWVzIHRoYXQg
ZWl0aGVyIG9mIHRoZXNlIGJyb3dzZXJzIGFjY2VwdCwgYnV0IG5vdCBvdGhlciB2YWx1ZXMuCisK
KyAgICAgICAgIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBIVE1MNSBjb21wbGlhbnQuIFRo
ZXNlIGJlbG9uZyBpbiB0aGUgTUlNRSByZWdpc3RyeSBhcyAidGV4dC9qYXZhc2NyaXB0PHZlcnNp
b24+IiBlbnRyaWVzLgorICAgICAqLwogICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmcsIENhc2VG
b2xkaW5nSGFzaD4gTGFuZ3VhZ2VTZXQ7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMYW5ndWFn
ZVNldCwgbGFuZ3VhZ2VzLCAoKSk7CiAgICAgaWYgKGxhbmd1YWdlcy5pc0VtcHR5KCkpIHsKQEAg
LTEzNyw1OCArMTI0LDEzNSBAQCBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRMYW5n
dWFnZShjb25zdCBTdHJpbmcmIGxhbmd1YWdlKQogICAgICAgICBsYW5ndWFnZXMuYWRkKCJqYXZh
c2NyaXB0MS43Iik7CiAgICAgICAgIGxhbmd1YWdlcy5hZGQoImxpdmVzY3JpcHQiKTsKICAgICAg
ICAgbGFuZ3VhZ2VzLmFkZCgiZWNtYXNjcmlwdCIpOwotICAgICAgICBsYW5ndWFnZXMuYWRkKCJq
c2NyaXB0Iik7ICAgICAgICAgICAgICAgIAorICAgICAgICBsYW5ndWFnZXMuYWRkKCJqc2NyaXB0
Iik7CiAgICAgfQogCiAgICAgcmV0dXJuIGxhbmd1YWdlcy5jb250YWlucyhsYW5ndWFnZSk7CiB9
CiAKLXZvaWQgU2NyaXB0RWxlbWVudDo6cmVxdWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJj
ZVVybCkKK2Jvb2wgU2NyaXB0RWxlbWVudDo6aXNTY3JpcHRUeXBlU3VwcG9ydGVkKExlZ2FjeVR5
cGVTdXBwb3J0IHN1cHBvcnRMZWdhY3lUeXBlcykgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogRXZl
bnR1YWxseSB3ZSdkIGxpa2UgdG8gZXZhbHVhdGUgc2NyaXB0cyB3aGljaCBhcmUgaW5zZXJ0ZWQg
aW50byBhIAorICAgIFN0cmluZyB0eXBlOworICAgIFN0cmluZyBsZWdhY3lUeXBlOworICAgIGlm
ICh0eXBlQXR0cmlidXRlVmFsdWUoKS5pc0VtcHR5KCkgJiYgbGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1
ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgdHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOworICAgIGVs
c2UgaWYgKCF0eXBlQXR0cmlidXRlVmFsdWUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdHlwZSA9
IHR5cGVBdHRyaWJ1dGVWYWx1ZSgpLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7CisgICAgICAg
IGlmIChzdXBwb3J0TGVnYWN5VHlwZXMgPT0gQWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRl
KQorICAgICAgICAgICAgbGVnYWN5VHlwZSA9IHR5cGVBdHRyaWJ1dGVWYWx1ZSgpOworICAgIH0g
ZWxzZSBpZiAoIWxhbmd1YWdlQXR0cmlidXRlVmFsdWUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
dHlwZSA9ICJ0ZXh0LyIgKyBsYW5ndWFnZUF0dHJpYnV0ZVZhbHVlKCkubG93ZXIoKTsKKyAgICAg
ICAgbGVnYWN5VHlwZSA9IGxhbmd1YWdlQXR0cmlidXRlVmFsdWUoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAvLyBGSVhNRTogaXNMZWdhY3lTdXBw
b3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZ2UoKSBpcyBub3QgdmFsaWQgSFRNTDUuIEl0IGlzIHVzZWQg
aGVyZSB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGxh
eW91dCB0ZXN0cy4KKyAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKYXZh
U2NyaXB0TUlNRVR5cGUodHlwZSkgfHwgKCFsZWdhY3lUeXBlLmlzRW1wdHkoKSAmJiBpc0xlZ2Fj
eVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZShsZWdhY3lUeXBlKSk7Cit9CisKKy8vIGh0dHA6
Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNwcmVwYXJlLWEtc2NyaXB0Citi
b29sIFNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0aW9uMSYgc2Ny
aXB0U3RhcnRQb3NpdGlvbiwgTGVnYWN5VHlwZVN1cHBvcnQgc3VwcG9ydExlZ2FjeVR5cGVzKQor
eworICAgIGlmICh3YXNBbHJlYWR5U3RhcnRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAobV9wYXJzZXJJbnNlcnRlZCkgeworICAgICAgICBtX3dhc1BhcnNlckluc2VydGVk
ID0gdHJ1ZTsKKyAgICAgICAgbV9wYXJzZXJJbnNlcnRlZCA9IGZhbHNlOworICAgIH0gZWxzZQor
ICAgICAgICBtX3dhc1BhcnNlckluc2VydGVkID0gZmFsc2U7CisKKyAgICBpZiAoIWhhc1NvdXJj
ZUF0dHJpYnV0ZSgpICYmIGNoaWxkcmVuQXJlQ29tbWVudHNPckVtcHR5VGV4dCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fZWxlbWVudC0+aW5Eb2N1bWVudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWlzU2NyaXB0VHlwZVN1cHBvcnRlZChzdXBw
b3J0TGVnYWN5VHlwZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV93YXNQ
YXJzZXJJbnNlcnRlZCkKKyAgICAgICAgbV9wYXJzZXJJbnNlcnRlZCA9IHRydWU7CisKKyAgICBt
X3dhc0FscmVhZHlTdGFydGVkID0gdHJ1ZTsKKworICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdl
J2QgbGlrZSB0byBldmFsdWF0ZSBzY3JpcHRzIHdoaWNoIGFyZSBpbnNlcnRlZCBpbnRvIGEKICAg
ICAvLyB2aWV3bGVzcyBkb2N1bWVudCBidXQgdGhpcydsbCBkbyBmb3Igbm93LgogICAgIC8vIFNl
ZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzI3CiAgICAgaWYgKCFt
X2VsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2VsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkt
PnNjcmlwdCgpLT5jYW5FeGVjdXRlU2NyaXB0cyhBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyBldmVudEF0dHJpYnV0ZSA9IGV2ZW50QXR0
cmlidXRlVmFsdWUoKTsKKyAgICBTdHJpbmcgZm9yQXR0cmlidXRlID0gZm9yQXR0cmlidXRlVmFs
dWUoKTsKKyAgICBpZiAoIWV2ZW50QXR0cmlidXRlLmlzRW1wdHkoKSAmJiAhZm9yQXR0cmlidXRl
LmlzRW1wdHkoKSkgeworICAgICAgICBmb3JBdHRyaWJ1dGUgPSBmb3JBdHRyaWJ1dGUuc3RyaXBX
aGl0ZVNwYWNlKCk7CisgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoZm9yQXR0cmlidXRl
LCAid2luZG93IikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZXZlbnRB
dHRyaWJ1dGUgPSBldmVudEF0dHJpYnV0ZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgaWYg
KCFlcXVhbElnbm9yaW5nQ2FzZShldmVudEF0dHJpYnV0ZSwgIm9ubG9hZCIpICYmICFlcXVhbEln
bm9yaW5nQ2FzZShldmVudEF0dHJpYnV0ZSwgIm9ubG9hZCgpIikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFjaGFyc2V0QXR0cmlidXRlVmFsdWUoKS5pc0Vt
cHR5KCkpCisgICAgICAgIG1fY2hhcmFjdGVyRW5jb2RpbmcgPSBjaGFyc2V0QXR0cmlidXRlVmFs
dWUoKTsKKyAgICBlbHNlCisgICAgICAgIG1fZmFsbGJhY2tDaGFyYWN0ZXJFbmNvZGluZyA9IG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2hhcnNldCgpOworCisgICAgaWYgKGhhc1NvdXJjZUF0dHJp
YnV0ZSgpKQorICAgICAgICBpZiAoIXJlcXVlc3RTY3JpcHQoc291cmNlQXR0cmlidXRlVmFsdWUo
KSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaGFzU291cmNlQXR0cmli
dXRlKCkgJiYgZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYgIWFz
eW5jQXR0cmlidXRlVmFsdWUoKSkgeworICAgICAgICBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50
RmluaXNoZWRQYXJzaW5nID0gdHJ1ZTsKKyAgICAgICAgbV93aWxsQmVQYXJzZXJFeGVjdXRlZCA9
IHRydWU7CisgICAgfSBlbHNlIGlmIChoYXNTb3VyY2VBdHRyaWJ1dGUoKSAmJiBtX3BhcnNlcklu
c2VydGVkICYmICFhc3luY0F0dHJpYnV0ZVZhbHVlKCkpCisgICAgICAgIG1fd2lsbEJlUGFyc2Vy
RXhlY3V0ZWQgPSB0cnVlOworICAgIGVsc2UgaWYgKCFoYXNTb3VyY2VBdHRyaWJ1dGUoKSAmJiBt
X3BhcnNlckluc2VydGVkICYmICFtX2VsZW1lbnQtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0
c0xvYWRlZCgpKSB7CisgICAgICAgIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQgPSB0cnVlOworICAg
ICAgICBtX3JlYWR5VG9CZVBhcnNlckV4ZWN1dGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGhh
c1NvdXJjZUF0dHJpYnV0ZSgpKQorICAgICAgICBtX2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRo
aXMpOworICAgIGVsc2UKKyAgICAgICAgZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNj
cmlwdENvbnRlbnQoKSwgbV9lbGVtZW50LT5kb2N1bWVudCgpLT51cmwoKSwgc2NyaXB0U3RhcnRQ
b3NpdGlvbikpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2NyaXB0RWxlbWVudDo6
cmVxdWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCkKK3sKKyAgICBpZiAoIW1fZWxl
bWVudC0+ZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmNhbkxvYWRFeHRlcm5h
bFNjcmlwdEZyb21TcmMoc291cmNlVXJsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
UmVmUHRyPERvY3VtZW50PiBvcmlnaW5hbERvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVudCgp
OwogICAgIGlmICghbV9lbGVtZW50LT5kaXNwYXRjaEJlZm9yZUxvYWRFdmVudChzb3VyY2VVcmwp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1fZWxl
bWVudC0+aW5Eb2N1bWVudCgpIHx8IG1fZWxlbWVudC0+ZG9jdW1lbnQoKSAhPSBvcmlnaW5hbERv
Y3VtZW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFT
U0VSVCghbV9jYWNoZWRTY3JpcHQpOwotICAgIG1fY2FjaGVkU2NyaXB0ID0gbV9lbGVtZW50LT5k
b2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNvdXJjZVVy
bCwgc2NyaXB0Q2hhcnNldCgpKTsKKyAgICBpZiAoIXNvdXJjZVVybC5pc0VtcHR5KCkpCisgICAg
ICAgIG1fY2FjaGVkU2NyaXB0ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNvdXJjZVVybCwgc2NyaXB0Q2hhcnNldCgpKTsKICAg
ICBtX2lzRXh0ZXJuYWxTY3JpcHQgPSB0cnVlOwogCi0gICAgLy8gbV93YXNJbnNlcnRlZEJ5UGFy
c2VyIGlzIG5ldmVyIHJlc2V0IC0gYWx3YXlzIHJlc2llZCBhdCB0aGUgaW5pdGlhbCB2YWx1ZSBz
ZXQgd2hpbGUgcGFyc2luZy4KLSAgICAvLyBtX3dhc0FscmVhZHlTdGFydGVkIGlzIGxlZnQgdW50
b3VjaGVkIGFzIHdlbGwgdG8gYXZvaWQgc2NyaXB0IHJlZXhlY3V0aW9uLCBpZiBhIDxzY3JpcHQ+
IGVsZW1lbnQKLSAgICAvLyBpcyByZW1vdmVkIGFuZCByZWFwcGVuZGVkIHRvIHRoZSBkb2N1bWVu
dC4KLSAgICBtX2hhdmVGaXJlZExvYWQgPSBmYWxzZTsKLQotICAgIGlmIChtX2NhY2hlZFNjcmlw
dCkgewotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2NhY2hlZFNjcmlwdCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgU2NyaXB0RWxlbWVudDo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29k
ZSYgc291cmNlQ29kZSkKK3ZvaWQgU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdChjb25zdCBT
Y3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogewotICAgIGlmICh3YXNBbHJlYWR5U3RhcnRl
ZCgpIHx8IHNvdXJjZUNvZGUuaXNFbXB0eSgpIHx8ICFzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0
KCkpCisgICAgaWYgKHNvdXJjZUNvZGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpOwogICAg
IEFTU0VSVChkb2N1bWVudCk7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFt
ZSgpKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2NyaXB0cyhB
Ym91dFRvRXhlY3V0ZVNjcmlwdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV93
YXNBbHJlYWR5U3RhcnRlZCA9IHRydWU7Ci0KLSAgICAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cu
b3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jc2NyaXB0Ci0KICAgICAgICAgewogICAg
ICAgICAgICAgSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIgaWdub3JlRGVz
Y3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyKG1faXNFeHRlcm5hbFNjcmlwdCA/IGRvY3Vt
ZW50LmdldCgpIDogMCk7CiAgICAgICAgICAgICAvLyBDcmVhdGUgYSBzY3JpcHQgZnJvbSB0aGUg
c2NyaXB0IGVsZW1lbnQgbm9kZSwgdXNpbmcgdGhlIHNjcmlwdApAQCAtMjAxLDM2ICsyNjUsMjMg
QEAgdm9pZCBTY3JpcHRFbGVtZW50OjpldmFsdWF0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VD
b2RlJiBzb3VyY2VDb2RlKQogICAgIH0KIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRl
U2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCi17Ci0gICAgaWYgKHdh
c0FscmVhZHlTdGFydGVkKCkgfHwgc291cmNlQ29kZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVudCgp
OwotICAgIEFTU0VSVChkb2N1bWVudCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93YXNBbHJl
YWR5U3RhcnRlZCA9IHRydWU7Ci0KLSAgICBmcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQo
c291cmNlQ29kZSk7Ci19Ci0KIHZvaWQgU2NyaXB0RWxlbWVudDo6c3RvcExvYWRSZXF1ZXN0KCkK
IHsKICAgICBpZiAobV9jYWNoZWRTY3JpcHQpIHsKLSAgICAgICAgbV9jYWNoZWRTY3JpcHQtPnJl
bW92ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgaWYgKCFtX3dpbGxCZVBhcnNlckV4ZWN1dGVkKQor
ICAgICAgICAgICAgbV9jYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKICAgICAgICAg
bV9jYWNoZWRTY3JpcHQgPSAwOwogICAgIH0KIH0KIAogdm9pZCBTY3JpcHRFbGVtZW50OjpleGVj
dXRlKENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQogeworICAgIEFTU0VSVCghbV93aWxsQmVQ
YXJzZXJFeGVjdXRlZCk7CiAgICAgQVNTRVJUKGNhY2hlZFNjcmlwdCk7CiAgICAgaWYgKGNhY2hl
ZFNjcmlwdC0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgZXZhbHVhdGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShjYWNo
ZWRTY3JpcHQpKTsKKyAgICAgICAgZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKGNhY2hl
ZFNjcmlwdCkpOwogICAgICAgICBkaXNwYXRjaExvYWRFdmVudCgpOwogICAgIH0KICAgICBjYWNo
ZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKQEAgLTIzOCw2ICsyODksNyBAQCB2b2lkIFNj
cmlwdEVsZW1lbnQ6OmV4ZWN1dGUoQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCiAKIHZvaWQg
U2NyaXB0RWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIG8pCiB7CisgICAg
QVNTRVJUKCFtX3dpbGxCZVBhcnNlckV4ZWN1dGVkKTsKICAgICBBU1NFUlRfVU5VU0VEKG8sIG8g
PT0gbV9jYWNoZWRTY3JpcHQpOwogICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+YXN5bmNTY3Jp
cHRSdW5uZXIoKS0+ZXhlY3V0ZVNjcmlwdFNvb24odGhpcywgbV9jYWNoZWRTY3JpcHQpOwogICAg
IG1fY2FjaGVkU2NyaXB0ID0gMDsKQEAgLTI0NSw1NiArMjk3LDMxIEBAIHZvaWQgU2NyaXB0RWxl
bWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIG8pCiAKIGJvb2wgU2NyaXB0RWxl
bWVudDo6aWdub3Jlc0xvYWRSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2FzQWxyZWFk
eVN0YXJ0ZWQoKSB8fCBtX2lzRXh0ZXJuYWxTY3JpcHQgfHwgd2FzSW5zZXJ0ZWRCeVBhcnNlcigp
IHx8ICFtX2VsZW1lbnQtPmluRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gbV93YXNBbHJlYWR5U3Rh
cnRlZCB8fCBtX2lzRXh0ZXJuYWxTY3JpcHQgfHwgbV9wYXJzZXJJbnNlcnRlZCB8fCAhbV9lbGVt
ZW50LT5pbkRvY3VtZW50KCk7CiB9CiAKLWJvb2wgU2NyaXB0RWxlbWVudDo6c2hvdWxkRXhlY3V0
ZUFzSmF2YVNjcmlwdCgpIGNvbnN0Citib29sIFNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVuQXJlQ29t
bWVudHNPckVtcHR5VGV4dCgpIGNvbnN0CiB7Ci0gICAgLyoKLSAgICAgICAgIE1vemlsbGEgMS44
IGFjY2VwdHMgamF2YXNjcmlwdDEuMCAtIGphdmFzY3JpcHQxLjcsIGJ1dCBXaW5JRSA3IGFjY2Vw
dHMgb25seSBqYXZhc2NyaXB0MS4xIC0gamF2YXNjcmlwdDEuMy4KLSAgICAgICAgIE1vemlsbGEg
MS44IGFuZCBXaW5JRSA3IGJvdGggYWNjZXB0IGphdmFzY3JpcHQgYW5kIGxpdmVzY3JpcHQuCi0g
ICAgICAgICBXaW5JRSA3IGFjY2VwdHMgZWNtYXNjcmlwdCBhbmQganNjcmlwdCwgYnV0IE1vemls
bGEgMS44IGRvZXNuJ3QuCi0gICAgICAgICBOZWl0aGVyIE1vemlsbGEgMS44IG5vciBXaW5JRSA3
IGFjY2VwdCBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gICAgICAgICBXZSB3YW50
IHRvIGFjY2VwdCBhbGwgdGhlIHZhbHVlcyB0aGF0IGVpdGhlciBvZiB0aGVzZSBicm93c2VycyBh
Y2NlcHQsIGJ1dCBub3Qgb3RoZXIgdmFsdWVzLgotICAgICAKLSAgICAgICAgIEZJWE1FOiBJcyB0
aGlzIEhUTUw1IGNvbXBsaWFudD8KLSAgICAgKi8KLSAgICBTdHJpbmcgdHlwZSA9IHR5cGVBdHRy
aWJ1dGVWYWx1ZSgpOwotICAgIGlmICghdHlwZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZSh0eXBlLnN0cmlw
V2hpdGVTcGFjZSgpLmxvd2VyKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IGxhbmd1YWdlQXR0cmlidXRlVmFsdWUo
KTsKLSAgICAgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkgJiYgIWlzU3VwcG9ydGVkSmF2YVNj
cmlwdExhbmd1YWdlKGxhbmd1YWdlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
ICAgIAotCi0gICAgLy8gTm8gdHlwZSBvciBsYW5ndWFnZSBpcyBzcGVjaWZpZWQsIHNvIHdlIGFz
c3VtZSB0aGUgc2NyaXB0IHRvIGJlIEphdmFTY3JpcHQuCi0KLSAgICBTdHJpbmcgZm9yQXR0cmli
dXRlID0gZm9yQXR0cmlidXRlVmFsdWUoKTsKLSAgICBTdHJpbmcgZXZlbnRBdHRyaWJ1dGUgPSBl
dmVudEF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgaWYgKCFmb3JBdHRyaWJ1dGUuaXNFbXB0eSgpICYm
ICFldmVudEF0dHJpYnV0ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yQXR0cmlidXRlID0gZm9y
QXR0cmlidXRlLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdD
YXNlKGZvckF0dHJpYnV0ZSwgIndpbmRvdyIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgCi0gICAgICAgIGV2ZW50QXR0cmlidXRlID0gZXZlbnRBdHRyaWJ1dGUuc3Ry
aXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoZXZlbnRBdHRy
aWJ1dGUsICJvbmxvYWQiKSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UoZXZlbnRBdHRyaWJ1dGUsICJv
bmxvYWQoKSIpKQorICAgIGZvciAoTm9kZSogbiA9IG1fZWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBu
OyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAobi0+aXNDb21tZW50Tm9kZSgp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsK
KyAgICAgICAgICAgIFRleHQqIHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obik7CisgICAgICAgICAg
ICBpZiAodC0+bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKIFN0cmluZyBTY3JpcHRFbGVtZW50OjpzY3JpcHRDaGFyc2V0KCkgY29u
c3QKIHsKLSAgICAvLyBGaXJzdCB3ZSB0cnkgdG8gZ2V0IGVuY29kaW5nIGZyb20gY2hhcnNldCBh
dHRyaWJ1dGUuCi0gICAgU3RyaW5nIGNoYXJzZXQgPSBjaGFyc2V0QXR0cmlidXRlVmFsdWUoKS5z
dHJpcFdoaXRlU3BhY2UoKTsKLQotICAgIC8vIElmIGNoYXJzZXQgaGFzIG5vdCBiZWVuIGRlY2xh
cmVkIGluIHNjcmlwdCB0YWcsIGZhbGwgYmFjayB0byBmcmFtZSBlbmNvZGluZy4KLSAgICBpZiAo
Y2hhcnNldC5pc0VtcHR5KCkpCi0gICAgICAgIGNoYXJzZXQgPSBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPmNoYXJzZXQoKTsKLQorICAgIFN0cmluZyBjaGFyc2V0OworICAgIGlmICghbV9jaGFyYWN0
ZXJFbmNvZGluZy5pc0VtcHR5KCkpCisgICAgICAgIGNoYXJzZXQgPSBtX2NoYXJhY3RlckVuY29k
aW5nOworICAgIGVsc2UgaWYgKCFtX2ZhbGxiYWNrQ2hhcmFjdGVyRW5jb2RpbmcuaXNFbXB0eSgp
KQorICAgICAgICBjaGFyc2V0ID0gbV9mYWxsYmFja0NoYXJhY3RlckVuY29kaW5nOwogICAgIHJl
dHVybiBjaGFyc2V0OwogfQogCkBAIC0zMjUsMjAgKzM1Miw2IEBAIFN0cmluZyBTY3JpcHRFbGVt
ZW50OjpzY3JpcHRDb250ZW50KCkgY29uc3QKICAgICByZXR1cm4gU3RyaW5nOjphZG9wdCh2YWwp
OwogfQogCi1ib29sIFNjcmlwdEVsZW1lbnQ6OmlzQXN5bmNocm9ub3VzKCkgY29uc3QKLXsKLSAg
ICAvLyBPbmx5IGV4dGVybmFsIHNjcmlwdHMgbWF5IGJlIGFzeW5jaHJvbm91cy4KLSAgICAvLyBT
ZWU6IGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNhdHRyLXNjcmlw
dC1hc3luYwotICAgIHJldHVybiAhc291cmNlQXR0cmlidXRlVmFsdWUoKS5pc0VtcHR5KCkgJiYg
YXN5bmNBdHRyaWJ1dGVWYWx1ZSgpOwotfQotCi1ib29sIFNjcmlwdEVsZW1lbnQ6OmlzRGVmZXJy
ZWQoKSBjb25zdAotewotICAgIC8vIE9ubHkgZXh0ZXJuYWwgc2NyaXB0cyBtYXkgYmUgZGVmZXJy
ZWQgYW5kIGFzeW5jIHRydW1wcyBkZWZlciB0byBhbGxvdyBmb3IgYmFja3dhcmQgY29tcGF0aWJp
bGl0eS4KLSAgICAvLyBTZWU6IGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcu
aHRtbCNhdHRyLXNjcmlwdC1kZWZlcgotICAgIHJldHVybiAhc291cmNlQXR0cmlidXRlVmFsdWUo
KS5pc0VtcHR5KCkgJiYgIWFzeW5jQXR0cmlidXRlVmFsdWUoKSAmJiBkZWZlckF0dHJpYnV0ZVZh
bHVlKCk7Ci19Ci0KIFNjcmlwdEVsZW1lbnQqIHRvU2NyaXB0RWxlbWVudChFbGVtZW50KiBlbGVt
ZW50KQogewogICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQu
aAppbmRleCA1MjUwZjNlMzM1NDk5MDkyOGY1NzU2MDFkMDEyMjNmNDBjNjUxNjA3Li5kYWI3Yzll
ZGNhYzQyN2Q2N2NiNDQzNTI2N2IxNWUyMGQ1Njk5NWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRF
bGVtZW50LmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0UG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMSw1MiAr
MzIsNTcgQEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIFNjcmlwdEVsZW1lbnQ7CiBjbGFzcyBTY3Jp
cHRTb3VyY2VDb2RlOwogCitlbnVtIExlZ2FjeVR5cGVTdXBwb3J0IHsgRGlzYWxsb3dMZWdhY3lU
eXBlSW5UeXBlQXR0cmlidXRlLCBBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUgfTsKKwog
Y2xhc3MgU2NyaXB0RWxlbWVudCA6IHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFNjcmlwdEVsZW1lbnQoRWxl
bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29sIGlzRXZhbHVhdGVkKTsKICAgICB2aXJ0
dWFsIH5TY3JpcHRFbGVtZW50KCk7Ci0gICAgCisKICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CiAKKyAgICBib29sIHByZXBhcmVTY3JpcHQoY29uc3Qg
VGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjE6Om1pbmlt
dW1Qb3NpdGlvbigpLCBMZWdhY3lUeXBlU3VwcG9ydCBzdXBwb3J0TGVnYWN5VHlwZXMgPSBEaXNh
bGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOworCiAgICAgLy8gQSBjaGFyc2V0IGZvciBs
b2FkaW5nIHRoZSBzY3JpcHQgKG1heSBiZSBvdmVycmlkZGVuIGJ5IEhUVFAgaGVhZGVycyBvciBh
IEJPTSkuCiAgICAgU3RyaW5nIHNjcmlwdENoYXJzZXQoKSBjb25zdDsKIAogICAgIFN0cmluZyBz
Y3JpcHRDb250ZW50KCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0
KCkgY29uc3Q7CiAgICAgdm9pZCBleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUm
KTsKICAgICB2b2lkIGV4ZWN1dGUoQ2FjaGVkU2NyaXB0Kik7CiAKICAgICAvLyBYTUwgcGFyc2Vy
IGNhbGxzIHRoZXNlCi0gICAgdmlydHVhbCBTdHJpbmcgc291cmNlQXR0cmlidXRlVmFsdWUoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTG9hZEV2ZW50KCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaEVycm9yRXZlbnQoKSA9IDA7CisgICAgYm9vbCBpc1Njcmlw
dFR5cGVTdXBwb3J0ZWQoTGVnYWN5VHlwZVN1cHBvcnQpIGNvbnN0OwogCiAgICAgYm9vbCBoYXZl
RmlyZWRMb2FkRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhdmVGaXJlZExvYWQ7IH0KKyAgICBi
b29sIHdpbGxCZVBhcnNlckV4ZWN1dGVkKCkgY29uc3QgeyByZXR1cm4gbV93aWxsQmVQYXJzZXJF
eGVjdXRlZDsgfQorICAgIGJvb2wgcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSBjb25zdCB7IHJl
dHVybiBtX3JlYWR5VG9CZVBhcnNlckV4ZWN1dGVkOyB9CisgICAgYm9vbCB3aWxsRXhlY3V0ZVdo
ZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbEV4ZWN1dGVX
aGVuRG9jdW1lbnRGaW5pc2hlZFBhcnNpbmc7IH0KKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRTY3JpcHQ+IGNhY2hlZFNjcmlwdCgpIHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0OyB9CiAK
IHByb3RlY3RlZDoKICAgICB2b2lkIHNldEhhdmVGaXJlZExvYWRFdmVudChib29sIGhhdmVGaXJl
ZExvYWQpIHsgbV9oYXZlRmlyZWRMb2FkID0gaGF2ZUZpcmVkTG9hZDsgfQotICAgIGJvb2wgd2Fz
SW5zZXJ0ZWRCeVBhcnNlcigpIGNvbnN0IHsgcmV0dXJuIG1fd2FzSW5zZXJ0ZWRCeVBhcnNlcjsg
fQorICAgIGJvb2wgaXNQYXJzZXJJbnNlcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VySW5z
ZXJ0ZWQ7IH0KICAgICBib29sIHdhc0FscmVhZHlTdGFydGVkKCkgY29uc3QgeyByZXR1cm4gbV93
YXNBbHJlYWR5U3RhcnRlZDsgfQogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IG91
ciBwYXJlbnQgY2xhc3Nlcy4KLSAgICB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KGNvbnN0IFN0
cmluZyYgc291cmNlVXJsKTsKKyAgICB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAg
dm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsK
LSAgICB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbihjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7
CiAgICAgdm9pZCBoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwp
OwogCiBwcml2YXRlOgogICAgIGJvb2wgaWdub3Jlc0xvYWRSZXF1ZXN0KCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0FzeW5jaHJvbm91cygpIGNvbnN0OwotICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0
OworICAgIGJvb2wgY2hpbGRyZW5BcmVDb21tZW50c09yRW1wdHlUZXh0KCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOwotICAgIHZvaWQg
ZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOworICAgIGJvb2wgcmVxdWVz
dFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7CiAgICAgdm9pZCBzdG9wTG9hZFJlcXVl
c3QoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSop
OwogCisgICAgdmlydHVhbCBTdHJpbmcgc291cmNlQXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBTdHJpbmcgY2hhcnNldEF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgU3RyaW5nIHR5cGVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIFN0cmluZyBsYW5ndWFnZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwpAQCAtODQs
MTMgKzkwLDIwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgZXZlbnRBdHRyaWJ1dGVW
YWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYXN5bmNBdHRyaWJ1dGVWYWx1ZSgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU291cmNlQXR0cmlidXRlKCkgY29uc3QgPSAwOwog
CiAgICAgRWxlbWVudCogbV9lbGVtZW50OwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hl
ZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7Ci0gICAgYm9vbCBtX3dhc0luc2VydGVkQnlQYXJzZXI7
CisgICAgYm9vbCBtX3BhcnNlckluc2VydGVkOworICAgIGJvb2wgbV93YXNQYXJzZXJJbnNlcnRl
ZDsKICAgICBib29sIG1faXNFeHRlcm5hbFNjcmlwdDsKICAgICBib29sIG1fd2FzQWxyZWFkeVN0
YXJ0ZWQ7CiAgICAgYm9vbCBtX2hhdmVGaXJlZExvYWQ7CisgICAgYm9vbCBtX3dpbGxCZVBhcnNl
ckV4ZWN1dGVkOyAvLyBTYW1lIGFzICJUaGUgcGFyc2VyIHdpbGwgaGFuZGxlIGV4ZWN1dGluZyB0
aGUgc2NyaXB0LiIKKyAgICBib29sIG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQ7CisgICAgYm9v
bCBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nOworICAgIFN0cmluZyBt
X2NoYXJhY3RlckVuY29kaW5nOworICAgIFN0cmluZyBtX2ZhbGxiYWNrQ2hhcmFjdGVyRW5jb2Rp
bmc7CiB9OwogCiBTY3JpcHRFbGVtZW50KiB0b1NjcmlwdEVsZW1lbnQoRWxlbWVudCopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRleCAx
MGQ2ZTBkZTUyM2IxNWQxOGIyNzUxOGRkNzQxOWRiMzRmOGFlMmZjLi44NWI4YzhkZTk0MzY1ZTUy
MGE1NWY4NjQzNGJmNmI1NjI2YTVkZDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vWE1M
RG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApAQCAtODgwLDM1ICs4ODAsMzIgQEAgdm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKCkKICAgICBBU1NFUlQoIW1fcGVuZGluZ1Njcmlw
dCk7CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsKIAorICAgIGJvb2wgc3VjY2Vzc2Z1
bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVtZW50LT5wcmVwYXJlU2NyaXB0KG1fc2NyaXB0U3RhcnRQ
b3NpdGlvbiwgQWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKTsKKyAgICBpZiAoIXN1Y2Nl
c3NmdWxseVByZXBhcmVkKSB7CiAjaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgaWYgKCFzY3JpcHRF
bGVtZW50LT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCi0gICAgICAgIGRvY3VtZW50KCkt
PnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7Ci0gICAgZWxzZQorICAgICAg
ICBpZiAoIXNjcmlwdEVsZW1lbnQtPmlzU2NyaXB0VHlwZVN1cHBvcnRlZChBbGxvd0xlZ2FjeVR5
cGVJblR5cGVBdHRyaWJ1dGUpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0U2hvdWxkUHJv
Y2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKICNlbmRpZgotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IFNjcmlwdCBleGVjdXRpb24gc2hvdWxkIGJlIHNoYXJlZCBzaG91bGQgYmUgc2hhcmVkIGJl
dHdlZW4KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogU2NyaXB0IGV4ZWN1dGlvbiBz
aG91bGQgYmUgc2hhcmVkIGJldHdlZW4KICAgICAgICAgLy8gdGhlIGxpYnhtbDIgYW5kIFF0IFhN
TERvY3VtZW50UGFyc2VyIGltcGxlbWVudGF0aW9ucy4KIAogICAgICAgICAvLyBKYXZhU2NyaXB0
IGNhbiBkZXRhY2ggdGhlIHBhcnNlci4gIE1ha2Ugc3VyZSB0aGlzIGlzIG5vdCByZWxlYXNlZAog
ICAgICAgICAvLyBiZWZvcmUgdGhlIGVuZCBvZiB0aGlzIG1ldGhvZC4KICAgICAgICAgUmVmUHRy
PFhNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgICAgIFN0cmluZyBzY3Jp
cHRIcmVmID0gc2NyaXB0RWxlbWVudC0+c291cmNlQXR0cmlidXRlVmFsdWUoKTsKLSAgICAgICAg
aWYgKCFzY3JpcHRIcmVmLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gd2UgaGF2ZSBhIHNy
YyBhdHRyaWJ1dGUKLSAgICAgICAgICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0ID0gc2NyaXB0RWxl
bWVudC0+c2NyaXB0Q2hhcnNldCgpOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmRpc3BhdGNo
QmVmb3JlTG9hZEV2ZW50KHNjcmlwdEhyZWYpICYmCi0gICAgICAgICAgICAgICAgKG1fcGVuZGlu
Z1NjcmlwdCA9IGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RTY3Jp
cHQoc2NyaXB0SHJlZiwgc2NyaXB0Q2hhcnNldCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9zY3Jp
cHRFbGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPmFk
ZENsaWVudCh0aGlzKTsKLQotICAgICAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxs
IGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgcmVmKCkgZXhlY3V0ZWQgaXQK
LSAgICAgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAgICAgICAg
ICBwYXVzZVBhcnNpbmcoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1f
c2NyaXB0RWxlbWVudCA9IDA7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBpZiAoc2NyaXB0RWxl
bWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkKICAgICAgICAgICAgIHNjcmlwdEVsZW1l
bnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRD
b250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKKyAg
ICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSkgewor
ICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0
KCk7CisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICAgICAg
bV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisKKyAgICAgICAgICAgIC8vIG1fcGVu
ZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRk
Q2xpZW50KCkgZXhlY3V0ZWQgaXQuCisgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQor
ICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CiAKICAgICAgICAgLy8gSmF2YVNjcmlwdCBtYXkgaGF2
ZSBkZXRhY2hlZCB0aGUgcGFyc2VyCiAgICAgICAgIGlmIChpc0RldGFjaGVkKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKaW5kZXggZDBiZjg4ZGM3MWFmNTE0
ZTQ1MzcwMzFkMTlhMjczNTU2ZWRlMDQyMi4uOTlhZmFkYjEzOWUwNWY1ZjAxNTUzMmEzNDNmY2Ez
OGM3NWRlODFjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFy
c2VyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNw
cApAQCAtNTg4LDI4ICs1ODgsMjUgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VFbmRF
bGVtZW50KCkKICAgICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7CiAgICAgbV9yZXF1ZXN0aW5n
U2NyaXB0ID0gdHJ1ZTsKIAorICAgIGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRF
bGVtZW50LT5wcmVwYXJlU2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgQWxsb3dMZWdhY3lU
eXBlSW5UeXBlQXR0cmlidXRlKTsKKyAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBhcmVkKSB7CiAj
aWYgRU5BQkxFKFhIVE1MTVApCi0gICAgaWYgKCFzY3JpcHRFbGVtZW50LT5zaG91bGRFeGVjdXRl
QXNKYXZhU2NyaXB0KCkpCi0gICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3Nj
cmlwdEVsZW1lbnQodHJ1ZSk7Ci0gICAgZWxzZQorICAgICAgICBpZiAoIXNjcmlwdEVsZW1lbnQt
PmlzU2NyaXB0VHlwZVN1cHBvcnRlZChBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpKQor
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0
cnVlKTsKICNlbmRpZgotICAgIHsKLSAgICAgICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3JpcHRF
bGVtZW50LT5zb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpOwotICAgICAgICBpZiAoIXNjcmlwdEhyZWYu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZQotICAg
ICAgICAgICAgU3RyaW5nIHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFy
c2V0KCk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQo
c2NyaXB0SHJlZikgJiYKLSAgICAgICAgICAgICAgICAobV9wZW5kaW5nU2NyaXB0ID0gZG9jdW1l
bnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzY3JpcHRIcmVmLCBz
Y3JpcHRDaGFyc2V0KSkpIHsKLSAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVt
ZW50OwotICAgICAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwot
Ci0gICAgICAgICAgICAgICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUgMCBpZiBzY3JpcHQg
d2FzIGFscmVhZHkgbG9hZGVkIGFuZCByZWYoKSBleGVjdXRlZCBpdAotICAgICAgICAgICAgICAg
IGlmIChtX3BlbmRpbmdTY3JpcHQpCi0gICAgICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygp
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0g
MDsKLSAgICAgICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNjcmlwdEVsZW1l
bnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCiAgICAgICAgICAgICBzY3JpcHRFbGVtZW50
LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29u
dGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CisgICAg
ICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpIHsKKyAg
ICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgp
OworICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgIG1f
cGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOworCisgICAgICAgICAgICAvLyBtX3BlbmRp
bmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIGFkZENs
aWVudCgpIGV4ZWN1dGVkIGl0LgorICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKKyAg
ICAgICAgICAgICAgICBwYXVzZVBhcnNpbmcoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBtX3NjcmlwdEVsZW1lbnQgPSAwOwogICAgIH0KICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBm
YWxzZTsKICAgICBwb3BDdXJyZW50Tm9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3Jp
cHRFbGVtZW50LmNwcAppbmRleCA2MDNiMmE4ZWVkYmU3NTJlZjcyZDFhZTMyYWFiOWVkODVmMDM2
YzYxLi5kNjQ2ODllN2UzYjA1NWQxMjI4NTYxYTY2ZGI0YmZlNzlkMmE1NTZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcApAQCAtNzQsMTYgKzc0LDEwIEBAIHZv
aWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0
cikKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQog
Ci12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQotewotICAg
IFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbihzb3VyY2VBdHRyaWJ1dGVWYWx1
ZSgpKTsKLSAgICBIVE1MRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci19Ci0KIHZv
aWQgSFRNTFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBIVE1M
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBTY3JpcHRFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKTsKKyAgICBTY3JpcHRFbGVt
ZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogfQogCiB2b2lkIEhUTUxTY3JpcHRFbGVtZW50
OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKQEAgLTE2MCw2ICsxNTQsMTEgQEAgYm9vbCBIVE1MU2Ny
aXB0RWxlbWVudDo6ZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhc3RI
YXNBdHRyaWJ1dGUoZGVmZXJBdHRyKTsKIH0KIAorYm9vbCBIVE1MU2NyaXB0RWxlbWVudDo6aGFz
U291cmNlQXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShz
cmNBdHRyKTsKK30KKwogdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hMb2FkRXZlbnQo
KQogewogICAgIEFTU0VSVCghaGF2ZUZpcmVkTG9hZEV2ZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2NyaXB0RWxlbWVudC5oCmluZGV4IDA5NzczYzVmYmM2NDUwZWE4N2FlODRjZTFkMjU3
ZDZlMmFlODU3YWYuLjNjMTY0NzM5N2IxOTc5MWJmMDdjNzk1Mzk5MTUyNzFmZWRjZTRiZmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDYgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5
UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdl
ID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogCiAgICAgdmlydHVhbCBib29sIGlzVVJM
QXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJz
aW5nQ2hpbGRyZW4oKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIApAQCAtNTksNiArNTgsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGV2ZW50QXR0cmlidXRlVmFsdWUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBkZWZlckF0dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc1Nv
dXJjZUF0dHJpYnV0ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTG9hZEV2
ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCBjOTk4NThk
MGNmZTVmM2NlOGYyMDI5ZGM5ZWFmZmYxOGRlZTlkYTgxLi45OWZmZjVlZjllNWUxYjQxZDExMzkx
OGJmMjE4OTVjZjc1ZWE3OTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MU2NyaXB0UnVubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MU2NyaXB0UnVubmVyLmNwcApAQCAtMjYyLDE3ICsyNjIsOSBAQCB2b2lkIEhUTUxTY3JpcHRS
dW5uZXI6OnJlcXVlc3REZWZlcnJlZFNjcmlwdChFbGVtZW50KiBlbGVtZW50KQogYm9vbCBIVE1M
U2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiBwZW5kaW5n
U2NyaXB0LCBFbGVtZW50KiBzY3JpcHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFwZW5kaW5nU2Ny
aXB0LmVsZW1lbnQoKSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBzcmNWYWx1ZSA9IHNjcmlw
dC0+Z2V0QXR0cmlidXRlKHNyY0F0dHIpOwotICAgIC8vIEFsbG93IHRoZSBob3N0IHRvIGRpc2xs
b3cgc2NyaXB0IGxvYWRzICh1c2luZyB0aGUgWFNTQXVkaXRvciwgZXRjLikKLSAgICAvLyBGSVhN
RTogdGhpcyBjaGVjayBzaG91bGQgYmUgcGVyZm9ybWVkIG9uIHRoZSBmaW5hbCBVUkwgaW4gYSBy
ZWRpcmVjdCBjaGFpbi4KLSAgICBpZiAoIW1faG9zdC0+c2hvdWxkTG9hZEV4dGVybmFsU2NyaXB0
RnJvbVNyYyhzcmNWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBGSVhNRTog
V2UgbmVlZCB0byByZXNvbHZlIHRoZSB1cmwgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQuCi0gICAg
aWYgKCFzY3JpcHQtPmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KHNyY1ZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHBlbmRpbmdTY3JpcHQuc2V0RWxlbWVudChzY3JpcHQpOwogICAg
IC8vIFRoaXMgc2hvdWxkIGNvcnJlY3RseSByZXR1cm4gMCBmb3IgZW1wdHkgb3IgaW52YWxpZCBz
cmNWYWx1ZXMuCi0gICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQgPSBtX2RvY3VtZW50LT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNyY1ZhbHVlLCB0b1NjcmlwdEVs
ZW1lbnQoc2NyaXB0KS0+c2NyaXB0Q2hhcnNldCgpKTsKKyAgICBDYWNoZWRTY3JpcHQqIGNhY2hl
ZFNjcmlwdCA9IHRvU2NyaXB0RWxlbWVudChzY3JpcHQpLT5jYWNoZWRTY3JpcHQoKS5nZXQoKTsK
ICAgICBpZiAoIWNhY2hlZFNjcmlwdCkgewogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBE
aXNwYXRjaCBlcnJvciBldmVudC4KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjkzLDI5ICsy
ODUsMjQgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0
LCBjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGEKIAogICAgICAgICBTY3JpcHRFbGVtZW50
KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KHNjcmlwdCk7CiAgICAgICAgIEFTU0VS
VChzY3JpcHRFbGVtZW50KTsKLSAgICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT5zaG91bGRFeGVj
dXRlQXNKYXZhU2NyaXB0KCkpCisKKyAgICAgICAgc2NyaXB0RWxlbWVudC0+cHJlcGFyZVNjcmlw
dChzY3JpcHRTdGFydFBvc2l0aW9uKTsKKworICAgICAgICBpZiAoIXNjcmlwdEVsZW1lbnQtPndp
bGxCZVBhcnNlckV4ZWN1dGVkKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
ICAgICBpZiAoc2NyaXB0LT5oYXNBdHRyaWJ1dGUoc3JjQXR0cikpIHsKLSAgICAgICAgICAgIGlm
IChzY3JpcHQtPmhhc0F0dHJpYnV0ZShhc3luY0F0dHIpKSAvLyBBc3luYyB0YWtlcyBwcmVjZW5k
ZW5jZSBvdmVyIGRlZmVyLgotICAgICAgICAgICAgICAgIHJldHVybjsgLy8gQXN5bmNocm9ub3Vz
IHNjcmlwdHMgaGFuZGxlIHRoZW1zZWx2ZXMuCi0KLSAgICAgICAgICAgIGlmIChzY3JpcHQtPmhh
c0F0dHJpYnV0ZShkZWZlckF0dHIpKQotICAgICAgICAgICAgICAgIHJlcXVlc3REZWZlcnJlZFNj
cmlwdChzY3JpcHQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlcXVlc3RQ
YXJzaW5nQmxvY2tpbmdTY3JpcHQoc2NyaXB0KTsKLSAgICAgICAgfSBlbHNlIGlmICghbV9kb2N1
bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgJiYgbV9zY3JpcHROZXN0aW5nTGV2ZWwgPT0g
MSkgewotICAgICAgICAgICAgLy8gQmxvY2sgaW5saW5lIHNjcmlwdCBleGVjdXRpb24gb24gc3R5
bGVzaGVldCBsb2FkLCB1bmxlc3Mgd2UgYXJlIGluIGRvY3VtZW50LndyaXRlKCkuCi0gICAgICAg
ICAgICAvLyBUaGUgbGF0dGVyIGNhc2UgY2FuIG9ubHkgaGFwcGVuIGlmIGEgc2NyaXB0IGJvdGgg
dHJpZ2dlcnMgYSBzdHlsZXNoZWV0IGxvYWQKLSAgICAgICAgICAgIC8vIGFuZCB3cml0ZXMgYW4g
aW5saW5lIHNjcmlwdC4gU2luY2Ugd3JpdGUgaXMgYmxvY2tpbmcgd2UgaGF2ZSB0byBleGVjdXRl
IHRoZQotICAgICAgICAgICAgLy8gd3JpdHRlbiBzY3JpcHQgaW1tZWRpYXRlbHksIGlnbm9yaW5n
IHRoZSBwZW5kaW5nIHNoZWV0cy4KLSAgICAgICAgICAgIG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0
LnNldEVsZW1lbnQoc2NyaXB0KTsKLSAgICAgICAgICAgIG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0
LnNldFN0YXJ0aW5nUG9zaXRpb24oc2NyaXB0U3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNFeGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAgICAgICAg
ICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVudCgpLCBkb2N1
bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0U3RhcnRQb3NpdGlv
bik7Ci0gICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUp
OwotICAgICAgICB9CisKKyAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxFeGVjdXRlV2hl
bkRvY3VtZW50RmluaXNoZWRQYXJzaW5nKCkpCisgICAgICAgICAgICByZXF1ZXN0RGVmZXJyZWRT
Y3JpcHQoc2NyaXB0KTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0Jl
UGFyc2VyRXhlY3V0ZWQoKSkgeworICAgICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGluZ0xldmVs
ID09IDEpIHsKKyAgICAgICAgICAgICAgICBtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdC5zZXRFbGVt
ZW50KHNjcmlwdCk7CisgICAgICAgICAgICAgICAgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuc2V0
U3RhcnRpbmdQb3NpdGlvbihzY3JpcHRTdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlwdC0+
dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCks
IHNjcmlwdFN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4
ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgcmVxdWVzdFBhcnNpbmdCbG9ja2luZ1NjcmlwdChzY3JpcHQpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4IGJhYmIxZTcy
YjYzMjA1ZDE3YzM2YTAxMzI5MWUyNDE1MzdmODJlZTAuLjdkMjU1ZjkwMjhlYzFlYzkyOGYxODRi
ZjUwYjBiMDExYWQ0ZmE1ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3Jp
cHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5j
cHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICAvLyBIYW5kbGUg
ZHluYW1pYyB1cGRhdGVzIG9mIHRoZSAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcgYXR0cmli
dXRlLiBPbmx5IHBvc3NpYmxlIGNhc2U6IGNoYW5naW5nIGZyb20gJ3RydWUnIHRvICdmYWxzZScK
ICAgICAgICAgLy8gY2F1c2VzIGFuIGltbWVkaWF0ZSBkaXNwYXRjaCBvZiB0aGUgU1ZHTG9hZCBl
dmVudC4gSWYgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB3YXMgJ2ZhbHNlJyBiZWZvcmUgaW5zZXJ0aW5n
IHRoZSBzY3JpcHQgZWxlbWVudAogICAgICAgICAvLyBpbiB0aGUgZG9jdW1lbnQsIHRoZSBTVkdM
b2FkIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gZGlzcGF0Y2hlZC4KLSAgICAgICAgaWYgKCFleHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKCkgJiYgIWhhdmVGaXJlZExvYWRFdmVudCgp
ICYmICF3YXNJbnNlcnRlZEJ5UGFyc2VyKCkpIHsKKyAgICAgICAgaWYgKCFleHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkQmFzZVZhbHVlKCkgJiYgIWhhdmVGaXJlZExvYWRFdmVudCgpICYmICFpc1Bh
cnNlckluc2VydGVkKCkpIHsKICAgICAgICAgICAgIHNldEhhdmVGaXJlZExvYWRFdmVudCh0cnVl
KTsKICAgICAgICAgICAgIEFTU0VSVChoYXZlTG9hZGVkUmVxdWlyZWRSZXNvdXJjZXMoKSk7CiAK
QEAgLTExMSw5ICsxMTEsOSBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcCgpCiB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0Rv
Y3VtZW50KCkKIHsKICAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAg
IFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KHNvdXJjZUF0dHJpYnV0ZVZhbHVl
KCkpOworICAgIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAKLSAgICBp
ZiAod2FzSW5zZXJ0ZWRCeVBhcnNlcigpKQorICAgIGlmIChpc1BhcnNlckluc2VydGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIEV2ZW50dWFsbHkgc2VuZCBTVkdMb2FkIGV2ZW50IG5v
dyBmb3IgdGhlIGR5bmFtaWNhbGx5IGluc2VydGVkIHNjcmlwdCBlbGVtZW50CkBAIC0xNDIsNyAr
MTQyLDYgQEAgYm9vbCBTVkdTY3JpcHRFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpIGNvbnN0CiAKIHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxk
cmVuKCkKIHsKLSAgICBTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oc291cmNl
QXR0cmlidXRlVmFsdWUoKSk7CiAgICAgU1ZHRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVu
KCk7CiAKICAgICAvLyBBIFNWR0xvYWQgZXZlbnQgaGFzIGJlZW4gZmlyZWQgYnkgU1ZHRWxlbWVu
dDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuLgpAQCAtMjEyLDExICsyMTEsMTYgQEAgYm9vbCBTVkdT
Y3JpcHRFbGVtZW50OjpkZWZlckF0dHJpYnV0ZVZhbHVlKCkgY29uc3QKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK2Jvb2wgU1ZHU2NyaXB0RWxlbWVudDo6aGFzU291cmNlQXR0cmlidXRlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzQXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKK30K
Kwogdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVudCgpCiB7CiAgICAgYm9v
bCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkID0gZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEJh
c2VWYWx1ZSgpOwogCi0gICAgaWYgKHdhc0luc2VydGVkQnlQYXJzZXIoKSkKKyAgICBpZiAoaXNQ
YXJzZXJJbnNlcnRlZCgpKQogICAgICAgICBBU1NFUlQoZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZCAhPSBoYXZlRmlyZWRMb2FkRXZlbnQoKSk7CiAgICAgZWxzZSBpZiAoaGF2ZUZpcmVkTG9hZEV2
ZW50KCkpIHsKICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmaXJlZCBhbiBsb2FkIGV2ZW50
IGFuZCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIGlzIHNldCB0byAndHJ1ZScKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCmluZGV4IGRhYmVjNzk2ZGQ1YWEwMDUzMmI4OTk2NGMw
NmEzOGVhM2IyN2MwN2QuLmM1MmRhY2ZjOGJjNzkxMTk1NGU5YmZmYzNlZTFkYzcwMTE5MTUyNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaApAQCAtNjgsNiArNjgsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGV2ZW50QXR0cmlidXRlVmFsdWUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBkZWZlckF0dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhh
c1NvdXJjZUF0dHJpYnV0ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTG9h
ZEV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82839</attachid>
            <date>2011-02-17 12:01:08 -0800</date>
            <delta_ts>2011-02-17 12:12:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54676-20110217120107.patch</filename>
            <type>text/plain</type>
            <size>52382</size>
            <attacher name="James Simonsen">simonjam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1OTI3YzVlMDVkMjIwODg4MWQ5YTYxYmY0YWMwYmE0ZjgxOTZjYmI2Li5iODQ0NjQx
MGQ5MDI4YTE5ZGE2YTgyM2Y0OWQ3ZWIwM2VkZjkyZWJiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAK
KzIwMTEtMDItMTYgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgU2NyaXB0
RWxlbWVudCBtYXRjaCB0aGUgSFRNTDUgc3BlYworCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB0
aGUgInByZXBhcmUgYSBzY3JpcHQiIHNlY3Rpb24gb2YgdGhlIEhUTUw1IHNwZWMgaW4gU2NyaXB0
RWxlbWVudDo6cHJlcGFyZVNjcmlwdCgpLgorICAgICAgICBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI3By
ZXBhcmUtYS1zY3JpcHQKKworICAgICAgICBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIG1p
c3NpbmcgZnJvbSB0aGUgc3BlYyB0aGF0IHdvdWxkIGJlIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGVz
ZSB3aWxsIGJlIGFkZGVkIGxhdGVyLgorICAgICAgICAtIFN1cHBvcnQgZm9yIGFzeW5jPWZhbHNl
CisgICAgICAgIC0gRW1wdHkgc3JjIGF0dHJpYnV0ZSBzaG91bGQgZGlzcGF0Y2ggYW4gZXJyb3Iu
CisKKyAgICAgICAgVGhlcmUgYXJlIGEgY291cGxlIG9mIHNsaWdodCBiZWhhdmlvcmFsIGNoYW5n
ZXMgdG8gbWF0Y2ggdGhlIHNwZWMuCisgICAgICAgIC0gQSBzY3JpcHQgd2l0aCBhbiBlbXB0eSBz
cmMgYXR0cmlidXRlIGFuZCBubyBib2R5IHdpbGwgbm8gbG9uZ2VyIHRyeSB0byBleGVjdXRlIHRo
ZSAnPCcgb2YgPC9zY3JpcHQ+LgorICAgICAgICAtIEFuIFhIVE1MIHNjcmlwdCB0aGF0IGlzIGxv
YWRlZCB0aGVuIGNvcGllZCB3aWxsIG5vdCBmaXJlIGxvYWQgb24gdGhlIGNvcHkuCisgICAgICAg
IC0gSWYgb25iZWZvcmVsb2FkIG1vdmVzIHRoZSBzY3JpcHQgdG8gYSBkaWZmZXJlbnQgZG9jdW1l
bnQsIHRoZW4gaXQgd2lsbCBub3QgdHJ5IHRvIGV4ZWN1dGUgYWdhaW4gYmVjYXVzZSB3YXNBbHJl
YWR5U3RhcnRlZCBpcyB0cnVlLgorCisgICAgICAgIFRoZSBwYXJzZXJzIHdlcmUgdXBkYXRlZCB0
byB1c2UgdGhlIG5ldyBBUEksIGJ1dCBub3QgcmV3cml0dGVuIHRvIGxvb2sgbGlrZSB0aGUgc3Bl
Yy4gVGhhdCB3aWxsIGJlIGRvbmUgc2VwYXJhdGVseS4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ2NzYKKworICAgICAgICAqIGZhc3QvZG9tL0hU
TUxTY3JpcHRFbGVtZW50L21vdmUtaW4tYmVmb3JlbG9hZC5odG1sOiBPcmlnaW5hbCBhdXRob3Ig
c2F5cyB0ZXN0IHdhcyBvbmx5IG1lYW50IHRvIGNoZWNrIGZvciBjcmFzaGVzLiBCZWZvcmVsb2Fk
IGlzIG5vdCBzcGVjaWZpZWQgYnkgSFRNTDUuIFRlc3Qgd2FzIG1vZGlmaWVkIHRvIGFzc3VtZSBt
b3ZlZCBzY3JpcHQgd291bGRuJ3QgZXhlY3V0ZSBiZWNhdXNlIHdhc0FscmVhZHlTdGFydGVkIGlz
IHNldC4KKyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQtY2xvbmUtcmVydW4tc3JjLnhodG1sOiBB
Y2NvcmRpbmcgdG8gSFRNTDUgc3BlYywgbG9hZCBzaG91bGQgb25seSBmaXJlIGFmdGVyIGEgc2Ny
aXB0IGV4ZWN1dGVzLiBUZXN0IHdhcyBtb2RpZmllZCB0byBtYXRjaCB0aGF0LiBUaGUgb2xkIGJy
b2tlbiBiZWhhdmlvciB3YXMgdGhhdCBsb2FkIGZpcmVkIG9uIHRoZSBjbG9uZWQgZWxlbWVudCwg
ZXZlbiB0aG91Z2ggaXQgZGlkbid0IGV4ZWN1dGUuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0tbWFjL2Zhc3QvdG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQ6IEFjY29yZGluZyB0byBIVE1M
NSwgYSBzY3JpcHQgd2l0aCBzcmMgc2V0LCBidXQgZW1wdHksIHNob3VsZCBub3QgZXhlY3V0ZS4g
VGhlIG9sZCBicm9rZW4gYmVoYXZpb3Igd2FzIHRoYXQgdGhlICc8JyBmcm9tIDwvc2NyaXB0PiB3
YXMgZXhlY3V0ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0tbWFjL2Zhc3QvdG9rZW5p
emVyL2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4dDogRGl0dG8u
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0tbWFjL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9l
eHRyYV9jbG9zZS1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtLXdpbi9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0OiBEaXR0by4KKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS13aW4vZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRv
Y3VtZW50LXdyaXRlXzItZXhwZWN0ZWQudHh0OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS13aW4vZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4
dDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zhc3QvdG9rZW5pemVyLzAwMi1leHBl
Y3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9mYXN0L3Rva2VuaXplci9l
eHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGVfMi1leHBlY3RlZC50eHQ6IERpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9mYXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhw
ZWN0ZWQudHh0OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC90b2tlbml6ZXIv
MDAyLWV4cGVjdGVkLnR4dDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvdG9r
ZW5pemVyL2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4dDogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9j
bG9zZS1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvdG9r
ZW5pemVyLzAwMi1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zh
c3QvdG9rZW5pemVyL2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4
dDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4
dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dDogRGl0dG8uCisKIDIwMTEtMDItMTcgIFBoaWxpcHBlIE5v
cm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJlYmFz
ZWxpbmUgR1RLIHRlc3QgcmVzdWx0cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0hUTUxTY3JpcHRFbGVtZW50L21vdmUtaW4tYmVmb3JlbG9hZC5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vSFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZvcmVsb2FkLmh0bWwKaW5kZXgg
NzdiZWVkMDZiMzgyZGY1NDc1M2ZmMWI2NjE5ZGM0ZjcwZjk1OTUxMy4uZDhmODlmM2Q0Y2EyZjI5
YzQzNWVlOWJiMWU1YjU1MzQ5ODVmZTBlMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vSFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZvcmVsb2FkLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vSFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZvcmVsb2FkLmh0bWwK
QEAgLTgsNyArOCw2IEBACiA8aWZyYW1lIHNyYz0icmVzb3VyY2VzL2ZyYW1lLmh0bWwiPjwvaWZy
YW1lPgogPHNjcmlwdD4KIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOwogfQogCkBAIC0xOCwxNCArMTcsNyBAQCBmdW5jdGlvbiB0ZXN0
KCkKICAgICBzLmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZWxvYWQiLCBmdW5jdGlvbigpIHsKICAg
ICAgICAgdmFyIHMgPSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJzY3JpcHQiKVsyXSk7CiAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJpZnJhbWUiKVswXS5jb250ZW50RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChz
KTsKLSAgICB9LCBmYWxzZSk7Ci0gICAgcy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIGZ1bmN0
aW9uKCkgewotICAgICAgICB0ZXN0RmFpbGVkKCJlcnJvciBldmVudCBzaG91bGQgbm90IGZpcmUu
IikKLSAgICB9LCBmYWxzZSk7Ci0gICAgcy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rp
b24oKSB7CiAgICAgICAgIHRlc3RQYXNzZWQoIiIpOwotICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOwogICAgIH0sIGZhbHNlKTsKICAgICBzLnNyYyA9ICJleHRlcm5hbC5qcyI7CiAgICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9zY3JpcHQtY2xvbmUtcmVydW4tc3JjLnhodG1sCmluZGV4IGVkYmU4MjlhYzlhZjM4ZDRkMzA1
MzE2NTJmMWJiMjY4MzgxN2ZlZGQuLmIxZDU5NmEwYjE0YzE1MjY3N2Y1YzIzMzFmZTY2MWM4NDM3
Mzc0ZmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1
bi1zcmMueGh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVu
LXNyYy54aHRtbApAQCAtOSw3ICs5LDYgQEAgdmFyIGkgPSAwOwogCiBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKIH0KIAogdmFyIGZp
cnN0TG9hZCA9IHRydWU7CkBAIC0yNiw4ICsyNSw2IEBAIGZ1bmN0aW9uIGxvYWRlZCgpIHsKICAg
ICBlbHNlIGlmIChpID4gMikKICAgICAgIHJlc3VsdCA9ICdGQUlMOiBzY3JpcHQgcmFuICcgKyBp
ICsgJyB0aW1lcyc7CiAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShyZXN1bHQpKTsKLQotICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKIH0KIAogPC9zY3JpcHQ+CkBAIC00Miw2ICszOSw4IEBAIHZhciBkaXYgPSBzY3JpcHQu
cGFyZW50Tm9kZTsKIGRpdi5yZW1vdmVDaGlsZChzY3JpcHQpOwogZGl2LmFwcGVuZENoaWxkKHNj
cmlwdC5jbG9uZU5vZGUodHJ1ZSkpOwogCitsb2FkZWQoKTsKKwogPC9zY3JpcHQ+CiA8L2JvZHk+
CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMv
ZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtLW1hYy9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0CmluZGV4IGQyYTAzNGNj
ZGFmMGQ3MzlhNjNmMjMxODM5Nzc4M2JhMjRkNGMzMzUuLjRkNmZiNTUxOWRmNjM0NjY2MWExYmJi
NzViZGU1NGJjYTc5NzdmMTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtLW1hYy9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtLW1hYy9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0CkBA
IC0xLDQgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFVuY2F1Z2h0IFN5bnRheEVy
cm9yOiBVbmV4cGVjdGVkIHRva2VuIDwKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICBS
ZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4
NjAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMvZmFzdC90
b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlXzItZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2Zhc3QvdG9rZW5pemVyL2V4dGVybmFs
LXNjcmlwdC1kb2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4dAppbmRleCAzZTZmMTlkNjNiMDE0
NWIyYTMzMWRiMmE5ZGEyNGRjNTZjZDc5NzY4Li5hOWJhODdhMjE1MGE1MmFkZjgzZGE2MzA0MWE0
NTA5NjVjMzNkOWEyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1t
YWMvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlXzItZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy9mYXN0L3Rva2Vu
aXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGVfMi1leHBlY3RlZC50eHQKQEAgLTEs
NCArMSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogVW5jYXVnaHQgU3ludGF4RXJyb3I6
IFVuZXhwZWN0ZWQgdG9rZW4gPAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgIFJlbmRl
clZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy9mYXN0L3Rva2Vu
aXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0tbWFjL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3Rl
ZC50eHQKaW5kZXggZTZlZjQ0NDZmMjcyMDRmNDVkOWZlMTdmYTQ3NGJmMWNlNWM1MWRjYi4uYjc4
NjE5YTJiODk5YzIyYWQ3ZTdkZGFjM2M5OTA1OTRjZWUxY2MyZiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9j
bG9zZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFj
L2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQKQEAgLTEsNCAr
MSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogVW5jYXVnaHQgU3ludGF4RXJyb3I6IFVu
ZXhwZWN0ZWQgdG9rZW4gPAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgIFJlbmRlclZp
ZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9mYXN0L3Rva2VuaXpl
ci8wMDItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zh
c3QvdG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQKaW5kZXggNGUyYjRkOTM1MjViMmQ2ZTZiYWMx
OTk1ZjZmNThjNDdiZjFiYTM4NS4uZjE5YjA1MTVmNGJjOTliMmZkMTVhZTA5ODMyNzEwZGU2YzE5
Yjk2YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3Qv
dG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0td2luL2Zhc3QvdG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQKQEAgLTEsNCArMSwzIEBA
Ci1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogVW5jYXVnaHQgU3ludGF4RXJyb3I6IFVuZXhwZWN0
ZWQgdG9rZW4gPAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgIFJlbmRlclZpZXcgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9mYXN0L3Rva2VuaXplci9leHRl
cm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGVfMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS13aW4vZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3Vt
ZW50LXdyaXRlXzItZXhwZWN0ZWQudHh0CmluZGV4IDRiY2E0MzU1YzUyNTc2Nzg4ZDU0NjkxZTYw
N2FmMzcxMDdhODY0MmIuLjE1ZmMyOWYzNzFiN2Y2MmYwYjZhZmFlMmQ0MDM0YjdmNTgwYmQyMmQg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9mYXN0L3Rva2Vu
aXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGVfMi1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvdG9rZW5pemVyL2V4dGVybmFs
LXNjcmlwdC1kb2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDMgQEAKLUNP
TlNPTEUgTUVTU0FHRTogbGluZSAxOiBVbmNhdWdodCBTeW50YXhFcnJvcjogVW5leHBlY3RlZCB0
b2tlbiA8CiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgUmVuZGVyVmlldyBhdCAoMCww
KSBzaXplIDgwMHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9l
eHRyYV9jbG9zZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13
aW4vZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dAppbmRleCAw
MWUxNzdiNTlmNGZmZjdkZTliYTE5YTYxNjZjMjliMThkMDQ2NDA5Li5kYTAxYjRlNDBlNGU4ZDVj
YjFjYjlmZTI5NDQ0ODQ5NjUxNjJlMDkxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS13aW4vZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vZmFzdC90b2tlbml6
ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDMgQEAKLUNPTlNP
TEUgTUVTU0FHRTogbGluZSAxOiBVbmNhdWdodCBTeW50YXhFcnJvcjogVW5leHBlY3RlZCB0b2tl
biA8CiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgUmVuZGVyVmlldyBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvdG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dApp
bmRleCBmZDQwODIwOTE1MDNiN2I3OTNlZDg4OGRmZGVmYmU0OTYxZWU0NTc2Li42NDc2NjQ5NGUw
MjRmMjBlZjZiMmQ0MjUxOTdmODM5ODI2ZWRlMjczIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dApAQCAtMSw0
ICsxLDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBTeW50YXhFcnJvcjogUGFyc2UgZXJy
b3IKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDApIHNp
emUgODAweDYwMAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3Vt
ZW50LXdyaXRlXzItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3Qv
dG9rZW5pemVyL2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4dApp
bmRleCA2OTAyYTNmMjA0ODhmZjU1MDI5ZDZmNjFmZTBmNDZhMjgzNjM4MGM3Li40ZTNmYzg2NTEy
YjAxODVmMzZlOWRiNzUzZjg2MzljYzFiYzk5Y2JmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRl
XzItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L3Rva2Vu
aXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGVfMi1leHBlY3RlZC50eHQKQEAgLTEs
NCArMSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogU3ludGF4RXJyb3I6IFBhcnNlIGVy
cm9yCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgUmVuZGVyVmlldyBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC90b2tlbml6ZXIvc2Ny
aXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dAppbmRleCAyNDc3ZTEzZTJlZDcxZmQxZTgyMmNi
ZDdiYTRiN2NlNjUyZTUwMGM2Li5jNmUyMDc1ZTI3NWJjNjEyOWMxNTFlMGE4ZjgzM2VjMTI1YTU3
YjAwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC90b2tlbml6ZXIv
c2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dApAQCAt
MSw0ICsxLDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBTeW50YXhFcnJvcjogUGFyc2Ug
ZXJyb3IKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDAp
IHNpemUgODAweDYwMAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0
CmluZGV4IDExYzkwOWEwOTc0Zjg1MGRjM2ZmMDI0YTJiMWEwNzlkNDkwMzY1NTAuLjRkNmZiNTUx
OWRmNjM0NjY2MWExYmJiNzViZGU1NGJjYTc5NzdmMTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0CkBAIC0x
LDQgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFN5bnRheEVycm9yOiBQYXJzZSBl
cnJvcgogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgIFJlbmRlclZpZXcgYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9j
dW1lbnQtd3JpdGVfMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFz
dC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlXzItZXhwZWN0ZWQudHh0
CmluZGV4IDFlNTFkNDlmZDNiYTA1Y2RkNmE0ZmFlYzlmNDUzY2M3MzgyNzA3MDEuLmE5YmE4N2Ey
MTUwYTUyYWRmODNkYTYzMDQxYTQ1MDk2NWMzM2Q5YTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9mYXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3Jp
dGVfMi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvdG9r
ZW5pemVyL2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4dApAQCAt
MSw0ICsxLDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBTeW50YXhFcnJvcjogUGFyc2Ug
ZXJyb3IKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDAp
IHNpemUgODAweDYwMAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3Nl
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3Rva2VuaXplci9z
Y3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0CmluZGV4IGQ0OWE5NzBmNzY4MGJhYzEwMzg2
N2EzYWI4ZjM5NzI2ZWE1YjI5ZGQuLmI3ODYxOWEyYjg5OWMyMmFkN2U3ZGRhYzNjOTkwNTk0Y2Vl
MWNjMmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3Rva2VuaXpl
ci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9mYXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0CkBA
IC0xLDQgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFN5bnRheEVycm9yOiBQYXJz
ZSBlcnJvcgogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgIFJlbmRlclZpZXcgYXQgKDAs
MCkgc2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvdG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0
CmluZGV4IGRhNzQzNTNhZDVhYjc4YjU5M2I0MjdmMDIxOTc3YjZmZmZkNGEyNWQuLjczNmU3Mjcz
MzZkN2E3NjMyNTE2ZGYyMjI1MmNjMzBiZmExNjlmY2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L2Zhc3QvdG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dApAQCAtMSw0
ICsxLDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBTeW50YXhFcnJvcjogUGFyc2UgZXJy
b3IKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDApIHNp
emUgODAweDYwMAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1l
bnQtd3JpdGVfMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L3Rv
a2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGVfMi1leHBlY3RlZC50eHQKaW5k
ZXggYjY5ZWJjMzk5NTJhYzI3NGNlNDZmNTAyZTNlZjI2ODY5Yzg0YTk0ZC4uZjkxZjUxNjNhMzNj
ZTIxZDkwY2UzNDQwZTY5MWQ3ODgzYTExNDgxZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlXzIt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvdG9rZW5pemVy
L2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZV8yLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsx
LDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBTeW50YXhFcnJvcjogUGFyc2UgZXJyb3IK
IGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUg
ODAweDYwMAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4
dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dAppbmRleCA4M2M0MzY3NDc3NWU3NDg0ZWE4NDI3OTZiNjA0
NDc1OWIxNzQxNzAyLi41ZDE2OTU5YWUwMzkxMmRiNjI4Y2Y0ZWFhYjM3ODdkZjIxMjg1MzU3IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L3Rva2VuaXplci9zY3JpcHRf
ZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zh
c3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQKQEAgLTEsNCArMSwz
IEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogU3ludGF4RXJyb3I6IFBhcnNlIGVycm9yCiBs
YXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRlN2I5ZTAy
ODkyOGQ4YmRjOTk4ZjNhMmM3ZTNhMjcxZjM1YjNmNjAuLmI3MTQ2NDc4NGViZmRlMzFiZjVkZjNk
YjVlZmMyMDA1YzlkY2FiOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OCBAQAorMjAxMS0wMi0x
NiAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBTY3JpcHRFbGVtZW50IG1h
dGNoIHRoZSBIVE1MNSBzcGVjCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIHRoZSAicHJlcGFy
ZSBhIHNjcmlwdCIgc2VjdGlvbiBvZiB0aGUgSFRNTDUgc3BlYyBpbiBTY3JpcHRFbGVtZW50Ojpw
cmVwYXJlU2NyaXB0KCkuCisgICAgICAgIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWIt
YXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3NjcmlwdGluZy0xLmh0bWwjcHJlcGFyZS1hLXNj
cmlwdAorCisgICAgICAgIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiB0aGluZ3MgbWlzc2luZyBmcm9t
IHRoZSBzcGVjIHRoYXQgd291bGQgYmUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoZXNlIHdpbGwgYmUg
YWRkZWQgbGF0ZXIuCisgICAgICAgIC0gU3VwcG9ydCBmb3IgYXN5bmM9ZmFsc2UKKyAgICAgICAg
LSBFbXB0eSBzcmMgYXR0cmlidXRlIHNob3VsZCBkaXNwYXRjaCBhbiBlcnJvci4KKworICAgICAg
ICBUaGVyZSBhcmUgYSBjb3VwbGUgb2Ygc2xpZ2h0IGJlaGF2aW9yYWwgY2hhbmdlcyB0byBtYXRj
aCB0aGUgc3BlYy4KKyAgICAgICAgLSBBIHNjcmlwdCB3aXRoIGFuIGVtcHR5IHNyYyBhdHRyaWJ1
dGUgYW5kIG5vIGJvZHkgd2lsbCBubyBsb25nZXIgdHJ5IHRvIGV4ZWN1dGUgdGhlICc8JyBvZiA8
L3NjcmlwdD4uCisgICAgICAgIC0gQW4gWEhUTUwgc2NyaXB0IHRoYXQgaXMgbG9hZGVkIHRoZW4g
Y29waWVkIHdpbGwgbm90IGZpcmUgbG9hZCBvbiB0aGUgY29weS4KKyAgICAgICAgLSBJZiBvbmJl
Zm9yZWxvYWQgbW92ZXMgdGhlIHNjcmlwdCB0byBhIGRpZmZlcmVudCBkb2N1bWVudCwgdGhlbiBp
dCB3aWxsIG5vdCB0cnkgdG8gZXhlY3V0ZSBhZ2FpbiBiZWNhdXNlIHdhc0FscmVhZHlTdGFydGVk
IGlzIHRydWUuCisKKyAgICAgICAgVGhlIHBhcnNlcnMgd2VyZSB1cGRhdGVkIHRvIHVzZSB0aGUg
bmV3IEFQSSwgYnV0IG5vdCByZXdyaXR0ZW4gdG8gbG9vayBsaWtlIHRoZSBzcGVjLiBUaGF0IHdp
bGwgYmUgZG9uZSBzZXBhcmF0ZWx5LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NDY3NgorCisgICAgICAgIFRlc3Q6IEFsbCBleGlzdGluZyB0ZXN0
cy4KKworICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50LmNwcDogUmV3cml0dGVuIHRvIG1hdGNo
IEhUTUw1IHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpTY3JpcHRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KTogTG9naWMgbW92ZWQgdG8gcHJlcGFyZVNjcmlwdC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6IExvZ2ljIG1vdmVkIHRvIHByZXBhcmVTY3Jp
cHQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1
dGUpOiBMb2dpYyBtb3ZlZCB0byBwcmVwYXJlU2NyaXB0LgorICAgICAgICAoV2ViQ29yZTo6aXNM
ZWdhY3lTdXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZ2UpOiBBZGRlZCB0byBzdXBwb3J0IG9sZCBz
Y3JpcHQgdHlwZXMgaW4gbGF5b3V0IHRlc3RzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxl
bWVudDo6aXNTY3JpcHRUeXBlU3VwcG9ydGVkKTogRGVyaXZlZCBmcm9tIG9sZCBzaG91bGRFeGVj
dXRlQXNKYXZhU2NyaXB0KCkuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpwcmVw
YXJlU2NyaXB0KTogU1RBUlQgSEVSRS4gTWFpbiBjaGFuZ2UuIFNob3VsZCByZWFkIGV4YWN0bHkg
bGlrZSBIVE1MNSdzICJwcmVwYXJlIGEgc2NyaXB0LiIgTGVnYWN5IHR5cGUgc3VwcG9ydCBuZWVk
ZWQgZm9yIGxheW91dCB0ZXN0cyB1c2luZyBYTUwgcGFyc2VyLgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RWxlbWVudDo6cmVxdWVzdFNjcmlwdCk6IE1vc3QgbG9naWMgbW92ZWQgdG8gcHJlcGFy
ZVNjcmlwdC4gQ2hlY2sgc2VjdXJpdHkgc2V0dGluZ3MgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQpOiBDb21iaW5lZCBldmFsdWF0ZVNjcmlwdCgp
IGFuZCBleGVjdXRlU2NyaXB0KCkgZnJvbSBvbGQgY29kZS4gTG9naWMgbW92ZWQgdG8gcHJlcGFy
ZVNjcmlwdC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnN0b3BMb2FkUmVxdWVz
dCk6IElnbm9yZSBwYXJzZXIgZXhlY3V0ZWQgc2NyaXB0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEVsZW1lbnQ6OmV4ZWN1dGUpOiBSZW5hbWVkIGV4ZWN1dGVTY3JpcHQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojpub3RpZnlGaW5pc2hlZCk6IFdlIHNob3VsZCBvbmx5IGxp
c3RlbiBmb3Igbm9uLXBhcnNlciBleGVjdXRlZCBzY3JpcHRzLgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RWxlbWVudDo6aWdub3Jlc0xvYWRSZXF1ZXN0KTogTmV3IHZhcmlhYmxlIG5hbWVzLgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5BcmVDb21tZW50c09yRW1w
dHlUZXh0KTogQWRkZWQgZm9yIEhUTUw1IGNvbXBsaWFuY2UuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRFbGVtZW50OjpzY3JpcHRDaGFyc2V0KTogVXNlIEhUTUw1IHZhcmlhYmxlcy4KKyAgICAg
ICAgKiBkb20vU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVu
dDo6d2lsbEJlUGFyc2VyRXhlY3V0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dEVsZW1lbnQ6OnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRFbGVtZW50Ojp3aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2lu
Zyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6Y2FjaGVkU2NyaXB0
KTogcHJlcGFyZVNjcmlwdCgpIGlzIHRoZSBvbmx5IHBsYWNlIHRoYXQgc2hvdWxkIGxvYWQgc2Ny
aXB0cy4gVGhpcyBhY2Nlc3NvciBsZXRzIHRoZSBwYXJzZXJzIGxpc3RlbiBmb3Igd2hlbiBsb2Fk
cyBmaW5pc2guCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojppc1BhcnNlckluc2Vy
dGVkKTogQWRkZWQuCisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKTogU2hv
dWxkIGJlaGF2ZSB0aGUgc2FtZS4gT2ZmbG9hZHMgbXVjaCBvZiBpdHMgd29yayB0byBwcmVwYXJl
U2NyaXB0KCkuCisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCk6IElkZW50aWNh
bCB0byBsaWJ4bWwyIGNoYW5nZXMuCisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9j
dW1lbnQpOiBObyBsb25nZXIgbmVlZHMgdXJsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlw
dEVsZW1lbnQ6Omhhc1NvdXJjZUF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRN
TFNjcmlwdEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5n
U2NyaXB0KTogUmVxdWVzdGluZyBzY3JpcHRzIG9mZmxvYWRlZCB0byBTY3JpcHRFbGVtZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KTogU2hvdWxkIGJl
aGF2ZSB0aGUgc2FtZS4gT2ZmbG9hZHMgbXVjaCBvZiBpdHMgd29yayB0byBwcmVwYXJlU2NyaXB0
KCkuCisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU2NyaXB0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6IE5ldyBTY3JpcHRFbGVt
ZW50IGZ1bmN0aW9uIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBObyBsb25nZXIgbmVlZHMgdXJsLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKTogU2NyaXB0RWxl
bWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuIGlzIGdvbmUuCisgICAgICAgIChXZWJDb3JlOjpT
VkdTY3JpcHRFbGVtZW50OjpoYXNTb3VyY2VBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoTG9hZEV2ZW50KTogTmV3IFNjcmlwdEVs
ZW1lbnQgZnVuY3Rpb24gbmFtZXMuCisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaDoK
KwogMjAxMS0wMi0xNyAgSHVpIEh1YW5nICA8aHVpLjIuaHVhbmdAbm9raWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IExhc3psbyBHb21ib3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVu
dC5jcHAKaW5kZXggMTkzOWEwODBkZmM4ODM2OWYwMmZmZjc2Y2U2ODNiYzU2YmEzODUyYi4uNmJk
NzFjMDdlYmE2MDQzNWE4NmYxOTIxMmVjYjAxYjUyZGMwMDFiNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFbGVtZW50LmNwcApAQCAtNTEsMTMgKzUxLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotU2NyaXB0RWxlbWVudDo6U2NyaXB0RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBib29s
IHdhc0luc2VydGVkQnlQYXJzZXIsIGJvb2wgd2FzQWxyZWFkeVN0YXJ0ZWQpCitTY3JpcHRFbGVt
ZW50OjpTY3JpcHRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgcGFyc2VySW5zZXJ0ZWQs
IGJvb2wgd2FzQWxyZWFkeVN0YXJ0ZWQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAs
IG1fY2FjaGVkU2NyaXB0KDApCi0gICAgLCBtX3dhc0luc2VydGVkQnlQYXJzZXIod2FzSW5zZXJ0
ZWRCeVBhcnNlcikKKyAgICAsIG1fcGFyc2VySW5zZXJ0ZWQocGFyc2VySW5zZXJ0ZWQpCisgICAg
LCBtX3dhc1BhcnNlckluc2VydGVkKGZhbHNlKQogICAgICwgbV9pc0V4dGVybmFsU2NyaXB0KGZh
bHNlKQogICAgICwgbV93YXNBbHJlYWR5U3RhcnRlZCh3YXNBbHJlYWR5U3RhcnRlZCkKICAgICAs
IG1faGF2ZUZpcmVkTG9hZChmYWxzZSkKKyAgICAsIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQoZmFs
c2UpCisgICAgLCBtX3JlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKGZhbHNlKQorICAgICwgbV93aWxs
RXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZyhmYWxzZSkKIHsKICAgICBBU1NFUlQo
bV9lbGVtZW50KTsKIH0KQEAgLTY3LDIyICs3MSwxMCBAQCBTY3JpcHRFbGVtZW50Ojp+U2NyaXB0
RWxlbWVudCgpCiAgICAgc3RvcExvYWRSZXF1ZXN0KCk7CiB9CiAKLXZvaWQgU2NyaXB0RWxlbWVu
dDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCit2b2lkIFNj
cmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKLSAgICBpZiAod2FzSW5zZXJ0
ZWRCeVBhcnNlcigpICYmICFpc0FzeW5jaHJvbm91cygpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNz
Y3JpcHQKLQotICAgIGlmICghc291cmNlVXJsLmlzRW1wdHkoKSkgewotICAgICAgICByZXF1ZXN0
U2NyaXB0KHNvdXJjZVVybCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0
aGVyZSdzIGFuIGVtcHR5IHNjcmlwdCBub2RlLCB3ZSBzaG91bGRuJ3QgZXZhbHVhdGUgdGhlIHNj
cmlwdAotICAgIC8vIGJlY2F1c2UgaWYgYSBzY3JpcHQgaXMgaW5zZXJ0ZWQgYWZ0ZXJ3YXJkcyAo
Ynkgc2V0dGluZyB0ZXh0IG9yIGlubmVyVGV4dCkKLSAgICAvLyBpdCBzaG91bGQgYmUgZXZhbHVh
dGVkLCBhbmQgZXZhbHVhdGVTY3JpcHQgb25seSBldmFsdWF0ZXMgYSBzY3JpcHQgb25jZS4KLSAg
ICBldmFsdWF0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdENvbnRlbnQoKSwgZWxlbWVu
dCgpLT5kb2N1bWVudCgpLT51cmwoKSkpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRp
bmcgbGluZSBudW1iZXIgaGVyZS4KKyAgICBpZiAoIW1fcGFyc2VySW5zZXJ0ZWQpCisgICAgICAg
IHByZXBhcmVTY3JpcHQoKTsgLy8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUg
bnVtYmVyIGhlcmUuCiB9CiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVu
dCgpCkBAIC05MywyMiArODUsOCBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9j
dW1lbnQoKQogCiB2b2lkIFNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCiB7Ci0gICAg
aWYgKHdhc0luc2VydGVkQnlQYXJzZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYg
YSBub2RlIGlzIGluc2VydGVkIGFzIGEgY2hpbGQgb2YgdGhlIHNjcmlwdCBlbGVtZW50Ci0gICAg
Ly8gYW5kIHRoZSBzY3JpcHQgZWxlbWVudCBoYXMgYmVlbiBpbnNlcnRlZCBpbiB0aGUgZG9jdW1l
bnQKLSAgICAvLyB3ZSBldmFsdWF0ZSB0aGUgc2NyaXB0LgotICAgIGlmIChtX2VsZW1lbnQtPmlu
RG9jdW1lbnQoKSAmJiBtX2VsZW1lbnQtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgZXZhbHVhdGVT
Y3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRDb250ZW50KCksIG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+dXJsKCkpKTsgLy8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVt
YmVyIGhlcmUKLX0KLQotdm9pZCBTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4o
Y29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCi17Ci0gICAgLy8gVGhlIHBhcnNlciBqdXN0IHJlYWNo
ZWQgPC9zY3JpcHQ+LiBJZiB3ZSBoYXZlIG5vIHNyYyBhbmQgbm8gdGV4dCwKLSAgICAvLyBhbGxv
dyBkeW5hbWljIGxvYWRpbmcgbGF0ZXIuCi0gICAgaWYgKHNvdXJjZVVybC5pc0VtcHR5KCkgJiYg
c2NyaXB0Q29udGVudCgpLmlzRW1wdHkoKSkKLSAgICAgICAgbV93YXNJbnNlcnRlZEJ5UGFyc2Vy
ID0gZmFsc2U7CisgICAgaWYgKCFtX3BhcnNlckluc2VydGVkICYmIG1fZWxlbWVudC0+aW5Eb2N1
bWVudCgpKQorICAgICAgICBwcmVwYXJlU2NyaXB0KCk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVh
bCBzdGFydGluZyBsaW5lIG51bWJlciBoZXJlLgogfQogCiB2b2lkIFNjcmlwdEVsZW1lbnQ6Omhh
bmRsZVNvdXJjZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVybCkKQEAgLTExNiwxMiAr
OTQsMjEgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3Qg
U3RyaW5nJiBzb3VyY2VVcmwpCiAgICAgaWYgKGlnbm9yZXNMb2FkUmVxdWVzdCgpIHx8IHNvdXJj
ZVVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlcXVlc3RTY3JpcHQoc291
cmNlVXJsKTsKKyAgICBwcmVwYXJlU2NyaXB0KCk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVhbCBz
dGFydGluZyBsaW5lIG51bWJlciBoZXJlLgogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb24KLXN0YXRp
YyBib29sIGlzU3VwcG9ydGVkSmF2YVNjcmlwdExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZ3Vh
Z2UpCitzdGF0aWMgYm9vbCBpc0xlZ2FjeVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZShjb25z
dCBTdHJpbmcmIGxhbmd1YWdlKQogeworICAgIC8qCisgICAgICAgICBNb3ppbGxhIDEuOCBhY2Nl
cHRzIGphdmFzY3JpcHQxLjAgLSBqYXZhc2NyaXB0MS43LCBidXQgV2luSUUgNyBhY2NlcHRzIG9u
bHkgamF2YXNjcmlwdDEuMSAtIGphdmFzY3JpcHQxLjMuCisgICAgICAgICBNb3ppbGxhIDEuOCBh
bmQgV2luSUUgNyBib3RoIGFjY2VwdCBqYXZhc2NyaXB0IGFuZCBsaXZlc2NyaXB0LgorICAgICAg
ICAgV2luSUUgNyBhY2NlcHRzIGVjbWFzY3JpcHQgYW5kIGpzY3JpcHQsIGJ1dCBNb3ppbGxhIDEu
OCBkb2Vzbid0LgorICAgICAgICAgTmVpdGhlciBNb3ppbGxhIDEuOCBub3IgV2luSUUgNyBhY2Nl
cHQgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICAgV2Ugd2FudCB0byBh
Y2NlcHQgYWxsIHRoZSB2YWx1ZXMgdGhhdCBlaXRoZXIgb2YgdGhlc2UgYnJvd3NlcnMgYWNjZXB0
LCBidXQgbm90IG90aGVyIHZhbHVlcy4KKworICAgICAgICAgRklYTUU6IFRoaXMgZnVuY3Rpb24g
aXMgbm90IEhUTUw1IGNvbXBsaWFudC4gVGhlc2UgYmVsb25nIGluIHRoZSBNSU1FIHJlZ2lzdHJ5
IGFzICJ0ZXh0L2phdmFzY3JpcHQ8dmVyc2lvbj4iIGVudHJpZXMuCisgICAgICovCiAgICAgdHlw
ZWRlZiBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBMYW5ndWFnZVNldDsKICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKExhbmd1YWdlU2V0LCBsYW5ndWFnZXMsICgpKTsKICAgICBpZiAo
bGFuZ3VhZ2VzLmlzRW1wdHkoKSkgewpAQCAtMTM3LDU4ICsxMjQsMTM1IEBAIHN0YXRpYyBib29s
IGlzU3VwcG9ydGVkSmF2YVNjcmlwdExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpCiAg
ICAgICAgIGxhbmd1YWdlcy5hZGQoImphdmFzY3JpcHQxLjciKTsKICAgICAgICAgbGFuZ3VhZ2Vz
LmFkZCgibGl2ZXNjcmlwdCIpOwogICAgICAgICBsYW5ndWFnZXMuYWRkKCJlY21hc2NyaXB0Iik7
Ci0gICAgICAgIGxhbmd1YWdlcy5hZGQoImpzY3JpcHQiKTsgICAgICAgICAgICAgICAgCisgICAg
ICAgIGxhbmd1YWdlcy5hZGQoImpzY3JpcHQiKTsKICAgICB9CiAKICAgICByZXR1cm4gbGFuZ3Vh
Z2VzLmNvbnRhaW5zKGxhbmd1YWdlKTsKIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50OjpyZXF1ZXN0
U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQorYm9vbCBTY3JpcHRFbGVtZW50Ojppc1Nj
cmlwdFR5cGVTdXBwb3J0ZWQoTGVnYWN5VHlwZVN1cHBvcnQgc3VwcG9ydExlZ2FjeVR5cGVzKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlJ2QgbGlrZSB0byBldmFsdWF0ZSBz
Y3JpcHRzIHdoaWNoIGFyZSBpbnNlcnRlZCBpbnRvIGEgCisgICAgU3RyaW5nIHR5cGU7CisgICAg
U3RyaW5nIGxlZ2FjeVR5cGU7CisgICAgaWYgKHR5cGVBdHRyaWJ1dGVWYWx1ZSgpLmlzRW1wdHko
KSAmJiBsYW5ndWFnZUF0dHJpYnV0ZVZhbHVlKCkuaXNFbXB0eSgpKQorICAgICAgICB0eXBlID0g
InRleHQvamF2YXNjcmlwdCI7CisgICAgZWxzZSBpZiAoIXR5cGVBdHRyaWJ1dGVWYWx1ZSgpLmlz
RW1wdHkoKSkgeworICAgICAgICB0eXBlID0gdHlwZUF0dHJpYnV0ZVZhbHVlKCkuc3RyaXBXaGl0
ZVNwYWNlKCkubG93ZXIoKTsKKyAgICAgICAgaWYgKHN1cHBvcnRMZWdhY3lUeXBlcyA9PSBBbGxv
d0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpCisgICAgICAgICAgICBsZWdhY3lUeXBlID0gdHlw
ZUF0dHJpYnV0ZVZhbHVlKCk7CisgICAgfSBlbHNlIGlmICghbGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1
ZSgpLmlzRW1wdHkoKSkgeworICAgICAgICB0eXBlID0gInRleHQvIiArIGxhbmd1YWdlQXR0cmli
dXRlVmFsdWUoKS5sb3dlcigpOworICAgICAgICBsZWdhY3lUeXBlID0gbGFuZ3VhZ2VBdHRyaWJ1
dGVWYWx1ZSgpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKwor
ICAgIC8vIEZJWE1FOiBpc0xlZ2FjeVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZSgpIGlzIG5v
dCB2YWxpZCBIVE1MNS4gSXQgaXMgdXNlZCBoZXJlIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21w
YXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgbGF5b3V0IHRlc3RzLgorICAgIHJldHVybiBNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZSh0eXBlKSB8fCAoIWxlZ2Fj
eVR5cGUuaXNFbXB0eSgpICYmIGlzTGVnYWN5U3VwcG9ydGVkSmF2YVNjcmlwdExhbmd1YWdlKGxl
Z2FjeVR5cGUpKTsKK30KKworLy8gaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmll
dy5odG1sI3ByZXBhcmUtYS1zY3JpcHQKK2Jvb2wgU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlw
dChjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBMZWdhY3lUeXBlU3Vw
cG9ydCBzdXBwb3J0TGVnYWN5VHlwZXMpCit7CisgICAgaWYgKHdhc0FscmVhZHlTdGFydGVkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3BhcnNlckluc2VydGVkKSB7Cisg
ICAgICAgIG1fd2FzUGFyc2VySW5zZXJ0ZWQgPSB0cnVlOworICAgICAgICBtX3BhcnNlckluc2Vy
dGVkID0gZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIG1fd2FzUGFyc2VySW5zZXJ0ZWQgPSBm
YWxzZTsKKworICAgIGlmICghaGFzU291cmNlQXR0cmlidXRlKCkgJiYgY2hpbGRyZW5BcmVDb21t
ZW50c09yRW1wdHlUZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9l
bGVtZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
aXNTY3JpcHRUeXBlU3VwcG9ydGVkKHN1cHBvcnRMZWdhY3lUeXBlcykpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChtX3dhc1BhcnNlckluc2VydGVkKQorICAgICAgICBtX3BhcnNl
ckluc2VydGVkID0gdHJ1ZTsKKworICAgIG1fd2FzQWxyZWFkeVN0YXJ0ZWQgPSB0cnVlOworCisg
ICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2UnZCBsaWtlIHRvIGV2YWx1YXRlIHNjcmlwdHMgd2hp
Y2ggYXJlIGluc2VydGVkIGludG8gYQogICAgIC8vIHZpZXdsZXNzIGRvY3VtZW50IGJ1dCB0aGlz
J2xsIGRvIGZvciBub3cuCiAgICAgLy8gU2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU3MjcKICAgICBpZiAoIW1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fZWxl
bWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRzKEFi
b3V0VG9FeGVjdXRlU2NyaXB0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5n
IGV2ZW50QXR0cmlidXRlID0gZXZlbnRBdHRyaWJ1dGVWYWx1ZSgpOworICAgIFN0cmluZyBmb3JB
dHRyaWJ1dGUgPSBmb3JBdHRyaWJ1dGVWYWx1ZSgpOworICAgIGlmICghZXZlbnRBdHRyaWJ1dGUu
aXNFbXB0eSgpICYmICFmb3JBdHRyaWJ1dGUuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvckF0dHJp
YnV0ZSA9IGZvckF0dHJpYnV0ZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgaWYgKCFlcXVh
bElnbm9yaW5nQ2FzZShmb3JBdHRyaWJ1dGUsICJ3aW5kb3ciKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBldmVudEF0dHJpYnV0ZSA9IGV2ZW50QXR0cmlidXRlLnN0cmlw
V2hpdGVTcGFjZSgpOworICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGV2ZW50QXR0cmli
dXRlLCAib25sb2FkIikgJiYgIWVxdWFsSWdub3JpbmdDYXNlKGV2ZW50QXR0cmlidXRlLCAib25s
b2FkKCkiKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWNo
YXJzZXRBdHRyaWJ1dGVWYWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jaGFyYWN0ZXJFbmNv
ZGluZyA9IGNoYXJzZXRBdHRyaWJ1dGVWYWx1ZSgpOworICAgIGVsc2UKKyAgICAgICAgbV9mYWxs
YmFja0NoYXJhY3RlckVuY29kaW5nID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jaGFyc2V0KCk7
CisKKyAgICBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkpCisgICAgICAgIGlmICghcmVxdWVzdFNj
cmlwdChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChoYXNTb3VyY2VBdHRyaWJ1dGUoKSAmJiBkZWZlckF0dHJpYnV0ZVZhbHVlKCkg
JiYgbV9wYXJzZXJJbnNlcnRlZCAmJiAhYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpKSB7CisgICAgICAg
IG1fd2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRGaW5pc2hlZFBhcnNpbmcgPSB0cnVlOworICAgICAg
ICBtX3dpbGxCZVBhcnNlckV4ZWN1dGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGhhc1NvdXJj
ZUF0dHJpYnV0ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYgIWFzeW5jQXR0cmlidXRlVmFsdWUo
KSkKKyAgICAgICAgbV93aWxsQmVQYXJzZXJFeGVjdXRlZCA9IHRydWU7CisgICAgZWxzZSBpZiAo
IWhhc1NvdXJjZUF0dHJpYnV0ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYgIW1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpIHsKKyAgICAgICAgbV93aWxsQmVQ
YXJzZXJFeGVjdXRlZCA9IHRydWU7CisgICAgICAgIG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQg
PSB0cnVlOworICAgIH0gZWxzZSBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkpCisgICAgICAgIG1f
Y2FjaGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisgICAgZWxzZQorICAgICAgICBleGVjdXRl
U2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0Q29udGVudCgpLCBtX2VsZW1lbnQtPmRvY3Vt
ZW50KCktPnVybCgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBTY3JpcHRFbGVtZW50OjpyZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYgc291
cmNlVXJsKQoreworICAgIGlmICghbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJp
dHlQb2xpY3koKS0+Y2FuTG9hZEV4dGVybmFsU2NyaXB0RnJvbVNyYyhzb3VyY2VVcmwpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG9yaWdpbmFsRG9jdW1l
bnQgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFtX2VsZW1lbnQtPmRpc3BhdGNo
QmVmb3JlTG9hZEV2ZW50KHNvdXJjZVVybCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGlmICghbV9lbGVtZW50LT5pbkRvY3VtZW50KCkgfHwgbV9lbGVtZW50
LT5kb2N1bWVudCgpICE9IG9yaWdpbmFsRG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNTRVJUKCFtX2NhY2hlZFNjcmlwdCk7CisgICAgLy8g
RklYTUU6IElmIHNvdXJjZVVybCBpcyBlbXB0eSwgd2Ugc2hvdWxkIGRpc3BhdGNoRXJyb3JFdmVu
dCgpLgogICAgIG1fY2FjaGVkU2NyaXB0ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNvdXJjZVVybCwgc2NyaXB0Q2hhcnNldCgp
KTsKICAgICBtX2lzRXh0ZXJuYWxTY3JpcHQgPSB0cnVlOwogCi0gICAgLy8gbV93YXNJbnNlcnRl
ZEJ5UGFyc2VyIGlzIG5ldmVyIHJlc2V0IC0gYWx3YXlzIHJlc2llZCBhdCB0aGUgaW5pdGlhbCB2
YWx1ZSBzZXQgd2hpbGUgcGFyc2luZy4KLSAgICAvLyBtX3dhc0FscmVhZHlTdGFydGVkIGlzIGxl
ZnQgdW50b3VjaGVkIGFzIHdlbGwgdG8gYXZvaWQgc2NyaXB0IHJlZXhlY3V0aW9uLCBpZiBhIDxz
Y3JpcHQ+IGVsZW1lbnQKLSAgICAvLyBpcyByZW1vdmVkIGFuZCByZWFwcGVuZGVkIHRvIHRoZSBk
b2N1bWVudC4KLSAgICBtX2hhdmVGaXJlZExvYWQgPSBmYWxzZTsKLQotICAgIGlmIChtX2NhY2hl
ZFNjcmlwdCkgewotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2NhY2hlZFNjcmlwdCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgU2NyaXB0RWxlbWVudDo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291
cmNlQ29kZSYgc291cmNlQ29kZSkKK3ZvaWQgU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdChj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogewotICAgIGlmICh3YXNBbHJlYWR5
U3RhcnRlZCgpIHx8IHNvdXJjZUNvZGUuaXNFbXB0eSgpIHx8ICFzaG91bGRFeGVjdXRlQXNKYXZh
U2NyaXB0KCkpCisgICAgaWYgKHNvdXJjZUNvZGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVudCgp
OwogICAgIEFTU0VSVChkb2N1bWVudCk7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2Ny
aXB0cyhBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgbV93YXNBbHJlYWR5U3RhcnRlZCA9IHRydWU7Ci0KLSAgICAgICAgLy8gaHR0cDovL3d3dy53
aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jc2NyaXB0Ci0KICAgICAgICAg
ewogICAgICAgICAgICAgSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIgaWdu
b3JlRGVzY3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyKG1faXNFeHRlcm5hbFNjcmlwdCA/
IGRvY3VtZW50LmdldCgpIDogMCk7CiAgICAgICAgICAgICAvLyBDcmVhdGUgYSBzY3JpcHQgZnJv
bSB0aGUgc2NyaXB0IGVsZW1lbnQgbm9kZSwgdXNpbmcgdGhlIHNjcmlwdApAQCAtMjAxLDM2ICsy
NjUsMjMgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjpldmFsdWF0ZVNjcmlwdChjb25zdCBTY3JpcHRT
b3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogICAgIH0KIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50Ojpl
eGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCi17Ci0gICAg
aWYgKHdhc0FscmVhZHlTdGFydGVkKCkgfHwgc291cmNlQ29kZS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1
bWVudCgpOwotICAgIEFTU0VSVChkb2N1bWVudCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93
YXNBbHJlYWR5U3RhcnRlZCA9IHRydWU7Ci0KLSAgICBmcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVT
Y3JpcHQoc291cmNlQ29kZSk7Ci19Ci0KIHZvaWQgU2NyaXB0RWxlbWVudDo6c3RvcExvYWRSZXF1
ZXN0KCkKIHsKICAgICBpZiAobV9jYWNoZWRTY3JpcHQpIHsKLSAgICAgICAgbV9jYWNoZWRTY3Jp
cHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgaWYgKCFtX3dpbGxCZVBhcnNlckV4ZWN1
dGVkKQorICAgICAgICAgICAgbV9jYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKICAg
ICAgICAgbV9jYWNoZWRTY3JpcHQgPSAwOwogICAgIH0KIH0KIAogdm9pZCBTY3JpcHRFbGVtZW50
OjpleGVjdXRlKENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQogeworICAgIEFTU0VSVCghbV93
aWxsQmVQYXJzZXJFeGVjdXRlZCk7CiAgICAgQVNTRVJUKGNhY2hlZFNjcmlwdCk7CiAgICAgaWYg
KGNhY2hlZFNjcmlwdC0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICBkaXNwYXRjaEVycm9yRXZl
bnQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgZXZhbHVhdGVTY3JpcHQoU2NyaXB0U291cmNlQ29k
ZShjYWNoZWRTY3JpcHQpKTsKKyAgICAgICAgZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2Rl
KGNhY2hlZFNjcmlwdCkpOwogICAgICAgICBkaXNwYXRjaExvYWRFdmVudCgpOwogICAgIH0KICAg
ICBjYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKQEAgLTIzOCw2ICsyODksNyBAQCB2
b2lkIFNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGUoQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCiAK
IHZvaWQgU2NyaXB0RWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIG8pCiB7
CisgICAgQVNTRVJUKCFtX3dpbGxCZVBhcnNlckV4ZWN1dGVkKTsKICAgICBBU1NFUlRfVU5VU0VE
KG8sIG8gPT0gbV9jYWNoZWRTY3JpcHQpOwogICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+YXN5
bmNTY3JpcHRSdW5uZXIoKS0+ZXhlY3V0ZVNjcmlwdFNvb24odGhpcywgbV9jYWNoZWRTY3JpcHQp
OwogICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsKQEAgLTI0NSw1NiArMjk3LDMxIEBAIHZvaWQgU2Ny
aXB0RWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIG8pCiAKIGJvb2wgU2Ny
aXB0RWxlbWVudDo6aWdub3Jlc0xvYWRSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2Fz
QWxyZWFkeVN0YXJ0ZWQoKSB8fCBtX2lzRXh0ZXJuYWxTY3JpcHQgfHwgd2FzSW5zZXJ0ZWRCeVBh
cnNlcigpIHx8ICFtX2VsZW1lbnQtPmluRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gbV93YXNBbHJl
YWR5U3RhcnRlZCB8fCBtX2lzRXh0ZXJuYWxTY3JpcHQgfHwgbV9wYXJzZXJJbnNlcnRlZCB8fCAh
bV9lbGVtZW50LT5pbkRvY3VtZW50KCk7CiB9CiAKLWJvb2wgU2NyaXB0RWxlbWVudDo6c2hvdWxk
RXhlY3V0ZUFzSmF2YVNjcmlwdCgpIGNvbnN0Citib29sIFNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVu
QXJlQ29tbWVudHNPckVtcHR5VGV4dCgpIGNvbnN0CiB7Ci0gICAgLyoKLSAgICAgICAgIE1vemls
bGEgMS44IGFjY2VwdHMgamF2YXNjcmlwdDEuMCAtIGphdmFzY3JpcHQxLjcsIGJ1dCBXaW5JRSA3
IGFjY2VwdHMgb25seSBqYXZhc2NyaXB0MS4xIC0gamF2YXNjcmlwdDEuMy4KLSAgICAgICAgIE1v
emlsbGEgMS44IGFuZCBXaW5JRSA3IGJvdGggYWNjZXB0IGphdmFzY3JpcHQgYW5kIGxpdmVzY3Jp
cHQuCi0gICAgICAgICBXaW5JRSA3IGFjY2VwdHMgZWNtYXNjcmlwdCBhbmQganNjcmlwdCwgYnV0
IE1vemlsbGEgMS44IGRvZXNuJ3QuCi0gICAgICAgICBOZWl0aGVyIE1vemlsbGEgMS44IG5vciBX
aW5JRSA3IGFjY2VwdCBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gICAgICAgICBX
ZSB3YW50IHRvIGFjY2VwdCBhbGwgdGhlIHZhbHVlcyB0aGF0IGVpdGhlciBvZiB0aGVzZSBicm93
c2VycyBhY2NlcHQsIGJ1dCBub3Qgb3RoZXIgdmFsdWVzLgotICAgICAKLSAgICAgICAgIEZJWE1F
OiBJcyB0aGlzIEhUTUw1IGNvbXBsaWFudD8KLSAgICAgKi8KLSAgICBTdHJpbmcgdHlwZSA9IHR5
cGVBdHRyaWJ1dGVWYWx1ZSgpOwotICAgIGlmICghdHlwZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
aWYgKCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZSh0eXBl
LnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IGxhbmd1YWdlQXR0cmlidXRl
VmFsdWUoKTsKLSAgICAgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkgJiYgIWlzU3VwcG9ydGVk
SmF2YVNjcmlwdExhbmd1YWdlKGxhbmd1YWdlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9ICAgIAotCi0gICAgLy8gTm8gdHlwZSBvciBsYW5ndWFnZSBpcyBzcGVjaWZpZWQsIHNv
IHdlIGFzc3VtZSB0aGUgc2NyaXB0IHRvIGJlIEphdmFTY3JpcHQuCi0KLSAgICBTdHJpbmcgZm9y
QXR0cmlidXRlID0gZm9yQXR0cmlidXRlVmFsdWUoKTsKLSAgICBTdHJpbmcgZXZlbnRBdHRyaWJ1
dGUgPSBldmVudEF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgaWYgKCFmb3JBdHRyaWJ1dGUuaXNFbXB0
eSgpICYmICFldmVudEF0dHJpYnV0ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yQXR0cmlidXRl
ID0gZm9yQXR0cmlidXRlLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICBpZiAoIWVxdWFsSWdu
b3JpbmdDYXNlKGZvckF0dHJpYnV0ZSwgIndpbmRvdyIpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgCi0gICAgICAgIGV2ZW50QXR0cmlidXRlID0gZXZlbnRBdHRyaWJ1
dGUuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoZXZl
bnRBdHRyaWJ1dGUsICJvbmxvYWQiKSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UoZXZlbnRBdHRyaWJ1
dGUsICJvbmxvYWQoKSIpKQorICAgIGZvciAoTm9kZSogbiA9IG1fZWxlbWVudC0+Zmlyc3RDaGls
ZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAobi0+aXNDb21tZW50
Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChuLT5pc1RleHROb2Rl
KCkpIHsKKyAgICAgICAgICAgIFRleHQqIHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obik7CisgICAg
ICAgICAgICBpZiAodC0+bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIFN0cmluZyBTY3JpcHRFbGVtZW50OjpzY3JpcHRDaGFyc2V0
KCkgY29uc3QKIHsKLSAgICAvLyBGaXJzdCB3ZSB0cnkgdG8gZ2V0IGVuY29kaW5nIGZyb20gY2hh
cnNldCBhdHRyaWJ1dGUuCi0gICAgU3RyaW5nIGNoYXJzZXQgPSBjaGFyc2V0QXR0cmlidXRlVmFs
dWUoKS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgIC8vIElmIGNoYXJzZXQgaGFzIG5vdCBiZWVu
IGRlY2xhcmVkIGluIHNjcmlwdCB0YWcsIGZhbGwgYmFjayB0byBmcmFtZSBlbmNvZGluZy4KLSAg
ICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpCi0gICAgICAgIGNoYXJzZXQgPSBtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPmNoYXJzZXQoKTsKLQorICAgIFN0cmluZyBjaGFyc2V0OworICAgIGlmICghbV9j
aGFyYWN0ZXJFbmNvZGluZy5pc0VtcHR5KCkpCisgICAgICAgIGNoYXJzZXQgPSBtX2NoYXJhY3Rl
ckVuY29kaW5nOworICAgIGVsc2UgaWYgKCFtX2ZhbGxiYWNrQ2hhcmFjdGVyRW5jb2RpbmcuaXNF
bXB0eSgpKQorICAgICAgICBjaGFyc2V0ID0gbV9mYWxsYmFja0NoYXJhY3RlckVuY29kaW5nOwog
ICAgIHJldHVybiBjaGFyc2V0OwogfQogCkBAIC0zMjUsMjAgKzM1Miw2IEBAIFN0cmluZyBTY3Jp
cHRFbGVtZW50OjpzY3JpcHRDb250ZW50KCkgY29uc3QKICAgICByZXR1cm4gU3RyaW5nOjphZG9w
dCh2YWwpOwogfQogCi1ib29sIFNjcmlwdEVsZW1lbnQ6OmlzQXN5bmNocm9ub3VzKCkgY29uc3QK
LXsKLSAgICAvLyBPbmx5IGV4dGVybmFsIHNjcmlwdHMgbWF5IGJlIGFzeW5jaHJvbm91cy4KLSAg
ICAvLyBTZWU6IGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNhdHRy
LXNjcmlwdC1hc3luYwotICAgIHJldHVybiAhc291cmNlQXR0cmlidXRlVmFsdWUoKS5pc0VtcHR5
KCkgJiYgYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpOwotfQotCi1ib29sIFNjcmlwdEVsZW1lbnQ6Omlz
RGVmZXJyZWQoKSBjb25zdAotewotICAgIC8vIE9ubHkgZXh0ZXJuYWwgc2NyaXB0cyBtYXkgYmUg
ZGVmZXJyZWQgYW5kIGFzeW5jIHRydW1wcyBkZWZlciB0byBhbGxvdyBmb3IgYmFja3dhcmQgY29t
cGF0aWJpbGl0eS4KLSAgICAvLyBTZWU6IGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3Zl
cnZpZXcuaHRtbCNhdHRyLXNjcmlwdC1kZWZlcgotICAgIHJldHVybiAhc291cmNlQXR0cmlidXRl
VmFsdWUoKS5pc0VtcHR5KCkgJiYgIWFzeW5jQXR0cmlidXRlVmFsdWUoKSAmJiBkZWZlckF0dHJp
YnV0ZVZhbHVlKCk7Ci19Ci0KIFNjcmlwdEVsZW1lbnQqIHRvU2NyaXB0RWxlbWVudChFbGVtZW50
KiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVs
ZW1lbnQuaAppbmRleCA1MjUwZjNlMzM1NDk5MDkyOGY1NzU2MDFkMDEyMjNmNDBjNjUxNjA3Li5k
YWI3YzllZGNhYzQyN2Q2N2NiNDQzNTI2N2IxNWUyMGQ1Njk5NWFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFbGVtZW50LmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
MSw1MiArMzIsNTcgQEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIFNjcmlwdEVsZW1lbnQ7CiBjbGFz
cyBTY3JpcHRTb3VyY2VDb2RlOwogCitlbnVtIExlZ2FjeVR5cGVTdXBwb3J0IHsgRGlzYWxsb3dM
ZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlLCBBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUg
fTsKKwogY2xhc3MgU2NyaXB0RWxlbWVudCA6IHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFNjcmlwdEVsZW1l
bnQoRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29sIGlzRXZhbHVhdGVkKTsKICAg
ICB2aXJ0dWFsIH5TY3JpcHRFbGVtZW50KCk7Ci0gICAgCisKICAgICBFbGVtZW50KiBlbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CiAKKyAgICBib29sIHByZXBhcmVTY3JpcHQo
Y29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjE6
Om1pbmltdW1Qb3NpdGlvbigpLCBMZWdhY3lUeXBlU3VwcG9ydCBzdXBwb3J0TGVnYWN5VHlwZXMg
PSBEaXNhbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOworCiAgICAgLy8gQSBjaGFyc2V0
IGZvciBsb2FkaW5nIHRoZSBzY3JpcHQgKG1heSBiZSBvdmVycmlkZGVuIGJ5IEhUVFAgaGVhZGVy
cyBvciBhIEJPTSkuCiAgICAgU3RyaW5nIHNjcmlwdENoYXJzZXQoKSBjb25zdDsKIAogICAgIFN0
cmluZyBzY3JpcHRDb250ZW50KCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRFeGVjdXRlQXNKYXZh
U2NyaXB0KCkgY29uc3Q7CiAgICAgdm9pZCBleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJj
ZUNvZGUmKTsKICAgICB2b2lkIGV4ZWN1dGUoQ2FjaGVkU2NyaXB0Kik7CiAKICAgICAvLyBYTUwg
cGFyc2VyIGNhbGxzIHRoZXNlCi0gICAgdmlydHVhbCBTdHJpbmcgc291cmNlQXR0cmlidXRlVmFs
dWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTG9hZEV2ZW50KCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEVycm9yRXZlbnQoKSA9IDA7CisgICAgYm9vbCBp
c1NjcmlwdFR5cGVTdXBwb3J0ZWQoTGVnYWN5VHlwZVN1cHBvcnQpIGNvbnN0OwogCiAgICAgYm9v
bCBoYXZlRmlyZWRMb2FkRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhdmVGaXJlZExvYWQ7IH0K
KyAgICBib29sIHdpbGxCZVBhcnNlckV4ZWN1dGVkKCkgY29uc3QgeyByZXR1cm4gbV93aWxsQmVQ
YXJzZXJFeGVjdXRlZDsgfQorICAgIGJvb2wgcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSBjb25z
dCB7IHJldHVybiBtX3JlYWR5VG9CZVBhcnNlckV4ZWN1dGVkOyB9CisgICAgYm9vbCB3aWxsRXhl
Y3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbEV4
ZWN1dGVXaGVuRG9jdW1lbnRGaW5pc2hlZFBhcnNpbmc7IH0KKyAgICBDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRTY3JpcHQ+IGNhY2hlZFNjcmlwdCgpIHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0
OyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHNldEhhdmVGaXJlZExvYWRFdmVudChib29sIGhh
dmVGaXJlZExvYWQpIHsgbV9oYXZlRmlyZWRMb2FkID0gaGF2ZUZpcmVkTG9hZDsgfQotICAgIGJv
b2wgd2FzSW5zZXJ0ZWRCeVBhcnNlcigpIGNvbnN0IHsgcmV0dXJuIG1fd2FzSW5zZXJ0ZWRCeVBh
cnNlcjsgfQorICAgIGJvb2wgaXNQYXJzZXJJbnNlcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
c2VySW5zZXJ0ZWQ7IH0KICAgICBib29sIHdhc0FscmVhZHlTdGFydGVkKCkgY29uc3QgeyByZXR1
cm4gbV93YXNBbHJlYWR5U3RhcnRlZDsgfQogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2Vk
IGJ5IG91ciBwYXJlbnQgY2xhc3Nlcy4KLSAgICB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KGNv
bnN0IFN0cmluZyYgc291cmNlVXJsKTsKKyAgICB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7
CiAgICAgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5n
ZWQoKTsKLSAgICB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbihjb25zdCBTdHJpbmcmIHNvdXJj
ZVVybCk7CiAgICAgdm9pZCBoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVcmwpOwogCiBwcml2YXRlOgogICAgIGJvb2wgaWdub3Jlc0xvYWRSZXF1ZXN0KCkgY29uc3Q7
Ci0gICAgYm9vbCBpc0FzeW5jaHJvbm91cygpIGNvbnN0OwotICAgIGJvb2wgaXNEZWZlcnJlZCgp
IGNvbnN0OworICAgIGJvb2wgY2hpbGRyZW5BcmVDb21tZW50c09yRW1wdHlUZXh0KCkgY29uc3Q7
CiAKLSAgICB2b2lkIHJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOwotICAg
IHZvaWQgZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOworICAgIGJvb2wg
cmVxdWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7CiAgICAgdm9pZCBzdG9wTG9h
ZFJlcXVlc3QoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNv
dXJjZSopOwogCisgICAgdmlydHVhbCBTdHJpbmcgc291cmNlQXR0cmlidXRlVmFsdWUoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgY2hhcnNldEF0dHJpYnV0ZVZhbHVlKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIHR5cGVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIFN0cmluZyBsYW5ndWFnZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwpA
QCAtODQsMTMgKzkwLDIwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgZXZlbnRBdHRy
aWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYXN5bmNBdHRyaWJ1dGVW
YWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGVmZXJBdHRyaWJ1dGVWYWx1ZSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU291cmNlQXR0cmlidXRlKCkgY29uc3Qg
PSAwOwogCiAgICAgRWxlbWVudCogbV9lbGVtZW50OwogICAgIENhY2hlZFJlc291cmNlSGFuZGxl
PENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7Ci0gICAgYm9vbCBtX3dhc0luc2VydGVkQnlQ
YXJzZXI7CisgICAgYm9vbCBtX3BhcnNlckluc2VydGVkOworICAgIGJvb2wgbV93YXNQYXJzZXJJ
bnNlcnRlZDsKICAgICBib29sIG1faXNFeHRlcm5hbFNjcmlwdDsKICAgICBib29sIG1fd2FzQWxy
ZWFkeVN0YXJ0ZWQ7CiAgICAgYm9vbCBtX2hhdmVGaXJlZExvYWQ7CisgICAgYm9vbCBtX3dpbGxC
ZVBhcnNlckV4ZWN1dGVkOyAvLyBTYW1lIGFzICJUaGUgcGFyc2VyIHdpbGwgaGFuZGxlIGV4ZWN1
dGluZyB0aGUgc2NyaXB0LiIKKyAgICBib29sIG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQ7Cisg
ICAgYm9vbCBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nOworICAgIFN0
cmluZyBtX2NoYXJhY3RlckVuY29kaW5nOworICAgIFN0cmluZyBtX2ZhbGxiYWNrQ2hhcmFjdGVy
RW5jb2Rpbmc7CiB9OwogCiBTY3JpcHRFbGVtZW50KiB0b1NjcmlwdEVsZW1lbnQoRWxlbWVudCop
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1s
Mi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApp
bmRleCAxMGQ2ZTBkZTUyM2IxNWQxOGIyNzUxOGRkNzQxOWRiMzRmOGFlMmZjLi44NWI4YzhkZTk0
MzY1ZTUyMGE1NWY4NjQzNGJmNmI1NjI2YTVkZDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApAQCAtODgwLDM1ICs4ODAsMzIgQEAgdm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKCkKICAgICBBU1NFUlQoIW1fcGVuZGlu
Z1NjcmlwdCk7CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsKIAorICAgIGJvb2wgc3Vj
Y2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVtZW50LT5wcmVwYXJlU2NyaXB0KG1fc2NyaXB0
U3RhcnRQb3NpdGlvbiwgQWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKTsKKyAgICBpZiAo
IXN1Y2Nlc3NmdWxseVByZXBhcmVkKSB7CiAjaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgaWYgKCFz
Y3JpcHRFbGVtZW50LT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCi0gICAgICAgIGRvY3Vt
ZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7Ci0gICAgZWxzZQor
ICAgICAgICBpZiAoIXNjcmlwdEVsZW1lbnQtPmlzU2NyaXB0VHlwZVN1cHBvcnRlZChBbGxvd0xl
Z2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0U2hv
dWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKICNlbmRpZgotICAgIHsKLSAgICAgICAg
Ly8gRklYTUU6IFNjcmlwdCBleGVjdXRpb24gc2hvdWxkIGJlIHNoYXJlZCBzaG91bGQgYmUgc2hh
cmVkIGJldHdlZW4KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogU2NyaXB0IGV4ZWN1
dGlvbiBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4KICAgICAgICAgLy8gdGhlIGxpYnhtbDIgYW5k
IFF0IFhNTERvY3VtZW50UGFyc2VyIGltcGxlbWVudGF0aW9ucy4KIAogICAgICAgICAvLyBKYXZh
U2NyaXB0IGNhbiBkZXRhY2ggdGhlIHBhcnNlci4gIE1ha2Ugc3VyZSB0aGlzIGlzIG5vdCByZWxl
YXNlZAogICAgICAgICAvLyBiZWZvcmUgdGhlIGVuZCBvZiB0aGlzIG1ldGhvZC4KICAgICAgICAg
UmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgICAgIFN0cmlu
ZyBzY3JpcHRIcmVmID0gc2NyaXB0RWxlbWVudC0+c291cmNlQXR0cmlidXRlVmFsdWUoKTsKLSAg
ICAgICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gd2UgaGF2
ZSBhIHNyYyBhdHRyaWJ1dGUKLSAgICAgICAgICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0ID0gc2Ny
aXB0RWxlbWVudC0+c2NyaXB0Q2hhcnNldCgpOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmRp
c3BhdGNoQmVmb3JlTG9hZEV2ZW50KHNjcmlwdEhyZWYpICYmCi0gICAgICAgICAgICAgICAgKG1f
cGVuZGluZ1NjcmlwdCA9IGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVl
c3RTY3JpcHQoc2NyaXB0SHJlZiwgc2NyaXB0Q2hhcnNldCkpKSB7Ci0gICAgICAgICAgICAgICAg
bV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgICAgICBtX3BlbmRpbmdTY3Jp
cHQtPmFkZENsaWVudCh0aGlzKTsKLQotICAgICAgICAgICAgICAgIC8vIG1fcGVuZGluZ1Njcmlw
dCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgcmVmKCkgZXhlY3V0
ZWQgaXQKLSAgICAgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAg
ICAgICAgICBwYXVzZVBhcnNpbmcoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBpZiAoc2Ny
aXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkKICAgICAgICAgICAgIHNjcmlw
dEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5z
Y3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24p
KTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQo
KSkgeworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVk
U2NyaXB0KCk7CisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OworICAgICAg
ICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisKKyAgICAgICAgICAgIC8v
IG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBh
bmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQgaXQuCisgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2Ny
aXB0KQorICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CiAKICAgICAgICAgLy8gSmF2YVNjcmlwdCBt
YXkgaGF2ZSBkZXRhY2hlZCB0aGUgcGFyc2VyCiAgICAgICAgIGlmIChpc0RldGFjaGVkKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKaW5kZXggZDBiZjg4ZGM3
MWFmNTE0ZTQ1MzcwMzFkMTlhMjczNTU2ZWRlMDQyMi4uOTlhZmFkYjEzOWUwNWY1ZjAxNTUzMmEz
NDNmY2EzOGM3NWRlODFjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3Vt
ZW50UGFyc2VyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNl
clF0LmNwcApAQCAtNTg4LDI4ICs1ODgsMjUgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFy
c2VFbmRFbGVtZW50KCkKICAgICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7CiAgICAgbV9yZXF1
ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsKIAorICAgIGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBz
Y3JpcHRFbGVtZW50LT5wcmVwYXJlU2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgQWxsb3dM
ZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKTsKKyAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBhcmVk
KSB7CiAjaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgaWYgKCFzY3JpcHRFbGVtZW50LT5zaG91bGRF
eGVjdXRlQXNKYXZhU2NyaXB0KCkpCi0gICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFByb2Nl
c3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7Ci0gICAgZWxzZQorICAgICAgICBpZiAoIXNjcmlwdEVs
ZW1lbnQtPmlzU2NyaXB0VHlwZVN1cHBvcnRlZChBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1
dGUpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxl
bWVudCh0cnVlKTsKICNlbmRpZgotICAgIHsKLSAgICAgICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBz
Y3JpcHRFbGVtZW50LT5zb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpOwotICAgICAgICBpZiAoIXNjcmlw
dEhyZWYuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0
ZQotICAgICAgICAgICAgU3RyaW5nIHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3Jp
cHRDaGFyc2V0KCk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2Fk
RXZlbnQoc2NyaXB0SHJlZikgJiYKLSAgICAgICAgICAgICAgICAobV9wZW5kaW5nU2NyaXB0ID0g
ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzY3JpcHRI
cmVmLCBzY3JpcHRDaGFyc2V0KSkpIHsKLSAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQg
PSBlbGVtZW50OwotICAgICAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRo
aXMpOwotCi0gICAgICAgICAgICAgICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUgMCBpZiBz
Y3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkIGFuZCByZWYoKSBleGVjdXRlZCBpdAotICAgICAgICAg
ICAgICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCi0gICAgICAgICAgICAgICAgICAgIHBhdXNlUGFy
c2luZygpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVt
ZW50ID0gMDsKLSAgICAgICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNjcmlw
dEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCiAgICAgICAgICAgICBzY3JpcHRF
bGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2Ny
aXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7
CisgICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkp
IHsKKyAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNj
cmlwdCgpOworICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAg
ICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOworCisgICAgICAgICAgICAvLyBt
X3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5k
IGFkZENsaWVudCgpIGV4ZWN1dGVkIGl0LgorICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1Njcmlw
dCkKKyAgICAgICAgICAgICAgICBwYXVzZVBhcnNpbmcoKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwogICAgIH0KICAgICBtX3JlcXVlc3RpbmdTY3Jp
cHQgPSBmYWxzZTsKICAgICBwb3BDdXJyZW50Tm9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTY3JpcHRFbGVtZW50LmNwcAppbmRleCA2MDNiMmE4ZWVkYmU3NTJlZjcyZDFhZTMyYWFiOWVk
ODVmMDM2YzYxLi5kNjQ2ODllN2UzYjA1NWQxMjI4NTYxYTY2ZGI0YmZlNzlkMmE1NTZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcApAQCAtNzQsMTYgKzc0LDEw
IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSogYXR0cikKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OwogfQogCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQot
ewotICAgIFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbihzb3VyY2VBdHRyaWJ1
dGVWYWx1ZSgpKTsKLSAgICBIVE1MRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci19
Ci0KIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAg
ICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBTY3JpcHRFbGVtZW50
OjppbnNlcnRlZEludG9Eb2N1bWVudChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKTsKKyAgICBTY3Jp
cHRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogfQogCiB2b2lkIEhUTUxTY3JpcHRF
bGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKQEAgLTE2MCw2ICsxNTQsMTEgQEAgYm9vbCBI
VE1MU2NyaXB0RWxlbWVudDo6ZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IGZhc3RIYXNBdHRyaWJ1dGUoZGVmZXJBdHRyKTsKIH0KIAorYm9vbCBIVE1MU2NyaXB0RWxlbWVu
dDo6aGFzU291cmNlQXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJp
YnV0ZShzcmNBdHRyKTsKK30KKwogdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hMb2Fk
RXZlbnQoKQogewogICAgIEFTU0VSVCghaGF2ZUZpcmVkTG9hZEV2ZW50KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCmluZGV4IDA5NzczYzVmYmM2NDUwZWE4N2FlODRj
ZTFkMjU3ZDZlMmFlODU3YWYuLjNjMTY0NzM5N2IxOTc5MWJmMDdjNzk1Mzk5MTUyNzFmZWRjZTRi
ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3
LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hh
bmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVy
Q2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogCiAgICAgdmlydHVhbCBib29s
IGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBmaW5p
c2hQYXJzaW5nQ2hpbGRyZW4oKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0
dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIApAQCAtNTksNiArNTgsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGV2ZW50QXR0cmlidXRlVmFsdWUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBkZWZlckF0dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGhhc1NvdXJjZUF0dHJpYnV0ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
TG9hZEV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCBj
OTk4NThkMGNmZTVmM2NlOGYyMDI5ZGM5ZWFmZmYxOGRlZTlkYTgxLi45OWZmZjVlZjllNWUxYjQx
ZDExMzkxOGJmMjE4OTVjZjc1ZWE3OTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcApAQCAtMjYyLDE3ICsyNjIsOSBAQCB2b2lkIEhUTUxT
Y3JpcHRSdW5uZXI6OnJlcXVlc3REZWZlcnJlZFNjcmlwdChFbGVtZW50KiBlbGVtZW50KQogYm9v
bCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiBw
ZW5kaW5nU2NyaXB0LCBFbGVtZW50KiBzY3JpcHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFwZW5k
aW5nU2NyaXB0LmVsZW1lbnQoKSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBzcmNWYWx1ZSA9
IHNjcmlwdC0+Z2V0QXR0cmlidXRlKHNyY0F0dHIpOwotICAgIC8vIEFsbG93IHRoZSBob3N0IHRv
IGRpc2xsb3cgc2NyaXB0IGxvYWRzICh1c2luZyB0aGUgWFNTQXVkaXRvciwgZXRjLikKLSAgICAv
LyBGSVhNRTogdGhpcyBjaGVjayBzaG91bGQgYmUgcGVyZm9ybWVkIG9uIHRoZSBmaW5hbCBVUkwg
aW4gYSByZWRpcmVjdCBjaGFpbi4KLSAgICBpZiAoIW1faG9zdC0+c2hvdWxkTG9hZEV4dGVybmFs
U2NyaXB0RnJvbVNyYyhzcmNWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBG
SVhNRTogV2UgbmVlZCB0byByZXNvbHZlIHRoZSB1cmwgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQu
Ci0gICAgaWYgKCFzY3JpcHQtPmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KHNyY1ZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHBlbmRpbmdTY3JpcHQuc2V0RWxlbWVudChzY3JpcHQp
OwogICAgIC8vIFRoaXMgc2hvdWxkIGNvcnJlY3RseSByZXR1cm4gMCBmb3IgZW1wdHkgb3IgaW52
YWxpZCBzcmNWYWx1ZXMuCi0gICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQgPSBtX2RvY3Vt
ZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNyY1ZhbHVlLCB0b1Nj
cmlwdEVsZW1lbnQoc2NyaXB0KS0+c2NyaXB0Q2hhcnNldCgpKTsKKyAgICBDYWNoZWRTY3JpcHQq
IGNhY2hlZFNjcmlwdCA9IHRvU2NyaXB0RWxlbWVudChzY3JpcHQpLT5jYWNoZWRTY3JpcHQoKS5n
ZXQoKTsKICAgICBpZiAoIWNhY2hlZFNjcmlwdCkgewogICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OyAvLyBEaXNwYXRjaCBlcnJvciBldmVudC4KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjkz
LDI5ICsyODUsMjQgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCog
c2NyaXB0LCBjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGEKIAogICAgICAgICBTY3JpcHRF
bGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KHNjcmlwdCk7CiAgICAgICAg
IEFTU0VSVChzY3JpcHRFbGVtZW50KTsKLSAgICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT5zaG91
bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCisKKyAgICAgICAgc2NyaXB0RWxlbWVudC0+cHJlcGFy
ZVNjcmlwdChzY3JpcHRTdGFydFBvc2l0aW9uKTsKKworICAgICAgICBpZiAoIXNjcmlwdEVsZW1l
bnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IAotICAgICAgICBpZiAoc2NyaXB0LT5oYXNBdHRyaWJ1dGUoc3JjQXR0cikpIHsKLSAgICAgICAg
ICAgIGlmIChzY3JpcHQtPmhhc0F0dHJpYnV0ZShhc3luY0F0dHIpKSAvLyBBc3luYyB0YWtlcyBw
cmVjZW5kZW5jZSBvdmVyIGRlZmVyLgotICAgICAgICAgICAgICAgIHJldHVybjsgLy8gQXN5bmNo
cm9ub3VzIHNjcmlwdHMgaGFuZGxlIHRoZW1zZWx2ZXMuCi0KLSAgICAgICAgICAgIGlmIChzY3Jp
cHQtPmhhc0F0dHJpYnV0ZShkZWZlckF0dHIpKQotICAgICAgICAgICAgICAgIHJlcXVlc3REZWZl
cnJlZFNjcmlwdChzY3JpcHQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJl
cXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQoc2NyaXB0KTsKLSAgICAgICAgfSBlbHNlIGlmICgh
bV9kb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgJiYgbV9zY3JpcHROZXN0aW5nTGV2
ZWwgPT0gMSkgewotICAgICAgICAgICAgLy8gQmxvY2sgaW5saW5lIHNjcmlwdCBleGVjdXRpb24g
b24gc3R5bGVzaGVldCBsb2FkLCB1bmxlc3Mgd2UgYXJlIGluIGRvY3VtZW50LndyaXRlKCkuCi0g
ICAgICAgICAgICAvLyBUaGUgbGF0dGVyIGNhc2UgY2FuIG9ubHkgaGFwcGVuIGlmIGEgc2NyaXB0
IGJvdGggdHJpZ2dlcnMgYSBzdHlsZXNoZWV0IGxvYWQKLSAgICAgICAgICAgIC8vIGFuZCB3cml0
ZXMgYW4gaW5saW5lIHNjcmlwdC4gU2luY2Ugd3JpdGUgaXMgYmxvY2tpbmcgd2UgaGF2ZSB0byBl
eGVjdXRlIHRoZQotICAgICAgICAgICAgLy8gd3JpdHRlbiBzY3JpcHQgaW1tZWRpYXRlbHksIGln
bm9yaW5nIHRoZSBwZW5kaW5nIHNoZWV0cy4KLSAgICAgICAgICAgIG1fcGFyc2luZ0Jsb2NraW5n
U2NyaXB0LnNldEVsZW1lbnQoc2NyaXB0KTsKLSAgICAgICAgICAgIG1fcGFyc2luZ0Jsb2NraW5n
U2NyaXB0LnNldFN0YXJ0aW5nUG9zaXRpb24oc2NyaXB0U3RhcnRQb3NpdGlvbik7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNFeGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAg
ICAgICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVudCgp
LCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0U3RhcnRQ
b3NpdGlvbik7Ci0gICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KHNvdXJj
ZUNvZGUpOwotICAgICAgICB9CisKKyAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxFeGVj
dXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nKCkpCisgICAgICAgICAgICByZXF1ZXN0RGVm
ZXJyZWRTY3JpcHQoc2NyaXB0KTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+cmVh
ZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkgeworICAgICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGlu
Z0xldmVsID09IDEpIHsKKyAgICAgICAgICAgICAgICBtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdC5z
ZXRFbGVtZW50KHNjcmlwdCk7CisgICAgICAgICAgICAgICAgbV9wYXJzaW5nQmxvY2tpbmdTY3Jp
cHQuc2V0U3RhcnRpbmdQb3NpdGlvbihzY3JpcHRTdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNj
cmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1
bWVudCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgICAgIHNjcmlwdEVsZW1l
bnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgcmVxdWVzdFBhcnNpbmdCbG9ja2luZ1NjcmlwdChzY3JpcHQpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4IGJh
YmIxZTcyYjYzMjA1ZDE3YzM2YTAxMzI5MWUyNDE1MzdmODJlZTAuLjdkMjU1ZjkwMjhlYzFlYzky
OGYxODRiZjUwYjBiMDExYWQ0ZmE1ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTY3JpcHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxl
bWVudC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICAvLyBI
YW5kbGUgZHluYW1pYyB1cGRhdGVzIG9mIHRoZSAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcg
YXR0cmlidXRlLiBPbmx5IHBvc3NpYmxlIGNhc2U6IGNoYW5naW5nIGZyb20gJ3RydWUnIHRvICdm
YWxzZScKICAgICAgICAgLy8gY2F1c2VzIGFuIGltbWVkaWF0ZSBkaXNwYXRjaCBvZiB0aGUgU1ZH
TG9hZCBldmVudC4gSWYgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB3YXMgJ2ZhbHNlJyBiZWZvcmUgaW5z
ZXJ0aW5nIHRoZSBzY3JpcHQgZWxlbWVudAogICAgICAgICAvLyBpbiB0aGUgZG9jdW1lbnQsIHRo
ZSBTVkdMb2FkIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gZGlzcGF0Y2hlZC4KLSAgICAgICAgaWYg
KCFleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKCkgJiYgIWhhdmVGaXJlZExvYWRF
dmVudCgpICYmICF3YXNJbnNlcnRlZEJ5UGFyc2VyKCkpIHsKKyAgICAgICAgaWYgKCFleHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKCkgJiYgIWhhdmVGaXJlZExvYWRFdmVudCgpICYm
ICFpc1BhcnNlckluc2VydGVkKCkpIHsKICAgICAgICAgICAgIHNldEhhdmVGaXJlZExvYWRFdmVu
dCh0cnVlKTsKICAgICAgICAgICAgIEFTU0VSVChoYXZlTG9hZGVkUmVxdWlyZWRSZXNvdXJjZXMo
KSk7CiAKQEAgLTExMSw5ICsxMTEsOSBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmZpbGxBdHRy
aWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCiB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KCkKIHsKICAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgp
OwotICAgIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KHNvdXJjZUF0dHJpYnV0
ZVZhbHVlKCkpOworICAgIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAK
LSAgICBpZiAod2FzSW5zZXJ0ZWRCeVBhcnNlcigpKQorICAgIGlmIChpc1BhcnNlckluc2VydGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEV2ZW50dWFsbHkgc2VuZCBTVkdMb2FkIGV2
ZW50IG5vdyBmb3IgdGhlIGR5bmFtaWNhbGx5IGluc2VydGVkIHNjcmlwdCBlbGVtZW50CkBAIC0x
NDIsNyArMTQyLDYgQEAgYm9vbCBTVkdTY3JpcHRFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRy
aWJ1dGUqIGF0dHIpIGNvbnN0CiAKIHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2lu
Z0NoaWxkcmVuKCkKIHsKLSAgICBTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4o
c291cmNlQXR0cmlidXRlVmFsdWUoKSk7CiAgICAgU1ZHRWxlbWVudDo6ZmluaXNoUGFyc2luZ0No
aWxkcmVuKCk7CiAKICAgICAvLyBBIFNWR0xvYWQgZXZlbnQgaGFzIGJlZW4gZmlyZWQgYnkgU1ZH
RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuLgpAQCAtMjEyLDExICsyMTEsMTYgQEAgYm9v
bCBTVkdTY3JpcHRFbGVtZW50OjpkZWZlckF0dHJpYnV0ZVZhbHVlKCkgY29uc3QKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK2Jvb2wgU1ZHU2NyaXB0RWxlbWVudDo6aGFzU291cmNlQXR0cmlidXRl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzQXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRy
KTsKK30KKwogdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVudCgpCiB7CiAg
ICAgYm9vbCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkID0gZXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZEJhc2VWYWx1ZSgpOwogCi0gICAgaWYgKHdhc0luc2VydGVkQnlQYXJzZXIoKSkKKyAgICBp
ZiAoaXNQYXJzZXJJbnNlcnRlZCgpKQogICAgICAgICBBU1NFUlQoZXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCAhPSBoYXZlRmlyZWRMb2FkRXZlbnQoKSk7CiAgICAgZWxzZSBpZiAoaGF2ZUZpcmVk
TG9hZEV2ZW50KCkpIHsKICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmaXJlZCBhbiBsb2Fk
IGV2ZW50IGFuZCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIGlzIHNldCB0byAndHJ1ZScKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCmluZGV4IGRhYmVjNzk2ZGQ1YWEwMDUzMmI4
OTk2NGMwNmEzOGVhM2IyN2MwN2QuLmM1MmRhY2ZjOGJjNzkxMTk1NGU5YmZmYzNlZTFkYzcwMTE5
MTUyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaApAQCAtNjgsNiArNjgs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGV2ZW50QXR0cmlidXRlVmFsdWUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBkZWZlckF0dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGhhc1NvdXJjZUF0dHJpYnV0ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoTG9hZEV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82843</attachid>
            <date>2011-02-17 12:12:32 -0800</date>
            <delta_ts>2011-02-17 13:29:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54676-20110217121231.patch</filename>
            <type>text/plain</type>
            <size>41930</size>
            <attacher name="James Simonsen">simonjam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1OTI3YzVlMDVkMjIwODg4MWQ5YTYxYmY0YWMwYmE0ZjgxOTZjYmI2Li40NDFiYTM2
ZjRjMWJiNGExYWVkZTRlYmYwMWFkNmM1NzFmNWE4NDZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAK
KzIwMTEtMDItMTYgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgU2NyaXB0
RWxlbWVudCBtYXRjaCB0aGUgSFRNTDUgc3BlYworCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB0
aGUgInByZXBhcmUgYSBzY3JpcHQiIHNlY3Rpb24gb2YgdGhlIEhUTUw1IHNwZWMgaW4gU2NyaXB0
RWxlbWVudDo6cHJlcGFyZVNjcmlwdCgpLgorICAgICAgICBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI3By
ZXBhcmUtYS1zY3JpcHQKKworICAgICAgICBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIG1p
c3NpbmcgZnJvbSB0aGUgc3BlYyB0aGF0IHdvdWxkIGJlIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGVz
ZSB3aWxsIGJlIGFkZGVkIGxhdGVyLgorICAgICAgICAtIFN1cHBvcnQgZm9yIGFzeW5jPWZhbHNl
CisgICAgICAgIC0gRW1wdHkgc3JjIGF0dHJpYnV0ZSBzaG91bGQgZGlzcGF0Y2ggYW4gZXJyb3Iu
CisKKyAgICAgICAgVGhlcmUgYXJlIGEgY291cGxlIG9mIHNsaWdodCBiZWhhdmlvcmFsIGNoYW5n
ZXMgdG8gbWF0Y2ggdGhlIHNwZWMuCisgICAgICAgIC0gQW4gWEhUTUwgc2NyaXB0IHRoYXQgaXMg
bG9hZGVkIHRoZW4gY29waWVkIHdpbGwgbm90IGZpcmUgbG9hZCBvbiB0aGUgY29weS4KKyAgICAg
ICAgLSBJZiBvbmJlZm9yZWxvYWQgbW92ZXMgdGhlIHNjcmlwdCB0byBhIGRpZmZlcmVudCBkb2N1
bWVudCwgdGhlbiBpdCB3aWxsIG5vdCB0cnkgdG8gZXhlY3V0ZSBhZ2FpbiBiZWNhdXNlIHdhc0Fs
cmVhZHlTdGFydGVkIGlzIHRydWUuCisKKyAgICAgICAgVGhlIHBhcnNlcnMgd2VyZSB1cGRhdGVk
IHRvIHVzZSB0aGUgbmV3IEFQSSwgYnV0IG5vdCByZXdyaXR0ZW4gdG8gbG9vayBsaWtlIHRoZSBz
cGVjLiBUaGF0IHdpbGwgYmUgZG9uZSBzZXBhcmF0ZWx5LgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY3NgorCisgICAgICAgICogZmFzdC9kb20v
SFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZvcmVsb2FkLmh0bWw6IE9yaWdpbmFsIGF1dGhv
ciBzYXlzIHRlc3Qgd2FzIG9ubHkgbWVhbnQgdG8gY2hlY2sgZm9yIGNyYXNoZXMuIEJlZm9yZWxv
YWQgaXMgbm90IHNwZWNpZmllZCBieSBIVE1MNS4gVGVzdCB3YXMgbW9kaWZpZWQgdG8gYXNzdW1l
IG1vdmVkIHNjcmlwdCB3b3VsZG4ndCBleGVjdXRlIGJlY2F1c2Ugd2FzQWxyZWFkeVN0YXJ0ZWQg
aXMgc2V0LgorICAgICAgICAqIGZhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWw6
IEFjY29yZGluZyB0byBIVE1MNSBzcGVjLCBsb2FkIHNob3VsZCBvbmx5IGZpcmUgYWZ0ZXIgYSBz
Y3JpcHQgZXhlY3V0ZXMuIFRlc3Qgd2FzIG1vZGlmaWVkIHRvIG1hdGNoIHRoYXQuIFRoZSBvbGQg
YnJva2VuIGJlaGF2aW9yIHdhcyB0aGF0IGxvYWQgZmlyZWQgb24gdGhlIGNsb25lZCBlbGVtZW50
LCBldmVuIHRob3VnaCBpdCBkaWRuJ3QgZXhlY3V0ZS4KKwogMjAxMS0wMi0xNyAgUGhpbGlwcGUg
Tm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmVi
YXNlbGluZSBHVEsgdGVzdCByZXN1bHRzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vSFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZvcmVsb2FkLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRtbAppbmRl
eCA3N2JlZWQwNmIzODJkZjU0NzUzZmYxYjY2MTlkYzRmNzBmOTU5NTEzLi5kOGY4OWYzZDRjYTJm
MjljNDM1ZWU5YmIxZTViNTUzNDk4NWZlMGUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRt
bApAQCAtOCw3ICs4LDYgQEAKIDxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvZnJhbWUuaHRtbCI+PC9p
ZnJhbWU+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CiB9CiAKQEAgLTE4LDE0ICsxNyw3IEBAIGZ1bmN0aW9uIHRl
c3QoKQogICAgIHMuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlbG9hZCIsIGZ1bmN0aW9uKCkgewog
ICAgICAgICB2YXIgcyA9IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzJdKTsKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoImlmcmFtZSIpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KHMpOwotICAgIH0sIGZhbHNlKTsKLSAgICBzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoImVycm9yIGV2ZW50IHNob3VsZCBub3QgZmly
ZS4iKQotICAgIH0sIGZhbHNlKTsKLSAgICBzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5j
dGlvbigpIHsKICAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CiAgICAgfSwgZmFsc2UpOwogICAgIHMuc3JjID0gImV4dGVybmFsLmpzIjsKICAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNyYy54aHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWwKaW5kZXggZWRiZTgyOWFjOWFmMzhkNGQz
MDUzMTY1MmYxYmIyNjgzODE3ZmVkZC4uYjFkNTk2YTBiMTRjMTUyNjc3ZjVjMjMzMWZlNjYxYzg0
MzczNzRmYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJl
cnVuLXNyYy54aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtY2xvbmUtcmVy
dW4tc3JjLnhodG1sCkBAIC05LDcgKzksNiBAQCB2YXIgaSA9IDA7CiAKIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogfQogCiB2YXIg
Zmlyc3RMb2FkID0gdHJ1ZTsKQEAgLTI2LDggKzI1LDYgQEAgZnVuY3Rpb24gbG9hZGVkKCkgewog
ICAgIGVsc2UgaWYgKGkgPiAyKQogICAgICAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4gJyAr
IGkgKyAnIHRpbWVzJzsKICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHJlc3VsdCkpOwotCi0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOwogfQogCiA8L3NjcmlwdD4KQEAgLTQyLDYgKzM5LDggQEAgdmFyIGRpdiA9IHNjcmlw
dC5wYXJlbnROb2RlOwogZGl2LnJlbW92ZUNoaWxkKHNjcmlwdCk7CiBkaXYuYXBwZW5kQ2hpbGQo
c2NyaXB0LmNsb25lTm9kZSh0cnVlKSk7CiAKK2xvYWRlZCgpOworCiA8L3NjcmlwdD4KIDwvYm9k
eT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZTdiOWUwMjg5MjhkOGJkYzk5OGYzYTJjN2UzYTI3
MWYzNWIzZjYwLi4yNjllMmUxNWYzMzhmN2UzMmI5ZWE4YTI0NjMzMGVjOWVmNDc4MzUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDItMTYgIEphbWVzIFNpbW9uc2VuICA8c2lt
b25qYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1ha2UgU2NyaXB0RWxlbWVudCBtYXRjaCB0aGUgSFRNTDUgc3BlYworCisg
ICAgICAgIFRoaXMgaW1wbGVtZW50cyB0aGUgInByZXBhcmUgYSBzY3JpcHQiIHNlY3Rpb24gb2Yg
dGhlIEhUTUw1IHNwZWMgaW4gU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdCgpLgorICAgICAg
ICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRp
cGFnZS9zY3JpcHRpbmctMS5odG1sI3ByZXBhcmUtYS1zY3JpcHQKKworICAgICAgICBUaGVyZSBh
cmUgYSBjb3VwbGUgb2YgdGhpbmdzIG1pc3NpbmcgZnJvbSB0aGUgc3BlYyB0aGF0IHdvdWxkIGJl
IG5ldyBmdW5jdGlvbmFsaXR5LiBUaGVzZSB3aWxsIGJlIGFkZGVkIGxhdGVyLgorICAgICAgICAt
IFN1cHBvcnQgZm9yIGFzeW5jPWZhbHNlCisgICAgICAgIC0gRW1wdHkgc3JjIGF0dHJpYnV0ZSBz
aG91bGQgZGlzcGF0Y2ggYW4gZXJyb3IuCisKKyAgICAgICAgVGhlcmUgYXJlIGEgY291cGxlIG9m
IHNsaWdodCBiZWhhdmlvcmFsIGNoYW5nZXMgdG8gbWF0Y2ggdGhlIHNwZWMuCisgICAgICAgIC0g
QW4gWEhUTUwgc2NyaXB0IHRoYXQgaXMgbG9hZGVkIHRoZW4gY29waWVkIHdpbGwgbm90IGZpcmUg
bG9hZCBvbiB0aGUgY29weS4KKyAgICAgICAgLSBJZiBvbmJlZm9yZWxvYWQgbW92ZXMgdGhlIHNj
cmlwdCB0byBhIGRpZmZlcmVudCBkb2N1bWVudCwgdGhlbiBpdCB3aWxsIG5vdCB0cnkgdG8gZXhl
Y3V0ZSBhZ2FpbiBiZWNhdXNlIHdhc0FscmVhZHlTdGFydGVkIGlzIHRydWUuCisKKyAgICAgICAg
VGhlIHBhcnNlcnMgd2VyZSB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IEFQSSwgYnV0IG5vdCByZXdy
aXR0ZW4gdG8gbG9vayBsaWtlIHRoZSBzcGVjLiBUaGF0IHdpbGwgYmUgZG9uZSBzZXBhcmF0ZWx5
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY3
NgorCisgICAgICAgIFRlc3Q6IEFsbCBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9T
Y3JpcHRFbGVtZW50LmNwcDogUmV3cml0dGVuIHRvIG1hdGNoIEhUTUw1IHNwZWMuCisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpTY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KTogTG9naWMgbW92ZWQgdG8g
cHJlcGFyZVNjcmlwdC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVu
Q2hhbmdlZCk6IExvZ2ljIG1vdmVkIHRvIHByZXBhcmVTY3JpcHQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRFbGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1dGUpOiBMb2dpYyBtb3ZlZCB0byBw
cmVwYXJlU2NyaXB0LgorICAgICAgICAoV2ViQ29yZTo6aXNMZWdhY3lTdXBwb3J0ZWRKYXZhU2Ny
aXB0TGFuZ3VhZ2UpOiBBZGRlZCB0byBzdXBwb3J0IG9sZCBzY3JpcHQgdHlwZXMgaW4gbGF5b3V0
IHRlc3RzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aXNTY3JpcHRUeXBlU3Vw
cG9ydGVkKTogRGVyaXZlZCBmcm9tIG9sZCBzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpwcmVwYXJlU2NyaXB0KTogU1RBUlQgSEVS
RS4gTWFpbiBjaGFuZ2UuIFNob3VsZCByZWFkIGV4YWN0bHkgbGlrZSBIVE1MNSdzICJwcmVwYXJl
IGEgc2NyaXB0LiIgTGVnYWN5IHR5cGUgc3VwcG9ydCBuZWVkZWQgZm9yIGxheW91dCB0ZXN0cyB1
c2luZyBYTUwgcGFyc2VyLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6cmVxdWVz
dFNjcmlwdCk6IE1vc3QgbG9naWMgbW92ZWQgdG8gcHJlcGFyZVNjcmlwdC4gQ2hlY2sgc2VjdXJp
dHkgc2V0dGluZ3MgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1
dGVTY3JpcHQpOiBDb21iaW5lZCBldmFsdWF0ZVNjcmlwdCgpIGFuZCBleGVjdXRlU2NyaXB0KCkg
ZnJvbSBvbGQgY29kZS4gTG9naWMgbW92ZWQgdG8gcHJlcGFyZVNjcmlwdC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnN0b3BMb2FkUmVxdWVzdCk6IElnbm9yZSBwYXJzZXIgZXhl
Y3V0ZWQgc2NyaXB0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGUp
OiBSZW5hbWVkIGV4ZWN1dGVTY3JpcHQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50
Ojpub3RpZnlGaW5pc2hlZCk6IFdlIHNob3VsZCBvbmx5IGxpc3RlbiBmb3Igbm9uLXBhcnNlciBl
eGVjdXRlZCBzY3JpcHRzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aWdub3Jl
c0xvYWRSZXF1ZXN0KTogTmV3IHZhcmlhYmxlIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RWxlbWVudDo6Y2hpbGRyZW5BcmVDb21tZW50c09yRW1wdHlUZXh0KTogQWRkZWQgZm9yIEhU
TUw1IGNvbXBsaWFuY2UuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpzY3JpcHRD
aGFyc2V0KTogVXNlIEhUTUw1IHZhcmlhYmxlcy4KKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6d2lsbEJlUGFyc2VyRXhlY3V0
ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnJlYWR5VG9CZVBh
cnNlckV4ZWN1dGVkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojp3
aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZyk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6Y2FjaGVkU2NyaXB0KTogcHJlcGFyZVNjcmlwdCgpIGlz
IHRoZSBvbmx5IHBsYWNlIHRoYXQgc2hvdWxkIGxvYWQgc2NyaXB0cy4gVGhpcyBhY2Nlc3NvciBs
ZXRzIHRoZSBwYXJzZXJzIGxpc3RlbiBmb3Igd2hlbiBsb2FkcyBmaW5pc2guCisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojppc1BhcnNlckluc2VydGVkKTogQWRkZWQuCisgICAgICAg
ICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpY
TUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKTogU2hvdWxkIGJlaGF2ZSB0aGUgc2FtZS4g
T2ZmbG9hZHMgbXVjaCBvZiBpdHMgd29yayB0byBwcmVwYXJlU2NyaXB0KCkuCisgICAgICAgICog
ZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCk6IElkZW50aWNhbCB0byBsaWJ4bWwyIGNoYW5nZXMu
CisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBObyBsb25nZXIgbmVl
ZHMgdXJsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6Omhhc1NvdXJjZUF0
dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KTogUmVxdWVzdGluZyBz
Y3JpcHRzIG9mZmxvYWRlZCB0byBTY3JpcHRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KTogU2hvdWxkIGJlaGF2ZSB0aGUgc2FtZS4gT2ZmbG9h
ZHMgbXVjaCBvZiBpdHMgd29yayB0byBwcmVwYXJlU2NyaXB0KCkuCisgICAgICAgICogc3ZnL1NW
R1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZCk6IE5ldyBTY3JpcHRFbGVtZW50IGZ1bmN0aW9uIG5hbWVzLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQp
OiBObyBsb25nZXIgbmVlZHMgdXJsLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVu
dDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKTogU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0No
aWxkcmVuIGlzIGdvbmUuCisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50OjpoYXNT
b3VyY2VBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1l
bnQ6OmRpc3BhdGNoTG9hZEV2ZW50KTogTmV3IFNjcmlwdEVsZW1lbnQgZnVuY3Rpb24gbmFtZXMu
CisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaDoKKwogMjAxMS0wMi0xNyAgSHVpIEh1
YW5nICA8aHVpLjIuaHVhbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3ps
byBHb21ib3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggMTkzOWEwODBk
ZmM4ODM2OWYwMmZmZjc2Y2U2ODNiYzU2YmEzODUyYi4uNmJkNzFjMDdlYmE2MDQzNWE4NmYxOTIx
MmVjYjAxYjUyZGMwMDFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcApAQCAt
NTEsMTMgKzUxLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2NyaXB0RWxlbWVudDo6
U2NyaXB0RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBib29sIHdhc0luc2VydGVkQnlQYXJzZXIs
IGJvb2wgd2FzQWxyZWFkeVN0YXJ0ZWQpCitTY3JpcHRFbGVtZW50OjpTY3JpcHRFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQsIGJvb2wgcGFyc2VySW5zZXJ0ZWQsIGJvb2wgd2FzQWxyZWFkeVN0YXJ0
ZWQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAsIG1fY2FjaGVkU2NyaXB0KDApCi0g
ICAgLCBtX3dhc0luc2VydGVkQnlQYXJzZXIod2FzSW5zZXJ0ZWRCeVBhcnNlcikKKyAgICAsIG1f
cGFyc2VySW5zZXJ0ZWQocGFyc2VySW5zZXJ0ZWQpCisgICAgLCBtX3dhc1BhcnNlckluc2VydGVk
KGZhbHNlKQogICAgICwgbV9pc0V4dGVybmFsU2NyaXB0KGZhbHNlKQogICAgICwgbV93YXNBbHJl
YWR5U3RhcnRlZCh3YXNBbHJlYWR5U3RhcnRlZCkKICAgICAsIG1faGF2ZUZpcmVkTG9hZChmYWxz
ZSkKKyAgICAsIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQoZmFsc2UpCisgICAgLCBtX3JlYWR5VG9C
ZVBhcnNlckV4ZWN1dGVkKGZhbHNlKQorICAgICwgbV93aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZp
bmlzaGVkUGFyc2luZyhmYWxzZSkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKIH0KQEAgLTY3
LDIyICs3MSwxMCBAQCBTY3JpcHRFbGVtZW50Ojp+U2NyaXB0RWxlbWVudCgpCiAgICAgc3RvcExv
YWRSZXF1ZXN0KCk7CiB9CiAKLXZvaWQgU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCit2b2lkIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KCkKIHsKLSAgICBpZiAod2FzSW5zZXJ0ZWRCeVBhcnNlcigpICYmICFpc0Fz
eW5jaHJvbm91cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBodHRwOi8vd3d3LndoYXR3
Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNzY3JpcHQKLQotICAgIGlmICghc291
cmNlVXJsLmlzRW1wdHkoKSkgewotICAgICAgICByZXF1ZXN0U2NyaXB0KHNvdXJjZVVybCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSdzIGFuIGVtcHR5IHNjcmlw
dCBub2RlLCB3ZSBzaG91bGRuJ3QgZXZhbHVhdGUgdGhlIHNjcmlwdAotICAgIC8vIGJlY2F1c2Ug
aWYgYSBzY3JpcHQgaXMgaW5zZXJ0ZWQgYWZ0ZXJ3YXJkcyAoYnkgc2V0dGluZyB0ZXh0IG9yIGlu
bmVyVGV4dCkKLSAgICAvLyBpdCBzaG91bGQgYmUgZXZhbHVhdGVkLCBhbmQgZXZhbHVhdGVTY3Jp
cHQgb25seSBldmFsdWF0ZXMgYSBzY3JpcHQgb25jZS4KLSAgICBldmFsdWF0ZVNjcmlwdChTY3Jp
cHRTb3VyY2VDb2RlKHNjcmlwdENvbnRlbnQoKSwgZWxlbWVudCgpLT5kb2N1bWVudCgpLT51cmwo
KSkpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4K
KyAgICBpZiAoIW1fcGFyc2VySW5zZXJ0ZWQpCisgICAgICAgIHByZXBhcmVTY3JpcHQoKTsgLy8g
RklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUuCiB9CiAKIHZv
aWQgU2NyaXB0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCkBAIC05MywyMiArODUsOCBA
QCB2b2lkIFNjcmlwdEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQogCiB2b2lkIFNjcmlw
dEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCiB7Ci0gICAgaWYgKHdhc0luc2VydGVkQnlQYXJz
ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgYSBub2RlIGlzIGluc2VydGVkIGFz
IGEgY2hpbGQgb2YgdGhlIHNjcmlwdCBlbGVtZW50Ci0gICAgLy8gYW5kIHRoZSBzY3JpcHQgZWxl
bWVudCBoYXMgYmVlbiBpbnNlcnRlZCBpbiB0aGUgZG9jdW1lbnQKLSAgICAvLyB3ZSBldmFsdWF0
ZSB0aGUgc2NyaXB0LgotICAgIGlmIChtX2VsZW1lbnQtPmluRG9jdW1lbnQoKSAmJiBtX2VsZW1l
bnQtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgZXZhbHVhdGVTY3JpcHQoU2NyaXB0U291cmNlQ29k
ZShzY3JpcHRDb250ZW50KCksIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dXJsKCkpKTsgLy8gRklY
TUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUKLX0KLQotdm9pZCBT
Y3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oY29uc3QgU3RyaW5nJiBzb3VyY2VV
cmwpCi17Ci0gICAgLy8gVGhlIHBhcnNlciBqdXN0IHJlYWNoZWQgPC9zY3JpcHQ+LiBJZiB3ZSBo
YXZlIG5vIHNyYyBhbmQgbm8gdGV4dCwKLSAgICAvLyBhbGxvdyBkeW5hbWljIGxvYWRpbmcgbGF0
ZXIuCi0gICAgaWYgKHNvdXJjZVVybC5pc0VtcHR5KCkgJiYgc2NyaXB0Q29udGVudCgpLmlzRW1w
dHkoKSkKLSAgICAgICAgbV93YXNJbnNlcnRlZEJ5UGFyc2VyID0gZmFsc2U7CisgICAgaWYgKCFt
X3BhcnNlckluc2VydGVkICYmIG1fZWxlbWVudC0+aW5Eb2N1bWVudCgpKQorICAgICAgICBwcmVw
YXJlU2NyaXB0KCk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVhbCBzdGFydGluZyBsaW5lIG51bWJl
ciBoZXJlLgogfQogCiB2b2lkIFNjcmlwdEVsZW1lbnQ6OmhhbmRsZVNvdXJjZUF0dHJpYnV0ZShj
b25zdCBTdHJpbmcmIHNvdXJjZVVybCkKQEAgLTExNiwxMiArOTQsMjEgQEAgdm9pZCBTY3JpcHRF
bGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCiAg
ICAgaWYgKGlnbm9yZXNMb2FkUmVxdWVzdCgpIHx8IHNvdXJjZVVybC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHJlcXVlc3RTY3JpcHQoc291cmNlVXJsKTsKKyAgICBwcmVwYXJl
U2NyaXB0KCk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVhbCBzdGFydGluZyBsaW5lIG51bWJlciBo
ZXJlLgogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb24KLXN0YXRpYyBib29sIGlzU3VwcG9ydGVkSmF2
YVNjcmlwdExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpCitzdGF0aWMgYm9vbCBpc0xl
Z2FjeVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxhbmd1YWdlKQog
eworICAgIC8qCisgICAgICAgICBNb3ppbGxhIDEuOCBhY2NlcHRzIGphdmFzY3JpcHQxLjAgLSBq
YXZhc2NyaXB0MS43LCBidXQgV2luSUUgNyBhY2NlcHRzIG9ubHkgamF2YXNjcmlwdDEuMSAtIGph
dmFzY3JpcHQxLjMuCisgICAgICAgICBNb3ppbGxhIDEuOCBhbmQgV2luSUUgNyBib3RoIGFjY2Vw
dCBqYXZhc2NyaXB0IGFuZCBsaXZlc2NyaXB0LgorICAgICAgICAgV2luSUUgNyBhY2NlcHRzIGVj
bWFzY3JpcHQgYW5kIGpzY3JpcHQsIGJ1dCBNb3ppbGxhIDEuOCBkb2Vzbid0LgorICAgICAgICAg
TmVpdGhlciBNb3ppbGxhIDEuOCBub3IgV2luSUUgNyBhY2NlcHQgbGVhZGluZyBvciB0cmFpbGlu
ZyB3aGl0ZXNwYWNlLgorICAgICAgICAgV2Ugd2FudCB0byBhY2NlcHQgYWxsIHRoZSB2YWx1ZXMg
dGhhdCBlaXRoZXIgb2YgdGhlc2UgYnJvd3NlcnMgYWNjZXB0LCBidXQgbm90IG90aGVyIHZhbHVl
cy4KKworICAgICAgICAgRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgbm90IEhUTUw1IGNvbXBsaWFu
dC4gVGhlc2UgYmVsb25nIGluIHRoZSBNSU1FIHJlZ2lzdHJ5IGFzICJ0ZXh0L2phdmFzY3JpcHQ8
dmVyc2lvbj4iIGVudHJpZXMuCisgICAgICovCiAgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZywg
Q2FzZUZvbGRpbmdIYXNoPiBMYW5ndWFnZVNldDsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExh
bmd1YWdlU2V0LCBsYW5ndWFnZXMsICgpKTsKICAgICBpZiAobGFuZ3VhZ2VzLmlzRW1wdHkoKSkg
ewpAQCAtMTM3LDU4ICsxMjQsMTM1IEBAIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkSmF2YVNjcmlw
dExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpCiAgICAgICAgIGxhbmd1YWdlcy5hZGQo
ImphdmFzY3JpcHQxLjciKTsKICAgICAgICAgbGFuZ3VhZ2VzLmFkZCgibGl2ZXNjcmlwdCIpOwog
ICAgICAgICBsYW5ndWFnZXMuYWRkKCJlY21hc2NyaXB0Iik7Ci0gICAgICAgIGxhbmd1YWdlcy5h
ZGQoImpzY3JpcHQiKTsgICAgICAgICAgICAgICAgCisgICAgICAgIGxhbmd1YWdlcy5hZGQoImpz
Y3JpcHQiKTsKICAgICB9CiAKICAgICByZXR1cm4gbGFuZ3VhZ2VzLmNvbnRhaW5zKGxhbmd1YWdl
KTsKIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50OjpyZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYg
c291cmNlVXJsKQorYm9vbCBTY3JpcHRFbGVtZW50Ojppc1NjcmlwdFR5cGVTdXBwb3J0ZWQoTGVn
YWN5VHlwZVN1cHBvcnQgc3VwcG9ydExlZ2FjeVR5cGVzKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBFdmVudHVhbGx5IHdlJ2QgbGlrZSB0byBldmFsdWF0ZSBzY3JpcHRzIHdoaWNoIGFyZSBpbnNl
cnRlZCBpbnRvIGEgCisgICAgU3RyaW5nIHR5cGU7CisgICAgU3RyaW5nIGxlZ2FjeVR5cGU7Cisg
ICAgaWYgKHR5cGVBdHRyaWJ1dGVWYWx1ZSgpLmlzRW1wdHkoKSAmJiBsYW5ndWFnZUF0dHJpYnV0
ZVZhbHVlKCkuaXNFbXB0eSgpKQorICAgICAgICB0eXBlID0gInRleHQvamF2YXNjcmlwdCI7Cisg
ICAgZWxzZSBpZiAoIXR5cGVBdHRyaWJ1dGVWYWx1ZSgpLmlzRW1wdHkoKSkgeworICAgICAgICB0
eXBlID0gdHlwZUF0dHJpYnV0ZVZhbHVlKCkuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKKyAg
ICAgICAgaWYgKHN1cHBvcnRMZWdhY3lUeXBlcyA9PSBBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRy
aWJ1dGUpCisgICAgICAgICAgICBsZWdhY3lUeXBlID0gdHlwZUF0dHJpYnV0ZVZhbHVlKCk7Cisg
ICAgfSBlbHNlIGlmICghbGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1ZSgpLmlzRW1wdHkoKSkgeworICAg
ICAgICB0eXBlID0gInRleHQvIiArIGxhbmd1YWdlQXR0cmlidXRlVmFsdWUoKS5sb3dlcigpOwor
ICAgICAgICBsZWdhY3lUeXBlID0gbGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1ZSgpOworICAgIH0gZWxz
ZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIC8vIEZJWE1FOiBpc0xlZ2Fj
eVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZSgpIGlzIG5vdCB2YWxpZCBIVE1MNS4gSXQgaXMg
dXNlZCBoZXJlIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3Rp
bmcgbGF5b3V0IHRlc3RzLgorICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRl
ZEphdmFTY3JpcHRNSU1FVHlwZSh0eXBlKSB8fCAoIWxlZ2FjeVR5cGUuaXNFbXB0eSgpICYmIGlz
TGVnYWN5U3VwcG9ydGVkSmF2YVNjcmlwdExhbmd1YWdlKGxlZ2FjeVR5cGUpKTsKK30KKworLy8g
aHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmlldy5odG1sI3ByZXBhcmUtYS1zY3Jp
cHQKK2Jvb2wgU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdChjb25zdCBUZXh0UG9zaXRpb24x
JiBzY3JpcHRTdGFydFBvc2l0aW9uLCBMZWdhY3lUeXBlU3VwcG9ydCBzdXBwb3J0TGVnYWN5VHlw
ZXMpCit7CisgICAgaWYgKHdhc0FscmVhZHlTdGFydGVkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChtX3BhcnNlckluc2VydGVkKSB7CisgICAgICAgIG1fd2FzUGFyc2VySW5z
ZXJ0ZWQgPSB0cnVlOworICAgICAgICBtX3BhcnNlckluc2VydGVkID0gZmFsc2U7CisgICAgfSBl
bHNlCisgICAgICAgIG1fd2FzUGFyc2VySW5zZXJ0ZWQgPSBmYWxzZTsKKworICAgIGlmICghaGFz
U291cmNlQXR0cmlidXRlKCkgJiYgY2hpbGRyZW5BcmVDb21tZW50c09yRW1wdHlUZXh0KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9lbGVtZW50LT5pbkRvY3VtZW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghaXNTY3JpcHRUeXBlU3VwcG9ydGVk
KHN1cHBvcnRMZWdhY3lUeXBlcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICht
X3dhc1BhcnNlckluc2VydGVkKQorICAgICAgICBtX3BhcnNlckluc2VydGVkID0gdHJ1ZTsKKwor
ICAgIG1fd2FzQWxyZWFkeVN0YXJ0ZWQgPSB0cnVlOworCisgICAgLy8gRklYTUU6IEV2ZW50dWFs
bHkgd2UnZCBsaWtlIHRvIGV2YWx1YXRlIHNjcmlwdHMgd2hpY2ggYXJlIGluc2VydGVkIGludG8g
YQogICAgIC8vIHZpZXdsZXNzIGRvY3VtZW50IGJ1dCB0aGlzJ2xsIGRvIGZvciBub3cuCiAgICAg
Ly8gU2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MjcKICAgICBp
ZiAoIW1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRzKEFib3V0VG9FeGVjdXRlU2NyaXB0KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIGV2ZW50QXR0cmlidXRlID0gZXZl
bnRBdHRyaWJ1dGVWYWx1ZSgpOworICAgIFN0cmluZyBmb3JBdHRyaWJ1dGUgPSBmb3JBdHRyaWJ1
dGVWYWx1ZSgpOworICAgIGlmICghZXZlbnRBdHRyaWJ1dGUuaXNFbXB0eSgpICYmICFmb3JBdHRy
aWJ1dGUuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvckF0dHJpYnV0ZSA9IGZvckF0dHJpYnV0ZS5z
dHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShmb3JBdHRy
aWJ1dGUsICJ3aW5kb3ciKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBl
dmVudEF0dHJpYnV0ZSA9IGV2ZW50QXR0cmlidXRlLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAg
ICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGV2ZW50QXR0cmlidXRlLCAib25sb2FkIikgJiYgIWVx
dWFsSWdub3JpbmdDYXNlKGV2ZW50QXR0cmlidXRlLCAib25sb2FkKCkiKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWNoYXJzZXRBdHRyaWJ1dGVWYWx1ZSgp
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9jaGFyYWN0ZXJFbmNvZGluZyA9IGNoYXJzZXRBdHRyaWJ1
dGVWYWx1ZSgpOworICAgIGVsc2UKKyAgICAgICAgbV9mYWxsYmFja0NoYXJhY3RlckVuY29kaW5n
ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jaGFyc2V0KCk7CisKKyAgICBpZiAoaGFzU291cmNl
QXR0cmlidXRlKCkpCisgICAgICAgIGlmICghcmVxdWVzdFNjcmlwdChzb3VyY2VBdHRyaWJ1dGVW
YWx1ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChoYXNTb3VyY2VB
dHRyaWJ1dGUoKSAmJiBkZWZlckF0dHJpYnV0ZVZhbHVlKCkgJiYgbV9wYXJzZXJJbnNlcnRlZCAm
JiAhYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpKSB7CisgICAgICAgIG1fd2lsbEV4ZWN1dGVXaGVuRG9j
dW1lbnRGaW5pc2hlZFBhcnNpbmcgPSB0cnVlOworICAgICAgICBtX3dpbGxCZVBhcnNlckV4ZWN1
dGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGhhc1NvdXJjZUF0dHJpYnV0ZSgpICYmIG1fcGFy
c2VySW5zZXJ0ZWQgJiYgIWFzeW5jQXR0cmlidXRlVmFsdWUoKSkKKyAgICAgICAgbV93aWxsQmVQ
YXJzZXJFeGVjdXRlZCA9IHRydWU7CisgICAgZWxzZSBpZiAoIWhhc1NvdXJjZUF0dHJpYnV0ZSgp
ICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYgIW1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+aGF2ZVN0eWxl
c2hlZXRzTG9hZGVkKCkpIHsKKyAgICAgICAgbV93aWxsQmVQYXJzZXJFeGVjdXRlZCA9IHRydWU7
CisgICAgICAgIG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQgPSB0cnVlOworICAgIH0gZWxzZSBp
ZiAoaGFzU291cmNlQXR0cmlidXRlKCkpCisgICAgICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRDbGll
bnQodGhpcyk7CisgICAgZWxzZQorICAgICAgICBleGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNv
ZGUoc2NyaXB0Q29udGVudCgpLCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnVybCgpLCBzY3JpcHRT
dGFydFBvc2l0aW9uKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTY3JpcHRFbGVt
ZW50OjpyZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQoreworICAgIGlmICgh
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+Y2FuTG9hZEV4
dGVybmFsU2NyaXB0RnJvbVNyYyhzb3VyY2VVcmwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBSZWZQdHI8RG9jdW1lbnQ+IG9yaWdpbmFsRG9jdW1lbnQgPSBtX2VsZW1lbnQtPmRvY3Vt
ZW50KCk7CiAgICAgaWYgKCFtX2VsZW1lbnQtPmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KHNvdXJj
ZVVybCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgh
bV9lbGVtZW50LT5pbkRvY3VtZW50KCkgfHwgbV9lbGVtZW50LT5kb2N1bWVudCgpICE9IG9yaWdp
bmFsRG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgQVNTRVJUKCFtX2NhY2hlZFNjcmlwdCk7CisgICAgLy8gRklYTUU6IElmIHNvdXJjZVVybCBp
cyBlbXB0eSwgd2Ugc2hvdWxkIGRpc3BhdGNoRXJyb3JFdmVudCgpLgogICAgIG1fY2FjaGVkU2Ny
aXB0ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1
ZXN0U2NyaXB0KHNvdXJjZVVybCwgc2NyaXB0Q2hhcnNldCgpKTsKICAgICBtX2lzRXh0ZXJuYWxT
Y3JpcHQgPSB0cnVlOwogCi0gICAgLy8gbV93YXNJbnNlcnRlZEJ5UGFyc2VyIGlzIG5ldmVyIHJl
c2V0IC0gYWx3YXlzIHJlc2llZCBhdCB0aGUgaW5pdGlhbCB2YWx1ZSBzZXQgd2hpbGUgcGFyc2lu
Zy4KLSAgICAvLyBtX3dhc0FscmVhZHlTdGFydGVkIGlzIGxlZnQgdW50b3VjaGVkIGFzIHdlbGwg
dG8gYXZvaWQgc2NyaXB0IHJlZXhlY3V0aW9uLCBpZiBhIDxzY3JpcHQ+IGVsZW1lbnQKLSAgICAv
LyBpcyByZW1vdmVkIGFuZCByZWFwcGVuZGVkIHRvIHRoZSBkb2N1bWVudC4KLSAgICBtX2hhdmVG
aXJlZExvYWQgPSBmYWxzZTsKLQotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkgewotICAgICAgICBt
X2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmIChtX2NhY2hlZFNjcmlwdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBkaXNw
YXRjaEVycm9yRXZlbnQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU2NyaXB0RWxl
bWVudDo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkK
K3ZvaWQgU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2Rl
JiBzb3VyY2VDb2RlKQogewotICAgIGlmICh3YXNBbHJlYWR5U3RhcnRlZCgpIHx8IHNvdXJjZUNv
ZGUuaXNFbXB0eSgpIHx8ICFzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCisgICAgaWYgKHNv
dXJjZUNvZGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpOwogICAgIEFTU0VSVChkb2N1bWVu
dCk7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKSB7Ci0gICAgICAg
IGlmICghZnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2NyaXB0cyhBYm91dFRvRXhlY3V0ZVNj
cmlwdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV93YXNBbHJlYWR5U3RhcnRl
ZCA9IHRydWU7Ci0KLSAgICAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1h
cHBzL2N1cnJlbnQtd29yay8jc2NyaXB0Ci0KICAgICAgICAgewogICAgICAgICAgICAgSWdub3Jl
RGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIgaWdub3JlRGVzY3RydWN0aXZlV3JpdGVD
b3VudEluY3JlbWVudGVyKG1faXNFeHRlcm5hbFNjcmlwdCA/IGRvY3VtZW50LmdldCgpIDogMCk7
CiAgICAgICAgICAgICAvLyBDcmVhdGUgYSBzY3JpcHQgZnJvbSB0aGUgc2NyaXB0IGVsZW1lbnQg
bm9kZSwgdXNpbmcgdGhlIHNjcmlwdApAQCAtMjAxLDM2ICsyNjUsMjMgQEAgdm9pZCBTY3JpcHRF
bGVtZW50OjpldmFsdWF0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2Rl
KQogICAgIH0KIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0KGNvbnN0IFNj
cmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCi17Ci0gICAgaWYgKHdhc0FscmVhZHlTdGFydGVk
KCkgfHwgc291cmNlQ29kZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8
RG9jdW1lbnQ+IGRvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpOwotICAgIEFTU0VSVChk
b2N1bWVudCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93YXNBbHJlYWR5U3RhcnRlZCA9IHRy
dWU7Ci0KLSAgICBmcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7Ci19
Ci0KIHZvaWQgU2NyaXB0RWxlbWVudDo6c3RvcExvYWRSZXF1ZXN0KCkKIHsKICAgICBpZiAobV9j
YWNoZWRTY3JpcHQpIHsKLSAgICAgICAgbV9jYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlz
KTsKKyAgICAgICAgaWYgKCFtX3dpbGxCZVBhcnNlckV4ZWN1dGVkKQorICAgICAgICAgICAgbV9j
YWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKICAgICAgICAgbV9jYWNoZWRTY3JpcHQg
PSAwOwogICAgIH0KIH0KIAogdm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlKENhY2hlZFNjcmlw
dCogY2FjaGVkU2NyaXB0KQogeworICAgIEFTU0VSVCghbV93aWxsQmVQYXJzZXJFeGVjdXRlZCk7
CiAgICAgQVNTRVJUKGNhY2hlZFNjcmlwdCk7CiAgICAgaWYgKGNhY2hlZFNjcmlwdC0+ZXJyb3JP
Y2N1cnJlZCgpKQogICAgICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgZXZhbHVhdGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShjYWNoZWRTY3JpcHQpKTsKKyAg
ICAgICAgZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKGNhY2hlZFNjcmlwdCkpOwogICAg
ICAgICBkaXNwYXRjaExvYWRFdmVudCgpOwogICAgIH0KICAgICBjYWNoZWRTY3JpcHQtPnJlbW92
ZUNsaWVudCh0aGlzKTsKQEAgLTIzOCw2ICsyODksNyBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OmV4
ZWN1dGUoQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6
bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIG8pCiB7CisgICAgQVNTRVJUKCFtX3dpbGxC
ZVBhcnNlckV4ZWN1dGVkKTsKICAgICBBU1NFUlRfVU5VU0VEKG8sIG8gPT0gbV9jYWNoZWRTY3Jp
cHQpOwogICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+YXN5bmNTY3JpcHRSdW5uZXIoKS0+ZXhl
Y3V0ZVNjcmlwdFNvb24odGhpcywgbV9jYWNoZWRTY3JpcHQpOwogICAgIG1fY2FjaGVkU2NyaXB0
ID0gMDsKQEAgLTI0NSw1NiArMjk3LDMxIEBAIHZvaWQgU2NyaXB0RWxlbWVudDo6bm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUmVzb3VyY2UqIG8pCiAKIGJvb2wgU2NyaXB0RWxlbWVudDo6aWdub3Jlc0xv
YWRSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2FzQWxyZWFkeVN0YXJ0ZWQoKSB8fCBt
X2lzRXh0ZXJuYWxTY3JpcHQgfHwgd2FzSW5zZXJ0ZWRCeVBhcnNlcigpIHx8ICFtX2VsZW1lbnQt
PmluRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gbV93YXNBbHJlYWR5U3RhcnRlZCB8fCBtX2lzRXh0
ZXJuYWxTY3JpcHQgfHwgbV9wYXJzZXJJbnNlcnRlZCB8fCAhbV9lbGVtZW50LT5pbkRvY3VtZW50
KCk7CiB9CiAKLWJvb2wgU2NyaXB0RWxlbWVudDo6c2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgp
IGNvbnN0Citib29sIFNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVuQXJlQ29tbWVudHNPckVtcHR5VGV4
dCgpIGNvbnN0CiB7Ci0gICAgLyoKLSAgICAgICAgIE1vemlsbGEgMS44IGFjY2VwdHMgamF2YXNj
cmlwdDEuMCAtIGphdmFzY3JpcHQxLjcsIGJ1dCBXaW5JRSA3IGFjY2VwdHMgb25seSBqYXZhc2Ny
aXB0MS4xIC0gamF2YXNjcmlwdDEuMy4KLSAgICAgICAgIE1vemlsbGEgMS44IGFuZCBXaW5JRSA3
IGJvdGggYWNjZXB0IGphdmFzY3JpcHQgYW5kIGxpdmVzY3JpcHQuCi0gICAgICAgICBXaW5JRSA3
IGFjY2VwdHMgZWNtYXNjcmlwdCBhbmQganNjcmlwdCwgYnV0IE1vemlsbGEgMS44IGRvZXNuJ3Qu
Ci0gICAgICAgICBOZWl0aGVyIE1vemlsbGEgMS44IG5vciBXaW5JRSA3IGFjY2VwdCBsZWFkaW5n
IG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gICAgICAgICBXZSB3YW50IHRvIGFjY2VwdCBhbGwg
dGhlIHZhbHVlcyB0aGF0IGVpdGhlciBvZiB0aGVzZSBicm93c2VycyBhY2NlcHQsIGJ1dCBub3Qg
b3RoZXIgdmFsdWVzLgotICAgICAKLSAgICAgICAgIEZJWE1FOiBJcyB0aGlzIEhUTUw1IGNvbXBs
aWFudD8KLSAgICAgKi8KLSAgICBTdHJpbmcgdHlwZSA9IHR5cGVBdHRyaWJ1dGVWYWx1ZSgpOwot
ICAgIGlmICghdHlwZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZSh0eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxv
d2VyKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IFN0cmluZyBsYW5ndWFnZSA9IGxhbmd1YWdlQXR0cmlidXRlVmFsdWUoKTsKLSAgICAgICAgaWYg
KCFsYW5ndWFnZS5pc0VtcHR5KCkgJiYgIWlzU3VwcG9ydGVkSmF2YVNjcmlwdExhbmd1YWdlKGxh
bmd1YWdlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9ICAgIAotCi0gICAgLy8g
Tm8gdHlwZSBvciBsYW5ndWFnZSBpcyBzcGVjaWZpZWQsIHNvIHdlIGFzc3VtZSB0aGUgc2NyaXB0
IHRvIGJlIEphdmFTY3JpcHQuCi0KLSAgICBTdHJpbmcgZm9yQXR0cmlidXRlID0gZm9yQXR0cmli
dXRlVmFsdWUoKTsKLSAgICBTdHJpbmcgZXZlbnRBdHRyaWJ1dGUgPSBldmVudEF0dHJpYnV0ZVZh
bHVlKCk7Ci0gICAgaWYgKCFmb3JBdHRyaWJ1dGUuaXNFbXB0eSgpICYmICFldmVudEF0dHJpYnV0
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yQXR0cmlidXRlID0gZm9yQXR0cmlidXRlLnN0cmlw
V2hpdGVTcGFjZSgpOwotICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGZvckF0dHJpYnV0
ZSwgIndpbmRvdyIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0g
ICAgICAgIGV2ZW50QXR0cmlidXRlID0gZXZlbnRBdHRyaWJ1dGUuc3RyaXBXaGl0ZVNwYWNlKCk7
Ci0gICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoZXZlbnRBdHRyaWJ1dGUsICJvbmxvYWQi
KSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UoZXZlbnRBdHRyaWJ1dGUsICJvbmxvYWQoKSIpKQorICAg
IGZvciAoTm9kZSogbiA9IG1fZWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICBpZiAobi0+aXNDb21tZW50Tm9kZSgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgIFRl
eHQqIHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obik7CisgICAgICAgICAgICBpZiAodC0+bGVuZ3Ro
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IFN0cmluZyBTY3JpcHRFbGVtZW50OjpzY3JpcHRDaGFyc2V0KCkgY29uc3QKIHsKLSAgICAvLyBG
aXJzdCB3ZSB0cnkgdG8gZ2V0IGVuY29kaW5nIGZyb20gY2hhcnNldCBhdHRyaWJ1dGUuCi0gICAg
U3RyaW5nIGNoYXJzZXQgPSBjaGFyc2V0QXR0cmlidXRlVmFsdWUoKS5zdHJpcFdoaXRlU3BhY2Uo
KTsKLQotICAgIC8vIElmIGNoYXJzZXQgaGFzIG5vdCBiZWVuIGRlY2xhcmVkIGluIHNjcmlwdCB0
YWcsIGZhbGwgYmFjayB0byBmcmFtZSBlbmNvZGluZy4KLSAgICBpZiAoY2hhcnNldC5pc0VtcHR5
KCkpCi0gICAgICAgIGNoYXJzZXQgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNoYXJzZXQoKTsK
LQorICAgIFN0cmluZyBjaGFyc2V0OworICAgIGlmICghbV9jaGFyYWN0ZXJFbmNvZGluZy5pc0Vt
cHR5KCkpCisgICAgICAgIGNoYXJzZXQgPSBtX2NoYXJhY3RlckVuY29kaW5nOworICAgIGVsc2Ug
aWYgKCFtX2ZhbGxiYWNrQ2hhcmFjdGVyRW5jb2RpbmcuaXNFbXB0eSgpKQorICAgICAgICBjaGFy
c2V0ID0gbV9mYWxsYmFja0NoYXJhY3RlckVuY29kaW5nOwogICAgIHJldHVybiBjaGFyc2V0Owog
fQogCkBAIC0zMjUsMjAgKzM1Miw2IEBAIFN0cmluZyBTY3JpcHRFbGVtZW50OjpzY3JpcHRDb250
ZW50KCkgY29uc3QKICAgICByZXR1cm4gU3RyaW5nOjphZG9wdCh2YWwpOwogfQogCi1ib29sIFNj
cmlwdEVsZW1lbnQ6OmlzQXN5bmNocm9ub3VzKCkgY29uc3QKLXsKLSAgICAvLyBPbmx5IGV4dGVy
bmFsIHNjcmlwdHMgbWF5IGJlIGFzeW5jaHJvbm91cy4KLSAgICAvLyBTZWU6IGh0dHA6Ly9kZXYu
dzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNhdHRyLXNjcmlwdC1hc3luYwotICAgIHJl
dHVybiAhc291cmNlQXR0cmlidXRlVmFsdWUoKS5pc0VtcHR5KCkgJiYgYXN5bmNBdHRyaWJ1dGVW
YWx1ZSgpOwotfQotCi1ib29sIFNjcmlwdEVsZW1lbnQ6OmlzRGVmZXJyZWQoKSBjb25zdAotewot
ICAgIC8vIE9ubHkgZXh0ZXJuYWwgc2NyaXB0cyBtYXkgYmUgZGVmZXJyZWQgYW5kIGFzeW5jIHRy
dW1wcyBkZWZlciB0byBhbGxvdyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLSAgICAvLyBT
ZWU6IGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNhdHRyLXNjcmlw
dC1kZWZlcgotICAgIHJldHVybiAhc291cmNlQXR0cmlidXRlVmFsdWUoKS5pc0VtcHR5KCkgJiYg
IWFzeW5jQXR0cmlidXRlVmFsdWUoKSAmJiBkZWZlckF0dHJpYnV0ZVZhbHVlKCk7Ci19Ci0KIFNj
cmlwdEVsZW1lbnQqIHRvU2NyaXB0RWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogewogICAgIGlm
IChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnNjcmlwdFRhZykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAppbmRleCA1MjUwZjNl
MzM1NDk5MDkyOGY1NzU2MDFkMDEyMjNmNDBjNjUxNjA3Li5kYWI3YzllZGNhYzQyN2Q2N2NiNDQz
NTI2N2IxNWUyMGQ1Njk5NWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgKQEAgLTIz
LDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRp
b24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMSw1MiArMzIsNTcgQEAgY2xhc3Mg
RWxlbWVudDsKIGNsYXNzIFNjcmlwdEVsZW1lbnQ7CiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwog
CitlbnVtIExlZ2FjeVR5cGVTdXBwb3J0IHsgRGlzYWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmli
dXRlLCBBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUgfTsKKwogY2xhc3MgU2NyaXB0RWxl
bWVudCA6IHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIFNjcmlwdEVsZW1lbnQoRWxlbWVudCosIGJvb2wgY3Jl
YXRlZEJ5UGFyc2VyLCBib29sIGlzRXZhbHVhdGVkKTsKICAgICB2aXJ0dWFsIH5TY3JpcHRFbGVt
ZW50KCk7Ci0gICAgCisKICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9l
bGVtZW50OyB9CiAKKyAgICBib29sIHByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0aW9uMSYg
c2NyaXB0U3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpLCBM
ZWdhY3lUeXBlU3VwcG9ydCBzdXBwb3J0TGVnYWN5VHlwZXMgPSBEaXNhbGxvd0xlZ2FjeVR5cGVJ
blR5cGVBdHRyaWJ1dGUpOworCiAgICAgLy8gQSBjaGFyc2V0IGZvciBsb2FkaW5nIHRoZSBzY3Jp
cHQgKG1heSBiZSBvdmVycmlkZGVuIGJ5IEhUVFAgaGVhZGVycyBvciBhIEJPTSkuCiAgICAgU3Ry
aW5nIHNjcmlwdENoYXJzZXQoKSBjb25zdDsKIAogICAgIFN0cmluZyBzY3JpcHRDb250ZW50KCkg
Y29uc3Q7Ci0gICAgYm9vbCBzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkgY29uc3Q7CiAgICAg
dm9pZCBleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKICAgICB2b2lkIGV4
ZWN1dGUoQ2FjaGVkU2NyaXB0Kik7CiAKICAgICAvLyBYTUwgcGFyc2VyIGNhbGxzIHRoZXNlCi0g
ICAgdmlydHVhbCBTdHJpbmcgc291cmNlQXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoTG9hZEV2ZW50KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaEVycm9yRXZlbnQoKSA9IDA7CisgICAgYm9vbCBpc1NjcmlwdFR5cGVTdXBwb3J0ZWQo
TGVnYWN5VHlwZVN1cHBvcnQpIGNvbnN0OwogCiAgICAgYm9vbCBoYXZlRmlyZWRMb2FkRXZlbnQo
KSBjb25zdCB7IHJldHVybiBtX2hhdmVGaXJlZExvYWQ7IH0KKyAgICBib29sIHdpbGxCZVBhcnNl
ckV4ZWN1dGVkKCkgY29uc3QgeyByZXR1cm4gbV93aWxsQmVQYXJzZXJFeGVjdXRlZDsgfQorICAg
IGJvb2wgcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5VG9C
ZVBhcnNlckV4ZWN1dGVkOyB9CisgICAgYm9vbCB3aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlz
aGVkUGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRGaW5p
c2hlZFBhcnNpbmc7IH0KKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IGNh
Y2hlZFNjcmlwdCgpIHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0OyB9CiAKIHByb3RlY3RlZDoKICAg
ICB2b2lkIHNldEhhdmVGaXJlZExvYWRFdmVudChib29sIGhhdmVGaXJlZExvYWQpIHsgbV9oYXZl
RmlyZWRMb2FkID0gaGF2ZUZpcmVkTG9hZDsgfQotICAgIGJvb2wgd2FzSW5zZXJ0ZWRCeVBhcnNl
cigpIGNvbnN0IHsgcmV0dXJuIG1fd2FzSW5zZXJ0ZWRCeVBhcnNlcjsgfQorICAgIGJvb2wgaXNQ
YXJzZXJJbnNlcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VySW5zZXJ0ZWQ7IH0KICAgICBi
b29sIHdhc0FscmVhZHlTdGFydGVkKCkgY29uc3QgeyByZXR1cm4gbV93YXNBbHJlYWR5U3RhcnRl
ZDsgfQogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IG91ciBwYXJlbnQgY2xhc3Nl
cy4KLSAgICB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KGNvbnN0IFN0cmluZyYgc291cmNlVXJs
KTsKKyAgICB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdm9pZCByZW1vdmVkRnJv
bURvY3VtZW50KCk7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKLSAgICB2b2lkIGZpbmlz
aFBhcnNpbmdDaGlsZHJlbihjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7CiAgICAgdm9pZCBoYW5k
bGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOwogCiBwcml2YXRlOgog
ICAgIGJvb2wgaWdub3Jlc0xvYWRSZXF1ZXN0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FzeW5jaHJv
bm91cygpIGNvbnN0OwotICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0OworICAgIGJvb2wgY2hp
bGRyZW5BcmVDb21tZW50c09yRW1wdHlUZXh0KCkgY29uc3Q7CiAKLSAgICB2b2lkIHJlcXVlc3RT
Y3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOwotICAgIHZvaWQgZXZhbHVhdGVTY3JpcHQo
Y29uc3QgU2NyaXB0U291cmNlQ29kZSYpOworICAgIGJvb2wgcmVxdWVzdFNjcmlwdChjb25zdCBT
dHJpbmcmIHNvdXJjZVVybCk7CiAgICAgdm9pZCBzdG9wTG9hZFJlcXVlc3QoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOwogCisgICAgdmlydHVh
bCBTdHJpbmcgc291cmNlQXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBT
dHJpbmcgY2hhcnNldEF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgU3Ry
aW5nIHR5cGVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBs
YW5ndWFnZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwpAQCAtODQsMTMgKzkwLDIwIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgZXZlbnRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzU291cmNlQXR0cmlidXRlKCkgY29uc3QgPSAwOwogCiAgICAgRWxlbWVudCog
bV9lbGVtZW50OwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNo
ZWRTY3JpcHQ7Ci0gICAgYm9vbCBtX3dhc0luc2VydGVkQnlQYXJzZXI7CisgICAgYm9vbCBtX3Bh
cnNlckluc2VydGVkOworICAgIGJvb2wgbV93YXNQYXJzZXJJbnNlcnRlZDsKICAgICBib29sIG1f
aXNFeHRlcm5hbFNjcmlwdDsKICAgICBib29sIG1fd2FzQWxyZWFkeVN0YXJ0ZWQ7CiAgICAgYm9v
bCBtX2hhdmVGaXJlZExvYWQ7CisgICAgYm9vbCBtX3dpbGxCZVBhcnNlckV4ZWN1dGVkOyAvLyBT
YW1lIGFzICJUaGUgcGFyc2VyIHdpbGwgaGFuZGxlIGV4ZWN1dGluZyB0aGUgc2NyaXB0LiIKKyAg
ICBib29sIG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQ7CisgICAgYm9vbCBtX3dpbGxFeGVjdXRl
V2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nOworICAgIFN0cmluZyBtX2NoYXJhY3RlckVuY29k
aW5nOworICAgIFN0cmluZyBtX2ZhbGxiYWNrQ2hhcmFjdGVyRW5jb2Rpbmc7CiB9OwogCiBTY3Jp
cHRFbGVtZW50KiB0b1NjcmlwdEVsZW1lbnQoRWxlbWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRleCAxMGQ2ZTBkZTUyM2IxNWQx
OGIyNzUxOGRkNzQxOWRiMzRmOGFlMmZjLi44NWI4YzhkZTk0MzY1ZTUyMGE1NWY4NjQzNGJmNmI1
NjI2YTVkZDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJz
ZXJMaWJ4bWwyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJM
aWJ4bWwyLmNwcApAQCAtODgwLDM1ICs4ODAsMzIgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
ZW5kRWxlbWVudE5zKCkKICAgICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7CiAgICAgbV9yZXF1
ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsKIAorICAgIGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBz
Y3JpcHRFbGVtZW50LT5wcmVwYXJlU2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgQWxsb3dM
ZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKTsKKyAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBhcmVk
KSB7CiAjaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgaWYgKCFzY3JpcHRFbGVtZW50LT5zaG91bGRF
eGVjdXRlQXNKYXZhU2NyaXB0KCkpCi0gICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFByb2Nl
c3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7Ci0gICAgZWxzZQorICAgICAgICBpZiAoIXNjcmlwdEVs
ZW1lbnQtPmlzU2NyaXB0VHlwZVN1cHBvcnRlZChBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1
dGUpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxl
bWVudCh0cnVlKTsKICNlbmRpZgotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFNjcmlwdCBleGVj
dXRpb24gc2hvdWxkIGJlIHNoYXJlZCBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4KKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBGSVhNRTogU2NyaXB0IGV4ZWN1dGlvbiBzaG91bGQgYmUgc2hhcmVk
IGJldHdlZW4KICAgICAgICAgLy8gdGhlIGxpYnhtbDIgYW5kIFF0IFhNTERvY3VtZW50UGFyc2Vy
IGltcGxlbWVudGF0aW9ucy4KIAogICAgICAgICAvLyBKYXZhU2NyaXB0IGNhbiBkZXRhY2ggdGhl
IHBhcnNlci4gIE1ha2Ugc3VyZSB0aGlzIGlzIG5vdCByZWxlYXNlZAogICAgICAgICAvLyBiZWZv
cmUgdGhlIGVuZCBvZiB0aGlzIG1ldGhvZC4KICAgICAgICAgUmVmUHRyPFhNTERvY3VtZW50UGFy
c2VyPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgICAgIFN0cmluZyBzY3JpcHRIcmVmID0gc2NyaXB0
RWxlbWVudC0+c291cmNlQXR0cmlidXRlVmFsdWUoKTsKLSAgICAgICAgaWYgKCFzY3JpcHRIcmVm
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gd2UgaGF2ZSBhIHNyYyBhdHRyaWJ1dGUKLSAg
ICAgICAgICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0ID0gc2NyaXB0RWxlbWVudC0+c2NyaXB0Q2hh
cnNldCgpOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50
KHNjcmlwdEhyZWYpICYmCi0gICAgICAgICAgICAgICAgKG1fcGVuZGluZ1NjcmlwdCA9IGRvY3Vt
ZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQoc2NyaXB0SHJlZiwg
c2NyaXB0Q2hhcnNldCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxl
bWVudDsKLSAgICAgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsK
LQotICAgICAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0
IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgcmVmKCkgZXhlY3V0ZWQgaXQKLSAgICAgICAgICAgICAg
ICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAgICAgICAgICBwYXVzZVBhcnNpbmco
KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9
IDA7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0Jl
UGFyc2VyRXhlY3V0ZWQoKSkKICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3Jp
cHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3Vt
ZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAo
c2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSkgeworICAgICAgICAgICAgbV9w
ZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7CisgICAgICAgICAg
ICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0
LT5hZGRDbGllbnQodGhpcyk7CisKKyAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxs
IGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0
ZWQgaXQuCisgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICAgICAgICAg
IHBhdXNlUGFyc2luZygpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc2NyaXB0RWxl
bWVudCA9IDA7CiAKICAgICAgICAgLy8gSmF2YVNjcmlwdCBtYXkgaGF2ZSBkZXRhY2hlZCB0aGUg
cGFyc2VyCiAgICAgICAgIGlmIChpc0RldGFjaGVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vWE1M
RG9jdW1lbnRQYXJzZXJRdC5jcHAKaW5kZXggZDBiZjg4ZGM3MWFmNTE0ZTQ1MzcwMzFkMTlhMjcz
NTU2ZWRlMDQyMi4uOTlhZmFkYjEzOWUwNWY1ZjAxNTUzMmEzNDNmY2EzOGM3NWRlODFjYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApAQCAtNTg4LDI4ICs1
ODgsMjUgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VFbmRFbGVtZW50KCkKICAgICBB
U1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsK
IAorICAgIGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVtZW50LT5wcmVwYXJl
U2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgQWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmli
dXRlKTsKKyAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBhcmVkKSB7CiAjaWYgRU5BQkxFKFhIVE1M
TVApCi0gICAgaWYgKCFzY3JpcHRFbGVtZW50LT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkp
Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1
ZSk7Ci0gICAgZWxzZQorICAgICAgICBpZiAoIXNjcmlwdEVsZW1lbnQtPmlzU2NyaXB0VHlwZVN1
cHBvcnRlZChBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpKQorICAgICAgICAgICAgZG9j
dW1lbnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKICNlbmRpZgot
ICAgIHsKLSAgICAgICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3JpcHRFbGVtZW50LT5zb3VyY2VB
dHRyaWJ1dGVWYWx1ZSgpOwotICAgICAgICBpZiAoIXNjcmlwdEhyZWYuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZQotICAgICAgICAgICAgU3RyaW5n
IHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Ci0gICAgICAg
ICAgICBpZiAoZWxlbWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoc2NyaXB0SHJlZikgJiYK
LSAgICAgICAgICAgICAgICAobV9wZW5kaW5nU2NyaXB0ID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzY3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0KSkp
IHsKLSAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAg
ICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotCi0gICAgICAgICAgICAg
ICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUgMCBpZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9h
ZGVkIGFuZCByZWYoKSBleGVjdXRlZCBpdAotICAgICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdT
Y3JpcHQpCi0gICAgICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKLSAgICAgICAgfSBl
bHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBh
cnNlckV4ZWN1dGVkKCkpCiAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0
KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVu
dCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CisgICAgICAgIGVsc2UgaWYgKHNj
cmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpIHsKKyAgICAgICAgICAgIG1fcGVu
ZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpOworICAgICAgICAgICAg
bV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+
YWRkQ2xpZW50KHRoaXMpOworCisgICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBi
ZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIGFkZENsaWVudCgpIGV4ZWN1dGVk
IGl0LgorICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKKyAgICAgICAgICAgICAgICBw
YXVzZVBhcnNpbmcoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3NjcmlwdEVsZW1l
bnQgPSAwOwogICAgIH0KICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICBwb3BD
dXJyZW50Tm9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcApp
bmRleCA2MDNiMmE4ZWVkYmU3NTJlZjcyZDFhZTMyYWFiOWVkODVmMDM2YzYxLi5kNjQ2ODllN2Uz
YjA1NWQxMjI4NTYxYTY2ZGI0YmZlNzlkMmE1NTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTY3JpcHRFbGVtZW50LmNwcApAQCAtNzQsMTYgKzc0LDEwIEBAIHZvaWQgSFRNTFNjcmlwdEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKICAgICAgICAgSFRN
TEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi12b2lkIEhUTUxTY3Jp
cHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQotewotICAgIFNjcmlwdEVsZW1lbnQ6
OmZpbmlzaFBhcnNpbmdDaGlsZHJlbihzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKTsKLSAgICBIVE1M
RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci19Ci0KIHZvaWQgSFRNTFNjcmlwdEVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVu
dChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKTsKKyAgICBTY3JpcHRFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudCgpOwogfQogCiB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpyZW1vdmVkRnJvbURv
Y3VtZW50KCkKQEAgLTE2MCw2ICsxNTQsMTEgQEAgYm9vbCBIVE1MU2NyaXB0RWxlbWVudDo6ZGVm
ZXJBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoZGVm
ZXJBdHRyKTsKIH0KIAorYm9vbCBIVE1MU2NyaXB0RWxlbWVudDo6aGFzU291cmNlQXR0cmlidXRl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShzcmNBdHRyKTsKK30KKwog
dm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hMb2FkRXZlbnQoKQogewogICAgIEFTU0VS
VCghaGF2ZUZpcmVkTG9hZEV2ZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2NyaXB0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxl
bWVudC5oCmluZGV4IDA5NzczYzVmYmM2NDUwZWE4N2FlODRjZTFkMjU3ZDZlMmFlODU3YWYuLjNj
MTY0NzM5N2IxOTc5MWJmMDdjNzk1Mzk5MTUyNzFmZWRjZTRiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTY3JpcHRFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDYgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2Us
IE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxk
Q291bnREZWx0YSA9IDApOwogCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJp
YnV0ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hT
ZXQ8S1VSTD4mKSBjb25zdDsKIApAQCAtNTksNiArNTgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgU3RyaW5nIGV2ZW50QXR0cmlidXRlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
YXN5bmNBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBkZWZlckF0dHJp
YnV0ZVZhbHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc1NvdXJjZUF0dHJpYnV0ZSgp
IGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTG9hZEV2ZW50KCk7CiAgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCBjOTk4NThkMGNmZTVmM2NlOGYyMDI5
ZGM5ZWFmZmYxOGRlZTlkYTgxLi45OWZmZjVlZjllNWUxYjQxZDExMzkxOGJmMjE4OTVjZjc1ZWE3
OTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVu
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVy
LmNwcApAQCAtMjYyLDE3ICsyNjIsOSBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RE
ZWZlcnJlZFNjcmlwdChFbGVtZW50KiBlbGVtZW50KQogYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpy
ZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0LCBFbGVtZW50
KiBzY3JpcHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFwZW5kaW5nU2NyaXB0LmVsZW1lbnQoKSk7
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBzcmNWYWx1ZSA9IHNjcmlwdC0+Z2V0QXR0cmlidXRl
KHNyY0F0dHIpOwotICAgIC8vIEFsbG93IHRoZSBob3N0IHRvIGRpc2xsb3cgc2NyaXB0IGxvYWRz
ICh1c2luZyB0aGUgWFNTQXVkaXRvciwgZXRjLikKLSAgICAvLyBGSVhNRTogdGhpcyBjaGVjayBz
aG91bGQgYmUgcGVyZm9ybWVkIG9uIHRoZSBmaW5hbCBVUkwgaW4gYSByZWRpcmVjdCBjaGFpbi4K
LSAgICBpZiAoIW1faG9zdC0+c2hvdWxkTG9hZEV4dGVybmFsU2NyaXB0RnJvbVNyYyhzcmNWYWx1
ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZXNv
bHZlIHRoZSB1cmwgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQuCi0gICAgaWYgKCFzY3JpcHQtPmRp
c3BhdGNoQmVmb3JlTG9hZEV2ZW50KHNyY1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHBlbmRpbmdTY3JpcHQuc2V0RWxlbWVudChzY3JpcHQpOwogICAgIC8vIFRoaXMgc2hvdWxk
IGNvcnJlY3RseSByZXR1cm4gMCBmb3IgZW1wdHkgb3IgaW52YWxpZCBzcmNWYWx1ZXMuCi0gICAg
Q2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQgPSBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNyY1ZhbHVlLCB0b1NjcmlwdEVsZW1lbnQoc2NyaXB0KS0+
c2NyaXB0Q2hhcnNldCgpKTsKKyAgICBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCA9IHRvU2Ny
aXB0RWxlbWVudChzY3JpcHQpLT5jYWNoZWRTY3JpcHQoKS5nZXQoKTsKICAgICBpZiAoIWNhY2hl
ZFNjcmlwdCkgewogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBEaXNwYXRjaCBlcnJvciBl
dmVudC4KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjkzLDI5ICsyODUsMjQgQEAgdm9pZCBI
VE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0LCBjb25zdCBUZXh0UG9z
aXRpb24xJiBzY3JpcHRTdGEKIAogICAgICAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50
ID0gdG9TY3JpcHRFbGVtZW50KHNjcmlwdCk7CiAgICAgICAgIEFTU0VSVChzY3JpcHRFbGVtZW50
KTsKLSAgICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0
KCkpCisKKyAgICAgICAgc2NyaXB0RWxlbWVudC0+cHJlcGFyZVNjcmlwdChzY3JpcHRTdGFydFBv
c2l0aW9uKTsKKworICAgICAgICBpZiAoIXNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1
dGVkKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoc2NyaXB0
LT5oYXNBdHRyaWJ1dGUoc3JjQXR0cikpIHsKLSAgICAgICAgICAgIGlmIChzY3JpcHQtPmhhc0F0
dHJpYnV0ZShhc3luY0F0dHIpKSAvLyBBc3luYyB0YWtlcyBwcmVjZW5kZW5jZSBvdmVyIGRlZmVy
LgotICAgICAgICAgICAgICAgIHJldHVybjsgLy8gQXN5bmNocm9ub3VzIHNjcmlwdHMgaGFuZGxl
IHRoZW1zZWx2ZXMuCi0KLSAgICAgICAgICAgIGlmIChzY3JpcHQtPmhhc0F0dHJpYnV0ZShkZWZl
ckF0dHIpKQotICAgICAgICAgICAgICAgIHJlcXVlc3REZWZlcnJlZFNjcmlwdChzY3JpcHQpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJzaW5nQmxvY2tpbmdT
Y3JpcHQoc2NyaXB0KTsKLSAgICAgICAgfSBlbHNlIGlmICghbV9kb2N1bWVudC0+aGF2ZVN0eWxl
c2hlZXRzTG9hZGVkKCkgJiYgbV9zY3JpcHROZXN0aW5nTGV2ZWwgPT0gMSkgewotICAgICAgICAg
ICAgLy8gQmxvY2sgaW5saW5lIHNjcmlwdCBleGVjdXRpb24gb24gc3R5bGVzaGVldCBsb2FkLCB1
bmxlc3Mgd2UgYXJlIGluIGRvY3VtZW50LndyaXRlKCkuCi0gICAgICAgICAgICAvLyBUaGUgbGF0
dGVyIGNhc2UgY2FuIG9ubHkgaGFwcGVuIGlmIGEgc2NyaXB0IGJvdGggdHJpZ2dlcnMgYSBzdHls
ZXNoZWV0IGxvYWQKLSAgICAgICAgICAgIC8vIGFuZCB3cml0ZXMgYW4gaW5saW5lIHNjcmlwdC4g
U2luY2Ugd3JpdGUgaXMgYmxvY2tpbmcgd2UgaGF2ZSB0byBleGVjdXRlIHRoZQotICAgICAgICAg
ICAgLy8gd3JpdHRlbiBzY3JpcHQgaW1tZWRpYXRlbHksIGlnbm9yaW5nIHRoZSBwZW5kaW5nIHNo
ZWV0cy4KLSAgICAgICAgICAgIG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0LnNldEVsZW1lbnQoc2Ny
aXB0KTsKLSAgICAgICAgICAgIG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0LnNldFN0YXJ0aW5nUG9z
aXRpb24oc2NyaXB0U3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoaXNFeGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAgICAgICAgICBTY3JpcHRTb3VyY2VD
b2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlw
dEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7Ci0gICAgICAgICAg
ICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwotICAgICAgICB9CisK
KyAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNo
ZWRQYXJzaW5nKCkpCisgICAgICAgICAgICByZXF1ZXN0RGVmZXJyZWRTY3JpcHQoc2NyaXB0KTsK
KyAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQo
KSkgeworICAgICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGluZ0xldmVsID09IDEpIHsKKyAgICAg
ICAgICAgICAgICBtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdC5zZXRFbGVtZW50KHNjcmlwdCk7Cisg
ICAgICAgICAgICAgICAgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuc2V0U3RhcnRpbmdQb3NpdGlv
bihzY3JpcHRTdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRlbnQoKSwg
ZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdFN0YXJ0UG9z
aXRpb24pOworICAgICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291
cmNlQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVx
dWVzdFBhcnNpbmdCbG9ja2luZ1NjcmlwdChzY3JpcHQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4IGJhYmIxZTcyYjYzMjA1ZDE3YzM2YTAx
MzI5MWUyNDE1MzdmODJlZTAuLjdkMjU1ZjkwMjhlYzFlYzkyOGYxODRiZjUwYjBiMDExYWQ0ZmE1
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAKQEAgLTcyLDcgKzcy
LDcgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICAvLyBIYW5kbGUgZHluYW1pYyB1cGRhdGVz
IG9mIHRoZSAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcgYXR0cmlidXRlLiBPbmx5IHBvc3Np
YmxlIGNhc2U6IGNoYW5naW5nIGZyb20gJ3RydWUnIHRvICdmYWxzZScKICAgICAgICAgLy8gY2F1
c2VzIGFuIGltbWVkaWF0ZSBkaXNwYXRjaCBvZiB0aGUgU1ZHTG9hZCBldmVudC4gSWYgdGhlIGF0
dHJpYnV0ZSB2YWx1ZSB3YXMgJ2ZhbHNlJyBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBzY3JpcHQgZWxl
bWVudAogICAgICAgICAvLyBpbiB0aGUgZG9jdW1lbnQsIHRoZSBTVkdMb2FkIGV2ZW50IGhhcyBh
bHJlYWR5IGJlZW4gZGlzcGF0Y2hlZC4KLSAgICAgICAgaWYgKCFleHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkQmFzZVZhbHVlKCkgJiYgIWhhdmVGaXJlZExvYWRFdmVudCgpICYmICF3YXNJbnNlcnRl
ZEJ5UGFyc2VyKCkpIHsKKyAgICAgICAgaWYgKCFleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQmFz
ZVZhbHVlKCkgJiYgIWhhdmVGaXJlZExvYWRFdmVudCgpICYmICFpc1BhcnNlckluc2VydGVkKCkp
IHsKICAgICAgICAgICAgIHNldEhhdmVGaXJlZExvYWRFdmVudCh0cnVlKTsKICAgICAgICAgICAg
IEFTU0VSVChoYXZlTG9hZGVkUmVxdWlyZWRSZXNvdXJjZXMoKSk7CiAKQEAgLTExMSw5ICsxMTEs
OSBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1h
cCgpCiB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAg
ICBTVkdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIFNjcmlwdEVsZW1lbnQ6
Omluc2VydGVkSW50b0RvY3VtZW50KHNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkpOworICAgIFNjcmlw
dEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAKLSAgICBpZiAod2FzSW5zZXJ0ZWRC
eVBhcnNlcigpKQorICAgIGlmIChpc1BhcnNlckluc2VydGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEV2ZW50dWFsbHkgc2VuZCBTVkdMb2FkIGV2ZW50IG5vdyBmb3IgdGhlIGR5bmFt
aWNhbGx5IGluc2VydGVkIHNjcmlwdCBlbGVtZW50CkBAIC0xNDIsNyArMTQyLDYgQEAgYm9vbCBT
VkdTY3JpcHRFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpIGNvbnN0CiAK
IHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKIHsKLSAgICBT
Y3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oc291cmNlQXR0cmlidXRlVmFsdWUo
KSk7CiAgICAgU1ZHRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiAKICAgICAvLyBB
IFNWR0xvYWQgZXZlbnQgaGFzIGJlZW4gZmlyZWQgYnkgU1ZHRWxlbWVudDo6ZmluaXNoUGFyc2lu
Z0NoaWxkcmVuLgpAQCAtMjEyLDExICsyMTEsMTYgQEAgYm9vbCBTVkdTY3JpcHRFbGVtZW50Ojpk
ZWZlckF0dHJpYnV0ZVZhbHVlKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wg
U1ZHU2NyaXB0RWxlbWVudDo6aGFzU291cmNlQXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaGFzQXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKK30KKwogdm9pZCBTVkdTY3Jp
cHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVudCgpCiB7CiAgICAgYm9vbCBleHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkID0gZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEJhc2VWYWx1ZSgpOwogCi0g
ICAgaWYgKHdhc0luc2VydGVkQnlQYXJzZXIoKSkKKyAgICBpZiAoaXNQYXJzZXJJbnNlcnRlZCgp
KQogICAgICAgICBBU1NFUlQoZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCAhPSBoYXZlRmlyZWRM
b2FkRXZlbnQoKSk7CiAgICAgZWxzZSBpZiAoaGF2ZUZpcmVkTG9hZEV2ZW50KCkpIHsKICAgICAg
ICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmaXJlZCBhbiBsb2FkIGV2ZW50IGFuZCBleHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkIGlzIHNldCB0byAndHJ1ZScKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0
RWxlbWVudC5oCmluZGV4IGRhYmVjNzk2ZGQ1YWEwMDUzMmI4OTk2NGMwNmEzOGVhM2IyN2MwN2Qu
LmM1MmRhY2ZjOGJjNzkxMTk1NGU5YmZmYzNlZTFkYzcwMTE5MTUyNWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1NjcmlwdEVsZW1lbnQuaApAQCAtNjgsNiArNjgsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgU3RyaW5nIGV2ZW50QXR0cmlidXRlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBkZWZlckF0
dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc1NvdXJjZUF0dHJpYnV0
ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTG9hZEV2ZW50KCk7CiAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82855</attachid>
            <date>2011-02-17 13:29:43 -0800</date>
            <delta_ts>2011-02-17 16:44:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54676-20110217132942.patch</filename>
            <type>text/plain</type>
            <size>42169</size>
            <attacher name="James Simonsen">simonjam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1OTI3YzVlMDVkMjIwODg4MWQ5YTYxYmY0YWMwYmE0ZjgxOTZjYmI2Li40NDFiYTM2
ZjRjMWJiNGExYWVkZTRlYmYwMWFkNmM1NzFmNWE4NDZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAK
KzIwMTEtMDItMTYgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgU2NyaXB0
RWxlbWVudCBtYXRjaCB0aGUgSFRNTDUgc3BlYworCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB0
aGUgInByZXBhcmUgYSBzY3JpcHQiIHNlY3Rpb24gb2YgdGhlIEhUTUw1IHNwZWMgaW4gU2NyaXB0
RWxlbWVudDo6cHJlcGFyZVNjcmlwdCgpLgorICAgICAgICBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI3By
ZXBhcmUtYS1zY3JpcHQKKworICAgICAgICBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIG1p
c3NpbmcgZnJvbSB0aGUgc3BlYyB0aGF0IHdvdWxkIGJlIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGVz
ZSB3aWxsIGJlIGFkZGVkIGxhdGVyLgorICAgICAgICAtIFN1cHBvcnQgZm9yIGFzeW5jPWZhbHNl
CisgICAgICAgIC0gRW1wdHkgc3JjIGF0dHJpYnV0ZSBzaG91bGQgZGlzcGF0Y2ggYW4gZXJyb3Iu
CisKKyAgICAgICAgVGhlcmUgYXJlIGEgY291cGxlIG9mIHNsaWdodCBiZWhhdmlvcmFsIGNoYW5n
ZXMgdG8gbWF0Y2ggdGhlIHNwZWMuCisgICAgICAgIC0gQW4gWEhUTUwgc2NyaXB0IHRoYXQgaXMg
bG9hZGVkIHRoZW4gY29waWVkIHdpbGwgbm90IGZpcmUgbG9hZCBvbiB0aGUgY29weS4KKyAgICAg
ICAgLSBJZiBvbmJlZm9yZWxvYWQgbW92ZXMgdGhlIHNjcmlwdCB0byBhIGRpZmZlcmVudCBkb2N1
bWVudCwgdGhlbiBpdCB3aWxsIG5vdCB0cnkgdG8gZXhlY3V0ZSBhZ2FpbiBiZWNhdXNlIHdhc0Fs
cmVhZHlTdGFydGVkIGlzIHRydWUuCisKKyAgICAgICAgVGhlIHBhcnNlcnMgd2VyZSB1cGRhdGVk
IHRvIHVzZSB0aGUgbmV3IEFQSSwgYnV0IG5vdCByZXdyaXR0ZW4gdG8gbG9vayBsaWtlIHRoZSBz
cGVjLiBUaGF0IHdpbGwgYmUgZG9uZSBzZXBhcmF0ZWx5LgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY3NgorCisgICAgICAgICogZmFzdC9kb20v
SFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZvcmVsb2FkLmh0bWw6IE9yaWdpbmFsIGF1dGhv
ciBzYXlzIHRlc3Qgd2FzIG9ubHkgbWVhbnQgdG8gY2hlY2sgZm9yIGNyYXNoZXMuIEJlZm9yZWxv
YWQgaXMgbm90IHNwZWNpZmllZCBieSBIVE1MNS4gVGVzdCB3YXMgbW9kaWZpZWQgdG8gYXNzdW1l
IG1vdmVkIHNjcmlwdCB3b3VsZG4ndCBleGVjdXRlIGJlY2F1c2Ugd2FzQWxyZWFkeVN0YXJ0ZWQg
aXMgc2V0LgorICAgICAgICAqIGZhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWw6
IEFjY29yZGluZyB0byBIVE1MNSBzcGVjLCBsb2FkIHNob3VsZCBvbmx5IGZpcmUgYWZ0ZXIgYSBz
Y3JpcHQgZXhlY3V0ZXMuIFRlc3Qgd2FzIG1vZGlmaWVkIHRvIG1hdGNoIHRoYXQuIFRoZSBvbGQg
YnJva2VuIGJlaGF2aW9yIHdhcyB0aGF0IGxvYWQgZmlyZWQgb24gdGhlIGNsb25lZCBlbGVtZW50
LCBldmVuIHRob3VnaCBpdCBkaWRuJ3QgZXhlY3V0ZS4KKwogMjAxMS0wMi0xNyAgUGhpbGlwcGUg
Tm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmVi
YXNlbGluZSBHVEsgdGVzdCByZXN1bHRzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vSFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZvcmVsb2FkLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRtbAppbmRl
eCA3N2JlZWQwNmIzODJkZjU0NzUzZmYxYjY2MTlkYzRmNzBmOTU5NTEzLi5kOGY4OWYzZDRjYTJm
MjljNDM1ZWU5YmIxZTViNTUzNDk4NWZlMGUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRt
bApAQCAtOCw3ICs4LDYgQEAKIDxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvZnJhbWUuaHRtbCI+PC9p
ZnJhbWU+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CiB9CiAKQEAgLTE4LDE0ICsxNyw3IEBAIGZ1bmN0aW9uIHRl
c3QoKQogICAgIHMuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlbG9hZCIsIGZ1bmN0aW9uKCkgewog
ICAgICAgICB2YXIgcyA9IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzJdKTsKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoImlmcmFtZSIpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KHMpOwotICAgIH0sIGZhbHNlKTsKLSAgICBzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoImVycm9yIGV2ZW50IHNob3VsZCBub3QgZmly
ZS4iKQotICAgIH0sIGZhbHNlKTsKLSAgICBzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5j
dGlvbigpIHsKICAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CiAgICAgfSwgZmFsc2UpOwogICAgIHMuc3JjID0gImV4dGVybmFsLmpzIjsKICAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNyYy54aHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWwKaW5kZXggZWRiZTgyOWFjOWFmMzhkNGQz
MDUzMTY1MmYxYmIyNjgzODE3ZmVkZC4uYjFkNTk2YTBiMTRjMTUyNjc3ZjVjMjMzMWZlNjYxYzg0
MzczNzRmYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJl
cnVuLXNyYy54aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtY2xvbmUtcmVy
dW4tc3JjLnhodG1sCkBAIC05LDcgKzksNiBAQCB2YXIgaSA9IDA7CiAKIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogfQogCiB2YXIg
Zmlyc3RMb2FkID0gdHJ1ZTsKQEAgLTI2LDggKzI1LDYgQEAgZnVuY3Rpb24gbG9hZGVkKCkgewog
ICAgIGVsc2UgaWYgKGkgPiAyKQogICAgICAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4gJyAr
IGkgKyAnIHRpbWVzJzsKICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHJlc3VsdCkpOwotCi0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOwogfQogCiA8L3NjcmlwdD4KQEAgLTQyLDYgKzM5LDggQEAgdmFyIGRpdiA9IHNjcmlw
dC5wYXJlbnROb2RlOwogZGl2LnJlbW92ZUNoaWxkKHNjcmlwdCk7CiBkaXYuYXBwZW5kQ2hpbGQo
c2NyaXB0LmNsb25lTm9kZSh0cnVlKSk7CiAKK2xvYWRlZCgpOworCiA8L3NjcmlwdD4KIDwvYm9k
eT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZTdiOWUwMjg5MjhkOGJkYzk5OGYzYTJjN2UzYTI3
MWYzNWIzZjYwLi4yNjllMmUxNWYzMzhmN2UzMmI5ZWE4YTI0NjMzMGVjOWVmNDc4MzUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDItMTYgIEphbWVzIFNpbW9uc2VuICA8c2lt
b25qYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1ha2UgU2NyaXB0RWxlbWVudCBtYXRjaCB0aGUgSFRNTDUgc3BlYworCisg
ICAgICAgIFRoaXMgaW1wbGVtZW50cyB0aGUgInByZXBhcmUgYSBzY3JpcHQiIHNlY3Rpb24gb2Yg
dGhlIEhUTUw1IHNwZWMgaW4gU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdCgpLgorICAgICAg
ICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRp
cGFnZS9zY3JpcHRpbmctMS5odG1sI3ByZXBhcmUtYS1zY3JpcHQKKworICAgICAgICBUaGVyZSBh
cmUgYSBjb3VwbGUgb2YgdGhpbmdzIG1pc3NpbmcgZnJvbSB0aGUgc3BlYyB0aGF0IHdvdWxkIGJl
IG5ldyBmdW5jdGlvbmFsaXR5LiBUaGVzZSB3aWxsIGJlIGFkZGVkIGxhdGVyLgorICAgICAgICAt
IFN1cHBvcnQgZm9yIGFzeW5jPWZhbHNlCisgICAgICAgIC0gRW1wdHkgc3JjIGF0dHJpYnV0ZSBz
aG91bGQgZGlzcGF0Y2ggYW4gZXJyb3IuCisKKyAgICAgICAgVGhlcmUgYXJlIGEgY291cGxlIG9m
IHNsaWdodCBiZWhhdmlvcmFsIGNoYW5nZXMgdG8gbWF0Y2ggdGhlIHNwZWMuCisgICAgICAgIC0g
QW4gWEhUTUwgc2NyaXB0IHRoYXQgaXMgbG9hZGVkIHRoZW4gY29waWVkIHdpbGwgbm90IGZpcmUg
bG9hZCBvbiB0aGUgY29weS4KKyAgICAgICAgLSBJZiBvbmJlZm9yZWxvYWQgbW92ZXMgdGhlIHNj
cmlwdCB0byBhIGRpZmZlcmVudCBkb2N1bWVudCwgdGhlbiBpdCB3aWxsIG5vdCB0cnkgdG8gZXhl
Y3V0ZSBhZ2FpbiBiZWNhdXNlIHdhc0FscmVhZHlTdGFydGVkIGlzIHRydWUuCisKKyAgICAgICAg
VGhlIHBhcnNlcnMgd2VyZSB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IEFQSSwgYnV0IG5vdCByZXdy
aXR0ZW4gdG8gbG9vayBsaWtlIHRoZSBzcGVjLiBUaGF0IHdpbGwgYmUgZG9uZSBzZXBhcmF0ZWx5
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY3
NgorCisgICAgICAgIFRlc3Q6IEFsbCBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9T
Y3JpcHRFbGVtZW50LmNwcDogUmV3cml0dGVuIHRvIG1hdGNoIEhUTUw1IHNwZWMuCisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpTY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KTogTG9naWMgbW92ZWQgdG8g
cHJlcGFyZVNjcmlwdC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVu
Q2hhbmdlZCk6IExvZ2ljIG1vdmVkIHRvIHByZXBhcmVTY3JpcHQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRFbGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1dGUpOiBMb2dpYyBtb3ZlZCB0byBw
cmVwYXJlU2NyaXB0LgorICAgICAgICAoV2ViQ29yZTo6aXNMZWdhY3lTdXBwb3J0ZWRKYXZhU2Ny
aXB0TGFuZ3VhZ2UpOiBBZGRlZCB0byBzdXBwb3J0IG9sZCBzY3JpcHQgdHlwZXMgaW4gbGF5b3V0
IHRlc3RzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aXNTY3JpcHRUeXBlU3Vw
cG9ydGVkKTogRGVyaXZlZCBmcm9tIG9sZCBzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpwcmVwYXJlU2NyaXB0KTogU1RBUlQgSEVS
RS4gTWFpbiBjaGFuZ2UuIFNob3VsZCByZWFkIGV4YWN0bHkgbGlrZSBIVE1MNSdzICJwcmVwYXJl
IGEgc2NyaXB0LiIgTGVnYWN5IHR5cGUgc3VwcG9ydCBuZWVkZWQgZm9yIGxheW91dCB0ZXN0cyB1
c2luZyBYTUwgcGFyc2VyLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6cmVxdWVz
dFNjcmlwdCk6IE1vc3QgbG9naWMgbW92ZWQgdG8gcHJlcGFyZVNjcmlwdC4gQ2hlY2sgc2VjdXJp
dHkgc2V0dGluZ3MgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1
dGVTY3JpcHQpOiBDb21iaW5lZCBldmFsdWF0ZVNjcmlwdCgpIGFuZCBleGVjdXRlU2NyaXB0KCkg
ZnJvbSBvbGQgY29kZS4gTG9naWMgbW92ZWQgdG8gcHJlcGFyZVNjcmlwdC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnN0b3BMb2FkUmVxdWVzdCk6IElnbm9yZSBwYXJzZXIgZXhl
Y3V0ZWQgc2NyaXB0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGUp
OiBSZW5hbWVkIGV4ZWN1dGVTY3JpcHQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50
Ojpub3RpZnlGaW5pc2hlZCk6IFdlIHNob3VsZCBvbmx5IGxpc3RlbiBmb3Igbm9uLXBhcnNlciBl
eGVjdXRlZCBzY3JpcHRzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aWdub3Jl
c0xvYWRSZXF1ZXN0KTogTmV3IHZhcmlhYmxlIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RWxlbWVudDo6Y2hpbGRyZW5BcmVDb21tZW50c09yRW1wdHlUZXh0KTogQWRkZWQgZm9yIEhU
TUw1IGNvbXBsaWFuY2UuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpzY3JpcHRD
aGFyc2V0KTogVXNlIEhUTUw1IHZhcmlhYmxlcy4KKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6d2lsbEJlUGFyc2VyRXhlY3V0
ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnJlYWR5VG9CZVBh
cnNlckV4ZWN1dGVkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojp3
aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZyk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6Y2FjaGVkU2NyaXB0KTogcHJlcGFyZVNjcmlwdCgpIGlz
IHRoZSBvbmx5IHBsYWNlIHRoYXQgc2hvdWxkIGxvYWQgc2NyaXB0cy4gVGhpcyBhY2Nlc3NvciBs
ZXRzIHRoZSBwYXJzZXJzIGxpc3RlbiBmb3Igd2hlbiBsb2FkcyBmaW5pc2guCisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojppc1BhcnNlckluc2VydGVkKTogQWRkZWQuCisgICAgICAg
ICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpY
TUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKTogU2hvdWxkIGJlaGF2ZSB0aGUgc2FtZS4g
T2ZmbG9hZHMgbXVjaCBvZiBpdHMgd29yayB0byBwcmVwYXJlU2NyaXB0KCkuCisgICAgICAgICog
ZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCk6IElkZW50aWNhbCB0byBsaWJ4bWwyIGNoYW5nZXMu
CisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBObyBsb25nZXIgbmVl
ZHMgdXJsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6Omhhc1NvdXJjZUF0
dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KTogUmVxdWVzdGluZyBz
Y3JpcHRzIG9mZmxvYWRlZCB0byBTY3JpcHRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KTogU2hvdWxkIGJlaGF2ZSB0aGUgc2FtZS4gT2ZmbG9h
ZHMgbXVjaCBvZiBpdHMgd29yayB0byBwcmVwYXJlU2NyaXB0KCkuCisgICAgICAgICogc3ZnL1NW
R1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZCk6IE5ldyBTY3JpcHRFbGVtZW50IGZ1bmN0aW9uIG5hbWVzLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQp
OiBObyBsb25nZXIgbmVlZHMgdXJsLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVu
dDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKTogU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0No
aWxkcmVuIGlzIGdvbmUuCisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50OjpoYXNT
b3VyY2VBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1l
bnQ6OmRpc3BhdGNoTG9hZEV2ZW50KTogTmV3IFNjcmlwdEVsZW1lbnQgZnVuY3Rpb24gbmFtZXMu
CisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaDoKKwogMjAxMS0wMi0xNyAgSHVpIEh1
YW5nICA8aHVpLjIuaHVhbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3ps
byBHb21ib3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggMTkzOWEwODBk
ZmM4ODM2OWYwMmZmZjc2Y2U2ODNiYzU2YmEzODUyYi4uZDcyN2MzMzE3MjE5NTU5YjQ0YmQ1MGM5
MDhjODI2YmZkNWQwYTU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcApAQCAt
NTEsMTMgKzUxLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2NyaXB0RWxlbWVudDo6
U2NyaXB0RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBib29sIHdhc0luc2VydGVkQnlQYXJzZXIs
IGJvb2wgd2FzQWxyZWFkeVN0YXJ0ZWQpCitTY3JpcHRFbGVtZW50OjpTY3JpcHRFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQsIGJvb2wgcGFyc2VySW5zZXJ0ZWQsIGJvb2wgd2FzQWxyZWFkeVN0YXJ0
ZWQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAsIG1fY2FjaGVkU2NyaXB0KDApCi0g
ICAgLCBtX3dhc0luc2VydGVkQnlQYXJzZXIod2FzSW5zZXJ0ZWRCeVBhcnNlcikKKyAgICAsIG1f
cGFyc2VySW5zZXJ0ZWQocGFyc2VySW5zZXJ0ZWQpCisgICAgLCBtX3dhc1BhcnNlckluc2VydGVk
KGZhbHNlKQogICAgICwgbV9pc0V4dGVybmFsU2NyaXB0KGZhbHNlKQogICAgICwgbV93YXNBbHJl
YWR5U3RhcnRlZCh3YXNBbHJlYWR5U3RhcnRlZCkKICAgICAsIG1faGF2ZUZpcmVkTG9hZChmYWxz
ZSkKKyAgICAsIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQoZmFsc2UpCisgICAgLCBtX3JlYWR5VG9C
ZVBhcnNlckV4ZWN1dGVkKGZhbHNlKQorICAgICwgbV93aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZp
bmlzaGVkUGFyc2luZyhmYWxzZSkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKIH0KQEAgLTY3
LDIyICs3MSwxMCBAQCBTY3JpcHRFbGVtZW50Ojp+U2NyaXB0RWxlbWVudCgpCiAgICAgc3RvcExv
YWRSZXF1ZXN0KCk7CiB9CiAKLXZvaWQgU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCit2b2lkIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KCkKIHsKLSAgICBpZiAod2FzSW5zZXJ0ZWRCeVBhcnNlcigpICYmICFpc0Fz
eW5jaHJvbm91cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBodHRwOi8vd3d3LndoYXR3
Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNzY3JpcHQKLQotICAgIGlmICghc291
cmNlVXJsLmlzRW1wdHkoKSkgewotICAgICAgICByZXF1ZXN0U2NyaXB0KHNvdXJjZVVybCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSdzIGFuIGVtcHR5IHNjcmlw
dCBub2RlLCB3ZSBzaG91bGRuJ3QgZXZhbHVhdGUgdGhlIHNjcmlwdAotICAgIC8vIGJlY2F1c2Ug
aWYgYSBzY3JpcHQgaXMgaW5zZXJ0ZWQgYWZ0ZXJ3YXJkcyAoYnkgc2V0dGluZyB0ZXh0IG9yIGlu
bmVyVGV4dCkKLSAgICAvLyBpdCBzaG91bGQgYmUgZXZhbHVhdGVkLCBhbmQgZXZhbHVhdGVTY3Jp
cHQgb25seSBldmFsdWF0ZXMgYSBzY3JpcHQgb25jZS4KLSAgICBldmFsdWF0ZVNjcmlwdChTY3Jp
cHRTb3VyY2VDb2RlKHNjcmlwdENvbnRlbnQoKSwgZWxlbWVudCgpLT5kb2N1bWVudCgpLT51cmwo
KSkpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4K
KyAgICBpZiAoIW1fcGFyc2VySW5zZXJ0ZWQpCisgICAgICAgIHByZXBhcmVTY3JpcHQoKTsgLy8g
RklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUuCiB9CiAKIHZv
aWQgU2NyaXB0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCkBAIC05MywyMiArODUsOCBA
QCB2b2lkIFNjcmlwdEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQogCiB2b2lkIFNjcmlw
dEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCiB7Ci0gICAgaWYgKHdhc0luc2VydGVkQnlQYXJz
ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgYSBub2RlIGlzIGluc2VydGVkIGFz
IGEgY2hpbGQgb2YgdGhlIHNjcmlwdCBlbGVtZW50Ci0gICAgLy8gYW5kIHRoZSBzY3JpcHQgZWxl
bWVudCBoYXMgYmVlbiBpbnNlcnRlZCBpbiB0aGUgZG9jdW1lbnQKLSAgICAvLyB3ZSBldmFsdWF0
ZSB0aGUgc2NyaXB0LgotICAgIGlmIChtX2VsZW1lbnQtPmluRG9jdW1lbnQoKSAmJiBtX2VsZW1l
bnQtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgZXZhbHVhdGVTY3JpcHQoU2NyaXB0U291cmNlQ29k
ZShzY3JpcHRDb250ZW50KCksIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dXJsKCkpKTsgLy8gRklY
TUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUKLX0KLQotdm9pZCBT
Y3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oY29uc3QgU3RyaW5nJiBzb3VyY2VV
cmwpCi17Ci0gICAgLy8gVGhlIHBhcnNlciBqdXN0IHJlYWNoZWQgPC9zY3JpcHQ+LiBJZiB3ZSBo
YXZlIG5vIHNyYyBhbmQgbm8gdGV4dCwKLSAgICAvLyBhbGxvdyBkeW5hbWljIGxvYWRpbmcgbGF0
ZXIuCi0gICAgaWYgKHNvdXJjZVVybC5pc0VtcHR5KCkgJiYgc2NyaXB0Q29udGVudCgpLmlzRW1w
dHkoKSkKLSAgICAgICAgbV93YXNJbnNlcnRlZEJ5UGFyc2VyID0gZmFsc2U7CisgICAgaWYgKCFt
X3BhcnNlckluc2VydGVkICYmIG1fZWxlbWVudC0+aW5Eb2N1bWVudCgpKQorICAgICAgICBwcmVw
YXJlU2NyaXB0KCk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVhbCBzdGFydGluZyBsaW5lIG51bWJl
ciBoZXJlLgogfQogCiB2b2lkIFNjcmlwdEVsZW1lbnQ6OmhhbmRsZVNvdXJjZUF0dHJpYnV0ZShj
b25zdCBTdHJpbmcmIHNvdXJjZVVybCkKQEAgLTExNiwxMiArOTQsMTkgQEAgdm9pZCBTY3JpcHRF
bGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCiAg
ICAgaWYgKGlnbm9yZXNMb2FkUmVxdWVzdCgpIHx8IHNvdXJjZVVybC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHJlcXVlc3RTY3JpcHQoc291cmNlVXJsKTsKKyAgICBwcmVwYXJl
U2NyaXB0KCk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVhbCBzdGFydGluZyBsaW5lIG51bWJlciBo
ZXJlLgogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb24KLXN0YXRpYyBib29sIGlzU3VwcG9ydGVkSmF2
YVNjcmlwdExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpCitzdGF0aWMgYm9vbCBpc0xl
Z2FjeVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxhbmd1YWdlKQog
eworICAgIC8vIE1vemlsbGEgMS44IGFjY2VwdHMgamF2YXNjcmlwdDEuMCAtIGphdmFzY3JpcHQx
LjcsIGJ1dCBXaW5JRSA3IGFjY2VwdHMgb25seSBqYXZhc2NyaXB0MS4xIC0gamF2YXNjcmlwdDEu
My4KKyAgICAvLyBNb3ppbGxhIDEuOCBhbmQgV2luSUUgNyBib3RoIGFjY2VwdCBqYXZhc2NyaXB0
IGFuZCBsaXZlc2NyaXB0LgorICAgIC8vIFdpbklFIDcgYWNjZXB0cyBlY21hc2NyaXB0IGFuZCBq
c2NyaXB0LCBidXQgTW96aWxsYSAxLjggZG9lc24ndC4KKyAgICAvLyBOZWl0aGVyIE1vemlsbGEg
MS44IG5vciBXaW5JRSA3IGFjY2VwdCBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UuCisg
ICAgLy8gV2Ugd2FudCB0byBhY2NlcHQgYWxsIHRoZSB2YWx1ZXMgdGhhdCBlaXRoZXIgb2YgdGhl
c2UgYnJvd3NlcnMgYWNjZXB0LCBidXQgbm90IG90aGVyIHZhbHVlcy4KKworICAgIC8vIEZJWE1F
OiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBIVE1MNSBjb21wbGlhbnQuIFRoZXNlIGJlbG9uZyBpbiB0
aGUgTUlNRSByZWdpc3RyeSBhcyAidGV4dC9qYXZhc2NyaXB0PHZlcnNpb24+IiBlbnRyaWVzLgog
ICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gTGFuZ3VhZ2VTZXQ7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMYW5ndWFnZVNldCwgbGFuZ3VhZ2VzLCAoKSk7CiAg
ICAgaWYgKGxhbmd1YWdlcy5pc0VtcHR5KCkpIHsKQEAgLTEzNyw1OCArMTIyLDEzNyBAQCBzdGF0
aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxhbmd1
YWdlKQogICAgICAgICBsYW5ndWFnZXMuYWRkKCJqYXZhc2NyaXB0MS43Iik7CiAgICAgICAgIGxh
bmd1YWdlcy5hZGQoImxpdmVzY3JpcHQiKTsKICAgICAgICAgbGFuZ3VhZ2VzLmFkZCgiZWNtYXNj
cmlwdCIpOwotICAgICAgICBsYW5ndWFnZXMuYWRkKCJqc2NyaXB0Iik7ICAgICAgICAgICAgICAg
IAorICAgICAgICBsYW5ndWFnZXMuYWRkKCJqc2NyaXB0Iik7CiAgICAgfQogCiAgICAgcmV0dXJu
IGxhbmd1YWdlcy5jb250YWlucyhsYW5ndWFnZSk7CiB9CiAKLXZvaWQgU2NyaXB0RWxlbWVudDo6
cmVxdWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCkKK2Jvb2wgU2NyaXB0RWxlbWVu
dDo6aXNTY3JpcHRUeXBlU3VwcG9ydGVkKExlZ2FjeVR5cGVTdXBwb3J0IHN1cHBvcnRMZWdhY3lU
eXBlcykgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSdkIGxpa2UgdG8gZXZh
bHVhdGUgc2NyaXB0cyB3aGljaCBhcmUgaW5zZXJ0ZWQgaW50byBhIAorICAgIFN0cmluZyB0eXBl
OworICAgIFN0cmluZyBsZWdhY3lUeXBlOworICAgIGlmICh0eXBlQXR0cmlidXRlVmFsdWUoKS5p
c0VtcHR5KCkgJiYgbGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAg
dHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOworICAgIGVsc2UgaWYgKCF0eXBlQXR0cmlidXRlVmFs
dWUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdHlwZSA9IHR5cGVBdHRyaWJ1dGVWYWx1ZSgpLnN0
cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7CisgICAgICAgIGlmIChzdXBwb3J0TGVnYWN5VHlwZXMg
PT0gQWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKQorICAgICAgICAgICAgbGVnYWN5VHlw
ZSA9IHR5cGVBdHRyaWJ1dGVWYWx1ZSgpOworICAgIH0gZWxzZSBpZiAoIWxhbmd1YWdlQXR0cmli
dXRlVmFsdWUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdHlwZSA9ICJ0ZXh0LyIgKyBsYW5ndWFn
ZUF0dHJpYnV0ZVZhbHVlKCkubG93ZXIoKTsKKyAgICAgICAgbGVnYWN5VHlwZSA9IGxhbmd1YWdl
QXR0cmlidXRlVmFsdWUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisKKyAgICAvLyBGSVhNRTogaXNMZWdhY3lTdXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZ2Uo
KSBpcyBub3QgdmFsaWQgSFRNTDUuIEl0IGlzIHVzZWQgaGVyZSB0byBtYWludGFpbiBiYWNrd2Fy
ZHMgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGxheW91dCB0ZXN0cy4gVGhlIHNwZWNpZmlj
IHZpb2xhdGlvbnMgYXJlOgorICAgIC8vIC0gQWxsb3dpbmcgdHlwZT1qYXZhc2NyaXB0LiB0eXBl
PSBzaG91bGQgb25seSBzdXBwb3J0IE1JTUUgdHlwZXMsIHN1Y2ggYXMgdGV4dC9qYXZhc2NyaXB0
LgorICAgIC8vIC0gQWxsb3dpbmcgYSBkaWZmZXJlbnQgc2V0IG9mIGxhbmd1YWdlcyBmb3IgbGFu
Z3VhZ2U9IGFuZCB0eXBlPS4gbGFuZ3VhZ2U9IHN1cHBvcnRzIEphdmFzY3JpcHQgMS4xIGFuZCAx
LjQtMS42LCBidXQgdHlwZT0gZG9lcyBub3QuCisgICAgcmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKHR5cGUpIHx8ICghbGVnYWN5VHlwZS5pc0Vt
cHR5KCkgJiYgaXNMZWdhY3lTdXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZ2UobGVnYWN5VHlwZSkp
OworfQorCisvLyBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjcHJl
cGFyZS1hLXNjcmlwdAorYm9vbCBTY3JpcHRFbGVtZW50OjpwcmVwYXJlU2NyaXB0KGNvbnN0IFRl
eHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24sIExlZ2FjeVR5cGVTdXBwb3J0IHN1cHBv
cnRMZWdhY3lUeXBlcykKK3sKKyAgICBpZiAod2FzQWxyZWFkeVN0YXJ0ZWQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcGFyc2VySW5zZXJ0ZWQpIHsKKyAgICAgICAgbV93
YXNQYXJzZXJJbnNlcnRlZCA9IHRydWU7CisgICAgICAgIG1fcGFyc2VySW5zZXJ0ZWQgPSBmYWxz
ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV93YXNQYXJzZXJJbnNlcnRlZCA9IGZhbHNlOworCisg
ICAgaWYgKCFoYXNTb3VyY2VBdHRyaWJ1dGUoKSAmJiBjaGlsZHJlbkFyZUNvbW1lbnRzT3JFbXB0
eVRleHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2VsZW1lbnQtPmlu
RG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFpc1NjcmlwdFR5
cGVTdXBwb3J0ZWQoc3VwcG9ydExlZ2FjeVR5cGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG1fd2FzUGFyc2VySW5zZXJ0ZWQpCisgICAgICAgIG1fcGFyc2VySW5zZXJ0ZWQg
PSB0cnVlOworCisgICAgbV93YXNBbHJlYWR5U3RhcnRlZCA9IHRydWU7CisKKyAgICAvLyBGSVhN
RTogRXZlbnR1YWxseSB3ZSdkIGxpa2UgdG8gZXZhbHVhdGUgc2NyaXB0cyB3aGljaCBhcmUgaW5z
ZXJ0ZWQgaW50byBhCiAgICAgLy8gdmlld2xlc3MgZG9jdW1lbnQgYnV0IHRoaXMnbGwgZG8gZm9y
IG5vdy4KICAgICAvLyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTcyNwogICAgIGlmICghbV9lbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5mcmFtZSgpLT5zY3JpcHQoKS0+Y2FuRXhlY3V0ZVNjcmlwdHMoQWJvdXRUb0V4ZWN1
dGVTY3JpcHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgZXZlbnRBdHRy
aWJ1dGUgPSBldmVudEF0dHJpYnV0ZVZhbHVlKCk7CisgICAgU3RyaW5nIGZvckF0dHJpYnV0ZSA9
IGZvckF0dHJpYnV0ZVZhbHVlKCk7CisgICAgaWYgKCFldmVudEF0dHJpYnV0ZS5pc0VtcHR5KCkg
JiYgIWZvckF0dHJpYnV0ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yQXR0cmlidXRlID0gZm9y
QXR0cmlidXRlLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdD
YXNlKGZvckF0dHJpYnV0ZSwgIndpbmRvdyIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGV2ZW50QXR0cmlidXRlID0gZXZlbnRBdHRyaWJ1dGUuc3RyaXBXaGl0ZVNwYWNl
KCk7CisgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoZXZlbnRBdHRyaWJ1dGUsICJvbmxv
YWQiKSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UoZXZlbnRBdHRyaWJ1dGUsICJvbmxvYWQoKSIpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghY2hhcnNldEF0dHJp
YnV0ZVZhbHVlKCkuaXNFbXB0eSgpKQorICAgICAgICBtX2NoYXJhY3RlckVuY29kaW5nID0gY2hh
cnNldEF0dHJpYnV0ZVZhbHVlKCk7CisgICAgZWxzZQorICAgICAgICBtX2ZhbGxiYWNrQ2hhcmFj
dGVyRW5jb2RpbmcgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNoYXJzZXQoKTsKKworICAgIGlm
IChoYXNTb3VyY2VBdHRyaWJ1dGUoKSkKKyAgICAgICAgaWYgKCFyZXF1ZXN0U2NyaXB0KHNvdXJj
ZUF0dHJpYnV0ZVZhbHVlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KGhhc1NvdXJjZUF0dHJpYnV0ZSgpICYmIGRlZmVyQXR0cmlidXRlVmFsdWUoKSAmJiBtX3BhcnNl
ckluc2VydGVkICYmICFhc3luY0F0dHJpYnV0ZVZhbHVlKCkpIHsKKyAgICAgICAgbV93aWxsRXhl
Y3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZyA9IHRydWU7CisgICAgICAgIG1fd2lsbEJl
UGFyc2VyRXhlY3V0ZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoaGFzU291cmNlQXR0cmlidXRl
KCkgJiYgbV9wYXJzZXJJbnNlcnRlZCAmJiAhYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpKQorICAgICAg
ICBtX3dpbGxCZVBhcnNlckV4ZWN1dGVkID0gdHJ1ZTsKKyAgICBlbHNlIGlmICghaGFzU291cmNl
QXR0cmlidXRlKCkgJiYgbV9wYXJzZXJJbnNlcnRlZCAmJiAhbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSkgeworICAgICAgICBtX3dpbGxCZVBhcnNlckV4ZWN1
dGVkID0gdHJ1ZTsKKyAgICAgICAgbV9yZWFkeVRvQmVQYXJzZXJFeGVjdXRlZCA9IHRydWU7Cisg
ICAgfSBlbHNlIGlmIChoYXNTb3VyY2VBdHRyaWJ1dGUoKSkKKyAgICAgICAgbV9jYWNoZWRTY3Jp
cHQtPmFkZENsaWVudCh0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIGV4ZWN1dGVTY3JpcHQoU2Ny
aXB0U291cmNlQ29kZShzY3JpcHRDb250ZW50KCksIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dXJs
KCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFNjcmlwdEVsZW1lbnQ6OnJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCit7
CisgICAgaWYgKCFtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgp
LT5jYW5Mb2FkRXh0ZXJuYWxTY3JpcHRGcm9tU3JjKHNvdXJjZVVybCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIFJlZlB0cjxEb2N1bWVudD4gb3JpZ2luYWxEb2N1bWVudCA9IG1fZWxl
bWVudC0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIW1fZWxlbWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2Fk
RXZlbnQoc291cmNlVXJsKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFtX2VsZW1lbnQtPmluRG9jdW1lbnQoKSB8fCBtX2VsZW1lbnQtPmRvY3VtZW50
KCkgIT0gb3JpZ2luYWxEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBBU1NFUlQoIW1fY2FjaGVkU2NyaXB0KTsKKyAgICAvLyBGSVhNRTogSWYg
c291cmNlVXJsIGlzIGVtcHR5LCB3ZSBzaG91bGQgZGlzcGF0Y2hFcnJvckV2ZW50KCkuCiAgICAg
bV9jYWNoZWRTY3JpcHQgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCktPnJlcXVlc3RTY3JpcHQoc291cmNlVXJsLCBzY3JpcHRDaGFyc2V0KCkpOwogICAgIG1f
aXNFeHRlcm5hbFNjcmlwdCA9IHRydWU7CiAKLSAgICAvLyBtX3dhc0luc2VydGVkQnlQYXJzZXIg
aXMgbmV2ZXIgcmVzZXQgLSBhbHdheXMgcmVzaWVkIGF0IHRoZSBpbml0aWFsIHZhbHVlIHNldCB3
aGlsZSBwYXJzaW5nLgotICAgIC8vIG1fd2FzQWxyZWFkeVN0YXJ0ZWQgaXMgbGVmdCB1bnRvdWNo
ZWQgYXMgd2VsbCB0byBhdm9pZCBzY3JpcHQgcmVleGVjdXRpb24sIGlmIGEgPHNjcmlwdD4gZWxl
bWVudAotICAgIC8vIGlzIHJlbW92ZWQgYW5kIHJlYXBwZW5kZWQgdG8gdGhlIGRvY3VtZW50Lgot
ICAgIG1faGF2ZUZpcmVkTG9hZCA9IGZhbHNlOwotCi0gICAgaWYgKG1fY2FjaGVkU2NyaXB0KSB7
Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKG1fY2FjaGVkU2NyaXB0KQorICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBTY3JpcHRFbGVtZW50OjpldmFsdWF0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBz
b3VyY2VDb2RlKQordm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlw
dFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiB7Ci0gICAgaWYgKHdhc0FscmVhZHlTdGFydGVkKCkg
fHwgc291cmNlQ29kZS5pc0VtcHR5KCkgfHwgIXNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkK
KyAgICBpZiAoc291cmNlQ29kZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
ZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCk7CiAgICAgQVNT
RVJUKGRvY3VtZW50KTsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkp
IHsKLSAgICAgICAgaWYgKCFmcmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRzKEFib3V0
VG9FeGVjdXRlU2NyaXB0KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX3dhc0Fs
cmVhZHlTdGFydGVkID0gdHJ1ZTsKLQotICAgICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNzY3JpcHQKLQogICAgICAgICB7CiAgICAgICAg
ICAgICBJZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRlciBpZ25vcmVEZXNjdHJ1
Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIobV9pc0V4dGVybmFsU2NyaXB0ID8gZG9jdW1lbnQu
Z2V0KCkgOiAwKTsKICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHNjcmlwdCBmcm9tIHRoZSBzY3Jp
cHQgZWxlbWVudCBub2RlLCB1c2luZyB0aGUgc2NyaXB0CkBAIC0yMDEsMzYgKzI2NSwyMyBAQCB2
b2lkIFNjcmlwdEVsZW1lbnQ6OmV2YWx1YXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUpCiAgICAgfQogfQogCi12b2lkIFNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3Jp
cHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKLXsKLSAgICBpZiAod2FzQWxy
ZWFkeVN0YXJ0ZWQoKSB8fCBzb3VyY2VDb2RlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCk7Ci0g
ICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3dhc0FscmVhZHlT
dGFydGVkID0gdHJ1ZTsKLQotICAgIGZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzb3Vy
Y2VDb2RlKTsKLX0KLQogdm9pZCBTY3JpcHRFbGVtZW50OjpzdG9wTG9hZFJlcXVlc3QoKQogewog
ICAgIGlmIChtX2NhY2hlZFNjcmlwdCkgewotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3Zl
Q2xpZW50KHRoaXMpOworICAgICAgICBpZiAoIW1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQpCisgICAg
ICAgICAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogICAgICAgICBtX2Nh
Y2hlZFNjcmlwdCA9IDA7CiAgICAgfQogfQogCiB2b2lkIFNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGUo
Q2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCiB7CisgICAgQVNTRVJUKCFtX3dpbGxCZVBhcnNl
ckV4ZWN1dGVkKTsKICAgICBBU1NFUlQoY2FjaGVkU2NyaXB0KTsKICAgICBpZiAoY2FjaGVkU2Ny
aXB0LT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOwogICAg
IGVsc2UgewotICAgICAgICBldmFsdWF0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKGNhY2hlZFNj
cmlwdCkpOworICAgICAgICBleGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoY2FjaGVkU2Ny
aXB0KSk7CiAgICAgICAgIGRpc3BhdGNoTG9hZEV2ZW50KCk7CiAgICAgfQogICAgIGNhY2hlZFNj
cmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwpAQCAtMjM4LDYgKzI4OSw3IEBAIHZvaWQgU2NyaXB0
RWxlbWVudDo6ZXhlY3V0ZShDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKIAogdm9pZCBTY3Jp
cHRFbGVtZW50Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogbykKIHsKKyAgICBBU1NF
UlQoIW1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQpOwogICAgIEFTU0VSVF9VTlVTRUQobywgbyA9PSBt
X2NhY2hlZFNjcmlwdCk7CiAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5hc3luY1NjcmlwdFJ1
bm5lcigpLT5leGVjdXRlU2NyaXB0U29vbih0aGlzLCBtX2NhY2hlZFNjcmlwdCk7CiAgICAgbV9j
YWNoZWRTY3JpcHQgPSAwOwpAQCAtMjQ1LDU2ICsyOTcsMzEgQEAgdm9pZCBTY3JpcHRFbGVtZW50
Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogbykKIAogYm9vbCBTY3JpcHRFbGVtZW50
OjppZ25vcmVzTG9hZFJlcXVlc3QoKSBjb25zdAogewotICAgIHJldHVybiB3YXNBbHJlYWR5U3Rh
cnRlZCgpIHx8IG1faXNFeHRlcm5hbFNjcmlwdCB8fCB3YXNJbnNlcnRlZEJ5UGFyc2VyKCkgfHwg
IW1fZWxlbWVudC0+aW5Eb2N1bWVudCgpOworICAgIHJldHVybiBtX3dhc0FscmVhZHlTdGFydGVk
IHx8IG1faXNFeHRlcm5hbFNjcmlwdCB8fCBtX3BhcnNlckluc2VydGVkIHx8ICFtX2VsZW1lbnQt
PmluRG9jdW1lbnQoKTsKIH0KIAotYm9vbCBTY3JpcHRFbGVtZW50OjpzaG91bGRFeGVjdXRlQXNK
YXZhU2NyaXB0KCkgY29uc3QKK2Jvb2wgU2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5BcmVDb21tZW50
c09yRW1wdHlUZXh0KCkgY29uc3QKIHsKLSAgICAvKgotICAgICAgICAgTW96aWxsYSAxLjggYWNj
ZXB0cyBqYXZhc2NyaXB0MS4wIC0gamF2YXNjcmlwdDEuNywgYnV0IFdpbklFIDcgYWNjZXB0cyBv
bmx5IGphdmFzY3JpcHQxLjEgLSBqYXZhc2NyaXB0MS4zLgotICAgICAgICAgTW96aWxsYSAxLjgg
YW5kIFdpbklFIDcgYm90aCBhY2NlcHQgamF2YXNjcmlwdCBhbmQgbGl2ZXNjcmlwdC4KLSAgICAg
ICAgIFdpbklFIDcgYWNjZXB0cyBlY21hc2NyaXB0IGFuZCBqc2NyaXB0LCBidXQgTW96aWxsYSAx
LjggZG9lc24ndC4KLSAgICAgICAgIE5laXRoZXIgTW96aWxsYSAxLjggbm9yIFdpbklFIDcgYWNj
ZXB0IGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgIFdlIHdhbnQgdG8g
YWNjZXB0IGFsbCB0aGUgdmFsdWVzIHRoYXQgZWl0aGVyIG9mIHRoZXNlIGJyb3dzZXJzIGFjY2Vw
dCwgYnV0IG5vdCBvdGhlciB2YWx1ZXMuCi0gICAgIAotICAgICAgICAgRklYTUU6IElzIHRoaXMg
SFRNTDUgY29tcGxpYW50PwotICAgICAqLwotICAgIFN0cmluZyB0eXBlID0gdHlwZUF0dHJpYnV0
ZVZhbHVlKCk7Ci0gICAgaWYgKCF0eXBlLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoIU1JTUVU
eXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKHR5cGUuc3RyaXBXaGl0
ZVNwYWNlKCkubG93ZXIoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gbGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1ZSgpOwot
ICAgICAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSAmJiAhaXNTdXBwb3J0ZWRKYXZhU2NyaXB0
TGFuZ3VhZ2UobGFuZ3VhZ2UpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gICAg
Ci0KLSAgICAvLyBObyB0eXBlIG9yIGxhbmd1YWdlIGlzIHNwZWNpZmllZCwgc28gd2UgYXNzdW1l
IHRoZSBzY3JpcHQgdG8gYmUgSmF2YVNjcmlwdC4KLQotICAgIFN0cmluZyBmb3JBdHRyaWJ1dGUg
PSBmb3JBdHRyaWJ1dGVWYWx1ZSgpOwotICAgIFN0cmluZyBldmVudEF0dHJpYnV0ZSA9IGV2ZW50
QXR0cmlidXRlVmFsdWUoKTsKLSAgICBpZiAoIWZvckF0dHJpYnV0ZS5pc0VtcHR5KCkgJiYgIWV2
ZW50QXR0cmlidXRlLmlzRW1wdHkoKSkgewotICAgICAgICBmb3JBdHRyaWJ1dGUgPSBmb3JBdHRy
aWJ1dGUuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2Uo
Zm9yQXR0cmlidXRlLCAid2luZG93IikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZXZlbnRBdHRyaWJ1dGUgPSBldmVudEF0dHJpYnV0ZS5zdHJpcFdo
aXRlU3BhY2UoKTsKLSAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShldmVudEF0dHJpYnV0
ZSwgIm9ubG9hZCIpICYmICFlcXVhbElnbm9yaW5nQ2FzZShldmVudEF0dHJpYnV0ZSwgIm9ubG9h
ZCgpIikpCisgICAgZm9yIChOb2RlKiBuID0gbV9lbGVtZW50LT5maXJzdENoaWxkKCk7IG47IG4g
PSBuLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChuLT5pc0NvbW1lbnROb2RlKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgeworICAg
ICAgICAgICAgVGV4dCogdCA9IHN0YXRpY19jYXN0PFRleHQqPihuKTsKKyAgICAgICAgICAgIGlm
ICh0LT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogU3RyaW5nIFNjcmlwdEVsZW1lbnQ6OnNjcmlwdENoYXJzZXQoKSBjb25zdAog
ewotICAgIC8vIEZpcnN0IHdlIHRyeSB0byBnZXQgZW5jb2RpbmcgZnJvbSBjaGFyc2V0IGF0dHJp
YnV0ZS4KLSAgICBTdHJpbmcgY2hhcnNldCA9IGNoYXJzZXRBdHRyaWJ1dGVWYWx1ZSgpLnN0cmlw
V2hpdGVTcGFjZSgpOwotCi0gICAgLy8gSWYgY2hhcnNldCBoYXMgbm90IGJlZW4gZGVjbGFyZWQg
aW4gc2NyaXB0IHRhZywgZmFsbCBiYWNrIHRvIGZyYW1lIGVuY29kaW5nLgotICAgIGlmIChjaGFy
c2V0LmlzRW1wdHkoKSkKLSAgICAgICAgY2hhcnNldCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+
Y2hhcnNldCgpOwotCisgICAgU3RyaW5nIGNoYXJzZXQ7CisgICAgaWYgKCFtX2NoYXJhY3RlckVu
Y29kaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgY2hhcnNldCA9IG1fY2hhcmFjdGVyRW5jb2Rpbmc7
CisgICAgZWxzZSBpZiAoIW1fZmFsbGJhY2tDaGFyYWN0ZXJFbmNvZGluZy5pc0VtcHR5KCkpCisg
ICAgICAgIGNoYXJzZXQgPSBtX2ZhbGxiYWNrQ2hhcmFjdGVyRW5jb2Rpbmc7CiAgICAgcmV0dXJu
IGNoYXJzZXQ7CiB9CiAKQEAgLTMyNSwyMCArMzUyLDYgQEAgU3RyaW5nIFNjcmlwdEVsZW1lbnQ6
OnNjcmlwdENvbnRlbnQoKSBjb25zdAogICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHZhbCk7CiB9
CiAKLWJvb2wgU2NyaXB0RWxlbWVudDo6aXNBc3luY2hyb25vdXMoKSBjb25zdAotewotICAgIC8v
IE9ubHkgZXh0ZXJuYWwgc2NyaXB0cyBtYXkgYmUgYXN5bmNocm9ub3VzLgotICAgIC8vIFNlZTog
aHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmlldy5odG1sI2F0dHItc2NyaXB0LWFz
eW5jCi0gICAgcmV0dXJuICFzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpLmlzRW1wdHkoKSAmJiBhc3lu
Y0F0dHJpYnV0ZVZhbHVlKCk7Ci19Ci0KLWJvb2wgU2NyaXB0RWxlbWVudDo6aXNEZWZlcnJlZCgp
IGNvbnN0Ci17Ci0gICAgLy8gT25seSBleHRlcm5hbCBzY3JpcHRzIG1heSBiZSBkZWZlcnJlZCBh
bmQgYXN5bmMgdHJ1bXBzIGRlZmVyIHRvIGFsbG93IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5
LgotICAgIC8vIFNlZTogaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmlldy5odG1s
I2F0dHItc2NyaXB0LWRlZmVyCi0gICAgcmV0dXJuICFzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpLmlz
RW1wdHkoKSAmJiAhYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpICYmIGRlZmVyQXR0cmlidXRlVmFsdWUo
KTsKLX0KLQogU2NyaXB0RWxlbWVudCogdG9TY3JpcHRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQp
CiB7CiAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiBlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCmlu
ZGV4IDUyNTBmM2UzMzU0OTkwOTI4ZjU3NTYwMWQwMTIyM2Y0MGM2NTE2MDcuLmRhYjdjOWVkY2Fj
NDI3ZDY3Y2I0NDM1MjY3YjE1ZTIwZDU2OTk1YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1l
bnQuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQu
aCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRQb3NpdGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTMxLDUyICszMiw1
NyBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgU2NyaXB0RWxlbWVudDsKIGNsYXNzIFNjcmlwdFNv
dXJjZUNvZGU7CiAKK2VudW0gTGVnYWN5VHlwZVN1cHBvcnQgeyBEaXNhbGxvd0xlZ2FjeVR5cGVJ
blR5cGVBdHRyaWJ1dGUsIEFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSB9OworCiBjbGFz
cyBTY3JpcHRFbGVtZW50IDogcHJpdmF0ZSBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgU2NyaXB0RWxlbWVudChFbGVtZW50
KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIsIGJvb2wgaXNFdmFsdWF0ZWQpOwogICAgIHZpcnR1YWwg
flNjcmlwdEVsZW1lbnQoKTsKLSAgICAKKwogICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX2VsZW1lbnQ7IH0KIAorICAgIGJvb2wgcHJlcGFyZVNjcmlwdChjb25zdCBUZXh0
UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBv
c2l0aW9uKCksIExlZ2FjeVR5cGVTdXBwb3J0IHN1cHBvcnRMZWdhY3lUeXBlcyA9IERpc2FsbG93
TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSk7CisKICAgICAvLyBBIGNoYXJzZXQgZm9yIGxvYWRp
bmcgdGhlIHNjcmlwdCAobWF5IGJlIG92ZXJyaWRkZW4gYnkgSFRUUCBoZWFkZXJzIG9yIGEgQk9N
KS4KICAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIHNjcmlw
dENvbnRlbnQoKSBjb25zdDsKLSAgICBib29sIHNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSBj
b25zdDsKICAgICB2b2lkIGV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwog
ICAgIHZvaWQgZXhlY3V0ZShDYWNoZWRTY3JpcHQqKTsKIAogICAgIC8vIFhNTCBwYXJzZXIgY2Fs
bHMgdGhlc2UKLSAgICB2aXJ0dWFsIFN0cmluZyBzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpID0gMDsKKyAgICBib29sIGlzU2NyaXB0VHlw
ZVN1cHBvcnRlZChMZWdhY3lUeXBlU3VwcG9ydCkgY29uc3Q7CiAKICAgICBib29sIGhhdmVGaXJl
ZExvYWRFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZUZpcmVkTG9hZDsgfQorICAgIGJvb2wg
d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSBjb25zdCB7IHJldHVybiBtX3dpbGxCZVBhcnNlckV4ZWN1
dGVkOyB9CisgICAgYm9vbCByZWFkeVRvQmVQYXJzZXJFeGVjdXRlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQ7IH0KKyAgICBib29sIHdpbGxFeGVjdXRlV2hlbkRv
Y3VtZW50RmluaXNoZWRQYXJzaW5nKCkgY29uc3QgeyByZXR1cm4gbV93aWxsRXhlY3V0ZVdoZW5E
b2N1bWVudEZpbmlzaGVkUGFyc2luZzsgfQorICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hl
ZFNjcmlwdD4gY2FjaGVkU2NyaXB0KCkgeyByZXR1cm4gbV9jYWNoZWRTY3JpcHQ7IH0KIAogcHJv
dGVjdGVkOgogICAgIHZvaWQgc2V0SGF2ZUZpcmVkTG9hZEV2ZW50KGJvb2wgaGF2ZUZpcmVkTG9h
ZCkgeyBtX2hhdmVGaXJlZExvYWQgPSBoYXZlRmlyZWRMb2FkOyB9Ci0gICAgYm9vbCB3YXNJbnNl
cnRlZEJ5UGFyc2VyKCkgY29uc3QgeyByZXR1cm4gbV93YXNJbnNlcnRlZEJ5UGFyc2VyOyB9Cisg
ICAgYm9vbCBpc1BhcnNlckluc2VydGVkKCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZXJJbnNlcnRl
ZDsgfQogICAgIGJvb2wgd2FzQWxyZWFkeVN0YXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX3dhc0Fs
cmVhZHlTdGFydGVkOyB9CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgb3VyIHBh
cmVudCBjbGFzc2VzLgotICAgIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoY29uc3QgU3RyaW5n
JiBzb3VyY2VVcmwpOworICAgIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2b2lk
IHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwotICAg
IHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKGNvbnN0IFN0cmluZyYgc291cmNlVXJsKTsKICAg
ICB2b2lkIGhhbmRsZVNvdXJjZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7CiAK
IHByaXZhdGU6CiAgICAgYm9vbCBpZ25vcmVzTG9hZFJlcXVlc3QoKSBjb25zdDsKLSAgICBib29s
IGlzQXN5bmNocm9ub3VzKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0RlZmVycmVkKCkgY29uc3Q7Cisg
ICAgYm9vbCBjaGlsZHJlbkFyZUNvbW1lbnRzT3JFbXB0eVRleHQoKSBjb25zdDsKIAotICAgIHZv
aWQgcmVxdWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7Ci0gICAgdm9pZCBldmFs
dWF0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CisgICAgYm9vbCByZXF1ZXN0U2Ny
aXB0KGNvbnN0IFN0cmluZyYgc291cmNlVXJsKTsKICAgICB2b2lkIHN0b3BMb2FkUmVxdWVzdCgp
OwogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CiAK
KyAgICB2aXJ0dWFsIFN0cmluZyBzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIFN0cmluZyBjaGFyc2V0QXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBTdHJpbmcgdHlwZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgU3RyaW5nIGxhbmd1YWdlQXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7CkBAIC04NCwxMyAr
OTAsMjAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyBldmVudEF0dHJpYnV0ZVZhbHVl
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhc3luY0F0dHJpYnV0ZVZhbHVlKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBkZWZlckF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBoYXNTb3VyY2VBdHRyaWJ1dGUoKSBjb25zdCA9IDA7CiAKICAg
ICBFbGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2Ny
aXB0PiBtX2NhY2hlZFNjcmlwdDsKLSAgICBib29sIG1fd2FzSW5zZXJ0ZWRCeVBhcnNlcjsKKyAg
ICBib29sIG1fcGFyc2VySW5zZXJ0ZWQ7CisgICAgYm9vbCBtX3dhc1BhcnNlckluc2VydGVkOwog
ICAgIGJvb2wgbV9pc0V4dGVybmFsU2NyaXB0OwogICAgIGJvb2wgbV93YXNBbHJlYWR5U3RhcnRl
ZDsKICAgICBib29sIG1faGF2ZUZpcmVkTG9hZDsKKyAgICBib29sIG1fd2lsbEJlUGFyc2VyRXhl
Y3V0ZWQ7IC8vIFNhbWUgYXMgIlRoZSBwYXJzZXIgd2lsbCBoYW5kbGUgZXhlY3V0aW5nIHRoZSBz
Y3JpcHQuIgorICAgIGJvb2wgbV9yZWFkeVRvQmVQYXJzZXJFeGVjdXRlZDsKKyAgICBib29sIG1f
d2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRGaW5pc2hlZFBhcnNpbmc7CisgICAgU3RyaW5nIG1fY2hh
cmFjdGVyRW5jb2Rpbmc7CisgICAgU3RyaW5nIG1fZmFsbGJhY2tDaGFyYWN0ZXJFbmNvZGluZzsK
IH07CiAKIFNjcmlwdEVsZW1lbnQqIHRvU2NyaXB0RWxlbWVudChFbGVtZW50Kik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCmluZGV4IDEwZDZl
MGRlNTIzYjE1ZDE4YjI3NTE4ZGQ3NDE5ZGIzNGY4YWUyZmMuLjg1YjhjOGRlOTQzNjVlNTIwYTU1
Zjg2NDM0YmY2YjU2MjZhNWRkNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1
bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC04ODAsMzUgKzg4MCwzMiBAQCB2b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQogICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0KTsK
ICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwogCisgICAgYm9vbCBzdWNjZXNzZnVsbHlQ
cmVwYXJlZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQobV9zY3JpcHRTdGFydFBvc2l0
aW9uLCBBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOworICAgIGlmICghc3VjY2Vzc2Z1
bGx5UHJlcGFyZWQpIHsKICNpZiBFTkFCTEUoWEhUTUxNUCkKLSAgICBpZiAoIXNjcmlwdEVsZW1l
bnQtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0
U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKLSAgICBlbHNlCisgICAgICAgIGlm
ICghc2NyaXB0RWxlbWVudC0+aXNTY3JpcHRUeXBlU3VwcG9ydGVkKEFsbG93TGVnYWN5VHlwZUlu
VHlwZUF0dHJpYnV0ZSkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNz
Tm9zY3JpcHRFbGVtZW50KHRydWUpOwogI2VuZGlmCi0gICAgewotICAgICAgICAvLyBGSVhNRTog
U2NyaXB0IGV4ZWN1dGlvbiBzaG91bGQgYmUgc2hhcmVkIHNob3VsZCBiZSBzaGFyZWQgYmV0d2Vl
bgorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBTY3JpcHQgZXhlY3V0aW9uIHNob3Vs
ZCBiZSBzaGFyZWQgYmV0d2VlbgogICAgICAgICAvLyB0aGUgbGlieG1sMiBhbmQgUXQgWE1MRG9j
dW1lbnRQYXJzZXIgaW1wbGVtZW50YXRpb25zLgogCiAgICAgICAgIC8vIEphdmFTY3JpcHQgY2Fu
IGRldGFjaCB0aGUgcGFyc2VyLiAgTWFrZSBzdXJlIHRoaXMgaXMgbm90IHJlbGVhc2VkCiAgICAg
ICAgIC8vIGJlZm9yZSB0aGUgZW5kIG9mIHRoaXMgbWV0aG9kLgogICAgICAgICBSZWZQdHI8WE1M
RG9jdW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7CiAKLSAgICAgICAgU3RyaW5nIHNjcmlwdEhy
ZWYgPSBzY3JpcHRFbGVtZW50LT5zb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpOwotICAgICAgICBpZiAo
IXNjcmlwdEhyZWYuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0
dHJpYnV0ZQotICAgICAgICAgICAgU3RyaW5nIHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50
LT5zY3JpcHRDaGFyc2V0KCk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC0+ZGlzcGF0Y2hCZWZv
cmVMb2FkRXZlbnQoc2NyaXB0SHJlZikgJiYKLSAgICAgICAgICAgICAgICAobV9wZW5kaW5nU2Ny
aXB0ID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChz
Y3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0KSkpIHsKLSAgICAgICAgICAgICAgICBtX3NjcmlwdEVs
ZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xp
ZW50KHRoaXMpOwotCi0gICAgICAgICAgICAgICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUg
MCBpZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkIGFuZCByZWYoKSBleGVjdXRlZCBpdAotICAg
ICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCi0gICAgICAgICAgICAgICAgICAgIHBh
dXNlUGFyc2luZygpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9zY3Jp
cHRFbGVtZW50ID0gMDsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChzY3JpcHRFbGVtZW50
LT5yZWFkeVRvQmVQYXJzZXJFeGVjdXRlZCgpKQogICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+
ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRl
bnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3RhcnRQb3NpdGlvbikpOworICAgICAg
ICBlbHNlIGlmIChzY3JpcHRFbGVtZW50LT53aWxsQmVQYXJzZXJFeGVjdXRlZCgpKSB7CisgICAg
ICAgICAgICBtX3BlbmRpbmdTY3JpcHQgPSBzY3JpcHRFbGVtZW50LT5jYWNoZWRTY3JpcHQoKTsK
KyAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAgICAgICBtX3Bl
bmRpbmdTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsKKworICAgICAgICAgICAgLy8gbV9wZW5kaW5n
U2NyaXB0IHdpbGwgYmUgMCBpZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkIGFuZCBhZGRDbGll
bnQoKSBleGVjdXRlZCBpdC4KKyAgICAgICAgICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCisgICAg
ICAgICAgICAgICAgcGF1c2VQYXJzaW5nKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
bV9zY3JpcHRFbGVtZW50ID0gMDsKIAogICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBoYXZlIGRl
dGFjaGVkIHRoZSBwYXJzZXIKICAgICAgICAgaWYgKGlzRGV0YWNoZWQoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAppbmRleCBkMGJmODhkYzcxYWY1MTRlNDUz
NzAzMWQxOWEyNzM1NTZlZGUwNDIyLi45OWFmYWRiMTM5ZTA1ZjVmMDE1NTMyYTM0M2ZjYTM4Yzc1
ZGU4MWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJR
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCkBA
IC01ODgsMjggKzU4OCwyNSBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1l
bnQoKQogICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKICAgICBtX3JlcXVlc3RpbmdTY3Jp
cHQgPSB0cnVlOwogCisgICAgYm9vbCBzdWNjZXNzZnVsbHlQcmVwYXJlZCA9IHNjcmlwdEVsZW1l
bnQtPnByZXBhcmVTY3JpcHQobV9zY3JpcHRTdGFydFBvc2l0aW9uLCBBbGxvd0xlZ2FjeVR5cGVJ
blR5cGVBdHRyaWJ1dGUpOworICAgIGlmICghc3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKICNpZiBF
TkFCTEUoWEhUTUxNUCkKLSAgICBpZiAoIXNjcmlwdEVsZW1lbnQtPnNob3VsZEV4ZWN1dGVBc0ph
dmFTY3JpcHQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0
RWxlbWVudCh0cnVlKTsKLSAgICBlbHNlCisgICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+aXNT
Y3JpcHRUeXBlU3VwcG9ydGVkKEFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpCisgICAg
ICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUp
OwogI2VuZGlmCi0gICAgewotICAgICAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1l
bnQtPnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgICAgIGlmICghc2NyaXB0SHJlZi5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBzcmMgYXR0cmlidXRlCi0gICAgICAg
ICAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCA9IHNjcmlwdEVsZW1lbnQtPnNjcmlwdENoYXJzZXQo
KTsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5kaXNwYXRjaEJlZm9yZUxvYWRFdmVudChzY3Jp
cHRIcmVmKSAmJgotICAgICAgICAgICAgICAgIChtX3BlbmRpbmdTY3JpcHQgPSBkb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNjcmlwdEhyZWYsIHNjcmlw
dENoYXJzZXQpKSkgewotICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IGVsZW1lbnQ7
Ci0gICAgICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMg
YWxyZWFkeSBsb2FkZWQgYW5kIHJlZigpIGV4ZWN1dGVkIGl0Ci0gICAgICAgICAgICAgICAgaWYg
KG1fcGVuZGluZ1NjcmlwdCkKLSAgICAgICAgICAgICAgICAgICAgcGF1c2VQYXJzaW5nKCk7Ci0g
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwot
ICAgICAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+
cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkKICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4
ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50
KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAg
ZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSkgeworICAgICAg
ICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7Cisg
ICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICAgICAgbV9wZW5k
aW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisKKyAgICAgICAgICAgIC8vIG1fcGVuZGluZ1Nj
cmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50
KCkgZXhlY3V0ZWQgaXQuCisgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAg
ICAgICAgICAgIHBhdXNlUGFyc2luZygpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1f
c2NyaXB0RWxlbWVudCA9IDA7CiAgICAgfQogICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNl
OwogICAgIHBvcEN1cnJlbnROb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTY3JpcHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVs
ZW1lbnQuY3BwCmluZGV4IDYwM2IyYThlZWRiZTc1MmVmNzJkMWFlMzJhYWI5ZWQ4NWYwMzZjNjEu
LmQ2NDY4OWU3ZTNiMDU1ZDEyMjg1NjFhNjZkYjRiZmU3OWQyYTU1NmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCkBAIC03NCwxNiArNzQsMTAgQEAgdm9pZCBI
VE1MU2NyaXB0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQog
ICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLXZv
aWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCi17Ci0gICAgU2Ny
aXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKHNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkp
OwotICAgIEhUTUxFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLX0KLQogdm9pZCBI
VE1MU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIEhUTUxFbGVt
ZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KHNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkpOworICAgIFNjcmlwdEVsZW1lbnQ6
Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnJl
bW92ZWRGcm9tRG9jdW1lbnQoKQpAQCAtMTYwLDYgKzE1NCwxMSBAQCBib29sIEhUTUxTY3JpcHRF
bGVtZW50OjpkZWZlckF0dHJpYnV0ZVZhbHVlKCkgY29uc3QKICAgICByZXR1cm4gZmFzdEhhc0F0
dHJpYnV0ZShkZWZlckF0dHIpOwogfQogCitib29sIEhUTUxTY3JpcHRFbGVtZW50OjpoYXNTb3Vy
Y2VBdHRyaWJ1dGUoKSBjb25zdAoreworICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKHNyY0F0
dHIpOworfQorCiB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVudCgpCiB7
CiAgICAgQVNTRVJUKCFoYXZlRmlyZWRMb2FkRXZlbnQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTY3JpcHRFbGVtZW50LmgKaW5kZXggMDk3NzNjNWZiYzY0NTBlYTg3YWU4NGNlMWQyNTdkNmUy
YWU4NTdhZi4uM2MxNjQ3Mzk3YjE5NzkxYmYwN2M3OTUzOTkxNTI3MWZlZGNlNGJmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaApAQCAtNDcsNyArNDcsNiBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJz
ZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAw
LCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRy
aWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdD
aGlsZHJlbigpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJM
cyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCkBAIC01OSw2ICs1OCw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBTdHJpbmcgZXZlbnRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBhc3luY0F0dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGRlZmVyQXR0cmlidXRlVmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU291cmNl
QXR0cmlidXRlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCmluZGV4IGM5OTg1OGQwY2Zl
NWYzY2U4ZjIwMjlkYzllYWZmZjE4ZGVlOWRhODEuLjk5ZmZmNWVmOWU1ZTFiNDFkMTEzOTE4YmYy
MTg5NWNmNzVlYTc5M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxTY3JpcHRSdW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxT
Y3JpcHRSdW5uZXIuY3BwCkBAIC0yNjIsMTcgKzI2Miw5IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5l
cjo6cmVxdWVzdERlZmVycmVkU2NyaXB0KEVsZW1lbnQqIGVsZW1lbnQpCiBib29sIEhUTUxTY3Jp
cHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3Jp
cHQsIEVsZW1lbnQqIHNjcmlwdCkgY29uc3QKIHsKICAgICBBU1NFUlQoIXBlbmRpbmdTY3JpcHQu
ZWxlbWVudCgpKTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNyY1ZhbHVlID0gc2NyaXB0LT5n
ZXRBdHRyaWJ1dGUoc3JjQXR0cik7Ci0gICAgLy8gQWxsb3cgdGhlIGhvc3QgdG8gZGlzbGxvdyBz
Y3JpcHQgbG9hZHMgKHVzaW5nIHRoZSBYU1NBdWRpdG9yLCBldGMuKQotICAgIC8vIEZJWE1FOiB0
aGlzIGNoZWNrIHNob3VsZCBiZSBwZXJmb3JtZWQgb24gdGhlIGZpbmFsIFVSTCBpbiBhIHJlZGly
ZWN0IGNoYWluLgotICAgIGlmICghbV9ob3N0LT5zaG91bGRMb2FkRXh0ZXJuYWxTY3JpcHRGcm9t
U3JjKHNyY1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIHJlc29sdmUgdGhlIHVybCByZWxhdGl2ZSB0byB0aGUgZWxlbWVudC4KLSAgICBpZiAo
IXNjcmlwdC0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoc3JjVmFsdWUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcGVuZGluZ1NjcmlwdC5zZXRFbGVtZW50KHNjcmlwdCk7CiAgICAgLy8g
VGhpcyBzaG91bGQgY29ycmVjdGx5IHJldHVybiAwIGZvciBlbXB0eSBvciBpbnZhbGlkIHNyY1Zh
bHVlcy4KLSAgICBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCA9IG1fZG9jdW1lbnQtPmNhY2hl
ZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQoc3JjVmFsdWUsIHRvU2NyaXB0RWxlbWVu
dChzY3JpcHQpLT5zY3JpcHRDaGFyc2V0KCkpOworICAgIENhY2hlZFNjcmlwdCogY2FjaGVkU2Ny
aXB0ID0gdG9TY3JpcHRFbGVtZW50KHNjcmlwdCktPmNhY2hlZFNjcmlwdCgpLmdldCgpOwogICAg
IGlmICghY2FjaGVkU2NyaXB0KSB7CiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIERpc3Bh
dGNoIGVycm9yIGV2ZW50LgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTMsMjkgKzI4NSwy
NCBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBzY3JpcHQsIGNv
bnN0IFRleHRQb3NpdGlvbjEmIHNjcmlwdFN0YQogCiAgICAgICAgIFNjcmlwdEVsZW1lbnQqIHNj
cmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQoc2NyaXB0KTsKICAgICAgICAgQVNTRVJUKHNj
cmlwdEVsZW1lbnQpOwotICAgICAgICBpZiAoIXNjcmlwdEVsZW1lbnQtPnNob3VsZEV4ZWN1dGVB
c0phdmFTY3JpcHQoKSkKKworICAgICAgICBzY3JpcHRFbGVtZW50LT5wcmVwYXJlU2NyaXB0KHNj
cmlwdFN0YXJ0UG9zaXRpb24pOworCisgICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+d2lsbEJl
UGFyc2VyRXhlY3V0ZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAg
IGlmIChzY3JpcHQtPmhhc0F0dHJpYnV0ZShzcmNBdHRyKSkgewotICAgICAgICAgICAgaWYgKHNj
cmlwdC0+aGFzQXR0cmlidXRlKGFzeW5jQXR0cikpIC8vIEFzeW5jIHRha2VzIHByZWNlbmRlbmNl
IG92ZXIgZGVmZXIuCi0gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBBc3luY2hyb25vdXMgc2Ny
aXB0cyBoYW5kbGUgdGhlbXNlbHZlcy4KLQotICAgICAgICAgICAgaWYgKHNjcmlwdC0+aGFzQXR0
cmlidXRlKGRlZmVyQXR0cikpCi0gICAgICAgICAgICAgICAgcmVxdWVzdERlZmVycmVkU2NyaXB0
KHNjcmlwdCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVxdWVzdFBhcnNp
bmdCbG9ja2luZ1NjcmlwdChzY3JpcHQpOwotICAgICAgICB9IGVsc2UgaWYgKCFtX2RvY3VtZW50
LT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJiBtX3NjcmlwdE5lc3RpbmdMZXZlbCA9PSAxKSB7
Ci0gICAgICAgICAgICAvLyBCbG9jayBpbmxpbmUgc2NyaXB0IGV4ZWN1dGlvbiBvbiBzdHlsZXNo
ZWV0IGxvYWQsIHVubGVzcyB3ZSBhcmUgaW4gZG9jdW1lbnQud3JpdGUoKS4KLSAgICAgICAgICAg
IC8vIFRoZSBsYXR0ZXIgY2FzZSBjYW4gb25seSBoYXBwZW4gaWYgYSBzY3JpcHQgYm90aCB0cmln
Z2VycyBhIHN0eWxlc2hlZXQgbG9hZAotICAgICAgICAgICAgLy8gYW5kIHdyaXRlcyBhbiBpbmxp
bmUgc2NyaXB0LiBTaW5jZSB3cml0ZSBpcyBibG9ja2luZyB3ZSBoYXZlIHRvIGV4ZWN1dGUgdGhl
Ci0gICAgICAgICAgICAvLyB3cml0dGVuIHNjcmlwdCBpbW1lZGlhdGVseSwgaWdub3JpbmcgdGhl
IHBlbmRpbmcgc2hlZXRzLgotICAgICAgICAgICAgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuc2V0
RWxlbWVudChzY3JpcHQpOwotICAgICAgICAgICAgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuc2V0
U3RhcnRpbmdQb3NpdGlvbihzY3JpcHRTdGFydFBvc2l0aW9uKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVChpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKLSAgICAgICAgICAgIFNj
cmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShzY3JpcHQtPnRleHRDb250ZW50KCksIGRvY3VtZW50
VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsK
LSAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7Ci0g
ICAgICAgIH0KKworICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEV4ZWN1dGVXaGVuRG9j
dW1lbnRGaW5pc2hlZFBhcnNpbmcoKSkKKyAgICAgICAgICAgIHJlcXVlc3REZWZlcnJlZFNjcmlw
dChzY3JpcHQpOworICAgICAgICBlbHNlIGlmIChzY3JpcHRFbGVtZW50LT5yZWFkeVRvQmVQYXJz
ZXJFeGVjdXRlZCgpKSB7CisgICAgICAgICAgICBpZiAobV9zY3JpcHROZXN0aW5nTGV2ZWwgPT0g
MSkgeworICAgICAgICAgICAgICAgIG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0LnNldEVsZW1lbnQo
c2NyaXB0KTsKKyAgICAgICAgICAgICAgICBtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdC5zZXRTdGFy
dGluZ1Bvc2l0aW9uKHNjcmlwdFN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0
Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2Ny
aXB0U3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0
ZVNjcmlwdChzb3VyY2VDb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICByZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KHNjcmlwdCk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggYmFiYjFlNzJiNjMy
MDVkMTdjMzZhMDEzMjkxZTI0MTUzN2Y4MmVlMC4uN2QyNTVmOTAyOGVjMWVjOTI4ZjE4NGJmNTBi
MGIwMTFhZDRmYTVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcApA
QCAtNzIsNyArNzIsNyBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIC8vIEhhbmRsZSBkeW5h
bWljIHVwZGF0ZXMgb2YgdGhlICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyBhdHRyaWJ1dGUu
IE9ubHkgcG9zc2libGUgY2FzZTogY2hhbmdpbmcgZnJvbSAndHJ1ZScgdG8gJ2ZhbHNlJwogICAg
ICAgICAvLyBjYXVzZXMgYW4gaW1tZWRpYXRlIGRpc3BhdGNoIG9mIHRoZSBTVkdMb2FkIGV2ZW50
LiBJZiB0aGUgYXR0cmlidXRlIHZhbHVlIHdhcyAnZmFsc2UnIGJlZm9yZSBpbnNlcnRpbmcgdGhl
IHNjcmlwdCBlbGVtZW50CiAgICAgICAgIC8vIGluIHRoZSBkb2N1bWVudCwgdGhlIFNWR0xvYWQg
ZXZlbnQgaGFzIGFscmVhZHkgYmVlbiBkaXNwYXRjaGVkLgotICAgICAgICBpZiAoIWV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWRCYXNlVmFsdWUoKSAmJiAhaGF2ZUZpcmVkTG9hZEV2ZW50KCkgJiYg
IXdhc0luc2VydGVkQnlQYXJzZXIoKSkgeworICAgICAgICBpZiAoIWV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWRCYXNlVmFsdWUoKSAmJiAhaGF2ZUZpcmVkTG9hZEV2ZW50KCkgJiYgIWlzUGFyc2Vy
SW5zZXJ0ZWQoKSkgewogICAgICAgICAgICAgc2V0SGF2ZUZpcmVkTG9hZEV2ZW50KHRydWUpOwog
ICAgICAgICAgICAgQVNTRVJUKGhhdmVMb2FkZWRSZXF1aXJlZFJlc291cmNlcygpKTsKIApAQCAt
MTExLDkgKzExMSw5IEBAIHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6ZmlsbEF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwKCkKIHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoKQogewogICAgIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgU2Ny
aXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoc291cmNlQXR0cmlidXRlVmFsdWUoKSk7
CisgICAgU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKIAotICAgIGlmICh3
YXNJbnNlcnRlZEJ5UGFyc2VyKCkpCisgICAgaWYgKGlzUGFyc2VySW5zZXJ0ZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gRXZlbnR1YWxseSBzZW5kIFNWR0xvYWQgZXZlbnQgbm93IGZv
ciB0aGUgZHluYW1pY2FsbHkgaW5zZXJ0ZWQgc2NyaXB0IGVsZW1lbnQKQEAgLTE0Miw3ICsxNDIs
NiBAQCBib29sIFNWR1NjcmlwdEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0
cikgY29uc3QKIAogdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4o
KQogewotICAgIFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbihzb3VyY2VBdHRy
aWJ1dGVWYWx1ZSgpKTsKICAgICBTVkdFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsK
IAogICAgIC8vIEEgU1ZHTG9hZCBldmVudCBoYXMgYmVlbiBmaXJlZCBieSBTVkdFbGVtZW50Ojpm
aW5pc2hQYXJzaW5nQ2hpbGRyZW4uCkBAIC0yMTIsMTEgKzIxMSwxNiBAQCBib29sIFNWR1Njcmlw
dEVsZW1lbnQ6OmRlZmVyQXR0cmlidXRlVmFsdWUoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorYm9vbCBTVkdTY3JpcHRFbGVtZW50OjpoYXNTb3VyY2VBdHRyaWJ1dGUoKSBjb25zdAor
eworICAgIHJldHVybiBoYXNBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOworfQorCiB2
b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoTG9hZEV2ZW50KCkKIHsKICAgICBib29sIGV4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQgPSBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZh
bHVlKCk7CiAKLSAgICBpZiAod2FzSW5zZXJ0ZWRCeVBhcnNlcigpKQorICAgIGlmIChpc1BhcnNl
ckluc2VydGVkKCkpCiAgICAgICAgIEFTU0VSVChleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkICE9
IGhhdmVGaXJlZExvYWRFdmVudCgpKTsKICAgICBlbHNlIGlmIChoYXZlRmlyZWRMb2FkRXZlbnQo
KSkgewogICAgICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZpcmVkIGFuIGxvYWQgZXZlbnQgYW5k
IGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQgaXMgc2V0IHRvICd0cnVlJwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTY3JpcHRFbGVtZW50LmgKaW5kZXggZGFiZWM3OTZkZDVhYTAwNTMyYjg5OTY0YzA2YTM4
ZWEzYjI3YzA3ZC4uYzUyZGFjZmM4YmM3OTExOTU0ZTliZmZjM2VlMWRjNzAxMTkxNTI1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCkBAIC02OCw2ICs2OCw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBTdHJpbmcgZXZlbnRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBhc3luY0F0dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGRlZmVyQXR0cmlidXRlVmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU291
cmNlQXR0cmlidXRlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hMb2FkRXZl
bnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hFcnJvckV2ZW50KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82876</attachid>
            <date>2011-02-17 16:44:37 -0800</date>
            <delta_ts>2011-02-17 18:05:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54676-20110217164435.patch</filename>
            <type>text/plain</type>
            <size>44557</size>
            <attacher name="James Simonsen">simonjam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1OTI3YzVlMDVkMjIwODg4MWQ5YTYxYmY0YWMwYmE0ZjgxOTZjYmI2Li40NDFiYTM2
ZjRjMWJiNGExYWVkZTRlYmYwMWFkNmM1NzFmNWE4NDZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAK
KzIwMTEtMDItMTYgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgU2NyaXB0
RWxlbWVudCBtYXRjaCB0aGUgSFRNTDUgc3BlYworCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB0
aGUgInByZXBhcmUgYSBzY3JpcHQiIHNlY3Rpb24gb2YgdGhlIEhUTUw1IHNwZWMgaW4gU2NyaXB0
RWxlbWVudDo6cHJlcGFyZVNjcmlwdCgpLgorICAgICAgICBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI3By
ZXBhcmUtYS1zY3JpcHQKKworICAgICAgICBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIG1p
c3NpbmcgZnJvbSB0aGUgc3BlYyB0aGF0IHdvdWxkIGJlIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGVz
ZSB3aWxsIGJlIGFkZGVkIGxhdGVyLgorICAgICAgICAtIFN1cHBvcnQgZm9yIGFzeW5jPWZhbHNl
CisgICAgICAgIC0gRW1wdHkgc3JjIGF0dHJpYnV0ZSBzaG91bGQgZGlzcGF0Y2ggYW4gZXJyb3Iu
CisKKyAgICAgICAgVGhlcmUgYXJlIGEgY291cGxlIG9mIHNsaWdodCBiZWhhdmlvcmFsIGNoYW5n
ZXMgdG8gbWF0Y2ggdGhlIHNwZWMuCisgICAgICAgIC0gQW4gWEhUTUwgc2NyaXB0IHRoYXQgaXMg
bG9hZGVkIHRoZW4gY29waWVkIHdpbGwgbm90IGZpcmUgbG9hZCBvbiB0aGUgY29weS4KKyAgICAg
ICAgLSBJZiBvbmJlZm9yZWxvYWQgbW92ZXMgdGhlIHNjcmlwdCB0byBhIGRpZmZlcmVudCBkb2N1
bWVudCwgdGhlbiBpdCB3aWxsIG5vdCB0cnkgdG8gZXhlY3V0ZSBhZ2FpbiBiZWNhdXNlIHdhc0Fs
cmVhZHlTdGFydGVkIGlzIHRydWUuCisKKyAgICAgICAgVGhlIHBhcnNlcnMgd2VyZSB1cGRhdGVk
IHRvIHVzZSB0aGUgbmV3IEFQSSwgYnV0IG5vdCByZXdyaXR0ZW4gdG8gbG9vayBsaWtlIHRoZSBz
cGVjLiBUaGF0IHdpbGwgYmUgZG9uZSBzZXBhcmF0ZWx5LgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY3NgorCisgICAgICAgICogZmFzdC9kb20v
SFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZvcmVsb2FkLmh0bWw6IE9yaWdpbmFsIGF1dGhv
ciBzYXlzIHRlc3Qgd2FzIG9ubHkgbWVhbnQgdG8gY2hlY2sgZm9yIGNyYXNoZXMuIEJlZm9yZWxv
YWQgaXMgbm90IHNwZWNpZmllZCBieSBIVE1MNS4gVGVzdCB3YXMgbW9kaWZpZWQgdG8gYXNzdW1l
IG1vdmVkIHNjcmlwdCB3b3VsZG4ndCBleGVjdXRlIGJlY2F1c2Ugd2FzQWxyZWFkeVN0YXJ0ZWQg
aXMgc2V0LgorICAgICAgICAqIGZhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWw6
IEFjY29yZGluZyB0byBIVE1MNSBzcGVjLCBsb2FkIHNob3VsZCBvbmx5IGZpcmUgYWZ0ZXIgYSBz
Y3JpcHQgZXhlY3V0ZXMuIFRlc3Qgd2FzIG1vZGlmaWVkIHRvIG1hdGNoIHRoYXQuIFRoZSBvbGQg
YnJva2VuIGJlaGF2aW9yIHdhcyB0aGF0IGxvYWQgZmlyZWQgb24gdGhlIGNsb25lZCBlbGVtZW50
LCBldmVuIHRob3VnaCBpdCBkaWRuJ3QgZXhlY3V0ZS4KKwogMjAxMS0wMi0xNyAgUGhpbGlwcGUg
Tm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmVi
YXNlbGluZSBHVEsgdGVzdCByZXN1bHRzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vSFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZvcmVsb2FkLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRtbAppbmRl
eCA3N2JlZWQwNmIzODJkZjU0NzUzZmYxYjY2MTlkYzRmNzBmOTU5NTEzLi5kOGY4OWYzZDRjYTJm
MjljNDM1ZWU5YmIxZTViNTUzNDk4NWZlMGUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRt
bApAQCAtOCw3ICs4LDYgQEAKIDxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvZnJhbWUuaHRtbCI+PC9p
ZnJhbWU+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CiB9CiAKQEAgLTE4LDE0ICsxNyw3IEBAIGZ1bmN0aW9uIHRl
c3QoKQogICAgIHMuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlbG9hZCIsIGZ1bmN0aW9uKCkgewog
ICAgICAgICB2YXIgcyA9IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzJdKTsKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoImlmcmFtZSIpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KHMpOwotICAgIH0sIGZhbHNlKTsKLSAgICBzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoImVycm9yIGV2ZW50IHNob3VsZCBub3QgZmly
ZS4iKQotICAgIH0sIGZhbHNlKTsKLSAgICBzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5j
dGlvbigpIHsKICAgICAgICAgdGVzdFBhc3NlZCgiIik7Ci0gICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CiAgICAgfSwgZmFsc2UpOwogICAgIHMuc3JjID0gImV4dGVybmFsLmpzIjsKICAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNyYy54aHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWwKaW5kZXggZWRiZTgyOWFjOWFmMzhkNGQz
MDUzMTY1MmYxYmIyNjgzODE3ZmVkZC4uYjFkNTk2YTBiMTRjMTUyNjc3ZjVjMjMzMWZlNjYxYzg0
MzczNzRmYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJl
cnVuLXNyYy54aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtY2xvbmUtcmVy
dW4tc3JjLnhodG1sCkBAIC05LDcgKzksNiBAQCB2YXIgaSA9IDA7CiAKIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogfQogCiB2YXIg
Zmlyc3RMb2FkID0gdHJ1ZTsKQEAgLTI2LDggKzI1LDYgQEAgZnVuY3Rpb24gbG9hZGVkKCkgewog
ICAgIGVsc2UgaWYgKGkgPiAyKQogICAgICAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4gJyAr
IGkgKyAnIHRpbWVzJzsKICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHJlc3VsdCkpOwotCi0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOwogfQogCiA8L3NjcmlwdD4KQEAgLTQyLDYgKzM5LDggQEAgdmFyIGRpdiA9IHNjcmlw
dC5wYXJlbnROb2RlOwogZGl2LnJlbW92ZUNoaWxkKHNjcmlwdCk7CiBkaXYuYXBwZW5kQ2hpbGQo
c2NyaXB0LmNsb25lTm9kZSh0cnVlKSk7CiAKK2xvYWRlZCgpOworCiA8L3NjcmlwdD4KIDwvYm9k
eT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZTdiOWUwMjg5MjhkOGJkYzk5OGYzYTJjN2UzYTI3
MWYzNWIzZjYwLi4yNjllMmUxNWYzMzhmN2UzMmI5ZWE4YTI0NjMzMGVjOWVmNDc4MzUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDItMTYgIEphbWVzIFNpbW9uc2VuICA8c2lt
b25qYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1ha2UgU2NyaXB0RWxlbWVudCBtYXRjaCB0aGUgSFRNTDUgc3BlYworCisg
ICAgICAgIFRoaXMgaW1wbGVtZW50cyB0aGUgInByZXBhcmUgYSBzY3JpcHQiIHNlY3Rpb24gb2Yg
dGhlIEhUTUw1IHNwZWMgaW4gU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdCgpLgorICAgICAg
ICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRp
cGFnZS9zY3JpcHRpbmctMS5odG1sI3ByZXBhcmUtYS1zY3JpcHQKKworICAgICAgICBUaGVyZSBh
cmUgYSBjb3VwbGUgb2YgdGhpbmdzIG1pc3NpbmcgZnJvbSB0aGUgc3BlYyB0aGF0IHdvdWxkIGJl
IG5ldyBmdW5jdGlvbmFsaXR5LiBUaGVzZSB3aWxsIGJlIGFkZGVkIGxhdGVyLgorICAgICAgICAt
IFN1cHBvcnQgZm9yIGFzeW5jPWZhbHNlCisgICAgICAgIC0gRW1wdHkgc3JjIGF0dHJpYnV0ZSBz
aG91bGQgZGlzcGF0Y2ggYW4gZXJyb3IuCisKKyAgICAgICAgVGhlcmUgYXJlIGEgY291cGxlIG9m
IHNsaWdodCBiZWhhdmlvcmFsIGNoYW5nZXMgdG8gbWF0Y2ggdGhlIHNwZWMuCisgICAgICAgIC0g
QW4gWEhUTUwgc2NyaXB0IHRoYXQgaXMgbG9hZGVkIHRoZW4gY29waWVkIHdpbGwgbm90IGZpcmUg
bG9hZCBvbiB0aGUgY29weS4KKyAgICAgICAgLSBJZiBvbmJlZm9yZWxvYWQgbW92ZXMgdGhlIHNj
cmlwdCB0byBhIGRpZmZlcmVudCBkb2N1bWVudCwgdGhlbiBpdCB3aWxsIG5vdCB0cnkgdG8gZXhl
Y3V0ZSBhZ2FpbiBiZWNhdXNlIHdhc0FscmVhZHlTdGFydGVkIGlzIHRydWUuCisKKyAgICAgICAg
VGhlIHBhcnNlcnMgd2VyZSB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IEFQSSwgYnV0IG5vdCByZXdy
aXR0ZW4gdG8gbG9vayBsaWtlIHRoZSBzcGVjLiBUaGF0IHdpbGwgYmUgZG9uZSBzZXBhcmF0ZWx5
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY3
NgorCisgICAgICAgIFRlc3Q6IEFsbCBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9T
Y3JpcHRFbGVtZW50LmNwcDogUmV3cml0dGVuIHRvIG1hdGNoIEhUTUw1IHNwZWMuCisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpTY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KTogTG9naWMgbW92ZWQgdG8g
cHJlcGFyZVNjcmlwdC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVu
Q2hhbmdlZCk6IExvZ2ljIG1vdmVkIHRvIHByZXBhcmVTY3JpcHQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRFbGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1dGUpOiBMb2dpYyBtb3ZlZCB0byBw
cmVwYXJlU2NyaXB0LgorICAgICAgICAoV2ViQ29yZTo6aXNMZWdhY3lTdXBwb3J0ZWRKYXZhU2Ny
aXB0TGFuZ3VhZ2UpOiBBZGRlZCB0byBzdXBwb3J0IG9sZCBzY3JpcHQgdHlwZXMgaW4gbGF5b3V0
IHRlc3RzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aXNTY3JpcHRUeXBlU3Vw
cG9ydGVkKTogRGVyaXZlZCBmcm9tIG9sZCBzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpwcmVwYXJlU2NyaXB0KTogU1RBUlQgSEVS
RS4gTWFpbiBjaGFuZ2UuIFNob3VsZCByZWFkIGV4YWN0bHkgbGlrZSBIVE1MNSdzICJwcmVwYXJl
IGEgc2NyaXB0LiIgTGVnYWN5IHR5cGUgc3VwcG9ydCBuZWVkZWQgZm9yIGxheW91dCB0ZXN0cyB1
c2luZyBYTUwgcGFyc2VyLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6cmVxdWVz
dFNjcmlwdCk6IE1vc3QgbG9naWMgbW92ZWQgdG8gcHJlcGFyZVNjcmlwdC4gQ2hlY2sgc2VjdXJp
dHkgc2V0dGluZ3MgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1
dGVTY3JpcHQpOiBDb21iaW5lZCBldmFsdWF0ZVNjcmlwdCgpIGFuZCBleGVjdXRlU2NyaXB0KCkg
ZnJvbSBvbGQgY29kZS4gTG9naWMgbW92ZWQgdG8gcHJlcGFyZVNjcmlwdC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnN0b3BMb2FkUmVxdWVzdCk6IElnbm9yZSBwYXJzZXIgZXhl
Y3V0ZWQgc2NyaXB0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGUp
OiBSZW5hbWVkIGV4ZWN1dGVTY3JpcHQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50
Ojpub3RpZnlGaW5pc2hlZCk6IFdlIHNob3VsZCBvbmx5IGxpc3RlbiBmb3Igbm9uLXBhcnNlciBl
eGVjdXRlZCBzY3JpcHRzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aWdub3Jl
c0xvYWRSZXF1ZXN0KTogTmV3IHZhcmlhYmxlIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RWxlbWVudDo6Y2hpbGRyZW5BcmVDb21tZW50c09yRW1wdHlUZXh0KTogQWRkZWQgZm9yIEhU
TUw1IGNvbXBsaWFuY2UuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpzY3JpcHRD
aGFyc2V0KTogVXNlIEhUTUw1IHZhcmlhYmxlcy4KKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6d2lsbEJlUGFyc2VyRXhlY3V0
ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnJlYWR5VG9CZVBh
cnNlckV4ZWN1dGVkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojp3
aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZyk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6Y2FjaGVkU2NyaXB0KTogcHJlcGFyZVNjcmlwdCgpIGlz
IHRoZSBvbmx5IHBsYWNlIHRoYXQgc2hvdWxkIGxvYWQgc2NyaXB0cy4gVGhpcyBhY2Nlc3NvciBs
ZXRzIHRoZSBwYXJzZXJzIGxpc3RlbiBmb3Igd2hlbiBsb2FkcyBmaW5pc2guCisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojppc1BhcnNlckluc2VydGVkKTogQWRkZWQuCisgICAgICAg
ICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpY
TUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKTogU2hvdWxkIGJlaGF2ZSB0aGUgc2FtZS4g
T2ZmbG9hZHMgbXVjaCBvZiBpdHMgd29yayB0byBwcmVwYXJlU2NyaXB0KCkuCisgICAgICAgICog
ZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCk6IElkZW50aWNhbCB0byBsaWJ4bWwyIGNoYW5nZXMu
CisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBObyBsb25nZXIgbmVl
ZHMgdXJsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6Omhhc1NvdXJjZUF0
dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KTogUmVxdWVzdGluZyBz
Y3JpcHRzIG9mZmxvYWRlZCB0byBTY3JpcHRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KTogU2hvdWxkIGJlaGF2ZSB0aGUgc2FtZS4gT2ZmbG9h
ZHMgbXVjaCBvZiBpdHMgd29yayB0byBwcmVwYXJlU2NyaXB0KCkuCisgICAgICAgICogc3ZnL1NW
R1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZCk6IE5ldyBTY3JpcHRFbGVtZW50IGZ1bmN0aW9uIG5hbWVzLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQp
OiBObyBsb25nZXIgbmVlZHMgdXJsLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVu
dDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKTogU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0No
aWxkcmVuIGlzIGdvbmUuCisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50OjpoYXNT
b3VyY2VBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1l
bnQ6OmRpc3BhdGNoTG9hZEV2ZW50KTogTmV3IFNjcmlwdEVsZW1lbnQgZnVuY3Rpb24gbmFtZXMu
CisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaDoKKwogMjAxMS0wMi0xNyAgSHVpIEh1
YW5nICA8aHVpLjIuaHVhbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3ps
byBHb21ib3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggMTkzOWEwODBk
ZmM4ODM2OWYwMmZmZjc2Y2U2ODNiYzU2YmEzODUyYi4uYmRhZGVjOWY0ZjNjODY1YjIzOWQ1MDhk
ZWUwM2E1MTBiODU5N2I5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcApAQCAt
NTEsMTMgKzUxLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2NyaXB0RWxlbWVudDo6
U2NyaXB0RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBib29sIHdhc0luc2VydGVkQnlQYXJzZXIs
IGJvb2wgd2FzQWxyZWFkeVN0YXJ0ZWQpCitTY3JpcHRFbGVtZW50OjpTY3JpcHRFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQsIGJvb2wgcGFyc2VySW5zZXJ0ZWQsIGJvb2wgYWxyZWFkeVN0YXJ0ZWQp
CiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAsIG1fY2FjaGVkU2NyaXB0KDApCi0gICAg
LCBtX3dhc0luc2VydGVkQnlQYXJzZXIod2FzSW5zZXJ0ZWRCeVBhcnNlcikKKyAgICAsIG1fcGFy
c2VySW5zZXJ0ZWQocGFyc2VySW5zZXJ0ZWQpCisgICAgLCBtX3dhc1BhcnNlckluc2VydGVkKGZh
bHNlKQogICAgICwgbV9pc0V4dGVybmFsU2NyaXB0KGZhbHNlKQotICAgICwgbV93YXNBbHJlYWR5
U3RhcnRlZCh3YXNBbHJlYWR5U3RhcnRlZCkKKyAgICAsIG1fYWxyZWFkeVN0YXJ0ZWQoYWxyZWFk
eVN0YXJ0ZWQpCiAgICAgLCBtX2hhdmVGaXJlZExvYWQoZmFsc2UpCisgICAgLCBtX3dpbGxCZVBh
cnNlckV4ZWN1dGVkKGZhbHNlKQorICAgICwgbV9yZWFkeVRvQmVQYXJzZXJFeGVjdXRlZChmYWxz
ZSkKKyAgICAsIG1fd2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRGaW5pc2hlZFBhcnNpbmcoZmFsc2Up
CiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiB9CkBAIC02NywyMiArNzEsMTAgQEAgU2NyaXB0
RWxlbWVudDo6flNjcmlwdEVsZW1lbnQoKQogICAgIHN0b3BMb2FkUmVxdWVzdCgpOwogfQogCi12
b2lkIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KGNvbnN0IFN0cmluZyYgc291
cmNlVXJsKQordm9pZCBTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7Ci0g
ICAgaWYgKHdhc0luc2VydGVkQnlQYXJzZXIoKSAmJiAhaXNBc3luY2hyb25vdXMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBz
L2N1cnJlbnQtd29yay8jc2NyaXB0Ci0KLSAgICBpZiAoIXNvdXJjZVVybC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgcmVxdWVzdFNjcmlwdChzb3VyY2VVcmwpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gSWYgdGhlcmUncyBhbiBlbXB0eSBzY3JpcHQgbm9kZSwgd2Ugc2hvdWxkbid0
IGV2YWx1YXRlIHRoZSBzY3JpcHQKLSAgICAvLyBiZWNhdXNlIGlmIGEgc2NyaXB0IGlzIGluc2Vy
dGVkIGFmdGVyd2FyZHMgKGJ5IHNldHRpbmcgdGV4dCBvciBpbm5lclRleHQpCi0gICAgLy8gaXQg
c2hvdWxkIGJlIGV2YWx1YXRlZCwgYW5kIGV2YWx1YXRlU2NyaXB0IG9ubHkgZXZhbHVhdGVzIGEg
c2NyaXB0IG9uY2UuCi0gICAgZXZhbHVhdGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRD
b250ZW50KCksIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+dXJsKCkpKTsgLy8gRklYTUU6IFByb3Zp
ZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUuCisgICAgaWYgKCFtX3BhcnNlcklu
c2VydGVkKQorICAgICAgICBwcmVwYXJlU2NyaXB0KCk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVh
bCBzdGFydGluZyBsaW5lIG51bWJlciBoZXJlLgogfQogCiB2b2lkIFNjcmlwdEVsZW1lbnQ6OnJl
bW92ZWRGcm9tRG9jdW1lbnQoKQpAQCAtOTMsMjIgKzg1LDggQEAgdm9pZCBTY3JpcHRFbGVtZW50
OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIAogdm9pZCBTY3JpcHRFbGVtZW50OjpjaGlsZHJlbkNo
YW5nZWQoKQogewotICAgIGlmICh3YXNJbnNlcnRlZEJ5UGFyc2VyKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIElmIGEgbm9kZSBpcyBpbnNlcnRlZCBhcyBhIGNoaWxkIG9mIHRoZSBzY3Jp
cHQgZWxlbWVudAotICAgIC8vIGFuZCB0aGUgc2NyaXB0IGVsZW1lbnQgaGFzIGJlZW4gaW5zZXJ0
ZWQgaW4gdGhlIGRvY3VtZW50Ci0gICAgLy8gd2UgZXZhbHVhdGUgdGhlIHNjcmlwdC4KLSAgICBp
ZiAobV9lbGVtZW50LT5pbkRvY3VtZW50KCkgJiYgbV9lbGVtZW50LT5maXJzdENoaWxkKCkpCi0g
ICAgICAgIGV2YWx1YXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0Q29udGVudCgpLCBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPnVybCgpKSk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVhbCBz
dGFydGluZyBsaW5lIG51bWJlciBoZXJlCi19Ci0KLXZvaWQgU2NyaXB0RWxlbWVudDo6ZmluaXNo
UGFyc2luZ0NoaWxkcmVuKGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQotewotICAgIC8vIFRoZSBw
YXJzZXIganVzdCByZWFjaGVkIDwvc2NyaXB0Pi4gSWYgd2UgaGF2ZSBubyBzcmMgYW5kIG5vIHRl
eHQsCi0gICAgLy8gYWxsb3cgZHluYW1pYyBsb2FkaW5nIGxhdGVyLgotICAgIGlmIChzb3VyY2VV
cmwuaXNFbXB0eSgpICYmIHNjcmlwdENvbnRlbnQoKS5pc0VtcHR5KCkpCi0gICAgICAgIG1fd2Fz
SW5zZXJ0ZWRCeVBhcnNlciA9IGZhbHNlOworICAgIGlmICghbV9wYXJzZXJJbnNlcnRlZCAmJiBt
X2VsZW1lbnQtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgcHJlcGFyZVNjcmlwdCgpOyAvLyBGSVhN
RTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4KIH0KIAogdm9pZCBT
Y3JpcHRFbGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VV
cmwpCkBAIC0xMTYsMTIgKzk0LDE5IEBAIHZvaWQgU2NyaXB0RWxlbWVudDo6aGFuZGxlU291cmNl
QXR0cmlidXRlKGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQogICAgIGlmIChpZ25vcmVzTG9hZFJl
cXVlc3QoKSB8fCBzb3VyY2VVcmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBy
ZXF1ZXN0U2NyaXB0KHNvdXJjZVVybCk7CisgICAgcHJlcGFyZVNjcmlwdCgpOyAvLyBGSVhNRTog
UHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4KIH0KIAogLy8gSGVscGVy
IGZ1bmN0aW9uCi1zdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZShjb25z
dCBTdHJpbmcmIGxhbmd1YWdlKQorc3RhdGljIGJvb2wgaXNMZWdhY3lTdXBwb3J0ZWRKYXZhU2Ny
aXB0TGFuZ3VhZ2UoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkKIHsKKyAgICAvLyBNb3ppbGxhIDEu
OCBhY2NlcHRzIGphdmFzY3JpcHQxLjAgLSBqYXZhc2NyaXB0MS43LCBidXQgV2luSUUgNyBhY2Nl
cHRzIG9ubHkgamF2YXNjcmlwdDEuMSAtIGphdmFzY3JpcHQxLjMuCisgICAgLy8gTW96aWxsYSAx
LjggYW5kIFdpbklFIDcgYm90aCBhY2NlcHQgamF2YXNjcmlwdCBhbmQgbGl2ZXNjcmlwdC4KKyAg
ICAvLyBXaW5JRSA3IGFjY2VwdHMgZWNtYXNjcmlwdCBhbmQganNjcmlwdCwgYnV0IE1vemlsbGEg
MS44IGRvZXNuJ3QuCisgICAgLy8gTmVpdGhlciBNb3ppbGxhIDEuOCBub3IgV2luSUUgNyBhY2Nl
cHQgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgIC8vIFdlIHdhbnQgdG8gYWNj
ZXB0IGFsbCB0aGUgdmFsdWVzIHRoYXQgZWl0aGVyIG9mIHRoZXNlIGJyb3dzZXJzIGFjY2VwdCwg
YnV0IG5vdCBvdGhlciB2YWx1ZXMuCisKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyBu
b3QgSFRNTDUgY29tcGxpYW50LiBUaGVzZSBiZWxvbmcgaW4gdGhlIE1JTUUgcmVnaXN0cnkgYXMg
InRleHQvamF2YXNjcmlwdDx2ZXJzaW9uPiIgZW50cmllcy4KICAgICB0eXBlZGVmIEhhc2hTZXQ8
U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IExhbmd1YWdlU2V0OwogICAgIERFRklORV9TVEFUSUNf
TE9DQUwoTGFuZ3VhZ2VTZXQsIGxhbmd1YWdlcywgKCkpOwogICAgIGlmIChsYW5ndWFnZXMuaXNF
bXB0eSgpKSB7CkBAIC0xMzcsNTggKzEyMiwxMzMgQEAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRK
YXZhU2NyaXB0TGFuZ3VhZ2UoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkKICAgICAgICAgbGFuZ3Vh
Z2VzLmFkZCgiamF2YXNjcmlwdDEuNyIpOwogICAgICAgICBsYW5ndWFnZXMuYWRkKCJsaXZlc2Ny
aXB0Iik7CiAgICAgICAgIGxhbmd1YWdlcy5hZGQoImVjbWFzY3JpcHQiKTsKLSAgICAgICAgbGFu
Z3VhZ2VzLmFkZCgianNjcmlwdCIpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgbGFuZ3VhZ2Vz
LmFkZCgianNjcmlwdCIpOwogICAgIH0KIAogICAgIHJldHVybiBsYW5ndWFnZXMuY29udGFpbnMo
bGFuZ3VhZ2UpOwogfQogCi12b2lkIFNjcmlwdEVsZW1lbnQ6OnJlcXVlc3RTY3JpcHQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VVcmwpCitib29sIFNjcmlwdEVsZW1lbnQ6OmlzU2NyaXB0VHlwZVN1cHBv
cnRlZChMZWdhY3lUeXBlU3VwcG9ydCBzdXBwb3J0TGVnYWN5VHlwZXMpIGNvbnN0Cit7CisgICAg
Ly8gRklYTUU6IGlzTGVnYWN5U3VwcG9ydGVkSmF2YVNjcmlwdExhbmd1YWdlKCkgaXMgbm90IHZh
bGlkIEhUTUw1LiBJdCBpcyB1c2VkIGhlcmUgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGli
aWxpdHkgd2l0aCBleGlzdGluZyBsYXlvdXQgdGVzdHMuIFRoZSBzcGVjaWZpYyB2aW9sYXRpb25z
IGFyZToKKyAgICAvLyAtIEFsbG93aW5nIHR5cGU9amF2YXNjcmlwdC4gdHlwZT0gc2hvdWxkIG9u
bHkgc3VwcG9ydCBNSU1FIHR5cGVzLCBzdWNoIGFzIHRleHQvamF2YXNjcmlwdC4KKyAgICAvLyAt
IEFsbG93aW5nIGEgZGlmZmVyZW50IHNldCBvZiBsYW5ndWFnZXMgZm9yIGxhbmd1YWdlPSBhbmQg
dHlwZT0uIGxhbmd1YWdlPSBzdXBwb3J0cyBKYXZhc2NyaXB0IDEuMSBhbmQgMS40LTEuNiwgYnV0
IHR5cGU9IGRvZXMgbm90LgorCisgICAgU3RyaW5nIHR5cGUgPSB0eXBlQXR0cmlidXRlVmFsdWUo
KTsKKyAgICBpZiAoIXR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghTUlNRVR5cGVSZWdp
c3RyeTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUodHlwZS5zdHJpcFdoaXRlU3BhY2Uo
KS5sb3dlcigpKSAmJiAhKHN1cHBvcnRMZWdhY3lUeXBlcyA9PSBBbGxvd0xlZ2FjeVR5cGVJblR5
cGVBdHRyaWJ1dGUgJiYgaXNMZWdhY3lTdXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZ2UodHlwZSkp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIFN0cmlu
ZyBsYW5ndWFnZSA9IGxhbmd1YWdlQXR0cmlidXRlVmFsdWUoKTsKKyAgICAgICAgaWYgKCFsYW5n
dWFnZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlID0gInRleHQvIiArIGxh
bmd1YWdlLmxvd2VyKCk7CisgICAgICAgICAgICBpZiAoIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKHR5cGUpICYmICFpc0xlZ2FjeVN1cHBvcnRlZEphdmFT
Y3JpcHRMYW5ndWFnZShsYW5ndWFnZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIGh0dHA6Ly9kZXYu
dzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNwcmVwYXJlLWEtc2NyaXB0Citib29sIFNj
cmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3Rh
cnRQb3NpdGlvbiwgTGVnYWN5VHlwZVN1cHBvcnQgc3VwcG9ydExlZ2FjeVR5cGVzKQogewotICAg
IC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlJ2QgbGlrZSB0byBldmFsdWF0ZSBzY3JpcHRzIHdoaWNo
IGFyZSBpbnNlcnRlZCBpbnRvIGEgCisgICAgaWYgKG1fYWxyZWFkeVN0YXJ0ZWQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3BhcnNlckluc2VydGVkKSB7CisgICAgICAgIG1f
d2FzUGFyc2VySW5zZXJ0ZWQgPSB0cnVlOworICAgICAgICBtX3BhcnNlckluc2VydGVkID0gZmFs
c2U7CisgICAgfSBlbHNlCisgICAgICAgIG1fd2FzUGFyc2VySW5zZXJ0ZWQgPSBmYWxzZTsKKwor
ICAgIC8vIEZJWE1FOiBIVE1MNSBzcGVjIHNheXMgd2Ugc2hvdWxkIHNldCBmb3JjZUFzeW5jLgor
CisgICAgLy8gRklYTUU6IEhUTUw1IHNwZWMgc2F5cyB3ZSBzaG91bGQgY2hlY2sgdGhhdCBhbGwg
Y2hpbGRyZW4gYXJlIGVpdGhlciBjb21tZW50cyBvciBlbXB0eSB0ZXh0IG5vZGVzLgorICAgIGlm
ICghaGFzU291cmNlQXR0cmlidXRlKCkgJiYgIW1fZWxlbWVudC0+Zmlyc3RDaGlsZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fZWxlbWVudC0+aW5Eb2N1bWVudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWlzU2NyaXB0VHlwZVN1cHBvcnRlZChz
dXBwb3J0TGVnYWN5VHlwZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV93
YXNQYXJzZXJJbnNlcnRlZCkKKyAgICAgICAgbV9wYXJzZXJJbnNlcnRlZCA9IHRydWU7CisKKyAg
ICBtX2FscmVhZHlTdGFydGVkID0gdHJ1ZTsKKworICAgIC8vIEZJWE1FOiBJZiBzY3JpcHQgaXMg
cGFyc2VyIGluc2VydGVkLCB2ZXJpZnkgaXQncyBzdGlsbCBpbiB0aGUgb3JpZ2luYWwgZG9jdW1l
bnQuCisKKyAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSdkIGxpa2UgdG8gZXZhbHVhdGUgc2Ny
aXB0cyB3aGljaCBhcmUgaW5zZXJ0ZWQgaW50byBhCiAgICAgLy8gdmlld2xlc3MgZG9jdW1lbnQg
YnV0IHRoaXMnbGwgZG8gZm9yIG5vdy4KICAgICAvLyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTcyNwogICAgIGlmICghbV9lbGVtZW50LT5kb2N1bWVudCgpLT5m
cmFtZSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghbV9lbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zY3JpcHQoKS0+Y2FuRXhlY3V0ZVNj
cmlwdHMoQWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIWlzU2NyaXB0Rm9yRXZlbnRTdXBwb3J0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFjaGFyc2V0QXR0cmlidXRlVmFsdWUoKS5pc0VtcHR5KCkpCisgICAgICAg
IG1fY2hhcmFjdGVyRW5jb2RpbmcgPSBjaGFyc2V0QXR0cmlidXRlVmFsdWUoKTsKKyAgICBlbHNl
CisgICAgICAgIG1fZmFsbGJhY2tDaGFyYWN0ZXJFbmNvZGluZyA9IG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+Y2hhcnNldCgpOworCisgICAgaWYgKGhhc1NvdXJjZUF0dHJpYnV0ZSgpKQorICAgICAg
ICBpZiAoIXJlcXVlc3RTY3JpcHQoc291cmNlQXR0cmlidXRlVmFsdWUoKSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkgJiYgZGVmZXJB
dHRyaWJ1dGVWYWx1ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYgIWFzeW5jQXR0cmlidXRlVmFs
dWUoKSkgeworICAgICAgICBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5n
ID0gdHJ1ZTsKKyAgICAgICAgbV93aWxsQmVQYXJzZXJFeGVjdXRlZCA9IHRydWU7CisgICAgfSBl
bHNlIGlmIChoYXNTb3VyY2VBdHRyaWJ1dGUoKSAmJiBtX3BhcnNlckluc2VydGVkICYmICFhc3lu
Y0F0dHJpYnV0ZVZhbHVlKCkpCisgICAgICAgIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQgPSB0cnVl
OworICAgIGVsc2UgaWYgKCFoYXNTb3VyY2VBdHRyaWJ1dGUoKSAmJiBtX3BhcnNlckluc2VydGVk
ICYmICFtX2VsZW1lbnQtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKSB7Cisg
ICAgICAgIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQgPSB0cnVlOworICAgICAgICBtX3JlYWR5VG9C
ZVBhcnNlckV4ZWN1dGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGhhc1NvdXJjZUF0dHJpYnV0
ZSgpKQorICAgICAgICBtX2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOworICAgIGVsc2UK
KyAgICAgICAgZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdENvbnRlbnQoKSwg
bV9lbGVtZW50LT5kb2N1bWVudCgpLT51cmwoKSwgc2NyaXB0U3RhcnRQb3NpdGlvbikpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2NyaXB0RWxlbWVudDo6cmVxdWVzdFNjcmlwdChj
b25zdCBTdHJpbmcmIHNvdXJjZVVybCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudC0+ZG9jdW1lbnQo
KS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmNhbkxvYWRFeHRlcm5hbFNjcmlwdEZyb21TcmMo
c291cmNlVXJsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPERvY3VtZW50
PiBvcmlnaW5hbERvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpOwogICAgIGlmICghbV9l
bGVtZW50LT5kaXNwYXRjaEJlZm9yZUxvYWRFdmVudChzb3VyY2VVcmwpKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1fZWxlbWVudC0+aW5Eb2N1bWVu
dCgpIHx8IG1fZWxlbWVudC0+ZG9jdW1lbnQoKSAhPSBvcmlnaW5hbERvY3VtZW50KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VSVCghbV9jYWNoZWRT
Y3JpcHQpOworICAgIC8vIEZJWE1FOiBJZiBzb3VyY2VVcmwgaXMgZW1wdHksIHdlIHNob3VsZCBk
aXNwYXRjaEVycm9yRXZlbnQoKS4KICAgICBtX2NhY2hlZFNjcmlwdCA9IG1fZWxlbWVudC0+ZG9j
dW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzb3VyY2VVcmws
IHNjcmlwdENoYXJzZXQoKSk7CiAgICAgbV9pc0V4dGVybmFsU2NyaXB0ID0gdHJ1ZTsKIAotICAg
IC8vIG1fd2FzSW5zZXJ0ZWRCeVBhcnNlciBpcyBuZXZlciByZXNldCAtIGFsd2F5cyByZXNpZWQg
YXQgdGhlIGluaXRpYWwgdmFsdWUgc2V0IHdoaWxlIHBhcnNpbmcuCi0gICAgLy8gbV93YXNBbHJl
YWR5U3RhcnRlZCBpcyBsZWZ0IHVudG91Y2hlZCBhcyB3ZWxsIHRvIGF2b2lkIHNjcmlwdCByZWV4
ZWN1dGlvbiwgaWYgYSA8c2NyaXB0PiBlbGVtZW50Ci0gICAgLy8gaXMgcmVtb3ZlZCBhbmQgcmVh
cHBlbmRlZCB0byB0aGUgZG9jdW1lbnQuCi0gICAgbV9oYXZlRmlyZWRMb2FkID0gZmFsc2U7Ci0K
LSAgICBpZiAobV9jYWNoZWRTY3JpcHQpIHsKLSAgICAgICAgbV9jYWNoZWRTY3JpcHQtPmFkZENs
aWVudCh0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9jYWNoZWRTY3Jp
cHQpCisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7Cisg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNjcmlwdEVsZW1lbnQ6OmV2YWx1YXRlU2NyaXB0
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCit2b2lkIFNjcmlwdEVsZW1lbnQ6
OmV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKIHsKLSAg
ICBpZiAod2FzQWxyZWFkeVN0YXJ0ZWQoKSB8fCBzb3VyY2VDb2RlLmlzRW1wdHkoKSB8fCAhc2hv
dWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpKQorICAgIGlmIChzb3VyY2VDb2RlLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IG1fZWxl
bWVudC0+ZG9jdW1lbnQoKTsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5zY3JpcHQo
KS0+Y2FuRXhlY3V0ZVNjcmlwdHMoQWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIG1fd2FzQWxyZWFkeVN0YXJ0ZWQgPSB0cnVlOwotCi0gICAgICAg
IC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3Nj
cmlwdAotCiAgICAgICAgIHsKICAgICAgICAgICAgIElnbm9yZURlc3RydWN0aXZlV3JpdGVDb3Vu
dEluY3JlbWVudGVyIGlnbm9yZURlc2N0cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRlcihtX2lz
RXh0ZXJuYWxTY3JpcHQgPyBkb2N1bWVudC5nZXQoKSA6IDApOwogICAgICAgICAgICAgLy8gQ3Jl
YXRlIGEgc2NyaXB0IGZyb20gdGhlIHNjcmlwdCBlbGVtZW50IG5vZGUsIHVzaW5nIHRoZSBzY3Jp
cHQKQEAgLTIwMSwzNiArMjYxLDIzIEBAIHZvaWQgU2NyaXB0RWxlbWVudDo6ZXZhbHVhdGVTY3Jp
cHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKICAgICB9CiB9CiAKLXZvaWQg
U2NyaXB0RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3Vy
Y2VDb2RlKQotewotICAgIGlmICh3YXNBbHJlYWR5U3RhcnRlZCgpIHx8IHNvdXJjZUNvZGUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fd2FzQWxyZWFkeVN0YXJ0ZWQgPSB0cnVlOwotCi0gICAgZnJhbWUtPnNj
cmlwdCgpLT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwotfQotCiB2b2lkIFNjcmlwdEVsZW1l
bnQ6OnN0b3BMb2FkUmVxdWVzdCgpCiB7CiAgICAgaWYgKG1fY2FjaGVkU2NyaXB0KSB7Ci0gICAg
ICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7CisgICAgICAgIGlmICghbV93
aWxsQmVQYXJzZXJFeGVjdXRlZCkKKyAgICAgICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVD
bGllbnQodGhpcyk7CiAgICAgICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsKICAgICB9CiB9CiAKIHZv
aWQgU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZShDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKIHsK
KyAgICBBU1NFUlQoIW1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQpOwogICAgIEFTU0VSVChjYWNoZWRT
Y3JpcHQpOwogICAgIGlmIChjYWNoZWRTY3JpcHQtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAg
ZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGV2YWx1YXRlU2NyaXB0
KFNjcmlwdFNvdXJjZUNvZGUoY2FjaGVkU2NyaXB0KSk7CisgICAgICAgIGV4ZWN1dGVTY3JpcHQo
U2NyaXB0U291cmNlQ29kZShjYWNoZWRTY3JpcHQpKTsKICAgICAgICAgZGlzcGF0Y2hMb2FkRXZl
bnQoKTsKICAgICB9CiAgICAgY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7CkBAIC0y
MzgsNiArMjg1LDcgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlKENhY2hlZFNjcmlwdCog
Y2FjaGVkU2NyaXB0KQogCiB2b2lkIFNjcmlwdEVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hl
ZFJlc291cmNlKiBvKQogeworICAgIEFTU0VSVCghbV93aWxsQmVQYXJzZXJFeGVjdXRlZCk7CiAg
ICAgQVNTRVJUX1VOVVNFRChvLCBvID09IG1fY2FjaGVkU2NyaXB0KTsKICAgICBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPmFzeW5jU2NyaXB0UnVubmVyKCktPmV4ZWN1dGVTY3JpcHRTb29uKHRoaXMs
IG1fY2FjaGVkU2NyaXB0KTsKICAgICBtX2NhY2hlZFNjcmlwdCA9IDA7CkBAIC0yNDUsNTYgKzI5
MywzMiBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
KiBvKQogCiBib29sIFNjcmlwdEVsZW1lbnQ6Omlnbm9yZXNMb2FkUmVxdWVzdCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHdhc0FscmVhZHlTdGFydGVkKCkgfHwgbV9pc0V4dGVybmFsU2NyaXB0IHx8
IHdhc0luc2VydGVkQnlQYXJzZXIoKSB8fCAhbV9lbGVtZW50LT5pbkRvY3VtZW50KCk7CisgICAg
cmV0dXJuIG1fYWxyZWFkeVN0YXJ0ZWQgfHwgbV9pc0V4dGVybmFsU2NyaXB0IHx8IG1fcGFyc2Vy
SW5zZXJ0ZWQgfHwgIW1fZWxlbWVudC0+aW5Eb2N1bWVudCgpOwogfQogCi1ib29sIFNjcmlwdEVs
ZW1lbnQ6OnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSBjb25zdAorYm9vbCBTY3JpcHRFbGVt
ZW50Ojppc1NjcmlwdEZvckV2ZW50U3VwcG9ydGVkKCkgY29uc3QKIHsKLSAgICAvKgotICAgICAg
ICAgTW96aWxsYSAxLjggYWNjZXB0cyBqYXZhc2NyaXB0MS4wIC0gamF2YXNjcmlwdDEuNywgYnV0
IFdpbklFIDcgYWNjZXB0cyBvbmx5IGphdmFzY3JpcHQxLjEgLSBqYXZhc2NyaXB0MS4zLgotICAg
ICAgICAgTW96aWxsYSAxLjggYW5kIFdpbklFIDcgYm90aCBhY2NlcHQgamF2YXNjcmlwdCBhbmQg
bGl2ZXNjcmlwdC4KLSAgICAgICAgIFdpbklFIDcgYWNjZXB0cyBlY21hc2NyaXB0IGFuZCBqc2Ny
aXB0LCBidXQgTW96aWxsYSAxLjggZG9lc24ndC4KLSAgICAgICAgIE5laXRoZXIgTW96aWxsYSAx
Ljggbm9yIFdpbklFIDcgYWNjZXB0IGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZS4KLSAg
ICAgICAgIFdlIHdhbnQgdG8gYWNjZXB0IGFsbCB0aGUgdmFsdWVzIHRoYXQgZWl0aGVyIG9mIHRo
ZXNlIGJyb3dzZXJzIGFjY2VwdCwgYnV0IG5vdCBvdGhlciB2YWx1ZXMuCi0gICAgIAotICAgICAg
ICAgRklYTUU6IElzIHRoaXMgSFRNTDUgY29tcGxpYW50PwotICAgICAqLwotICAgIFN0cmluZyB0
eXBlID0gdHlwZUF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgaWYgKCF0eXBlLmlzRW1wdHkoKSkgewot
ICAgICAgICBpZiAoIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVU
eXBlKHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gbGFuZ3VhZ2VB
dHRyaWJ1dGVWYWx1ZSgpOwotICAgICAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSAmJiAhaXNT
dXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZ2UobGFuZ3VhZ2UpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0gICAgCi0KLSAgICAvLyBObyB0eXBlIG9yIGxhbmd1YWdlIGlzIHNwZWNp
ZmllZCwgc28gd2UgYXNzdW1lIHRoZSBzY3JpcHQgdG8gYmUgSmF2YVNjcmlwdC4KLQotICAgIFN0
cmluZyBmb3JBdHRyaWJ1dGUgPSBmb3JBdHRyaWJ1dGVWYWx1ZSgpOwogICAgIFN0cmluZyBldmVu
dEF0dHJpYnV0ZSA9IGV2ZW50QXR0cmlidXRlVmFsdWUoKTsKLSAgICBpZiAoIWZvckF0dHJpYnV0
ZS5pc0VtcHR5KCkgJiYgIWV2ZW50QXR0cmlidXRlLmlzRW1wdHkoKSkgeworICAgIFN0cmluZyBm
b3JBdHRyaWJ1dGUgPSBmb3JBdHRyaWJ1dGVWYWx1ZSgpOworICAgIGlmICghZXZlbnRBdHRyaWJ1
dGUuaXNFbXB0eSgpICYmICFmb3JBdHRyaWJ1dGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZvckF0
dHJpYnV0ZSA9IGZvckF0dHJpYnV0ZS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgaWYgKCFl
cXVhbElnbm9yaW5nQ2FzZShmb3JBdHRyaWJ1dGUsICJ3aW5kb3ciKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGV2ZW50QXR0cmlidXRlID0gZXZl
bnRBdHRyaWJ1dGUuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIGlmICghZXF1YWxJZ25vcmlu
Z0Nhc2UoZXZlbnRBdHRyaWJ1dGUsICJvbmxvYWQiKSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UoZXZl
bnRBdHRyaWJ1dGUsICJvbmxvYWQoKSIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogU3RyaW5nIFNjcmlwdEVsZW1lbnQ6OnNj
cmlwdENoYXJzZXQoKSBjb25zdAogewotICAgIC8vIEZpcnN0IHdlIHRyeSB0byBnZXQgZW5jb2Rp
bmcgZnJvbSBjaGFyc2V0IGF0dHJpYnV0ZS4KLSAgICBTdHJpbmcgY2hhcnNldCA9IGNoYXJzZXRB
dHRyaWJ1dGVWYWx1ZSgpLnN0cmlwV2hpdGVTcGFjZSgpOwotCi0gICAgLy8gSWYgY2hhcnNldCBo
YXMgbm90IGJlZW4gZGVjbGFyZWQgaW4gc2NyaXB0IHRhZywgZmFsbCBiYWNrIHRvIGZyYW1lIGVu
Y29kaW5nLgotICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKLSAgICAgICAgY2hhcnNldCA9IG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2hhcnNldCgpOwotCisgICAgU3RyaW5nIGNoYXJzZXQ7Cisg
ICAgaWYgKCFtX2NoYXJhY3RlckVuY29kaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgY2hhcnNldCA9
IG1fY2hhcmFjdGVyRW5jb2Rpbmc7CisgICAgZWxzZSBpZiAoIW1fZmFsbGJhY2tDaGFyYWN0ZXJF
bmNvZGluZy5pc0VtcHR5KCkpCisgICAgICAgIGNoYXJzZXQgPSBtX2ZhbGxiYWNrQ2hhcmFjdGVy
RW5jb2Rpbmc7CiAgICAgcmV0dXJuIGNoYXJzZXQ7CiB9CiAKQEAgLTMyNSwyMCArMzQ5LDYgQEAg
U3RyaW5nIFNjcmlwdEVsZW1lbnQ6OnNjcmlwdENvbnRlbnQoKSBjb25zdAogICAgIHJldHVybiBT
dHJpbmc6OmFkb3B0KHZhbCk7CiB9CiAKLWJvb2wgU2NyaXB0RWxlbWVudDo6aXNBc3luY2hyb25v
dXMoKSBjb25zdAotewotICAgIC8vIE9ubHkgZXh0ZXJuYWwgc2NyaXB0cyBtYXkgYmUgYXN5bmNo
cm9ub3VzLgotICAgIC8vIFNlZTogaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmll
dy5odG1sI2F0dHItc2NyaXB0LWFzeW5jCi0gICAgcmV0dXJuICFzb3VyY2VBdHRyaWJ1dGVWYWx1
ZSgpLmlzRW1wdHkoKSAmJiBhc3luY0F0dHJpYnV0ZVZhbHVlKCk7Ci19Ci0KLWJvb2wgU2NyaXB0
RWxlbWVudDo6aXNEZWZlcnJlZCgpIGNvbnN0Ci17Ci0gICAgLy8gT25seSBleHRlcm5hbCBzY3Jp
cHRzIG1heSBiZSBkZWZlcnJlZCBhbmQgYXN5bmMgdHJ1bXBzIGRlZmVyIHRvIGFsbG93IGZvciBi
YWNrd2FyZCBjb21wYXRpYmlsaXR5LgotICAgIC8vIFNlZTogaHR0cDovL2Rldi53My5vcmcvaHRt
bDUvc3BlYy9PdmVydmlldy5odG1sI2F0dHItc2NyaXB0LWRlZmVyCi0gICAgcmV0dXJuICFzb3Vy
Y2VBdHRyaWJ1dGVWYWx1ZSgpLmlzRW1wdHkoKSAmJiAhYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpICYm
IGRlZmVyQXR0cmlidXRlVmFsdWUoKTsKLX0KLQogU2NyaXB0RWxlbWVudCogdG9TY3JpcHRFbGVt
ZW50KEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQo
KSAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RWxlbWVudC5oCmluZGV4IDUyNTBmM2UzMzU0OTkwOTI4ZjU3NTYwMWQwMTIyM2Y0
MGM2NTE2MDcuLmViNWJmZTczNTI4NjBlOTU4ZWRmMWE0Y2QxOWQ5MDIzOWQ2ODVmZTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTMxLDUyICszMiw1NyBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgU2NyaXB0RWxl
bWVudDsKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CiAKK2VudW0gTGVnYWN5VHlwZVN1cHBvcnQg
eyBEaXNhbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUsIEFsbG93TGVnYWN5VHlwZUluVHlw
ZUF0dHJpYnV0ZSB9OworCiBjbGFzcyBTY3JpcHRFbGVtZW50IDogcHJpdmF0ZSBDYWNoZWRSZXNv
dXJjZUNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAg
U2NyaXB0RWxlbWVudChFbGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIsIGJvb2wgaXNFdmFs
dWF0ZWQpOwogICAgIHZpcnR1YWwgflNjcmlwdEVsZW1lbnQoKTsKLSAgICAKKwogICAgIEVsZW1l
bnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KIAorICAgIGJvb2wgcHJl
cGFyZVNjcmlwdChjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uID0gVGV4
dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCksIExlZ2FjeVR5cGVTdXBwb3J0IHN1cHBvcnRM
ZWdhY3lUeXBlcyA9IERpc2FsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSk7CisKICAgICAv
LyBBIGNoYXJzZXQgZm9yIGxvYWRpbmcgdGhlIHNjcmlwdCAobWF5IGJlIG92ZXJyaWRkZW4gYnkg
SFRUUCBoZWFkZXJzIG9yIGEgQk9NKS4KICAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCgpIGNvbnN0
OwogCiAgICAgU3RyaW5nIHNjcmlwdENvbnRlbnQoKSBjb25zdDsKLSAgICBib29sIHNob3VsZEV4
ZWN1dGVBc0phdmFTY3JpcHQoKSBjb25zdDsKICAgICB2b2lkIGV4ZWN1dGVTY3JpcHQoY29uc3Qg
U2NyaXB0U291cmNlQ29kZSYpOwogICAgIHZvaWQgZXhlY3V0ZShDYWNoZWRTY3JpcHQqKTsKIAog
ICAgIC8vIFhNTCBwYXJzZXIgY2FsbHMgdGhlc2UKLSAgICB2aXJ0dWFsIFN0cmluZyBzb3VyY2VB
dHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hMb2Fk
RXZlbnQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpID0gMDsK
KyAgICBib29sIGlzU2NyaXB0VHlwZVN1cHBvcnRlZChMZWdhY3lUeXBlU3VwcG9ydCkgY29uc3Q7
CiAKICAgICBib29sIGhhdmVGaXJlZExvYWRFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZUZp
cmVkTG9hZDsgfQorICAgIGJvb2wgd2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSBjb25zdCB7IHJldHVy
biBtX3dpbGxCZVBhcnNlckV4ZWN1dGVkOyB9CisgICAgYm9vbCByZWFkeVRvQmVQYXJzZXJFeGVj
dXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQ7IH0KKyAgICBi
b29sIHdpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nKCkgY29uc3QgeyByZXR1
cm4gbV93aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZzsgfQorICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gY2FjaGVkU2NyaXB0KCkgeyByZXR1cm4gbV9j
YWNoZWRTY3JpcHQ7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0SGF2ZUZpcmVkTG9hZEV2
ZW50KGJvb2wgaGF2ZUZpcmVkTG9hZCkgeyBtX2hhdmVGaXJlZExvYWQgPSBoYXZlRmlyZWRMb2Fk
OyB9Ci0gICAgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyKCkgY29uc3QgeyByZXR1cm4gbV93YXNJ
bnNlcnRlZEJ5UGFyc2VyOyB9Ci0gICAgYm9vbCB3YXNBbHJlYWR5U3RhcnRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2FzQWxyZWFkeVN0YXJ0ZWQ7IH0KKyAgICBib29sIGlzUGFyc2VySW5zZXJ0ZWQo
KSBjb25zdCB7IHJldHVybiBtX3BhcnNlckluc2VydGVkOyB9CisgICAgYm9vbCBhbHJlYWR5U3Rh
cnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxyZWFkeVN0YXJ0ZWQ7IH0KIAogICAgIC8vIEhlbHBl
ciBmdW5jdGlvbnMgdXNlZCBieSBvdXIgcGFyZW50IGNsYXNzZXMuCi0gICAgdm9pZCBpbnNlcnRl
ZEludG9Eb2N1bWVudChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7CisgICAgdm9pZCBpbnNlcnRl
ZEludG9Eb2N1bWVudCgpOwogICAgIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIHZv
aWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0gICAgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oY29u
c3QgU3RyaW5nJiBzb3VyY2VVcmwpOwogICAgIHZvaWQgaGFuZGxlU291cmNlQXR0cmlidXRlKGNv
bnN0IFN0cmluZyYgc291cmNlVXJsKTsKIAogcHJpdmF0ZToKICAgICBib29sIGlnbm9yZXNMb2Fk
UmVxdWVzdCgpIGNvbnN0OwotICAgIGJvb2wgaXNBc3luY2hyb25vdXMoKSBjb25zdDsKLSAgICBi
b29sIGlzRGVmZXJyZWQoKSBjb25zdDsKKyAgICBib29sIGlzU2NyaXB0Rm9yRXZlbnRTdXBwb3J0
ZWQoKSBjb25zdDsKIAotICAgIHZvaWQgcmVxdWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJj
ZVVybCk7Ci0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7
CisgICAgYm9vbCByZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlVXJsKTsKICAgICB2
b2lkIHN0b3BMb2FkUmVxdWVzdCgpOwogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVk
KENhY2hlZFJlc291cmNlKik7CiAKKyAgICB2aXJ0dWFsIFN0cmluZyBzb3VyY2VBdHRyaWJ1dGVW
YWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBjaGFyc2V0QXR0cmlidXRlVmFs
dWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgdHlwZUF0dHJpYnV0ZVZhbHVlKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGxhbmd1YWdlQXR0cmlidXRlVmFsdWUoKSBj
b25zdCA9IDA7CkBAIC04NCwxMyArOTAsMjAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmlu
ZyBldmVudEF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhc3lu
Y0F0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBkZWZlckF0dHJp
YnV0ZVZhbHVlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYXNTb3VyY2VBdHRyaWJ1
dGUoKSBjb25zdCA9IDA7CiAKICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKLSAgICBib29sIG1fd2Fz
SW5zZXJ0ZWRCeVBhcnNlcjsKKyAgICBib29sIG1fcGFyc2VySW5zZXJ0ZWQ7CisgICAgYm9vbCBt
X3dhc1BhcnNlckluc2VydGVkOwogICAgIGJvb2wgbV9pc0V4dGVybmFsU2NyaXB0OwotICAgIGJv
b2wgbV93YXNBbHJlYWR5U3RhcnRlZDsKKyAgICBib29sIG1fYWxyZWFkeVN0YXJ0ZWQ7CiAgICAg
Ym9vbCBtX2hhdmVGaXJlZExvYWQ7CisgICAgYm9vbCBtX3dpbGxCZVBhcnNlckV4ZWN1dGVkOyAv
LyBTYW1lIGFzICJUaGUgcGFyc2VyIHdpbGwgaGFuZGxlIGV4ZWN1dGluZyB0aGUgc2NyaXB0LiIK
KyAgICBib29sIG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQ7CisgICAgYm9vbCBtX3dpbGxFeGVj
dXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nOworICAgIFN0cmluZyBtX2NoYXJhY3RlckVu
Y29kaW5nOworICAgIFN0cmluZyBtX2ZhbGxiYWNrQ2hhcmFjdGVyRW5jb2Rpbmc7CiB9OwogCiBT
Y3JpcHRFbGVtZW50KiB0b1NjcmlwdEVsZW1lbnQoRWxlbWVudCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRleCAxMGQ2ZTBkZTUyM2Ix
NWQxOGIyNzUxOGRkNzQxOWRiMzRmOGFlMmZjLi44NWI4YzhkZTk0MzY1ZTUyMGE1NWY4NjQzNGJm
NmI1NjI2YTVkZDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJz
ZXJMaWJ4bWwyLmNwcApAQCAtODgwLDM1ICs4ODAsMzIgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNl
cjo6ZW5kRWxlbWVudE5zKCkKICAgICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7CiAgICAgbV9y
ZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsKIAorICAgIGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQg
PSBzY3JpcHRFbGVtZW50LT5wcmVwYXJlU2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgQWxs
b3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKTsKKyAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBh
cmVkKSB7CiAjaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgaWYgKCFzY3JpcHRFbGVtZW50LT5zaG91
bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCi0gICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFBy
b2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7Ci0gICAgZWxzZQorICAgICAgICBpZiAoIXNjcmlw
dEVsZW1lbnQtPmlzU2NyaXB0VHlwZVN1cHBvcnRlZChBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRy
aWJ1dGUpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0
RWxlbWVudCh0cnVlKTsKICNlbmRpZgotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFNjcmlwdCBl
eGVjdXRpb24gc2hvdWxkIGJlIHNoYXJlZCBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4KKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogU2NyaXB0IGV4ZWN1dGlvbiBzaG91bGQgYmUgc2hh
cmVkIGJldHdlZW4KICAgICAgICAgLy8gdGhlIGxpYnhtbDIgYW5kIFF0IFhNTERvY3VtZW50UGFy
c2VyIGltcGxlbWVudGF0aW9ucy4KIAogICAgICAgICAvLyBKYXZhU2NyaXB0IGNhbiBkZXRhY2gg
dGhlIHBhcnNlci4gIE1ha2Ugc3VyZSB0aGlzIGlzIG5vdCByZWxlYXNlZAogICAgICAgICAvLyBi
ZWZvcmUgdGhlIGVuZCBvZiB0aGlzIG1ldGhvZC4KICAgICAgICAgUmVmUHRyPFhNTERvY3VtZW50
UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgICAgIFN0cmluZyBzY3JpcHRIcmVmID0gc2Ny
aXB0RWxlbWVudC0+c291cmNlQXR0cmlidXRlVmFsdWUoKTsKLSAgICAgICAgaWYgKCFzY3JpcHRI
cmVmLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gd2UgaGF2ZSBhIHNyYyBhdHRyaWJ1dGUK
LSAgICAgICAgICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0ID0gc2NyaXB0RWxlbWVudC0+c2NyaXB0
Q2hhcnNldCgpOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmRpc3BhdGNoQmVmb3JlTG9hZEV2
ZW50KHNjcmlwdEhyZWYpICYmCi0gICAgICAgICAgICAgICAgKG1fcGVuZGluZ1NjcmlwdCA9IGRv
Y3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQoc2NyaXB0SHJl
Ziwgc2NyaXB0Q2hhcnNldCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0g
ZWxlbWVudDsKLSAgICAgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPmFkZENsaWVudCh0aGlz
KTsKLQotICAgICAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2Ny
aXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgcmVmKCkgZXhlY3V0ZWQgaXQKLSAgICAgICAgICAg
ICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAgICAgICAgICBwYXVzZVBhcnNp
bmcoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVu
dCA9IDA7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlU
b0JlUGFyc2VyRXhlY3V0ZWQoKSkKICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVT
Y3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRv
Y3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgZWxzZSBp
ZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSkgeworICAgICAgICAgICAg
bV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7CisgICAgICAg
ICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICAgICAgbV9wZW5kaW5nU2Ny
aXB0LT5hZGRDbGllbnQodGhpcyk7CisKKyAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3
aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhl
Y3V0ZWQgaXQuCisgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICAgICAg
ICAgIHBhdXNlUGFyc2luZygpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc2NyaXB0
RWxlbWVudCA9IDA7CiAKICAgICAgICAgLy8gSmF2YVNjcmlwdCBtYXkgaGF2ZSBkZXRhY2hlZCB0
aGUgcGFyc2VyCiAgICAgICAgIGlmIChpc0RldGFjaGVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
WE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKaW5kZXggZDBiZjg4ZGM3MWFmNTE0ZTQ1MzcwMzFkMTlh
MjczNTU2ZWRlMDQyMi4uOTlhZmFkYjEzOWUwNWY1ZjAxNTUzMmEzNDNmY2EzOGM3NWRlODFjYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApAQCAtNTg4LDI4
ICs1ODgsMjUgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VFbmRFbGVtZW50KCkKICAg
ICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1
ZTsKIAorICAgIGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVtZW50LT5wcmVw
YXJlU2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgQWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0
cmlidXRlKTsKKyAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBhcmVkKSB7CiAjaWYgRU5BQkxFKFhI
VE1MTVApCi0gICAgaWYgKCFzY3JpcHRFbGVtZW50LT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0
KCkpCi0gICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQo
dHJ1ZSk7Ci0gICAgZWxzZQorICAgICAgICBpZiAoIXNjcmlwdEVsZW1lbnQtPmlzU2NyaXB0VHlw
ZVN1cHBvcnRlZChBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpKQorICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKICNlbmRp
ZgotICAgIHsKLSAgICAgICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3JpcHRFbGVtZW50LT5zb3Vy
Y2VBdHRyaWJ1dGVWYWx1ZSgpOwotICAgICAgICBpZiAoIXNjcmlwdEhyZWYuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZQotICAgICAgICAgICAgU3Ry
aW5nIHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Ci0gICAg
ICAgICAgICBpZiAoZWxlbWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoc2NyaXB0SHJlZikg
JiYKLSAgICAgICAgICAgICAgICAobV9wZW5kaW5nU2NyaXB0ID0gZG9jdW1lbnQoKS0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzY3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0
KSkpIHsKLSAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OwotICAgICAg
ICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotCi0gICAgICAgICAg
ICAgICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUgMCBpZiBzY3JpcHQgd2FzIGFscmVhZHkg
bG9hZGVkIGFuZCByZWYoKSBleGVjdXRlZCBpdAotICAgICAgICAgICAgICAgIGlmIChtX3BlbmRp
bmdTY3JpcHQpCi0gICAgICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwotICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKLSAgICAgICAg
fSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9C
ZVBhcnNlckV4ZWN1dGVkKCkpCiAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2Ny
aXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1
bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CisgICAgICAgIGVsc2UgaWYg
KHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpIHsKKyAgICAgICAgICAgIG1f
cGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpOworICAgICAgICAg
ICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgIG1fcGVuZGluZ1Njcmlw
dC0+YWRkQ2xpZW50KHRoaXMpOworCisgICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2ls
bCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIGFkZENsaWVudCgpIGV4ZWN1
dGVkIGl0LgorICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKKyAgICAgICAgICAgICAg
ICBwYXVzZVBhcnNpbmcoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3NjcmlwdEVs
ZW1lbnQgPSAwOwogICAgIH0KICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICBw
b3BDdXJyZW50Tm9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2Ny
aXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNw
cAppbmRleCA2MDNiMmE4ZWVkYmU3NTJlZjcyZDFhZTMyYWFiOWVkODVmMDM2YzYxLi44ZTcwOGQx
M2UxYmY1NDdmZjU2MWQzNDI5N2U1MmIxOWY2ZjI1ZjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTY3JpcHRFbGVtZW50LmNwcApAQCAtMzUsOSArMzUsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWlubGluZSBIVE1MU2NyaXB0RWxl
bWVudDo6SFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvY3VtZW50LCBib29sIHdhc0luc2VydGVkQnlQYXJzZXIsIGJvb2wgd2FzQWxyZWFk
eVN0YXJ0ZWQpCitpbmxpbmUgSFRNTFNjcmlwdEVsZW1lbnQ6OkhUTUxTY3JpcHRFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCB3YXNJ
bnNlcnRlZEJ5UGFyc2VyLCBib29sIGFscmVhZHlTdGFydGVkKQogICAgIDogSFRNTEVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBTY3JpcHRFbGVtZW50KHRoaXMsIHdhc0luc2VydGVk
QnlQYXJzZXIsIHdhc0FscmVhZHlTdGFydGVkKQorICAgICwgU2NyaXB0RWxlbWVudCh0aGlzLCB3
YXNJbnNlcnRlZEJ5UGFyc2VyLCBhbHJlYWR5U3RhcnRlZCkKIHsKICAgICBBU1NFUlQoaGFzVGFn
TmFtZShzY3JpcHRUYWcpKTsKIH0KQEAgLTc0LDE2ICs3NCwxMCBAQCB2b2lkIEhUTUxTY3JpcHRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiAgICAgICAgIEhU
TUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAotdm9pZCBIVE1MU2Ny
aXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKLXsKLSAgICBTY3JpcHRFbGVtZW50
OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oc291cmNlQXR0cmlidXRlVmFsdWUoKSk7Ci0gICAgSFRN
TEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotfQotCiB2b2lkIEhUTUxTY3JpcHRF
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2Vy
dGVkSW50b0RvY3VtZW50KCk7Ci0gICAgU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoc291cmNlQXR0cmlidXRlVmFsdWUoKSk7CisgICAgU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6cmVtb3ZlZEZyb21E
b2N1bWVudCgpCkBAIC0xNjAsNiArMTU0LDExIEBAIGJvb2wgSFRNTFNjcmlwdEVsZW1lbnQ6OmRl
ZmVyQXR0cmlidXRlVmFsdWUoKSBjb25zdAogICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKGRl
ZmVyQXR0cik7CiB9CiAKK2Jvb2wgSFRNTFNjcmlwdEVsZW1lbnQ6Omhhc1NvdXJjZUF0dHJpYnV0
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoc3JjQXR0cik7Cit9CisK
IHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoTG9hZEV2ZW50KCkKIHsKICAgICBBU1NF
UlQoIWhhdmVGaXJlZExvYWRFdmVudCgpKTsKQEAgLTE3NSw3ICsxNzQsNyBAQCB2b2lkIEhUTUxT
Y3JpcHRFbGVtZW50OjpkaXNwYXRjaEVycm9yRXZlbnQoKQogCiBQYXNzUmVmUHRyPEVsZW1lbnQ+
IEhUTUxTY3JpcHRFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxk
cmVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxTY3JpcHRFbGVtZW50
KHRhZ1FOYW1lKCksIGRvY3VtZW50KCksIGZhbHNlLCB3YXNBbHJlYWR5U3RhcnRlZCgpKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MU2NyaXB0RWxlbWVudCh0YWdRTmFtZSgpLCBkb2N1
bWVudCgpLCBmYWxzZSwgYWxyZWFkeVN0YXJ0ZWQoKSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTY3JpcHRFbGVtZW50LmgKaW5kZXggMDk3NzNjNWZiYzY0NTBlYTg3YWU4NGNlMWQy
NTdkNmUyYWU4NTdhZi4uZWZlNmE2YTNjZjIwNmFmYTU3MGJjNWIzNmEzNjIwN2RlNzA2ZTkyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaApAQCAtMzksNyArMzksNyBA
QCBwdWJsaWM6CiAgICAgS1VSTCBzcmMoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBIVE1MU2Ny
aXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIHdhc0luc2Vy
dGVkQnlQYXJzZXIsIGJvb2wgd2FzQWxyZWFkeVN0YXJ0ZWQpOworICAgIEhUTUxTY3JpcHRFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgd2FzSW5zZXJ0ZWRCeVBh
cnNlciwgYm9vbCBhbHJlYWR5U3RhcnRlZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0Rv
Y3VtZW50KCk7CkBAIC00Nyw3ICs0Nyw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNo
aWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVD
aGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAw
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29u
c3Q7CiAKQEAgLTU5LDYgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyBldmVu
dEF0dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzeW5jQXR0cmlidXRl
VmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNTb3VyY2VBdHRyaWJ1dGUoKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaEVycm9yRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxTY3JpcHRSdW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNj
cmlwdFJ1bm5lci5jcHAKaW5kZXggYzk5ODU4ZDBjZmU1ZjNjZThmMjAyOWRjOWVhZmZmMThkZWU5
ZGE4MS4uOTlmZmY1ZWY5ZTVlMWI0MWQxMTM5MThiZjIxODk1Y2Y3NWVhNzkzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAgLTI2Miwx
NyArMjYyLDkgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0RGVmZXJyZWRTY3JpcHQo
RWxlbWVudCogZWxlbWVudCkKIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBlbmRpbmdT
Y3JpcHQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCwgRWxlbWVudCogc2NyaXB0KSBjb25z
dAogewogICAgIEFTU0VSVCghcGVuZGluZ1NjcmlwdC5lbGVtZW50KCkpOwotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc3JjVmFsdWUgPSBzY3JpcHQtPmdldEF0dHJpYnV0ZShzcmNBdHRyKTsKLSAg
ICAvLyBBbGxvdyB0aGUgaG9zdCB0byBkaXNsbG93IHNjcmlwdCBsb2FkcyAodXNpbmcgdGhlIFhT
U0F1ZGl0b3IsIGV0Yy4pCi0gICAgLy8gRklYTUU6IHRoaXMgY2hlY2sgc2hvdWxkIGJlIHBlcmZv
cm1lZCBvbiB0aGUgZmluYWwgVVJMIGluIGEgcmVkaXJlY3QgY2hhaW4uCi0gICAgaWYgKCFtX2hv
c3QtPnNob3VsZExvYWRFeHRlcm5hbFNjcmlwdEZyb21TcmMoc3JjVmFsdWUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmVzb2x2ZSB0aGUgdXJsIHJl
bGF0aXZlIHRvIHRoZSBlbGVtZW50LgotICAgIGlmICghc2NyaXB0LT5kaXNwYXRjaEJlZm9yZUxv
YWRFdmVudChzcmNWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBwZW5kaW5nU2Ny
aXB0LnNldEVsZW1lbnQoc2NyaXB0KTsKICAgICAvLyBUaGlzIHNob3VsZCBjb3JyZWN0bHkgcmV0
dXJuIDAgZm9yIGVtcHR5IG9yIGludmFsaWQgc3JjVmFsdWVzLgotICAgIENhY2hlZFNjcmlwdCog
Y2FjaGVkU2NyaXB0ID0gbV9kb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVz
dFNjcmlwdChzcmNWYWx1ZSwgdG9TY3JpcHRFbGVtZW50KHNjcmlwdCktPnNjcmlwdENoYXJzZXQo
KSk7CisgICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQgPSB0b1NjcmlwdEVsZW1lbnQoc2Ny
aXB0KS0+Y2FjaGVkU2NyaXB0KCkuZ2V0KCk7CiAgICAgaWYgKCFjYWNoZWRTY3JpcHQpIHsKICAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gRGlzcGF0Y2ggZXJyb3IgZXZlbnQuCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTI5MywyOSArMjg1LDI0IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5l
cjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0
U3RhCiAKICAgICAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxl
bWVudChzY3JpcHQpOwogICAgICAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7Ci0gICAgICAgIGlm
ICghc2NyaXB0RWxlbWVudC0+c2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpKQorCisgICAgICAg
IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQoc2NyaXB0U3RhcnRQb3NpdGlvbik7CisKKyAg
ICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT53aWxsQmVQYXJzZXJFeGVjdXRlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKHNjcmlwdC0+aGFzQXR0cmlidXRl
KHNyY0F0dHIpKSB7Ci0gICAgICAgICAgICBpZiAoc2NyaXB0LT5oYXNBdHRyaWJ1dGUoYXN5bmNB
dHRyKSkgLy8gQXN5bmMgdGFrZXMgcHJlY2VuZGVuY2Ugb3ZlciBkZWZlci4KLSAgICAgICAgICAg
ICAgICByZXR1cm47IC8vIEFzeW5jaHJvbm91cyBzY3JpcHRzIGhhbmRsZSB0aGVtc2VsdmVzLgot
Ci0gICAgICAgICAgICBpZiAoc2NyaXB0LT5oYXNBdHRyaWJ1dGUoZGVmZXJBdHRyKSkKLSAgICAg
ICAgICAgICAgICByZXF1ZXN0RGVmZXJyZWRTY3JpcHQoc2NyaXB0KTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KHNjcmlwdCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1fZG9jdW1lbnQtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgp
ICYmIG1fc2NyaXB0TmVzdGluZ0xldmVsID09IDEpIHsKLSAgICAgICAgICAgIC8vIEJsb2NrIGlu
bGluZSBzY3JpcHQgZXhlY3V0aW9uIG9uIHN0eWxlc2hlZXQgbG9hZCwgdW5sZXNzIHdlIGFyZSBp
biBkb2N1bWVudC53cml0ZSgpLgotICAgICAgICAgICAgLy8gVGhlIGxhdHRlciBjYXNlIGNhbiBv
bmx5IGhhcHBlbiBpZiBhIHNjcmlwdCBib3RoIHRyaWdnZXJzIGEgc3R5bGVzaGVldCBsb2FkCi0g
ICAgICAgICAgICAvLyBhbmQgd3JpdGVzIGFuIGlubGluZSBzY3JpcHQuIFNpbmNlIHdyaXRlIGlz
IGJsb2NraW5nIHdlIGhhdmUgdG8gZXhlY3V0ZSB0aGUKLSAgICAgICAgICAgIC8vIHdyaXR0ZW4g
c2NyaXB0IGltbWVkaWF0ZWx5LCBpZ25vcmluZyB0aGUgcGVuZGluZyBzaGVldHMuCi0gICAgICAg
ICAgICBtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdC5zZXRFbGVtZW50KHNjcmlwdCk7Ci0gICAgICAg
ICAgICBtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdC5zZXRTdGFydGluZ1Bvc2l0aW9uKHNjcmlwdFN0
YXJ0UG9zaXRpb24pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGlzRXhl
Y3V0aW5nU2NyaXB0KCkpOwotICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2Rl
KHNjcmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9k
b2N1bWVudCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwotICAgICAgICAgICAgc2NyaXB0RWxlbWVu
dC0+ZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKLSAgICAgICAgfQorCisgICAgICAgIGlmIChz
Y3JpcHRFbGVtZW50LT53aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZygpKQor
ICAgICAgICAgICAgcmVxdWVzdERlZmVycmVkU2NyaXB0KHNjcmlwdCk7CisgICAgICAgIGVsc2Ug
aWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpIHsKKyAgICAgICAg
ICAgIGlmIChtX3NjcmlwdE5lc3RpbmdMZXZlbCA9PSAxKSB7CisgICAgICAgICAgICAgICAgbV9w
YXJzaW5nQmxvY2tpbmdTY3JpcHQuc2V0RWxlbWVudChzY3JpcHQpOworICAgICAgICAgICAgICAg
IG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0LnNldFN0YXJ0aW5nUG9zaXRpb24oc2NyaXB0U3RhcnRQ
b3NpdGlvbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFNjcmlwdFNv
dXJjZUNvZGUgc291cmNlQ29kZShzY3JpcHQtPnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9y
U2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKKyAgICAg
ICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlcXVlc3RQYXJzaW5nQmxv
Y2tpbmdTY3JpcHQoc2NyaXB0KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3Jp
cHRFbGVtZW50LmNwcAppbmRleCBiYWJiMWU3MmI2MzIwNWQxN2MzNmEwMTMyOTFlMjQxNTM3Zjgy
ZWUwLi4wMGI4NWE1ZDhhMDg4MTY5ZDE3NjE5MGZhZWMwYzUzNDVjMzU0YzM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCkBAIC0zNSw5ICszNSw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIERFRklORV9BTklNQVRFRF9TVFJJTkcoU1ZHU2NyaXB0RWxlbWVudCwgWExp
bmtOYW1lczo6aHJlZkF0dHIsIEhyZWYsIGhyZWYpCiBERUZJTkVfQU5JTUFURURfQk9PTEVBTihT
VkdTY3JpcHRFbGVtZW50LCBTVkdOYW1lczo6ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEF0dHIs
IEV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQpCiAK
LWlubGluZSBTVkdTY3JpcHRFbGVtZW50OjpTVkdTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFy
c2VyLCBib29sIHdhc0FscmVhZHlTdGFydGVkKQoraW5saW5lIFNWR1NjcmlwdEVsZW1lbnQ6OlNW
R1NjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50LCBib29sIHdhc0luc2VydGVkQnlQYXJzZXIsIGJvb2wgYWxyZWFkeVN0YXJ0ZWQpCiAg
ICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgU2NyaXB0RWxlbWVudCh0
aGlzLCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCB3YXNBbHJlYWR5U3RhcnRlZCkKKyAgICAsIFNjcmlw
dEVsZW1lbnQodGhpcywgd2FzSW5zZXJ0ZWRCeVBhcnNlciwgYWxyZWFkeVN0YXJ0ZWQpCiB7CiB9
CiAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICAvLyBIYW5kbGUg
ZHluYW1pYyB1cGRhdGVzIG9mIHRoZSAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcgYXR0cmli
dXRlLiBPbmx5IHBvc3NpYmxlIGNhc2U6IGNoYW5naW5nIGZyb20gJ3RydWUnIHRvICdmYWxzZScK
ICAgICAgICAgLy8gY2F1c2VzIGFuIGltbWVkaWF0ZSBkaXNwYXRjaCBvZiB0aGUgU1ZHTG9hZCBl
dmVudC4gSWYgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB3YXMgJ2ZhbHNlJyBiZWZvcmUgaW5zZXJ0aW5n
IHRoZSBzY3JpcHQgZWxlbWVudAogICAgICAgICAvLyBpbiB0aGUgZG9jdW1lbnQsIHRoZSBTVkdM
b2FkIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gZGlzcGF0Y2hlZC4KLSAgICAgICAgaWYgKCFleHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKCkgJiYgIWhhdmVGaXJlZExvYWRFdmVudCgp
ICYmICF3YXNJbnNlcnRlZEJ5UGFyc2VyKCkpIHsKKyAgICAgICAgaWYgKCFleHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkQmFzZVZhbHVlKCkgJiYgIWhhdmVGaXJlZExvYWRFdmVudCgpICYmICFpc1Bh
cnNlckluc2VydGVkKCkpIHsKICAgICAgICAgICAgIHNldEhhdmVGaXJlZExvYWRFdmVudCh0cnVl
KTsKICAgICAgICAgICAgIEFTU0VSVChoYXZlTG9hZGVkUmVxdWlyZWRSZXNvdXJjZXMoKSk7CiAK
QEAgLTExMSw5ICsxMTEsOSBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcCgpCiB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0Rv
Y3VtZW50KCkKIHsKICAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAg
IFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KHNvdXJjZUF0dHJpYnV0ZVZhbHVl
KCkpOworICAgIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAKLSAgICBp
ZiAod2FzSW5zZXJ0ZWRCeVBhcnNlcigpKQorICAgIGlmIChpc1BhcnNlckluc2VydGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIEV2ZW50dWFsbHkgc2VuZCBTVkdMb2FkIGV2ZW50IG5v
dyBmb3IgdGhlIGR5bmFtaWNhbGx5IGluc2VydGVkIHNjcmlwdCBlbGVtZW50CkBAIC0xNDIsNyAr
MTQyLDYgQEAgYm9vbCBTVkdTY3JpcHRFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpIGNvbnN0CiAKIHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxk
cmVuKCkKIHsKLSAgICBTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oc291cmNl
QXR0cmlidXRlVmFsdWUoKSk7CiAgICAgU1ZHRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVu
KCk7CiAKICAgICAvLyBBIFNWR0xvYWQgZXZlbnQgaGFzIGJlZW4gZmlyZWQgYnkgU1ZHRWxlbWVu
dDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuLgpAQCAtMjEyLDExICsyMTEsMTYgQEAgYm9vbCBTVkdT
Y3JpcHRFbGVtZW50OjpkZWZlckF0dHJpYnV0ZVZhbHVlKCkgY29uc3QKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK2Jvb2wgU1ZHU2NyaXB0RWxlbWVudDo6aGFzU291cmNlQXR0cmlidXRlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzQXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKK30K
Kwogdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVudCgpCiB7CiAgICAgYm9v
bCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkID0gZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEJh
c2VWYWx1ZSgpOwogCi0gICAgaWYgKHdhc0luc2VydGVkQnlQYXJzZXIoKSkKKyAgICBpZiAoaXNQ
YXJzZXJJbnNlcnRlZCgpKQogICAgICAgICBBU1NFUlQoZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZCAhPSBoYXZlRmlyZWRMb2FkRXZlbnQoKSk7CiAgICAgZWxzZSBpZiAoaGF2ZUZpcmVkTG9hZEV2
ZW50KCkpIHsKICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmaXJlZCBhbiBsb2FkIGV2ZW50
IGFuZCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIGlzIHNldCB0byAndHJ1ZScKQEAgLTI0Nyw3
ICsyNTEsNyBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCgpCiAK
IFBhc3NSZWZQdHI8RWxlbWVudD4gU1ZHU2NyaXB0RWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91
dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTVkdTY3JpcHRFbGVtZW50KHRhZ1FOYW1lKCksIGRvY3VtZW50KCksIGZhbHNlLCB3YXNBbHJl
YWR5U3RhcnRlZCgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTY3JpcHRFbGVtZW50
KHRhZ1FOYW1lKCksIGRvY3VtZW50KCksIGZhbHNlLCBhbHJlYWR5U3RhcnRlZCgpKSk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCmluZGV4IGRhYmVjNzk2ZGQ1YWEw
MDUzMmI4OTk2NGMwNmEzOGVhM2IyN2MwN2QuLjAzY2M3MzNiZDNjNGZlNmNiYjIyNWRjMjcyOTll
MzMxNWI2YmY0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaApAQCAtNDIs
NyArNDIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwogCiBw
cml2YXRlOgotICAgIFNWR1NjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50KiwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCBib29sIHdhc0FscmVhZHlTdGFydGVkKTsK
KyAgICBTVkdTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJv
b2wgd2FzSW5zZXJ0ZWRCeVBhcnNlciwgYm9vbCBhbHJlYWR5U3RhcnRlZCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2
b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CkBAIC02OCw2ICs2OCw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBTdHJpbmcgZXZlbnRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBhc3luY0F0dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGRl
ZmVyQXR0cmlidXRlVmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU291cmNlQXR0
cmlidXRlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hFcnJvckV2ZW50KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82882</attachid>
            <date>2011-02-17 18:05:24 -0800</date>
            <delta_ts>2011-02-18 13:17:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54676-20110217180523.patch</filename>
            <type>text/plain</type>
            <size>45393</size>
            <attacher name="James Simonsen">simonjam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1OTI3YzVlMDVkMjIwODg4MWQ5YTYxYmY0YWMwYmE0ZjgxOTZjYmI2Li40NDFiYTM2
ZjRjMWJiNGExYWVkZTRlYmYwMWFkNmM1NzFmNWE4NDZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAK
KzIwMTEtMDItMTYgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgU2NyaXB0
RWxlbWVudCBtYXRjaCB0aGUgSFRNTDUgc3BlYworCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB0
aGUgInByZXBhcmUgYSBzY3JpcHQiIHNlY3Rpb24gb2YgdGhlIEhUTUw1IHNwZWMgaW4gU2NyaXB0
RWxlbWVudDo6cHJlcGFyZVNjcmlwdCgpLgorICAgICAgICBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI3By
ZXBhcmUtYS1zY3JpcHQKKworICAgICAgICBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIG1p
c3NpbmcgZnJvbSB0aGUgc3BlYyB0aGF0IHdvdWxkIGJlIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGVz
ZSB3aWxsIGJlIGFkZGVkIGxhdGVyLgorICAgICAgICAtIFN1cHBvcnQgZm9yIGFzeW5jPWZhbHNl
CisgICAgICAgIC0gRW1wdHkgc3JjIGF0dHJpYnV0ZSBzaG91bGQgZGlzcGF0Y2ggYW4gZXJyb3Iu
CisKKyAgICAgICAgVGhlcmUgYXJlIGEgY291cGxlIG9mIHNsaWdodCBiZWhhdmlvcmFsIGNoYW5n
ZXMgdG8gbWF0Y2ggdGhlIHNwZWMuCisgICAgICAgIC0gQW4gWEhUTUwgc2NyaXB0IHRoYXQgaXMg
bG9hZGVkIHRoZW4gY29waWVkIHdpbGwgbm90IGZpcmUgbG9hZCBvbiB0aGUgY29weS4KKyAgICAg
ICAgLSBJZiBvbmJlZm9yZWxvYWQgbW92ZXMgdGhlIHNjcmlwdCB0byBhIGRpZmZlcmVudCBkb2N1
bWVudCwgdGhlbiBpdCB3aWxsIG5vdCB0cnkgdG8gZXhlY3V0ZSBhZ2FpbiBiZWNhdXNlIHdhc0Fs
cmVhZHlTdGFydGVkIGlzIHRydWUuCisKKyAgICAgICAgVGhlIHBhcnNlcnMgd2VyZSB1cGRhdGVk
IHRvIHVzZSB0aGUgbmV3IEFQSSwgYnV0IG5vdCByZXdyaXR0ZW4gdG8gbG9vayBsaWtlIHRoZSBz
cGVjLiBUaGF0IHdpbGwgYmUgZG9uZSBzZXBhcmF0ZWx5LgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY3NgorCisgICAgICAgICogZmFzdC9kb20v
SFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZvcmVsb2FkLmh0bWw6IE9yaWdpbmFsIGF1dGhv
ciBzYXlzIHRlc3Qgd2FzIG9ubHkgbWVhbnQgdG8gY2hlY2sgZm9yIGNyYXNoZXMuIEJlZm9yZWxv
YWQgaXMgbm90IHNwZWNpZmllZCBieSBIVE1MNS4gVGVzdCB3YXMgbW9kaWZpZWQgdG8gYXNzdW1l
IG1vdmVkIHNjcmlwdCB3b3VsZG4ndCBleGVjdXRlIGJlY2F1c2Ugd2FzQWxyZWFkeVN0YXJ0ZWQg
aXMgc2V0LgorICAgICAgICAqIGZhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWw6
IEFjY29yZGluZyB0byBIVE1MNSBzcGVjLCBsb2FkIHNob3VsZCBvbmx5IGZpcmUgYWZ0ZXIgYSBz
Y3JpcHQgZXhlY3V0ZXMuIFRlc3Qgd2FzIG1vZGlmaWVkIHRvIG1hdGNoIHRoYXQuIFRoZSBvbGQg
YnJva2VuIGJlaGF2aW9yIHdhcyB0aGF0IGxvYWQgZmlyZWQgb24gdGhlIGNsb25lZCBlbGVtZW50
LCBldmVuIHRob3VnaCBpdCBkaWRuJ3QgZXhlY3V0ZS4KKwogMjAxMS0wMi0xNyAgUGhpbGlwcGUg
Tm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmVi
YXNlbGluZSBHVEsgdGVzdCByZXN1bHRzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vSFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZvcmVsb2FkLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRtbAppbmRl
eCA3N2JlZWQwNmIzODJkZjU0NzUzZmYxYjY2MTlkYzRmNzBmOTU5NTEzLi41YmNjMzRhZjczZDI5
NGRiMjQwNDc1ZGRhZWE2NDdjNjU3MTU2YjZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRt
bApAQCAtOCw3ICs4LDYgQEAKIDxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvZnJhbWUuaHRtbCI+PC9p
ZnJhbWU+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CiB9CiAKQEAgLTE4LDE0ICsxNywxMyBAQCBmdW5jdGlvbiB0
ZXN0KCkKICAgICBzLmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZWxvYWQiLCBmdW5jdGlvbigpIHsK
ICAgICAgICAgdmFyIHMgPSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVsyXSk7CiAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJpZnJhbWUiKVswXS5jb250ZW50RG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZChzKTsKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7CiAgICAgfSwgZmFsc2UpOwogICAgIHMuYWRk
RXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgi
ZXJyb3IgZXZlbnQgc2hvdWxkIG5vdCBmaXJlLiIpCisgICAgICAgIHRlc3RGYWlsZWQoImVycm9y
IGV2ZW50IHNob3VsZCBub3QgZmlyZS4iKTsKICAgICB9LCBmYWxzZSk7CiAgICAgcy5hZGRFdmVu
dExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRlc3RQYXNzZWQoIiIpOwot
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB0ZXN0RmFpbGVkKCJzY3Jp
cHQgc2hvdWxkIG5vdCBiZSBsb2FkZWQiKTsKICAgICB9LCBmYWxzZSk7CiAgICAgcy5zcmMgPSAi
ZXh0ZXJuYWwuanMiOwogICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocyk7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtY2xvbmUtcmVydW4tc3JjLnhodG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNyYy54aHRtbAppbmRleCBl
ZGJlODI5YWM5YWYzOGQ0ZDMwNTMxNjUyZjFiYjI2ODM4MTdmZWRkLi41ODBkNGM4YjZhMDYwMWRj
NTdlY2I1NTZkMzg2MTRjMzI0OGJjNDc2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9zY3JpcHQtY2xvbmUtcmVydW4tc3JjLnhodG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWwKQEAgLTksMzIgKzksMTIgQEAgdmFyIGkgPSAw
OwogCiBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKIH0KLQotdmFyIGZpcnN0TG9hZCA9IHRydWU7Ci0KLWZ1bmN0aW9uIGxvYWRlZCgp
IHsKLSAgICBpZiAoZmlyc3RMb2FkKSB7Ci0gICAgICAgIGZpcnN0TG9hZCA9IGZhbHNlOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gJ1BBU1MnOwotICAgIGlmIChpID09
IDIpCi0gICAgICByZXN1bHQgPSAnRkFJTDogc2NyaXB0IHJhbiB0d2ljZSc7Ci0gICAgZWxzZSBp
ZiAoaSA+IDIpCi0gICAgICByZXN1bHQgPSAnRkFJTDogc2NyaXB0IHJhbiAnICsgaSArICcgdGlt
ZXMnOwotICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUocmVzdWx0KSk7Ci0KLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci19
Ci0KIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHk+CiA8cD5UaGlzIHRlc3QgcnVucyBhIHNjcmlw
dCB0aGF0IGNsb25lcyBhbmQgaW5zZXJ0cyBpdHMgc2NyaXB0IGVsZW1lbnQuIFRoZSBzY3JpcHQg
c2hvdWxkIHJ1biBleGFjdGx5IG9uY2UgYW5kIHByaW50IFBBU1M6PC9wPgotPGRpdj48c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMuanMiIG9ubG9hZD0ibG9hZGVk
KCkiPjwvc2NyaXB0PjwvZGl2PgorPGRpdj48c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NjcmlwdC1j
bG9uZS1yZXJ1bi1zcmMuanMiPjwvc2NyaXB0PjwvZGl2PgogPHNjcmlwdD4KIAogdmFyIHNjcmlw
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVsxXTsKQEAgLTQyLDYg
KzIyLDEzIEBAIHZhciBkaXYgPSBzY3JpcHQucGFyZW50Tm9kZTsKIGRpdi5yZW1vdmVDaGlsZChz
Y3JpcHQpOwogZGl2LmFwcGVuZENoaWxkKHNjcmlwdC5jbG9uZU5vZGUodHJ1ZSkpOwogCityZXN1
bHQgPSAnRkFJTDogc2NyaXB0IG5ldmVyIHJhbic7CitpZiAoaSA9PSAxKQorICByZXN1bHQgPSAn
UEFTUyc7CitlbHNlIGlmIChpID4gMSkKKyAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4gJyAr
IGkgKyAnIHRpbWVzJzsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUocmVzdWx0KSk7CisKIDwvc2NyaXB0PgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGRlN2I5ZTAyODkyOGQ4YmRjOTk4ZjNhMmM3ZTNhMjcxZjM1YjNmNjAuLjI2OWUyZTE1
ZjMzOGY3ZTMyYjllYThhMjQ2MzMwZWM5ZWY0NzgzNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2
NyBAQAorMjAxMS0wMi0xNiAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBT
Y3JpcHRFbGVtZW50IG1hdGNoIHRoZSBIVE1MNSBzcGVjCisKKyAgICAgICAgVGhpcyBpbXBsZW1l
bnRzIHRoZSAicHJlcGFyZSBhIHNjcmlwdCIgc2VjdGlvbiBvZiB0aGUgSFRNTDUgc3BlYyBpbiBT
Y3JpcHRFbGVtZW50OjpwcmVwYXJlU2NyaXB0KCkuCisgICAgICAgIGh0dHA6Ly93d3cud2hhdHdn
Lm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3NjcmlwdGluZy0xLmh0
bWwjcHJlcGFyZS1hLXNjcmlwdAorCisgICAgICAgIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiB0aGlu
Z3MgbWlzc2luZyBmcm9tIHRoZSBzcGVjIHRoYXQgd291bGQgYmUgbmV3IGZ1bmN0aW9uYWxpdHku
IFRoZXNlIHdpbGwgYmUgYWRkZWQgbGF0ZXIuCisgICAgICAgIC0gU3VwcG9ydCBmb3IgYXN5bmM9
ZmFsc2UKKyAgICAgICAgLSBFbXB0eSBzcmMgYXR0cmlidXRlIHNob3VsZCBkaXNwYXRjaCBhbiBl
cnJvci4KKworICAgICAgICBUaGVyZSBhcmUgYSBjb3VwbGUgb2Ygc2xpZ2h0IGJlaGF2aW9yYWwg
Y2hhbmdlcyB0byBtYXRjaCB0aGUgc3BlYy4KKyAgICAgICAgLSBBbiBYSFRNTCBzY3JpcHQgdGhh
dCBpcyBsb2FkZWQgdGhlbiBjb3BpZWQgd2lsbCBub3QgZmlyZSBsb2FkIG9uIHRoZSBjb3B5Lgor
ICAgICAgICAtIElmIG9uYmVmb3JlbG9hZCBtb3ZlcyB0aGUgc2NyaXB0IHRvIGEgZGlmZmVyZW50
IGRvY3VtZW50LCB0aGVuIGl0IHdpbGwgbm90IHRyeSB0byBleGVjdXRlIGFnYWluIGJlY2F1c2Ug
d2FzQWxyZWFkeVN0YXJ0ZWQgaXMgdHJ1ZS4KKworICAgICAgICBUaGUgcGFyc2VycyB3ZXJlIHVw
ZGF0ZWQgdG8gdXNlIHRoZSBuZXcgQVBJLCBidXQgbm90IHJld3JpdHRlbiB0byBsb29rIGxpa2Ug
dGhlIHNwZWMuIFRoYXQgd2lsbCBiZSBkb25lIHNlcGFyYXRlbHkuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0Njc2CisKKyAgICAgICAgVGVzdDog
QWxsIGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOiBS
ZXdyaXR0ZW4gdG8gbWF0Y2ggSFRNTDUgc3BlYy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVs
ZW1lbnQ6OlNjcmlwdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBMb2dpYyBtb3ZlZCB0byBwcmVwYXJlU2NyaXB0LgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKTogTG9naWMgbW92
ZWQgdG8gcHJlcGFyZVNjcmlwdC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6Omhh
bmRsZVNvdXJjZUF0dHJpYnV0ZSk6IExvZ2ljIG1vdmVkIHRvIHByZXBhcmVTY3JpcHQuCisgICAg
ICAgIChXZWJDb3JlOjppc0xlZ2FjeVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZSk6IEFkZGVk
IHRvIHN1cHBvcnQgb2xkIHNjcmlwdCB0eXBlcyBpbiBsYXlvdXQgdGVzdHMuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojppc1NjcmlwdFR5cGVTdXBwb3J0ZWQpOiBEZXJpdmVkIGZy
b20gb2xkIHNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQpOiBTVEFSVCBIRVJFLiBNYWluIGNoYW5nZS4gU2hv
dWxkIHJlYWQgZXhhY3RseSBsaWtlIEhUTUw1J3MgInByZXBhcmUgYSBzY3JpcHQuIiBMZWdhY3kg
dHlwZSBzdXBwb3J0IG5lZWRlZCBmb3IgbGF5b3V0IHRlc3RzIHVzaW5nIFhNTCBwYXJzZXIuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpyZXF1ZXN0U2NyaXB0KTogTW9zdCBsb2dp
YyBtb3ZlZCB0byBwcmVwYXJlU2NyaXB0LiBDaGVjayBzZWN1cml0eSBzZXR0aW5ncyBoZXJlLgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdCk6IENvbWJpbmVk
IGV2YWx1YXRlU2NyaXB0KCkgYW5kIGV4ZWN1dGVTY3JpcHQoKSBmcm9tIG9sZCBjb2RlLiBMb2dp
YyBtb3ZlZCB0byBwcmVwYXJlU2NyaXB0LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVu
dDo6c3RvcExvYWRSZXF1ZXN0KTogSWdub3JlIHBhcnNlciBleGVjdXRlZCBzY3JpcHRzLgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6ZXhlY3V0ZSk6IFJlbmFtZWQgZXhlY3V0ZVNj
cmlwdC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKTog
V2Ugc2hvdWxkIG9ubHkgbGlzdGVuIGZvciBub24tcGFyc2VyIGV4ZWN1dGVkIHNjcmlwdHMuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjppZ25vcmVzTG9hZFJlcXVlc3QpOiBOZXcg
dmFyaWFibGUgbmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpjaGlsZHJl
bkFyZUNvbW1lbnRzT3JFbXB0eVRleHQpOiBBZGRlZCBmb3IgSFRNTDUgY29tcGxpYW5jZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnNjcmlwdENoYXJzZXQpOiBVc2UgSFRNTDUg
dmFyaWFibGVzLgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRFbGVtZW50Ojp3aWxsQmVQYXJzZXJFeGVjdXRlZCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OndpbGxFeGVjdXRlV2hlbkRvY3Vt
ZW50RmluaXNoZWRQYXJzaW5nKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVt
ZW50OjpjYWNoZWRTY3JpcHQpOiBwcmVwYXJlU2NyaXB0KCkgaXMgdGhlIG9ubHkgcGxhY2UgdGhh
dCBzaG91bGQgbG9hZCBzY3JpcHRzLiBUaGlzIGFjY2Vzc29yIGxldHMgdGhlIHBhcnNlcnMgbGlz
dGVuIGZvciB3aGVuIGxvYWRzIGZpbmlzaC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1l
bnQ6OmlzUGFyc2VySW5zZXJ0ZWQpOiBBZGRlZC4KKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpl
bmRFbGVtZW50TnMpOiBTaG91bGQgYmVoYXZlIHRoZSBzYW1lLiBPZmZsb2FkcyBtdWNoIG9mIGl0
cyB3b3JrIHRvIHByZXBhcmVTY3JpcHQoKS4KKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQYXJz
ZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VFbmRF
bGVtZW50KTogSWRlbnRpY2FsIHRvIGxpYnhtbDIgY2hhbmdlcy4KKyAgICAgICAgKiBodG1sL0hU
TUxTY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50
OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IE5vIGxvbmdlciBuZWVkcyB1cmwuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6aGFzU291cmNlQXR0cmlidXRlKTogQWRkZWQuCisg
ICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxTY3JpcHRSdW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5l
cjo6cmVxdWVzdFBlbmRpbmdTY3JpcHQpOiBSZXF1ZXN0aW5nIHNjcmlwdHMgb2ZmbG9hZGVkIHRv
IFNjcmlwdEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpydW5T
Y3JpcHQpOiBTaG91bGQgYmVoYXZlIHRoZSBzYW1lLiBPZmZsb2FkcyBtdWNoIG9mIGl0cyB3b3Jr
IHRvIHByZXBhcmVTY3JpcHQoKS4KKyAgICAgICAgKiBzdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KTogTmV3IFNjcmlwdEVsZW1lbnQgZnVuY3Rpb24gbmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpT
VkdTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IE5vIGxvbmdlciBuZWVkcyB1
cmwuCisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hp
bGRyZW4pOiBTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4gaXMgZ29uZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1lbnQ6Omhhc1NvdXJjZUF0dHJpYnV0ZSk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hMb2FkRXZl
bnQpOiBOZXcgU2NyaXB0RWxlbWVudCBmdW5jdGlvbiBuYW1lcy4KKyAgICAgICAgKiBzdmcvU1ZH
U2NyaXB0RWxlbWVudC5oOgorCiAyMDExLTAyLTE3ICBIdWkgSHVhbmcgIDxodWkuMi5odWFuZ0Bu
b2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFzemxvIEdvbWJvcy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFbGVtZW50LmNwcAppbmRleCAxOTM5YTA4MGRmYzg4MzY5ZjAyZmZmNzZjZTY4
M2JjNTZiYTM4NTJiLi5iZGFkZWM5ZjRmM2M4NjViMjM5ZDUwOGRlZTAzYTUxMGI4NTk3Yjk1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCkBAIC01MSwxMyArNTEsMTcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1TY3JpcHRFbGVtZW50OjpTY3JpcHRFbGVtZW50KEVsZW1l
bnQqIGVsZW1lbnQsIGJvb2wgd2FzSW5zZXJ0ZWRCeVBhcnNlciwgYm9vbCB3YXNBbHJlYWR5U3Rh
cnRlZCkKK1NjcmlwdEVsZW1lbnQ6OlNjcmlwdEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgYm9v
bCBwYXJzZXJJbnNlcnRlZCwgYm9vbCBhbHJlYWR5U3RhcnRlZCkKICAgICA6IG1fZWxlbWVudChl
bGVtZW50KQogICAgICwgbV9jYWNoZWRTY3JpcHQoMCkKLSAgICAsIG1fd2FzSW5zZXJ0ZWRCeVBh
cnNlcih3YXNJbnNlcnRlZEJ5UGFyc2VyKQorICAgICwgbV9wYXJzZXJJbnNlcnRlZChwYXJzZXJJ
bnNlcnRlZCkKKyAgICAsIG1fd2FzUGFyc2VySW5zZXJ0ZWQoZmFsc2UpCiAgICAgLCBtX2lzRXh0
ZXJuYWxTY3JpcHQoZmFsc2UpCi0gICAgLCBtX3dhc0FscmVhZHlTdGFydGVkKHdhc0FscmVhZHlT
dGFydGVkKQorICAgICwgbV9hbHJlYWR5U3RhcnRlZChhbHJlYWR5U3RhcnRlZCkKICAgICAsIG1f
aGF2ZUZpcmVkTG9hZChmYWxzZSkKKyAgICAsIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQoZmFsc2Up
CisgICAgLCBtX3JlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKGZhbHNlKQorICAgICwgbV93aWxsRXhl
Y3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZyhmYWxzZSkKIHsKICAgICBBU1NFUlQobV9l
bGVtZW50KTsKIH0KQEAgLTY3LDIyICs3MSwxMCBAQCBTY3JpcHRFbGVtZW50Ojp+U2NyaXB0RWxl
bWVudCgpCiAgICAgc3RvcExvYWRSZXF1ZXN0KCk7CiB9CiAKLXZvaWQgU2NyaXB0RWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCit2b2lkIFNjcmlw
dEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKLSAgICBpZiAod2FzSW5zZXJ0ZWRC
eVBhcnNlcigpICYmICFpc0FzeW5jaHJvbm91cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNzY3Jp
cHQKLQotICAgIGlmICghc291cmNlVXJsLmlzRW1wdHkoKSkgewotICAgICAgICByZXF1ZXN0U2Ny
aXB0KHNvdXJjZVVybCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVy
ZSdzIGFuIGVtcHR5IHNjcmlwdCBub2RlLCB3ZSBzaG91bGRuJ3QgZXZhbHVhdGUgdGhlIHNjcmlw
dAotICAgIC8vIGJlY2F1c2UgaWYgYSBzY3JpcHQgaXMgaW5zZXJ0ZWQgYWZ0ZXJ3YXJkcyAoYnkg
c2V0dGluZyB0ZXh0IG9yIGlubmVyVGV4dCkKLSAgICAvLyBpdCBzaG91bGQgYmUgZXZhbHVhdGVk
LCBhbmQgZXZhbHVhdGVTY3JpcHQgb25seSBldmFsdWF0ZXMgYSBzY3JpcHQgb25jZS4KLSAgICBl
dmFsdWF0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdENvbnRlbnQoKSwgZWxlbWVudCgp
LT5kb2N1bWVudCgpLT51cmwoKSkpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcg
bGluZSBudW1iZXIgaGVyZS4KKyAgICBpZiAoIW1fcGFyc2VySW5zZXJ0ZWQpCisgICAgICAgIHBy
ZXBhcmVTY3JpcHQoKTsgLy8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVt
YmVyIGhlcmUuCiB9CiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgp
CkBAIC05MywyMiArODUsOCBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1l
bnQoKQogCiB2b2lkIFNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCiB7Ci0gICAgaWYg
KHdhc0luc2VydGVkQnlQYXJzZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgYSBu
b2RlIGlzIGluc2VydGVkIGFzIGEgY2hpbGQgb2YgdGhlIHNjcmlwdCBlbGVtZW50Ci0gICAgLy8g
YW5kIHRoZSBzY3JpcHQgZWxlbWVudCBoYXMgYmVlbiBpbnNlcnRlZCBpbiB0aGUgZG9jdW1lbnQK
LSAgICAvLyB3ZSBldmFsdWF0ZSB0aGUgc2NyaXB0LgotICAgIGlmIChtX2VsZW1lbnQtPmluRG9j
dW1lbnQoKSAmJiBtX2VsZW1lbnQtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgZXZhbHVhdGVTY3Jp
cHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRDb250ZW50KCksIG1fZWxlbWVudC0+ZG9jdW1lbnQo
KS0+dXJsKCkpKTsgLy8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVy
IGhlcmUKLX0KLQotdm9pZCBTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oY29u
c3QgU3RyaW5nJiBzb3VyY2VVcmwpCi17Ci0gICAgLy8gVGhlIHBhcnNlciBqdXN0IHJlYWNoZWQg
PC9zY3JpcHQ+LiBJZiB3ZSBoYXZlIG5vIHNyYyBhbmQgbm8gdGV4dCwKLSAgICAvLyBhbGxvdyBk
eW5hbWljIGxvYWRpbmcgbGF0ZXIuCi0gICAgaWYgKHNvdXJjZVVybC5pc0VtcHR5KCkgJiYgc2Ny
aXB0Q29udGVudCgpLmlzRW1wdHkoKSkKLSAgICAgICAgbV93YXNJbnNlcnRlZEJ5UGFyc2VyID0g
ZmFsc2U7CisgICAgaWYgKCFtX3BhcnNlckluc2VydGVkICYmIG1fZWxlbWVudC0+aW5Eb2N1bWVu
dCgpKQorICAgICAgICBwcmVwYXJlU2NyaXB0KCk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVhbCBz
dGFydGluZyBsaW5lIG51bWJlciBoZXJlLgogfQogCiB2b2lkIFNjcmlwdEVsZW1lbnQ6OmhhbmRs
ZVNvdXJjZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVybCkKQEAgLTExNiwxMiArOTQs
MTkgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3Ry
aW5nJiBzb3VyY2VVcmwpCiAgICAgaWYgKGlnbm9yZXNMb2FkUmVxdWVzdCgpIHx8IHNvdXJjZVVy
bC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlcXVlc3RTY3JpcHQoc291cmNl
VXJsKTsKKyAgICBwcmVwYXJlU2NyaXB0KCk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVhbCBzdGFy
dGluZyBsaW5lIG51bWJlciBoZXJlLgogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb24KLXN0YXRpYyBi
b29sIGlzU3VwcG9ydGVkSmF2YVNjcmlwdExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2Up
CitzdGF0aWMgYm9vbCBpc0xlZ2FjeVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZShjb25zdCBT
dHJpbmcmIGxhbmd1YWdlKQogeworICAgIC8vIE1vemlsbGEgMS44IGFjY2VwdHMgamF2YXNjcmlw
dDEuMCAtIGphdmFzY3JpcHQxLjcsIGJ1dCBXaW5JRSA3IGFjY2VwdHMgb25seSBqYXZhc2NyaXB0
MS4xIC0gamF2YXNjcmlwdDEuMy4KKyAgICAvLyBNb3ppbGxhIDEuOCBhbmQgV2luSUUgNyBib3Ro
IGFjY2VwdCBqYXZhc2NyaXB0IGFuZCBsaXZlc2NyaXB0LgorICAgIC8vIFdpbklFIDcgYWNjZXB0
cyBlY21hc2NyaXB0IGFuZCBqc2NyaXB0LCBidXQgTW96aWxsYSAxLjggZG9lc24ndC4KKyAgICAv
LyBOZWl0aGVyIE1vemlsbGEgMS44IG5vciBXaW5JRSA3IGFjY2VwdCBsZWFkaW5nIG9yIHRyYWls
aW5nIHdoaXRlc3BhY2UuCisgICAgLy8gV2Ugd2FudCB0byBhY2NlcHQgYWxsIHRoZSB2YWx1ZXMg
dGhhdCBlaXRoZXIgb2YgdGhlc2UgYnJvd3NlcnMgYWNjZXB0LCBidXQgbm90IG90aGVyIHZhbHVl
cy4KKworICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBIVE1MNSBjb21wbGlhbnQu
IFRoZXNlIGJlbG9uZyBpbiB0aGUgTUlNRSByZWdpc3RyeSBhcyAidGV4dC9qYXZhc2NyaXB0PHZl
cnNpb24+IiBlbnRyaWVzLgogICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5n
SGFzaD4gTGFuZ3VhZ2VTZXQ7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMYW5ndWFnZVNldCwg
bGFuZ3VhZ2VzLCAoKSk7CiAgICAgaWYgKGxhbmd1YWdlcy5pc0VtcHR5KCkpIHsKQEAgLTEzNyw1
OCArMTIyLDEzMyBAQCBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZShj
b25zdCBTdHJpbmcmIGxhbmd1YWdlKQogICAgICAgICBsYW5ndWFnZXMuYWRkKCJqYXZhc2NyaXB0
MS43Iik7CiAgICAgICAgIGxhbmd1YWdlcy5hZGQoImxpdmVzY3JpcHQiKTsKICAgICAgICAgbGFu
Z3VhZ2VzLmFkZCgiZWNtYXNjcmlwdCIpOwotICAgICAgICBsYW5ndWFnZXMuYWRkKCJqc2NyaXB0
Iik7ICAgICAgICAgICAgICAgIAorICAgICAgICBsYW5ndWFnZXMuYWRkKCJqc2NyaXB0Iik7CiAg
ICAgfQogCiAgICAgcmV0dXJuIGxhbmd1YWdlcy5jb250YWlucyhsYW5ndWFnZSk7CiB9CiAKLXZv
aWQgU2NyaXB0RWxlbWVudDo6cmVxdWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCkK
K2Jvb2wgU2NyaXB0RWxlbWVudDo6aXNTY3JpcHRUeXBlU3VwcG9ydGVkKExlZ2FjeVR5cGVTdXBw
b3J0IHN1cHBvcnRMZWdhY3lUeXBlcykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaXNMZWdhY3lT
dXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZ2UoKSBpcyBub3QgdmFsaWQgSFRNTDUuIEl0IGlzIHVz
ZWQgaGVyZSB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5n
IGxheW91dCB0ZXN0cy4gVGhlIHNwZWNpZmljIHZpb2xhdGlvbnMgYXJlOgorICAgIC8vIC0gQWxs
b3dpbmcgdHlwZT1qYXZhc2NyaXB0LiB0eXBlPSBzaG91bGQgb25seSBzdXBwb3J0IE1JTUUgdHlw
ZXMsIHN1Y2ggYXMgdGV4dC9qYXZhc2NyaXB0LgorICAgIC8vIC0gQWxsb3dpbmcgYSBkaWZmZXJl
bnQgc2V0IG9mIGxhbmd1YWdlcyBmb3IgbGFuZ3VhZ2U9IGFuZCB0eXBlPS4gbGFuZ3VhZ2U9IHN1
cHBvcnRzIEphdmFzY3JpcHQgMS4xIGFuZCAxLjQtMS42LCBidXQgdHlwZT0gZG9lcyBub3QuCisK
KyAgICBTdHJpbmcgdHlwZSA9IHR5cGVBdHRyaWJ1dGVWYWx1ZSgpOworICAgIGlmICghdHlwZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEph
dmFTY3JpcHRNSU1FVHlwZSh0eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCkpICYmICEoc3Vw
cG9ydExlZ2FjeVR5cGVzID09IEFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSAmJiBpc0xl
Z2FjeVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZSh0eXBlKSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gbGFuZ3Vh
Z2VBdHRyaWJ1dGVWYWx1ZSgpOworICAgICAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSAidGV4dC8iICsgbGFuZ3VhZ2UubG93ZXIoKTsKKyAg
ICAgICAgICAgIGlmICghTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlN
RVR5cGUodHlwZSkgJiYgIWlzTGVnYWN5U3VwcG9ydGVkSmF2YVNjcmlwdExhbmd1YWdlKGxhbmd1
YWdlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9P
dmVydmlldy5odG1sI3ByZXBhcmUtYS1zY3JpcHQKK2Jvb2wgU2NyaXB0RWxlbWVudDo6cHJlcGFy
ZVNjcmlwdChjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBMZWdhY3lU
eXBlU3VwcG9ydCBzdXBwb3J0TGVnYWN5VHlwZXMpCiB7Ci0gICAgLy8gRklYTUU6IEV2ZW50dWFs
bHkgd2UnZCBsaWtlIHRvIGV2YWx1YXRlIHNjcmlwdHMgd2hpY2ggYXJlIGluc2VydGVkIGludG8g
YSAKKyAgICBpZiAobV9hbHJlYWR5U3RhcnRlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKG1fcGFyc2VySW5zZXJ0ZWQpIHsKKyAgICAgICAgbV93YXNQYXJzZXJJbnNlcnRlZCA9
IHRydWU7CisgICAgICAgIG1fcGFyc2VySW5zZXJ0ZWQgPSBmYWxzZTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV93YXNQYXJzZXJJbnNlcnRlZCA9IGZhbHNlOworCisgICAgLy8gRklYTUU6IEhUTUw1
IHNwZWMgc2F5cyB3ZSBzaG91bGQgc2V0IGZvcmNlQXN5bmMuCisKKyAgICAvLyBGSVhNRTogSFRN
TDUgc3BlYyBzYXlzIHdlIHNob3VsZCBjaGVjayB0aGF0IGFsbCBjaGlsZHJlbiBhcmUgZWl0aGVy
IGNvbW1lbnRzIG9yIGVtcHR5IHRleHQgbm9kZXMuCisgICAgaWYgKCFoYXNTb3VyY2VBdHRyaWJ1
dGUoKSAmJiAhbV9lbGVtZW50LT5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghbV9lbGVtZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghaXNTY3JpcHRUeXBlU3VwcG9ydGVkKHN1cHBvcnRMZWdhY3lUeXBlcykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3dhc1BhcnNlckluc2VydGVkKQor
ICAgICAgICBtX3BhcnNlckluc2VydGVkID0gdHJ1ZTsKKworICAgIG1fYWxyZWFkeVN0YXJ0ZWQg
PSB0cnVlOworCisgICAgLy8gRklYTUU6IElmIHNjcmlwdCBpcyBwYXJzZXIgaW5zZXJ0ZWQsIHZl
cmlmeSBpdCdzIHN0aWxsIGluIHRoZSBvcmlnaW5hbCBkb2N1bWVudC4KKworICAgIC8vIEZJWE1F
OiBFdmVudHVhbGx5IHdlJ2QgbGlrZSB0byBldmFsdWF0ZSBzY3JpcHRzIHdoaWNoIGFyZSBpbnNl
cnRlZCBpbnRvIGEKICAgICAvLyB2aWV3bGVzcyBkb2N1bWVudCBidXQgdGhpcydsbCBkbyBmb3Ig
bm93LgogICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NzI3CiAgICAgaWYgKCFtX2VsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2VsZW1lbnQtPmRvY3Vt
ZW50KCktPmZyYW1lKCktPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2NyaXB0cyhBYm91dFRvRXhlY3V0
ZVNjcmlwdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghaXNTY3JpcHRGb3JF
dmVudFN1cHBvcnRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNoYXJz
ZXRBdHRyaWJ1dGVWYWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jaGFyYWN0ZXJFbmNvZGlu
ZyA9IGNoYXJzZXRBdHRyaWJ1dGVWYWx1ZSgpOworICAgIGVsc2UKKyAgICAgICAgbV9mYWxsYmFj
a0NoYXJhY3RlckVuY29kaW5nID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jaGFyc2V0KCk7CisK
KyAgICBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkpCisgICAgICAgIGlmICghcmVxdWVzdFNjcmlw
dChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChoYXNTb3VyY2VBdHRyaWJ1dGUoKSAmJiBkZWZlckF0dHJpYnV0ZVZhbHVlKCkgJiYg
bV9wYXJzZXJJbnNlcnRlZCAmJiAhYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpKSB7CisgICAgICAgIG1f
d2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRGaW5pc2hlZFBhcnNpbmcgPSB0cnVlOworICAgICAgICBt
X3dpbGxCZVBhcnNlckV4ZWN1dGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGhhc1NvdXJjZUF0
dHJpYnV0ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYgIWFzeW5jQXR0cmlidXRlVmFsdWUoKSkK
KyAgICAgICAgbV93aWxsQmVQYXJzZXJFeGVjdXRlZCA9IHRydWU7CisgICAgZWxzZSBpZiAoIWhh
c1NvdXJjZUF0dHJpYnV0ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYgIW1fZWxlbWVudC0+ZG9j
dW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpIHsKKyAgICAgICAgbV93aWxsQmVQYXJz
ZXJFeGVjdXRlZCA9IHRydWU7CisgICAgICAgIG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQgPSB0
cnVlOworICAgIH0gZWxzZSBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkpCisgICAgICAgIG1fY2Fj
aGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisgICAgZWxzZQorICAgICAgICBleGVjdXRlU2Ny
aXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0Q29udGVudCgpLCBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPnVybCgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBTY3JpcHRFbGVtZW50OjpyZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNl
VXJsKQoreworICAgIGlmICghbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQ
b2xpY3koKS0+Y2FuTG9hZEV4dGVybmFsU2NyaXB0RnJvbVNyYyhzb3VyY2VVcmwpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG9yaWdpbmFsRG9jdW1lbnQg
PSBtX2VsZW1lbnQtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFtX2VsZW1lbnQtPmRpc3BhdGNoQmVm
b3JlTG9hZEV2ZW50KHNvdXJjZVVybCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmICghbV9lbGVtZW50LT5pbkRvY3VtZW50KCkgfHwgbV9lbGVtZW50LT5k
b2N1bWVudCgpICE9IG9yaWdpbmFsRG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgQVNTRVJUKCFtX2NhY2hlZFNjcmlwdCk7CisgICAgLy8gRklY
TUU6IElmIHNvdXJjZVVybCBpcyBlbXB0eSwgd2Ugc2hvdWxkIGRpc3BhdGNoRXJyb3JFdmVudCgp
LgogICAgIG1fY2FjaGVkU2NyaXB0ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNvdXJjZVVybCwgc2NyaXB0Q2hhcnNldCgpKTsK
ICAgICBtX2lzRXh0ZXJuYWxTY3JpcHQgPSB0cnVlOwogCi0gICAgLy8gbV93YXNJbnNlcnRlZEJ5
UGFyc2VyIGlzIG5ldmVyIHJlc2V0IC0gYWx3YXlzIHJlc2llZCBhdCB0aGUgaW5pdGlhbCB2YWx1
ZSBzZXQgd2hpbGUgcGFyc2luZy4KLSAgICAvLyBtX3dhc0FscmVhZHlTdGFydGVkIGlzIGxlZnQg
dW50b3VjaGVkIGFzIHdlbGwgdG8gYXZvaWQgc2NyaXB0IHJlZXhlY3V0aW9uLCBpZiBhIDxzY3Jp
cHQ+IGVsZW1lbnQKLSAgICAvLyBpcyByZW1vdmVkIGFuZCByZWFwcGVuZGVkIHRvIHRoZSBkb2N1
bWVudC4KLSAgICBtX2hhdmVGaXJlZExvYWQgPSBmYWxzZTsKLQotICAgIGlmIChtX2NhY2hlZFNj
cmlwdCkgewotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2NhY2hlZFNjcmlwdCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgU2NyaXB0RWxlbWVudDo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNl
Q29kZSYgc291cmNlQ29kZSkKK3ZvaWQgU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdChjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogewotICAgIGlmICh3YXNBbHJlYWR5U3Rh
cnRlZCgpIHx8IHNvdXJjZUNvZGUuaXNFbXB0eSgpIHx8ICFzaG91bGRFeGVjdXRlQXNKYXZhU2Ny
aXB0KCkpCisgICAgaWYgKHNvdXJjZUNvZGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpOwog
ICAgIEFTU0VSVChkb2N1bWVudCk7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5m
cmFtZSgpKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2NyaXB0
cyhBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
bV93YXNBbHJlYWR5U3RhcnRlZCA9IHRydWU7Ci0KLSAgICAgICAgLy8gaHR0cDovL3d3dy53aGF0
d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jc2NyaXB0Ci0KICAgICAgICAgewog
ICAgICAgICAgICAgSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIgaWdub3Jl
RGVzY3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyKG1faXNFeHRlcm5hbFNjcmlwdCA/IGRv
Y3VtZW50LmdldCgpIDogMCk7CiAgICAgICAgICAgICAvLyBDcmVhdGUgYSBzY3JpcHQgZnJvbSB0
aGUgc2NyaXB0IGVsZW1lbnQgbm9kZSwgdXNpbmcgdGhlIHNjcmlwdApAQCAtMjAxLDM2ICsyNjEs
MjMgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjpldmFsdWF0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3Vy
Y2VDb2RlJiBzb3VyY2VDb2RlKQogICAgIH0KIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50OjpleGVj
dXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCi17Ci0gICAgaWYg
KHdhc0FscmVhZHlTdGFydGVkKCkgfHwgc291cmNlQ29kZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVu
dCgpOwotICAgIEFTU0VSVChkb2N1bWVudCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQt
PmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93YXNB
bHJlYWR5U3RhcnRlZCA9IHRydWU7Ci0KLSAgICBmcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3Jp
cHQoc291cmNlQ29kZSk7Ci19Ci0KIHZvaWQgU2NyaXB0RWxlbWVudDo6c3RvcExvYWRSZXF1ZXN0
KCkKIHsKICAgICBpZiAobV9jYWNoZWRTY3JpcHQpIHsKLSAgICAgICAgbV9jYWNoZWRTY3JpcHQt
PnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgaWYgKCFtX3dpbGxCZVBhcnNlckV4ZWN1dGVk
KQorICAgICAgICAgICAgbV9jYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKICAgICAg
ICAgbV9jYWNoZWRTY3JpcHQgPSAwOwogICAgIH0KIH0KIAogdm9pZCBTY3JpcHRFbGVtZW50Ojpl
eGVjdXRlKENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQogeworICAgIEFTU0VSVCghbV93aWxs
QmVQYXJzZXJFeGVjdXRlZCk7CiAgICAgQVNTRVJUKGNhY2hlZFNjcmlwdCk7CiAgICAgaWYgKGNh
Y2hlZFNjcmlwdC0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICBkaXNwYXRjaEVycm9yRXZlbnQo
KTsKICAgICBlbHNlIHsKLSAgICAgICAgZXZhbHVhdGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShj
YWNoZWRTY3JpcHQpKTsKKyAgICAgICAgZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKGNh
Y2hlZFNjcmlwdCkpOwogICAgICAgICBkaXNwYXRjaExvYWRFdmVudCgpOwogICAgIH0KICAgICBj
YWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKQEAgLTIzOCw2ICsyODUsNyBAQCB2b2lk
IFNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGUoQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCiAKIHZv
aWQgU2NyaXB0RWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIG8pCiB7Cisg
ICAgQVNTRVJUKCFtX3dpbGxCZVBhcnNlckV4ZWN1dGVkKTsKICAgICBBU1NFUlRfVU5VU0VEKG8s
IG8gPT0gbV9jYWNoZWRTY3JpcHQpOwogICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+YXN5bmNT
Y3JpcHRSdW5uZXIoKS0+ZXhlY3V0ZVNjcmlwdFNvb24odGhpcywgbV9jYWNoZWRTY3JpcHQpOwog
ICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsKQEAgLTI0NSw1NiArMjkzLDMyIEBAIHZvaWQgU2NyaXB0
RWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIG8pCiAKIGJvb2wgU2NyaXB0
RWxlbWVudDo6aWdub3Jlc0xvYWRSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2FzQWxy
ZWFkeVN0YXJ0ZWQoKSB8fCBtX2lzRXh0ZXJuYWxTY3JpcHQgfHwgd2FzSW5zZXJ0ZWRCeVBhcnNl
cigpIHx8ICFtX2VsZW1lbnQtPmluRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gbV9hbHJlYWR5U3Rh
cnRlZCB8fCBtX2lzRXh0ZXJuYWxTY3JpcHQgfHwgbV9wYXJzZXJJbnNlcnRlZCB8fCAhbV9lbGVt
ZW50LT5pbkRvY3VtZW50KCk7CiB9CiAKLWJvb2wgU2NyaXB0RWxlbWVudDo6c2hvdWxkRXhlY3V0
ZUFzSmF2YVNjcmlwdCgpIGNvbnN0Citib29sIFNjcmlwdEVsZW1lbnQ6OmlzU2NyaXB0Rm9yRXZl
bnRTdXBwb3J0ZWQoKSBjb25zdAogewotICAgIC8qCi0gICAgICAgICBNb3ppbGxhIDEuOCBhY2Nl
cHRzIGphdmFzY3JpcHQxLjAgLSBqYXZhc2NyaXB0MS43LCBidXQgV2luSUUgNyBhY2NlcHRzIG9u
bHkgamF2YXNjcmlwdDEuMSAtIGphdmFzY3JpcHQxLjMuCi0gICAgICAgICBNb3ppbGxhIDEuOCBh
bmQgV2luSUUgNyBib3RoIGFjY2VwdCBqYXZhc2NyaXB0IGFuZCBsaXZlc2NyaXB0LgotICAgICAg
ICAgV2luSUUgNyBhY2NlcHRzIGVjbWFzY3JpcHQgYW5kIGpzY3JpcHQsIGJ1dCBNb3ppbGxhIDEu
OCBkb2Vzbid0LgotICAgICAgICAgTmVpdGhlciBNb3ppbGxhIDEuOCBub3IgV2luSUUgNyBhY2Nl
cHQgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlLgotICAgICAgICAgV2Ugd2FudCB0byBh
Y2NlcHQgYWxsIHRoZSB2YWx1ZXMgdGhhdCBlaXRoZXIgb2YgdGhlc2UgYnJvd3NlcnMgYWNjZXB0
LCBidXQgbm90IG90aGVyIHZhbHVlcy4KLSAgICAgCi0gICAgICAgICBGSVhNRTogSXMgdGhpcyBI
VE1MNSBjb21wbGlhbnQ/Ci0gICAgICovCi0gICAgU3RyaW5nIHR5cGUgPSB0eXBlQXR0cmlidXRl
VmFsdWUoKTsKLSAgICBpZiAoIXR5cGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmICghTUlNRVR5
cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUodHlwZS5zdHJpcFdoaXRl
U3BhY2UoKS5sb3dlcigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBsYW5ndWFnZUF0dHJpYnV0ZVZhbHVlKCk7Ci0g
ICAgICAgIGlmICghbGFuZ3VhZ2UuaXNFbXB0eSgpICYmICFpc1N1cHBvcnRlZEphdmFTY3JpcHRM
YW5ndWFnZShsYW5ndWFnZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSAgICAK
LQotICAgIC8vIE5vIHR5cGUgb3IgbGFuZ3VhZ2UgaXMgc3BlY2lmaWVkLCBzbyB3ZSBhc3N1bWUg
dGhlIHNjcmlwdCB0byBiZSBKYXZhU2NyaXB0LgotCi0gICAgU3RyaW5nIGZvckF0dHJpYnV0ZSA9
IGZvckF0dHJpYnV0ZVZhbHVlKCk7CiAgICAgU3RyaW5nIGV2ZW50QXR0cmlidXRlID0gZXZlbnRB
dHRyaWJ1dGVWYWx1ZSgpOwotICAgIGlmICghZm9yQXR0cmlidXRlLmlzRW1wdHkoKSAmJiAhZXZl
bnRBdHRyaWJ1dGUuaXNFbXB0eSgpKSB7CisgICAgU3RyaW5nIGZvckF0dHJpYnV0ZSA9IGZvckF0
dHJpYnV0ZVZhbHVlKCk7CisgICAgaWYgKCFldmVudEF0dHJpYnV0ZS5pc0VtcHR5KCkgJiYgIWZv
ckF0dHJpYnV0ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yQXR0cmlidXRlID0gZm9yQXR0cmli
dXRlLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGZv
ckF0dHJpYnV0ZSwgIndpbmRvdyIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgCisKICAgICAgICAgZXZlbnRBdHRyaWJ1dGUgPSBldmVudEF0dHJpYnV0ZS5zdHJpcFdo
aXRlU3BhY2UoKTsKICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShldmVudEF0dHJpYnV0
ZSwgIm9ubG9hZCIpICYmICFlcXVhbElnbm9yaW5nQ2FzZShldmVudEF0dHJpYnV0ZSwgIm9ubG9h
ZCgpIikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAogICAgIHJldHVy
biB0cnVlOwogfQogCiBTdHJpbmcgU2NyaXB0RWxlbWVudDo6c2NyaXB0Q2hhcnNldCgpIGNvbnN0
CiB7Ci0gICAgLy8gRmlyc3Qgd2UgdHJ5IHRvIGdldCBlbmNvZGluZyBmcm9tIGNoYXJzZXQgYXR0
cmlidXRlLgotICAgIFN0cmluZyBjaGFyc2V0ID0gY2hhcnNldEF0dHJpYnV0ZVZhbHVlKCkuc3Ry
aXBXaGl0ZVNwYWNlKCk7Ci0KLSAgICAvLyBJZiBjaGFyc2V0IGhhcyBub3QgYmVlbiBkZWNsYXJl
ZCBpbiBzY3JpcHQgdGFnLCBmYWxsIGJhY2sgdG8gZnJhbWUgZW5jb2RpbmcuCi0gICAgaWYgKGNo
YXJzZXQuaXNFbXB0eSgpKQotICAgICAgICBjaGFyc2V0ID0gbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5jaGFyc2V0KCk7Ci0KKyAgICBTdHJpbmcgY2hhcnNldDsKKyAgICBpZiAoIW1fY2hhcmFjdGVy
RW5jb2RpbmcuaXNFbXB0eSgpKQorICAgICAgICBjaGFyc2V0ID0gbV9jaGFyYWN0ZXJFbmNvZGlu
ZzsKKyAgICBlbHNlIGlmICghbV9mYWxsYmFja0NoYXJhY3RlckVuY29kaW5nLmlzRW1wdHkoKSkK
KyAgICAgICAgY2hhcnNldCA9IG1fZmFsbGJhY2tDaGFyYWN0ZXJFbmNvZGluZzsKICAgICByZXR1
cm4gY2hhcnNldDsKIH0KIApAQCAtMzI1LDIwICszNDksNiBAQCBTdHJpbmcgU2NyaXB0RWxlbWVu
dDo6c2NyaXB0Q29udGVudCgpIGNvbnN0CiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQodmFsKTsK
IH0KIAotYm9vbCBTY3JpcHRFbGVtZW50Ojppc0FzeW5jaHJvbm91cygpIGNvbnN0Ci17Ci0gICAg
Ly8gT25seSBleHRlcm5hbCBzY3JpcHRzIG1heSBiZSBhc3luY2hyb25vdXMuCi0gICAgLy8gU2Vl
OiBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjYXR0ci1zY3JpcHQt
YXN5bmMKLSAgICByZXR1cm4gIXNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkuaXNFbXB0eSgpICYmIGFz
eW5jQXR0cmlidXRlVmFsdWUoKTsKLX0KLQotYm9vbCBTY3JpcHRFbGVtZW50Ojppc0RlZmVycmVk
KCkgY29uc3QKLXsKLSAgICAvLyBPbmx5IGV4dGVybmFsIHNjcmlwdHMgbWF5IGJlIGRlZmVycmVk
IGFuZCBhc3luYyB0cnVtcHMgZGVmZXIgdG8gYWxsb3cgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxp
dHkuCi0gICAgLy8gU2VlOiBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0
bWwjYXR0ci1zY3JpcHQtZGVmZXIKLSAgICByZXR1cm4gIXNvdXJjZUF0dHJpYnV0ZVZhbHVlKCku
aXNFbXB0eSgpICYmICFhc3luY0F0dHJpYnV0ZVZhbHVlKCkgJiYgZGVmZXJBdHRyaWJ1dGVWYWx1
ZSgpOwotfQotCiBTY3JpcHRFbGVtZW50KiB0b1NjcmlwdEVsZW1lbnQoRWxlbWVudCogZWxlbWVu
dCkKIHsKICAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgK
aW5kZXggNTI1MGYzZTMzNTQ5OTA5MjhmNTc1NjAxZDAxMjIzZjQwYzY1MTYwNy4uZWI1YmZlNzM1
Mjg2MGU5NThlZGYxYTRjZDE5ZDkwMjM5ZDY4NWZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxl
bWVudC5oCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzEsNTIgKzMy
LDU3IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBTY3JpcHRFbGVtZW50OwogY2xhc3MgU2NyaXB0
U291cmNlQ29kZTsKIAorZW51bSBMZWdhY3lUeXBlU3VwcG9ydCB7IERpc2FsbG93TGVnYWN5VHlw
ZUluVHlwZUF0dHJpYnV0ZSwgQWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlIH07CisKIGNs
YXNzIFNjcmlwdEVsZW1lbnQgOiBwcml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBTY3JpcHRFbGVtZW50KEVsZW1l
bnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlciwgYm9vbCBpc0V2YWx1YXRlZCk7CiAgICAgdmlydHVh
bCB+U2NyaXB0RWxlbWVudCgpOwotICAgIAorCiAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZWxlbWVudDsgfQogCisgICAgYm9vbCBwcmVwYXJlU2NyaXB0KGNvbnN0IFRl
eHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb24xOjptaW5pbXVt
UG9zaXRpb24oKSwgTGVnYWN5VHlwZVN1cHBvcnQgc3VwcG9ydExlZ2FjeVR5cGVzID0gRGlzYWxs
b3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKTsKKwogICAgIC8vIEEgY2hhcnNldCBmb3IgbG9h
ZGluZyB0aGUgc2NyaXB0IChtYXkgYmUgb3ZlcnJpZGRlbiBieSBIVFRQIGhlYWRlcnMgb3IgYSBC
T00pLgogICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0KCkgY29uc3Q7CiAKICAgICBTdHJpbmcgc2Ny
aXB0Q29udGVudCgpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgp
IGNvbnN0OwogICAgIHZvaWQgZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7
CiAgICAgdm9pZCBleGVjdXRlKENhY2hlZFNjcmlwdCopOwogCiAgICAgLy8gWE1MIHBhcnNlciBj
YWxscyB0aGVzZQotICAgIHZpcnR1YWwgU3RyaW5nIHNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hFcnJvckV2ZW50KCkgPSAwOworICAgIGJvb2wgaXNTY3JpcHRU
eXBlU3VwcG9ydGVkKExlZ2FjeVR5cGVTdXBwb3J0KSBjb25zdDsKIAogICAgIGJvb2wgaGF2ZUZp
cmVkTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9oYXZlRmlyZWRMb2FkOyB9CisgICAgYm9v
bCB3aWxsQmVQYXJzZXJFeGVjdXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbEJlUGFyc2VyRXhl
Y3V0ZWQ7IH0KKyAgICBib29sIHJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkgY29uc3QgeyByZXR1
cm4gbV9yZWFkeVRvQmVQYXJzZXJFeGVjdXRlZDsgfQorICAgIGJvb2wgd2lsbEV4ZWN1dGVXaGVu
RG9jdW1lbnRGaW5pc2hlZFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBtX3dpbGxFeGVjdXRlV2hl
bkRvY3VtZW50RmluaXNoZWRQYXJzaW5nOyB9CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
aGVkU2NyaXB0PiBjYWNoZWRTY3JpcHQoKSB7IHJldHVybiBtX2NhY2hlZFNjcmlwdDsgfQogCiBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRIYXZlRmlyZWRMb2FkRXZlbnQoYm9vbCBoYXZlRmlyZWRM
b2FkKSB7IG1faGF2ZUZpcmVkTG9hZCA9IGhhdmVGaXJlZExvYWQ7IH0KLSAgICBib29sIHdhc0lu
c2VydGVkQnlQYXJzZXIoKSBjb25zdCB7IHJldHVybiBtX3dhc0luc2VydGVkQnlQYXJzZXI7IH0K
LSAgICBib29sIHdhc0FscmVhZHlTdGFydGVkKCkgY29uc3QgeyByZXR1cm4gbV93YXNBbHJlYWR5
U3RhcnRlZDsgfQorICAgIGJvb2wgaXNQYXJzZXJJbnNlcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFyc2VySW5zZXJ0ZWQ7IH0KKyAgICBib29sIGFscmVhZHlTdGFydGVkKCkgY29uc3QgeyByZXR1
cm4gbV9hbHJlYWR5U3RhcnRlZDsgfQogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5
IG91ciBwYXJlbnQgY2xhc3Nlcy4KLSAgICB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KGNvbnN0
IFN0cmluZyYgc291cmNlVXJsKTsKKyAgICB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAg
ICAgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQo
KTsKLSAgICB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbihjb25zdCBTdHJpbmcmIHNvdXJjZVVy
bCk7CiAgICAgdm9pZCBoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VV
cmwpOwogCiBwcml2YXRlOgogICAgIGJvb2wgaWdub3Jlc0xvYWRSZXF1ZXN0KCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc0FzeW5jaHJvbm91cygpIGNvbnN0OwotICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNv
bnN0OworICAgIGJvb2wgaXNTY3JpcHRGb3JFdmVudFN1cHBvcnRlZCgpIGNvbnN0OwogCi0gICAg
dm9pZCByZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlVXJsKTsKLSAgICB2b2lkIGV2
YWx1YXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKKyAgICBib29sIHJlcXVlc3RT
Y3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOwogICAgIHZvaWQgc3RvcExvYWRSZXF1ZXN0
KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsK
IAorICAgIHZpcnR1YWwgU3RyaW5nIHNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgU3RyaW5nIGNoYXJzZXRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIFN0cmluZyB0eXBlQXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBTdHJpbmcgbGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKQEAgLTg0LDEz
ICs5MCwyMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGV2ZW50QXR0cmlidXRlVmFs
dWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGFzeW5jQXR0cmlidXRlVmFsdWUoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlZmVyQXR0cmlidXRlVmFsdWUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBib29sIGhhc1NvdXJjZUF0dHJpYnV0ZSgpIGNvbnN0ID0gMDsKIAog
ICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRT
Y3JpcHQ+IG1fY2FjaGVkU2NyaXB0OwotICAgIGJvb2wgbV93YXNJbnNlcnRlZEJ5UGFyc2VyOwor
ICAgIGJvb2wgbV9wYXJzZXJJbnNlcnRlZDsKKyAgICBib29sIG1fd2FzUGFyc2VySW5zZXJ0ZWQ7
CiAgICAgYm9vbCBtX2lzRXh0ZXJuYWxTY3JpcHQ7Ci0gICAgYm9vbCBtX3dhc0FscmVhZHlTdGFy
dGVkOworICAgIGJvb2wgbV9hbHJlYWR5U3RhcnRlZDsKICAgICBib29sIG1faGF2ZUZpcmVkTG9h
ZDsKKyAgICBib29sIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQ7IC8vIFNhbWUgYXMgIlRoZSBwYXJz
ZXIgd2lsbCBoYW5kbGUgZXhlY3V0aW5nIHRoZSBzY3JpcHQuIgorICAgIGJvb2wgbV9yZWFkeVRv
QmVQYXJzZXJFeGVjdXRlZDsKKyAgICBib29sIG1fd2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRGaW5p
c2hlZFBhcnNpbmc7CisgICAgU3RyaW5nIG1fY2hhcmFjdGVyRW5jb2Rpbmc7CisgICAgU3RyaW5n
IG1fZmFsbGJhY2tDaGFyYWN0ZXJFbmNvZGluZzsKIH07CiAKIFNjcmlwdEVsZW1lbnQqIHRvU2Ny
aXB0RWxlbWVudChFbGVtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1M
RG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVu
dFBhcnNlckxpYnhtbDIuY3BwCmluZGV4IDEwZDZlMGRlNTIzYjE1ZDE4YjI3NTE4ZGQ3NDE5ZGIz
NGY4YWUyZmMuLjg1YjhjOGRlOTQzNjVlNTIwYTU1Zjg2NDM0YmY2YjU2MjZhNWRkNmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC04
ODAsMzUgKzg4MCwzMiBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQog
ICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0
cnVlOwogCisgICAgYm9vbCBzdWNjZXNzZnVsbHlQcmVwYXJlZCA9IHNjcmlwdEVsZW1lbnQtPnBy
ZXBhcmVTY3JpcHQobV9zY3JpcHRTdGFydFBvc2l0aW9uLCBBbGxvd0xlZ2FjeVR5cGVJblR5cGVB
dHRyaWJ1dGUpOworICAgIGlmICghc3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKICNpZiBFTkFCTEUo
WEhUTUxNUCkKLSAgICBpZiAoIXNjcmlwdEVsZW1lbnQtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3Jp
cHQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVu
dCh0cnVlKTsKLSAgICBlbHNlCisgICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+aXNTY3JpcHRU
eXBlU3VwcG9ydGVkKEFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpCisgICAgICAgICAg
ICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwogI2Vu
ZGlmCi0gICAgewotICAgICAgICAvLyBGSVhNRTogU2NyaXB0IGV4ZWN1dGlvbiBzaG91bGQgYmUg
c2hhcmVkIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbgorICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IEZJWE1FOiBTY3JpcHQgZXhlY3V0aW9uIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbgogICAgICAg
ICAvLyB0aGUgbGlieG1sMiBhbmQgUXQgWE1MRG9jdW1lbnRQYXJzZXIgaW1wbGVtZW50YXRpb25z
LgogCiAgICAgICAgIC8vIEphdmFTY3JpcHQgY2FuIGRldGFjaCB0aGUgcGFyc2VyLiAgTWFrZSBz
dXJlIHRoaXMgaXMgbm90IHJlbGVhc2VkCiAgICAgICAgIC8vIGJlZm9yZSB0aGUgZW5kIG9mIHRo
aXMgbWV0aG9kLgogICAgICAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJzZXI+IHByb3RlY3QodGhp
cyk7CiAKLSAgICAgICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3JpcHRFbGVtZW50LT5zb3VyY2VB
dHRyaWJ1dGVWYWx1ZSgpOwotICAgICAgICBpZiAoIXNjcmlwdEhyZWYuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZQotICAgICAgICAgICAgU3RyaW5n
IHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Ci0gICAgICAg
ICAgICBpZiAoZWxlbWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoc2NyaXB0SHJlZikgJiYK
LSAgICAgICAgICAgICAgICAobV9wZW5kaW5nU2NyaXB0ID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzY3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0KSkp
IHsKLSAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAg
ICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotCi0gICAgICAgICAgICAg
ICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUgMCBpZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9h
ZGVkIGFuZCByZWYoKSBleGVjdXRlZCBpdAotICAgICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdT
Y3JpcHQpCi0gICAgICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKLSAgICAgICAgfSBl
bHNlCisgICAgICAgIGlmIChzY3JpcHRFbGVtZW50LT5yZWFkeVRvQmVQYXJzZXJFeGVjdXRlZCgp
KQogICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VD
b2RlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1f
c2NyaXB0U3RhcnRQb3NpdGlvbikpOworICAgICAgICBlbHNlIGlmIChzY3JpcHRFbGVtZW50LT53
aWxsQmVQYXJzZXJFeGVjdXRlZCgpKSB7CisgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQgPSBz
Y3JpcHRFbGVtZW50LT5jYWNoZWRTY3JpcHQoKTsKKyAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVu
dCA9IGVsZW1lbnQ7CisgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPmFkZENsaWVudCh0aGlz
KTsKKworICAgICAgICAgICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUgMCBpZiBzY3JpcHQg
d2FzIGFscmVhZHkgbG9hZGVkIGFuZCBhZGRDbGllbnQoKSBleGVjdXRlZCBpdC4KKyAgICAgICAg
ICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCisgICAgICAgICAgICAgICAgcGF1c2VQYXJzaW5nKCk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKIAogICAg
ICAgICAvLyBKYXZhU2NyaXB0IG1heSBoYXZlIGRldGFjaGVkIHRoZSBwYXJzZXIKICAgICAgICAg
aWYgKGlzRGV0YWNoZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1
bWVudFBhcnNlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0
LmNwcAppbmRleCBkMGJmODhkYzcxYWY1MTRlNDUzNzAzMWQxOWEyNzM1NTZlZGUwNDIyLi45OWFm
YWRiMTM5ZTA1ZjVmMDE1NTMyYTM0M2ZjYTM4Yzc1ZGU4MWNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCkBAIC01ODgsMjggKzU4OCwyNSBAQCB2b2lkIFhN
TERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQoKQogICAgIEFTU0VSVCghbV9wZW5kaW5n
U2NyaXB0KTsKICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwogCisgICAgYm9vbCBzdWNj
ZXNzZnVsbHlQcmVwYXJlZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQobV9zY3JpcHRT
dGFydFBvc2l0aW9uLCBBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOworICAgIGlmICgh
c3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKICNpZiBFTkFCTEUoWEhUTUxNUCkKLSAgICBpZiAoIXNj
cmlwdEVsZW1lbnQtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKLSAgICAgICAgZG9jdW1l
bnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKLSAgICBlbHNlCisg
ICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+aXNTY3JpcHRUeXBlU3VwcG9ydGVkKEFsbG93TGVn
YWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91
bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwogI2VuZGlmCi0gICAgewotICAgICAgICBT
dHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1lbnQtPnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCk7
Ci0gICAgICAgIGlmICghc2NyaXB0SHJlZi5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIHdl
IGhhdmUgYSBzcmMgYXR0cmlidXRlCi0gICAgICAgICAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCA9
IHNjcmlwdEVsZW1lbnQtPnNjcmlwdENoYXJzZXQoKTsKLSAgICAgICAgICAgIGlmIChlbGVtZW50
LT5kaXNwYXRjaEJlZm9yZUxvYWRFdmVudChzY3JpcHRIcmVmKSAmJgotICAgICAgICAgICAgICAg
IChtX3BlbmRpbmdTY3JpcHQgPSBkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5y
ZXF1ZXN0U2NyaXB0KHNjcmlwdEhyZWYsIHNjcmlwdENoYXJzZXQpKSkgewotICAgICAgICAgICAg
ICAgIG1fc2NyaXB0RWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgbV9wZW5kaW5n
U2NyaXB0LT5hZGRDbGllbnQodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBtX3BlbmRpbmdT
Y3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIHJlZigpIGV4
ZWN1dGVkIGl0Ci0gICAgICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKLSAgICAgICAg
ICAgICAgICAgICAgcGF1c2VQYXJzaW5nKCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotICAgICAgICB9IGVsc2UKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkK
ICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29k
ZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3Nj
cmlwdFN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2ls
bEJlUGFyc2VyRXhlY3V0ZWQoKSkgeworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2Ny
aXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7CisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQg
PSBlbGVtZW50OworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7
CisKKyAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdh
cyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQgaXQuCisgICAgICAgICAg
ICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CiAgICAgfQog
ICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwogICAgIHBvcEN1cnJlbnROb2RlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCmluZGV4IDYwM2IyYThlZWRi
ZTc1MmVmNzJkMWFlMzJhYWI5ZWQ4NWYwMzZjNjEuLjhlNzA4ZDEzZTFiZjU0N2ZmNTYxZDM0Mjk3
ZTUyYjE5ZjZmMjVmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlw
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQu
Y3BwCkBAIC0zNSw5ICszNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJv
b2wgd2FzSW5zZXJ0ZWRCeVBhcnNlciwgYm9vbCB3YXNBbHJlYWR5U3RhcnRlZCkKK2lubGluZSBI
VE1MU2NyaXB0RWxlbWVudDo6SFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHdhc0luc2VydGVkQnlQYXJzZXIsIGJv
b2wgYWxyZWFkeVN0YXJ0ZWQpCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkK
LSAgICAsIFNjcmlwdEVsZW1lbnQodGhpcywgd2FzSW5zZXJ0ZWRCeVBhcnNlciwgd2FzQWxyZWFk
eVN0YXJ0ZWQpCisgICAgLCBTY3JpcHRFbGVtZW50KHRoaXMsIHdhc0luc2VydGVkQnlQYXJzZXIs
IGFscmVhZHlTdGFydGVkKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHNjcmlwdFRhZykpOwog
fQpAQCAtNzQsMTYgKzc0LDEwIEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpmaW5pc2hQ
YXJzaW5nQ2hpbGRyZW4oKQotewotICAgIFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGls
ZHJlbihzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKTsKLSAgICBIVE1MRWxlbWVudDo6ZmluaXNoUGFy
c2luZ0NoaWxkcmVuKCk7Ci19Ci0KIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50
b0RvY3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsK
LSAgICBTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudChzb3VyY2VBdHRyaWJ1dGVW
YWx1ZSgpKTsKKyAgICBTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogfQog
CiB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKQEAgLTE2MCw2
ICsxNTQsMTEgQEAgYm9vbCBIVE1MU2NyaXB0RWxlbWVudDo6ZGVmZXJBdHRyaWJ1dGVWYWx1ZSgp
IGNvbnN0CiAgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoZGVmZXJBdHRyKTsKIH0KIAorYm9v
bCBIVE1MU2NyaXB0RWxlbWVudDo6aGFzU291cmNlQXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShzcmNBdHRyKTsKK30KKwogdm9pZCBIVE1MU2NyaXB0RWxl
bWVudDo6ZGlzcGF0Y2hMb2FkRXZlbnQoKQogewogICAgIEFTU0VSVCghaGF2ZUZpcmVkTG9hZEV2
ZW50KCkpOwpAQCAtMTc1LDcgKzE3NCw3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmRpc3Bh
dGNoRXJyb3JFdmVudCgpCiAKIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTFNjcmlwdEVsZW1lbnQ6
OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25zdAogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFNjcmlwdEVsZW1lbnQodGFnUU5hbWUoKSwgZG9jdW1l
bnQoKSwgZmFsc2UsIHdhc0FscmVhZHlTdGFydGVkKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEhUTUxTY3JpcHRFbGVtZW50KHRhZ1FOYW1lKCksIGRvY3VtZW50KCksIGZhbHNlLCBhbHJl
YWR5U3RhcnRlZCgpKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFNjcmlwdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1l
bnQuaAppbmRleCAwOTc3M2M1ZmJjNjQ1MGVhODdhZTg0Y2UxZDI1N2Q2ZTJhZTg1N2FmLi5lZmU2
YTZhM2NmMjA2YWZhNTcwYmM1YjM2YTM2MjA3ZGU3MDZlOTJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2NyaXB0RWxlbWVudC5oCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBLVVJM
IHNyYygpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEhUTUxTY3JpcHRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgd2FzSW5zZXJ0ZWRCeVBhcnNlciwgYm9vbCB3
YXNBbHJlYWR5U3RhcnRlZCk7CisgICAgSFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50KiwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCBib29sIGFscmVhZHlT
dGFydGVkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKQEAgLTQ3LDcg
KzQ3LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wg
Y2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFm
dGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogCiAgICAgdmlydHVhbCBi
b29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJj
ZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIApAQCAtNTksNiArNTgs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGV2ZW50QXR0cmlidXRlVmFsdWUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBkZWZlckF0dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGhhc1NvdXJjZUF0dHJpYnV0ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoTG9hZEV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRl
eCBjOTk4NThkMGNmZTVmM2NlOGYyMDI5ZGM5ZWFmZmYxOGRlZTlkYTgxLi45OWZmZjVlZjllNWUx
YjQxZDExMzkxOGJmMjE4OTVjZjc1ZWE3OTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcApAQCAtMjYyLDE3ICsyNjIsOSBAQCB2b2lkIEhU
TUxTY3JpcHRSdW5uZXI6OnJlcXVlc3REZWZlcnJlZFNjcmlwdChFbGVtZW50KiBlbGVtZW50KQog
Ym9vbCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0
JiBwZW5kaW5nU2NyaXB0LCBFbGVtZW50KiBzY3JpcHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFw
ZW5kaW5nU2NyaXB0LmVsZW1lbnQoKSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBzcmNWYWx1
ZSA9IHNjcmlwdC0+Z2V0QXR0cmlidXRlKHNyY0F0dHIpOwotICAgIC8vIEFsbG93IHRoZSBob3N0
IHRvIGRpc2xsb3cgc2NyaXB0IGxvYWRzICh1c2luZyB0aGUgWFNTQXVkaXRvciwgZXRjLikKLSAg
ICAvLyBGSVhNRTogdGhpcyBjaGVjayBzaG91bGQgYmUgcGVyZm9ybWVkIG9uIHRoZSBmaW5hbCBV
UkwgaW4gYSByZWRpcmVjdCBjaGFpbi4KLSAgICBpZiAoIW1faG9zdC0+c2hvdWxkTG9hZEV4dGVy
bmFsU2NyaXB0RnJvbVNyYyhzcmNWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAv
LyBGSVhNRTogV2UgbmVlZCB0byByZXNvbHZlIHRoZSB1cmwgcmVsYXRpdmUgdG8gdGhlIGVsZW1l
bnQuCi0gICAgaWYgKCFzY3JpcHQtPmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KHNyY1ZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHBlbmRpbmdTY3JpcHQuc2V0RWxlbWVudChzY3Jp
cHQpOwogICAgIC8vIFRoaXMgc2hvdWxkIGNvcnJlY3RseSByZXR1cm4gMCBmb3IgZW1wdHkgb3Ig
aW52YWxpZCBzcmNWYWx1ZXMuCi0gICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQgPSBtX2Rv
Y3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNyY1ZhbHVlLCB0
b1NjcmlwdEVsZW1lbnQoc2NyaXB0KS0+c2NyaXB0Q2hhcnNldCgpKTsKKyAgICBDYWNoZWRTY3Jp
cHQqIGNhY2hlZFNjcmlwdCA9IHRvU2NyaXB0RWxlbWVudChzY3JpcHQpLT5jYWNoZWRTY3JpcHQo
KS5nZXQoKTsKICAgICBpZiAoIWNhY2hlZFNjcmlwdCkgewogICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOyAvLyBEaXNwYXRjaCBlcnJvciBldmVudC4KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MjkzLDI5ICsyODUsMjQgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVu
dCogc2NyaXB0LCBjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGEKIAogICAgICAgICBTY3Jp
cHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KHNjcmlwdCk7CiAgICAg
ICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKLSAgICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT5z
aG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCisKKyAgICAgICAgc2NyaXB0RWxlbWVudC0+cHJl
cGFyZVNjcmlwdChzY3JpcHRTdGFydFBvc2l0aW9uKTsKKworICAgICAgICBpZiAoIXNjcmlwdEVs
ZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAotICAgICAgICBpZiAoc2NyaXB0LT5oYXNBdHRyaWJ1dGUoc3JjQXR0cikpIHsKLSAgICAg
ICAgICAgIGlmIChzY3JpcHQtPmhhc0F0dHJpYnV0ZShhc3luY0F0dHIpKSAvLyBBc3luYyB0YWtl
cyBwcmVjZW5kZW5jZSBvdmVyIGRlZmVyLgotICAgICAgICAgICAgICAgIHJldHVybjsgLy8gQXN5
bmNocm9ub3VzIHNjcmlwdHMgaGFuZGxlIHRoZW1zZWx2ZXMuCi0KLSAgICAgICAgICAgIGlmIChz
Y3JpcHQtPmhhc0F0dHJpYnV0ZShkZWZlckF0dHIpKQotICAgICAgICAgICAgICAgIHJlcXVlc3RE
ZWZlcnJlZFNjcmlwdChzY3JpcHQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHJlcXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQoc2NyaXB0KTsKLSAgICAgICAgfSBlbHNlIGlm
ICghbV9kb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgJiYgbV9zY3JpcHROZXN0aW5n
TGV2ZWwgPT0gMSkgewotICAgICAgICAgICAgLy8gQmxvY2sgaW5saW5lIHNjcmlwdCBleGVjdXRp
b24gb24gc3R5bGVzaGVldCBsb2FkLCB1bmxlc3Mgd2UgYXJlIGluIGRvY3VtZW50LndyaXRlKCku
Ci0gICAgICAgICAgICAvLyBUaGUgbGF0dGVyIGNhc2UgY2FuIG9ubHkgaGFwcGVuIGlmIGEgc2Ny
aXB0IGJvdGggdHJpZ2dlcnMgYSBzdHlsZXNoZWV0IGxvYWQKLSAgICAgICAgICAgIC8vIGFuZCB3
cml0ZXMgYW4gaW5saW5lIHNjcmlwdC4gU2luY2Ugd3JpdGUgaXMgYmxvY2tpbmcgd2UgaGF2ZSB0
byBleGVjdXRlIHRoZQotICAgICAgICAgICAgLy8gd3JpdHRlbiBzY3JpcHQgaW1tZWRpYXRlbHks
IGlnbm9yaW5nIHRoZSBwZW5kaW5nIHNoZWV0cy4KLSAgICAgICAgICAgIG1fcGFyc2luZ0Jsb2Nr
aW5nU2NyaXB0LnNldEVsZW1lbnQoc2NyaXB0KTsKLSAgICAgICAgICAgIG1fcGFyc2luZ0Jsb2Nr
aW5nU2NyaXB0LnNldFN0YXJ0aW5nUG9zaXRpb24oc2NyaXB0U3RhcnRQb3NpdGlvbik7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNFeGVjdXRpbmdTY3JpcHQoKSk7Ci0g
ICAgICAgICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVu
dCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0U3Rh
cnRQb3NpdGlvbik7Ci0gICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KHNv
dXJjZUNvZGUpOwotICAgICAgICB9CisKKyAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxF
eGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nKCkpCisgICAgICAgICAgICByZXF1ZXN0
RGVmZXJyZWRTY3JpcHQoc2NyaXB0KTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+
cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkgeworICAgICAgICAgICAgaWYgKG1fc2NyaXB0TmVz
dGluZ0xldmVsID09IDEpIHsKKyAgICAgICAgICAgICAgICBtX3BhcnNpbmdCbG9ja2luZ1Njcmlw
dC5zZXRFbGVtZW50KHNjcmlwdCk7CisgICAgICAgICAgICAgICAgbV9wYXJzaW5nQmxvY2tpbmdT
Y3JpcHQuc2V0U3RhcnRpbmdQb3NpdGlvbihzY3JpcHRTdGFydFBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2Rl
KHNjcmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9k
b2N1bWVudCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgICAgIHNjcmlwdEVs
ZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgcmVxdWVzdFBhcnNpbmdCbG9ja2luZ1NjcmlwdChzY3JpcHQp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4
IGJhYmIxZTcyYjYzMjA1ZDE3YzM2YTAxMzI5MWUyNDE1MzdmODJlZTAuLjAwYjg1YTVkOGEwODgx
NjlkMTc2MTkwZmFlYzBjNTM0NWMzNTRjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0
RWxlbWVudC5jcHAKQEAgLTM1LDkgKzM1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogREVGSU5F
X0FOSU1BVEVEX1NUUklORyhTVkdTY3JpcHRFbGVtZW50LCBYTGlua05hbWVzOjpocmVmQXR0ciwg
SHJlZiwgaHJlZikKIERFRklORV9BTklNQVRFRF9CT09MRUFOKFNWR1NjcmlwdEVsZW1lbnQsIFNW
R05hbWVzOjpleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQXR0ciwgRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCwgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCkKIAotaW5saW5lIFNWR1NjcmlwdEVs
ZW1lbnQ6OlNWR1NjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvY3VtZW50LCBib29sIHdhc0luc2VydGVkQnlQYXJzZXIsIGJvb2wgd2FzQWxyZWFk
eVN0YXJ0ZWQpCitpbmxpbmUgU1ZHU2NyaXB0RWxlbWVudDo6U1ZHU2NyaXB0RWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgd2FzSW5z
ZXJ0ZWRCeVBhcnNlciwgYm9vbCBhbHJlYWR5U3RhcnRlZCkKICAgICA6IFNWR0VsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpCi0gICAgLCBTY3JpcHRFbGVtZW50KHRoaXMsIHdhc0luc2VydGVkQnlQ
YXJzZXIsIHdhc0FscmVhZHlTdGFydGVkKQorICAgICwgU2NyaXB0RWxlbWVudCh0aGlzLCB3YXNJ
bnNlcnRlZEJ5UGFyc2VyLCBhbHJlYWR5U3RhcnRlZCkKIHsKIH0KIApAQCAtNzIsNyArNzIsNyBA
QCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIC8vIEhhbmRsZSBkeW5hbWljIHVwZGF0ZXMgb2Yg
dGhlICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyBhdHRyaWJ1dGUuIE9ubHkgcG9zc2libGUg
Y2FzZTogY2hhbmdpbmcgZnJvbSAndHJ1ZScgdG8gJ2ZhbHNlJwogICAgICAgICAvLyBjYXVzZXMg
YW4gaW1tZWRpYXRlIGRpc3BhdGNoIG9mIHRoZSBTVkdMb2FkIGV2ZW50LiBJZiB0aGUgYXR0cmli
dXRlIHZhbHVlIHdhcyAnZmFsc2UnIGJlZm9yZSBpbnNlcnRpbmcgdGhlIHNjcmlwdCBlbGVtZW50
CiAgICAgICAgIC8vIGluIHRoZSBkb2N1bWVudCwgdGhlIFNWR0xvYWQgZXZlbnQgaGFzIGFscmVh
ZHkgYmVlbiBkaXNwYXRjaGVkLgotICAgICAgICBpZiAoIWV4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWRCYXNlVmFsdWUoKSAmJiAhaGF2ZUZpcmVkTG9hZEV2ZW50KCkgJiYgIXdhc0luc2VydGVkQnlQ
YXJzZXIoKSkgeworICAgICAgICBpZiAoIWV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRCYXNlVmFs
dWUoKSAmJiAhaGF2ZUZpcmVkTG9hZEV2ZW50KCkgJiYgIWlzUGFyc2VySW5zZXJ0ZWQoKSkgewog
ICAgICAgICAgICAgc2V0SGF2ZUZpcmVkTG9hZEV2ZW50KHRydWUpOwogICAgICAgICAgICAgQVNT
RVJUKGhhdmVMb2FkZWRSZXF1aXJlZFJlc291cmNlcygpKTsKIApAQCAtMTExLDkgKzExMSw5IEBA
IHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6ZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkK
IHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIFNW
R0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgU2NyaXB0RWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoc291cmNlQXR0cmlidXRlVmFsdWUoKSk7CisgICAgU2NyaXB0RWxl
bWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKIAotICAgIGlmICh3YXNJbnNlcnRlZEJ5UGFy
c2VyKCkpCisgICAgaWYgKGlzUGFyc2VySW5zZXJ0ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRXZlbnR1YWxseSBzZW5kIFNWR0xvYWQgZXZlbnQgbm93IGZvciB0aGUgZHluYW1pY2Fs
bHkgaW5zZXJ0ZWQgc2NyaXB0IGVsZW1lbnQKQEAgLTE0Miw3ICsxNDIsNiBAQCBib29sIFNWR1Nj
cmlwdEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKIAogdm9p
ZCBTVkdTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogewotICAgIFNjcmlw
dEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbihzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKTsK
ICAgICBTVkdFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKIAogICAgIC8vIEEgU1ZH
TG9hZCBldmVudCBoYXMgYmVlbiBmaXJlZCBieSBTVkdFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hp
bGRyZW4uCkBAIC0yMTIsMTEgKzIxMSwxNiBAQCBib29sIFNWR1NjcmlwdEVsZW1lbnQ6OmRlZmVy
QXR0cmlidXRlVmFsdWUoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBTVkdT
Y3JpcHRFbGVtZW50OjpoYXNTb3VyY2VBdHRyaWJ1dGUoKSBjb25zdAoreworICAgIHJldHVybiBo
YXNBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOworfQorCiB2b2lkIFNWR1NjcmlwdEVs
ZW1lbnQ6OmRpc3BhdGNoTG9hZEV2ZW50KCkKIHsKICAgICBib29sIGV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQgPSBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKCk7CiAKLSAgICBp
ZiAod2FzSW5zZXJ0ZWRCeVBhcnNlcigpKQorICAgIGlmIChpc1BhcnNlckluc2VydGVkKCkpCiAg
ICAgICAgIEFTU0VSVChleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkICE9IGhhdmVGaXJlZExvYWRF
dmVudCgpKTsKICAgICBlbHNlIGlmIChoYXZlRmlyZWRMb2FkRXZlbnQoKSkgewogICAgICAgICAv
LyBJZiB3ZSd2ZSBhbHJlYWR5IGZpcmVkIGFuIGxvYWQgZXZlbnQgYW5kIGV4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQgaXMgc2V0IHRvICd0cnVlJwpAQCAtMjQ3LDcgKzI1MSw3IEBAIHZvaWQgU1ZH
U2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hFcnJvckV2ZW50KCkKIAogUGFzc1JlZlB0cjxFbGVtZW50
PiBTVkdTY3JpcHRFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxk
cmVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1NjcmlwdEVsZW1lbnQo
dGFnUU5hbWUoKSwgZG9jdW1lbnQoKSwgZmFsc2UsIHdhc0FscmVhZHlTdGFydGVkKCkpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1NjcmlwdEVsZW1lbnQodGFnUU5hbWUoKSwgZG9jdW1l
bnQoKSwgZmFsc2UsIGFscmVhZHlTdGFydGVkKCkpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTY3JpcHRFbGVtZW50LmgKaW5kZXggZGFiZWM3OTZkZDVhYTAwNTMyYjg5OTY0YzA2YTM4ZWEz
YjI3YzA3ZC4uMDNjYzczM2JkM2M0ZmU2Y2JiMjI1ZGMyNzI5OWUzMzE1YjZiZjQ2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6Ci0gICAgU1ZHU2Ny
aXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIHdhc0luc2Vy
dGVkQnlQYXJzZXIsIGJvb2wgd2FzQWxyZWFkeVN0YXJ0ZWQpOworICAgIFNWR1NjcmlwdEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFy
c2VyLCBib29sIGFscmVhZHlTdGFydGVkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKTsKQEAgLTY4LDYgKzY4LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyBl
dmVudEF0dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzeW5jQXR0cmli
dXRlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZGVmZXJBdHRyaWJ1dGVWYWx1ZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNTb3VyY2VBdHRyaWJ1dGUoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaEVycm9yRXZlbnQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83003</attachid>
            <date>2011-02-18 13:17:48 -0800</date>
            <delta_ts>2011-02-18 18:14:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54676-20110218131747.patch</filename>
            <type>text/plain</type>
            <size>45645</size>
            <attacher name="James Simonsen">simonjam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0ODBjZDY3Mzc0NTI2OGFkNmViY2M1ZGFiNmE5MWFlMjRkZGZkYTFiLi44M2VhYjVi
Y2ZmNTAyNWM3MmIyMmUwYzBkZThmZGJmYTdjYTYxMmUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAK
KzIwMTEtMDItMTggIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgU2NyaXB0
RWxlbWVudCBtYXRjaCB0aGUgSFRNTDUgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ2NzYKKworICAgICAgICBUaGlzIGltcGxlbWVudHMgdGhl
ICJwcmVwYXJlIGEgc2NyaXB0IiBzZWN0aW9uIG9mIHRoZSBIVE1MNSBzcGVjIGluIFNjcmlwdEVs
ZW1lbnQ6OnByZXBhcmVTY3JpcHQoKS4KKyAgICAgICAgaHR0cDovL3d3dy53aGF0d2cub3JnL3Nw
ZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uvc2NyaXB0aW5nLTEuaHRtbCNwcmVw
YXJlLWEtc2NyaXB0CisKKyAgICAgICAgVGhlcmUgYXJlIGEgY291cGxlIG9mIHRoaW5ncyBtaXNz
aW5nIGZyb20gdGhlIHNwZWMgdGhhdCB3b3VsZCBiZSBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlc2Ug
d2lsbCBiZSBhZGRlZCBsYXRlci4KKyAgICAgICAgLSBTdXBwb3J0IGZvciBhc3luYz1mYWxzZQor
ICAgICAgICAtIEVtcHR5IHNyYyBhdHRyaWJ1dGUgc2hvdWxkIGRpc3BhdGNoIGFuIGVycm9yLgor
CisgICAgICAgIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBzbGlnaHQgYmVoYXZpb3JhbCBjaGFuZ2Vz
IHRvIG1hdGNoIHRoZSBzcGVjLgorICAgICAgICAtIEFuIFhIVE1MIHNjcmlwdCB0aGF0IGlzIGxv
YWRlZCB0aGVuIGNvcGllZCB3aWxsIG5vdCBmaXJlIGxvYWQgb24gdGhlIGNvcHkuCisgICAgICAg
IC0gSWYgb25iZWZvcmVsb2FkIG1vdmVzIHRoZSBzY3JpcHQgdG8gYSBkaWZmZXJlbnQgZG9jdW1l
bnQsIHRoZW4gaXQgd2lsbCBub3QgdHJ5IHRvIGV4ZWN1dGUgYWdhaW4gYmVjYXVzZSB3YXNBbHJl
YWR5U3RhcnRlZCBpcyB0cnVlLgorCisgICAgICAgIFRoZSBwYXJzZXJzIHdlcmUgdXBkYXRlZCB0
byB1c2UgdGhlIG5ldyBBUEksIGJ1dCBub3QgcmV3cml0dGVuIHRvIGxvb2sgbGlrZSB0aGUgc3Bl
Yy4gVGhhdCB3aWxsIGJlIGRvbmUgc2VwYXJhdGVseS4KKworICAgICAgICAqIGZhc3QvZG9tL0hU
TUxTY3JpcHRFbGVtZW50L21vdmUtaW4tYmVmb3JlbG9hZC5odG1sOiBPcmlnaW5hbCBhdXRob3Ig
c2F5cyB0ZXN0IHdhcyBvbmx5IG1lYW50IHRvIGNoZWNrIGZvciBjcmFzaGVzLiBCZWZvcmVsb2Fk
IGlzIG5vdCBzcGVjaWZpZWQgYnkgSFRNTDUuIFRlc3Qgd2FzIG1vZGlmaWVkIHRvIGFzc3VtZSBt
b3ZlZCBzY3JpcHQgd291bGRuJ3QgZXhlY3V0ZSBiZWNhdXNlIHdhc0FscmVhZHlTdGFydGVkIGlz
IHNldC4KKyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQtY2xvbmUtcmVydW4tc3JjLnhodG1sOiBB
Y2NvcmRpbmcgdG8gSFRNTDUgc3BlYywgbG9hZCBzaG91bGQgb25seSBmaXJlIGFmdGVyIGEgc2Ny
aXB0IGV4ZWN1dGVzLiBUZXN0IHdhcyBtb2RpZmllZCB0byBtYXRjaCB0aGF0LiBUaGUgb2xkIGJy
b2tlbiBiZWhhdmlvciB3YXMgdGhhdCBsb2FkIGZpcmVkIG9uIHRoZSBjbG9uZWQgZWxlbWVudCwg
ZXZlbiB0aG91Z2ggaXQgZGlkbid0IGV4ZWN1dGUuCisKIDIwMTEtMDItMTggIENzYWJhIE9zenRy
b2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZv
cmVsb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3Zl
LWluLWJlZm9yZWxvYWQuaHRtbAppbmRleCA3N2JlZWQwNmIzODJkZjU0NzUzZmYxYjY2MTlkYzRm
NzBmOTU5NTEzLi41YmNjMzRhZjczZDI5NGRiMjQwNDc1ZGRhZWE2NDdjNjU3MTU2YjZiIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9tb3ZlLWluLWJl
Zm9yZWxvYWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVu
dC9tb3ZlLWluLWJlZm9yZWxvYWQuaHRtbApAQCAtOCw3ICs4LDYgQEAKIDxpZnJhbWUgc3JjPSJy
ZXNvdXJjZXMvZnJhbWUuaHRtbCI+PC9pZnJhbWU+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgewotICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CiB9CiAKQEAgLTE4
LDE0ICsxNywxMyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICBzLmFkZEV2ZW50TGlzdGVuZXIoImJl
Zm9yZWxvYWQiLCBmdW5jdGlvbigpIHsKICAgICAgICAgdmFyIHMgPSBkb2N1bWVudC5ib2R5LnJl
bW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVsyXSk7CiAg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpZnJhbWUiKVswXS5jb250ZW50
RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKTsKKyAgICAgICAgdGVzdFBhc3NlZCgiIik7CiAg
ICAgfSwgZmFsc2UpOwogICAgIHMuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBmdW5jdGlvbigp
IHsKLSAgICAgICAgdGVzdEZhaWxlZCgiZXJyb3IgZXZlbnQgc2hvdWxkIG5vdCBmaXJlLiIpCisg
ICAgICAgIHRlc3RGYWlsZWQoImVycm9yIGV2ZW50IHNob3VsZCBub3QgZmlyZS4iKTsKICAgICB9
LCBmYWxzZSk7CiAgICAgcy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHRlc3RQYXNzZWQoIiIpOwotICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgICAgICB0ZXN0RmFpbGVkKCJzY3JpcHQgc2hvdWxkIG5vdCBiZSBsb2FkZWQiKTsKICAgICB9
LCBmYWxzZSk7CiAgICAgcy5zcmMgPSAiZXh0ZXJuYWwuanMiOwogICAgIGRvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQocyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQt
Y2xvbmUtcmVydW4tc3JjLnhodG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25l
LXJlcnVuLXNyYy54aHRtbAppbmRleCBlZGJlODI5YWM5YWYzOGQ0ZDMwNTMxNjUyZjFiYjI2ODM4
MTdmZWRkLi41YzRhYjVkMDRlZTQyMGU2NTZlYWMzMDhmZmE1Yjk3MDU4OTI2OTBmIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtY2xvbmUtcmVydW4tc3JjLnhodG1sCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWwKQEAg
LTExLDM2ICsxMSwzMCBAQCBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKIH0KLQotdmFyIGZpcnN0TG9hZCA9IHRydWU7Ci0KLWZ1bmN0
aW9uIGxvYWRlZCgpIHsKLSAgICBpZiAoZmlyc3RMb2FkKSB7Ci0gICAgICAgIGZpcnN0TG9hZCA9
IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gJ1BBU1MnOwot
ICAgIGlmIChpID09IDIpCi0gICAgICByZXN1bHQgPSAnRkFJTDogc2NyaXB0IHJhbiB0d2ljZSc7
Ci0gICAgZWxzZSBpZiAoaSA+IDIpCi0gICAgICByZXN1bHQgPSAnRkFJTDogc2NyaXB0IHJhbiAn
ICsgaSArICcgdGltZXMnOwotICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUocmVzdWx0KSk7Ci0KLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7Ci19Ci0KIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHk+CiA8cD5UaGlzIHRlc3Qg
cnVucyBhIHNjcmlwdCB0aGF0IGNsb25lcyBhbmQgaW5zZXJ0cyBpdHMgc2NyaXB0IGVsZW1lbnQu
IFRoZSBzY3JpcHQgc2hvdWxkIHJ1biBleGFjdGx5IG9uY2UgYW5kIHByaW50IFBBU1M6PC9wPgot
PGRpdj48c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMuanMiIG9u
bG9hZD0ibG9hZGVkKCkiPjwvc2NyaXB0PjwvZGl2PgorPGRpdj48c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMuanMiPjwvc2NyaXB0PjwvZGl2PgogPHNjcmlwdD4K
IAogdmFyIHNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVsx
XTsKIHZhciBkaXYgPSBzY3JpcHQucGFyZW50Tm9kZTsKIGRpdi5yZW1vdmVDaGlsZChzY3JpcHQp
OwotZGl2LmFwcGVuZENoaWxkKHNjcmlwdC5jbG9uZU5vZGUodHJ1ZSkpOwordmFyIGNsb25lID0g
c2NyaXB0LmNsb25lTm9kZSh0cnVlKTsKK2Nsb25lLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBm
dW5jdGlvbigpIHsgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgiRkFJTDogbG9hZCBldmVudCBmaXJlZCBvbiBjbG9uZSIpKTsgfSwgZmFsc2UpOworZGl2
LmFwcGVuZENoaWxkKGNsb25lKTsKKworc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICByZXN1
bHQgPSAnRkFJTDogc2NyaXB0IG5ldmVyIHJhbic7CisgICAgaWYgKGkgPT0gMSkKKyAgICAgIHJl
c3VsdCA9ICdQQVNTJzsKKyAgICBlbHNlIGlmIChpID4gMSkKKyAgICAgIHJlc3VsdCA9ICdGQUlM
OiBzY3JpcHQgcmFuICcgKyBpICsgJyB0aW1lcyc7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyZXN1bHQpKTsKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7CisgICAgfSwgMCk7CiAKIDwvc2NyaXB0PgogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU1
NDkyOTFkZWRiYjg2YmZiNzFiNGVkOWZlZTFkNDNkODZhNTU5ZjguLmE0YmMzNTBhNzJlNDQyMjJi
ZWI5YWRjNDU0M2ZlNDUxMTI3ZjZjN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAx
MS0wMi0xOCAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBTY3JpcHRFbGVt
ZW50IG1hdGNoIHRoZSBIVE1MNSBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NDY3NgorCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB0aGUgInBy
ZXBhcmUgYSBzY3JpcHQiIHNlY3Rpb24gb2YgdGhlIEhUTUw1IHNwZWMgaW4gU2NyaXB0RWxlbWVu
dDo6cHJlcGFyZVNjcmlwdCgpLgorICAgICAgICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI3ByZXBhcmUt
YS1zY3JpcHQKKworICAgICAgICBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIG1pc3Npbmcg
ZnJvbSB0aGUgc3BlYyB0aGF0IHdvdWxkIGJlIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGVzZSB3aWxs
IGJlIGFkZGVkIGxhdGVyLgorICAgICAgICAtIFN1cHBvcnQgZm9yIGFzeW5jPWZhbHNlCisgICAg
ICAgIC0gRW1wdHkgc3JjIGF0dHJpYnV0ZSBzaG91bGQgZGlzcGF0Y2ggYW4gZXJyb3IuCisKKyAg
ICAgICAgVGhlcmUgYXJlIGEgY291cGxlIG9mIHNsaWdodCBiZWhhdmlvcmFsIGNoYW5nZXMgdG8g
bWF0Y2ggdGhlIHNwZWMuCisgICAgICAgIC0gQW4gWEhUTUwgc2NyaXB0IHRoYXQgaXMgbG9hZGVk
IHRoZW4gY29waWVkIHdpbGwgbm90IGZpcmUgbG9hZCBvbiB0aGUgY29weS4KKyAgICAgICAgLSBJ
ZiBvbmJlZm9yZWxvYWQgbW92ZXMgdGhlIHNjcmlwdCB0byBhIGRpZmZlcmVudCBkb2N1bWVudCwg
dGhlbiBpdCB3aWxsIG5vdCB0cnkgdG8gZXhlY3V0ZSBhZ2FpbiBiZWNhdXNlIHdhc0FscmVhZHlT
dGFydGVkIGlzIHRydWUuCisKKyAgICAgICAgVGhlIHBhcnNlcnMgd2VyZSB1cGRhdGVkIHRvIHVz
ZSB0aGUgbmV3IEFQSSwgYnV0IG5vdCByZXdyaXR0ZW4gdG8gbG9vayBsaWtlIHRoZSBzcGVjLiBU
aGF0IHdpbGwgYmUgZG9uZSBzZXBhcmF0ZWx5LgorCisgICAgICAgIFRlc3Q6IEFsbCBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50LmNwcDogUmV3cml0dGVuIHRv
IG1hdGNoIEhUTUw1IHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpTY3Jp
cHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50
b0RvY3VtZW50KTogTG9naWMgbW92ZWQgdG8gcHJlcGFyZVNjcmlwdC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6IExvZ2ljIG1vdmVkIHRvIHByZXBh
cmVTY3JpcHQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpoYW5kbGVTb3VyY2VB
dHRyaWJ1dGUpOiBMb2dpYyBtb3ZlZCB0byBwcmVwYXJlU2NyaXB0LgorICAgICAgICAoV2ViQ29y
ZTo6aXNMZWdhY3lTdXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZ2UpOiBBZGRlZCB0byBzdXBwb3J0
IG9sZCBzY3JpcHQgdHlwZXMgaW4gbGF5b3V0IHRlc3RzLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RWxlbWVudDo6aXNTY3JpcHRUeXBlU3VwcG9ydGVkKTogRGVyaXZlZCBmcm9tIG9sZCBzaG91
bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50
OjpwcmVwYXJlU2NyaXB0KTogU1RBUlQgSEVSRS4gTWFpbiBjaGFuZ2UuIFNob3VsZCByZWFkIGV4
YWN0bHkgbGlrZSBIVE1MNSdzICJwcmVwYXJlIGEgc2NyaXB0LiIgTGVnYWN5IHR5cGUgc3VwcG9y
dCBuZWVkZWQgZm9yIGxheW91dCB0ZXN0cyB1c2luZyBYTUwgcGFyc2VyLgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RWxlbWVudDo6cmVxdWVzdFNjcmlwdCk6IE1vc3QgbG9naWMgbW92ZWQgdG8g
cHJlcGFyZVNjcmlwdC4gQ2hlY2sgc2VjdXJpdHkgc2V0dGluZ3MgaGVyZS4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQpOiBDb21iaW5lZCBldmFsdWF0ZVNj
cmlwdCgpIGFuZCBleGVjdXRlU2NyaXB0KCkgZnJvbSBvbGQgY29kZS4gTG9naWMgbW92ZWQgdG8g
cHJlcGFyZVNjcmlwdC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnN0b3BMb2Fk
UmVxdWVzdCk6IElnbm9yZSBwYXJzZXIgZXhlY3V0ZWQgc2NyaXB0cy4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGUpOiBSZW5hbWVkIGV4ZWN1dGVTY3JpcHQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojpub3RpZnlGaW5pc2hlZCk6IFdlIHNob3VsZCBv
bmx5IGxpc3RlbiBmb3Igbm9uLXBhcnNlciBleGVjdXRlZCBzY3JpcHRzLgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RWxlbWVudDo6aWdub3Jlc0xvYWRSZXF1ZXN0KTogTmV3IHZhcmlhYmxlIG5h
bWVzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5BcmVDb21tZW50
c09yRW1wdHlUZXh0KTogQWRkZWQgZm9yIEhUTUw1IGNvbXBsaWFuY2UuCisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRFbGVtZW50OjpzY3JpcHRDaGFyc2V0KTogVXNlIEhUTUw1IHZhcmlhYmxlcy4K
KyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RWxlbWVudDo6d2lsbEJlUGFyc2VyRXhlY3V0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdEVsZW1lbnQ6OnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojp3aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVk
UGFyc2luZyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6Y2FjaGVk
U2NyaXB0KTogcHJlcGFyZVNjcmlwdCgpIGlzIHRoZSBvbmx5IHBsYWNlIHRoYXQgc2hvdWxkIGxv
YWQgc2NyaXB0cy4gVGhpcyBhY2Nlc3NvciBsZXRzIHRoZSBwYXJzZXJzIGxpc3RlbiBmb3Igd2hl
biBsb2FkcyBmaW5pc2guCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojppc1BhcnNl
ckluc2VydGVkKTogQWRkZWQuCisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1s
Mi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5z
KTogU2hvdWxkIGJlaGF2ZSB0aGUgc2FtZS4gT2ZmbG9hZHMgbXVjaCBvZiBpdHMgd29yayB0byBw
cmVwYXJlU2NyaXB0KCkuCisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCk6IElk
ZW50aWNhbCB0byBsaWJ4bWwyIGNoYW5nZXMuCisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQpOiBObyBsb25nZXIgbmVlZHMgdXJsLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNjcmlwdEVsZW1lbnQ6Omhhc1NvdXJjZUF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0
bWwvSFRNTFNjcmlwdEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0
UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQ
ZW5kaW5nU2NyaXB0KTogUmVxdWVzdGluZyBzY3JpcHRzIG9mZmxvYWRlZCB0byBTY3JpcHRFbGVt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KTogU2hv
dWxkIGJlaGF2ZSB0aGUgc2FtZS4gT2ZmbG9hZHMgbXVjaCBvZiBpdHMgd29yayB0byBwcmVwYXJl
U2NyaXB0KCkuCisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6IE5ldyBTY3Jp
cHRFbGVtZW50IGZ1bmN0aW9uIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxl
bWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBObyBsb25nZXIgbmVlZHMgdXJsLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKTogU2Ny
aXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuIGlzIGdvbmUuCisgICAgICAgIChXZWJD
b3JlOjpTVkdTY3JpcHRFbGVtZW50OjpoYXNTb3VyY2VBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoTG9hZEV2ZW50KTogTmV3IFNj
cmlwdEVsZW1lbnQgZnVuY3Rpb24gbmFtZXMuCisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1l
bnQuaDoKKwogMjAxMS0wMi0xOCAgQW5kcmV5IEFkYWlraW4gIDxhYW5kcmV5QGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFbGVtZW50LmNwcAppbmRleCAxOTM5YTA4MGRmYzg4MzY5ZjAyZmZmNzZjZTY4M2JjNTZiYTM4
NTJiLi40ZmI4YmM2M2QwMTcxNzliMjYzMzkzYThjMTVlYzMxYmM4YzJiZGFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCkBAIC01MSwxMyArNTEsMTYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1TY3JpcHRFbGVtZW50OjpTY3JpcHRFbGVtZW50KEVsZW1lbnQqIGVsZW1l
bnQsIGJvb2wgd2FzSW5zZXJ0ZWRCeVBhcnNlciwgYm9vbCB3YXNBbHJlYWR5U3RhcnRlZCkKK1Nj
cmlwdEVsZW1lbnQ6OlNjcmlwdEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgYm9vbCBwYXJzZXJJ
bnNlcnRlZCwgYm9vbCBhbHJlYWR5U3RhcnRlZCkKICAgICA6IG1fZWxlbWVudChlbGVtZW50KQog
ICAgICwgbV9jYWNoZWRTY3JpcHQoMCkKLSAgICAsIG1fd2FzSW5zZXJ0ZWRCeVBhcnNlcih3YXNJ
bnNlcnRlZEJ5UGFyc2VyKQorICAgICwgbV9wYXJzZXJJbnNlcnRlZChwYXJzZXJJbnNlcnRlZCkK
ICAgICAsIG1faXNFeHRlcm5hbFNjcmlwdChmYWxzZSkKLSAgICAsIG1fd2FzQWxyZWFkeVN0YXJ0
ZWQod2FzQWxyZWFkeVN0YXJ0ZWQpCisgICAgLCBtX2FscmVhZHlTdGFydGVkKGFscmVhZHlTdGFy
dGVkKQogICAgICwgbV9oYXZlRmlyZWRMb2FkKGZhbHNlKQorICAgICwgbV93aWxsQmVQYXJzZXJF
eGVjdXRlZChmYWxzZSkKKyAgICAsIG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoZmFsc2UpCisg
ICAgLCBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nKGZhbHNlKQogewog
ICAgIEFTU0VSVChtX2VsZW1lbnQpOwogfQpAQCAtNjcsMjIgKzcwLDEwIEBAIFNjcmlwdEVsZW1l
bnQ6On5TY3JpcHRFbGVtZW50KCkKICAgICBzdG9wTG9hZFJlcXVlc3QoKTsKIH0KIAotdm9pZCBT
Y3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudChjb25zdCBTdHJpbmcmIHNvdXJjZVVy
bCkKK3ZvaWQgU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewotICAgIGlm
ICh3YXNJbnNlcnRlZEJ5UGFyc2VyKCkgJiYgIWlzQXN5bmNocm9ub3VzKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvI3NjcmlwdAotCi0gICAgaWYgKCFzb3VyY2VVcmwuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIHJlcXVlc3RTY3JpcHQoc291cmNlVXJsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIElmIHRoZXJlJ3MgYW4gZW1wdHkgc2NyaXB0IG5vZGUsIHdlIHNob3VsZG4ndCBldmFs
dWF0ZSB0aGUgc2NyaXB0Ci0gICAgLy8gYmVjYXVzZSBpZiBhIHNjcmlwdCBpcyBpbnNlcnRlZCBh
ZnRlcndhcmRzIChieSBzZXR0aW5nIHRleHQgb3IgaW5uZXJUZXh0KQotICAgIC8vIGl0IHNob3Vs
ZCBiZSBldmFsdWF0ZWQsIGFuZCBldmFsdWF0ZVNjcmlwdCBvbmx5IGV2YWx1YXRlcyBhIHNjcmlw
dCBvbmNlLgotICAgIGV2YWx1YXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0Q29udGVu
dCgpLCBlbGVtZW50KCktPmRvY3VtZW50KCktPnVybCgpKSk7IC8vIEZJWE1FOiBQcm92aWRlIGEg
cmVhbCBzdGFydGluZyBsaW5lIG51bWJlciBoZXJlLgorICAgIGlmICghbV9wYXJzZXJJbnNlcnRl
ZCkKKyAgICAgICAgcHJlcGFyZVNjcmlwdCgpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3Rh
cnRpbmcgbGluZSBudW1iZXIgaGVyZS4KIH0KIAogdm9pZCBTY3JpcHRFbGVtZW50OjpyZW1vdmVk
RnJvbURvY3VtZW50KCkKQEAgLTkzLDIyICs4NCw4IEBAIHZvaWQgU2NyaXB0RWxlbWVudDo6cmVt
b3ZlZEZyb21Eb2N1bWVudCgpCiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2Vk
KCkKIHsKLSAgICBpZiAod2FzSW5zZXJ0ZWRCeVBhcnNlcigpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBJZiBhIG5vZGUgaXMgaW5zZXJ0ZWQgYXMgYSBjaGlsZCBvZiB0aGUgc2NyaXB0IGVs
ZW1lbnQKLSAgICAvLyBhbmQgdGhlIHNjcmlwdCBlbGVtZW50IGhhcyBiZWVuIGluc2VydGVkIGlu
IHRoZSBkb2N1bWVudAotICAgIC8vIHdlIGV2YWx1YXRlIHRoZSBzY3JpcHQuCi0gICAgaWYgKG1f
ZWxlbWVudC0+aW5Eb2N1bWVudCgpICYmIG1fZWxlbWVudC0+Zmlyc3RDaGlsZCgpKQotICAgICAg
ICBldmFsdWF0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdENvbnRlbnQoKSwgbV9lbGVt
ZW50LT5kb2N1bWVudCgpLT51cmwoKSkpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRp
bmcgbGluZSBudW1iZXIgaGVyZQotfQotCi12b2lkIFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBhcnNp
bmdDaGlsZHJlbihjb25zdCBTdHJpbmcmIHNvdXJjZVVybCkKLXsKLSAgICAvLyBUaGUgcGFyc2Vy
IGp1c3QgcmVhY2hlZCA8L3NjcmlwdD4uIElmIHdlIGhhdmUgbm8gc3JjIGFuZCBubyB0ZXh0LAot
ICAgIC8vIGFsbG93IGR5bmFtaWMgbG9hZGluZyBsYXRlci4KLSAgICBpZiAoc291cmNlVXJsLmlz
RW1wdHkoKSAmJiBzY3JpcHRDb250ZW50KCkuaXNFbXB0eSgpKQotICAgICAgICBtX3dhc0luc2Vy
dGVkQnlQYXJzZXIgPSBmYWxzZTsKKyAgICBpZiAoIW1fcGFyc2VySW5zZXJ0ZWQgJiYgbV9lbGVt
ZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIHByZXBhcmVTY3JpcHQoKTsgLy8gRklYTUU6IFBy
b3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUuCiB9CiAKIHZvaWQgU2NyaXB0
RWxlbWVudDo6aGFuZGxlU291cmNlQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQpA
QCAtMTE2LDEyICs5MywxOSBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OmhhbmRsZVNvdXJjZUF0dHJp
YnV0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVybCkKICAgICBpZiAoaWdub3Jlc0xvYWRSZXF1ZXN0
KCkgfHwgc291cmNlVXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVxdWVz
dFNjcmlwdChzb3VyY2VVcmwpOworICAgIHByZXBhcmVTY3JpcHQoKTsgLy8gRklYTUU6IFByb3Zp
ZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUuCiB9CiAKIC8vIEhlbHBlciBmdW5j
dGlvbgotc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZ2UoY29uc3QgU3Ry
aW5nJiBsYW5ndWFnZSkKK3N0YXRpYyBib29sIGlzTGVnYWN5U3VwcG9ydGVkSmF2YVNjcmlwdExh
bmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpCiB7CisgICAgLy8gTW96aWxsYSAxLjggYWNj
ZXB0cyBqYXZhc2NyaXB0MS4wIC0gamF2YXNjcmlwdDEuNywgYnV0IFdpbklFIDcgYWNjZXB0cyBv
bmx5IGphdmFzY3JpcHQxLjEgLSBqYXZhc2NyaXB0MS4zLgorICAgIC8vIE1vemlsbGEgMS44IGFu
ZCBXaW5JRSA3IGJvdGggYWNjZXB0IGphdmFzY3JpcHQgYW5kIGxpdmVzY3JpcHQuCisgICAgLy8g
V2luSUUgNyBhY2NlcHRzIGVjbWFzY3JpcHQgYW5kIGpzY3JpcHQsIGJ1dCBNb3ppbGxhIDEuOCBk
b2Vzbid0LgorICAgIC8vIE5laXRoZXIgTW96aWxsYSAxLjggbm9yIFdpbklFIDcgYWNjZXB0IGxl
YWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICAvLyBXZSB3YW50IHRvIGFjY2VwdCBh
bGwgdGhlIHZhbHVlcyB0aGF0IGVpdGhlciBvZiB0aGVzZSBicm93c2VycyBhY2NlcHQsIGJ1dCBu
b3Qgb3RoZXIgdmFsdWVzLgorCisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgbm90IEhU
TUw1IGNvbXBsaWFudC4gVGhlc2UgYmVsb25nIGluIHRoZSBNSU1FIHJlZ2lzdHJ5IGFzICJ0ZXh0
L2phdmFzY3JpcHQ8dmVyc2lvbj4iIGVudHJpZXMuCiAgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmlu
ZywgQ2FzZUZvbGRpbmdIYXNoPiBMYW5ndWFnZVNldDsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KExhbmd1YWdlU2V0LCBsYW5ndWFnZXMsICgpKTsKICAgICBpZiAobGFuZ3VhZ2VzLmlzRW1wdHko
KSkgewpAQCAtMTM3LDU4ICsxMjEsMTM0IEBAIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkSmF2YVNj
cmlwdExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpCiAgICAgICAgIGxhbmd1YWdlcy5h
ZGQoImphdmFzY3JpcHQxLjciKTsKICAgICAgICAgbGFuZ3VhZ2VzLmFkZCgibGl2ZXNjcmlwdCIp
OwogICAgICAgICBsYW5ndWFnZXMuYWRkKCJlY21hc2NyaXB0Iik7Ci0gICAgICAgIGxhbmd1YWdl
cy5hZGQoImpzY3JpcHQiKTsgICAgICAgICAgICAgICAgCisgICAgICAgIGxhbmd1YWdlcy5hZGQo
ImpzY3JpcHQiKTsKICAgICB9CiAKICAgICByZXR1cm4gbGFuZ3VhZ2VzLmNvbnRhaW5zKGxhbmd1
YWdlKTsKIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50OjpyZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmlu
ZyYgc291cmNlVXJsKQorYm9vbCBTY3JpcHRFbGVtZW50Ojppc1NjcmlwdFR5cGVTdXBwb3J0ZWQo
TGVnYWN5VHlwZVN1cHBvcnQgc3VwcG9ydExlZ2FjeVR5cGVzKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBpc0xlZ2FjeVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZSgpIGlzIG5vdCB2YWxpZCBI
VE1MNS4gSXQgaXMgdXNlZCBoZXJlIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5
IHdpdGggZXhpc3RpbmcgbGF5b3V0IHRlc3RzLiBUaGUgc3BlY2lmaWMgdmlvbGF0aW9ucyBhcmU6
CisgICAgLy8gLSBBbGxvd2luZyB0eXBlPWphdmFzY3JpcHQuIHR5cGU9IHNob3VsZCBvbmx5IHN1
cHBvcnQgTUlNRSB0eXBlcywgc3VjaCBhcyB0ZXh0L2phdmFzY3JpcHQuCisgICAgLy8gLSBBbGxv
d2luZyBhIGRpZmZlcmVudCBzZXQgb2YgbGFuZ3VhZ2VzIGZvciBsYW5ndWFnZT0gYW5kIHR5cGU9
LiBsYW5ndWFnZT0gc3VwcG9ydHMgSmF2YXNjcmlwdCAxLjEgYW5kIDEuNC0xLjYsIGJ1dCB0eXBl
PSBkb2VzIG5vdC4KKworICAgIFN0cmluZyB0eXBlID0gdHlwZUF0dHJpYnV0ZVZhbHVlKCk7Cisg
ICAgU3RyaW5nIGxhbmd1YWdlID0gbGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1ZSgpOworICAgIGlmICh0
eXBlLmlzRW1wdHkoKSAmJiBsYW5ndWFnZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVl
OyAvLyBBc3N1bWUgdGV4dC9qYXZhc2NyaXB0LgorICAgIGlmICh0eXBlLmlzRW1wdHkoKSkgewor
ICAgICAgICB0eXBlID0gInRleHQvIiArIGxhbmd1YWdlLmxvd2VyKCk7CisgICAgICAgIGlmIChN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZSh0eXBlKSB8fCBp
c0xlZ2FjeVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZShsYW5ndWFnZSkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCkubG93
ZXIoKSkgfHwgKHN1cHBvcnRMZWdhY3lUeXBlcyA9PSBBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRy
aWJ1dGUgJiYgaXNMZWdhY3lTdXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZ2UodHlwZSkpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBodHRwOi8v
ZGV2LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjcHJlcGFyZS1hLXNjcmlwdAorYm9v
bCBTY3JpcHRFbGVtZW50OjpwcmVwYXJlU2NyaXB0KGNvbnN0IFRleHRQb3NpdGlvbjEmIHNjcmlw
dFN0YXJ0UG9zaXRpb24sIExlZ2FjeVR5cGVTdXBwb3J0IHN1cHBvcnRMZWdhY3lUeXBlcykKIHsK
LSAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSdkIGxpa2UgdG8gZXZhbHVhdGUgc2NyaXB0cyB3
aGljaCBhcmUgaW5zZXJ0ZWQgaW50byBhIAorICAgIGlmIChtX2FscmVhZHlTdGFydGVkKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHdhc1BhcnNlckluc2VydGVkOworICAgIGlm
IChtX3BhcnNlckluc2VydGVkKSB7CisgICAgICAgIHdhc1BhcnNlckluc2VydGVkID0gdHJ1ZTsK
KyAgICAgICAgbV9wYXJzZXJJbnNlcnRlZCA9IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICB3
YXNQYXJzZXJJbnNlcnRlZCA9IGZhbHNlOworCisgICAgLy8gRklYTUU6IEhUTUw1IHNwZWMgc2F5
cyB3ZSBzaG91bGQgc2V0IGZvcmNlQXN5bmMuCisKKyAgICAvLyBGSVhNRTogSFRNTDUgc3BlYyBz
YXlzIHdlIHNob3VsZCBjaGVjayB0aGF0IGFsbCBjaGlsZHJlbiBhcmUgZWl0aGVyIGNvbW1lbnRz
IG9yIGVtcHR5IHRleHQgbm9kZXMuCisgICAgaWYgKCFoYXNTb3VyY2VBdHRyaWJ1dGUoKSAmJiAh
bV9lbGVtZW50LT5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghbV9lbGVtZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghaXNTY3JpcHRUeXBlU3VwcG9ydGVkKHN1cHBvcnRMZWdhY3lUeXBlcykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICh3YXNQYXJzZXJJbnNlcnRlZCkKKyAgICAgICAgbV9w
YXJzZXJJbnNlcnRlZCA9IHRydWU7CisKKyAgICBtX2FscmVhZHlTdGFydGVkID0gdHJ1ZTsKKwor
ICAgIC8vIEZJWE1FOiBJZiBzY3JpcHQgaXMgcGFyc2VyIGluc2VydGVkLCB2ZXJpZnkgaXQncyBz
dGlsbCBpbiB0aGUgb3JpZ2luYWwgZG9jdW1lbnQuCisKKyAgICAvLyBGSVhNRTogRXZlbnR1YWxs
eSB3ZSdkIGxpa2UgdG8gZXZhbHVhdGUgc2NyaXB0cyB3aGljaCBhcmUgaW5zZXJ0ZWQgaW50byBh
CiAgICAgLy8gdmlld2xlc3MgZG9jdW1lbnQgYnV0IHRoaXMnbGwgZG8gZm9yIG5vdy4KICAgICAv
LyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcyNwogICAgIGlm
ICghbV9lbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9lbGVtZW50LT5kb2N1bWVudCgpLT5mcmFt
ZSgpLT5zY3JpcHQoKS0+Y2FuRXhlY3V0ZVNjcmlwdHMoQWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWlzU2NyaXB0Rm9yRXZlbnRTdXBwb3J0
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFjaGFyc2V0QXR0cmlidXRl
VmFsdWUoKS5pc0VtcHR5KCkpCisgICAgICAgIG1fY2hhcmFjdGVyRW5jb2RpbmcgPSBjaGFyc2V0
QXR0cmlidXRlVmFsdWUoKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2hhcmFjdGVyRW5jb2Rpbmcg
PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNoYXJzZXQoKTsKKworICAgIGlmIChoYXNTb3VyY2VB
dHRyaWJ1dGUoKSkKKyAgICAgICAgaWYgKCFyZXF1ZXN0U2NyaXB0KHNvdXJjZUF0dHJpYnV0ZVZh
bHVlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGhhc1NvdXJjZUF0
dHJpYnV0ZSgpICYmIGRlZmVyQXR0cmlidXRlVmFsdWUoKSAmJiBtX3BhcnNlckluc2VydGVkICYm
ICFhc3luY0F0dHJpYnV0ZVZhbHVlKCkpIHsKKyAgICAgICAgbV93aWxsRXhlY3V0ZVdoZW5Eb2N1
bWVudEZpbmlzaGVkUGFyc2luZyA9IHRydWU7CisgICAgICAgIG1fd2lsbEJlUGFyc2VyRXhlY3V0
ZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkgJiYgbV9wYXJz
ZXJJbnNlcnRlZCAmJiAhYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpKQorICAgICAgICBtX3dpbGxCZVBh
cnNlckV4ZWN1dGVkID0gdHJ1ZTsKKyAgICBlbHNlIGlmICghaGFzU291cmNlQXR0cmlidXRlKCkg
JiYgbV9wYXJzZXJJbnNlcnRlZCAmJiAhbV9lbGVtZW50LT5kb2N1bWVudCgpLT5oYXZlU3R5bGVz
aGVldHNMb2FkZWQoKSkgeworICAgICAgICBtX3dpbGxCZVBhcnNlckV4ZWN1dGVkID0gdHJ1ZTsK
KyAgICAgICAgbV9yZWFkeVRvQmVQYXJzZXJFeGVjdXRlZCA9IHRydWU7CisgICAgfSBlbHNlIGlm
IChoYXNTb3VyY2VBdHRyaWJ1dGUoKSkKKyAgICAgICAgbV9jYWNoZWRTY3JpcHQtPmFkZENsaWVu
dCh0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIGV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29k
ZShzY3JpcHRDb250ZW50KCksIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dXJsKCksIHNjcmlwdFN0
YXJ0UG9zaXRpb24pKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNjcmlwdEVsZW1l
bnQ6OnJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCit7CisgICAgaWYgKCFt
X2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5jYW5Mb2FkRXh0
ZXJuYWxTY3JpcHRGcm9tU3JjKHNvdXJjZVVybCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIFJlZlB0cjxEb2N1bWVudD4gb3JpZ2luYWxEb2N1bWVudCA9IG1fZWxlbWVudC0+ZG9jdW1l
bnQoKTsKICAgICBpZiAoIW1fZWxlbWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoc291cmNl
VXJsKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFt
X2VsZW1lbnQtPmluRG9jdW1lbnQoKSB8fCBtX2VsZW1lbnQtPmRvY3VtZW50KCkgIT0gb3JpZ2lu
YWxEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBBU1NFUlQoIW1fY2FjaGVkU2NyaXB0KTsKKyAgICAvLyBGSVhNRTogSWYgc291cmNlVXJsIGlz
IGVtcHR5LCB3ZSBzaG91bGQgZGlzcGF0Y2hFcnJvckV2ZW50KCkuCiAgICAgbV9jYWNoZWRTY3Jp
cHQgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVl
c3RTY3JpcHQoc291cmNlVXJsLCBzY3JpcHRDaGFyc2V0KCkpOwogICAgIG1faXNFeHRlcm5hbFNj
cmlwdCA9IHRydWU7CiAKLSAgICAvLyBtX3dhc0luc2VydGVkQnlQYXJzZXIgaXMgbmV2ZXIgcmVz
ZXQgLSBhbHdheXMgcmVzaWVkIGF0IHRoZSBpbml0aWFsIHZhbHVlIHNldCB3aGlsZSBwYXJzaW5n
LgotICAgIC8vIG1fd2FzQWxyZWFkeVN0YXJ0ZWQgaXMgbGVmdCB1bnRvdWNoZWQgYXMgd2VsbCB0
byBhdm9pZCBzY3JpcHQgcmVleGVjdXRpb24sIGlmIGEgPHNjcmlwdD4gZWxlbWVudAotICAgIC8v
IGlzIHJlbW92ZWQgYW5kIHJlYXBwZW5kZWQgdG8gdGhlIGRvY3VtZW50LgotICAgIG1faGF2ZUZp
cmVkTG9hZCA9IGZhbHNlOwotCi0gICAgaWYgKG1fY2FjaGVkU2NyaXB0KSB7Ci0gICAgICAgIG1f
Y2FjaGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKG1fY2FjaGVkU2NyaXB0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGRpc3Bh
dGNoRXJyb3JFdmVudCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTY3JpcHRFbGVt
ZW50OjpldmFsdWF0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQor
dm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUpCiB7Ci0gICAgaWYgKHdhc0FscmVhZHlTdGFydGVkKCkgfHwgc291cmNlQ29k
ZS5pc0VtcHR5KCkgfHwgIXNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKKyAgICBBU1NFUlQo
bV9hbHJlYWR5U3RhcnRlZCk7CisKKyAgICBpZiAoc291cmNlQ29kZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2VsZW1lbnQt
PmRvY3VtZW50KCk7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+c2NyaXB0KCktPmNh
bkV4ZWN1dGVTY3JpcHRzKEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBtX3dhc0FscmVhZHlTdGFydGVkID0gdHJ1ZTsKLQotICAgICAgICAvLyBo
dHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNzY3JpcHQK
LQogICAgICAgICB7CiAgICAgICAgICAgICBJZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNy
ZW1lbnRlciBpZ25vcmVEZXNjdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIobV9pc0V4dGVy
bmFsU2NyaXB0ID8gZG9jdW1lbnQuZ2V0KCkgOiAwKTsKICAgICAgICAgICAgIC8vIENyZWF0ZSBh
IHNjcmlwdCBmcm9tIHRoZSBzY3JpcHQgZWxlbWVudCBub2RlLCB1c2luZyB0aGUgc2NyaXB0CkBA
IC0yMDEsMzYgKzI2MSwyMyBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OmV2YWx1YXRlU2NyaXB0KGNv
bnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAgICAgfQogfQogCi12b2lkIFNjcmlw
dEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29k
ZSkKLXsKLSAgICBpZiAod2FzQWxyZWFkeVN0YXJ0ZWQoKSB8fCBzb3VyY2VDb2RlLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICBGcmFtZSogZnJh
bWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3dhc0FscmVhZHlTdGFydGVkID0gdHJ1ZTsKLQotICAgIGZyYW1lLT5zY3JpcHQo
KS0+ZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKLX0KLQogdm9pZCBTY3JpcHRFbGVtZW50Ojpz
dG9wTG9hZFJlcXVlc3QoKQogewogICAgIGlmIChtX2NhY2hlZFNjcmlwdCkgewotICAgICAgICBt
X2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAgICAgICBpZiAoIW1fd2lsbEJl
UGFyc2VyRXhlY3V0ZWQpCisgICAgICAgICAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50
KHRoaXMpOwogICAgICAgICBtX2NhY2hlZFNjcmlwdCA9IDA7CiAgICAgfQogfQogCiB2b2lkIFNj
cmlwdEVsZW1lbnQ6OmV4ZWN1dGUoQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCiB7CisgICAg
QVNTRVJUKCFtX3dpbGxCZVBhcnNlckV4ZWN1dGVkKTsKICAgICBBU1NFUlQoY2FjaGVkU2NyaXB0
KTsKICAgICBpZiAoY2FjaGVkU2NyaXB0LT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIGRpc3Bh
dGNoRXJyb3JFdmVudCgpOwogICAgIGVsc2UgewotICAgICAgICBldmFsdWF0ZVNjcmlwdChTY3Jp
cHRTb3VyY2VDb2RlKGNhY2hlZFNjcmlwdCkpOworICAgICAgICBleGVjdXRlU2NyaXB0KFNjcmlw
dFNvdXJjZUNvZGUoY2FjaGVkU2NyaXB0KSk7CiAgICAgICAgIGRpc3BhdGNoTG9hZEV2ZW50KCk7
CiAgICAgfQogICAgIGNhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwpAQCAtMjM4LDYg
KzI4NSw3IEBAIHZvaWQgU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZShDYWNoZWRTY3JpcHQqIGNhY2hl
ZFNjcmlwdCkKIAogdm9pZCBTY3JpcHRFbGVtZW50Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNv
dXJjZSogbykKIHsKKyAgICBBU1NFUlQoIW1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQpOwogICAgIEFT
U0VSVF9VTlVTRUQobywgbyA9PSBtX2NhY2hlZFNjcmlwdCk7CiAgICAgbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5hc3luY1NjcmlwdFJ1bm5lcigpLT5leGVjdXRlU2NyaXB0U29vbih0aGlzLCBtX2Nh
Y2hlZFNjcmlwdCk7CiAgICAgbV9jYWNoZWRTY3JpcHQgPSAwOwpAQCAtMjQ1LDU5ICsyOTMsMjUg
QEAgdm9pZCBTY3JpcHRFbGVtZW50Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogbykK
IAogYm9vbCBTY3JpcHRFbGVtZW50OjppZ25vcmVzTG9hZFJlcXVlc3QoKSBjb25zdAogewotICAg
IHJldHVybiB3YXNBbHJlYWR5U3RhcnRlZCgpIHx8IG1faXNFeHRlcm5hbFNjcmlwdCB8fCB3YXNJ
bnNlcnRlZEJ5UGFyc2VyKCkgfHwgIW1fZWxlbWVudC0+aW5Eb2N1bWVudCgpOworICAgIHJldHVy
biBtX2FscmVhZHlTdGFydGVkIHx8IG1faXNFeHRlcm5hbFNjcmlwdCB8fCBtX3BhcnNlckluc2Vy
dGVkIHx8ICFtX2VsZW1lbnQtPmluRG9jdW1lbnQoKTsKIH0KIAotYm9vbCBTY3JpcHRFbGVtZW50
OjpzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkgY29uc3QKK2Jvb2wgU2NyaXB0RWxlbWVudDo6
aXNTY3JpcHRGb3JFdmVudFN1cHBvcnRlZCgpIGNvbnN0CiB7Ci0gICAgLyoKLSAgICAgICAgIE1v
emlsbGEgMS44IGFjY2VwdHMgamF2YXNjcmlwdDEuMCAtIGphdmFzY3JpcHQxLjcsIGJ1dCBXaW5J
RSA3IGFjY2VwdHMgb25seSBqYXZhc2NyaXB0MS4xIC0gamF2YXNjcmlwdDEuMy4KLSAgICAgICAg
IE1vemlsbGEgMS44IGFuZCBXaW5JRSA3IGJvdGggYWNjZXB0IGphdmFzY3JpcHQgYW5kIGxpdmVz
Y3JpcHQuCi0gICAgICAgICBXaW5JRSA3IGFjY2VwdHMgZWNtYXNjcmlwdCBhbmQganNjcmlwdCwg
YnV0IE1vemlsbGEgMS44IGRvZXNuJ3QuCi0gICAgICAgICBOZWl0aGVyIE1vemlsbGEgMS44IG5v
ciBXaW5JRSA3IGFjY2VwdCBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gICAgICAg
ICBXZSB3YW50IHRvIGFjY2VwdCBhbGwgdGhlIHZhbHVlcyB0aGF0IGVpdGhlciBvZiB0aGVzZSBi
cm93c2VycyBhY2NlcHQsIGJ1dCBub3Qgb3RoZXIgdmFsdWVzLgotICAgICAKLSAgICAgICAgIEZJ
WE1FOiBJcyB0aGlzIEhUTUw1IGNvbXBsaWFudD8KLSAgICAgKi8KLSAgICBTdHJpbmcgdHlwZSA9
IHR5cGVBdHRyaWJ1dGVWYWx1ZSgpOwotICAgIGlmICghdHlwZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgaWYgKCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZSh0
eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IGxhbmd1YWdlQXR0cmli
dXRlVmFsdWUoKTsKLSAgICAgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkgJiYgIWlzU3VwcG9y
dGVkSmF2YVNjcmlwdExhbmd1YWdlKGxhbmd1YWdlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9ICAgIAotCi0gICAgLy8gTm8gdHlwZSBvciBsYW5ndWFnZSBpcyBzcGVjaWZpZWQs
IHNvIHdlIGFzc3VtZSB0aGUgc2NyaXB0IHRvIGJlIEphdmFTY3JpcHQuCi0KLSAgICBTdHJpbmcg
Zm9yQXR0cmlidXRlID0gZm9yQXR0cmlidXRlVmFsdWUoKTsKICAgICBTdHJpbmcgZXZlbnRBdHRy
aWJ1dGUgPSBldmVudEF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgaWYgKCFmb3JBdHRyaWJ1dGUuaXNF
bXB0eSgpICYmICFldmVudEF0dHJpYnV0ZS5pc0VtcHR5KCkpIHsKKyAgICBTdHJpbmcgZm9yQXR0
cmlidXRlID0gZm9yQXR0cmlidXRlVmFsdWUoKTsKKyAgICBpZiAoIWV2ZW50QXR0cmlidXRlLmlz
RW1wdHkoKSAmJiAhZm9yQXR0cmlidXRlLmlzRW1wdHkoKSkgewogICAgICAgICBmb3JBdHRyaWJ1
dGUgPSBmb3JBdHRyaWJ1dGUuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIGlmICghZXF1YWxJ
Z25vcmluZ0Nhc2UoZm9yQXR0cmlidXRlLCAid2luZG93IikpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAKKwogICAgICAgICBldmVudEF0dHJpYnV0ZSA9IGV2ZW50QXR0
cmlidXRlLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNl
KGV2ZW50QXR0cmlidXRlLCAib25sb2FkIikgJiYgIWVxdWFsSWdub3JpbmdDYXNlKGV2ZW50QXR0
cmlidXRlLCAib25sb2FkKCkiKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVN0cmluZyBTY3JpcHRFbGVtZW50OjpzY3JpcHRD
aGFyc2V0KCkgY29uc3QKLXsKLSAgICAvLyBGaXJzdCB3ZSB0cnkgdG8gZ2V0IGVuY29kaW5nIGZy
b20gY2hhcnNldCBhdHRyaWJ1dGUuCi0gICAgU3RyaW5nIGNoYXJzZXQgPSBjaGFyc2V0QXR0cmli
dXRlVmFsdWUoKS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgIC8vIElmIGNoYXJzZXQgaGFzIG5v
dCBiZWVuIGRlY2xhcmVkIGluIHNjcmlwdCB0YWcsIGZhbGwgYmFjayB0byBmcmFtZSBlbmNvZGlu
Zy4KLSAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpCi0gICAgICAgIGNoYXJzZXQgPSBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPmNoYXJzZXQoKTsKLQotICAgIHJldHVybiBjaGFyc2V0OwotfQotCiBT
dHJpbmcgU2NyaXB0RWxlbWVudDo6c2NyaXB0Q29udGVudCgpIGNvbnN0CiB7CiAgICAgVmVjdG9y
PFVDaGFyPiB2YWw7CkBAIC0zMjUsMjAgKzMzOSw2IEBAIFN0cmluZyBTY3JpcHRFbGVtZW50Ojpz
Y3JpcHRDb250ZW50KCkgY29uc3QKICAgICByZXR1cm4gU3RyaW5nOjphZG9wdCh2YWwpOwogfQog
Ci1ib29sIFNjcmlwdEVsZW1lbnQ6OmlzQXN5bmNocm9ub3VzKCkgY29uc3QKLXsKLSAgICAvLyBP
bmx5IGV4dGVybmFsIHNjcmlwdHMgbWF5IGJlIGFzeW5jaHJvbm91cy4KLSAgICAvLyBTZWU6IGh0
dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNhdHRyLXNjcmlwdC1hc3lu
YwotICAgIHJldHVybiAhc291cmNlQXR0cmlidXRlVmFsdWUoKS5pc0VtcHR5KCkgJiYgYXN5bmNB
dHRyaWJ1dGVWYWx1ZSgpOwotfQotCi1ib29sIFNjcmlwdEVsZW1lbnQ6OmlzRGVmZXJyZWQoKSBj
b25zdAotewotICAgIC8vIE9ubHkgZXh0ZXJuYWwgc2NyaXB0cyBtYXkgYmUgZGVmZXJyZWQgYW5k
IGFzeW5jIHRydW1wcyBkZWZlciB0byBhbGxvdyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4K
LSAgICAvLyBTZWU6IGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNh
dHRyLXNjcmlwdC1kZWZlcgotICAgIHJldHVybiAhc291cmNlQXR0cmlidXRlVmFsdWUoKS5pc0Vt
cHR5KCkgJiYgIWFzeW5jQXR0cmlidXRlVmFsdWUoKSAmJiBkZWZlckF0dHJpYnV0ZVZhbHVlKCk7
Ci19Ci0KIFNjcmlwdEVsZW1lbnQqIHRvU2NyaXB0RWxlbWVudChFbGVtZW50KiBlbGVtZW50KQog
ewogICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnNjcmlwdFRhZykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAppbmRl
eCA1MjUwZjNlMzM1NDk5MDkyOGY1NzU2MDFkMDEyMjNmNDBjNjUxNjA3Li5lNmJjOGQ0MGJmY2Jj
M2U1NmViOGQ2ODRiMTEyYTcyNzg5YzlhNjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50
LmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0UG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiw0NyArMzcsNDkg
QEAgY2xhc3MgU2NyaXB0RWxlbWVudCA6IHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewog
cHVibGljOgogICAgIFNjcmlwdEVsZW1lbnQoRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2Vy
LCBib29sIGlzRXZhbHVhdGVkKTsKICAgICB2aXJ0dWFsIH5TY3JpcHRFbGVtZW50KCk7Ci0gICAg
CisKICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CiAK
LSAgICAvLyBBIGNoYXJzZXQgZm9yIGxvYWRpbmcgdGhlIHNjcmlwdCAobWF5IGJlIG92ZXJyaWRk
ZW4gYnkgSFRUUCBoZWFkZXJzIG9yIGEgQk9NKS4KLSAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCgp
IGNvbnN0OworICAgIGVudW0gTGVnYWN5VHlwZVN1cHBvcnQgeyBEaXNhbGxvd0xlZ2FjeVR5cGVJ
blR5cGVBdHRyaWJ1dGUsIEFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSB9OworICAgIGJv
b2wgcHJlcGFyZVNjcmlwdChjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9u
ID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCksIExlZ2FjeVR5cGVTdXBwb3J0IHN1
cHBvcnRMZWdhY3lUeXBlcyA9IERpc2FsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSk7CiAK
KyAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyRW5j
b2Rpbmc7IH0KICAgICBTdHJpbmcgc2NyaXB0Q29udGVudCgpIGNvbnN0OwotICAgIGJvb2wgc2hv
dWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpIGNvbnN0OwogICAgIHZvaWQgZXhlY3V0ZVNjcmlwdChj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CiAgICAgdm9pZCBleGVjdXRlKENhY2hlZFNjcmlwdCop
OwogCiAgICAgLy8gWE1MIHBhcnNlciBjYWxscyB0aGVzZQotICAgIHZpcnR1YWwgU3RyaW5nIHNv
dXJjZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aExvYWRFdmVudCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hFcnJvckV2ZW50KCkg
PSAwOworICAgIGJvb2wgaXNTY3JpcHRUeXBlU3VwcG9ydGVkKExlZ2FjeVR5cGVTdXBwb3J0KSBj
b25zdDsKIAogICAgIGJvb2wgaGF2ZUZpcmVkTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9o
YXZlRmlyZWRMb2FkOyB9CisgICAgYm9vbCB3aWxsQmVQYXJzZXJFeGVjdXRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQ7IH0KKyAgICBib29sIHJlYWR5VG9CZVBhcnNl
ckV4ZWN1dGVkKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkeVRvQmVQYXJzZXJFeGVjdXRlZDsgfQor
ICAgIGJvb2wgd2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRGaW5pc2hlZFBhcnNpbmcoKSBjb25zdCB7
IHJldHVybiBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nOyB9CisgICAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBjYWNoZWRTY3JpcHQoKSB7IHJldHVy
biBtX2NhY2hlZFNjcmlwdDsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRIYXZlRmlyZWRM
b2FkRXZlbnQoYm9vbCBoYXZlRmlyZWRMb2FkKSB7IG1faGF2ZUZpcmVkTG9hZCA9IGhhdmVGaXJl
ZExvYWQ7IH0KLSAgICBib29sIHdhc0luc2VydGVkQnlQYXJzZXIoKSBjb25zdCB7IHJldHVybiBt
X3dhc0luc2VydGVkQnlQYXJzZXI7IH0KLSAgICBib29sIHdhc0FscmVhZHlTdGFydGVkKCkgY29u
c3QgeyByZXR1cm4gbV93YXNBbHJlYWR5U3RhcnRlZDsgfQorICAgIGJvb2wgaXNQYXJzZXJJbnNl
cnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VySW5zZXJ0ZWQ7IH0KKyAgICBib29sIGFscmVh
ZHlTdGFydGVkKCkgY29uc3QgeyByZXR1cm4gbV9hbHJlYWR5U3RhcnRlZDsgfQogCiAgICAgLy8g
SGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IG91ciBwYXJlbnQgY2xhc3Nlcy4KLSAgICB2b2lkIGlu
c2VydGVkSW50b0RvY3VtZW50KGNvbnN0IFN0cmluZyYgc291cmNlVXJsKTsKKyAgICB2b2lkIGlu
c2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAg
ICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKLSAgICB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJl
bihjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7CiAgICAgdm9pZCBoYW5kbGVTb3VyY2VBdHRyaWJ1
dGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOwogCiBwcml2YXRlOgogICAgIGJvb2wgaWdub3Jl
c0xvYWRSZXF1ZXN0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FzeW5jaHJvbm91cygpIGNvbnN0Owot
ICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0OworICAgIGJvb2wgaXNTY3JpcHRGb3JFdmVudFN1
cHBvcnRlZCgpIGNvbnN0OwogCi0gICAgdm9pZCByZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYg
c291cmNlVXJsKTsKLSAgICB2b2lkIGV2YWx1YXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNv
ZGUmKTsKKyAgICBib29sIHJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOwog
ICAgIHZvaWQgc3RvcExvYWRSZXF1ZXN0KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKIAorICAgIHZpcnR1YWwgU3RyaW5nIHNvdXJjZUF0dHJp
YnV0ZVZhbHVlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGNoYXJzZXRBdHRyaWJ1
dGVWYWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyB0eXBlQXR0cmlidXRlVmFs
dWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgbGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1
ZSgpIGNvbnN0ID0gMDsKQEAgLTg0LDEzICs4NywxOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
U3RyaW5nIGV2ZW50QXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29s
IGFzeW5jQXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlZmVy
QXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGhhc1NvdXJjZUF0
dHJpYnV0ZSgpIGNvbnN0ID0gMDsKIAogICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKICAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0OwotICAgIGJvb2wg
bV93YXNJbnNlcnRlZEJ5UGFyc2VyOwotICAgIGJvb2wgbV9pc0V4dGVybmFsU2NyaXB0OwotICAg
IGJvb2wgbV93YXNBbHJlYWR5U3RhcnRlZDsKLSAgICBib29sIG1faGF2ZUZpcmVkTG9hZDsKKyAg
ICBib29sIG1fcGFyc2VySW5zZXJ0ZWQgOiAxOworICAgIGJvb2wgbV9pc0V4dGVybmFsU2NyaXB0
IDogMTsKKyAgICBib29sIG1fYWxyZWFkeVN0YXJ0ZWQgOiAxOworICAgIGJvb2wgbV9oYXZlRmly
ZWRMb2FkIDogMTsKKyAgICBib29sIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQgOiAxOyAvLyBTYW1l
IGFzICJUaGUgcGFyc2VyIHdpbGwgaGFuZGxlIGV4ZWN1dGluZyB0aGUgc2NyaXB0LiIKKyAgICBi
b29sIG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQgOiAxOworICAgIGJvb2wgbV93aWxsRXhlY3V0
ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZyA6IDE7CisgICAgU3RyaW5nIG1fY2hhcmFjdGVy
RW5jb2Rpbmc7CisgICAgU3RyaW5nIG1fZmFsbGJhY2tDaGFyYWN0ZXJFbmNvZGluZzsKIH07CiAK
IFNjcmlwdEVsZW1lbnQqIHRvU2NyaXB0RWxlbWVudChFbGVtZW50Kik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCmluZGV4IDEwZDZlMGRlNTIz
YjE1ZDE4YjI3NTE4ZGQ3NDE5ZGIzNGY4YWUyZmMuLmUwNmY4YmQxMmRhZWEyZmI4OWNiZjE0YTI1
NmY2NGQ2Y2I3OGYyMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVu
dFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBh
cnNlckxpYnhtbDIuY3BwCkBAIC04ODAsMzUgKzg4MCwzMiBAQCB2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjplbmRFbGVtZW50TnMoKQogICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKICAgICBt
X3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwogCisgICAgYm9vbCBzdWNjZXNzZnVsbHlQcmVwYXJl
ZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQobV9zY3JpcHRTdGFydFBvc2l0aW9uLCBT
Y3JpcHRFbGVtZW50OjpBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOworICAgIGlmICgh
c3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKICNpZiBFTkFCTEUoWEhUTUxNUCkKLSAgICBpZiAoIXNj
cmlwdEVsZW1lbnQtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKLSAgICAgICAgZG9jdW1l
bnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKLSAgICBlbHNlCisg
ICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+aXNTY3JpcHRUeXBlU3VwcG9ydGVkKFNjcmlwdEVs
ZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpCisgICAgICAgICAgICBkb2N1
bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwogI2VuZGlmCi0g
ICAgewotICAgICAgICAvLyBGSVhNRTogU2NyaXB0IGV4ZWN1dGlvbiBzaG91bGQgYmUgc2hhcmVk
IHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbgorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1F
OiBTY3JpcHQgZXhlY3V0aW9uIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbgogICAgICAgICAvLyB0
aGUgbGlieG1sMiBhbmQgUXQgWE1MRG9jdW1lbnRQYXJzZXIgaW1wbGVtZW50YXRpb25zLgogCiAg
ICAgICAgIC8vIEphdmFTY3JpcHQgY2FuIGRldGFjaCB0aGUgcGFyc2VyLiAgTWFrZSBzdXJlIHRo
aXMgaXMgbm90IHJlbGVhc2VkCiAgICAgICAgIC8vIGJlZm9yZSB0aGUgZW5kIG9mIHRoaXMgbWV0
aG9kLgogICAgICAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7CiAK
LSAgICAgICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3JpcHRFbGVtZW50LT5zb3VyY2VBdHRyaWJ1
dGVWYWx1ZSgpOwotICAgICAgICBpZiAoIXNjcmlwdEhyZWYuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZQotICAgICAgICAgICAgU3RyaW5nIHNjcmlw
dENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Ci0gICAgICAgICAgICBp
ZiAoZWxlbWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoc2NyaXB0SHJlZikgJiYKLSAgICAg
ICAgICAgICAgICAobV9wZW5kaW5nU2NyaXB0ID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzY3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0KSkpIHsKLSAg
ICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAgICAgICAg
IG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotCi0gICAgICAgICAgICAgICAgLy8g
bV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUgMCBpZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkIGFu
ZCByZWYoKSBleGVjdXRlZCBpdAotICAgICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdTY3JpcHQp
Ci0gICAgICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwotICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKLSAgICAgICAgfSBlbHNlCisg
ICAgICAgIGlmIChzY3JpcHRFbGVtZW50LT5yZWFkeVRvQmVQYXJzZXJFeGVjdXRlZCgpKQogICAg
ICAgICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNj
cmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0
U3RhcnRQb3NpdGlvbikpOworICAgICAgICBlbHNlIGlmIChzY3JpcHRFbGVtZW50LT53aWxsQmVQ
YXJzZXJFeGVjdXRlZCgpKSB7CisgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQgPSBzY3JpcHRF
bGVtZW50LT5jYWNoZWRTY3JpcHQoKTsKKyAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IGVs
ZW1lbnQ7CisgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsKKwor
ICAgICAgICAgICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUgMCBpZiBzY3JpcHQgd2FzIGFs
cmVhZHkgbG9hZGVkIGFuZCBhZGRDbGllbnQoKSBleGVjdXRlZCBpdC4KKyAgICAgICAgICAgIGlm
IChtX3BlbmRpbmdTY3JpcHQpCisgICAgICAgICAgICAgICAgcGF1c2VQYXJzaW5nKCk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKIAogICAgICAgICAv
LyBKYXZhU2NyaXB0IG1heSBoYXZlIGRldGFjaGVkIHRoZSBwYXJzZXIKICAgICAgICAgaWYgKGlz
RGV0YWNoZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBh
cnNlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApp
bmRleCBkMGJmODhkYzcxYWY1MTRlNDUzNzAzMWQxOWEyNzM1NTZlZGUwNDIyLi5kNDE3YzlhMzI4
ZGU1MGMwNjZkN2Y3MDUzZGNhMTFlZDg4ZTI5YWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1hN
TERvY3VtZW50UGFyc2VyUXQuY3BwCkBAIC01ODgsMjggKzU4OCwyNSBAQCB2b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQoKQogICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0
KTsKICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwogCisgICAgYm9vbCBzdWNjZXNzZnVs
bHlQcmVwYXJlZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQobV9zY3JpcHRTdGFydFBv
c2l0aW9uLCBTY3JpcHRFbGVtZW50OjpBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOwor
ICAgIGlmICghc3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKICNpZiBFTkFCTEUoWEhUTUxNUCkKLSAg
ICBpZiAoIXNjcmlwdEVsZW1lbnQtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKLSAgICAg
ICAgZG9jdW1lbnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKLSAg
ICBlbHNlCisgICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+aXNTY3JpcHRUeXBlU3VwcG9ydGVk
KFNjcmlwdEVsZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpCisgICAgICAg
ICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwog
I2VuZGlmCi0gICAgewotICAgICAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1lbnQt
PnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgICAgIGlmICghc2NyaXB0SHJlZi5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBzcmMgYXR0cmlidXRlCi0gICAgICAgICAg
ICBTdHJpbmcgc2NyaXB0Q2hhcnNldCA9IHNjcmlwdEVsZW1lbnQtPnNjcmlwdENoYXJzZXQoKTsK
LSAgICAgICAgICAgIGlmIChlbGVtZW50LT5kaXNwYXRjaEJlZm9yZUxvYWRFdmVudChzY3JpcHRI
cmVmKSAmJgotICAgICAgICAgICAgICAgIChtX3BlbmRpbmdTY3JpcHQgPSBkb2N1bWVudCgpLT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNjcmlwdEhyZWYsIHNjcmlwdENo
YXJzZXQpKSkgewotICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IGVsZW1lbnQ7Ci0g
ICAgICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxy
ZWFkeSBsb2FkZWQgYW5kIHJlZigpIGV4ZWN1dGVkIGl0Ci0gICAgICAgICAgICAgICAgaWYgKG1f
cGVuZGluZ1NjcmlwdCkKLSAgICAgICAgICAgICAgICAgICAgcGF1c2VQYXJzaW5nKCk7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotICAg
ICAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+cmVh
ZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkKICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1
dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCks
IGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgZWxz
ZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSkgeworICAgICAgICAg
ICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7CisgICAg
ICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICAgICAgbV9wZW5kaW5n
U2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisKKyAgICAgICAgICAgIC8vIG1fcGVuZGluZ1Njcmlw
dCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkg
ZXhlY3V0ZWQgaXQuCisgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICAg
ICAgICAgIHBhdXNlUGFyc2luZygpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc2Ny
aXB0RWxlbWVudCA9IDA7CiAgICAgfQogICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwog
ICAgIHBvcEN1cnJlbnROb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTY3JpcHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1l
bnQuY3BwCmluZGV4IDYwM2IyYThlZWRiZTc1MmVmNzJkMWFlMzJhYWI5ZWQ4NWYwMzZjNjEuLjhl
NzA4ZDEzZTFiZjU0N2ZmNTYxZDM0Mjk3ZTUyYjE5ZjZmMjVmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCkBAIC0zNSw5ICszNSw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEhUTUxTY3Jp
cHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgd2FzSW5zZXJ0ZWRCeVBhcnNlciwgYm9vbCB3YXNB
bHJlYWR5U3RhcnRlZCkKK2lubGluZSBIVE1MU2NyaXB0RWxlbWVudDo6SFRNTFNjcmlwdEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29s
IHdhc0luc2VydGVkQnlQYXJzZXIsIGJvb2wgYWxyZWFkeVN0YXJ0ZWQpCiAgICAgOiBIVE1MRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIFNjcmlwdEVsZW1lbnQodGhpcywgd2FzSW5z
ZXJ0ZWRCeVBhcnNlciwgd2FzQWxyZWFkeVN0YXJ0ZWQpCisgICAgLCBTY3JpcHRFbGVtZW50KHRo
aXMsIHdhc0luc2VydGVkQnlQYXJzZXIsIGFscmVhZHlTdGFydGVkKQogewogICAgIEFTU0VSVCho
YXNUYWdOYW1lKHNjcmlwdFRhZykpOwogfQpAQCAtNzQsMTYgKzc0LDEwIEBAIHZvaWQgSFRNTFNj
cmlwdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKICAgICAg
ICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi12b2lkIEhU
TUxTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQotewotICAgIFNjcmlwdEVs
ZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbihzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKTsKLSAg
ICBIVE1MRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci19Ci0KIHZvaWQgSFRNTFNj
cmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9E
b2N1bWVudChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKTsKKyAgICBTY3JpcHRFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpOwogfQogCiB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpyZW1vdmVk
RnJvbURvY3VtZW50KCkKQEAgLTE2MCw2ICsxNTQsMTEgQEAgYm9vbCBIVE1MU2NyaXB0RWxlbWVu
dDo6ZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1
dGUoZGVmZXJBdHRyKTsKIH0KIAorYm9vbCBIVE1MU2NyaXB0RWxlbWVudDo6aGFzU291cmNlQXR0
cmlidXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShzcmNBdHRyKTsK
K30KKwogdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hMb2FkRXZlbnQoKQogewogICAg
IEFTU0VSVCghaGF2ZUZpcmVkTG9hZEV2ZW50KCkpOwpAQCAtMTc1LDcgKzE3NCw3IEBAIHZvaWQg
SFRNTFNjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCgpCiAKIFBhc3NSZWZQdHI8RWxl
bWVudD4gSFRNTFNjcmlwdEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5k
Q2hpbGRyZW4oKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFNjcmlwdEVs
ZW1lbnQodGFnUU5hbWUoKSwgZG9jdW1lbnQoKSwgZmFsc2UsIHdhc0FscmVhZHlTdGFydGVkKCkp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxTY3JpcHRFbGVtZW50KHRhZ1FOYW1lKCks
IGRvY3VtZW50KCksIGZhbHNlLCBhbHJlYWR5U3RhcnRlZCgpKSk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAppbmRleCAwOTc3M2M1ZmJjNjQ1MGVhODdhZTg0
Y2UxZDI1N2Q2ZTJhZTg1N2FmLi5lZmU2YTZhM2NmMjA2YWZhNTcwYmM1YjM2YTM2MjA3ZGU3MDZl
OTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCkBAIC0zOSw3ICsz
OSw3IEBAIHB1YmxpYzoKICAgICBLVVJMIHNyYygpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEhU
TUxTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgd2Fz
SW5zZXJ0ZWRCeVBhcnNlciwgYm9vbCB3YXNBbHJlYWR5U3RhcnRlZCk7CisgICAgSFRNTFNjcmlw
dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCB3YXNJbnNlcnRl
ZEJ5UGFyc2VyLCBib29sIGFscmVhZHlTdGFydGVkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKTsKQEAgLTQ3LDcgKzQ3LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJl
Zm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0
YSA9IDApOwogCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4m
KSBjb25zdDsKIApAQCAtNTksNiArNTgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5n
IGV2ZW50QXR0cmlidXRlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXN5bmNBdHRy
aWJ1dGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBkZWZlckF0dHJpYnV0ZVZhbHVl
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc1NvdXJjZUF0dHJpYnV0ZSgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTG9hZEV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRXJyb3JFdmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCBjOTk4NThkMGNmZTVmM2NlOGYyMDI5ZGM5ZWFmZmYx
OGRlZTlkYTgxLi45OWZmZjVlZjllNWUxYjQxZDExMzkxOGJmMjE4OTVjZjc1ZWE3OTNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcApAQCAt
MjYyLDE3ICsyNjIsOSBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3REZWZlcnJlZFNj
cmlwdChFbGVtZW50KiBlbGVtZW50KQogYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVu
ZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0LCBFbGVtZW50KiBzY3JpcHQp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKCFwZW5kaW5nU2NyaXB0LmVsZW1lbnQoKSk7Ci0gICAgY29u
c3QgQXRvbWljU3RyaW5nJiBzcmNWYWx1ZSA9IHNjcmlwdC0+Z2V0QXR0cmlidXRlKHNyY0F0dHIp
OwotICAgIC8vIEFsbG93IHRoZSBob3N0IHRvIGRpc2xsb3cgc2NyaXB0IGxvYWRzICh1c2luZyB0
aGUgWFNTQXVkaXRvciwgZXRjLikKLSAgICAvLyBGSVhNRTogdGhpcyBjaGVjayBzaG91bGQgYmUg
cGVyZm9ybWVkIG9uIHRoZSBmaW5hbCBVUkwgaW4gYSByZWRpcmVjdCBjaGFpbi4KLSAgICBpZiAo
IW1faG9zdC0+c2hvdWxkTG9hZEV4dGVybmFsU2NyaXB0RnJvbVNyYyhzcmNWYWx1ZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZXNvbHZlIHRoZSB1
cmwgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQuCi0gICAgaWYgKCFzY3JpcHQtPmRpc3BhdGNoQmVm
b3JlTG9hZEV2ZW50KHNyY1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHBlbmRp
bmdTY3JpcHQuc2V0RWxlbWVudChzY3JpcHQpOwogICAgIC8vIFRoaXMgc2hvdWxkIGNvcnJlY3Rs
eSByZXR1cm4gMCBmb3IgZW1wdHkgb3IgaW52YWxpZCBzcmNWYWx1ZXMuCi0gICAgQ2FjaGVkU2Ny
aXB0KiBjYWNoZWRTY3JpcHQgPSBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5y
ZXF1ZXN0U2NyaXB0KHNyY1ZhbHVlLCB0b1NjcmlwdEVsZW1lbnQoc2NyaXB0KS0+c2NyaXB0Q2hh
cnNldCgpKTsKKyAgICBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCA9IHRvU2NyaXB0RWxlbWVu
dChzY3JpcHQpLT5jYWNoZWRTY3JpcHQoKS5nZXQoKTsKICAgICBpZiAoIWNhY2hlZFNjcmlwdCkg
ewogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBEaXNwYXRjaCBlcnJvciBldmVudC4KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjkzLDI5ICsyODUsMjQgQEAgdm9pZCBIVE1MU2NyaXB0
UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0LCBjb25zdCBUZXh0UG9zaXRpb24xJiBz
Y3JpcHRTdGEKIAogICAgICAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3Jp
cHRFbGVtZW50KHNjcmlwdCk7CiAgICAgICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKLSAgICAg
ICAgaWYgKCFzY3JpcHRFbGVtZW50LT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCisKKyAg
ICAgICAgc2NyaXB0RWxlbWVudC0+cHJlcGFyZVNjcmlwdChzY3JpcHRTdGFydFBvc2l0aW9uKTsK
KworICAgICAgICBpZiAoIXNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoc2NyaXB0LT5oYXNBdHRy
aWJ1dGUoc3JjQXR0cikpIHsKLSAgICAgICAgICAgIGlmIChzY3JpcHQtPmhhc0F0dHJpYnV0ZShh
c3luY0F0dHIpKSAvLyBBc3luYyB0YWtlcyBwcmVjZW5kZW5jZSBvdmVyIGRlZmVyLgotICAgICAg
ICAgICAgICAgIHJldHVybjsgLy8gQXN5bmNocm9ub3VzIHNjcmlwdHMgaGFuZGxlIHRoZW1zZWx2
ZXMuCi0KLSAgICAgICAgICAgIGlmIChzY3JpcHQtPmhhc0F0dHJpYnV0ZShkZWZlckF0dHIpKQot
ICAgICAgICAgICAgICAgIHJlcXVlc3REZWZlcnJlZFNjcmlwdChzY3JpcHQpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQoc2Ny
aXB0KTsKLSAgICAgICAgfSBlbHNlIGlmICghbV9kb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9h
ZGVkKCkgJiYgbV9zY3JpcHROZXN0aW5nTGV2ZWwgPT0gMSkgewotICAgICAgICAgICAgLy8gQmxv
Y2sgaW5saW5lIHNjcmlwdCBleGVjdXRpb24gb24gc3R5bGVzaGVldCBsb2FkLCB1bmxlc3Mgd2Ug
YXJlIGluIGRvY3VtZW50LndyaXRlKCkuCi0gICAgICAgICAgICAvLyBUaGUgbGF0dGVyIGNhc2Ug
Y2FuIG9ubHkgaGFwcGVuIGlmIGEgc2NyaXB0IGJvdGggdHJpZ2dlcnMgYSBzdHlsZXNoZWV0IGxv
YWQKLSAgICAgICAgICAgIC8vIGFuZCB3cml0ZXMgYW4gaW5saW5lIHNjcmlwdC4gU2luY2Ugd3Jp
dGUgaXMgYmxvY2tpbmcgd2UgaGF2ZSB0byBleGVjdXRlIHRoZQotICAgICAgICAgICAgLy8gd3Jp
dHRlbiBzY3JpcHQgaW1tZWRpYXRlbHksIGlnbm9yaW5nIHRoZSBwZW5kaW5nIHNoZWV0cy4KLSAg
ICAgICAgICAgIG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0LnNldEVsZW1lbnQoc2NyaXB0KTsKLSAg
ICAgICAgICAgIG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0LnNldFN0YXJ0aW5nUG9zaXRpb24oc2Ny
aXB0U3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQo
aXNFeGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAgICAgICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJj
ZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlv
bihtX2RvY3VtZW50KSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7Ci0gICAgICAgICAgICBzY3JpcHRF
bGVtZW50LT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwotICAgICAgICB9CisKKyAgICAgICAg
aWYgKHNjcmlwdEVsZW1lbnQtPndpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5n
KCkpCisgICAgICAgICAgICByZXF1ZXN0RGVmZXJyZWRTY3JpcHQoc2NyaXB0KTsKKyAgICAgICAg
ZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkgeworICAg
ICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGluZ0xldmVsID09IDEpIHsKKyAgICAgICAgICAgICAg
ICBtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdC5zZXRFbGVtZW50KHNjcmlwdCk7CisgICAgICAgICAg
ICAgICAgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuc2V0U3RhcnRpbmdQb3NpdGlvbihzY3JpcHRT
dGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU2Ny
aXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRV
UkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwor
ICAgICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVxdWVzdFBhcnNp
bmdCbG9ja2luZ1NjcmlwdChzY3JpcHQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4IGJhYmIxZTcyYjYzMjA1ZDE3YzM2YTAxMzI5MWUyNDE1
MzdmODJlZTAuLjAwYjg1YTVkOGEwODgxNjlkMTc2MTkwZmFlYzBjNTM0NWMzNTRjMzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAKQEAgLTM1LDkgKzM1LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogREVGSU5FX0FOSU1BVEVEX1NUUklORyhTVkdTY3JpcHRFbGVtZW50
LCBYTGlua05hbWVzOjpocmVmQXR0ciwgSHJlZiwgaHJlZikKIERFRklORV9BTklNQVRFRF9CT09M
RUFOKFNWR1NjcmlwdEVsZW1lbnQsIFNWR05hbWVzOjpleHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
QXR0ciwgRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZCkKIAotaW5saW5lIFNWR1NjcmlwdEVsZW1lbnQ6OlNWR1NjcmlwdEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHdhc0luc2VydGVk
QnlQYXJzZXIsIGJvb2wgd2FzQWxyZWFkeVN0YXJ0ZWQpCitpbmxpbmUgU1ZHU2NyaXB0RWxlbWVu
dDo6U1ZHU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgd2FzSW5zZXJ0ZWRCeVBhcnNlciwgYm9vbCBhbHJlYWR5U3RhcnRl
ZCkKICAgICA6IFNWR0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBTY3JpcHRFbGVt
ZW50KHRoaXMsIHdhc0luc2VydGVkQnlQYXJzZXIsIHdhc0FscmVhZHlTdGFydGVkKQorICAgICwg
U2NyaXB0RWxlbWVudCh0aGlzLCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCBhbHJlYWR5U3RhcnRlZCkK
IHsKIH0KIApAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIC8vIEhh
bmRsZSBkeW5hbWljIHVwZGF0ZXMgb2YgdGhlICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyBh
dHRyaWJ1dGUuIE9ubHkgcG9zc2libGUgY2FzZTogY2hhbmdpbmcgZnJvbSAndHJ1ZScgdG8gJ2Zh
bHNlJwogICAgICAgICAvLyBjYXVzZXMgYW4gaW1tZWRpYXRlIGRpc3BhdGNoIG9mIHRoZSBTVkdM
b2FkIGV2ZW50LiBJZiB0aGUgYXR0cmlidXRlIHZhbHVlIHdhcyAnZmFsc2UnIGJlZm9yZSBpbnNl
cnRpbmcgdGhlIHNjcmlwdCBlbGVtZW50CiAgICAgICAgIC8vIGluIHRoZSBkb2N1bWVudCwgdGhl
IFNWR0xvYWQgZXZlbnQgaGFzIGFscmVhZHkgYmVlbiBkaXNwYXRjaGVkLgotICAgICAgICBpZiAo
IWV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRCYXNlVmFsdWUoKSAmJiAhaGF2ZUZpcmVkTG9hZEV2
ZW50KCkgJiYgIXdhc0luc2VydGVkQnlQYXJzZXIoKSkgeworICAgICAgICBpZiAoIWV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWRCYXNlVmFsdWUoKSAmJiAhaGF2ZUZpcmVkTG9hZEV2ZW50KCkgJiYg
IWlzUGFyc2VySW5zZXJ0ZWQoKSkgewogICAgICAgICAgICAgc2V0SGF2ZUZpcmVkTG9hZEV2ZW50
KHRydWUpOwogICAgICAgICAgICAgQVNTRVJUKGhhdmVMb2FkZWRSZXF1aXJlZFJlc291cmNlcygp
KTsKIApAQCAtMTExLDkgKzExMSw5IEBAIHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6ZmlsbEF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKIHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKQogewogICAgIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7
Ci0gICAgU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoc291cmNlQXR0cmlidXRl
VmFsdWUoKSk7CisgICAgU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKIAot
ICAgIGlmICh3YXNJbnNlcnRlZEJ5UGFyc2VyKCkpCisgICAgaWYgKGlzUGFyc2VySW5zZXJ0ZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRXZlbnR1YWxseSBzZW5kIFNWR0xvYWQgZXZl
bnQgbm93IGZvciB0aGUgZHluYW1pY2FsbHkgaW5zZXJ0ZWQgc2NyaXB0IGVsZW1lbnQKQEAgLTE0
Miw3ICsxNDIsNiBAQCBib29sIFNWR1NjcmlwdEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cikgY29uc3QKIAogdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5n
Q2hpbGRyZW4oKQogewotICAgIFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbihz
b3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKTsKICAgICBTVkdFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hp
bGRyZW4oKTsKIAogICAgIC8vIEEgU1ZHTG9hZCBldmVudCBoYXMgYmVlbiBmaXJlZCBieSBTVkdF
bGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4uCkBAIC0yMTIsMTEgKzIxMSwxNiBAQCBib29s
IFNWR1NjcmlwdEVsZW1lbnQ6OmRlZmVyQXR0cmlidXRlVmFsdWUoKSBjb25zdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorYm9vbCBTVkdTY3JpcHRFbGVtZW50OjpoYXNTb3VyY2VBdHRyaWJ1dGUo
KSBjb25zdAoreworICAgIHJldHVybiBoYXNBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIp
OworfQorCiB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoTG9hZEV2ZW50KCkKIHsKICAg
ICBib29sIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQgPSBleHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkQmFzZVZhbHVlKCk7CiAKLSAgICBpZiAod2FzSW5zZXJ0ZWRCeVBhcnNlcigpKQorICAgIGlm
IChpc1BhcnNlckluc2VydGVkKCkpCiAgICAgICAgIEFTU0VSVChleHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkICE9IGhhdmVGaXJlZExvYWRFdmVudCgpKTsKICAgICBlbHNlIGlmIChoYXZlRmlyZWRM
b2FkRXZlbnQoKSkgewogICAgICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZpcmVkIGFuIGxvYWQg
ZXZlbnQgYW5kIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQgaXMgc2V0IHRvICd0cnVlJwpAQCAt
MjQ3LDcgKzI1MSw3IEBAIHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hFcnJvckV2ZW50
KCkKIAogUGFzc1JlZlB0cjxFbGVtZW50PiBTVkdTY3JpcHRFbGVtZW50OjpjbG9uZUVsZW1lbnRX
aXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR1NjcmlwdEVsZW1lbnQodGFnUU5hbWUoKSwgZG9jdW1lbnQoKSwgZmFsc2UsIHdh
c0FscmVhZHlTdGFydGVkKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1NjcmlwdEVs
ZW1lbnQodGFnUU5hbWUoKSwgZG9jdW1lbnQoKSwgZmFsc2UsIGFscmVhZHlTdGFydGVkKCkpKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgKaW5kZXggZGFiZWM3OTZk
ZDVhYTAwNTMyYjg5OTY0YzA2YTM4ZWEzYjI3YzA3ZC4uMDNjYzczM2JkM2M0ZmU2Y2JiMjI1ZGMy
NzI5OWUzMzE1YjZiZjQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Njcmlw
dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCkBA
IC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJik7
CiAKIHByaXZhdGU6Ci0gICAgU1ZHU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqLCBib29sIHdhc0luc2VydGVkQnlQYXJzZXIsIGJvb2wgd2FzQWxyZWFkeVN0YXJ0
ZWQpOworICAgIFNWR1NjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
KiwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCBib29sIGFscmVhZHlTdGFydGVkKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0
dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKQEAgLTY4LDYgKzY4LDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIFN0cmluZyBldmVudEF0dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGFzeW5jQXR0cmlidXRlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNTb3Vy
Y2VBdHRyaWJ1dGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaExvYWRFdmVu
dCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEVycm9yRXZlbnQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83043</attachid>
            <date>2011-02-18 18:14:54 -0800</date>
            <delta_ts>2011-02-19 01:39:22 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-54676-20110218181453.patch</filename>
            <type>text/plain</type>
            <size>44754</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5MDYxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTEtMDItMTggIEphbWVzIFNp
bW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFk
YW0gQmFydGguCisKKyAgICAgICAgTWFrZSBTY3JpcHRFbGVtZW50IG1hdGNoIHRoZSBIVE1MNSBz
cGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY3
NgorCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB0aGUgInByZXBhcmUgYSBzY3JpcHQiIHNlY3Rp
b24gb2YgdGhlIEhUTUw1IHNwZWMgaW4gU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdCgpLgor
ICAgICAgICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3Jr
L211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI3ByZXBhcmUtYS1zY3JpcHQKKworICAgICAgICBU
aGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIG1pc3NpbmcgZnJvbSB0aGUgc3BlYyB0aGF0IHdv
dWxkIGJlIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGVzZSB3aWxsIGJlIGFkZGVkIGxhdGVyLgorICAg
ICAgICAtIFN1cHBvcnQgZm9yIGFzeW5jPWZhbHNlCisgICAgICAgIC0gRW1wdHkgc3JjIGF0dHJp
YnV0ZSBzaG91bGQgZGlzcGF0Y2ggYW4gZXJyb3IuCisKKyAgICAgICAgVGhlcmUgYXJlIGEgY291
cGxlIG9mIHNsaWdodCBiZWhhdmlvcmFsIGNoYW5nZXMgdG8gbWF0Y2ggdGhlIHNwZWMuCisgICAg
ICAgIC0gQW4gWEhUTUwgc2NyaXB0IHRoYXQgaXMgbG9hZGVkIHRoZW4gY29waWVkIHdpbGwgbm90
IGZpcmUgbG9hZCBvbiB0aGUgY29weS4KKyAgICAgICAgLSBJZiBvbmJlZm9yZWxvYWQgbW92ZXMg
dGhlIHNjcmlwdCB0byBhIGRpZmZlcmVudCBkb2N1bWVudCwgdGhlbiBpdCB3aWxsIG5vdCB0cnkg
dG8gZXhlY3V0ZSBhZ2FpbiBiZWNhdXNlIHdhc0FscmVhZHlTdGFydGVkIGlzIHRydWUuCisKKyAg
ICAgICAgVGhlIHBhcnNlcnMgd2VyZSB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IEFQSSwgYnV0IG5v
dCByZXdyaXR0ZW4gdG8gbG9vayBsaWtlIHRoZSBzcGVjLiBUaGF0IHdpbGwgYmUgZG9uZSBzZXBh
cmF0ZWx5LgorCisgICAgICAgIFRlc3Q6IEFsbCBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAq
IGRvbS9TY3JpcHRFbGVtZW50LmNwcDogUmV3cml0dGVuIHRvIG1hdGNoIEhUTUw1IHNwZWMuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpTY3JpcHRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KTogTG9naWMgbW92
ZWQgdG8gcHJlcGFyZVNjcmlwdC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmNo
aWxkcmVuQ2hhbmdlZCk6IExvZ2ljIG1vdmVkIHRvIHByZXBhcmVTY3JpcHQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpoYW5kbGVTb3VyY2VBdHRyaWJ1dGUpOiBMb2dpYyBtb3Zl
ZCB0byBwcmVwYXJlU2NyaXB0LgorICAgICAgICAoV2ViQ29yZTo6aXNMZWdhY3lTdXBwb3J0ZWRK
YXZhU2NyaXB0TGFuZ3VhZ2UpOiBBZGRlZCB0byBzdXBwb3J0IG9sZCBzY3JpcHQgdHlwZXMgaW4g
bGF5b3V0IHRlc3RzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aXNTY3JpcHRU
eXBlU3VwcG9ydGVkKTogRGVyaXZlZCBmcm9tIG9sZCBzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0
KCkuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpwcmVwYXJlU2NyaXB0KTogU1RB
UlQgSEVSRS4gTWFpbiBjaGFuZ2UuIFNob3VsZCByZWFkIGV4YWN0bHkgbGlrZSBIVE1MNSdzICJw
cmVwYXJlIGEgc2NyaXB0LiIgTGVnYWN5IHR5cGUgc3VwcG9ydCBuZWVkZWQgZm9yIGxheW91dCB0
ZXN0cyB1c2luZyBYTUwgcGFyc2VyLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6
cmVxdWVzdFNjcmlwdCk6IE1vc3QgbG9naWMgbW92ZWQgdG8gcHJlcGFyZVNjcmlwdC4gQ2hlY2sg
c2VjdXJpdHkgc2V0dGluZ3MgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6
OmV4ZWN1dGVTY3JpcHQpOiBDb21iaW5lZCBldmFsdWF0ZVNjcmlwdCgpIGFuZCBleGVjdXRlU2Ny
aXB0KCkgZnJvbSBvbGQgY29kZS4gTG9naWMgbW92ZWQgdG8gcHJlcGFyZVNjcmlwdC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnN0b3BMb2FkUmVxdWVzdCk6IElnbm9yZSBwYXJz
ZXIgZXhlY3V0ZWQgc2NyaXB0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmV4
ZWN1dGUpOiBSZW5hbWVkIGV4ZWN1dGVTY3JpcHQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRF
bGVtZW50Ojpub3RpZnlGaW5pc2hlZCk6IFdlIHNob3VsZCBvbmx5IGxpc3RlbiBmb3Igbm9uLXBh
cnNlciBleGVjdXRlZCBzY3JpcHRzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6
aWdub3Jlc0xvYWRSZXF1ZXN0KTogTmV3IHZhcmlhYmxlIG5hbWVzLgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5BcmVDb21tZW50c09yRW1wdHlUZXh0KTogQWRkZWQg
Zm9yIEhUTUw1IGNvbXBsaWFuY2UuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojpz
Y3JpcHRDaGFyc2V0KTogVXNlIEhUTUw1IHZhcmlhYmxlcy4KKyAgICAgICAgKiBkb20vU2NyaXB0
RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6d2lsbEJlUGFyc2Vy
RXhlY3V0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnJlYWR5
VG9CZVBhcnNlckV4ZWN1dGVkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVt
ZW50Ojp3aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZyk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6Y2FjaGVkU2NyaXB0KTogcHJlcGFyZVNjcmlw
dCgpIGlzIHRoZSBvbmx5IHBsYWNlIHRoYXQgc2hvdWxkIGxvYWQgc2NyaXB0cy4gVGhpcyBhY2Nl
c3NvciBsZXRzIHRoZSBwYXJzZXJzIGxpc3RlbiBmb3Igd2hlbiBsb2FkcyBmaW5pc2guCisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojppc1BhcnNlckluc2VydGVkKTogQWRkZWQuCisg
ICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKTogU2hvdWxkIGJlaGF2ZSB0aGUg
c2FtZS4gT2ZmbG9hZHMgbXVjaCBvZiBpdHMgd29yayB0byBwcmVwYXJlU2NyaXB0KCkuCisgICAg
ICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCk6IElkZW50aWNhbCB0byBsaWJ4bWwyIGNo
YW5nZXMuCisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBObyBsb25n
ZXIgbmVlZHMgdXJsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6Omhhc1Nv
dXJjZUF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KTogUmVxdWVz
dGluZyBzY3JpcHRzIG9mZmxvYWRlZCB0byBTY3JpcHRFbGVtZW50LgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KTogU2hvdWxkIGJlaGF2ZSB0aGUgc2FtZS4g
T2ZmbG9hZHMgbXVjaCBvZiBpdHMgd29yayB0byBwcmVwYXJlU2NyaXB0KCkuCisgICAgICAgICog
c3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6IE5ldyBTY3JpcHRFbGVtZW50IGZ1bmN0aW9uIG5h
bWVzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9j
dW1lbnQpOiBObyBsb25nZXIgbmVlZHMgdXJsLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0
RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKTogU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFy
c2luZ0NoaWxkcmVuIGlzIGdvbmUuCisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50
OjpoYXNTb3VyY2VBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Njcmlw
dEVsZW1lbnQ6OmRpc3BhdGNoTG9hZEV2ZW50KTogTmV3IFNjcmlwdEVsZW1lbnQgZnVuY3Rpb24g
bmFtZXMuCisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaDoKKwogMjAxMS0wMi0xOCAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCB0eXBv
IGluIGJvdW5kYXJ5IHRlc3QgaW4gQVNTRVJUKCkgLSB0ZXN0IGlzIGZvciBhbiBpbmNsdXNpdmUg
cmFuZ2UsIG5vdCBleGNsdXNpdmUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA3OTA2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTMgKzUxLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotU2NyaXB0RWxlbWVudDo6U2NyaXB0RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBi
b29sIHdhc0luc2VydGVkQnlQYXJzZXIsIGJvb2wgd2FzQWxyZWFkeVN0YXJ0ZWQpCitTY3JpcHRF
bGVtZW50OjpTY3JpcHRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgcGFyc2VySW5zZXJ0
ZWQsIGJvb2wgYWxyZWFkeVN0YXJ0ZWQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAs
IG1fY2FjaGVkU2NyaXB0KDApCi0gICAgLCBtX3dhc0luc2VydGVkQnlQYXJzZXIod2FzSW5zZXJ0
ZWRCeVBhcnNlcikKKyAgICAsIG1fcGFyc2VySW5zZXJ0ZWQocGFyc2VySW5zZXJ0ZWQpCiAgICAg
LCBtX2lzRXh0ZXJuYWxTY3JpcHQoZmFsc2UpCi0gICAgLCBtX3dhc0FscmVhZHlTdGFydGVkKHdh
c0FscmVhZHlTdGFydGVkKQorICAgICwgbV9hbHJlYWR5U3RhcnRlZChhbHJlYWR5U3RhcnRlZCkK
ICAgICAsIG1faGF2ZUZpcmVkTG9hZChmYWxzZSkKKyAgICAsIG1fd2lsbEJlUGFyc2VyRXhlY3V0
ZWQoZmFsc2UpCisgICAgLCBtX3JlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKGZhbHNlKQorICAgICwg
bV93aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlzaGVkUGFyc2luZyhmYWxzZSkKIHsKICAgICBB
U1NFUlQobV9lbGVtZW50KTsKIH0KQEAgLTY3LDIyICs3MCwxMCBAQCBTY3JpcHRFbGVtZW50Ojp+
U2NyaXB0RWxlbWVudCgpCiAgICAgc3RvcExvYWRSZXF1ZXN0KCk7CiB9CiAKLXZvaWQgU2NyaXB0
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCit2
b2lkIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKLSAgICBpZiAod2Fz
SW5zZXJ0ZWRCeVBhcnNlcigpICYmICFpc0FzeW5jaHJvbm91cygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13
b3JrLyNzY3JpcHQKLQotICAgIGlmICghc291cmNlVXJsLmlzRW1wdHkoKSkgewotICAgICAgICBy
ZXF1ZXN0U2NyaXB0KHNvdXJjZVVybCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBJZiB0aGVyZSdzIGFuIGVtcHR5IHNjcmlwdCBub2RlLCB3ZSBzaG91bGRuJ3QgZXZhbHVhdGUg
dGhlIHNjcmlwdAotICAgIC8vIGJlY2F1c2UgaWYgYSBzY3JpcHQgaXMgaW5zZXJ0ZWQgYWZ0ZXJ3
YXJkcyAoYnkgc2V0dGluZyB0ZXh0IG9yIGlubmVyVGV4dCkKLSAgICAvLyBpdCBzaG91bGQgYmUg
ZXZhbHVhdGVkLCBhbmQgZXZhbHVhdGVTY3JpcHQgb25seSBldmFsdWF0ZXMgYSBzY3JpcHQgb25j
ZS4KLSAgICBldmFsdWF0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdENvbnRlbnQoKSwg
ZWxlbWVudCgpLT5kb2N1bWVudCgpLT51cmwoKSkpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwg
c3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4KKyAgICBpZiAoIW1fcGFyc2VySW5zZXJ0ZWQpCisg
ICAgICAgIHByZXBhcmVTY3JpcHQoKTsgLy8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5n
IGxpbmUgbnVtYmVyIGhlcmUuCiB9CiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6cmVtb3ZlZEZyb21E
b2N1bWVudCgpCkBAIC05MywyMiArODQsOCBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OnJlbW92ZWRG
cm9tRG9jdW1lbnQoCiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCkKIHsK
LSAgICBpZiAod2FzSW5zZXJ0ZWRCeVBhcnNlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBJZiBhIG5vZGUgaXMgaW5zZXJ0ZWQgYXMgYSBjaGlsZCBvZiB0aGUgc2NyaXB0IGVsZW1lbnQK
LSAgICAvLyBhbmQgdGhlIHNjcmlwdCBlbGVtZW50IGhhcyBiZWVuIGluc2VydGVkIGluIHRoZSBk
b2N1bWVudAotICAgIC8vIHdlIGV2YWx1YXRlIHRoZSBzY3JpcHQuCi0gICAgaWYgKG1fZWxlbWVu
dC0+aW5Eb2N1bWVudCgpICYmIG1fZWxlbWVudC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICBldmFs
dWF0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdENvbnRlbnQoKSwgbV9lbGVtZW50LT5k
b2N1bWVudCgpLT51cmwoKSkpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGlu
ZSBudW1iZXIgaGVyZQotfQotCi12b2lkIFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGls
ZHJlbihjb25zdCBTdHJpbmcmIHNvdXJjZVVybCkKLXsKLSAgICAvLyBUaGUgcGFyc2VyIGp1c3Qg
cmVhY2hlZCA8L3NjcmlwdD4uIElmIHdlIGhhdmUgbm8gc3JjIGFuZCBubyB0ZXh0LAotICAgIC8v
IGFsbG93IGR5bmFtaWMgbG9hZGluZyBsYXRlci4KLSAgICBpZiAoc291cmNlVXJsLmlzRW1wdHko
KSAmJiBzY3JpcHRDb250ZW50KCkuaXNFbXB0eSgpKQotICAgICAgICBtX3dhc0luc2VydGVkQnlQ
YXJzZXIgPSBmYWxzZTsKKyAgICBpZiAoIW1fcGFyc2VySW5zZXJ0ZWQgJiYgbV9lbGVtZW50LT5p
bkRvY3VtZW50KCkpCisgICAgICAgIHByZXBhcmVTY3JpcHQoKTsgLy8gRklYTUU6IFByb3ZpZGUg
YSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUuCiB9CiAKIHZvaWQgU2NyaXB0RWxlbWVu
dDo6aGFuZGxlU291cmNlQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQpAQCAtMTE2
LDEyICs5MywxOSBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OmhhbmRsZVNvdXJjZUF0dHJpYnV0CiAg
ICAgaWYgKGlnbm9yZXNMb2FkUmVxdWVzdCgpIHx8IHNvdXJjZVVybC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHJlcXVlc3RTY3JpcHQoc291cmNlVXJsKTsKKyAgICBwcmVwYXJl
U2NyaXB0KCk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVhbCBzdGFydGluZyBsaW5lIG51bWJlciBo
ZXJlLgogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb24KLXN0YXRpYyBib29sIGlzU3VwcG9ydGVkSmF2
YVNjcmlwdExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpCitzdGF0aWMgYm9vbCBpc0xl
Z2FjeVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxhbmd1YWdlKQog
eworICAgIC8vIE1vemlsbGEgMS44IGFjY2VwdHMgamF2YXNjcmlwdDEuMCAtIGphdmFzY3JpcHQx
LjcsIGJ1dCBXaW5JRSA3IGFjY2VwdHMgb25seSBqYXZhc2NyaXB0MS4xIC0gamF2YXNjcmlwdDEu
My4KKyAgICAvLyBNb3ppbGxhIDEuOCBhbmQgV2luSUUgNyBib3RoIGFjY2VwdCBqYXZhc2NyaXB0
IGFuZCBsaXZlc2NyaXB0LgorICAgIC8vIFdpbklFIDcgYWNjZXB0cyBlY21hc2NyaXB0IGFuZCBq
c2NyaXB0LCBidXQgTW96aWxsYSAxLjggZG9lc24ndC4KKyAgICAvLyBOZWl0aGVyIE1vemlsbGEg
MS44IG5vciBXaW5JRSA3IGFjY2VwdCBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UuCisg
ICAgLy8gV2Ugd2FudCB0byBhY2NlcHQgYWxsIHRoZSB2YWx1ZXMgdGhhdCBlaXRoZXIgb2YgdGhl
c2UgYnJvd3NlcnMgYWNjZXB0LCBidXQgbm90IG90aGVyIHZhbHVlcy4KKworICAgIC8vIEZJWE1F
OiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBIVE1MNSBjb21wbGlhbnQuIFRoZXNlIGJlbG9uZyBpbiB0
aGUgTUlNRSByZWdpc3RyeSBhcyAidGV4dC9qYXZhc2NyaXB0PHZlcnNpb24+IiBlbnRyaWVzLgog
ICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gTGFuZ3VhZ2VTZXQ7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMYW5ndWFnZVNldCwgbGFuZ3VhZ2VzLCAoKSk7CiAg
ICAgaWYgKGxhbmd1YWdlcy5pc0VtcHR5KCkpIHsKQEAgLTEzNyw1OCArMTIxLDEzMyBAQCBzdGF0
aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnCiAgICAgICAgIGxhbmd1YWdlcy5h
ZGQoImphdmFzY3JpcHQxLjciKTsKICAgICAgICAgbGFuZ3VhZ2VzLmFkZCgibGl2ZXNjcmlwdCIp
OwogICAgICAgICBsYW5ndWFnZXMuYWRkKCJlY21hc2NyaXB0Iik7Ci0gICAgICAgIGxhbmd1YWdl
cy5hZGQoImpzY3JpcHQiKTsgICAgICAgICAgICAgICAgCisgICAgICAgIGxhbmd1YWdlcy5hZGQo
ImpzY3JpcHQiKTsKICAgICB9CiAKICAgICByZXR1cm4gbGFuZ3VhZ2VzLmNvbnRhaW5zKGxhbmd1
YWdlKTsKIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50OjpyZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmlu
ZyYgc291cmNlVXJsKQorYm9vbCBTY3JpcHRFbGVtZW50Ojppc1NjcmlwdFR5cGVTdXBwb3J0ZWQo
TGVnYWN5VHlwZVN1cHBvcnQgc3VwcG9ydExlZ2FjeVR5cGVzKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBpc0xlZ2FjeVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZSgpIGlzIG5vdCB2YWxpZCBI
VE1MNS4gSXQgaXMgdXNlZCBoZXJlIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5
IHdpdGggZXhpc3RpbmcgbGF5b3V0IHRlc3RzLiBUaGUgc3BlY2lmaWMgdmlvbGF0aW9ucyBhcmU6
CisgICAgLy8gLSBBbGxvd2luZyB0eXBlPWphdmFzY3JpcHQuIHR5cGU9IHNob3VsZCBvbmx5IHN1
cHBvcnQgTUlNRSB0eXBlcywgc3VjaCBhcyB0ZXh0L2phdmFzY3JpcHQuCisgICAgLy8gLSBBbGxv
d2luZyBhIGRpZmZlcmVudCBzZXQgb2YgbGFuZ3VhZ2VzIGZvciBsYW5ndWFnZT0gYW5kIHR5cGU9
LiBsYW5ndWFnZT0gc3VwcG9ydHMgSmF2YXNjcmlwdCAxLjEgYW5kIDEuNC0xLjYsIGJ1dCB0eXBl
PSBkb2VzIG5vdC4KKworICAgIFN0cmluZyB0eXBlID0gdHlwZUF0dHJpYnV0ZVZhbHVlKCk7Cisg
ICAgU3RyaW5nIGxhbmd1YWdlID0gbGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1ZSgpOworICAgIGlmICh0
eXBlLmlzRW1wdHkoKSAmJiBsYW5ndWFnZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVl
OyAvLyBBc3N1bWUgdGV4dC9qYXZhc2NyaXB0LgorICAgIGlmICh0eXBlLmlzRW1wdHkoKSkgewor
ICAgICAgICB0eXBlID0gInRleHQvIiArIGxhbmd1YWdlLmxvd2VyKCk7CisgICAgICAgIGlmIChN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZSh0eXBlKSB8fCBp
c0xlZ2FjeVN1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnZShsYW5ndWFnZSkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSmF2YVNjcmlwdE1JTUVUeXBlKHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKSkgfHwg
KHN1cHBvcnRMZWdhY3lUeXBlcyA9PSBBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUgJiYg
aXNMZWdhY3lTdXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZ2UodHlwZSkpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIGh0dHA6Ly9kZXYudzMub3JnL2h0
bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNwcmVwYXJlLWEtc2NyaXB0Citib29sIFNjcmlwdEVsZW1l
bnQ6OnByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlv
biwgTGVnYWN5VHlwZVN1cHBvcnQgc3VwcG9ydExlZ2FjeVR5cGVzKQogewotICAgIC8vIEZJWE1F
OiBFdmVudHVhbGx5IHdlJ2QgbGlrZSB0byBldmFsdWF0ZSBzY3JpcHRzIHdoaWNoIGFyZSBpbnNl
cnRlZCBpbnRvIGEgCisgICAgaWYgKG1fYWxyZWFkeVN0YXJ0ZWQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGJvb2wgd2FzUGFyc2VySW5zZXJ0ZWQ7CisgICAgaWYgKG1fcGFyc2VySW5z
ZXJ0ZWQpIHsKKyAgICAgICAgd2FzUGFyc2VySW5zZXJ0ZWQgPSB0cnVlOworICAgICAgICBtX3Bh
cnNlckluc2VydGVkID0gZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIHdhc1BhcnNlckluc2Vy
dGVkID0gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogSFRNTDUgc3BlYyBzYXlzIHdlIHNob3VsZCBz
ZXQgZm9yY2VBc3luYy4KKworICAgIC8vIEZJWE1FOiBIVE1MNSBzcGVjIHNheXMgd2Ugc2hvdWxk
IGNoZWNrIHRoYXQgYWxsIGNoaWxkcmVuIGFyZSBlaXRoZXIgY29tbWVudHMgb3IgZW1wdHkgdGV4
dCBub2Rlcy4KKyAgICBpZiAoIWhhc1NvdXJjZUF0dHJpYnV0ZSgpICYmICFtX2VsZW1lbnQtPmZp
cnN0Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2VsZW1lbnQt
PmluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFpc1Njcmlw
dFR5cGVTdXBwb3J0ZWQoc3VwcG9ydExlZ2FjeVR5cGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKHdhc1BhcnNlckluc2VydGVkKQorICAgICAgICBtX3BhcnNlckluc2VydGVk
ID0gdHJ1ZTsKKworICAgIG1fYWxyZWFkeVN0YXJ0ZWQgPSB0cnVlOworCisgICAgLy8gRklYTUU6
IElmIHNjcmlwdCBpcyBwYXJzZXIgaW5zZXJ0ZWQsIHZlcmlmeSBpdCdzIHN0aWxsIGluIHRoZSBv
cmlnaW5hbCBkb2N1bWVudC4KKworICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlJ2QgbGlrZSB0
byBldmFsdWF0ZSBzY3JpcHRzIHdoaWNoIGFyZSBpbnNlcnRlZCBpbnRvIGEKICAgICAvLyB2aWV3
bGVzcyBkb2N1bWVudCBidXQgdGhpcydsbCBkbyBmb3Igbm93LgogICAgIC8vIFNlZSBodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzI3CiAgICAgaWYgKCFtX2VsZW1lbnQt
PmRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFtX2VsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnNjcmlwdCgp
LT5jYW5FeGVjdXRlU2NyaXB0cyhBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghaXNTY3JpcHRGb3JFdmVudFN1cHBvcnRlZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNoYXJzZXRBdHRyaWJ1dGVWYWx1ZSgpLmlzRW1w
dHkoKSkKKyAgICAgICAgbV9jaGFyYWN0ZXJFbmNvZGluZyA9IGNoYXJzZXRBdHRyaWJ1dGVWYWx1
ZSgpOworICAgIGVsc2UKKyAgICAgICAgbV9jaGFyYWN0ZXJFbmNvZGluZyA9IG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+Y2hhcnNldCgpOworCisgICAgaWYgKGhhc1NvdXJjZUF0dHJpYnV0ZSgpKQor
ICAgICAgICBpZiAoIXJlcXVlc3RTY3JpcHQoc291cmNlQXR0cmlidXRlVmFsdWUoKSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkgJiYg
ZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYgIWFzeW5jQXR0cmli
dXRlVmFsdWUoKSkgeworICAgICAgICBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQ
YXJzaW5nID0gdHJ1ZTsKKyAgICAgICAgbV93aWxsQmVQYXJzZXJFeGVjdXRlZCA9IHRydWU7Cisg
ICAgfSBlbHNlIGlmIChoYXNTb3VyY2VBdHRyaWJ1dGUoKSAmJiBtX3BhcnNlckluc2VydGVkICYm
ICFhc3luY0F0dHJpYnV0ZVZhbHVlKCkpCisgICAgICAgIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQg
PSB0cnVlOworICAgIGVsc2UgaWYgKCFoYXNTb3VyY2VBdHRyaWJ1dGUoKSAmJiBtX3BhcnNlcklu
c2VydGVkICYmICFtX2VsZW1lbnQtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgp
KSB7CisgICAgICAgIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQgPSB0cnVlOworICAgICAgICBtX3Jl
YWR5VG9CZVBhcnNlckV4ZWN1dGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGhhc1NvdXJjZUF0
dHJpYnV0ZSgpKQorICAgICAgICBtX2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOworICAg
IGVsc2UKKyAgICAgICAgZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdENvbnRl
bnQoKSwgbV9lbGVtZW50LT5kb2N1bWVudCgpLT51cmwoKSwgc2NyaXB0U3RhcnRQb3NpdGlvbikp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2NyaXB0RWxlbWVudDo6cmVxdWVzdFNj
cmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudC0+ZG9j
dW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmNhbkxvYWRFeHRlcm5hbFNjcmlwdEZy
b21TcmMoc291cmNlVXJsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPERv
Y3VtZW50PiBvcmlnaW5hbERvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpOwogICAgIGlm
ICghbV9lbGVtZW50LT5kaXNwYXRjaEJlZm9yZUxvYWRFdmVudChzb3VyY2VVcmwpKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1fZWxlbWVudC0+aW5E
b2N1bWVudCgpIHx8IG1fZWxlbWVudC0+ZG9jdW1lbnQoKSAhPSBvcmlnaW5hbERvY3VtZW50KQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VSVCghbV9j
YWNoZWRTY3JpcHQpOworICAgIC8vIEZJWE1FOiBJZiBzb3VyY2VVcmwgaXMgZW1wdHksIHdlIHNo
b3VsZCBkaXNwYXRjaEVycm9yRXZlbnQoKS4KICAgICBtX2NhY2hlZFNjcmlwdCA9IG1fZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzb3Vy
Y2VVcmwsIHNjcmlwdENoYXJzZXQoKSk7CiAgICAgbV9pc0V4dGVybmFsU2NyaXB0ID0gdHJ1ZTsK
IAotICAgIC8vIG1fd2FzSW5zZXJ0ZWRCeVBhcnNlciBpcyBuZXZlciByZXNldCAtIGFsd2F5cyBy
ZXNpZWQgYXQgdGhlIGluaXRpYWwgdmFsdWUgc2V0IHdoaWxlIHBhcnNpbmcuCi0gICAgLy8gbV93
YXNBbHJlYWR5U3RhcnRlZCBpcyBsZWZ0IHVudG91Y2hlZCBhcyB3ZWxsIHRvIGF2b2lkIHNjcmlw
dCByZWV4ZWN1dGlvbiwgaWYgYSA8c2NyaXB0PiBlbGVtZW50Ci0gICAgLy8gaXMgcmVtb3ZlZCBh
bmQgcmVhcHBlbmRlZCB0byB0aGUgZG9jdW1lbnQuCi0gICAgbV9oYXZlRmlyZWRMb2FkID0gZmFs
c2U7Ci0KLSAgICBpZiAobV9jYWNoZWRTY3JpcHQpIHsKLSAgICAgICAgbV9jYWNoZWRTY3JpcHQt
PmFkZENsaWVudCh0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9jYWNo
ZWRTY3JpcHQpCisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZGlzcGF0Y2hFcnJvckV2ZW50
KCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNjcmlwdEVsZW1lbnQ6OmV2YWx1YXRl
U2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCit2b2lkIFNjcmlwdEVs
ZW1lbnQ6OmV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkK
IHsKLSAgICBpZiAod2FzQWxyZWFkeVN0YXJ0ZWQoKSB8fCBzb3VyY2VDb2RlLmlzRW1wdHkoKSB8
fCAhc2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpKQorICAgIEFTU0VSVChtX2FscmVhZHlTdGFy
dGVkKTsKKworICAgIGlmIChzb3VyY2VDb2RlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsK
ICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5zY3JpcHQoKS0+Y2FuRXhlY3V0ZVNjcmlw
dHMoQWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IG1fd2FzQWxyZWFkeVN0YXJ0ZWQgPSB0cnVlOwotCi0gICAgICAgIC8vIGh0dHA6Ly93d3cud2hh
dHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3NjcmlwdAotCiAgICAgICAgIHsK
ICAgICAgICAgICAgIElnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyIGlnbm9y
ZURlc2N0cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRlcihtX2lzRXh0ZXJuYWxTY3JpcHQgPyBk
b2N1bWVudC5nZXQoKSA6IDApOwogICAgICAgICAgICAgLy8gQ3JlYXRlIGEgc2NyaXB0IGZyb20g
dGhlIHNjcmlwdCBlbGVtZW50IG5vZGUsIHVzaW5nIHRoZSBzY3JpcHQKQEAgLTIwMSwzNiArMjYw
LDIzIEBAIHZvaWQgU2NyaXB0RWxlbWVudDo6ZXZhbHVhdGVTY3JpcHQoY29uc3QKICAgICB9CiB9
CiAKLXZvaWQgU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VD
b2RlJiBzb3VyY2VDb2RlKQotewotICAgIGlmICh3YXNBbHJlYWR5U3RhcnRlZCgpIHx8IHNvdXJj
ZUNvZGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPERvY3VtZW50PiBk
b2N1bWVudCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwot
ICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fd2FzQWxyZWFkeVN0YXJ0ZWQgPSB0cnVlOwotCi0gICAg
ZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwotfQotCiB2b2lkIFNj
cmlwdEVsZW1lbnQ6OnN0b3BMb2FkUmVxdWVzdCgpCiB7CiAgICAgaWYgKG1fY2FjaGVkU2NyaXB0
KSB7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7CisgICAgICAg
IGlmICghbV93aWxsQmVQYXJzZXJFeGVjdXRlZCkKKyAgICAgICAgICAgIG1fY2FjaGVkU2NyaXB0
LT5yZW1vdmVDbGllbnQodGhpcyk7CiAgICAgICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsKICAgICB9
CiB9CiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZShDYWNoZWRTY3JpcHQqIGNhY2hlZFNj
cmlwdCkKIHsKKyAgICBBU1NFUlQoIW1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQpOwogICAgIEFTU0VS
VChjYWNoZWRTY3JpcHQpOwogICAgIGlmIChjYWNoZWRTY3JpcHQtPmVycm9yT2NjdXJyZWQoKSkK
ICAgICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGV2YWx1
YXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoY2FjaGVkU2NyaXB0KSk7CisgICAgICAgIGV4ZWN1
dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShjYWNoZWRTY3JpcHQpKTsKICAgICAgICAgZGlzcGF0
Y2hMb2FkRXZlbnQoKTsKICAgICB9CiAgICAgY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhp
cyk7CkBAIC0yMzgsNiArMjg0LDcgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlKENhY2hl
ZFNjcmlwdAogCiB2b2lkIFNjcmlwdEVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291
cmNlKiBvKQogeworICAgIEFTU0VSVCghbV93aWxsQmVQYXJzZXJFeGVjdXRlZCk7CiAgICAgQVNT
RVJUX1VOVVNFRChvLCBvID09IG1fY2FjaGVkU2NyaXB0KTsKICAgICBtX2VsZW1lbnQtPmRvY3Vt
ZW50KCktPmFzeW5jU2NyaXB0UnVubmVyKCktPmV4ZWN1dGVTY3JpcHRTb29uKHRoaXMsIG1fY2Fj
aGVkU2NyaXB0KTsKICAgICBtX2NhY2hlZFNjcmlwdCA9IDA7CkBAIC0yNDUsNTkgKzI5MiwyNSBA
QCB2b2lkIFNjcmlwdEVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlCiAKIGJvb2wgU2NyaXB0
RWxlbWVudDo6aWdub3Jlc0xvYWRSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2FzQWxy
ZWFkeVN0YXJ0ZWQoKSB8fCBtX2lzRXh0ZXJuYWxTY3JpcHQgfHwgd2FzSW5zZXJ0ZWRCeVBhcnNl
cigpIHx8ICFtX2VsZW1lbnQtPmluRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gbV9hbHJlYWR5U3Rh
cnRlZCB8fCBtX2lzRXh0ZXJuYWxTY3JpcHQgfHwgbV9wYXJzZXJJbnNlcnRlZCB8fCAhbV9lbGVt
ZW50LT5pbkRvY3VtZW50KCk7CiB9CiAKLWJvb2wgU2NyaXB0RWxlbWVudDo6c2hvdWxkRXhlY3V0
ZUFzSmF2YVNjcmlwdCgpIGNvbnN0Citib29sIFNjcmlwdEVsZW1lbnQ6OmlzU2NyaXB0Rm9yRXZl
bnRTdXBwb3J0ZWQoKSBjb25zdAogewotICAgIC8qCi0gICAgICAgICBNb3ppbGxhIDEuOCBhY2Nl
cHRzIGphdmFzY3JpcHQxLjAgLSBqYXZhc2NyaXB0MS43LCBidXQgV2luSUUgNyBhY2NlcHRzIG9u
bHkgamF2YXNjcmlwdDEuMSAtIGphdmFzY3JpcHQxLjMuCi0gICAgICAgICBNb3ppbGxhIDEuOCBh
bmQgV2luSUUgNyBib3RoIGFjY2VwdCBqYXZhc2NyaXB0IGFuZCBsaXZlc2NyaXB0LgotICAgICAg
ICAgV2luSUUgNyBhY2NlcHRzIGVjbWFzY3JpcHQgYW5kIGpzY3JpcHQsIGJ1dCBNb3ppbGxhIDEu
OCBkb2Vzbid0LgotICAgICAgICAgTmVpdGhlciBNb3ppbGxhIDEuOCBub3IgV2luSUUgNyBhY2Nl
cHQgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlLgotICAgICAgICAgV2Ugd2FudCB0byBh
Y2NlcHQgYWxsIHRoZSB2YWx1ZXMgdGhhdCBlaXRoZXIgb2YgdGhlc2UgYnJvd3NlcnMgYWNjZXB0
LCBidXQgbm90IG90aGVyIHZhbHVlcy4KLSAgICAgCi0gICAgICAgICBGSVhNRTogSXMgdGhpcyBI
VE1MNSBjb21wbGlhbnQ/Ci0gICAgICovCi0gICAgU3RyaW5nIHR5cGUgPSB0eXBlQXR0cmlidXRl
VmFsdWUoKTsKLSAgICBpZiAoIXR5cGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmICghTUlNRVR5
cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUodHlwZS5zdHJpcFdoaXRl
U3BhY2UoKS5sb3dlcigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBsYW5ndWFnZUF0dHJpYnV0ZVZhbHVlKCk7Ci0g
ICAgICAgIGlmICghbGFuZ3VhZ2UuaXNFbXB0eSgpICYmICFpc1N1cHBvcnRlZEphdmFTY3JpcHRM
YW5ndWFnZShsYW5ndWFnZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSAgICAK
LQotICAgIC8vIE5vIHR5cGUgb3IgbGFuZ3VhZ2UgaXMgc3BlY2lmaWVkLCBzbyB3ZSBhc3N1bWUg
dGhlIHNjcmlwdCB0byBiZSBKYXZhU2NyaXB0LgotCi0gICAgU3RyaW5nIGZvckF0dHJpYnV0ZSA9
IGZvckF0dHJpYnV0ZVZhbHVlKCk7CiAgICAgU3RyaW5nIGV2ZW50QXR0cmlidXRlID0gZXZlbnRB
dHRyaWJ1dGVWYWx1ZSgpOwotICAgIGlmICghZm9yQXR0cmlidXRlLmlzRW1wdHkoKSAmJiAhZXZl
bnRBdHRyaWJ1dGUuaXNFbXB0eSgpKSB7CisgICAgU3RyaW5nIGZvckF0dHJpYnV0ZSA9IGZvckF0
dHJpYnV0ZVZhbHVlKCk7CisgICAgaWYgKCFldmVudEF0dHJpYnV0ZS5pc0VtcHR5KCkgJiYgIWZv
ckF0dHJpYnV0ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yQXR0cmlidXRlID0gZm9yQXR0cmli
dXRlLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGZv
ckF0dHJpYnV0ZSwgIndpbmRvdyIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgCisKICAgICAgICAgZXZlbnRBdHRyaWJ1dGUgPSBldmVudEF0dHJpYnV0ZS5zdHJpcFdo
aXRlU3BhY2UoKTsKICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShldmVudEF0dHJpYnV0
ZSwgIm9ubG9hZCIpICYmICFlcXVhbElnbm9yaW5nQ2FzZShldmVudEF0dHJpYnV0ZSwgIm9ubG9h
ZCgpIikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAogICAgIHJldHVy
biB0cnVlOwogfQogCi1TdHJpbmcgU2NyaXB0RWxlbWVudDo6c2NyaXB0Q2hhcnNldCgpIGNvbnN0
Ci17Ci0gICAgLy8gRmlyc3Qgd2UgdHJ5IHRvIGdldCBlbmNvZGluZyBmcm9tIGNoYXJzZXQgYXR0
cmlidXRlLgotICAgIFN0cmluZyBjaGFyc2V0ID0gY2hhcnNldEF0dHJpYnV0ZVZhbHVlKCkuc3Ry
aXBXaGl0ZVNwYWNlKCk7Ci0KLSAgICAvLyBJZiBjaGFyc2V0IGhhcyBub3QgYmVlbiBkZWNsYXJl
ZCBpbiBzY3JpcHQgdGFnLCBmYWxsIGJhY2sgdG8gZnJhbWUgZW5jb2RpbmcuCi0gICAgaWYgKGNo
YXJzZXQuaXNFbXB0eSgpKQotICAgICAgICBjaGFyc2V0ID0gbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5jaGFyc2V0KCk7Ci0KLSAgICByZXR1cm4gY2hhcnNldDsKLX0KLQogU3RyaW5nIFNjcmlwdEVs
ZW1lbnQ6OnNjcmlwdENvbnRlbnQoKSBjb25zdAogewogICAgIFZlY3RvcjxVQ2hhcj4gdmFsOwpA
QCAtMzI1LDIwICszMzgsNiBAQCBTdHJpbmcgU2NyaXB0RWxlbWVudDo6c2NyaXB0Q29udGVudCgp
IGNvCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQodmFsKTsKIH0KIAotYm9vbCBTY3JpcHRFbGVt
ZW50Ojppc0FzeW5jaHJvbm91cygpIGNvbnN0Ci17Ci0gICAgLy8gT25seSBleHRlcm5hbCBzY3Jp
cHRzIG1heSBiZSBhc3luY2hyb25vdXMuCi0gICAgLy8gU2VlOiBodHRwOi8vZGV2LnczLm9yZy9o
dG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjYXR0ci1zY3JpcHQtYXN5bmMKLSAgICByZXR1cm4gIXNv
dXJjZUF0dHJpYnV0ZVZhbHVlKCkuaXNFbXB0eSgpICYmIGFzeW5jQXR0cmlidXRlVmFsdWUoKTsK
LX0KLQotYm9vbCBTY3JpcHRFbGVtZW50Ojppc0RlZmVycmVkKCkgY29uc3QKLXsKLSAgICAvLyBP
bmx5IGV4dGVybmFsIHNjcmlwdHMgbWF5IGJlIGRlZmVycmVkIGFuZCBhc3luYyB0cnVtcHMgZGVm
ZXIgdG8gYWxsb3cgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi0gICAgLy8gU2VlOiBodHRw
Oi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjYXR0ci1zY3JpcHQtZGVmZXIK
LSAgICByZXR1cm4gIXNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkuaXNFbXB0eSgpICYmICFhc3luY0F0
dHJpYnV0ZVZhbHVlKCkgJiYgZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpOwotfQotCiBTY3JpcHRFbGVt
ZW50KiB0b1NjcmlwdEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBpZiAoZWxlbWVu
dC0+aXNIVE1MRWxlbWVudCgpICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3Jp
cHRUYWcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiA3OTA2
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
UG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiw0NyArMzcsNDkgQEAg
Y2xhc3MgU2NyaXB0RWxlbWVudCA6IHByaXZhdGUgQ2FjaGVkUmVzbwogcHVibGljOgogICAgIFNj
cmlwdEVsZW1lbnQoRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29sIGlzRXZhbHVh
dGVkKTsKICAgICB2aXJ0dWFsIH5TY3JpcHRFbGVtZW50KCk7Ci0gICAgCisKICAgICBFbGVtZW50
KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CiAKLSAgICAvLyBBIGNoYXJz
ZXQgZm9yIGxvYWRpbmcgdGhlIHNjcmlwdCAobWF5IGJlIG92ZXJyaWRkZW4gYnkgSFRUUCBoZWFk
ZXJzIG9yIGEgQk9NKS4KLSAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCgpIGNvbnN0OworICAgIGVu
dW0gTGVnYWN5VHlwZVN1cHBvcnQgeyBEaXNhbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUs
IEFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSB9OworICAgIGJvb2wgcHJlcGFyZVNjcmlw
dChjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9u
MTo6bWluaW11bVBvc2l0aW9uKCksIExlZ2FjeVR5cGVTdXBwb3J0ID0gRGlzYWxsb3dMZWdhY3lU
eXBlSW5UeXBlQXR0cmlidXRlKTsKIAorICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9jaGFyYWN0ZXJFbmNvZGluZzsgfQogICAgIFN0cmluZyBzY3JpcHRDb250ZW50
KCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkgY29uc3Q7CiAg
ICAgdm9pZCBleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKICAgICB2b2lk
IGV4ZWN1dGUoQ2FjaGVkU2NyaXB0Kik7CiAKICAgICAvLyBYTUwgcGFyc2VyIGNhbGxzIHRoZXNl
Ci0gICAgdmlydHVhbCBTdHJpbmcgc291cmNlQXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTG9hZEV2ZW50KCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaEVycm9yRXZlbnQoKSA9IDA7CisgICAgYm9vbCBpc1NjcmlwdFR5cGVTdXBwb3J0
ZWQoTGVnYWN5VHlwZVN1cHBvcnQpIGNvbnN0OwogCiAgICAgYm9vbCBoYXZlRmlyZWRMb2FkRXZl
bnQoKSBjb25zdCB7IHJldHVybiBtX2hhdmVGaXJlZExvYWQ7IH0KKyAgICBib29sIHdpbGxCZVBh
cnNlckV4ZWN1dGVkKCkgY29uc3QgeyByZXR1cm4gbV93aWxsQmVQYXJzZXJFeGVjdXRlZDsgfQor
ICAgIGJvb2wgcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5
VG9CZVBhcnNlckV4ZWN1dGVkOyB9CisgICAgYm9vbCB3aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZp
bmlzaGVkUGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbEV4ZWN1dGVXaGVuRG9jdW1lbnRG
aW5pc2hlZFBhcnNpbmc7IH0KKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+
IGNhY2hlZFNjcmlwdCgpIHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0OyB9CiAKIHByb3RlY3RlZDoK
ICAgICB2b2lkIHNldEhhdmVGaXJlZExvYWRFdmVudChib29sIGhhdmVGaXJlZExvYWQpIHsgbV9o
YXZlRmlyZWRMb2FkID0gaGF2ZUZpcmVkTG9hZDsgfQotICAgIGJvb2wgd2FzSW5zZXJ0ZWRCeVBh
cnNlcigpIGNvbnN0IHsgcmV0dXJuIG1fd2FzSW5zZXJ0ZWRCeVBhcnNlcjsgfQotICAgIGJvb2wg
d2FzQWxyZWFkeVN0YXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX3dhc0FscmVhZHlTdGFydGVkOyB9
CisgICAgYm9vbCBpc1BhcnNlckluc2VydGVkKCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZXJJbnNl
cnRlZDsgfQorICAgIGJvb2wgYWxyZWFkeVN0YXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX2FscmVh
ZHlTdGFydGVkOyB9CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgb3VyIHBhcmVu
dCBjbGFzc2VzLgotICAgIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBz
b3VyY2VVcmwpOworICAgIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2b2lkIHJl
bW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwotICAgIHZv
aWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKGNvbnN0IFN0cmluZyYgc291cmNlVXJsKTsKICAgICB2
b2lkIGhhbmRsZVNvdXJjZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7CiAKIHBy
aXZhdGU6CiAgICAgYm9vbCBpZ25vcmVzTG9hZFJlcXVlc3QoKSBjb25zdDsKLSAgICBib29sIGlz
QXN5bmNocm9ub3VzKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0RlZmVycmVkKCkgY29uc3Q7CisgICAg
Ym9vbCBpc1NjcmlwdEZvckV2ZW50U3VwcG9ydGVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIHJlcXVl
c3RTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOwotICAgIHZvaWQgZXZhbHVhdGVTY3Jp
cHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOworICAgIGJvb2wgcmVxdWVzdFNjcmlwdChjb25z
dCBTdHJpbmcmIHNvdXJjZVVybCk7CiAgICAgdm9pZCBzdG9wTG9hZFJlcXVlc3QoKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOwogCisgICAgdmly
dHVhbCBTdHJpbmcgc291cmNlQXR0cmlidXRlVmFsdWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBTdHJpbmcgY2hhcnNldEF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
U3RyaW5nIHR5cGVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmlu
ZyBsYW5ndWFnZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwpAQCAtODQsMTMgKzg3LDE5IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgZXZlbnRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYXN5bmNBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgaGFzU291cmNlQXR0cmlidXRlKCkgY29uc3QgPSAwOwogCiAgICAgRWxlbWVu
dCogbV9lbGVtZW50OwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9j
YWNoZWRTY3JpcHQ7Ci0gICAgYm9vbCBtX3dhc0luc2VydGVkQnlQYXJzZXI7Ci0gICAgYm9vbCBt
X2lzRXh0ZXJuYWxTY3JpcHQ7Ci0gICAgYm9vbCBtX3dhc0FscmVhZHlTdGFydGVkOwotICAgIGJv
b2wgbV9oYXZlRmlyZWRMb2FkOworICAgIGJvb2wgbV9wYXJzZXJJbnNlcnRlZCA6IDE7CisgICAg
Ym9vbCBtX2lzRXh0ZXJuYWxTY3JpcHQgOiAxOworICAgIGJvb2wgbV9hbHJlYWR5U3RhcnRlZCA6
IDE7CisgICAgYm9vbCBtX2hhdmVGaXJlZExvYWQgOiAxOworICAgIGJvb2wgbV93aWxsQmVQYXJz
ZXJFeGVjdXRlZCA6IDE7IC8vIFNhbWUgYXMgIlRoZSBwYXJzZXIgd2lsbCBoYW5kbGUgZXhlY3V0
aW5nIHRoZSBzY3JpcHQuIgorICAgIGJvb2wgbV9yZWFkeVRvQmVQYXJzZXJFeGVjdXRlZCA6IDE7
CisgICAgYm9vbCBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQYXJzaW5nIDogMTsK
KyAgICBTdHJpbmcgbV9jaGFyYWN0ZXJFbmNvZGluZzsKKyAgICBTdHJpbmcgbV9mYWxsYmFja0No
YXJhY3RlckVuY29kaW5nOwogfTsKIAogU2NyaXB0RWxlbWVudCogdG9TY3JpcHRFbGVtZW50KEVs
ZW1lbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnht
bDIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNl
ckxpYnhtbDIuY3BwCShyZXZpc2lvbiA3OTA2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODAsMzUgKzg4MCwz
MiBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQogICAgIEFTU0VSVCgh
bV9wZW5kaW5nU2NyaXB0KTsKICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwogCisgICAg
Ym9vbCBzdWNjZXNzZnVsbHlQcmVwYXJlZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQo
bV9zY3JpcHRTdGFydFBvc2l0aW9uLCBTY3JpcHRFbGVtZW50OjpBbGxvd0xlZ2FjeVR5cGVJblR5
cGVBdHRyaWJ1dGUpOworICAgIGlmICghc3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKICNpZiBFTkFC
TEUoWEhUTUxNUCkKLSAgICBpZiAoIXNjcmlwdEVsZW1lbnQtPnNob3VsZEV4ZWN1dGVBc0phdmFT
Y3JpcHQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxl
bWVudCh0cnVlKTsKLSAgICBlbHNlCisgICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+aXNTY3Jp
cHRUeXBlU3VwcG9ydGVkKFNjcmlwdEVsZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJp
YnV0ZSkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRF
bGVtZW50KHRydWUpOwogI2VuZGlmCi0gICAgewotICAgICAgICAvLyBGSVhNRTogU2NyaXB0IGV4
ZWN1dGlvbiBzaG91bGQgYmUgc2hhcmVkIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbgorICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBTY3JpcHQgZXhlY3V0aW9uIHNob3VsZCBiZSBzaGFy
ZWQgYmV0d2VlbgogICAgICAgICAvLyB0aGUgbGlieG1sMiBhbmQgUXQgWE1MRG9jdW1lbnRQYXJz
ZXIgaW1wbGVtZW50YXRpb25zLgogCiAgICAgICAgIC8vIEphdmFTY3JpcHQgY2FuIGRldGFjaCB0
aGUgcGFyc2VyLiAgTWFrZSBzdXJlIHRoaXMgaXMgbm90IHJlbGVhc2VkCiAgICAgICAgIC8vIGJl
Zm9yZSB0aGUgZW5kIG9mIHRoaXMgbWV0aG9kLgogICAgICAgICBSZWZQdHI8WE1MRG9jdW1lbnRQ
YXJzZXI+IHByb3RlY3QodGhpcyk7CiAKLSAgICAgICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3Jp
cHRFbGVtZW50LT5zb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpOwotICAgICAgICBpZiAoIXNjcmlwdEhy
ZWYuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZQot
ICAgICAgICAgICAgU3RyaW5nIHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRD
aGFyc2V0KCk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZl
bnQoc2NyaXB0SHJlZikgJiYKLSAgICAgICAgICAgICAgICAobV9wZW5kaW5nU2NyaXB0ID0gZG9j
dW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzY3JpcHRIcmVm
LCBzY3JpcHRDaGFyc2V0KSkpIHsKLSAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBl
bGVtZW50OwotICAgICAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMp
OwotCi0gICAgICAgICAgICAgICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUgMCBpZiBzY3Jp
cHQgd2FzIGFscmVhZHkgbG9hZGVkIGFuZCByZWYoKSBleGVjdXRlZCBpdAotICAgICAgICAgICAg
ICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCi0gICAgICAgICAgICAgICAgICAgIHBhdXNlUGFyc2lu
ZygpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50
ID0gMDsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChzY3JpcHRFbGVtZW50LT5yZWFkeVRv
QmVQYXJzZXJFeGVjdXRlZCgpKQogICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNj
cmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9j
dW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3RhcnRQb3NpdGlvbikpOworICAgICAgICBlbHNlIGlm
IChzY3JpcHRFbGVtZW50LT53aWxsQmVQYXJzZXJFeGVjdXRlZCgpKSB7CisgICAgICAgICAgICBt
X3BlbmRpbmdTY3JpcHQgPSBzY3JpcHRFbGVtZW50LT5jYWNoZWRTY3JpcHQoKTsKKyAgICAgICAg
ICAgIG1fc2NyaXB0RWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAgICAgICBtX3BlbmRpbmdTY3Jp
cHQtPmFkZENsaWVudCh0aGlzKTsKKworICAgICAgICAgICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdp
bGwgYmUgMCBpZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkIGFuZCBhZGRDbGllbnQoKSBleGVj
dXRlZCBpdC4KKyAgICAgICAgICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCisgICAgICAgICAgICAg
ICAgcGF1c2VQYXJzaW5nKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zY3JpcHRF
bGVtZW50ID0gMDsKIAogICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBoYXZlIGRldGFjaGVkIHRo
ZSBwYXJzZXIKICAgICAgICAgaWYgKGlzRGV0YWNoZWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAJKHJldmlzaW9uIDc5MDYxKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
ODgsMjggKzU4OCwyNSBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQo
CiAgICAgQVNTRVJUKCFtX3BlbmRpbmdTY3JpcHQpOwogICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9
IHRydWU7CiAKKyAgICBib29sIHN1Y2Nlc3NmdWxseVByZXBhcmVkID0gc2NyaXB0RWxlbWVudC0+
cHJlcGFyZVNjcmlwdChtX3NjcmlwdFN0YXJ0UG9zaXRpb24sIFNjcmlwdEVsZW1lbnQ6OkFsbG93
TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSk7CisgICAgaWYgKCFzdWNjZXNzZnVsbHlQcmVwYXJl
ZCkgewogI2lmIEVOQUJMRShYSFRNTE1QKQotICAgIGlmICghc2NyaXB0RWxlbWVudC0+c2hvdWxk
RXhlY3V0ZUFzSmF2YVNjcmlwdCgpKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9j
ZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwotICAgIGVsc2UKLSNlbmRpZgotICAgIHsKLSAgICAg
ICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3JpcHRFbGVtZW50LT5zb3VyY2VBdHRyaWJ1dGVWYWx1
ZSgpOwotICAgICAgICBpZiAoIXNjcmlwdEhyZWYuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAv
LyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZQotICAgICAgICAgICAgU3RyaW5nIHNjcmlwdENoYXJz
ZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Ci0gICAgICAgICAgICBpZiAoZWxl
bWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoc2NyaXB0SHJlZikgJiYKLSAgICAgICAgICAg
ICAgICAobV9wZW5kaW5nU2NyaXB0ID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIo
KS0+cmVxdWVzdFNjcmlwdChzY3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0KSkpIHsKLSAgICAgICAg
ICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAgICAgICAgIG1fcGVu
ZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotCi0gICAgICAgICAgICAgICAgLy8gbV9wZW5k
aW5nU2NyaXB0IHdpbGwgYmUgMCBpZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkIGFuZCByZWYo
KSBleGVjdXRlZCBpdAotICAgICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCi0gICAg
ICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKLSAgICAgICAgfSBlbHNlCisgICAgICAg
IGlmICghc2NyaXB0RWxlbWVudC0+aXNTY3JpcHRUeXBlU3VwcG9ydGVkKFNjcmlwdEVsZW1lbnQ6
OkFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpCisgICAgICAgICAgICBkb2N1bWVudCgp
LT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOworI2VuZGlmCisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVk
KCkpCiAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJj
ZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwg
bV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CisgICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQt
PndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdCA9
IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpOworICAgICAgICAgICAgbV9zY3JpcHRFbGVt
ZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRo
aXMpOworCisgICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlw
dCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIGFkZENsaWVudCgpIGV4ZWN1dGVkIGl0LgorICAgICAg
ICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKKyAgICAgICAgICAgICAgICBwYXVzZVBhcnNpbmco
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwogICAg
IH0KICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICBwb3BDdXJyZW50Tm9kZSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHJldmlz
aW9uIDc5MDYxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1pbmxpbmUgSFRNTFNjcmlwdEVsZW1lbnQ6OkhU
TUxTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCBib29sIHdhc0FscmVhZHlTdGFydGVk
KQoraW5saW5lIEhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgd2FzSW5zZXJ0ZWRC
eVBhcnNlciwgYm9vbCBhbHJlYWR5U3RhcnRlZCkKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KQotICAgICwgU2NyaXB0RWxlbWVudCh0aGlzLCB3YXNJbnNlcnRlZEJ5UGFyc2Vy
LCB3YXNBbHJlYWR5U3RhcnRlZCkKKyAgICAsIFNjcmlwdEVsZW1lbnQodGhpcywgd2FzSW5zZXJ0
ZWRCeVBhcnNlciwgYWxyZWFkeVN0YXJ0ZWQpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoc2Ny
aXB0VGFnKSk7CiB9CkBAIC03NCwxNiArNzQsMTAgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CiB9CiAKLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGls
ZHJlbigpCi17Ci0gICAgU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKHNvdXJj
ZUF0dHJpYnV0ZVZhbHVlKCkpOwotICAgIEhUTUxFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oKTsKLX0KLQogdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
KQogewogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIFNjcmlw
dEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KHNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkpOwor
ICAgIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiB9CiAKIHZvaWQgSFRN
TFNjcmlwdEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQpAQCAtMTYwLDYgKzE1NCwxMSBA
QCBib29sIEhUTUxTY3JpcHRFbGVtZW50OjpkZWZlckF0dHJpYnV0ZVZhCiAgICAgcmV0dXJuIGZh
c3RIYXNBdHRyaWJ1dGUoZGVmZXJBdHRyKTsKIH0KIAorYm9vbCBIVE1MU2NyaXB0RWxlbWVudDo6
aGFzU291cmNlQXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0
ZShzcmNBdHRyKTsKK30KKwogdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hMb2FkRXZl
bnQoKQogewogICAgIEFTU0VSVCghaGF2ZUZpcmVkTG9hZEV2ZW50KCkpOwpAQCAtMTc1LDcgKzE3
NCw3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmUKIAogUGFzc1Jl
ZlB0cjxFbGVtZW50PiBIVE1MU2NyaXB0RWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJp
YnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1M
U2NyaXB0RWxlbWVudCh0YWdRTmFtZSgpLCBkb2N1bWVudCgpLCBmYWxzZSwgd2FzQWxyZWFkeVN0
YXJ0ZWQoKSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFNjcmlwdEVsZW1lbnQodGFn
UU5hbWUoKSwgZG9jdW1lbnQoKSwgZmFsc2UsIGFscmVhZHlTdGFydGVkKCkpKTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gNzkw
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIEtVUkwgc3JjKCkgY29uc3Q7CiAK
IHByaXZhdGU6Ci0gICAgSFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50KiwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCBib29sIHdhc0FscmVhZHlTdGFydGVk
KTsKKyAgICBIVE1MU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
LCBib29sIHdhc0luc2VydGVkQnlQYXJzZXIsIGJvb2wgYWxyZWFkeVN0YXJ0ZWQpOwogCiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwpAQCAtNDcsNyArNDcsNiBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIg
PSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBp
bnQgY2hpbGRDb3VudERlbHRhID0gMCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1
dGUoQXR0cmlidXRlKikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdDaGls
ZHJlbigpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhM
aXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCkBAIC01OSw2ICs1OCw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBTdHJpbmcgZXZlbnRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBhc3luY0F0dHJpYnV0ZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGRl
ZmVyQXR0cmlidXRlVmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU291cmNlQXR0
cmlidXRlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAkocmV2aXNpb24gNzkw
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYyLDE3ICsyNjIsOSBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6
OnJlcXVlc3REZWZlcnJlZFNjCiBib29sIEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5n
U2NyaXB0KFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQsIEVsZW1lbnQqIHNjcmlwdCkgY29u
c3QKIHsKICAgICBBU1NFUlQoIXBlbmRpbmdTY3JpcHQuZWxlbWVudCgpKTsKLSAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHNyY1ZhbHVlID0gc2NyaXB0LT5nZXRBdHRyaWJ1dGUoc3JjQXR0cik7Ci0g
ICAgLy8gQWxsb3cgdGhlIGhvc3QgdG8gZGlzbGxvdyBzY3JpcHQgbG9hZHMgKHVzaW5nIHRoZSBY
U1NBdWRpdG9yLCBldGMuKQotICAgIC8vIEZJWE1FOiB0aGlzIGNoZWNrIHNob3VsZCBiZSBwZXJm
b3JtZWQgb24gdGhlIGZpbmFsIFVSTCBpbiBhIHJlZGlyZWN0IGNoYWluLgotICAgIGlmICghbV9o
b3N0LT5zaG91bGRMb2FkRXh0ZXJuYWxTY3JpcHRGcm9tU3JjKHNyY1ZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHJlc29sdmUgdGhlIHVybCBy
ZWxhdGl2ZSB0byB0aGUgZWxlbWVudC4KLSAgICBpZiAoIXNjcmlwdC0+ZGlzcGF0Y2hCZWZvcmVM
b2FkRXZlbnQoc3JjVmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcGVuZGluZ1Nj
cmlwdC5zZXRFbGVtZW50KHNjcmlwdCk7CiAgICAgLy8gVGhpcyBzaG91bGQgY29ycmVjdGx5IHJl
dHVybiAwIGZvciBlbXB0eSBvciBpbnZhbGlkIHNyY1ZhbHVlcy4KLSAgICBDYWNoZWRTY3JpcHQq
IGNhY2hlZFNjcmlwdCA9IG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVl
c3RTY3JpcHQoc3JjVmFsdWUsIHRvU2NyaXB0RWxlbWVudChzY3JpcHQpLT5zY3JpcHRDaGFyc2V0
KCkpOworICAgIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0ID0gdG9TY3JpcHRFbGVtZW50KHNj
cmlwdCktPmNhY2hlZFNjcmlwdCgpLmdldCgpOwogICAgIGlmICghY2FjaGVkU2NyaXB0KSB7CiAg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIERpc3BhdGNoIGVycm9yIGV2ZW50LgogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yOTMsMjkgKzI4NSwyNCBAQCB2b2lkIEhUTUxTY3JpcHRSdW5u
ZXI6OnJ1blNjcmlwdChFbGVtZW50CiAKICAgICAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxl
bWVudCA9IHRvU2NyaXB0RWxlbWVudChzY3JpcHQpOwogICAgICAgICBBU1NFUlQoc2NyaXB0RWxl
bWVudCk7Ci0gICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+c2hvdWxkRXhlY3V0ZUFzSmF2YVNj
cmlwdCgpKQorCisgICAgICAgIHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQoc2NyaXB0U3Rh
cnRQb3NpdGlvbik7CisKKyAgICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT53aWxsQmVQYXJzZXJF
eGVjdXRlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKHNj
cmlwdC0+aGFzQXR0cmlidXRlKHNyY0F0dHIpKSB7Ci0gICAgICAgICAgICBpZiAoc2NyaXB0LT5o
YXNBdHRyaWJ1dGUoYXN5bmNBdHRyKSkgLy8gQXN5bmMgdGFrZXMgcHJlY2VuZGVuY2Ugb3ZlciBk
ZWZlci4KLSAgICAgICAgICAgICAgICByZXR1cm47IC8vIEFzeW5jaHJvbm91cyBzY3JpcHRzIGhh
bmRsZSB0aGVtc2VsdmVzLgotCi0gICAgICAgICAgICBpZiAoc2NyaXB0LT5oYXNBdHRyaWJ1dGUo
ZGVmZXJBdHRyKSkKLSAgICAgICAgICAgICAgICByZXF1ZXN0RGVmZXJyZWRTY3JpcHQoc2NyaXB0
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXF1ZXN0UGFyc2luZ0Jsb2Nr
aW5nU2NyaXB0KHNjcmlwdCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1fZG9jdW1lbnQtPmhhdmVT
dHlsZXNoZWV0c0xvYWRlZCgpICYmIG1fc2NyaXB0TmVzdGluZ0xldmVsID09IDEpIHsKLSAgICAg
ICAgICAgIC8vIEJsb2NrIGlubGluZSBzY3JpcHQgZXhlY3V0aW9uIG9uIHN0eWxlc2hlZXQgbG9h
ZCwgdW5sZXNzIHdlIGFyZSBpbiBkb2N1bWVudC53cml0ZSgpLgotICAgICAgICAgICAgLy8gVGhl
IGxhdHRlciBjYXNlIGNhbiBvbmx5IGhhcHBlbiBpZiBhIHNjcmlwdCBib3RoIHRyaWdnZXJzIGEg
c3R5bGVzaGVldCBsb2FkCi0gICAgICAgICAgICAvLyBhbmQgd3JpdGVzIGFuIGlubGluZSBzY3Jp
cHQuIFNpbmNlIHdyaXRlIGlzIGJsb2NraW5nIHdlIGhhdmUgdG8gZXhlY3V0ZSB0aGUKLSAgICAg
ICAgICAgIC8vIHdyaXR0ZW4gc2NyaXB0IGltbWVkaWF0ZWx5LCBpZ25vcmluZyB0aGUgcGVuZGlu
ZyBzaGVldHMuCi0gICAgICAgICAgICBtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdC5zZXRFbGVtZW50
KHNjcmlwdCk7Ci0gICAgICAgICAgICBtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdC5zZXRTdGFydGlu
Z1Bvc2l0aW9uKHNjcmlwdFN0YXJ0UG9zaXRpb24pOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgQVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwotICAgICAgICAgICAgU2NyaXB0U291
cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JT
Y3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwotICAgICAg
ICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKLSAgICAgICAg
fQorCisgICAgICAgIGlmIChzY3JpcHRFbGVtZW50LT53aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZp
bmlzaGVkUGFyc2luZygpKQorICAgICAgICAgICAgcmVxdWVzdERlZmVycmVkU2NyaXB0KHNjcmlw
dCk7CisgICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1
dGVkKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3NjcmlwdE5lc3RpbmdMZXZlbCA9PSAxKSB7Cisg
ICAgICAgICAgICAgICAgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuc2V0RWxlbWVudChzY3JpcHQp
OworICAgICAgICAgICAgICAgIG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0LnNldFN0YXJ0aW5nUG9z
aXRpb24oc2NyaXB0U3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShzY3JpcHQtPnRleHRDb250ZW50
KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHRTdGFy
dFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0
KHNvdXJjZUNvZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHJlcXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQoc2NyaXB0KTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDc5MDYxKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw5ICszNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIERFRklORV9BTklNQVRFRF9T
VFJJTkcoU1ZHU2NyaXB0RWxlbWVudCwgWExpbmtOYW1lczo6aHJlZkF0dHIsIEhyZWYsIGhyZWYp
CiBERUZJTkVfQU5JTUFURURfQk9PTEVBTihTVkdTY3JpcHRFbGVtZW50LCBTVkdOYW1lczo6ZXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEF0dHIsIEV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsIGV4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQpCiAKLWlubGluZSBTVkdTY3JpcHRFbGVtZW50OjpTVkdT
Y3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCBib29sIHdhc0FscmVhZHlTdGFydGVkKQor
aW5saW5lIFNWR1NjcmlwdEVsZW1lbnQ6OlNWR1NjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHdhc0luc2VydGVkQnlQYXJz
ZXIsIGJvb2wgYWxyZWFkeVN0YXJ0ZWQpCiAgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KQotICAgICwgU2NyaXB0RWxlbWVudCh0aGlzLCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCB3YXNB
bHJlYWR5U3RhcnRlZCkKKyAgICAsIFNjcmlwdEVsZW1lbnQodGhpcywgd2FzSW5zZXJ0ZWRCeVBh
cnNlciwgYWxyZWFkeVN0YXJ0ZWQpCiB7CiB9CiAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBTVkdT
Y3JpcHRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZwogICAgICAgICAvLyBIYW5kbGUgZHluYW1p
YyB1cGRhdGVzIG9mIHRoZSAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcgYXR0cmlidXRlLiBP
bmx5IHBvc3NpYmxlIGNhc2U6IGNoYW5naW5nIGZyb20gJ3RydWUnIHRvICdmYWxzZScKICAgICAg
ICAgLy8gY2F1c2VzIGFuIGltbWVkaWF0ZSBkaXNwYXRjaCBvZiB0aGUgU1ZHTG9hZCBldmVudC4g
SWYgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB3YXMgJ2ZhbHNlJyBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBz
Y3JpcHQgZWxlbWVudAogICAgICAgICAvLyBpbiB0aGUgZG9jdW1lbnQsIHRoZSBTVkdMb2FkIGV2
ZW50IGhhcyBhbHJlYWR5IGJlZW4gZGlzcGF0Y2hlZC4KLSAgICAgICAgaWYgKCFleHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKCkgJiYgIWhhdmVGaXJlZExvYWRFdmVudCgpICYmICF3
YXNJbnNlcnRlZEJ5UGFyc2VyKCkpIHsKKyAgICAgICAgaWYgKCFleHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkQmFzZVZhbHVlKCkgJiYgIWhhdmVGaXJlZExvYWRFdmVudCgpICYmICFpc1BhcnNlcklu
c2VydGVkKCkpIHsKICAgICAgICAgICAgIHNldEhhdmVGaXJlZExvYWRFdmVudCh0cnVlKTsKICAg
ICAgICAgICAgIEFTU0VSVChoYXZlTG9hZGVkUmVxdWlyZWRSZXNvdXJjZXMoKSk7CiAKQEAgLTEx
MSw5ICsxMTEsOSBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVUb1ByCiB2
b2lkIFNWR1NjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBTVkdF
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIFNjcmlwdEVsZW1lbnQ6Omluc2Vy
dGVkSW50b0RvY3VtZW50KHNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkpOworICAgIFNjcmlwdEVsZW1l
bnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAKLSAgICBpZiAod2FzSW5zZXJ0ZWRCeVBhcnNl
cigpKQorICAgIGlmIChpc1BhcnNlckluc2VydGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIEV2ZW50dWFsbHkgc2VuZCBTVkdMb2FkIGV2ZW50IG5vdyBmb3IgdGhlIGR5bmFtaWNhbGx5
IGluc2VydGVkIHNjcmlwdCBlbGVtZW50CkBAIC0xNDIsNyArMTQyLDYgQEAgYm9vbCBTVkdTY3Jp
cHRFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdAogCiB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmZp
bmlzaFBhcnNpbmdDaGlsZHJlbigpCiB7Ci0gICAgU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2lu
Z0NoaWxkcmVuKHNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkpOwogICAgIFNWR0VsZW1lbnQ6OmZpbmlz
aFBhcnNpbmdDaGlsZHJlbigpOwogCiAgICAgLy8gQSBTVkdMb2FkIGV2ZW50IGhhcyBiZWVuIGZp
cmVkIGJ5IFNWR0VsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbi4KQEAgLTIxMiwxMSArMjEx
LDE2IEBAIGJvb2wgU1ZHU2NyaXB0RWxlbWVudDo6ZGVmZXJBdHRyaWJ1dGVWYWwKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK2Jvb2wgU1ZHU2NyaXB0RWxlbWVudDo6aGFzU291cmNlQXR0cmlidXRl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzQXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRy
KTsKK30KKwogdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVudCgpCiB7CiAg
ICAgYm9vbCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkID0gZXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZEJhc2VWYWx1ZSgpOwogCi0gICAgaWYgKHdhc0luc2VydGVkQnlQYXJzZXIoKSkKKyAgICBp
ZiAoaXNQYXJzZXJJbnNlcnRlZCgpKQogICAgICAgICBBU1NFUlQoZXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCAhPSBoYXZlRmlyZWRMb2FkRXZlbnQoKSk7CiAgICAgZWxzZSBpZiAoaGF2ZUZpcmVk
TG9hZEV2ZW50KCkpIHsKICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmaXJlZCBhbiBsb2Fk
IGV2ZW50IGFuZCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIGlzIHNldCB0byAndHJ1ZScKQEAg
LTI0Nyw3ICsyNTEsNyBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVu
CiAKIFBhc3NSZWZQdHI8RWxlbWVudD4gU1ZHU2NyaXB0RWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0
aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTVkdTY3JpcHRFbGVtZW50KHRhZ1FOYW1lKCksIGRvY3VtZW50KCksIGZhbHNlLCB3YXNB
bHJlYWR5U3RhcnRlZCgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTY3JpcHRFbGVt
ZW50KHRhZ1FOYW1lKCksIGRvY3VtZW50KCksIGZhbHNlLCBhbHJlYWR5U3RhcnRlZCgpKSk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24g
NzkwNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFR5cGUoY29uc3Qg
U3RyaW5nJik7CiAKIHByaXZhdGU6Ci0gICAgU1ZHU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIHdhc0luc2VydGVkQnlQYXJzZXIsIGJvb2wgd2FzQWxy
ZWFkeVN0YXJ0ZWQpOworICAgIFNWR1NjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50KiwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCBib29sIGFscmVhZHlTdGFydGVk
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKQEAgLTY4LDYgKzY4LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyBldmVudEF0dHJpYnV0ZVZhbHVlKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGFzeW5jQXR0cmlidXRlVmFsdWUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBoYXNTb3VyY2VBdHRyaWJ1dGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aExvYWRFdmVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEVycm9yRXZlbnQoKTsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDc5MDYxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDItMTggIEphbWVzIFNpbW9uc2VuICA8c2lt
b25qYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisK
KyAgICAgICAgTWFrZSBTY3JpcHRFbGVtZW50IG1hdGNoIHRoZSBIVE1MNSBzcGVjCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY3NgorCisgICAgICAg
IFRoaXMgaW1wbGVtZW50cyB0aGUgInByZXBhcmUgYSBzY3JpcHQiIHNlY3Rpb24gb2YgdGhlIEhU
TUw1IHNwZWMgaW4gU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdCgpLgorICAgICAgICBodHRw
Oi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9z
Y3JpcHRpbmctMS5odG1sI3ByZXBhcmUtYS1zY3JpcHQKKworICAgICAgICBUaGVyZSBhcmUgYSBj
b3VwbGUgb2YgdGhpbmdzIG1pc3NpbmcgZnJvbSB0aGUgc3BlYyB0aGF0IHdvdWxkIGJlIG5ldyBm
dW5jdGlvbmFsaXR5LiBUaGVzZSB3aWxsIGJlIGFkZGVkIGxhdGVyLgorICAgICAgICAtIFN1cHBv
cnQgZm9yIGFzeW5jPWZhbHNlCisgICAgICAgIC0gRW1wdHkgc3JjIGF0dHJpYnV0ZSBzaG91bGQg
ZGlzcGF0Y2ggYW4gZXJyb3IuCisKKyAgICAgICAgVGhlcmUgYXJlIGEgY291cGxlIG9mIHNsaWdo
dCBiZWhhdmlvcmFsIGNoYW5nZXMgdG8gbWF0Y2ggdGhlIHNwZWMuCisgICAgICAgIC0gQW4gWEhU
TUwgc2NyaXB0IHRoYXQgaXMgbG9hZGVkIHRoZW4gY29waWVkIHdpbGwgbm90IGZpcmUgbG9hZCBv
biB0aGUgY29weS4KKyAgICAgICAgLSBJZiBvbmJlZm9yZWxvYWQgbW92ZXMgdGhlIHNjcmlwdCB0
byBhIGRpZmZlcmVudCBkb2N1bWVudCwgdGhlbiBpdCB3aWxsIG5vdCB0cnkgdG8gZXhlY3V0ZSBh
Z2FpbiBiZWNhdXNlIHdhc0FscmVhZHlTdGFydGVkIGlzIHRydWUuCisKKyAgICAgICAgVGhlIHBh
cnNlcnMgd2VyZSB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IEFQSSwgYnV0IG5vdCByZXdyaXR0ZW4g
dG8gbG9vayBsaWtlIHRoZSBzcGVjLiBUaGF0IHdpbGwgYmUgZG9uZSBzZXBhcmF0ZWx5LgorCisg
ICAgICAgICogZmFzdC9kb20vSFRNTFNjcmlwdEVsZW1lbnQvbW92ZS1pbi1iZWZvcmVsb2FkLmh0
bWw6IE9yaWdpbmFsIGF1dGhvciBzYXlzIHRlc3Qgd2FzIG9ubHkgbWVhbnQgdG8gY2hlY2sgZm9y
IGNyYXNoZXMuIEJlZm9yZWxvYWQgaXMgbm90IHNwZWNpZmllZCBieSBIVE1MNS4gVGVzdCB3YXMg
bW9kaWZpZWQgdG8gYXNzdW1lIG1vdmVkIHNjcmlwdCB3b3VsZG4ndCBleGVjdXRlIGJlY2F1c2Ug
d2FzQWxyZWFkeVN0YXJ0ZWQgaXMgc2V0LgorICAgICAgICAqIGZhc3QvZG9tL3NjcmlwdC1jbG9u
ZS1yZXJ1bi1zcmMueGh0bWw6IEFjY29yZGluZyB0byBIVE1MNSBzcGVjLCBsb2FkIHNob3VsZCBv
bmx5IGZpcmUgYWZ0ZXIgYSBzY3JpcHQgZXhlY3V0ZXMuIFRlc3Qgd2FzIG1vZGlmaWVkIHRvIG1h
dGNoIHRoYXQuIFRoZSBvbGQgYnJva2VuIGJlaGF2aW9yIHdhcyB0aGF0IGxvYWQgZmlyZWQgb24g
dGhlIGNsb25lZCBlbGVtZW50LCBldmVuIHRob3VnaCBpdCBkaWRuJ3QgZXhlY3V0ZS4KKwogMjAx
MS0wMi0xOCAgY2hyaXMgcmVpc3MgIDxjaHJpc3RvcGhlci5yZWlzc0Bub2tpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zcmMueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNyYy54aHRtbAkocmV2aXNpb24gNzkwNjEp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtY2xvbmUtcmVydW4tc3JjLnhodG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0xMSwzNiArMTEsMzAgQEAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgewogICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiB9Ci0KLXZhciBmaXJzdExvYWQg
PSB0cnVlOwotCi1mdW5jdGlvbiBsb2FkZWQoKSB7Ci0gICAgaWYgKGZpcnN0TG9hZCkgewotICAg
ICAgICBmaXJzdExvYWQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJl
c3VsdCA9ICdQQVNTJzsKLSAgICBpZiAoaSA9PSAyKQotICAgICAgcmVzdWx0ID0gJ0ZBSUw6IHNj
cmlwdCByYW4gdHdpY2UnOwotICAgIGVsc2UgaWYgKGkgPiAyKQotICAgICAgcmVzdWx0ID0gJ0ZB
SUw6IHNjcmlwdCByYW4gJyArIGkgKyAnIHRpbWVzJzsKLSAgICBkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlc3VsdCkpOwotCi0gICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotfQotCiA8L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5
PgogPHA+VGhpcyB0ZXN0IHJ1bnMgYSBzY3JpcHQgdGhhdCBjbG9uZXMgYW5kIGluc2VydHMgaXRz
IHNjcmlwdCBlbGVtZW50LiBUaGUgc2NyaXB0IHNob3VsZCBydW4gZXhhY3RseSBvbmNlIGFuZCBw
cmludCBQQVNTOjwvcD4KLTxkaXY+PHNjcmlwdCBzcmM9InJlc291cmNlcy9zY3JpcHQtY2xvbmUt
cmVydW4tc3JjLmpzIiBvbmxvYWQ9ImxvYWRlZCgpIj48L3NjcmlwdD48L2Rpdj4KKzxkaXY+PHNj
cmlwdCBzcmM9InJlc291cmNlcy9zY3JpcHQtY2xvbmUtcmVydW4tc3JjLmpzIj48L3NjcmlwdD48
L2Rpdj4KIDxzY3JpcHQ+CiAKIHZhciBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnc2NyaXB0JylbMV07CiB2YXIgZGl2ID0gc2NyaXB0LnBhcmVudE5vZGU7CiBkaXYucmVt
b3ZlQ2hpbGQoc2NyaXB0KTsKLWRpdi5hcHBlbmRDaGlsZChzY3JpcHQuY2xvbmVOb2RlKHRydWUp
KTsKK3ZhciBjbG9uZSA9IHNjcmlwdC5jbG9uZU5vZGUodHJ1ZSk7CitjbG9uZS5hZGRFdmVudExp
c3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoIkZBSUw6IGxvYWQgZXZlbnQgZmlyZWQgb24gY2xvbmUiKSk7
IH0sIGZhbHNlKTsKK2Rpdi5hcHBlbmRDaGlsZChjbG9uZSk7CisKK3NldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCBuZXZlciByYW4nOworICAgIGlmIChp
ID09IDEpCisgICAgICByZXN1bHQgPSAnUEFTUyc7CisgICAgZWxzZSBpZiAoaSA+IDEpCisgICAg
ICByZXN1bHQgPSAnRkFJTDogc2NyaXB0IHJhbiAnICsgaSArICcgdGltZXMnOworICAgIGRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdWx0KSk7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0sIDApOwogCiA8L3NjcmlwdD4KIDwvYm9keT4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxTY3JpcHRFbGVtZW50L21vdmUtaW4tYmVm
b3JlbG9hZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxTY3Jp
cHRFbGVtZW50L21vdmUtaW4tYmVmb3JlbG9hZC5odG1sCShyZXZpc2lvbiA3OTA2MSkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxTY3JpcHRFbGVtZW50L21vdmUtaW4tYmVmb3JlbG9hZC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC04LDcgKzgsNiBAQAogPGlmcmFtZSBzcmM9InJlc291cmNl
cy9mcmFtZS5odG1sIj48L2lmcmFtZT4KIDxzY3JpcHQ+CiBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwog
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKIH0KIApAQCAtMTgsMTQgKzE3
LDEzIEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIHMuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlbG9h
ZCIsIGZ1bmN0aW9uKCkgewogICAgICAgICB2YXIgcyA9IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hp
bGQoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzJdKTsKICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlmcmFtZSIpWzBdLmNvbnRlbnREb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKHMpOworICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKICAgICB9LCBm
YWxzZSk7CiAgICAgcy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIGZ1bmN0aW9uKCkgewotICAg
ICAgICB0ZXN0RmFpbGVkKCJlcnJvciBldmVudCBzaG91bGQgbm90IGZpcmUuIikKKyAgICAgICAg
dGVzdEZhaWxlZCgiZXJyb3IgZXZlbnQgc2hvdWxkIG5vdCBmaXJlLiIpOwogICAgIH0sIGZhbHNl
KTsKICAgICBzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKLSAgICAgICAg
dGVzdFBhc3NlZCgiIik7Ci0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
Ci0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAg
IHRlc3RGYWlsZWQoInNjcmlwdCBzaG91bGQgbm90IGJlIGxvYWRlZCIpOwogICAgIH0sIGZhbHNl
KTsKICAgICBzLnNyYyA9ICJleHRlcm5hbC5qcyI7CiAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChzKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>