<?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>91703</bug_id>
          
          <creation_ts>2012-07-18 19:17:10 -0700</creation_ts>
          <short_desc>Use the original token to create an element in &quot;reconstruct the active formatting elements&quot; and &quot;call the adoption agency&quot;</short_desc>
          <delta_ts>2012-07-23 16:16:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>91981</dependson>
          <blocked>90751</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kwang Yul Seo">skyul</reporter>
          <assigned_to name="Kwang Yul Seo">skyul</assigned_to>
          <cc>abarth</cc>
    
    <cc>aestes</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>673083</commentid>
    <comment_count>0</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-18 19:17:10 -0700</bug_when>
    <thetext>The current WebKit HTML5 parser implementation does not hold the original token in the stack of open elements and the active formatting elements. This is problematic because the original token is used create an element in &quot;reconstruct the active formatting elements&quot; and &quot;call the adoption agency&quot;. As a workaround, WebKit uses the saved element instead of the original token to create an element. But this is wrong as described in the following FIXME comment:

PassRefPtr&lt;Element&gt; HTMLConstructionSite::createHTMLElementFromSavedElement(Element* element)
{
    // FIXME: This method is wrong.  We should be using the original token.
    // Using an Element* causes us to fail examples like this:
    // &lt;b id=&quot;1&quot;&gt;&lt;p&gt;&lt;script&gt;document.getElementById(&quot;1&quot;).id = &quot;2&quot;&lt;/script&gt;&lt;/p&gt;TEXT&lt;/b&gt;
    // When reconstructTheActiveFormattingElements calls this method to open
    // a second &lt;b&gt; tag to wrap TEXT, it will have id &quot;2&quot;, even though the HTML5
    // spec implies it should be &quot;1&quot;.  Minefield matches the HTML5 spec here.
    ...
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673096</commentid>
    <comment_count>1</comment_count>
      <attachid>153161</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-18 19:39:16 -0700</bug_when>
    <thetext>Created attachment 153161
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673101</commentid>
    <comment_count>2</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-18 19:42:00 -0700</bug_when>
    <thetext>run-perf-tests html-parser.html

* Before

kseo@kseo:WebKitLatest (master)&gt; ./Tools/Scripts/run-perf-tests --platform=chromium PerformanceTests/Parser/html-parser.html
Running 1 tests
Running Parser/html-parser.html (1 of 1)
RESULT Parser: html-parser= 2143.35 ms
median= 2143.0 ms, stdev= 5.57023338829 ms, min= 2132.0 ms, max= 2152.0 ms

* After

kseo@kseo:WebKitLatest (master)&gt; ./Tools/Scripts/run-perf-tests --platform=chromium PerformanceTests/Parser/html-parser.html
Running 1 tests
Running Parser/html-parser.html (1 of 1)
RESULT Parser: html-parser= 2197.95 ms
median= 2197.0 ms, stdev= 6.65187943366 ms, min= 2186.0 ms, max= 2210.0 ms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673133</commentid>
    <comment_count>3</comment_count>
      <attachid>153174</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-18 21:21:35 -0700</bug_when>
    <thetext>Created attachment 153174
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673134</commentid>
    <comment_count>4</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-18 21:21:53 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=153174) [details]
&gt; Patch

Fixed a typo in the change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673136</commentid>
    <comment_count>5</comment_count>
      <attachid>153174</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-18 21:36:19 -0700</bug_when>
    <thetext>Comment on attachment 153174
Patch

I expect this to be a slowdown of the HTML5 parser benchmark.  This is a per-token malloc...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673158</commentid>
    <comment_count>6</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-18 22:01:49 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 153174 [details])
&gt; I expect this to be a slowdown of the HTML5 parser benchmark.  This is a per-token malloc...

That&apos;s right. What do you think of the PerfTest result above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673161</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-18 22:03:38 -0700</bug_when>
    <thetext>So, a 2.5% slowdown?  I&apos;m not sure this bug is worth fixing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673169</commentid>
    <comment_count>8</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-18 22:18:50 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; So, a 2.5% slowdown?  I&apos;m not sure this bug is worth fixing.

I worked on this bug because this is a prerequisite for Bug 90751. To proceed parsing speculatively while waiting for the parser blocking script to be loaded and executed, the parser must be able to query the stack of open elements and the active formatting elements without actually creating elements. To do so, the stack of open elements and the active formatting elements must have the original token of each element.

Firefox does not have this bug because it stores the original token of each element in the stack of open elements and the active formatting elements. Each entry in these data structures is of type nsHtml5StackNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673171</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-18 22:22:16 -0700</bug_when>
    <thetext>Interesting.  Unblocking speculative parsing would be a good reason to fix this bug (assuming speculative parsing is a win).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673179</commentid>
    <comment_count>10</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-18 22:34:59 -0700</bug_when>
    <thetext>2.5% slowdown is not a performance regression because this patch actually fixes a bug. Let me ask this in another way. Are we willing make an intentional violation of HTML5 spec if that gives us 2.5% speedup in HTML parser benchmarks and the bug is minor?  Of course, I know it depends on how minor the bug is :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673391</commentid>
    <comment_count>11</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-19 04:46:40 -0700</bug_when>
    <thetext>I found another FIXME that mentions about running the parser off the main thread:

bool HTMLElementStack::isHTMLIntegrationPoint(ContainerNode* node)
{
    if (!node-&gt;isElementNode())
        return false;
    Element* element = static_cast&lt;Element*&gt;(node);
    if (element-&gt;hasTagName(MathMLNames::annotation_xmlTag)) {
        // FIXME: Technically we shouldn&apos;t read back from the DOM here.
        // Instead, we&apos;re supposed to track this information in the element
        // stack, which lets the parser run on its own thread.
        String encoding = element-&gt;fastGetAttribute(MathMLNames::encodingAttr);
        return equalIgnoringCase(encoding, &quot;text/html&quot;)
            || equalIgnoringCase(encoding, &quot;application/xhtml+xml&quot;);
    }   
    return element-&gt;hasTagName(SVGNames::foreignObjectTag)
        || element-&gt;hasTagName(SVGNames::descTag)
        || element-&gt;hasTagName(SVGNames::titleTag);
}

Once we keep tokens in the element stack, we don&apos;t need to read back from the DOM tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673410</commentid>
    <comment_count>12</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-19 05:36:56 -0700</bug_when>
    <thetext>I am working on the next patch which changes HTMLElementStack, HTMLFormattingElementList and HTMLTreeBuilder to perform operations using tokens instead of elements. 

My work-in-progress patch shows slight performance improvement:

kseo@kseo:WebKitLatest (master)&gt; ./Tools/Scripts/run-perf-tests --platform=chromium PerformanceTests/Parser/html-parser.html
Running 1 tests
Running Parser/html-parser.html (1 of 1)
RESULT Parser: html-parser= 2165.55 ms
median= 2176.5 ms, stdev= 49.750854264 ms, min= 1950.0 ms, max= 2187.0 ms

I will upload the patch and share the test result again once it is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673412</commentid>
    <comment_count>13</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-19 05:39:00 -0700</bug_when>
    <thetext>(In reply to comment #12)
Oops. stddev is quite large here. I don&apos;t know why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673559</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-19 09:12:13 -0700</bug_when>
    <thetext>&gt; 2.5% slowdown is not a performance regression because this patch actually fixes a bug.

That&apos;s not an accurate statement.  Every slowdown is a performance regression.  We can decide whether the benefits of the patch outweigh the performance costs, but the performance costs are real.

&gt; Let me ask this in another way. Are we willing make an intentional violation of HTML5 spec if that gives us 2.5% speedup in HTML parser benchmarks and the bug is minor?

Yes.

&gt; Of course, I know it depends on how minor the bug is :)

Correct.  If everyone in the world will live a happy life and never encounter the bug, then they will live (slightly) happier lives with a parser that&apos;s 2.5% faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673977</commentid>
    <comment_count>15</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-19 15:27:17 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; That&apos;s not an accurate statement.  Every slowdown is a performance regression.  We can decide whether the benefits of the patch outweigh the performance costs, but the performance costs are real.

Okay. I agree! It seems I have a few options:

1) Reduce the performance costs of this patch.
e.g., try to avoid per token malloc or bring up an efficient way to do per token malloc

2) Explain more about the potential benefits of this patch. 
e.g., show the real performance benefits of speculative HTML parsing (or off the main thread parsing) that is possible thanks to this change.

3) Show the real harms caused by the bug.
e.g., browser compatibility. At least Gecko does not have this bug.

I am currently working on 2), but I will see if I can do 1). Maybe someone can comment more on 3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674062</commentid>
    <comment_count>16</comment_count>
      <attachid>153375</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-19 16:47:32 -0700</bug_when>
    <thetext>Created attachment 153375
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674072</commentid>
    <comment_count>17</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-19 16:51:04 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Created an attachment (id=153375) [details]
&gt; Patch

Avoid allocating a HTMLStackNode in HTMLConstructionSite::insertFormattingElement. 

Minor performance improvement. No observable change in HTML5 parser benchmark.

diff --git a/Source/WebCore/html/parser/HTMLConstructionSite.cpp b/Source/WebCore/html/parser/HTMLConstructionSite.cpp
index 4fc498a..6727e9c 100644
--- a/Source/WebCore/html/parser/HTMLConstructionSite.cpp
+++ b/Source/WebCore/html/parser/HTMLConstructionSite.cpp
@@ -331,7 +331,7 @@ void HTMLConstructionSite::insertFormattingElement(AtomicHTMLToken&amp; token)
     // Possible active formatting elements include:
     // a, b, big, code, em, font, i, nobr, s, small, strike, strong, tt, and u.
     insertHTMLElement(token);
-    m_activeFormattingElements.append(HTMLStackNode::create(currentElement(), token));
+    m_activeFormattingElements.append(currentElementRecord()-&gt;stackNode());
 }
 
 void HTMLConstructionSite::insertScriptElement(AtomicHTMLToken&amp; token)
diff --git a/Source/WebCore/html/parser/HTMLConstructionSite.h b/Source/WebCore/html/parser/HTMLConstructionSite.h
index aafefdf..06d5165 100644
--- a/Source/WebCore/html/parser/HTMLConstructionSite.h
+++ b/Source/WebCore/html/parser/HTMLConstructionSite.h
@@ -118,6 +118,7 @@ public:
     void generateImpliedEndTagsWithExclusion(const AtomicString&amp; tagName);
 
     bool isEmpty() const { return !m_openElements.stackDepth(); }
+    HTMLElementStack::ElementRecord* currentElementRecord() const { return m_openElements.topRecord(); }
     Element* currentElement() const { return m_openElements.top(); }
     ContainerNode* currentNode() const { return m_openElements.topNode(); }
     Element* oneBelowTop() const { return m_openElements.oneBelowTop(); }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674122</commentid>
    <comment_count>18</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-19 21:14:49 -0700</bug_when>
    <thetext>Please forget the previous reported perf tests. I&apos;ve just found that perf tests vary so much from one test run to another on my machine (Ubuntu, Intel Xeon 6-core).  So I ran perf tests again on my MacBook pro. perf tests results are quite stable on MacBook.

Before

kseo@cat:WebKit (master)&gt; ./Tools/Scripts/run-perf-tests Parser/html-parser.html
Running 1 tests
Running Parser/html-parser.html (1 of 1)
RESULT Parser: html-parser= 2725.5 ms
median= 2727.0 ms, stdev= 9.3139680051 ms, min= 2713.0 ms, max= 2740.0 ms

After

kseo@cat:WebKit (master)&gt; ./Tools/Scripts/run-perf-tests Parser/html-parser.html
Running 1 tests
Running Parser/html-parser.html (1 of 1)
RESULT Parser: html-parser= 2769.0 ms
median= 2772.5 ms, stdev= 9.66436754268 ms, min= 2755.0 ms, max= 2783.0 ms

So it&apos;s a 1.6% slowdown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674339</commentid>
    <comment_count>19</comment_count>
      <attachid>153450</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-20 01:59:02 -0700</bug_when>
    <thetext>Created attachment 153450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674346</commentid>
    <comment_count>20</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-20 02:03:43 -0700</bug_when>
    <thetext>I avoided copying tokens by ref counting AtomicHTMLToken. Now it&apos;s a 0.5-0.6% slowdown!

* Before

kseo@cat:WebKit (master)&gt; ./Tools/Scripts/run-perf-tests Parser/html-parser.html
Running 1 tests
Running Parser/html-parser.html (1 of 1)
RESULT Parser: html-parser= 2725.5 ms
median= 2727.0 ms, stdev= 9.3139680051 ms, min= 2713.0 ms, max= 2740.0 ms

* After
kseo@cat:WebKit (master)&gt; ./Tools/Scripts/run-perf-tests Parser/html-parser.html
Running 1 tests
Running Parser/html-parser.html (1 of 1)
RESULT Parser: html-parser= 2740.7 ms
median= 2740.5 ms, stdev= 4.16052881254 ms, min= 2734.0 ms, max= 2749.0 ms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674348</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-20 02:07:33 -0700</bug_when>
    <thetext>&gt; Now it&apos;s a 0.5-0.6% slowdown!

Awesome.  We usually don&apos;t worry about slowdowns in that range.  The benchmark is precise enough to measure them, but things bounce around +/- 1% based on cache lines and silly things like that.  Thanks for iterating on the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675170</commentid>
    <comment_count>22</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-20 22:19:39 -0700</bug_when>
    <thetext>There is another FIXME comment in HTMLFormattingElementList::ensureNoahsArkCondition(Element*).

    // FIXME: Technically we shouldn&apos;t read this information back from
    // the DOM. Instead, the parser should keep a copy of the information.
    // This isn&apos;t really much of a problem for our implementation because
    // we run the parser on the main thread, but the spec is written so
    // that implementations can run off the main thread. If JavaScript
    // changes the attributes values, we could get a slightly wrong
    // output here.
    if (candidate-&gt;fastGetAttribute(attribute-&gt;name()) == attribute-&gt;value())
        remainingCandidates.append(candidate);

I will fix this after this patch is landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675204</commentid>
    <comment_count>23</comment_count>
      <attachid>153658</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-21 01:16:25 -0700</bug_when>
    <thetext>Created attachment 153658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675205</commentid>
    <comment_count>24</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-21 01:18:14 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Created an attachment (id=153658) [details]
&gt; Patch

Rebased to the latest revision because the previous patch conflicts with r123289: &lt;http://trac.webkit.org/changeset/123289&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675422</commentid>
    <comment_count>25</comment_count>
      <attachid>153658</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-22 20:56:58 -0700</bug_when>
    <thetext>Comment on attachment 153658
Patch

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

This patch is so large!  Can we break it up into some smaller steps?  For example, one step might be to make the token refcounted and change all the method types.  That&apos;s a large part of this change but it&apos;s all mechanical.  Then we can look at the behavior changing part of the patch in more detail.  I&apos;ve left a few minor comments below.

Thanks for working on this patch.  I think we just need to work on landing this carefully now.

&gt; Source/WebCore/html/parser/HTMLConstructionSite.h:109
&gt; +    PassRefPtr&lt;HTMLStackNode&gt; createElementFromSavedToken(PassRefPtr&lt;HTMLStackNode&gt;);

PassRefPtr&lt;HTMLStackNode&gt; -&gt; HTMLStackNode*

There no transfer of ownership here and so no need to use PassRefPtr.

&gt; Source/WebCore/html/parser/HTMLElementStack.cpp:330
&gt; -void HTMLElementStack::pushHTMLHeadElement(PassRefPtr&lt;Element&gt; element)
&gt; +void HTMLElementStack::pushHTMLHeadElement(PassRefPtr&lt;HTMLStackNode&gt; node)

I might have picked a different name than |node| for these variables since node means something in the context of the DOM.  It&apos;s confusing to have elements and nodes with the nodes not actually being DOM nodes...  Perhaps |item| ?

&gt; Source/WebCore/html/parser/HTMLElementStack.h:60
&gt; +        ContainerNode* node() const { return m_node-&gt;node(); }

m_node-&gt;node is another indication that this name isn&apos;t optimum.

&gt; Source/WebCore/html/parser/HTMLStackNode.h:47
&gt; +        RefPtr&lt;AtomicHTMLToken&gt; fakeToken = AtomicHTMLToken::create(HTMLTokenTypes::StartTag, &quot;&quot;);
&gt; +        return adoptRef(new HTMLStackNode(node, fakeToken.get()));

This is strange.  What does it mean to have an AtomicHTMLToken with an empty tag name...  I wonder if there&apos;s a better way to represent this state.

Also, presumably fakeToken.release().

&gt; Source/WebCore/html/parser/HTMLStackNode.h:69
&gt; +    HTMLStackNode(PassRefPtr&lt;ContainerNode&gt; node, AtomicHTMLToken* token, const AtomicString&amp; namespaceURI = HTMLNames::xhtmlNamespaceURI)

AtomicHTMLToken -&gt; PassRefPtr&lt;AtomicHTMLToken&gt; because we&apos;re taking a reference.

&gt; Source/WebCore/html/parser/HTMLStackNode.h:76
&gt; +    HTMLStackNode(Element* element, AtomicHTMLToken* token, const AtomicString&amp; namespaceURI = HTMLNames::xhtmlNamespaceURI)

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675423</commentid>
    <comment_count>26</comment_count>
      <attachid>153658</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-22 20:57:32 -0700</bug_when>
    <thetext>Comment on attachment 153658
Patch

r- for size.  Let&apos;s land this change in smaller pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675427</commentid>
    <comment_count>27</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-22 21:02:27 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 153658 [details])
&gt; r- for size.  Let&apos;s land this change in smaller pieces.

Thanks for your review! I will split the patch into smaller pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675640</commentid>
    <comment_count>28</comment_count>
      <attachid>153780</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 05:22:12 -0700</bug_when>
    <thetext>Created attachment 153780
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675645</commentid>
    <comment_count>29</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 05:29:34 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; This patch is so large!  Can we break it up into some smaller steps?
I split the patch into two pieces. Bug 91981 makes the token ref-counted and changes all the method types.

&gt; &gt; Source/WebCore/html/parser/HTMLConstructionSite.h:109
&gt; &gt; +    PassRefPtr&lt;HTMLStackNode&gt; createElementFromSavedToken(PassRefPtr&lt;HTMLStackNode&gt;);
&gt; 
&gt; PassRefPtr&lt;HTMLStackNode&gt; -&gt; HTMLStackNode*
&gt; 
&gt; There no transfer of ownership here and so no need to use PassRefPtr.

Done.

&gt; &gt; Source/WebCore/html/parser/HTMLElementStack.cpp:330
&gt; &gt; -void HTMLElementStack::pushHTMLHeadElement(PassRefPtr&lt;Element&gt; element)
&gt; &gt; +void HTMLElementStack::pushHTMLHeadElement(PassRefPtr&lt;HTMLStackNode&gt; node)
&gt; 
&gt; I might have picked a different name than |node| for these variables since node means something in the context of the DOM.  It&apos;s confusing to have elements and nodes with the nodes not actually being DOM nodes...  Perhaps |item| ?

Okay. I renamed HTMLStackNode to HTMLStackItem and used |item| for these variables.

&gt; &gt; Source/WebCore/html/parser/HTMLElementStack.h:60
&gt; &gt; +        ContainerNode* node() const { return m_node-&gt;node(); }
&gt; 
&gt; m_node-&gt;node is another indication that this name isn&apos;t optimum.

Now it&apos;s m_item-&gt;node.
 
&gt; &gt; Source/WebCore/html/parser/HTMLStackNode.h:47
&gt; &gt; +        RefPtr&lt;AtomicHTMLToken&gt; fakeToken = AtomicHTMLToken::create(HTMLTokenTypes::StartTag, &quot;&quot;);
&gt; &gt; +        return adoptRef(new HTMLStackNode(node, fakeToken.get()));
&gt; 
&gt; This is strange.  What does it mean to have an AtomicHTMLToken with an empty tag name...  I wonder if there&apos;s a better way to represent this state.

I created another HTMLStackItem constructor for this. m_isDocumentFragmentNode is used to mark this. Currently, there is no use of this member, but it will be used in the following patches.

&gt; Also, presumably fakeToken.release().

No fakeToken anymore.
 
&gt; &gt; Source/WebCore/html/parser/HTMLStackNode.h:69
&gt; &gt; +    HTMLStackNode(PassRefPtr&lt;ContainerNode&gt; node, AtomicHTMLToken* token, const AtomicString&amp; namespaceURI = HTMLNames::xhtmlNamespaceURI)
&gt; 
&gt; AtomicHTMLToken -&gt; PassRefPtr&lt;AtomicHTMLToken&gt; because we&apos;re taking a reference.

Done.

&gt; &gt; Source/WebCore/html/parser/HTMLStackNode.h:76
&gt; &gt; +    HTMLStackNode(Element* element, AtomicHTMLToken* token, const AtomicString&amp; namespaceURI = HTMLNames::xhtmlNamespaceURI)
&gt; 
&gt; ditto


Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675647</commentid>
    <comment_count>30</comment_count>
      <attachid>153783</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 05:32:57 -0700</bug_when>
    <thetext>Created attachment 153783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675648</commentid>
    <comment_count>31</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 05:33:33 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Created an attachment (id=153783) [details]
&gt; Patch

Change HTMLStackNode to HTMLStackItem in the change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675829</commentid>
    <comment_count>32</comment_count>
      <attachid>153783</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-23 11:06:54 -0700</bug_when>
    <thetext>Comment on attachment 153783
Patch

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

Thanks.  This is so much easier to read.  A couple minor points below, but this looks great.

&gt; Source/WebCore/html/parser/HTMLFormattingElementList.cpp:92
&gt; +    RefPtr&lt;HTMLStackItem&gt; newItem = prpNewItem;

Ideally we would call newItem.release() at some point in this function to save a ref()/deref() pair.  Can we call release on line 103?

&gt; Source/WebCore/html/parser/HTMLFormattingElementList.h:76
&gt; -        bool operator==(Element* element) const { return m_element == element; }
&gt; -        bool operator!=(Element* element) const { return m_element != element; }
&gt; +        bool operator==(Element* element) const { return !m_item ? !element : m_item-&gt;element() == element; }
&gt; +        bool operator!=(Element* element) const { return !m_item ? !!element : m_item-&gt;element() != element; }

This looks slightly complicated, but it seems to make sense.

&gt; Source/WebCore/html/parser/HTMLFormattingElementList.h:115
&gt; -    void swapTo(Element* oldElement, Element* newElement, const Bookmark&amp;);
&gt; +    void swapTo(Element* oldElement, PassRefPtr&lt;HTMLStackItem&gt; prpNewItem, const Bookmark&amp;);

Normally we skip the &quot;prp&quot; prefix in the header.  It&apos;s useful in the implementation because the PassRefPtr variables can become null easily.

&gt; Source/WebCore/html/parser/HTMLStackItem.h:50
&gt; +    static PassRefPtr&lt;HTMLStackItem&gt; create(PassRefPtr&lt;ContainerNode&gt; node, AtomicHTMLToken* token, const AtomicString&amp; namespaceURI = HTMLNames::xhtmlNamespaceURI)

This should be PassRefPtr&lt;AtomicHTMLToken&gt; because we&apos;re going to end up taking a reference to token.  The point of using PassRefPtr in these cases is so that our caller can donate a reference (using release()) if they don&apos;t need their reference anymore.  That saves us a ref()/deref() pair.

&gt; Source/WebCore/html/parser/HTMLStackItem.h:56
&gt; +    static PassRefPtr&lt;HTMLStackItem&gt; create(Element* element, AtomicHTMLToken* token, const AtomicString&amp; namespaceURI = HTMLNames::xhtmlNamespaceURI)

|element| and |AtomicHTMLToken| should use PassRefPtr.

&gt; Source/WebCore/html/parser/HTMLStackItem.h:61
&gt; +    Element* element() const { return toElement(m_node.get()); }

Does toElement have any cost?  It it just an ASSERT plus a static_cast?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676068</commentid>
    <comment_count>33</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 15:20:45 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; &gt; Source/WebCore/html/parser/HTMLFormattingElementList.cpp:92
&gt; &gt; +    RefPtr&lt;HTMLStackItem&gt; newItem = prpNewItem;
&gt; 
&gt; Ideally we would call newItem.release() at some point in this function to save a ref()/deref() pair.  Can we call release on line 103?

Ideally, we won&apos;t need |newItem| because prpNewItem is simply passed to either replaceElement or insert. (but never both.)

 96     if (!bookmark.hasBeenMoved()) {
 97         ASSERT(bookmark.mark()-&gt;element() == oldElement);
 98         bookmark.mark()-&gt;replaceElement(newItem); // &lt;- here
 99         return;
100     }
101     size_t index = bookmark.mark() - first();
102     ASSERT(index &lt; size());
103     m_entries.insert(index + 1, newItem); &lt;- or here
104     remove(oldElement);


&gt; &gt; Source/WebCore/html/parser/HTMLStackItem.h:61
&gt; &gt; +    Element* element() const { return toElement(m_node.get()); }
&gt; 
&gt; Does toElement have any cost?  It it just an ASSERT plus a static_cast?

It is just an ASSERT plus a static_cast.

inline Element* toElement(Node* node)
{
    ASSERT(!node || node-&gt;isElementNode());
    return static_cast&lt;Element*&gt;(node);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676085</commentid>
    <comment_count>34</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 15:36:14 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; &gt; Source/WebCore/html/parser/HTMLStackItem.h:56
&gt; &gt; +    static PassRefPtr&lt;HTMLStackItem&gt; create(Element* element, AtomicHTMLToken* token, const AtomicString&amp; namespaceURI = HTMLNames::xhtmlNamespaceURI)
&gt; 
&gt; |element| and |AtomicHTMLToken| should use PassRefPtr.

Okay. I tried to follow the existing code, but if that&apos;s case we can remove this constructor entirely because we can use the constructor which takes PassRefPtr&lt;ContainerNode&gt; instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676097</commentid>
    <comment_count>35</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-23 15:42:49 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #32)
&gt; &gt; &gt; Source/WebCore/html/parser/HTMLStackItem.h:56
&gt; &gt; &gt; +    static PassRefPtr&lt;HTMLStackItem&gt; create(Element* element, AtomicHTMLToken* token, const AtomicString&amp; namespaceURI = HTMLNames::xhtmlNamespaceURI)
&gt; &gt; 
&gt; &gt; |element| and |AtomicHTMLToken| should use PassRefPtr.
&gt; 
&gt; Okay. I tried to follow the existing code, but if that&apos;s case we can remove this constructor entirely because we can use the constructor which takes PassRefPtr&lt;ContainerNode&gt; instead.

Sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676117</commentid>
    <comment_count>36</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 15:53:46 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; &gt; Okay. I tried to follow the existing code, but if that&apos;s case we can remove this constructor entirely because we can use the constructor which takes PassRefPtr&lt;ContainerNode&gt; instead.
&gt; 
&gt; Sounds good.

Thanks. I will land the patch after reflecting your comments. I really appreciate your kind review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676139</commentid>
    <comment_count>37</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 16:16:11 -0700</bug_when>
    <thetext>Committed r123399: &lt;http://trac.webkit.org/changeset/123399&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153161</attachid>
            <date>2012-07-18 19:39:16 -0700</date>
            <delta_ts>2012-07-18 21:21:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91703-20120719113908.patch</filename>
            <type>text/plain</type>
            <size>35533</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGEyYzdkYTVkNTQxZmM4
NjZmMGZmNmE2MTdlMGJlMzU3M2U1YzJlZS4uMzk3MzAyMjFiZGU0ZjFiZmVkM2Q2MzllNmJiMGM1
NjNhZWZhOWNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDEyLTA3LTE4ICBLd2Fu
ZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgVXNlIHRoZSBvcmln
aW5hbCB0b2tlbiB0byBjcmVhdGUgYW4gZWxlbWVudCBpbiAicmVjb25zdHJ1Y3QgdGhlIGFjdGl2
ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIiBhbmQgImNhbGwgdGhlIGFkb3B0aW9uIGFnZW5jeSIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNzAzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGN1cnJlbnQg
V2ViS2l0IEhUTUw1IHBhcnNlciBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBob2xkIHRoZSBvcmln
aW5hbCB0b2tlbgorICAgICAgICBpbiB0aGUgc3RhY2sgb2Ygb3BlbiBlbGVtZW50cyBhbmQgdGhl
IGFjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzLiBUaGlzIGlzCisgICAgICAgIHByb2JsZW1hdGlj
IGJlY2F1c2UgdGhlIG9yaWdpbmFsIHRva2VuIGlzIHVzZWQgY3JlYXRlIGFuIGVsZW1lbnQgaW4K
KyAgICAgICAgInJlY29uc3RydWN0IHRoZSBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cyIgYW5k
ICJjYWxsIHRoZSBhZG9wdGlvbiBhZ2VuY3kiLgorCisgICAgICAgIEFzIGEgd29ya2Fyb3VuZCwg
V2ViS2l0IHVzZXMgdGhlIHNhdmVkIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdG9r
ZW4KKyAgICAgICAgdG8gY3JlYXRlIGFuIGVsZW1lbnQuIEJ1dCB0aGlzIGNhdXNlcyB1cyB0byBm
YWlsIGV4YW1wbGVzIGxpa2UgdGhpczoKKyAgICAgICAgPGIgaWQ9IjEiPjxwPjxzY3JpcHQ+ZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjEiKS5pZCA9ICIyIjwvc2NyaXB0PjwvcD5URVhUPC9iPgor
ICAgICAgICByZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyBjYWxscyB0aGlz
IG1ldGhvZCB0byBvcGVuIGEgc2Vjb25kIDxiPgorICAgICAgICB0YWcgdG8gd3JhcCBURVhULCBp
dCB3aWxsIGhhdmUgaWQgIjIiLCBldmVuIHRob3VnaCB0aGUgSFRNTDUgc3BlYyBpbXBsaWVzIGl0
CisgICAgICAgIHNob3VsZCBiZSAiMSIuCisKKyAgICAgICAgQ3JlYXRlZCBhIHJlZi1jb3VudGVk
IGNvbnRhaW5lciBjbGFzcywgSFRNTFN0YWNrTm9kZSB0byBob2xkIHRoZSBvcmlnaW5hbCB0b2tl
bgorICAgICAgICBhbmQgdGhlIG5hbWVzcGFjZSBVUkkgYXMgd2VsbCBhcyB0aGUgZWxlbWVudC4g
Q2hhbmdlZCBIVE1MRWxlbWVudFN0YWNrIGFuZAorICAgICAgICBIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0IHRvIHVzZSBIVE1MU3RhY2tOb2RlLgorICAgICAgICBDaGFuZ2VkIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyBhbmQKKyAg
ICAgICAgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3kgdG8gY3JlYXRlIGFu
IGVsZW1lbnQgZnJvbSB0aGUgc2F2ZWQgdG9rZW4KKyAgICAgICAgaW5zdGVhZCBvZiB0aGUgc2F2
ZWQgZWxlbWVudC4KKworICAgICAgICBVcGRhdGVkIHRlc3QgZXhwZWN0YXRpb24gZm9yIGh0bWw1
bGliL3J1bm5lci1leHBlY3RlZC50eHQKKyAgICAgICAgYmVjYXVzZSBub3cgcmVzb3VyY2VzL3Nj
cmlwdGVkL2Fkb3B0aW9uMDEuZGF0IHBhc3Nlcy4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEhlYWRFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keUVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxGb3Jt
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
SFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydEZvcm1hdHRpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JlaWduRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2ZUZv
cm1hdHRpbmdFbGVtZW50cyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlv
blNpdGUuaDoKKyAgICAgICAgKEhUTUxDb25zdHJ1Y3Rpb25TaXRlKToKKyAgICAgICAgKiBodG1s
L3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OkVsZW1lbnRSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6cmVwbGFjZUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaFJvb3ROb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaFJvb3ROb2RlQ29tbW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSGVhZEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaEhUTUxCb2R5RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFib3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbGVtZW50U3RhY2s6OnB1c2hDb21tb24pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxF
bGVtZW50U3RhY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1l
bnRSZWNvcmQ6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZDo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNr
OjpFbGVtZW50UmVjb3JkOjpzdGFja05vZGUpOgorICAgICAgICAoRWxlbWVudFJlY29yZCk6Cisg
ICAgICAgIChIVE1MRWxlbWVudFN0YWNrKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRm9y
bWF0dGluZ0VsZW1lbnRMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3Q6OnN3YXBUbyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0OjphcHBlbmQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3Q6OkVudHJ5OjpFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0OjpFbnRyeTo6aXNNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRp
bmdFbGVtZW50TGlzdDo6RW50cnk6OnN0YWNrTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeTo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeTo6cmVwbGFjZUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6
Om9wZXJhdG9yIT0pOgorICAgICAgICAoRW50cnkpOgorICAgICAgICAoSFRNTEZvcm1hdHRpbmdF
bGVtZW50TGlzdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFN0YWNrTm9kZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSFRNTFN0YWNrTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU3RhY2tOb2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFN0YWNrTm9kZTo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tOb2RlOjpu
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdGFja05vZGU6OnRva2VuKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTdGFja05vZGU6Om5hbWVzcGFjZVVSSSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU3RhY2tOb2RlOjpIVE1MU3RhY2tOb2RlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpI
VE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzU3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhl
QWRvcHRpb25BZ2VuY3kpOgorCiAyMDEyLTA3LTE4ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBEaXJlY3Rpb24gcGFyYW1ldGVyIGlnbm9y
ZWQgYnkgc29tZSBvcGVuQ3Vyc29yKCkgb3ZlcmxvYWRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXggNGRhN2E3YWU5YzYx
MmUwNWRiYzc0NjJkZjQ0YTYwNDY5N2MzMzkyMC4uNGZjNDk4YWQ5NzQwODI2YWZlZTFjYjQ4ZjBh
OGNiNjk4OWRhNDJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIVE1MU2Ny
aXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdGFja05vZGUuaCIKICNpbmNsdWRlICJIVE1M
VG9rZW4uaCIKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVk
U3RyaW5ncy5oIgpAQCAtMTk3LDcgKzE5OCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6
Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYgdG9rCiAg
ICAgUmVmUHRyPEhUTUxIdG1sRWxlbWVudD4gZWxlbWVudCA9IEhUTUxIdG1sRWxlbWVudDo6Y3Jl
YXRlKG1fZG9jdW1lbnQpOwogICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZXModG9rZW4u
YXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgYXR0YWNo
TGF0ZXIobV9hdHRhY2htZW50Um9vdCwgZWxlbWVudCk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVz
aEhUTUxIdG1sRWxlbWVudChlbGVtZW50KTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEh0
bWxFbGVtZW50KEhUTUxTdGFja05vZGU6OmNyZWF0ZShlbGVtZW50LCB0b2tlbikpOwogCiAgICAg
ZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAgICAgZWxlbWVudC0+aW5zZXJ0ZWRCeVBhcnNlcigpOwpA
QCAtMjg1LDcgKzI4Niw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxI
ZWFkRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIEFTU0VSVCghc2hvdWxkRm9z
dGVyUGFyZW50KCkpOwogICAgIG1faGVhZCA9IGNyZWF0ZUhUTUxFbGVtZW50KHRva2VuKTsKICAg
ICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBtX2hlYWQpOwotICAgIG1fb3BlbkVsZW1lbnRz
LnB1c2hIVE1MSGVhZEVsZW1lbnQobV9oZWFkKTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRN
TEhlYWRFbGVtZW50KEhUTUxTdGFja05vZGU6OmNyZWF0ZShtX2hlYWQsIHRva2VuKSk7CiB9CiAK
IHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQpAQCAtMjkzLDcgKzI5NCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlv
blNpdGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
IEFTU0VSVCghc2hvdWxkRm9zdGVyUGFyZW50KCkpOwogICAgIFJlZlB0cjxFbGVtZW50PiBib2R5
ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2Rl
KCksIGJvZHkpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MQm9keUVsZW1lbnQoYm9keS5y
ZWxlYXNlKCkpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MQm9keUVsZW1lbnQoSFRNTFN0
YWNrTm9kZTo6Y3JlYXRlKGJvZHkucmVsZWFzZSgpLCB0b2tlbikpOwogfQogCiB2b2lkIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0
b2tlbiwgYm9vbCBpc0RlbW90ZWQpCkBAIC0zMDMsMTQgKzMwNCwxNCBAQCB2b2lkIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tl
biwgYm9vbCBpcwogICAgIG1fZm9ybSA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50PihlbGVtZW50LnJlbGVhc2UoKSk7CiAgICAgbV9mb3JtLT5zZXREZW1vdGVkKGlzRGVtb3Rl
ZCk7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgbV9mb3JtKTsKLSAgICBtX29wZW5F
bGVtZW50cy5wdXNoKG1fZm9ybSk7CisgICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tO
b2RlOjpjcmVhdGUobV9mb3JtLCB0b2tlbikpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnRIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIFJl
ZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwogICAgIGF0
dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1
c2goZWxlbWVudC5yZWxlYXNlKCkpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNr
Tm9kZTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgpLCB0b2tlbikpOwogfQogCiB2b2lkIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCkBAIC0zMzAsNyArMzMxLDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAv
LyBQb3NzaWJsZSBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cyBpbmNsdWRlOgogICAgIC8vIGEs
IGIsIGJpZywgY29kZSwgZW0sIGZvbnQsIGksIG5vYnIsIHMsIHNtYWxsLCBzdHJpa2UsIHN0cm9u
ZywgdHQsIGFuZCB1LgogICAgIGluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKLSAgICBtX2FjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cy5hcHBlbmQoY3VycmVudEVsZW1lbnQoKSk7CisgICAgbV9hY3Rp
dmVGb3JtYXR0aW5nRWxlbWVudHMuYXBwZW5kKEhUTUxTdGFja05vZGU6OmNyZWF0ZShjdXJyZW50
RWxlbWVudCgpLCB0b2tlbikpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCkBAIC0zNDYsNyArMzQ3LDcg
QEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVudChBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgIGlmIChtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiAh
PSBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpCiAgICAgICAgIGVsZW1lbnQtPnBhcnNlclNldEF0
dHJpYnV0ZXModG9rZW4uYXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
bik7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgZWxlbWVudCk7Ci0gICAgbV9vcGVu
RWxlbWVudHMucHVzaChlbGVtZW50LnJlbGVhc2UoKSk7CisgICAgbV9vcGVuRWxlbWVudHMucHVz
aChIVE1MU3RhY2tOb2RlOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNlKCksIHRva2VuKSk7CiB9CiAK
IHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcmVpZ25FbGVtZW50KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKQpAQCAtMzU3
LDcgKzM1OCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcmVpZ25FbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0CiAgICAgUmVmUHRyPEVsZW1lbnQ+
IGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHRva2VuLCBuYW1lc3BhY2VVUkkpOwogICAgIGF0dGFj
aExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQsIHRva2VuLnNlbGZDbG9zaW5nKCkpOwogICAg
IGlmICghdG9rZW4uc2VsZkNsb3NpbmcoKSkKLSAgICAgICAgbV9vcGVuRWxlbWVudHMucHVzaChl
bGVtZW50LnJlbGVhc2UoKSk7CisgICAgICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNr
Tm9kZTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgpLCB0b2tlbiwgbmFtZXNwYWNlVVJJKSk7CiB9
CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFRleHROb2RlKGNvbnN0IFN0cmlu
ZyYgY2hhcmFjdGVycywgV2hpdGVzcGFjZU1vZGUgd2hpdGVzcGFjZU1vZGUpCkBAIC00MjEsMjgg
KzQyMiwxNCBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVh
dGVIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRvawogICAgIHJldHVybiBlbGVtZW50LnJl
bGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
Y3JlYXRlSFRNTEVsZW1lbnRGcm9tRWxlbWVudFJlY29yZChIVE1MRWxlbWVudFN0YWNrOjpFbGVt
ZW50UmVjb3JkKiByZWNvcmQpCitQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4oUGFzc1JlZlB0cjxIVE1MU3Rh
Y2tOb2RlPiBub2RlKQogewotICAgIHJldHVybiBjcmVhdGVIVE1MRWxlbWVudEZyb21TYXZlZEVs
ZW1lbnQocmVjb3JkLT5lbGVtZW50KCkpOwotfQotCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudEZyb21TYXZlZEVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgd3JvbmcuICBXZSBz
aG91bGQgYmUgdXNpbmcgdGhlIG9yaWdpbmFsIHRva2VuLgotICAgIC8vIFVzaW5nIGFuIEVsZW1l
bnQqIGNhdXNlcyB1cyB0byBmYWlsIGV4YW1wbGVzIGxpa2UgdGhpczoKLSAgICAvLyA8YiBpZD0i
MSI+PHA+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiMSIpLmlkID0gIjIiPC9zY3Jp
cHQ+PC9wPlRFWFQ8L2I+Ci0gICAgLy8gV2hlbiByZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cyBjYWxscyB0aGlzIG1ldGhvZCB0byBvcGVuCi0gICAgLy8gYSBzZWNvbmQgPGI+
IHRhZyB0byB3cmFwIFRFWFQsIGl0IHdpbGwgaGF2ZSBpZCAiMiIsIGV2ZW4gdGhvdWdoIHRoZSBI
VE1MNQotICAgIC8vIHNwZWMgaW1wbGllcyBpdCBzaG91bGQgYmUgIjEiLiAgTWluZWZpZWxkIG1h
dGNoZXMgdGhlIEhUTUw1IHNwZWMgaGVyZS4KLQotICAgIEFTU0VSVChlbGVtZW50LT5pc0hUTUxF
bGVtZW50KCkpOyAvLyBvdGhlcndpc2UgbG9jYWxOYW1lKCkgbWlnaHQgYmUgd3JvbmcuCi0KLSAg
ICBWZWN0b3I8QXR0cmlidXRlPiBjbG9uZWRBdHRyaWJ1dGVzOwotICAgIGlmIChFbGVtZW50QXR0
cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVEYXRh
KCkpCi0gICAgICAgIGNsb25lZEF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVEYXRhLT5jbG9uZWRBdHRy
aWJ1dGVWZWN0b3IoKTsKLQotICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2Vu
VHlwZXM6OlN0YXJ0VGFnLCBlbGVtZW50LT5sb2NhbE5hbWUoKSwgY2xvbmVkQXR0cmlidXRlcyk7
Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxFbGVtZW50KGZha2VUb2tlbik7CisgICAgUmVmUHRyPEVs
ZW1lbnQ+IGVsZW1lbnQ7CisgICAgaWYgKG5vZGUtPm5hbWVzcGFjZVVSSSgpID09IEhUTUxOYW1l
czo6eGh0bWxOYW1lc3BhY2VVUkkpCisgICAgICAgIGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVu
dChub2RlLT50b2tlbigpKTsKKyAgICBlbHNlCisgICAgICAgIGVsZW1lbnQgPSBjcmVhdGVFbGVt
ZW50KG5vZGUtPnRva2VuKCksIG5vZGUtPm5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gSFRN
TFN0YWNrTm9kZTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgpLCBub2RlLT50b2tlbigpLCBub2Rl
LT5uYW1lc3BhY2VVUkkoKSk7CiB9CiAKIGJvb2wgSFRNTENvbnN0cnVjdGlvblNpdGU6OmluZGV4
T2ZGaXJzdFVub3BlbkZvcm1hdHRpbmdFbGVtZW50KHVuc2lnbmVkJiBmaXJzdFVub3BlbkVsZW1l
bnRJbmRleCkgY29uc3QKQEAgLTQ3MiwxMCArNDU5LDEwIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlv
blNpdGU6OnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCkKICAgICBBU1NF
UlQodW5vcGVuRW50cnlJbmRleCA8IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnNpemUoKSk7
CiAgICAgZm9yICg7IHVub3BlbkVudHJ5SW5kZXggPCBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50
cy5zaXplKCk7ICsrdW5vcGVuRW50cnlJbmRleCkgewogICAgICAgICBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0OjpFbnRyeSYgdW5vcGVuZWRFbnRyeSA9IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1l
bnRzLmF0KHVub3BlbkVudHJ5SW5kZXgpOwotICAgICAgICBSZWZQdHI8RWxlbWVudD4gcmVjb25z
dHJ1Y3RlZCA9IGNyZWF0ZUhUTUxFbGVtZW50RnJvbVNhdmVkRWxlbWVudCh1bm9wZW5lZEVudHJ5
LmVsZW1lbnQoKSk7Ci0gICAgICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIHJlY29uc3Ry
dWN0ZWQpOwotICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNoKHJlY29uc3RydWN0ZWQucmVsZWFz
ZSgpKTsKLSAgICAgICAgdW5vcGVuZWRFbnRyeS5yZXBsYWNlRWxlbWVudChjdXJyZW50RWxlbWVu
dCgpKTsKKyAgICAgICAgUmVmUHRyPEhUTUxTdGFja05vZGU+IHJlY29uc3RydWN0ZWQgPSBjcmVh
dGVFbGVtZW50RnJvbVNhdmVkVG9rZW4odW5vcGVuZWRFbnRyeS5zdGFja05vZGUoKSk7CisgICAg
ICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIHJlY29uc3RydWN0ZWQtPm5vZGUoKSk7Cisg
ICAgICAgIG1fb3BlbkVsZW1lbnRzLnB1c2gocmVjb25zdHJ1Y3RlZCk7CisgICAgICAgIHVub3Bl
bmVkRW50cnkucmVwbGFjZUVsZW1lbnQocmVjb25zdHJ1Y3RlZC5yZWxlYXNlKCkpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVj
dGlvblNpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25T
aXRlLmgKaW5kZXggMzY3YzBmZTI2ODU2YmY3NmQxZDRlNjg0MmE2ZmNlMWQ5NWZiM2NhMS4uYWFm
ZWZkZmMwZGE5ZmI3ODRmMTY0ZjI0ODM4YzhkMjg3NWY4ZTA1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCkBAIC0xMDYsNyArMTA2
LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keShBdG9t
aWNIVE1MVG9rZW4mKTsKIAogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1l
bnQoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVIVE1M
RWxlbWVudEZyb21FbGVtZW50UmVjb3JkKEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQq
KTsKKyAgICBQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IGNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRU
b2tlbihQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsKIAogICAgIGJvb2wgc2hvdWxkRm9zdGVy
UGFyZW50KCkgY29uc3Q7CiAgICAgdm9pZCBmb3N0ZXJQYXJlbnQoUGFzc1JlZlB0cjxOb2RlPik7
CkBAIC0xNjAsNyArMTYwLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluZEZvc3RlclNpdGUo
SFRNTENvbnN0cnVjdGlvblNpdGVUYXNrJik7CiAKLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNy
ZWF0ZUhUTUxFbGVtZW50RnJvbVNhdmVkRWxlbWVudChFbGVtZW50Kik7CiAgICAgUGFzc1JlZlB0
cjxFbGVtZW50PiBjcmVhdGVFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZXNwYWNlVVJJKTsKIAogICAgIHZvaWQgbWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2Vu
SW50b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgRWxlbWVudCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAppbmRleCBjZDVkMDhhNTUzZWRj
ODQ3MzU2MWExNjFlZTFhOTc0YTI3ZjYwM2MzLi5mZjcwYWMyMWY1MWE0ZTJkMTg4NTkzNzNhZmI0
YTkwMzhjNmZkMTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
RWxlbWVudFN0YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxl
bWVudFN0YWNrLmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIGlubGluZSBib29sIGlzU2VsZWN0U2Nv
cGVNYXJrZXIoQ29udGFpbmVyTm9kZSogbm9kZSkKIAogfQogCi1IVE1MRWxlbWVudFN0YWNrOjpF
bGVtZW50UmVjb3JkOjpFbGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9k
ZSwgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPiBuZXh0KQorSFRNTEVsZW1lbnRTdGFjazo6RWxl
bWVudFJlY29yZDo6RWxlbWVudFJlY29yZChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IG5vZGUs
IFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4gbmV4dCkKICAgICA6IG1fbm9kZShub2RlKQogICAg
ICwgbV9uZXh0KG5leHQpCiB7CkBAIC0xMzYsMTIgKzEzNiwxMiBAQCBIVE1MRWxlbWVudFN0YWNr
OjpFbGVtZW50UmVjb3JkOjp+RWxlbWVudFJlY29yZCgpCiB7CiB9CiAKLXZvaWQgSFRNTEVsZW1l
bnRTdGFjazo6RWxlbWVudFJlY29yZDo6cmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50
PiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpyZXBsYWNl
RWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IG5vZGUpCiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQpOwotICAgIEFTU0VSVCghbV9ub2RlIHx8IG1fbm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsK
KyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKCFtX25vZGUgfHwgbV9ub2RlLT5ub2RlKCkt
PmlzRWxlbWVudE5vZGUoKSk7CiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNhbGwgZmluaXNo
UGFyc2luZ0NoaWxkcmVuPwotICAgIG1fbm9kZSA9IGVsZW1lbnQ7CisgICAgbV9ub2RlID0gbm9k
ZTsKIH0KIAogYm9vbCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjppc0Fib3ZlKEVs
ZW1lbnRSZWNvcmQqIG90aGVyKSBjb25zdApAQCAtMzA3LDYyICszMDcsNjIgQEAgdm9pZCBIVE1M
RWxlbWVudFN0YWNrOjpwb3BVbnRpbEZvcmVpZ25Db250ZW50U2NvcGVNYXJrZXIoKQogICAgICAg
ICBwb3AoKTsKIH0KICAgICAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaFJvb3ROb2RlKFBh
c3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gcm9vdE5vZGUpCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6
OnB1c2hSb290Tm9kZShQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IHJvb3ROb2RlKQogewotICAg
IEFTU0VSVChyb290Tm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9O
T0RFKTsKKyAgICBBU1NFUlQocm9vdE5vZGUtPm5vZGUoKS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpE
T0NVTUVOVF9GUkFHTUVOVF9OT0RFKTsKICAgICBwdXNoUm9vdE5vZGVDb21tb24ocm9vdE5vZGUp
OwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQoUGFzc1Jl
ZlB0cjxFbGVtZW50PiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0
bWxFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkKIHsKLSAgICBBU1NFUlQo
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKLSAgICBwdXNoUm9vdE5v
ZGVDb21tb24oZWxlbWVudCk7CisgICAgQVNTRVJUKG5vZGUtPmVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKKyAgICBwdXNoUm9vdE5vZGVDb21tb24obm9kZSk7CiB9
CiAgICAgCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZUNvbW1vbihQYXNzUmVm
UHRyPENvbnRhaW5lck5vZGU+IHJvb3ROb2RlKQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNo
Um9vdE5vZGVDb21tb24oUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiByb290Tm9kZSkKIHsKICAg
ICBBU1NFUlQoIW1fdG9wKTsKICAgICBBU1NFUlQoIW1fcm9vdE5vZGUpOwotICAgIG1fcm9vdE5v
ZGUgPSByb290Tm9kZS5nZXQoKTsKKyAgICBtX3Jvb3ROb2RlID0gcm9vdE5vZGUtPm5vZGUoKTsK
ICAgICBwdXNoQ29tbW9uKHJvb3ROb2RlKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpw
dXNoSFRNTEhlYWRFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgSFRN
TEVsZW1lbnRTdGFjazo6cHVzaEhUTUxIZWFkRWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFja05v
ZGU+IG5vZGUpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpo
ZWFkVGFnKSk7CisgICAgQVNTRVJUKG5vZGUtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmhlYWRUYWcpKTsKICAgICBBU1NFUlQoIW1faGVhZEVsZW1lbnQpOwotICAgIG1faGVhZEVs
ZW1lbnQgPSBlbGVtZW50LmdldCgpOwotICAgIHB1c2hDb21tb24oZWxlbWVudCk7CisgICAgbV9o
ZWFkRWxlbWVudCA9IG5vZGUtPmVsZW1lbnQoKTsKKyAgICBwdXNoQ29tbW9uKG5vZGUpOwogfQog
Ci12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0cjxF
bGVtZW50PiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEJvZHlFbGVt
ZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsKKyAgICBBU1NFUlQobm9kZS0+ZWxl
bWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOwogICAgIEFTU0VSVCghbV9i
b2R5RWxlbWVudCk7Ci0gICAgbV9ib2R5RWxlbWVudCA9IGVsZW1lbnQuZ2V0KCk7Ci0gICAgcHVz
aENvbW1vbihlbGVtZW50KTsKKyAgICBtX2JvZHlFbGVtZW50ID0gbm9kZS0+ZWxlbWVudCgpOwor
ICAgIHB1c2hDb21tb24obm9kZSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaChQ
YXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2go
UGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBub2RlKQogewotICAgIEFTU0VSVCghZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSk7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOworICAgIEFTU0VSVCghbm9kZS0+ZWxlbWVudCgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpOworICAgIEFTU0VSVCghbm9kZS0+ZWxl
bWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpOworICAgIEFTU0VSVCghbm9k
ZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOwogICAgIEFTU0VS
VChtX3Jvb3ROb2RlKTsKLSAgICBwdXNoQ29tbW9uKGVsZW1lbnQpOworICAgIHB1c2hDb21tb24o
bm9kZSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJvdmUoUGFzc1JlZlB0
cjxFbGVtZW50PiBlbGVtZW50LCBFbGVtZW50UmVjb3JkKiByZWNvcmRCZWxvdykKK3ZvaWQgSFRN
TEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJvdmUoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBub2Rl
LCBFbGVtZW50UmVjb3JkKiByZWNvcmRCZWxvdykKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Cisg
ICAgQVNTRVJUKG5vZGUpOwogICAgIEFTU0VSVChyZWNvcmRCZWxvdyk7CiAgICAgQVNTRVJUKG1f
dG9wKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFn
KSk7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykp
OwotICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsK
KyAgICBBU1NFUlQoIW5vZGUtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxU
YWcpKTsKKyAgICBBU1NFUlQoIW5vZGUtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmhlYWRUYWcpKTsKKyAgICBBU1NFUlQoIW5vZGUtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmJvZHlUYWcpKTsKICAgICBBU1NFUlQobV9yb290Tm9kZSk7CiAgICAgaWYgKHJlY29y
ZEJlbG93ID09IG1fdG9wKSB7Ci0gICAgICAgIHB1c2goZWxlbWVudCk7CisgICAgICAgIHB1c2go
bm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lk
IEhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFib3ZlKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVu
dCwgRWxlbWVudFJlY29yZCogcgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgbV9z
dGFja0RlcHRoKys7Ci0gICAgICAgIHJlY29yZEFib3ZlLT5zZXROZXh0KGFkb3B0UHRyKG5ldyBF
bGVtZW50UmVjb3JkKGVsZW1lbnQsIHJlY29yZEFib3ZlLT5yZWxlYXNlTmV4dCgpKSkpOworICAg
ICAgICByZWNvcmRBYm92ZS0+c2V0TmV4dChhZG9wdFB0cihuZXcgRWxlbWVudFJlY29yZChub2Rl
LCByZWNvcmRBYm92ZS0+cmVsZWFzZU5leHQoKSkpKTsKICAgICAgICAgcmVjb3JkQWJvdmUtPm5l
eHQoKS0+ZWxlbWVudCgpLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNTY3LDcgKzU2Nyw3IEBAIENvbnRhaW5lck5vZGUqIEhUTUxFbGVtZW50U3Rh
Y2s6OnJvb3ROb2RlKCkgY29uc3QKICAgICByZXR1cm4gbV9yb290Tm9kZTsKIH0KIAotdm9pZCBI
VE1MRWxlbWVudFN0YWNrOjpwdXNoQ29tbW9uKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9k
ZSkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaENvbW1vbihQYXNzUmVmUHRyPEhUTUxTdGFj
a05vZGU+IG5vZGUpCiB7CiAgICAgQVNTRVJUKG1fcm9vdE5vZGUpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmgKaW5kZXggZjdiYWEzNjQ0N2IwN2Q1
MjhmM2UyNzczMzI0YzgxNDJlOTE0MWY4OC4uMzQ5MTg1Yjk3ZTQzZmI1MDA1NTVlMTM1YjQ5Y2Ey
OTJkODQxZWNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVs
ZW1lbnRTdGFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50
U3RhY2suaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdGFja05vZGUuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KQEAgLTU1LDIzICs1NiwyNCBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAg
ICAgICB+RWxlbWVudFJlY29yZCgpOyAvLyBQdWJsaWMgZm9yIH5QYXNzT3duUHRyKCkKICAgICAK
LSAgICAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChtX25v
ZGUuZ2V0KCkpOyB9Ci0gICAgICAgIENvbnRhaW5lck5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVy
biBtX25vZGUuZ2V0KCk7IH0KLSAgICAgICAgdm9pZCByZXBsYWNlRWxlbWVudChQYXNzUmVmUHRy
PEVsZW1lbnQ+KTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
bm9kZS0+ZWxlbWVudCgpOyB9CisgICAgICAgIENvbnRhaW5lck5vZGUqIG5vZGUoKSBjb25zdCB7
IHJldHVybiBtX25vZGUtPm5vZGUoKTsgfQorICAgICAgICBQYXNzUmVmUHRyPEhUTUxTdGFja05v
ZGU+IHN0YWNrTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorCisgICAgICAgIHZvaWQg
cmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7CiAKICAgICAgICAgYm9v
bCBpc0Fib3ZlKEVsZW1lbnRSZWNvcmQqKSBjb25zdDsKIAogICAgICAgICBFbGVtZW50UmVjb3Jk
KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9Ci0KICAgICBwcml2YXRlOgog
ICAgICAgICBmcmllbmQgY2xhc3MgSFRNTEVsZW1lbnRTdGFjazsKIAotICAgICAgICBFbGVtZW50
UmVjb3JkKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4sIFBhc3NPd25QdHI8RWxlbWVudFJlY29y
ZD4pOworICAgICAgICBFbGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4sIFBh
c3NPd25QdHI8RWxlbWVudFJlY29yZD4pOwogCiAgICAgICAgIFBhc3NPd25QdHI8RWxlbWVudFJl
Y29yZD4gcmVsZWFzZU5leHQoKSB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CiAgICAgICAg
IHZvaWQgc2V0TmV4dChQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpIHsgbV9uZXh0ID0g
bmV4dDsgfQogCi0gICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX25vZGU7CisgICAgICAg
IFJlZlB0cjxIVE1MU3RhY2tOb2RlPiBtX25vZGU7CiAgICAgICAgIE93blB0cjxFbGVtZW50UmVj
b3JkPiBtX25leHQ7CiAgICAgfTsKIApAQCAtOTcsMTMgKzk5LDEzIEBAIHB1YmxpYzoKICAgICBF
bGVtZW50UmVjb3JkKiBmaW5kKEVsZW1lbnQqKSBjb25zdDsKICAgICBFbGVtZW50UmVjb3JkKiB0
b3Btb3N0KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3Q7CiAKLSAgICB2b2lkIGlu
c2VydEFib3ZlKFBhc3NSZWZQdHI8RWxlbWVudD4sIEVsZW1lbnRSZWNvcmQqKTsKKyAgICB2b2lk
IGluc2VydEFib3ZlKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4sIEVsZW1lbnRSZWNvcmQqKTsK
IAotICAgIHZvaWQgcHVzaChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKLSAgICB2b2lkIHB1c2hSb290
Tm9kZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+KTsKLSAgICB2b2lkIHB1c2hIVE1MSHRtbEVs
ZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7Ci0gICAgdm9pZCBwdXNoSFRNTEhlYWRFbGVtZW50
KFBhc3NSZWZQdHI8RWxlbWVudD4pOwotICAgIHZvaWQgcHVzaEhUTUxCb2R5RWxlbWVudChQYXNz
UmVmUHRyPEVsZW1lbnQ+KTsKKyAgICB2b2lkIHB1c2goUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2Rl
Pik7CisgICAgdm9pZCBwdXNoUm9vdE5vZGUoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7Cisg
ICAgdm9pZCBwdXNoSFRNTEh0bWxFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4pOwor
ICAgIHZvaWQgcHVzaEhUTUxIZWFkRWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsK
KyAgICB2b2lkIHB1c2hIVE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7
CiAKICAgICB2b2lkIHBvcCgpOwogICAgIHZvaWQgcG9wVW50aWwoY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lKTsKQEAgLTE1Niw4ICsxNTgsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0
ZToKLSAgICB2b2lkIHB1c2hDb21tb24oUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPik7Ci0gICAg
dm9pZCBwdXNoUm9vdE5vZGVDb21tb24oUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPik7CisgICAg
dm9pZCBwdXNoQ29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4pOworICAgIHZvaWQgcHVz
aFJvb3ROb2RlQ29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4pOwogICAgIHZvaWQgcG9w
Q29tbW9uKCk7CiAgICAgdm9pZCByZW1vdmVOb25Ub3BDb21tb24oRWxlbWVudCopOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRM
aXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVu
dExpc3QuY3BwCmluZGV4IDAxNDVkZTBlNmYzOWUwMTkwMGMyNDE1YjQ3ZDllNjU3YTUyMWVkZjEu
LjFjNTNiY2M3MzE3NDMyMzgzNTkyNTQ2ZGY3MTM1YmM1MDI1MzhkZjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Qu
Y3BwCkBAIC04NywyNSArODcsMjcgQEAgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Qm9va21h
cmsgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Ym9va21hcmtGb3IoRWxlbWUKICAgICByZXR1
cm4gQm9va21hcmsoJmF0KGluZGV4KSk7CiB9CiAKLXZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50
TGlzdDo6c3dhcFRvKEVsZW1lbnQqIG9sZEVsZW1lbnQsIEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNv
bnN0IEJvb2ttYXJrJiBib29rbWFyaykKK3ZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6
c3dhcFRvKEVsZW1lbnQqIG9sZEVsZW1lbnQsIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gcHJw
TmV3Tm9kZSwgY29uc3QgQm9va21hcmsmIGJvb2ttYXJrKQogeworICAgIFJlZlB0cjxIVE1MU3Rh
Y2tOb2RlPiBuZXdOb2RlID0gcHJwTmV3Tm9kZTsKKwogICAgIEFTU0VSVChjb250YWlucyhvbGRF
bGVtZW50KSk7Ci0gICAgQVNTRVJUKCFjb250YWlucyhuZXdFbGVtZW50KSk7CisgICAgQVNTRVJU
KCFjb250YWlucyhuZXdOb2RlLT5lbGVtZW50KCkpKTsKICAgICBpZiAoIWJvb2ttYXJrLmhhc0Jl
ZW5Nb3ZlZCgpKSB7CiAgICAgICAgIEFTU0VSVChib29rbWFyay5tYXJrKCktPmVsZW1lbnQoKSA9
PSBvbGRFbGVtZW50KTsKLSAgICAgICAgYm9va21hcmsubWFyaygpLT5yZXBsYWNlRWxlbWVudChu
ZXdFbGVtZW50KTsKKyAgICAgICAgYm9va21hcmsubWFyaygpLT5yZXBsYWNlRWxlbWVudChuZXdO
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBzaXplX3QgaW5kZXggPSBib29rbWFy
ay5tYXJrKCkgLSBmaXJzdCgpOwogICAgIEFTU0VSVChpbmRleCA8IHNpemUoKSk7Ci0gICAgbV9l
bnRyaWVzLmluc2VydChpbmRleCArIDEsIG5ld0VsZW1lbnQpOworICAgIG1fZW50cmllcy5pbnNl
cnQoaW5kZXggKyAxLCBuZXdOb2RlKTsKICAgICByZW1vdmUob2xkRWxlbWVudCk7CiB9CiAKLXZv
aWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6YXBwZW5kKEVsZW1lbnQqIGVsZW1lbnQpCit2
b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmFwcGVuZChQYXNzUmVmUHRyPEhUTUxTdGFj
a05vZGU+IG5vZGUpCiB7Ci0gICAgZW5zdXJlTm9haHNBcmtDb25kaXRpb24oZWxlbWVudCk7Ci0g
ICAgbV9lbnRyaWVzLmFwcGVuZChlbGVtZW50KTsKKyAgICBlbnN1cmVOb2Foc0Fya0NvbmRpdGlv
bihub2RlLT5lbGVtZW50KCkpOworICAgIG1fZW50cmllcy5hcHBlbmQobm9kZSk7CiB9CiAKIHZv
aWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6cmVtb3ZlKEVsZW1lbnQqIGVsZW1lbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0LmgKaW5kZXggNzlmZTJmZjM3NTc1NTBlNGQzYWU4ZTUyOGUxM2Q5MDU1ZGQxNzk4NC4u
MmY3ZGI5ZjkxZDUwYTgxM2RhNGY4YTYwZGE1ZTQ2OWE3YjhmNTZkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaApA
QCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0X2gKICNk
ZWZpbmUgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdF9oCiAKKyNpbmNsdWRlICJIVE1MU3RhY2tO
b2RlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDcsMzUgKzQ4LDM1IEBAIHB1YmxpYzoKICAg
ICBjbGFzcyBFbnRyeSB7CiAgICAgcHVibGljOgogICAgICAgICAvLyBJbmxpbmUgYmVjYXVzZSB0
aGV5J3JlIGhvdCBhbmQgVmVjdG9yPFQ+IHVzZXMgdGhlbS4KLSAgICAgICAgZXhwbGljaXQgRW50
cnkoRWxlbWVudCogZWxlbWVudCkKLSAgICAgICAgICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisg
ICAgICAgIGV4cGxpY2l0IEVudHJ5KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkKKyAg
ICAgICAgICAgIDogbV9ub2RlKG5vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChl
bGVtZW50KTsKICAgICAgICAgfQogICAgICAgICBlbnVtIE1hcmtlckVudHJ5VHlwZSB7IE1hcmtl
ckVudHJ5IH07CiAgICAgICAgIEVudHJ5KE1hcmtlckVudHJ5VHlwZSkKLSAgICAgICAgICAgIDog
bV9lbGVtZW50KDApCisgICAgICAgICAgICA6IG1fbm9kZSgwKQogICAgICAgICB7CiAgICAgICAg
IH0KICAgICAgICAgfkVudHJ5KCkge30KIAotICAgICAgICBib29sIGlzTWFya2VyKCkgY29uc3Qg
eyByZXR1cm4gIW1fZWxlbWVudDsgfQorICAgICAgICBib29sIGlzTWFya2VyKCkgY29uc3QgeyBy
ZXR1cm4gIW1fbm9kZTsgfQogCisgICAgICAgIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gc3Rh
Y2tOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CiAgICAgICAgIEVsZW1lbnQqIGVsZW1l
bnQoKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGUgZmFjdCB0aGF0ICFtX2Vs
ZW1lbnQgPT0gaXNNYXJrZXIoKSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwKKyAgICAgICAg
ICAgIC8vIFRoZSBmYWN0IHRoYXQgIW1fbm9kZSA9PSBpc01hcmtlcigpIGlzIGFuIGltcGxlbWVu
dGF0aW9uIGRldGFpbAogICAgICAgICAgICAgLy8gY2FsbGVycyBzaG91bGQgY2hlY2sgaXNNYXJr
ZXIoKSBiZWZvcmUgY2FsbGluZyBlbGVtZW50KCkuCi0gICAgICAgICAgICBBU1NFUlQobV9lbGVt
ZW50KTsKLSAgICAgICAgICAgIHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7CisgICAgICAgICAgICBB
U1NFUlQobV9ub2RlKTsKKyAgICAgICAgICAgIHJldHVybiBtX25vZGUtPmVsZW1lbnQoKTsKICAg
ICAgICAgfQotICAgICAgICB2b2lkIHJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCkgeyBtX2VsZW1lbnQgPSBlbGVtZW50OyB9CisgICAgICAgIHZvaWQgcmVwbGFjZUVs
ZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBub2RlKSB7IG1fbm9kZSA9IG5vZGU7IH0K
IAogICAgICAgICAvLyBOZWVkZWQgZm9yIHVzZSB3aXRoIFZlY3Rvci4gIFRoZXNlIGFyZSBzdXBl
ci1ob3QgYW5kIG11c3QgYmUgaW5saW5lLgotICAgICAgICBib29sIG9wZXJhdG9yPT0oRWxlbWVu
dCogZWxlbWVudCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50ID09IGVsZW1lbnQ7IH0KLSAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIG1fZWxl
bWVudCAhPSBlbGVtZW50OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShFbGVtZW50KiBlbGVt
ZW50KSBjb25zdCB7IHJldHVybiAhbV9ub2RlID8gIWVsZW1lbnQgOiBtX25vZGUtPmVsZW1lbnQo
KSA9PSBlbGVtZW50OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShFbGVtZW50KiBlbGVtZW50
KSBjb25zdCB7IHJldHVybiAhbV9ub2RlID8gISFlbGVtZW50IDogbV9ub2RlLT5lbGVtZW50KCkg
IT0gZWxlbWVudDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1f
ZWxlbWVudDsKKyAgICAgICAgUmVmUHRyPEhUTUxTdGFja05vZGU+IG1fbm9kZTsKICAgICB9Owog
CiAgICAgY2xhc3MgQm9va21hcmsgewpAQCAtMTA3LDExICsxMDgsMTEgQEAgcHVibGljOgogCiAg
ICAgRW50cnkqIGZpbmQoRWxlbWVudCopOwogICAgIGJvb2wgY29udGFpbnMoRWxlbWVudCopOwot
ICAgIHZvaWQgYXBwZW5kKEVsZW1lbnQqKTsKKyAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPEhU
TUxTdGFja05vZGU+KTsKICAgICB2b2lkIHJlbW92ZShFbGVtZW50Kik7CiAKICAgICBCb29rbWFy
ayBib29rbWFya0ZvcihFbGVtZW50Kik7Ci0gICAgdm9pZCBzd2FwVG8oRWxlbWVudCogb2xkRWxl
bWVudCwgRWxlbWVudCogbmV3RWxlbWVudCwgY29uc3QgQm9va21hcmsmKTsKKyAgICB2b2lkIHN3
YXBUbyhFbGVtZW50KiBvbGRFbGVtZW50LCBQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IHBycE5l
d05vZGUsIGNvbnN0IEJvb2ttYXJrJik7CiAKICAgICB2b2lkIGFwcGVuZE1hcmtlcigpOwogICAg
IC8vIGNsZWFyVG9MYXN0TWFya2VyIGFsc28gY2xlYXJzIHRoZSBtYXJrZXIgKHBlciB0aGUgSFRN
TDUgc3BlYykuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3Rh
Y2tOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3RhY2tOb2RlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGViZmRlOWExMjBhYzg5ZWYzNDhiNzUzMDc1OTRlNGU3MTgwMmYyZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTdGFja05vZGUuaApA
QCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEdPT0dMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSFRNTFN0YWNrTm9kZV9oCisjZGVmaW5lIEhUTUxTdGFj
a05vZGVfaAorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIkhUTUxUb2tlbi5oIgorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFpbmVyTm9kZTsKKworY2xhc3Mg
SFRNTFN0YWNrTm9kZSA6IHB1YmxpYyBSZWZDb3VudGVkPEhUTUxTdGFja05vZGU+IHsKK3B1Ymxp
YzoKKyAgICAvLyBEb2N1bWVudEZyYWdtZW50IGNhc2UuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SFRNTFN0YWNrTm9kZT4gY3JlYXRlKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSkKKyAg
ICB7CisgICAgICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuVHlwZXM6OlN0
YXJ0VGFnLCAiIik7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFN0YWNrTm9kZShu
b2RlLCBmYWtlVG9rZW4pKTsKKyAgICB9CisKKyAgICAvLyBVc2VkIGJ5IEhUTUxFbGVtZW50U3Rh
Y2suCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gY3JlYXRlKFBhc3NSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gbm9kZSwgQXRvbWljSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MU3RhY2tOb2RlKG5vZGUsIHRv
a2VuLCBuYW1lc3BhY2VVUkkpKTsKKyAgICB9CisKKyAgICAvLyBVc2VkIGJ5IEhUTUxGb3JtYXR0
aW5nRWxlbWVudExpc3QuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gY3Jl
YXRlKEVsZW1lbnQqIGVsZW1lbnQsIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFN0YWNrTm9kZShlbGVtZW50LCB0
b2tlbiwgbmFtZXNwYWNlVVJJKSk7CisgICAgfQorCisgICAgRWxlbWVudCogZWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIHRvRWxlbWVudChtX25vZGUuZ2V0KCkpOyB9CisgICAgQ29udGFpbmVyTm9k
ZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorCisgICAgLy8gRklYTUU6
IHRoaXMgc2hvdWxkIGJlIGNvbnN0LgorICAgIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4oKSB7IHJl
dHVybiBtX3Rva2VuOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkoKSBj
b25zdCB7IHJldHVybiBtX25hbWVzcGFjZVVSSTsgfQorCitwcml2YXRlOgorICAgIEhUTUxTdGFj
a05vZGUoUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlLCBBdG9taWNIVE1MVG9rZW4mIHRv
a2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxO
YW1lc3BhY2VVUkkpCisgICAgICAgIDogbV9ub2RlKG5vZGUpCisgICAgICAgICwgbV90b2tlbihI
VE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIHRva2VuLm5hbWUoKSwgdG9rZW4uYXR0cmlidXRlcygp
KQorICAgICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKKyAgICB7CisgICAgfQor
CisgICAgSFRNTFN0YWNrTm9kZShFbGVtZW50KiBlbGVtZW50LCBBdG9taWNIVE1MVG9rZW4mIHRv
a2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxO
YW1lc3BhY2VVUkkpCisgICAgICAgIDogbV9ub2RlKGVsZW1lbnQpCisgICAgICAgICwgbV90b2tl
bihIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIHRva2VuLm5hbWUoKSwgdG9rZW4uYXR0cmlidXRl
cygpKQorICAgICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKKyAgICB7CisgICAg
fQorCisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG1fbm9kZTsKKworICAgIEF0b21pY0hUTUxU
b2tlbiBtX3Rva2VuOworICAgIEF0b21pY1N0cmluZyBtX25hbWVzcGFjZVVSSTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhUTUxTdGFja05vZGVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggODAzYjBl
N2QzMmYyNTY1YmRjOGQ5OWQwNmM1NDdjZWFhMWEzYTUyMC4uNzMzNmZiODZkNzk3OWIzYzFlYTBl
ZmI5ZTRmYmRmNTQ0YzNjMDg5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFN0YWNrTm9kZS5oIgogI2luY2x1ZGUgIkhUTUxUb2tl
bi5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJp
bmdzLmgiCkBAIC0zODIsNyArMzgzLDcgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxk
ZXIoSFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERvY3VtZW50RnJhZ21lbnQqIGYKICAgICAg
ICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9t
dWx0aXBhZ2UvdGhlLWVuZC5odG1sI2ZyYWdtZW50LWNhc2UKICAgICAgICAgLy8gRm9yIGVmZmlj
aWVuY3ksIHdlIHNraXAgc3RlcCA0LjIgKCJMZXQgcm9vdCBiZSBhIG5ldyBodG1sIGVsZW1lbnQg
d2l0aCBubyBhdHRyaWJ1dGVzIikKICAgICAgICAgLy8gYW5kIGluc3RlYWQgdXNlIHRoZSBEb2N1
bWVudEZyYWdtZW50IGFzIGEgcm9vdCBub2RlLgotICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRz
KCktPnB1c2hSb290Tm9kZShmcmFnbWVudCk7CisgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMo
KS0+cHVzaFJvb3ROb2RlKEhUTUxTdGFja05vZGU6OmNyZWF0ZShmcmFnbWVudCkpOwogICAgICAg
ICByZXNldEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KCk7CiAgICAgICAgIG1fdHJlZS5zZXRG
b3JtKGNsb3Nlc3RGb3JtQW5jZXN0b3IoY29udGV4dEVsZW1lbnQpKTsKICAgICB9CkBAIC0xMTg2
LDcgKzExODcsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdGl0bGVU
YWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgQVNTRVJU
KG1fdHJlZS5oZWFkKCkpOwotICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wdXNo
SFRNTEhlYWRFbGVtZW50KG1fdHJlZS5oZWFkKCkpOworICAgICAgICAgICAgbV90cmVlLm9wZW5F
bGVtZW50cygpLT5wdXNoSFRNTEhlYWRFbGVtZW50KEhUTUxTdGFja05vZGU6OmNyZWF0ZShtX3Ry
ZWUuaGVhZCgpLCB0b2tlbikpOwogICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFk
KHRva2VuKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cmVtb3ZlSFRNTEhl
YWRFbGVtZW50KG1fdHJlZS5oZWFkKCkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU1NSw5
ICsxNTU2LDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3ko
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIGlmIChub2RlID09IGZvcm1hdHRp
bmdFbGVtZW50UmVjb3JkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgLy8g
Ni41Ci0gICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IG1fdHJlZS5jcmVh
dGVIVE1MRWxlbWVudEZyb21FbGVtZW50UmVjb3JkKG5vZGUpOworICAgICAgICAgICAgUmVmUHRy
PEhUTUxTdGFja05vZGU+IG5ld0VsZW1lbnQgPSBtX3RyZWUuY3JlYXRlRWxlbWVudEZyb21TYXZl
ZFRva2VuKG5vZGUtPnN0YWNrTm9kZSgpKTsKKwogICAgICAgICAgICAgSFRNTEZvcm1hdHRpbmdF
bGVtZW50TGlzdDo6RW50cnkqIG5vZGVFbnRyeSA9IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxl
bWVudHMoKS0+ZmluZChub2RlLT5lbGVtZW50KCkpOwotICAgICAgICAgICAgbm9kZUVudHJ5LT5y
ZXBsYWNlRWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKKyAgICAgICAgICAgIG5vZGVFbnRyeS0+
cmVwbGFjZUVsZW1lbnQobmV3RWxlbWVudCk7CiAgICAgICAgICAgICBub2RlLT5yZXBsYWNlRWxl
bWVudChuZXdFbGVtZW50LnJlbGVhc2UoKSk7CiAgICAgICAgICAgICAvLyA2LjQgLS0gSW50ZW50
aW9uYWxseSBvdXQgb2Ygb3JkZXIgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG5vZGUKICAgICAg
ICAgICAgIC8vIHdhcyByZXBsYWNlZCBpbiA2LjUuCkBAIC0xNTkxLDIyICsxNTkzLDIyIEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKICAgICAgICAgICAgICAgICBsYXN0Tm9kZS0+ZWxlbWVudCgpLT5sYXp5QXR0YWNo
KCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gOAotICAgICAgICBSZWZQdHI8RWxlbWVudD4gbmV3
RWxlbWVudCA9IG1fdHJlZS5jcmVhdGVIVE1MRWxlbWVudEZyb21FbGVtZW50UmVjb3JkKGZvcm1h
dHRpbmdFbGVtZW50UmVjb3JkKTsKKyAgICAgICAgUmVmUHRyPEhUTUxTdGFja05vZGU+IG5ld0Vs
ZW1lbnQgPSBtX3RyZWUuY3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKGZvcm1hdHRpbmdFbGVt
ZW50UmVjb3JkLT5zdGFja05vZGUoKSk7CiAgICAgICAgIC8vIDkKLSAgICAgICAgbmV3RWxlbWVu
dC0+dGFrZUFsbENoaWxkcmVuRnJvbShmdXJ0aGVzdEJsb2NrLT5lbGVtZW50KCkpOworICAgICAg
ICBuZXdFbGVtZW50LT5lbGVtZW50KCktPnRha2VBbGxDaGlsZHJlbkZyb20oZnVydGhlc3RCbG9j
ay0+ZWxlbWVudCgpKTsKICAgICAgICAgLy8gMTAKICAgICAgICAgRWxlbWVudCogZnVydGhlc3RC
bG9ja0VsZW1lbnQgPSBmdXJ0aGVzdEJsb2NrLT5lbGVtZW50KCk7CiAgICAgICAgIC8vIEZJWE1F
OiBBbGwgdGhpcyBjcmVhdGlvbiAvIHBhcnNlckFkZENoaWxkIC8gYXR0YWNoIGJ1c2luZXNzIHNo
b3VsZAogICAgICAgICAvLyAgICAgICAgYmUgaW4gSFRNTENvbnN0cnVjdGlvblNpdGUuICBNeSBn
dWVzcyBpcyB0aGF0IHN0ZXBzIDgtLTEyCiAgICAgICAgIC8vICAgICAgICBzaG91bGQgYWxsIGJl
IGluIHNvbWUgSFRNTENvbnN0cnVjdGlvblNpdGUgZnVuY3Rpb24uCi0gICAgICAgIGZ1cnRoZXN0
QmxvY2tFbGVtZW50LT5wYXJzZXJBZGRDaGlsZChuZXdFbGVtZW50KTsKLSAgICAgICAgaWYgKGZ1
cnRoZXN0QmxvY2tFbGVtZW50LT5hdHRhY2hlZCgpICYmICFuZXdFbGVtZW50LT5hdHRhY2hlZCgp
KSB7CisgICAgICAgIGZ1cnRoZXN0QmxvY2tFbGVtZW50LT5wYXJzZXJBZGRDaGlsZChuZXdFbGVt
ZW50LT5lbGVtZW50KCkpOworICAgICAgICBpZiAoZnVydGhlc3RCbG9ja0VsZW1lbnQtPmF0dGFj
aGVkKCkgJiYgIW5ld0VsZW1lbnQtPmVsZW1lbnQoKS0+YXR0YWNoZWQoKSkgewogICAgICAgICAg
ICAgLy8gTm90aWNlIHRoYXQgbmV3RWxlbWVudCBtaWdodCBhbHJlYWR5IGJlIGF0dGFjaGVkIGlm
LCBmb3IgZXhhbXBsZSwgb25lIG9mIHRoZSByZXBhcmVudGVkCiAgICAgICAgICAgICAvLyBjaGls
ZHJlbiBpcyBhIHN0eWxlIGVsZW1lbnQsIHdoaWNoIGF0dGFjaGVzIGl0c2VsZiBhdXRvbWF0aWNh
bGx5LgotICAgICAgICAgICAgbmV3RWxlbWVudC0+YXR0YWNoKCk7CisgICAgICAgICAgICBuZXdF
bGVtZW50LT5lbGVtZW50KCktPmF0dGFjaCgpOwogICAgICAgICB9CiAgICAgICAgIC8vIDExCi0g
ICAgICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+c3dhcFRvKGZvcm1hdHRp
bmdFbGVtZW50LCBuZXdFbGVtZW50LmdldCgpLCBib29rbWFyayk7CisgICAgICAgIG1fdHJlZS5h
Y3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+c3dhcFRvKGZvcm1hdHRpbmdFbGVtZW50LCBuZXdF
bGVtZW50LCBib29rbWFyayk7CiAgICAgICAgIC8vIDEyCiAgICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+cmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKICAgICAgICAgbV90cmVlLm9wZW5F
bGVtZW50cygpLT5pbnNlcnRBYm92ZShuZXdFbGVtZW50LCBmdXJ0aGVzdEJsb2NrKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA3ZDg4NTEyNjNiZGI0ODkzN2VmZTlkOGEyN2M3NGE5YTNkYTdjY2U4Li5kY2Q0N2U3MmIyODhj
ZTFiZjJmYjg0ZjAzOWRlODhlMzM2MWUzNzdlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTIt
MDctMTggIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBV
c2UgdGhlIG9yaWdpbmFsIHRva2VuIHRvIGNyZWF0ZSBhbiBlbGVtZW50IGluICJyZWNvbnN0cnVj
dCB0aGUgYWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVudHMiIGFuZCAiY2FsbCB0aGUgYWRvcHRpb24g
YWdlbmN5IgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTE3MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cGRhdGVkIHRlc3QgZXhwZWN0YXRpb24gZm9yIGh0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQK
KyAgICAgICAgYmVjYXVzZSBub3cgcmVzb3VyY2VzL3NjcmlwdGVkL2Fkb3B0aW9uMDEuZGF0IHBh
c3Nlcy4KKworICAgICAgICAqIGh0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQ6CisKIDIwMTIt
MDctMTggIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRl
eGVkREI6IERpcmVjdGlvbiBwYXJhbWV0ZXIgaWdub3JlZCBieSBzb21lIG9wZW5DdXJzb3IoKSBv
dmVybG9hZHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0CmluZGV4IDE5
YzRiMWE2NWEwNDI5Nzk0OGFiYjAyZTg0OTMzMmM0YjZiMmFiMTUuLmNkNWEyMGY5YWYyY2U4MDkw
MDFhMzhmODA2YzM5MmRjYjAwOGZiOTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0bWw1bGli
L3J1bm5lci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4
cGVjdGVkLnR4dApAQCAtNDMsMzMgKzQzLDYgQEAgcmVzb3VyY2VzL3RhYmxlczAxLmRhdDogUEFT
UwogCiByZXNvdXJjZXMvdHJpY2t5MDEuZGF0OiBQQVNTCiAKLXJlc291cmNlcy9zY3JpcHRlZC9h
ZG9wdGlvbjAxLmRhdDoKLTEKLQotVGVzdCAxIG9mIDEgaW4gcmVzb3VyY2VzL3NjcmlwdGVkL2Fk
b3B0aW9uMDEuZGF0IGZhaWxlZC4gSW5wdXQ6Ci08cD48YiBpZD0iQSI+PHNjcmlwdD5kb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiQSIpLmlkID0gIkIiPC9zY3JpcHQ+PC9wPlRFWFQ8L2I+Ci1Hb3Q6
Ci18IDxodG1sPgotfCAgIDxoZWFkPgotfCAgIDxib2R5PgotfCAgICAgPHA+Ci18ICAgICAgIDxi
PgotfCAgICAgICAgIGlkPSJCIgotfCAgICAgICAgIDxzY3JpcHQ+Ci18ICAgICAgICAgICAiZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkEiKS5pZCA9ICJCIiIKLXwgICAgIDxiPgotfCAgICAgICBp
ZD0iQiIKLXwgICAgICAgIlRFWFQiCi1FeHBlY3RlZDoKLXwgPGh0bWw+Ci18ICAgPGhlYWQ+Ci18
ICAgPGJvZHk+Ci18ICAgICA8cD4KLXwgICAgICAgPGI+Ci18ICAgICAgICAgaWQ9IkIiCi18ICAg
ICAgICAgPHNjcmlwdD4KLXwgICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQSIp
LmlkID0gIkIiIgotfCAgICAgPGI+Ci18ICAgICAgIGlkPSJBIgotfCAgICAgICAiVEVYVCIKK3Jl
c291cmNlcy9zY3JpcHRlZC9hZG9wdGlvbjAxLmRhdDogUEFTUworCiByZXNvdXJjZXMvc2NyaXB0
ZWQvd2Via2l0MDEuZGF0OiBQQVNTCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153174</attachid>
            <date>2012-07-18 21:21:35 -0700</date>
            <delta_ts>2012-07-19 16:47:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91703-20120719132126.patch</filename>
            <type>text/plain</type>
            <size>35536</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGEyYzdkYTVkNTQxZmM4
NjZmMGZmNmE2MTdlMGJlMzU3M2U1YzJlZS4uZjg5YjFhMTc2YzcxMDc4M2ZhMzg4YjdjZDMxZWFk
ZjUwYmRmZTg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDEyLTA3LTE4ICBLd2Fu
ZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgVXNlIHRoZSBvcmln
aW5hbCB0b2tlbiB0byBjcmVhdGUgYW4gZWxlbWVudCBpbiAicmVjb25zdHJ1Y3QgdGhlIGFjdGl2
ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIiBhbmQgImNhbGwgdGhlIGFkb3B0aW9uIGFnZW5jeSIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNzAzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGN1cnJlbnQg
V2ViS2l0IEhUTUw1IHBhcnNlciBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBob2xkIHRoZSBvcmln
aW5hbCB0b2tlbgorICAgICAgICBpbiB0aGUgc3RhY2sgb2Ygb3BlbiBlbGVtZW50cyBhbmQgdGhl
IGFjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzLiBUaGlzIGlzCisgICAgICAgIHByb2JsZW1hdGlj
IGJlY2F1c2UgdGhlIG9yaWdpbmFsIHRva2VuIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGVsZW1lbnQg
aW4KKyAgICAgICAgInJlY29uc3RydWN0IHRoZSBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cyIg
YW5kICJjYWxsIHRoZSBhZG9wdGlvbiBhZ2VuY3kiLgorCisgICAgICAgIEFzIGEgd29ya2Fyb3Vu
ZCwgV2ViS2l0IHVzZXMgdGhlIHNhdmVkIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwg
dG9rZW4KKyAgICAgICAgdG8gY3JlYXRlIGFuIGVsZW1lbnQuIEJ1dCB0aGlzIGNhdXNlcyB1cyB0
byBmYWlsIGV4YW1wbGVzIGxpa2UgdGhpczoKKyAgICAgICAgPGIgaWQ9IjEiPjxwPjxzY3JpcHQ+
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjEiKS5pZCA9ICIyIjwvc2NyaXB0PjwvcD5URVhUPC9i
PgorICAgICAgICByZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyBjYWxscyB0
aGlzIG1ldGhvZCB0byBvcGVuIGEgc2Vjb25kIDxiPgorICAgICAgICB0YWcgdG8gd3JhcCBURVhU
LCBpdCB3aWxsIGhhdmUgaWQgIjIiLCBldmVuIHRob3VnaCB0aGUgSFRNTDUgc3BlYyBpbXBsaWVz
IGl0CisgICAgICAgIHNob3VsZCBiZSAiMSIuCisKKyAgICAgICAgQ3JlYXRlZCBhIHJlZi1jb3Vu
dGVkIGNvbnRhaW5lciBjbGFzcywgSFRNTFN0YWNrTm9kZSB0byBob2xkIHRoZSBvcmlnaW5hbCB0
b2tlbgorICAgICAgICBhbmQgdGhlIG5hbWVzcGFjZSBVUkkgYXMgd2VsbCBhcyB0aGUgZWxlbWVu
dC4gQ2hhbmdlZCBIVE1MRWxlbWVudFN0YWNrIGFuZAorICAgICAgICBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0IHRvIHVzZSBIVE1MU3RhY2tOb2RlLgorICAgICAgICBDaGFuZ2VkIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyBhbmQK
KyAgICAgICAgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3kgdG8gY3JlYXRl
IGFuIGVsZW1lbnQgZnJvbSB0aGUgc2F2ZWQgdG9rZW4KKyAgICAgICAgaW5zdGVhZCBvZiB0aGUg
c2F2ZWQgZWxlbWVudC4KKworICAgICAgICBVcGRhdGVkIHRlc3QgZXhwZWN0YXRpb24gZm9yIGh0
bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQKKyAgICAgICAgYmVjYXVzZSBub3cgcmVzb3VyY2Vz
L3NjcmlwdGVkL2Fkb3B0aW9uMDEuZGF0IHBhc3Nlcy4KKworICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEhlYWRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxG
b3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5z
ZXJ0SFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6
Omluc2VydEZvcm1hdHRpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JlaWduRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVj
dGlvblNpdGUuaDoKKyAgICAgICAgKEhUTUxDb25zdHJ1Y3Rpb25TaXRlKToKKyAgICAgICAgKiBo
dG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OkVsZW1lbnRSZWNvcmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6cmVwbGFjZUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaFJvb3ROb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaFJvb3ROb2RlQ29tbW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSGVhZEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaEhUTUxCb2R5RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFib3ZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hDb21tb24pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxFbGVtZW50U3RhY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVs
ZW1lbnRSZWNvcmQ6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFj
azo6RWxlbWVudFJlY29yZDo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkOjpzdGFja05vZGUpOgorICAgICAgICAoRWxlbWVudFJlY29yZCk6
CisgICAgICAgIChIVE1MRWxlbWVudFN0YWNrKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0
aW5nRWxlbWVudExpc3Q6OnN3YXBUbyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGlu
Z0VsZW1lbnRMaXN0OjphcHBlbmQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxGb3JtYXR0
aW5nRWxlbWVudExpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVu
dExpc3Q6OkVudHJ5OjpFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0OjpFbnRyeTo6aXNNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OnN0YWNrTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeTo6ZWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeTo6cmVwbGFjZUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50
cnk6Om9wZXJhdG9yIT0pOgorICAgICAgICAoRW50cnkpOgorICAgICAgICAoSFRNTEZvcm1hdHRp
bmdFbGVtZW50TGlzdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFN0YWNrTm9kZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSFRNTFN0YWNrTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU3RhY2tOb2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFN0YWNrTm9kZTo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tOb2Rl
Ojpub2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdGFja05vZGU6OnRva2VuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTdGFja05vZGU6Om5hbWVzcGFjZVVSSSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU3RhY2tOb2RlOjpIVE1MU3RhY2tOb2RlKToKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVy
OjpIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjYWxs
VGhlQWRvcHRpb25BZ2VuY3kpOgorCiAyMDEyLTA3LTE4ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBEaXJlY3Rpb24gcGFyYW1ldGVyIGln
bm9yZWQgYnkgc29tZSBvcGVuQ3Vyc29yKCkgb3ZlcmxvYWRzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXggNGRhN2E3YWU5
YzYxMmUwNWRiYzc0NjJkZjQ0YTYwNDY5N2MzMzkyMC4uNGZjNDk4YWQ5NzQwODI2YWZlZTFjYjQ4
ZjBhOGNiNjk4OWRhNDJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIVE1M
U2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdGFja05vZGUuaCIKICNpbmNsdWRlICJI
VE1MVG9rZW4uaCIKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiTG9jYWxp
emVkU3RyaW5ncy5oIgpAQCAtMTk3LDcgKzE5OCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYgdG9r
CiAgICAgUmVmUHRyPEhUTUxIdG1sRWxlbWVudD4gZWxlbWVudCA9IEhUTUxIdG1sRWxlbWVudDo6
Y3JlYXRlKG1fZG9jdW1lbnQpOwogICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZXModG9r
ZW4uYXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgYXR0
YWNoTGF0ZXIobV9hdHRhY2htZW50Um9vdCwgZWxlbWVudCk7Ci0gICAgbV9vcGVuRWxlbWVudHMu
cHVzaEhUTUxIdG1sRWxlbWVudChlbGVtZW50KTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRN
TEh0bWxFbGVtZW50KEhUTUxTdGFja05vZGU6OmNyZWF0ZShlbGVtZW50LCB0b2tlbikpOwogCiAg
ICAgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAgICAgZWxlbWVudC0+aW5zZXJ0ZWRCeVBhcnNlcigp
OwpAQCAtMjg1LDcgKzI4Niw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhU
TUxIZWFkRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIEFTU0VSVCghc2hvdWxk
Rm9zdGVyUGFyZW50KCkpOwogICAgIG1faGVhZCA9IGNyZWF0ZUhUTUxFbGVtZW50KHRva2VuKTsK
ICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBtX2hlYWQpOwotICAgIG1fb3BlbkVsZW1l
bnRzLnB1c2hIVE1MSGVhZEVsZW1lbnQobV9oZWFkKTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNo
SFRNTEhlYWRFbGVtZW50KEhUTUxTdGFja05vZGU6OmNyZWF0ZShtX2hlYWQsIHRva2VuKSk7CiB9
CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQpAQCAtMjkzLDcgKzI5NCw3IEBAIHZvaWQgSFRNTENvbnN0cnVj
dGlvblNpdGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ICAgIEFTU0VSVCghc2hvdWxkRm9zdGVyUGFyZW50KCkpOwogICAgIFJlZlB0cjxFbGVtZW50PiBi
b2R5ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnRO
b2RlKCksIGJvZHkpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MQm9keUVsZW1lbnQoYm9k
eS5yZWxlYXNlKCkpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MQm9keUVsZW1lbnQoSFRN
TFN0YWNrTm9kZTo6Y3JlYXRlKGJvZHkucmVsZWFzZSgpLCB0b2tlbikpOwogfQogCiB2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbiwgYm9vbCBpc0RlbW90ZWQpCkBAIC0zMDMsMTQgKzMwNCwxNCBAQCB2b2lkIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0
b2tlbiwgYm9vbCBpcwogICAgIG1fZm9ybSA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8SFRNTEZvcm1F
bGVtZW50PihlbGVtZW50LnJlbGVhc2UoKSk7CiAgICAgbV9mb3JtLT5zZXREZW1vdGVkKGlzRGVt
b3RlZCk7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgbV9mb3JtKTsKLSAgICBtX29w
ZW5FbGVtZW50cy5wdXNoKG1fZm9ybSk7CisgICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3Rh
Y2tOb2RlOjpjcmVhdGUobV9mb3JtLCB0b2tlbikpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAg
IFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwogICAg
IGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQpOwotICAgIG1fb3BlbkVsZW1lbnRz
LnB1c2goZWxlbWVudC5yZWxlYXNlKCkpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0
YWNrTm9kZTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgpLCB0b2tlbikpOwogfQogCiB2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCkBAIC0zMzAsNyArMzMxLDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAg
ICAvLyBQb3NzaWJsZSBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cyBpbmNsdWRlOgogICAgIC8v
IGEsIGIsIGJpZywgY29kZSwgZW0sIGZvbnQsIGksIG5vYnIsIHMsIHNtYWxsLCBzdHJpa2UsIHN0
cm9uZywgdHQsIGFuZCB1LgogICAgIGluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKLSAgICBtX2Fj
dGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5hcHBlbmQoY3VycmVudEVsZW1lbnQoKSk7CisgICAgbV9h
Y3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuYXBwZW5kKEhUTUxTdGFja05vZGU6OmNyZWF0ZShjdXJy
ZW50RWxlbWVudCgpLCB0b2tlbikpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCkBAIC0zNDYsNyArMzQ3
LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVudChBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgIGlmIChtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biAhPSBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpCiAgICAgICAgIGVsZW1lbnQtPnBhcnNlclNl
dEF0dHJpYnV0ZXModG9rZW4uYXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbik7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgZWxlbWVudCk7Ci0gICAgbV9v
cGVuRWxlbWVudHMucHVzaChlbGVtZW50LnJlbGVhc2UoKSk7CisgICAgbV9vcGVuRWxlbWVudHMu
cHVzaChIVE1MU3RhY2tOb2RlOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNlKCksIHRva2VuKSk7CiB9
CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcmVpZ25FbGVtZW50KEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKQpAQCAt
MzU3LDcgKzM1OCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcmVpZ25F
bGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0CiAgICAgUmVmUHRyPEVsZW1l
bnQ+IGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHRva2VuLCBuYW1lc3BhY2VVUkkpOwogICAgIGF0
dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQsIHRva2VuLnNlbGZDbG9zaW5nKCkpOwog
ICAgIGlmICghdG9rZW4uc2VsZkNsb3NpbmcoKSkKLSAgICAgICAgbV9vcGVuRWxlbWVudHMucHVz
aChlbGVtZW50LnJlbGVhc2UoKSk7CisgICAgICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0
YWNrTm9kZTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgpLCB0b2tlbiwgbmFtZXNwYWNlVVJJKSk7
CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFRleHROb2RlKGNvbnN0IFN0
cmluZyYgY2hhcmFjdGVycywgV2hpdGVzcGFjZU1vZGUgd2hpdGVzcGFjZU1vZGUpCkBAIC00MjEs
MjggKzQyMiwxNCBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpj
cmVhdGVIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRvawogICAgIHJldHVybiBlbGVtZW50
LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6Y3JlYXRlSFRNTEVsZW1lbnRGcm9tRWxlbWVudFJlY29yZChIVE1MRWxlbWVudFN0YWNrOjpF
bGVtZW50UmVjb3JkKiByZWNvcmQpCitQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4oUGFzc1JlZlB0cjxIVE1M
U3RhY2tOb2RlPiBub2RlKQogewotICAgIHJldHVybiBjcmVhdGVIVE1MRWxlbWVudEZyb21TYXZl
ZEVsZW1lbnQocmVjb3JkLT5lbGVtZW50KCkpOwotfQotCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudEZyb21TYXZlZEVsZW1lbnQoRWxl
bWVudCogZWxlbWVudCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgd3JvbmcuICBX
ZSBzaG91bGQgYmUgdXNpbmcgdGhlIG9yaWdpbmFsIHRva2VuLgotICAgIC8vIFVzaW5nIGFuIEVs
ZW1lbnQqIGNhdXNlcyB1cyB0byBmYWlsIGV4YW1wbGVzIGxpa2UgdGhpczoKLSAgICAvLyA8YiBp
ZD0iMSI+PHA+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiMSIpLmlkID0gIjIiPC9z
Y3JpcHQ+PC9wPlRFWFQ8L2I+Ci0gICAgLy8gV2hlbiByZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1h
dHRpbmdFbGVtZW50cyBjYWxscyB0aGlzIG1ldGhvZCB0byBvcGVuCi0gICAgLy8gYSBzZWNvbmQg
PGI+IHRhZyB0byB3cmFwIFRFWFQsIGl0IHdpbGwgaGF2ZSBpZCAiMiIsIGV2ZW4gdGhvdWdoIHRo
ZSBIVE1MNQotICAgIC8vIHNwZWMgaW1wbGllcyBpdCBzaG91bGQgYmUgIjEiLiAgTWluZWZpZWxk
IG1hdGNoZXMgdGhlIEhUTUw1IHNwZWMgaGVyZS4KLQotICAgIEFTU0VSVChlbGVtZW50LT5pc0hU
TUxFbGVtZW50KCkpOyAvLyBvdGhlcndpc2UgbG9jYWxOYW1lKCkgbWlnaHQgYmUgd3JvbmcuCi0K
LSAgICBWZWN0b3I8QXR0cmlidXRlPiBjbG9uZWRBdHRyaWJ1dGVzOwotICAgIGlmIChFbGVtZW50
QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVE
YXRhKCkpCi0gICAgICAgIGNsb25lZEF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVEYXRhLT5jbG9uZWRB
dHRyaWJ1dGVWZWN0b3IoKTsKLQotICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRv
a2VuVHlwZXM6OlN0YXJ0VGFnLCBlbGVtZW50LT5sb2NhbE5hbWUoKSwgY2xvbmVkQXR0cmlidXRl
cyk7Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxFbGVtZW50KGZha2VUb2tlbik7CisgICAgUmVmUHRy
PEVsZW1lbnQ+IGVsZW1lbnQ7CisgICAgaWYgKG5vZGUtPm5hbWVzcGFjZVVSSSgpID09IEhUTUxO
YW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpCisgICAgICAgIGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxl
bWVudChub2RlLT50b2tlbigpKTsKKyAgICBlbHNlCisgICAgICAgIGVsZW1lbnQgPSBjcmVhdGVF
bGVtZW50KG5vZGUtPnRva2VuKCksIG5vZGUtPm5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4g
SFRNTFN0YWNrTm9kZTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgpLCBub2RlLT50b2tlbigpLCBu
b2RlLT5uYW1lc3BhY2VVUkkoKSk7CiB9CiAKIGJvb2wgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
ZGV4T2ZGaXJzdFVub3BlbkZvcm1hdHRpbmdFbGVtZW50KHVuc2lnbmVkJiBmaXJzdFVub3BlbkVs
ZW1lbnRJbmRleCkgY29uc3QKQEAgLTQ3MiwxMCArNDU5LDEwIEBAIHZvaWQgSFRNTENvbnN0cnVj
dGlvblNpdGU6OnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCkKICAgICBB
U1NFUlQodW5vcGVuRW50cnlJbmRleCA8IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnNpemUo
KSk7CiAgICAgZm9yICg7IHVub3BlbkVudHJ5SW5kZXggPCBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cy5zaXplKCk7ICsrdW5vcGVuRW50cnlJbmRleCkgewogICAgICAgICBIVE1MRm9ybWF0dGlu
Z0VsZW1lbnRMaXN0OjpFbnRyeSYgdW5vcGVuZWRFbnRyeSA9IG1fYWN0aXZlRm9ybWF0dGluZ0Vs
ZW1lbnRzLmF0KHVub3BlbkVudHJ5SW5kZXgpOwotICAgICAgICBSZWZQdHI8RWxlbWVudD4gcmVj
b25zdHJ1Y3RlZCA9IGNyZWF0ZUhUTUxFbGVtZW50RnJvbVNhdmVkRWxlbWVudCh1bm9wZW5lZEVu
dHJ5LmVsZW1lbnQoKSk7Ci0gICAgICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIHJlY29u
c3RydWN0ZWQpOwotICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNoKHJlY29uc3RydWN0ZWQucmVs
ZWFzZSgpKTsKLSAgICAgICAgdW5vcGVuZWRFbnRyeS5yZXBsYWNlRWxlbWVudChjdXJyZW50RWxl
bWVudCgpKTsKKyAgICAgICAgUmVmUHRyPEhUTUxTdGFja05vZGU+IHJlY29uc3RydWN0ZWQgPSBj
cmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4odW5vcGVuZWRFbnRyeS5zdGFja05vZGUoKSk7Cisg
ICAgICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIHJlY29uc3RydWN0ZWQtPm5vZGUoKSk7
CisgICAgICAgIG1fb3BlbkVsZW1lbnRzLnB1c2gocmVjb25zdHJ1Y3RlZCk7CisgICAgICAgIHVu
b3BlbmVkRW50cnkucmVwbGFjZUVsZW1lbnQocmVjb25zdHJ1Y3RlZC5yZWxlYXNlKCkpOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0
cnVjdGlvblNpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmgKaW5kZXggMzY3YzBmZTI2ODU2YmY3NmQxZDRlNjg0MmE2ZmNlMWQ5NWZiM2NhMS4u
YWFmZWZkZmMwZGE5ZmI3ODRmMTY0ZjI0ODM4YzhkMjg3NWY4ZTA1YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCkBAIC0xMDYsNyAr
MTA2LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keShB
dG9taWNIVE1MVG9rZW4mKTsKIAogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlSFRNTEVs
ZW1lbnQoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVI
VE1MRWxlbWVudEZyb21FbGVtZW50UmVjb3JkKEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNv
cmQqKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IGNyZWF0ZUVsZW1lbnRGcm9tU2F2
ZWRUb2tlbihQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsKIAogICAgIGJvb2wgc2hvdWxkRm9z
dGVyUGFyZW50KCkgY29uc3Q7CiAgICAgdm9pZCBmb3N0ZXJQYXJlbnQoUGFzc1JlZlB0cjxOb2Rl
Pik7CkBAIC0xNjAsNyArMTYwLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmluZEZvc3RlclNp
dGUoSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrJik7CiAKLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+
IGNyZWF0ZUhUTUxFbGVtZW50RnJvbVNhdmVkRWxlbWVudChFbGVtZW50Kik7CiAgICAgUGFzc1Jl
ZlB0cjxFbGVtZW50PiBjcmVhdGVFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlVVJJKTsKIAogICAgIHZvaWQgbWVyZ2VBdHRyaWJ1dGVzRnJvbVRv
a2VuSW50b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgRWxlbWVudCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAppbmRleCBjZDVkMDhhNTUz
ZWRjODQ3MzU2MWExNjFlZTFhOTc0YTI3ZjYwM2MzLi5mZjcwYWMyMWY1MWE0ZTJkMTg4NTkzNzNh
ZmI0YTkwMzhjNmZkMTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRWxlbWVudFN0YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
RWxlbWVudFN0YWNrLmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIGlubGluZSBib29sIGlzU2VsZWN0
U2NvcGVNYXJrZXIoQ29udGFpbmVyTm9kZSogbm9kZSkKIAogfQogCi1IVE1MRWxlbWVudFN0YWNr
OjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4g
bm9kZSwgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPiBuZXh0KQorSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZDo6RWxlbWVudFJlY29yZChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IG5v
ZGUsIFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4gbmV4dCkKICAgICA6IG1fbm9kZShub2RlKQog
ICAgICwgbV9uZXh0KG5leHQpCiB7CkBAIC0xMzYsMTIgKzEzNiwxMiBAQCBIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkOjp+RWxlbWVudFJlY29yZCgpCiB7CiB9CiAKLXZvaWQgSFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6cmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVt
ZW50PiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpyZXBs
YWNlRWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IG5vZGUpCiB7Ci0gICAgQVNTRVJU
KGVsZW1lbnQpOwotICAgIEFTU0VSVCghbV9ub2RlIHx8IG1fbm9kZS0+aXNFbGVtZW50Tm9kZSgp
KTsKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKCFtX25vZGUgfHwgbV9ub2RlLT5ub2Rl
KCktPmlzRWxlbWVudE5vZGUoKSk7CiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNhbGwgZmlu
aXNoUGFyc2luZ0NoaWxkcmVuPwotICAgIG1fbm9kZSA9IGVsZW1lbnQ7CisgICAgbV9ub2RlID0g
bm9kZTsKIH0KIAogYm9vbCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjppc0Fib3Zl
KEVsZW1lbnRSZWNvcmQqIG90aGVyKSBjb25zdApAQCAtMzA3LDYyICszMDcsNjIgQEAgdm9pZCBI
VE1MRWxlbWVudFN0YWNrOjpwb3BVbnRpbEZvcmVpZ25Db250ZW50U2NvcGVNYXJrZXIoKQogICAg
ICAgICBwb3AoKTsKIH0KICAgICAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaFJvb3ROb2Rl
KFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gcm9vdE5vZGUpCit2b2lkIEhUTUxFbGVtZW50U3Rh
Y2s6OnB1c2hSb290Tm9kZShQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IHJvb3ROb2RlKQogewot
ICAgIEFTU0VSVChyb290Tm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVO
VF9OT0RFKTsKKyAgICBBU1NFUlQocm9vdE5vZGUtPm5vZGUoKS0+bm9kZVR5cGUoKSA9PSBOb2Rl
OjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKTsKICAgICBwdXNoUm9vdE5vZGVDb21tb24ocm9vdE5v
ZGUpOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQoUGFz
c1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRN
TEh0bWxFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkKIHsKLSAgICBBU1NF
UlQoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKLSAgICBwdXNoUm9v
dE5vZGVDb21tb24oZWxlbWVudCk7CisgICAgQVNTRVJUKG5vZGUtPmVsZW1lbnQoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKKyAgICBwdXNoUm9vdE5vZGVDb21tb24obm9kZSk7
CiB9CiAgICAgCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZUNvbW1vbihQYXNz
UmVmUHRyPENvbnRhaW5lck5vZGU+IHJvb3ROb2RlKQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpw
dXNoUm9vdE5vZGVDb21tb24oUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiByb290Tm9kZSkKIHsK
ICAgICBBU1NFUlQoIW1fdG9wKTsKICAgICBBU1NFUlQoIW1fcm9vdE5vZGUpOwotICAgIG1fcm9v
dE5vZGUgPSByb290Tm9kZS5nZXQoKTsKKyAgICBtX3Jvb3ROb2RlID0gcm9vdE5vZGUtPm5vZGUo
KTsKICAgICBwdXNoQ29tbW9uKHJvb3ROb2RlKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNr
OjpwdXNoSFRNTEhlYWRFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKK3ZvaWQg
SFRNTEVsZW1lbnRTdGFjazo6cHVzaEhUTUxIZWFkRWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFj
a05vZGU+IG5vZGUpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoZWFkVGFnKSk7CisgICAgQVNTRVJUKG5vZGUtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmhlYWRUYWcpKTsKICAgICBBU1NFUlQoIW1faGVhZEVsZW1lbnQpOwotICAgIG1faGVh
ZEVsZW1lbnQgPSBlbGVtZW50LmdldCgpOwotICAgIHB1c2hDb21tb24oZWxlbWVudCk7CisgICAg
bV9oZWFkRWxlbWVudCA9IG5vZGUtPmVsZW1lbnQoKTsKKyAgICBwdXNoQ29tbW9uKG5vZGUpOwog
fQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0
cjxFbGVtZW50PiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEJvZHlF
bGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkKIHsKLSAgICBBU1NFUlQoZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsKKyAgICBBU1NFUlQobm9kZS0+
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOwogICAgIEFTU0VSVCgh
bV9ib2R5RWxlbWVudCk7Ci0gICAgbV9ib2R5RWxlbWVudCA9IGVsZW1lbnQuZ2V0KCk7Ci0gICAg
cHVzaENvbW1vbihlbGVtZW50KTsKKyAgICBtX2JvZHlFbGVtZW50ID0gbm9kZS0+ZWxlbWVudCgp
OworICAgIHB1c2hDb21tb24obm9kZSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVz
aChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1
c2goUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBub2RlKQogewotICAgIEFTU0VSVCghZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSk7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOworICAgIEFTU0VSVCghbm9kZS0+ZWxlbWVu
dCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpOworICAgIEFTU0VSVCghbm9kZS0+
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpOworICAgIEFTU0VSVCgh
bm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOwogICAgIEFT
U0VSVChtX3Jvb3ROb2RlKTsKLSAgICBwdXNoQ29tbW9uKGVsZW1lbnQpOworICAgIHB1c2hDb21t
b24obm9kZSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJvdmUoUGFzc1Jl
ZlB0cjxFbGVtZW50PiBlbGVtZW50LCBFbGVtZW50UmVjb3JkKiByZWNvcmRCZWxvdykKK3ZvaWQg
SFRNTEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJvdmUoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBu
b2RlLCBFbGVtZW50UmVjb3JkKiByZWNvcmRCZWxvdykKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7
CisgICAgQVNTRVJUKG5vZGUpOwogICAgIEFTU0VSVChyZWNvcmRCZWxvdyk7CiAgICAgQVNTRVJU
KG1fdG9wKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1s
VGFnKSk7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRh
ZykpOwotICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcp
KTsKKyAgICBBU1NFUlQoIW5vZGUtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0
bWxUYWcpKTsKKyAgICBBU1NFUlQoIW5vZGUtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmhlYWRUYWcpKTsKKyAgICBBU1NFUlQoIW5vZGUtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmJvZHlUYWcpKTsKICAgICBBU1NFUlQobV9yb290Tm9kZSk7CiAgICAgaWYgKHJl
Y29yZEJlbG93ID09IG1fdG9wKSB7Ci0gICAgICAgIHB1c2goZWxlbWVudCk7CisgICAgICAgIHB1
c2gobm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM3MSw3ICszNzEsNyBAQCB2
b2lkIEhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFib3ZlKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxl
bWVudCwgRWxlbWVudFJlY29yZCogcgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
bV9zdGFja0RlcHRoKys7Ci0gICAgICAgIHJlY29yZEFib3ZlLT5zZXROZXh0KGFkb3B0UHRyKG5l
dyBFbGVtZW50UmVjb3JkKGVsZW1lbnQsIHJlY29yZEFib3ZlLT5yZWxlYXNlTmV4dCgpKSkpOwor
ICAgICAgICByZWNvcmRBYm92ZS0+c2V0TmV4dChhZG9wdFB0cihuZXcgRWxlbWVudFJlY29yZChu
b2RlLCByZWNvcmRBYm92ZS0+cmVsZWFzZU5leHQoKSkpKTsKICAgICAgICAgcmVjb3JkQWJvdmUt
Pm5leHQoKS0+ZWxlbWVudCgpLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtNTY3LDcgKzU2Nyw3IEBAIENvbnRhaW5lck5vZGUqIEhUTUxFbGVtZW50
U3RhY2s6OnJvb3ROb2RlKCkgY29uc3QKICAgICByZXR1cm4gbV9yb290Tm9kZTsKIH0KIAotdm9p
ZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoQ29tbW9uKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4g
bm9kZSkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaENvbW1vbihQYXNzUmVmUHRyPEhUTUxT
dGFja05vZGU+IG5vZGUpCiB7CiAgICAgQVNTRVJUKG1fcm9vdE5vZGUpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmgKaW5kZXggZjdiYWEzNjQ0N2Iw
N2Q1MjhmM2UyNzczMzI0YzgxNDJlOTE0MWY4OC4uMzQ5MTg1Yjk3ZTQzZmI1MDA1NTVlMTM1YjQ5
Y2EyOTJkODQxZWNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TEVsZW1lbnRTdGFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVt
ZW50U3RhY2suaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdGFja05vZGUuaCIKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KQEAgLTU1LDIzICs1NiwyNCBAQCBwdWJsaWM6CiAgICAgcHVibGljOgog
ICAgICAgICB+RWxlbWVudFJlY29yZCgpOyAvLyBQdWJsaWMgZm9yIH5QYXNzT3duUHRyKCkKICAg
ICAKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudCht
X25vZGUuZ2V0KCkpOyB9Ci0gICAgICAgIENvbnRhaW5lck5vZGUqIG5vZGUoKSBjb25zdCB7IHJl
dHVybiBtX25vZGUuZ2V0KCk7IH0KLSAgICAgICAgdm9pZCByZXBsYWNlRWxlbWVudChQYXNzUmVm
UHRyPEVsZW1lbnQ+KTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fbm9kZS0+ZWxlbWVudCgpOyB9CisgICAgICAgIENvbnRhaW5lck5vZGUqIG5vZGUoKSBjb25z
dCB7IHJldHVybiBtX25vZGUtPm5vZGUoKTsgfQorICAgICAgICBQYXNzUmVmUHRyPEhUTUxTdGFj
a05vZGU+IHN0YWNrTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorCisgICAgICAgIHZv
aWQgcmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7CiAKICAgICAgICAg
Ym9vbCBpc0Fib3ZlKEVsZW1lbnRSZWNvcmQqKSBjb25zdDsKIAogICAgICAgICBFbGVtZW50UmVj
b3JkKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9Ci0KICAgICBwcml2YXRl
OgogICAgICAgICBmcmllbmQgY2xhc3MgSFRNTEVsZW1lbnRTdGFjazsKIAotICAgICAgICBFbGVt
ZW50UmVjb3JkKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4sIFBhc3NPd25QdHI8RWxlbWVudFJl
Y29yZD4pOworICAgICAgICBFbGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4s
IFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4pOwogCiAgICAgICAgIFBhc3NPd25QdHI8RWxlbWVu
dFJlY29yZD4gcmVsZWFzZU5leHQoKSB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CiAgICAg
ICAgIHZvaWQgc2V0TmV4dChQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpIHsgbV9uZXh0
ID0gbmV4dDsgfQogCi0gICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX25vZGU7CisgICAg
ICAgIFJlZlB0cjxIVE1MU3RhY2tOb2RlPiBtX25vZGU7CiAgICAgICAgIE93blB0cjxFbGVtZW50
UmVjb3JkPiBtX25leHQ7CiAgICAgfTsKIApAQCAtOTcsMTMgKzk5LDEzIEBAIHB1YmxpYzoKICAg
ICBFbGVtZW50UmVjb3JkKiBmaW5kKEVsZW1lbnQqKSBjb25zdDsKICAgICBFbGVtZW50UmVjb3Jk
KiB0b3Btb3N0KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3Q7CiAKLSAgICB2b2lk
IGluc2VydEFib3ZlKFBhc3NSZWZQdHI8RWxlbWVudD4sIEVsZW1lbnRSZWNvcmQqKTsKKyAgICB2
b2lkIGluc2VydEFib3ZlKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4sIEVsZW1lbnRSZWNvcmQq
KTsKIAotICAgIHZvaWQgcHVzaChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKLSAgICB2b2lkIHB1c2hS
b290Tm9kZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+KTsKLSAgICB2b2lkIHB1c2hIVE1MSHRt
bEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7Ci0gICAgdm9pZCBwdXNoSFRNTEhlYWRFbGVt
ZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOwotICAgIHZvaWQgcHVzaEhUTUxCb2R5RWxlbWVudChQ
YXNzUmVmUHRyPEVsZW1lbnQ+KTsKKyAgICB2b2lkIHB1c2goUGFzc1JlZlB0cjxIVE1MU3RhY2tO
b2RlPik7CisgICAgdm9pZCBwdXNoUm9vdE5vZGUoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7
CisgICAgdm9pZCBwdXNoSFRNTEh0bWxFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4p
OworICAgIHZvaWQgcHVzaEhUTUxIZWFkRWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+
KTsKKyAgICB2b2lkIHB1c2hIVE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2Rl
Pik7CiAKICAgICB2b2lkIHBvcCgpOwogICAgIHZvaWQgcG9wVW50aWwoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lKTsKQEAgLTE1Niw4ICsxNTgsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJp
dmF0ZToKLSAgICB2b2lkIHB1c2hDb21tb24oUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPik7Ci0g
ICAgdm9pZCBwdXNoUm9vdE5vZGVDb21tb24oUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPik7Cisg
ICAgdm9pZCBwdXNoQ29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4pOworICAgIHZvaWQg
cHVzaFJvb3ROb2RlQ29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4pOwogICAgIHZvaWQg
cG9wQ29tbW9uKCk7CiAgICAgdm9pZCByZW1vdmVOb25Ub3BDb21tb24oRWxlbWVudCopOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxl
bWVudExpc3QuY3BwCmluZGV4IDAxNDVkZTBlNmYzOWUwMTkwMGMyNDE1YjQ3ZDllNjU3YTUyMWVk
ZjEuLjFjNTNiY2M3MzE3NDMyMzgzNTkyNTQ2ZGY3MTM1YmM1MDI1MzhkZjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3QuY3BwCkBAIC04NywyNSArODcsMjcgQEAgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Qm9v
a21hcmsgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Ym9va21hcmtGb3IoRWxlbWUKICAgICBy
ZXR1cm4gQm9va21hcmsoJmF0KGluZGV4KSk7CiB9CiAKLXZvaWQgSFRNTEZvcm1hdHRpbmdFbGVt
ZW50TGlzdDo6c3dhcFRvKEVsZW1lbnQqIG9sZEVsZW1lbnQsIEVsZW1lbnQqIG5ld0VsZW1lbnQs
IGNvbnN0IEJvb2ttYXJrJiBib29rbWFyaykKK3ZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dDo6c3dhcFRvKEVsZW1lbnQqIG9sZEVsZW1lbnQsIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4g
cHJwTmV3Tm9kZSwgY29uc3QgQm9va21hcmsmIGJvb2ttYXJrKQogeworICAgIFJlZlB0cjxIVE1M
U3RhY2tOb2RlPiBuZXdOb2RlID0gcHJwTmV3Tm9kZTsKKwogICAgIEFTU0VSVChjb250YWlucyhv
bGRFbGVtZW50KSk7Ci0gICAgQVNTRVJUKCFjb250YWlucyhuZXdFbGVtZW50KSk7CisgICAgQVNT
RVJUKCFjb250YWlucyhuZXdOb2RlLT5lbGVtZW50KCkpKTsKICAgICBpZiAoIWJvb2ttYXJrLmhh
c0JlZW5Nb3ZlZCgpKSB7CiAgICAgICAgIEFTU0VSVChib29rbWFyay5tYXJrKCktPmVsZW1lbnQo
KSA9PSBvbGRFbGVtZW50KTsKLSAgICAgICAgYm9va21hcmsubWFyaygpLT5yZXBsYWNlRWxlbWVu
dChuZXdFbGVtZW50KTsKKyAgICAgICAgYm9va21hcmsubWFyaygpLT5yZXBsYWNlRWxlbWVudChu
ZXdOb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBzaXplX3QgaW5kZXggPSBib29r
bWFyay5tYXJrKCkgLSBmaXJzdCgpOwogICAgIEFTU0VSVChpbmRleCA8IHNpemUoKSk7Ci0gICAg
bV9lbnRyaWVzLmluc2VydChpbmRleCArIDEsIG5ld0VsZW1lbnQpOworICAgIG1fZW50cmllcy5p
bnNlcnQoaW5kZXggKyAxLCBuZXdOb2RlKTsKICAgICByZW1vdmUob2xkRWxlbWVudCk7CiB9CiAK
LXZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6YXBwZW5kKEVsZW1lbnQqIGVsZW1lbnQp
Cit2b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmFwcGVuZChQYXNzUmVmUHRyPEhUTUxT
dGFja05vZGU+IG5vZGUpCiB7Ci0gICAgZW5zdXJlTm9haHNBcmtDb25kaXRpb24oZWxlbWVudCk7
Ci0gICAgbV9lbnRyaWVzLmFwcGVuZChlbGVtZW50KTsKKyAgICBlbnN1cmVOb2Foc0Fya0NvbmRp
dGlvbihub2RlLT5lbGVtZW50KCkpOworICAgIG1fZW50cmllcy5hcHBlbmQobm9kZSk7CiB9CiAK
IHZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6cmVtb3ZlKEVsZW1lbnQqIGVsZW1lbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0LmgKaW5kZXggNzlmZTJmZjM3NTc1NTBlNGQzYWU4ZTUyOGUxM2Q5MDU1ZGQxNzk4
NC4uMmY3ZGI5ZjkxZDUwYTgxM2RhNGY4YTYwZGE1ZTQ2OWE3YjhmNTZkNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Qu
aApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0X2gK
ICNkZWZpbmUgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdF9oCiAKKyNpbmNsdWRlICJIVE1MU3Rh
Y2tOb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDcsMzUgKzQ4LDM1IEBAIHB1YmxpYzoK
ICAgICBjbGFzcyBFbnRyeSB7CiAgICAgcHVibGljOgogICAgICAgICAvLyBJbmxpbmUgYmVjYXVz
ZSB0aGV5J3JlIGhvdCBhbmQgVmVjdG9yPFQ+IHVzZXMgdGhlbS4KLSAgICAgICAgZXhwbGljaXQg
RW50cnkoRWxlbWVudCogZWxlbWVudCkKLSAgICAgICAgICAgIDogbV9lbGVtZW50KGVsZW1lbnQp
CisgICAgICAgIGV4cGxpY2l0IEVudHJ5KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkK
KyAgICAgICAgICAgIDogbV9ub2RlKG5vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VChlbGVtZW50KTsKICAgICAgICAgfQogICAgICAgICBlbnVtIE1hcmtlckVudHJ5VHlwZSB7IE1h
cmtlckVudHJ5IH07CiAgICAgICAgIEVudHJ5KE1hcmtlckVudHJ5VHlwZSkKLSAgICAgICAgICAg
IDogbV9lbGVtZW50KDApCisgICAgICAgICAgICA6IG1fbm9kZSgwKQogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICAgICAgfkVudHJ5KCkge30KIAotICAgICAgICBib29sIGlzTWFya2VyKCkgY29u
c3QgeyByZXR1cm4gIW1fZWxlbWVudDsgfQorICAgICAgICBib29sIGlzTWFya2VyKCkgY29uc3Qg
eyByZXR1cm4gIW1fbm9kZTsgfQogCisgICAgICAgIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4g
c3RhY2tOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CiAgICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQoKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGUgZmFjdCB0aGF0ICFt
X2VsZW1lbnQgPT0gaXNNYXJrZXIoKSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwKKyAgICAg
ICAgICAgIC8vIFRoZSBmYWN0IHRoYXQgIW1fbm9kZSA9PSBpc01hcmtlcigpIGlzIGFuIGltcGxl
bWVudGF0aW9uIGRldGFpbAogICAgICAgICAgICAgLy8gY2FsbGVycyBzaG91bGQgY2hlY2sgaXNN
YXJrZXIoKSBiZWZvcmUgY2FsbGluZyBlbGVtZW50KCkuCi0gICAgICAgICAgICBBU1NFUlQobV9l
bGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7CisgICAgICAgICAg
ICBBU1NFUlQobV9ub2RlKTsKKyAgICAgICAgICAgIHJldHVybiBtX25vZGUtPmVsZW1lbnQoKTsK
ICAgICAgICAgfQotICAgICAgICB2b2lkIHJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVu
dD4gZWxlbWVudCkgeyBtX2VsZW1lbnQgPSBlbGVtZW50OyB9CisgICAgICAgIHZvaWQgcmVwbGFj
ZUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBub2RlKSB7IG1fbm9kZSA9IG5vZGU7
IH0KIAogICAgICAgICAvLyBOZWVkZWQgZm9yIHVzZSB3aXRoIFZlY3Rvci4gIFRoZXNlIGFyZSBz
dXBlci1ob3QgYW5kIG11c3QgYmUgaW5saW5lLgotICAgICAgICBib29sIG9wZXJhdG9yPT0oRWxl
bWVudCogZWxlbWVudCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50ID09IGVsZW1lbnQ7IH0KLSAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIG1f
ZWxlbWVudCAhPSBlbGVtZW50OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShFbGVtZW50KiBl
bGVtZW50KSBjb25zdCB7IHJldHVybiAhbV9ub2RlID8gIWVsZW1lbnQgOiBtX25vZGUtPmVsZW1l
bnQoKSA9PSBlbGVtZW50OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShFbGVtZW50KiBlbGVt
ZW50KSBjb25zdCB7IHJldHVybiAhbV9ub2RlID8gISFlbGVtZW50IDogbV9ub2RlLT5lbGVtZW50
KCkgIT0gZWxlbWVudDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+
IG1fZWxlbWVudDsKKyAgICAgICAgUmVmUHRyPEhUTUxTdGFja05vZGU+IG1fbm9kZTsKICAgICB9
OwogCiAgICAgY2xhc3MgQm9va21hcmsgewpAQCAtMTA3LDExICsxMDgsMTEgQEAgcHVibGljOgog
CiAgICAgRW50cnkqIGZpbmQoRWxlbWVudCopOwogICAgIGJvb2wgY29udGFpbnMoRWxlbWVudCop
OwotICAgIHZvaWQgYXBwZW5kKEVsZW1lbnQqKTsKKyAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRy
PEhUTUxTdGFja05vZGU+KTsKICAgICB2b2lkIHJlbW92ZShFbGVtZW50Kik7CiAKICAgICBCb29r
bWFyayBib29rbWFya0ZvcihFbGVtZW50Kik7Ci0gICAgdm9pZCBzd2FwVG8oRWxlbWVudCogb2xk
RWxlbWVudCwgRWxlbWVudCogbmV3RWxlbWVudCwgY29uc3QgQm9va21hcmsmKTsKKyAgICB2b2lk
IHN3YXBUbyhFbGVtZW50KiBvbGRFbGVtZW50LCBQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IHBy
cE5ld05vZGUsIGNvbnN0IEJvb2ttYXJrJik7CiAKICAgICB2b2lkIGFwcGVuZE1hcmtlcigpOwog
ICAgIC8vIGNsZWFyVG9MYXN0TWFya2VyIGFsc28gY2xlYXJzIHRoZSBtYXJrZXIgKHBlciB0aGUg
SFRNTDUgc3BlYykuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
U3RhY2tOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3RhY2tOb2RlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGViZmRlOWExMjBhYzg5ZWYzNDhiNzUzMDc1OTRlNGU3MTgwMmYyZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTdGFja05vZGUu
aApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAw
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEdPT0dMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSFRNTFN0YWNrTm9kZV9oCisjZGVmaW5lIEhUTUxT
dGFja05vZGVfaAorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgorI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFpbmVyTm9kZTsKKworY2xh
c3MgSFRNTFN0YWNrTm9kZSA6IHB1YmxpYyBSZWZDb3VudGVkPEhUTUxTdGFja05vZGU+IHsKK3B1
YmxpYzoKKyAgICAvLyBEb2N1bWVudEZyYWdtZW50IGNhc2UuCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SFRNTFN0YWNrTm9kZT4gY3JlYXRlKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSkK
KyAgICB7CisgICAgICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuVHlwZXM6
OlN0YXJ0VGFnLCAiIik7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFN0YWNrTm9k
ZShub2RlLCBmYWtlVG9rZW4pKTsKKyAgICB9CisKKyAgICAvLyBVc2VkIGJ5IEhUTUxFbGVtZW50
U3RhY2suCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gY3JlYXRlKFBhc3NS
ZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSwgQXRvbWljSFRNTFRva2VuJiB0b2tlbiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJ
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MU3RhY2tOb2RlKG5vZGUs
IHRva2VuLCBuYW1lc3BhY2VVUkkpKTsKKyAgICB9CisKKyAgICAvLyBVc2VkIGJ5IEhUTUxGb3Jt
YXR0aW5nRWxlbWVudExpc3QuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4g
Y3JlYXRlKEVsZW1lbnQqIGVsZW1lbnQsIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFN0YWNrTm9kZShlbGVtZW50
LCB0b2tlbiwgbmFtZXNwYWNlVVJJKSk7CisgICAgfQorCisgICAgRWxlbWVudCogZWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChtX25vZGUuZ2V0KCkpOyB9CisgICAgQ29udGFpbmVy
Tm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorCisgICAgLy8gRklY
TUU6IHRoaXMgc2hvdWxkIGJlIGNvbnN0LgorICAgIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4oKSB7
IHJldHVybiBtX3Rva2VuOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkko
KSBjb25zdCB7IHJldHVybiBtX25hbWVzcGFjZVVSSTsgfQorCitwcml2YXRlOgorICAgIEhUTUxT
dGFja05vZGUoUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlLCBBdG9taWNIVE1MVG9rZW4m
IHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0
bWxOYW1lc3BhY2VVUkkpCisgICAgICAgIDogbV9ub2RlKG5vZGUpCisgICAgICAgICwgbV90b2tl
bihIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIHRva2VuLm5hbWUoKSwgdG9rZW4uYXR0cmlidXRl
cygpKQorICAgICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKKyAgICB7CisgICAg
fQorCisgICAgSFRNTFN0YWNrTm9kZShFbGVtZW50KiBlbGVtZW50LCBBdG9taWNIVE1MVG9rZW4m
IHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0
bWxOYW1lc3BhY2VVUkkpCisgICAgICAgIDogbV9ub2RlKGVsZW1lbnQpCisgICAgICAgICwgbV90
b2tlbihIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIHRva2VuLm5hbWUoKSwgdG9rZW4uYXR0cmli
dXRlcygpKQorICAgICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKKyAgICB7Cisg
ICAgfQorCisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG1fbm9kZTsKKworICAgIEF0b21pY0hU
TUxUb2tlbiBtX3Rva2VuOworICAgIEF0b21pY1N0cmluZyBtX25hbWVzcGFjZVVSSTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhUTUxTdGFja05vZGVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggODAz
YjBlN2QzMmYyNTY1YmRjOGQ5OWQwNmM1NDdjZWFhMWEzYTUyMC4uNzMzNmZiODZkNzk3OWIzYzFl
YTBlZmI5ZTRmYmRmNTQ0YzNjMDg5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhUTUxTY3Jp
cHRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFN0YWNrTm9kZS5oIgogI2luY2x1ZGUgIkhUTUxU
b2tlbi5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRT
dHJpbmdzLmgiCkBAIC0zODIsNyArMzgzLDcgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1
aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERvY3VtZW50RnJhZ21lbnQqIGYKICAg
ICAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29y
ay9tdWx0aXBhZ2UvdGhlLWVuZC5odG1sI2ZyYWdtZW50LWNhc2UKICAgICAgICAgLy8gRm9yIGVm
ZmljaWVuY3ksIHdlIHNraXAgc3RlcCA0LjIgKCJMZXQgcm9vdCBiZSBhIG5ldyBodG1sIGVsZW1l
bnQgd2l0aCBubyBhdHRyaWJ1dGVzIikKICAgICAgICAgLy8gYW5kIGluc3RlYWQgdXNlIHRoZSBE
b2N1bWVudEZyYWdtZW50IGFzIGEgcm9vdCBub2RlLgotICAgICAgICBtX3RyZWUub3BlbkVsZW1l
bnRzKCktPnB1c2hSb290Tm9kZShmcmFnbWVudCk7CisgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+cHVzaFJvb3ROb2RlKEhUTUxTdGFja05vZGU6OmNyZWF0ZShmcmFnbWVudCkpOwogICAg
ICAgICByZXNldEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KCk7CiAgICAgICAgIG1fdHJlZS5z
ZXRGb3JtKGNsb3Nlc3RGb3JtQW5jZXN0b3IoY29udGV4dEVsZW1lbnQpKTsKICAgICB9CkBAIC0x
MTg2LDcgKzExODcsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdGl0
bGVUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgQVNT
RVJUKG1fdHJlZS5oZWFkKCkpOwotICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5w
dXNoSFRNTEhlYWRFbGVtZW50KG1fdHJlZS5oZWFkKCkpOworICAgICAgICAgICAgbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5wdXNoSFRNTEhlYWRFbGVtZW50KEhUTUxTdGFja05vZGU6OmNyZWF0ZSht
X3RyZWUuaGVhZCgpLCB0b2tlbikpOwogICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5I
ZWFkKHRva2VuKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cmVtb3ZlSFRN
TEhlYWRFbGVtZW50KG1fdHJlZS5oZWFkKCkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU1
NSw5ICsxNTU2LDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2Vu
Y3koQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIGlmIChub2RlID09IGZvcm1h
dHRpbmdFbGVtZW50UmVjb3JkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Ly8gNi41Ci0gICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IG1fdHJlZS5j
cmVhdGVIVE1MRWxlbWVudEZyb21FbGVtZW50UmVjb3JkKG5vZGUpOworICAgICAgICAgICAgUmVm
UHRyPEhUTUxTdGFja05vZGU+IG5ld0VsZW1lbnQgPSBtX3RyZWUuY3JlYXRlRWxlbWVudEZyb21T
YXZlZFRva2VuKG5vZGUtPnN0YWNrTm9kZSgpKTsKKwogICAgICAgICAgICAgSFRNTEZvcm1hdHRp
bmdFbGVtZW50TGlzdDo6RW50cnkqIG5vZGVFbnRyeSA9IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5n
RWxlbWVudHMoKS0+ZmluZChub2RlLT5lbGVtZW50KCkpOwotICAgICAgICAgICAgbm9kZUVudHJ5
LT5yZXBsYWNlRWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKKyAgICAgICAgICAgIG5vZGVFbnRy
eS0+cmVwbGFjZUVsZW1lbnQobmV3RWxlbWVudCk7CiAgICAgICAgICAgICBub2RlLT5yZXBsYWNl
RWxlbWVudChuZXdFbGVtZW50LnJlbGVhc2UoKSk7CiAgICAgICAgICAgICAvLyA2LjQgLS0gSW50
ZW50aW9uYWxseSBvdXQgb2Ygb3JkZXIgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG5vZGUKICAg
ICAgICAgICAgIC8vIHdhcyByZXBsYWNlZCBpbiA2LjUuCkBAIC0xNTkxLDIyICsxNTkzLDIyIEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgICAgICAgICBsYXN0Tm9kZS0+ZWxlbWVudCgpLT5sYXp5QXR0
YWNoKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gOAotICAgICAgICBSZWZQdHI8RWxlbWVudD4g
bmV3RWxlbWVudCA9IG1fdHJlZS5jcmVhdGVIVE1MRWxlbWVudEZyb21FbGVtZW50UmVjb3JkKGZv
cm1hdHRpbmdFbGVtZW50UmVjb3JkKTsKKyAgICAgICAgUmVmUHRyPEhUTUxTdGFja05vZGU+IG5l
d0VsZW1lbnQgPSBtX3RyZWUuY3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKGZvcm1hdHRpbmdF
bGVtZW50UmVjb3JkLT5zdGFja05vZGUoKSk7CiAgICAgICAgIC8vIDkKLSAgICAgICAgbmV3RWxl
bWVudC0+dGFrZUFsbENoaWxkcmVuRnJvbShmdXJ0aGVzdEJsb2NrLT5lbGVtZW50KCkpOworICAg
ICAgICBuZXdFbGVtZW50LT5lbGVtZW50KCktPnRha2VBbGxDaGlsZHJlbkZyb20oZnVydGhlc3RC
bG9jay0+ZWxlbWVudCgpKTsKICAgICAgICAgLy8gMTAKICAgICAgICAgRWxlbWVudCogZnVydGhl
c3RCbG9ja0VsZW1lbnQgPSBmdXJ0aGVzdEJsb2NrLT5lbGVtZW50KCk7CiAgICAgICAgIC8vIEZJ
WE1FOiBBbGwgdGhpcyBjcmVhdGlvbiAvIHBhcnNlckFkZENoaWxkIC8gYXR0YWNoIGJ1c2luZXNz
IHNob3VsZAogICAgICAgICAvLyAgICAgICAgYmUgaW4gSFRNTENvbnN0cnVjdGlvblNpdGUuICBN
eSBndWVzcyBpcyB0aGF0IHN0ZXBzIDgtLTEyCiAgICAgICAgIC8vICAgICAgICBzaG91bGQgYWxs
IGJlIGluIHNvbWUgSFRNTENvbnN0cnVjdGlvblNpdGUgZnVuY3Rpb24uCi0gICAgICAgIGZ1cnRo
ZXN0QmxvY2tFbGVtZW50LT5wYXJzZXJBZGRDaGlsZChuZXdFbGVtZW50KTsKLSAgICAgICAgaWYg
KGZ1cnRoZXN0QmxvY2tFbGVtZW50LT5hdHRhY2hlZCgpICYmICFuZXdFbGVtZW50LT5hdHRhY2hl
ZCgpKSB7CisgICAgICAgIGZ1cnRoZXN0QmxvY2tFbGVtZW50LT5wYXJzZXJBZGRDaGlsZChuZXdF
bGVtZW50LT5lbGVtZW50KCkpOworICAgICAgICBpZiAoZnVydGhlc3RCbG9ja0VsZW1lbnQtPmF0
dGFjaGVkKCkgJiYgIW5ld0VsZW1lbnQtPmVsZW1lbnQoKS0+YXR0YWNoZWQoKSkgewogICAgICAg
ICAgICAgLy8gTm90aWNlIHRoYXQgbmV3RWxlbWVudCBtaWdodCBhbHJlYWR5IGJlIGF0dGFjaGVk
IGlmLCBmb3IgZXhhbXBsZSwgb25lIG9mIHRoZSByZXBhcmVudGVkCiAgICAgICAgICAgICAvLyBj
aGlsZHJlbiBpcyBhIHN0eWxlIGVsZW1lbnQsIHdoaWNoIGF0dGFjaGVzIGl0c2VsZiBhdXRvbWF0
aWNhbGx5LgotICAgICAgICAgICAgbmV3RWxlbWVudC0+YXR0YWNoKCk7CisgICAgICAgICAgICBu
ZXdFbGVtZW50LT5lbGVtZW50KCktPmF0dGFjaCgpOwogICAgICAgICB9CiAgICAgICAgIC8vIDEx
Ci0gICAgICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+c3dhcFRvKGZvcm1h
dHRpbmdFbGVtZW50LCBuZXdFbGVtZW50LmdldCgpLCBib29rbWFyayk7CisgICAgICAgIG1fdHJl
ZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+c3dhcFRvKGZvcm1hdHRpbmdFbGVtZW50LCBu
ZXdFbGVtZW50LCBib29rbWFyayk7CiAgICAgICAgIC8vIDEyCiAgICAgICAgIG1fdHJlZS5vcGVu
RWxlbWVudHMoKS0+cmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKICAgICAgICAgbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5pbnNlcnRBYm92ZShuZXdFbGVtZW50LCBmdXJ0aGVzdEJsb2NrKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA3ZDg4NTEyNjNiZGI0ODkzN2VmZTlkOGEyN2M3NGE5YTNkYTdjY2U4Li5kY2Q0N2U3MmIy
ODhjZTFiZjJmYjg0ZjAzOWRlODhlMzM2MWUzNzdlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTItMDctMTggIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KKworICAgICAg
ICBVc2UgdGhlIG9yaWdpbmFsIHRva2VuIHRvIGNyZWF0ZSBhbiBlbGVtZW50IGluICJyZWNvbnN0
cnVjdCB0aGUgYWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVudHMiIGFuZCAiY2FsbCB0aGUgYWRvcHRp
b24gYWdlbmN5IgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTE3MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBVcGRhdGVkIHRlc3QgZXhwZWN0YXRpb24gZm9yIGh0bWw1bGliL3J1bm5lci1leHBlY3RlZC50
eHQKKyAgICAgICAgYmVjYXVzZSBub3cgcmVzb3VyY2VzL3NjcmlwdGVkL2Fkb3B0aW9uMDEuZGF0
IHBhc3Nlcy4KKworICAgICAgICAqIGh0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQ6CisKIDIw
MTItMDctMTggIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJ
bmRleGVkREI6IERpcmVjdGlvbiBwYXJhbWV0ZXIgaWdub3JlZCBieSBzb21lIG9wZW5DdXJzb3Io
KSBvdmVybG9hZHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0CmluZGV4
IDE5YzRiMWE2NWEwNDI5Nzk0OGFiYjAyZTg0OTMzMmM0YjZiMmFiMTUuLmNkNWEyMGY5YWYyY2U4
MDkwMDFhMzhmODA2YzM5MmRjYjAwOGZiOTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0bWw1
bGliL3J1bm5lci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVy
LWV4cGVjdGVkLnR4dApAQCAtNDMsMzMgKzQzLDYgQEAgcmVzb3VyY2VzL3RhYmxlczAxLmRhdDog
UEFTUwogCiByZXNvdXJjZXMvdHJpY2t5MDEuZGF0OiBQQVNTCiAKLXJlc291cmNlcy9zY3JpcHRl
ZC9hZG9wdGlvbjAxLmRhdDoKLTEKLQotVGVzdCAxIG9mIDEgaW4gcmVzb3VyY2VzL3NjcmlwdGVk
L2Fkb3B0aW9uMDEuZGF0IGZhaWxlZC4gSW5wdXQ6Ci08cD48YiBpZD0iQSI+PHNjcmlwdD5kb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiQSIpLmlkID0gIkIiPC9zY3JpcHQ+PC9wPlRFWFQ8L2I+Ci1H
b3Q6Ci18IDxodG1sPgotfCAgIDxoZWFkPgotfCAgIDxib2R5PgotfCAgICAgPHA+Ci18ICAgICAg
IDxiPgotfCAgICAgICAgIGlkPSJCIgotfCAgICAgICAgIDxzY3JpcHQ+Ci18ICAgICAgICAgICAi
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkEiKS5pZCA9ICJCIiIKLXwgICAgIDxiPgotfCAgICAg
ICBpZD0iQiIKLXwgICAgICAgIlRFWFQiCi1FeHBlY3RlZDoKLXwgPGh0bWw+Ci18ICAgPGhlYWQ+
Ci18ICAgPGJvZHk+Ci18ICAgICA8cD4KLXwgICAgICAgPGI+Ci18ICAgICAgICAgaWQ9IkIiCi18
ICAgICAgICAgPHNjcmlwdD4KLXwgICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
QSIpLmlkID0gIkIiIgotfCAgICAgPGI+Ci18ICAgICAgIGlkPSJBIgotfCAgICAgICAiVEVYVCIK
K3Jlc291cmNlcy9zY3JpcHRlZC9hZG9wdGlvbjAxLmRhdDogUEFTUworCiByZXNvdXJjZXMvc2Ny
aXB0ZWQvd2Via2l0MDEuZGF0OiBQQVNTCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153375</attachid>
            <date>2012-07-19 16:47:32 -0700</date>
            <delta_ts>2012-07-20 01:58:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91703-20120720084722.patch</filename>
            <type>text/plain</type>
            <size>36090</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGEyYzdkYTVkNTQxZmM4
NjZmMGZmNmE2MTdlMGJlMzU3M2U1YzJlZS4uNGI5NTgyY2RiYzNkODEwNWM5YjAwMDYyYTE2NzVi
ZWJhNjIwNmIxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTA3LTE5ICBLd2Fu
ZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgVXNlIHRoZSBvcmln
aW5hbCB0b2tlbiB0byBjcmVhdGUgYW4gZWxlbWVudCBpbiAicmVjb25zdHJ1Y3QgdGhlIGFjdGl2
ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIiBhbmQgImNhbGwgdGhlIGFkb3B0aW9uIGFnZW5jeSIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNzAzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGN1cnJlbnQg
V2ViS2l0IEhUTUw1IHBhcnNlciBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBob2xkIHRoZSBvcmln
aW5hbCB0b2tlbgorICAgICAgICBpbiB0aGUgc3RhY2sgb2Ygb3BlbiBlbGVtZW50cyBhbmQgdGhl
IGFjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzLiBUaGlzIGlzCisgICAgICAgIHByb2JsZW1hdGlj
IGJlY2F1c2UgdGhlIG9yaWdpbmFsIHRva2VuIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGVsZW1lbnQg
aW4KKyAgICAgICAgInJlY29uc3RydWN0IHRoZSBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cyIg
YW5kICJjYWxsIHRoZSBhZG9wdGlvbiBhZ2VuY3kiLgorCisgICAgICAgIEFzIGEgd29ya2Fyb3Vu
ZCwgV2ViS2l0IHVzZXMgdGhlIHNhdmVkIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwg
dG9rZW4KKyAgICAgICAgdG8gY3JlYXRlIGFuIGVsZW1lbnQuIEJ1dCB0aGlzIGNhdXNlcyB1cyB0
byBmYWlsIGV4YW1wbGVzIGxpa2UgdGhpczoKKyAgICAgICAgPGIgaWQ9IjEiPjxwPjxzY3JpcHQ+
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjEiKS5pZCA9ICIyIjwvc2NyaXB0PjwvcD5URVhUPC9i
PgorICAgICAgICByZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyBjYWxscyB0
aGlzIG1ldGhvZCB0byBvcGVuIGEgc2Vjb25kIDxiPgorICAgICAgICB0YWcgdG8gd3JhcCBURVhU
LCBpdCB3aWxsIGhhdmUgaWQgIjIiLCBldmVuIHRob3VnaCB0aGUgSFRNTDUgc3BlYyBpbXBsaWVz
IGl0CisgICAgICAgIHNob3VsZCBiZSAiMSIuCisKKyAgICAgICAgQ3JlYXRlZCBhIHJlZi1jb3Vu
dGVkIGNvbnRhaW5lciBjbGFzcywgSFRNTFN0YWNrTm9kZSB0byBob2xkIHRoZSBvcmlnaW5hbCB0
b2tlbgorICAgICAgICBhbmQgdGhlIG5hbWVzcGFjZSBVUkkgYXMgd2VsbCBhcyB0aGUgZWxlbWVu
dC4gQ2hhbmdlZCBIVE1MRWxlbWVudFN0YWNrIGFuZAorICAgICAgICBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0IHRvIHVzZSBIVE1MU3RhY2tOb2RlLgorICAgICAgICBDaGFuZ2VkIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyBhbmQK
KyAgICAgICAgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3kgdG8gY3JlYXRl
IGFuIGVsZW1lbnQgZnJvbSB0aGUgc2F2ZWQgdG9rZW4KKyAgICAgICAgaW5zdGVhZCBvZiB0aGUg
c2F2ZWQgZWxlbWVudC4KKworICAgICAgICBVcGRhdGVkIHRlc3QgZXhwZWN0YXRpb24gZm9yIGh0
bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQKKyAgICAgICAgYmVjYXVzZSBub3cgcmVzb3VyY2Vz
L3NjcmlwdGVkL2Fkb3B0aW9uMDEuZGF0IHBhc3Nlcy4KKworICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEhlYWRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxG
b3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5z
ZXJ0SFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6
Omluc2VydEZvcm1hdHRpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JlaWduRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVj
dGlvblNpdGUuaDoKKyAgICAgICAgKEhUTUxDb25zdHJ1Y3Rpb25TaXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjdXJyZW50RWxlbWVudFJlY29yZCk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVjb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0bWxFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZUNvbW1v
bik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEhlYWRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MQm9keUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjppbnNlcnRBYm92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoQ29tbW9uKToKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9IVE1MRWxlbWVudFN0YWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6Om5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6c3RhY2tOb2RlKToKKyAgICAgICAgKEVsZW1lbnRS
ZWNvcmQpOgorICAgICAgICAoSFRNTEVsZW1lbnRTdGFjayk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpzd2FwVG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1hdHRpbmdFbGVtZW50TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGlu
Z0VsZW1lbnRMaXN0OjpFbnRyeTo6RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OmlzTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpzdGFja05vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OmVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OnJlcGxhY2VFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3Q6OkVudHJ5OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEVudHJ5KToKKyAgICAgICAgKEhUTUxG
b3JtYXR0aW5nRWxlbWVudExpc3QpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTdGFja05v
ZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhUTUxTdGFja05vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0YWNrTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTdGFja05vZGU6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0
YWNrTm9kZTo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tOb2RlOjp0b2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tOb2RlOjpuYW1lc3BhY2VVUkkpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFN0YWNrTm9kZTo6SFRNTFN0YWNrTm9kZSk6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KToKKwogMjAxMi0wNy0xOCAgSm9zaHVhIEJlbGwgIDxq
c2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWREQjogRGlyZWN0aW9uIHBhcmFt
ZXRlciBpZ25vcmVkIGJ5IHNvbWUgb3BlbkN1cnNvcigpIG92ZXJsb2FkcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCmluZGV4IDRk
YTdhN2FlOWM2MTJlMDVkYmM3NDYyZGY0NGE2MDQ2OTdjMzM5MjAuLjY3MjdlOWNlMzcxNTUyMzRj
Nzg0MzJjZWUxN2M3NTdjMjIxZmY4MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVk
ZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU3RhY2tOb2RlLmgiCiAjaW5j
bHVkZSAiSFRNTFRva2VuLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgogI2luY2x1ZGUg
IkxvY2FsaXplZFN0cmluZ3MuaCIKQEAgLTE5Nyw3ICsxOTgsNyBAQCB2b2lkIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChBdG9taWNIVE1MVG9r
ZW4mIHRvawogICAgIFJlZlB0cjxIVE1MSHRtbEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MSHRtbEVs
ZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKICAgICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1
dGVzKHRva2VuLmF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwog
ICAgIGF0dGFjaExhdGVyKG1fYXR0YWNobWVudFJvb3QsIGVsZW1lbnQpOwotICAgIG1fb3BlbkVs
ZW1lbnRzLnB1c2hIVE1MSHRtbEVsZW1lbnQoZWxlbWVudCk7CisgICAgbV9vcGVuRWxlbWVudHMu
cHVzaEhUTUxIdG1sRWxlbWVudChIVE1MU3RhY2tOb2RlOjpjcmVhdGUoZWxlbWVudCwgdG9rZW4p
KTsKIAogICAgIGV4ZWN1dGVRdWV1ZWRUYXNrcygpOwogICAgIGVsZW1lbnQtPmluc2VydGVkQnlQ
YXJzZXIoKTsKQEAgLTI4NSw3ICsyODYsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBBU1NFUlQo
IXNob3VsZEZvc3RlclBhcmVudCgpKTsKICAgICBtX2hlYWQgPSBjcmVhdGVIVE1MRWxlbWVudCh0
b2tlbik7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgbV9oZWFkKTsKLSAgICBtX29w
ZW5FbGVtZW50cy5wdXNoSFRNTEhlYWRFbGVtZW50KG1faGVhZCk7CisgICAgbV9vcGVuRWxlbWVu
dHMucHVzaEhUTUxIZWFkRWxlbWVudChIVE1MU3RhY2tOb2RlOjpjcmVhdGUobV9oZWFkLCB0b2tl
bikpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keUVsZW1l
bnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKQEAgLTI5Myw3ICsyOTQsNyBAQCB2b2lkIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICBBU1NFUlQoIXNob3VsZEZvc3RlclBhcmVudCgpKTsKICAgICBSZWZQdHI8RWxl
bWVudD4gYm9keSA9IGNyZWF0ZUhUTUxFbGVtZW50KHRva2VuKTsKICAgICBhdHRhY2hMYXRlcihj
dXJyZW50Tm9kZSgpLCBib2R5KTsKLSAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEJvZHlFbGVt
ZW50KGJvZHkucmVsZWFzZSgpKTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEJvZHlFbGVt
ZW50KEhUTUxTdGFja05vZGU6OmNyZWF0ZShib2R5LnJlbGVhc2UoKSwgdG9rZW4pKTsKIH0KIAog
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4sIGJvb2wgaXNEZW1vdGVkKQpAQCAtMzAzLDE0ICszMDQsMTQgQEAgdm9p
ZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4sIGJvb2wgaXMKICAgICBtX2Zvcm0gPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEhU
TUxGb3JtRWxlbWVudD4oZWxlbWVudC5yZWxlYXNlKCkpOwogICAgIG1fZm9ybS0+c2V0RGVtb3Rl
ZChpc0RlbW90ZWQpOwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIG1fZm9ybSk7Ci0g
ICAgbV9vcGVuRWxlbWVudHMucHVzaChtX2Zvcm0pOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2go
SFRNTFN0YWNrTm9kZTo6Y3JlYXRlKG1fZm9ybSwgdG9rZW4pKTsKIH0KIAogdm9pZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
IHsKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KHRva2Vu
KTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBlbGVtZW50KTsKLSAgICBtX29wZW5F
bGVtZW50cy5wdXNoKGVsZW1lbnQucmVsZWFzZSgpKTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNo
KEhUTUxTdGFja05vZGU6OmNyZWF0ZShlbGVtZW50LnJlbGVhc2UoKSwgdG9rZW4pKTsKIH0KIAog
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudChB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQpAQCAtMzMwLDcgKzMzMSw3IEBAIHZvaWQgSFRNTENvbnN0
cnVjdGlvblNpdGU6Omluc2VydEZvcm1hdHRpbmdFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiAgICAgLy8gUG9zc2libGUgYWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVudHMgaW5jbHVkZToK
ICAgICAvLyBhLCBiLCBiaWcsIGNvZGUsIGVtLCBmb250LCBpLCBub2JyLCBzLCBzbWFsbCwgc3Ry
aWtlLCBzdHJvbmcsIHR0LCBhbmQgdS4KICAgICBpbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7Ci0g
ICAgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuYXBwZW5kKGN1cnJlbnRFbGVtZW50KCkpOwor
ICAgIG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmFwcGVuZChjdXJyZW50RWxlbWVudFJlY29y
ZCgpLT5zdGFja05vZGUoKSk7CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2Vy
dFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKQEAgLTM0Niw3ICszNDcsNyBA
QCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiAgICAgaWYgKG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uICE9
IERpc2FsbG93U2NyaXB0aW5nQ29udGVudCkKICAgICAgICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0
cmlidXRlcyh0b2tlbi5hdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9u
KTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBlbGVtZW50KTsKLSAgICBtX29wZW5F
bGVtZW50cy5wdXNoKGVsZW1lbnQucmVsZWFzZSgpKTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNo
KEhUTUxTdGFja05vZGU6OmNyZWF0ZShlbGVtZW50LnJlbGVhc2UoKSwgdG9rZW4pKTsKIH0KIAog
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9yZWlnbkVsZW1lbnQoQXRvbWljSFRN
TFRva2VuJiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpCkBAIC0zNTcs
NyArMzU4LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9yZWlnbkVsZW1l
bnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgQXQKICAgICBSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQodG9rZW4sIG5hbWVzcGFjZVVSSSk7CiAgICAgYXR0YWNo
TGF0ZXIoY3VycmVudE5vZGUoKSwgZWxlbWVudCwgdG9rZW4uc2VsZkNsb3NpbmcoKSk7CiAgICAg
aWYgKCF0b2tlbi5zZWxmQ2xvc2luZygpKQotICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNoKGVs
ZW1lbnQucmVsZWFzZSgpKTsKKyAgICAgICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tO
b2RlOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNlKCksIHRva2VuLCBuYW1lc3BhY2VVUkkpKTsKIH0K
IAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZGUoY29uc3QgU3RyaW5n
JiBjaGFyYWN0ZXJzLCBXaGl0ZXNwYWNlTW9kZSB3aGl0ZXNwYWNlTW9kZSkKQEAgLTQyMSwyOCAr
NDIyLDE0IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0
ZUhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rCiAgICAgcmV0dXJuIGVsZW1lbnQucmVs
ZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpj
cmVhdGVIVE1MRWxlbWVudEZyb21FbGVtZW50UmVjb3JkKEhUTUxFbGVtZW50U3RhY2s6OkVsZW1l
bnRSZWNvcmQqIHJlY29yZCkKK1Bhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gSFRNTENvbnN0cnVj
dGlvblNpdGU6OmNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbihQYXNzUmVmUHRyPEhUTUxTdGFj
a05vZGU+IG5vZGUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxFbGVtZW50RnJvbVNhdmVkRWxl
bWVudChyZWNvcmQtPmVsZW1lbnQoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENv
bnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50RnJvbVNhdmVkRWxlbWVudChFbGVtZW50
KiBlbGVtZW50KQotewotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyB3cm9uZy4gIFdlIHNo
b3VsZCBiZSB1c2luZyB0aGUgb3JpZ2luYWwgdG9rZW4uCi0gICAgLy8gVXNpbmcgYW4gRWxlbWVu
dCogY2F1c2VzIHVzIHRvIGZhaWwgZXhhbXBsZXMgbGlrZSB0aGlzOgotICAgIC8vIDxiIGlkPSIx
Ij48cD48c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIxIikuaWQgPSAiMiI8L3Njcmlw
dD48L3A+VEVYVDwvYj4KLSAgICAvLyBXaGVuIHJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGlu
Z0VsZW1lbnRzIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG9wZW4KLSAgICAvLyBhIHNlY29uZCA8Yj4g
dGFnIHRvIHdyYXAgVEVYVCwgaXQgd2lsbCBoYXZlIGlkICIyIiwgZXZlbiB0aG91Z2ggdGhlIEhU
TUw1Ci0gICAgLy8gc3BlYyBpbXBsaWVzIGl0IHNob3VsZCBiZSAiMSIuICBNaW5lZmllbGQgbWF0
Y2hlcyB0aGUgSFRNTDUgc3BlYyBoZXJlLgotCi0gICAgQVNTRVJUKGVsZW1lbnQtPmlzSFRNTEVs
ZW1lbnQoKSk7IC8vIG90aGVyd2lzZSBsb2NhbE5hbWUoKSBtaWdodCBiZSB3cm9uZy4KLQotICAg
IFZlY3RvcjxBdHRyaWJ1dGU+IGNsb25lZEF0dHJpYnV0ZXM7Ci0gICAgaWYgKEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEo
KSkKLSAgICAgICAgY2xvbmVkQXR0cmlidXRlcyA9IGF0dHJpYnV0ZURhdGEtPmNsb25lZEF0dHJp
YnV0ZVZlY3RvcigpOwotCi0gICAgQXRvbWljSFRNTFRva2VuIGZha2VUb2tlbihIVE1MVG9rZW5U
eXBlczo6U3RhcnRUYWcsIGVsZW1lbnQtPmxvY2FsTmFtZSgpLCBjbG9uZWRBdHRyaWJ1dGVzKTsK
LSAgICByZXR1cm4gY3JlYXRlSFRNTEVsZW1lbnQoZmFrZVRva2VuKTsKKyAgICBSZWZQdHI8RWxl
bWVudD4gZWxlbWVudDsKKyAgICBpZiAobm9kZS0+bmFtZXNwYWNlVVJJKCkgPT0gSFRNTE5hbWVz
Ojp4aHRtbE5hbWVzcGFjZVVSSSkKKyAgICAgICAgZWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50
KG5vZGUtPnRva2VuKCkpOworICAgIGVsc2UKKyAgICAgICAgZWxlbWVudCA9IGNyZWF0ZUVsZW1l
bnQobm9kZS0+dG9rZW4oKSwgbm9kZS0+bmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBIVE1M
U3RhY2tOb2RlOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNlKCksIG5vZGUtPnRva2VuKCksIG5vZGUt
Pm5hbWVzcGFjZVVSSSgpKTsKIH0KIAogYm9vbCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5kZXhP
ZkZpcnN0VW5vcGVuRm9ybWF0dGluZ0VsZW1lbnQodW5zaWduZWQmIGZpcnN0VW5vcGVuRWxlbWVu
dEluZGV4KSBjb25zdApAQCAtNDcyLDEwICs0NTksMTAgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6cmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKQogICAgIEFTU0VS
VCh1bm9wZW5FbnRyeUluZGV4IDwgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuc2l6ZSgpKTsK
ICAgICBmb3IgKDsgdW5vcGVuRW50cnlJbmRleCA8IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRz
LnNpemUoKTsgKyt1bm9wZW5FbnRyeUluZGV4KSB7CiAgICAgICAgIEhUTUxGb3JtYXR0aW5nRWxl
bWVudExpc3Q6OkVudHJ5JiB1bm9wZW5lZEVudHJ5ID0gbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVu
dHMuYXQodW5vcGVuRW50cnlJbmRleCk7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiByZWNvbnN0
cnVjdGVkID0gY3JlYXRlSFRNTEVsZW1lbnRGcm9tU2F2ZWRFbGVtZW50KHVub3BlbmVkRW50cnku
ZWxlbWVudCgpKTsKLSAgICAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgcmVjb25zdHJ1
Y3RlZCk7Ci0gICAgICAgIG1fb3BlbkVsZW1lbnRzLnB1c2gocmVjb25zdHJ1Y3RlZC5yZWxlYXNl
KCkpOwotICAgICAgICB1bm9wZW5lZEVudHJ5LnJlcGxhY2VFbGVtZW50KGN1cnJlbnRFbGVtZW50
KCkpOworICAgICAgICBSZWZQdHI8SFRNTFN0YWNrTm9kZT4gcmVjb25zdHJ1Y3RlZCA9IGNyZWF0
ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbih1bm9wZW5lZEVudHJ5LnN0YWNrTm9kZSgpKTsKKyAgICAg
ICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgcmVjb25zdHJ1Y3RlZC0+bm9kZSgpKTsKKyAg
ICAgICAgbV9vcGVuRWxlbWVudHMucHVzaChyZWNvbnN0cnVjdGVkKTsKKyAgICAgICAgdW5vcGVu
ZWRFbnRyeS5yZXBsYWNlRWxlbWVudChyZWNvbnN0cnVjdGVkLnJlbGVhc2UoKSk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0
aW9uU2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNp
dGUuaAppbmRleCAzNjdjMGZlMjY4NTZiZjc2ZDFkNGU2ODQyYTZmY2UxZDk1ZmIzY2ExLi4wNmQ1
MTY1MGE2NTA1Y2QwNDA2NTVhMTQ4NjMxMTc5MDg3MzMzYzdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgKQEAgLTEwNiw3ICsxMDYs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KEF0b21p
Y0hUTUxUb2tlbiYpOwogCiAgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVIVE1MRWxlbWVu
dChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUhUTUxF
bGVtZW50RnJvbUVsZW1lbnRSZWNvcmQoSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCop
OworICAgIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gY3JlYXRlRWxlbWVudEZyb21TYXZlZFRv
a2VuKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4pOwogCiAgICAgYm9vbCBzaG91bGRGb3N0ZXJQ
YXJlbnQoKSBjb25zdDsKICAgICB2b2lkIGZvc3RlclBhcmVudChQYXNzUmVmUHRyPE5vZGU+KTsK
QEAgLTExOCw2ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZW5lcmF0ZUltcGxpZWRFbmRU
YWdzV2l0aEV4Y2x1c2lvbihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwogCiAgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fb3BlbkVsZW1lbnRzLnN0YWNrRGVwdGgoKTsg
fQorICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGN1cnJlbnRFbGVtZW50UmVj
b3JkKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuRWxlbWVudHMudG9wUmVjb3JkKCk7IH0KICAgICBF
bGVtZW50KiBjdXJyZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkVsZW1lbnRzLnRv
cCgpOyB9CiAgICAgQ29udGFpbmVyTm9kZSogY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBt
X29wZW5FbGVtZW50cy50b3BOb2RlKCk7IH0KICAgICBFbGVtZW50KiBvbmVCZWxvd1RvcCgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlbkVsZW1lbnRzLm9uZUJlbG93VG9wKCk7IH0KQEAgLTE2MCw3ICsx
NjEsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5kRm9zdGVyU2l0ZShIVE1MQ29uc3RydWN0
aW9uU2l0ZVRhc2smKTsKIAotICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1l
bnRGcm9tU2F2ZWRFbGVtZW50KEVsZW1lbnQqKTsKICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNy
ZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkkpOwogCiAgICAgdm9pZCBtZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudChB
dG9taWNIVE1MVG9rZW4mLCBFbGVtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCmluZGV4IGNkNWQwOGE1NTNlZGM4NDczNTYxYTE2MWVl
MWE5NzRhMjdmNjAzYzMuLmZmNzBhYzIxZjUxYTRlMmQxODg1OTM3M2FmYjRhOTAzOGM2ZmQxNDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2su
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3Bw
CkBAIC0xMjUsNyArMTI1LDcgQEAgaW5saW5lIGJvb2wgaXNTZWxlY3RTY29wZU1hcmtlcihDb250
YWluZXJOb2RlKiBub2RlKQogCiB9CiAKLUhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6
OkVsZW1lbnRSZWNvcmQoUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlLCBQYXNzT3duUHRy
PEVsZW1lbnRSZWNvcmQ+IG5leHQpCitIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpF
bGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSwgUGFzc093blB0cjxF
bGVtZW50UmVjb3JkPiBuZXh0KQogICAgIDogbV9ub2RlKG5vZGUpCiAgICAgLCBtX25leHQobmV4
dCkKIHsKQEAgLTEzNiwxMiArMTM2LDEyIEBAIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNv
cmQ6On5FbGVtZW50UmVjb3JkKCkKIHsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpFbGVt
ZW50UmVjb3JkOjpyZXBsYWNlRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit2
b2lkIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVtZW50KFBhc3NS
ZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAg
QVNTRVJUKCFtX25vZGUgfHwgbV9ub2RlLT5pc0VsZW1lbnROb2RlKCkpOworICAgIEFTU0VSVChu
b2RlKTsKKyAgICBBU1NFUlQoIW1fbm9kZSB8fCBtX25vZGUtPm5vZGUoKS0+aXNFbGVtZW50Tm9k
ZSgpKTsKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgY2FsbCBmaW5pc2hQYXJzaW5nQ2hpbGRy
ZW4/Ci0gICAgbV9ub2RlID0gZWxlbWVudDsKKyAgICBtX25vZGUgPSBub2RlOwogfQogCiBib29s
IEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OmlzQWJvdmUoRWxlbWVudFJlY29yZCog
b3RoZXIpIGNvbnN0CkBAIC0zMDcsNjIgKzMwNyw2MiBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6
OnBvcFVudGlsRm9yZWlnbkNvbnRlbnRTY29wZU1hcmtlcigpCiAgICAgICAgIHBvcCgpOwogfQog
ICAgIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoUm9vdE5vZGUoUGFzc1JlZlB0cjxDb250
YWluZXJOb2RlPiByb290Tm9kZSkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaFJvb3ROb2Rl
KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gcm9vdE5vZGUpCiB7Ci0gICAgQVNTRVJUKHJvb3RO
b2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpOworICAgIEFT
U0VSVChyb290Tm9kZS0+bm9kZSgpLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdN
RU5UX05PREUpOwogICAgIHB1c2hSb290Tm9kZUNvbW1vbihyb290Tm9kZSk7CiB9CiAKLXZvaWQg
SFRNTEVsZW1lbnRTdGFjazo6cHVzaEhUTUxIdG1sRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+
IGVsZW1lbnQpCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQoUGFz
c1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBub2RlKQogewotICAgIEFTU0VSVChlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpOwotICAgIHB1c2hSb290Tm9kZUNvbW1vbihlbGVt
ZW50KTsKKyAgICBBU1NFUlQobm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aHRtbFRhZykpOworICAgIHB1c2hSb290Tm9kZUNvbW1vbihub2RlKTsKIH0KICAgICAKLXZvaWQg
SFRNTEVsZW1lbnRTdGFjazo6cHVzaFJvb3ROb2RlQ29tbW9uKFBhc3NSZWZQdHI8Q29udGFpbmVy
Tm9kZT4gcm9vdE5vZGUpCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZUNvbW1v
bihQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IHJvb3ROb2RlKQogewogICAgIEFTU0VSVCghbV90
b3ApOwogICAgIEFTU0VSVCghbV9yb290Tm9kZSk7Ci0gICAgbV9yb290Tm9kZSA9IHJvb3ROb2Rl
LmdldCgpOworICAgIG1fcm9vdE5vZGUgPSByb290Tm9kZS0+bm9kZSgpOwogICAgIHB1c2hDb21t
b24ocm9vdE5vZGUpOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSGVhZEVs
ZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNr
OjpwdXNoSFRNTEhlYWRFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkKIHsK
LSAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKTsKKyAg
ICBBU1NFUlQobm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykp
OwogICAgIEFTU0VSVCghbV9oZWFkRWxlbWVudCk7Ci0gICAgbV9oZWFkRWxlbWVudCA9IGVsZW1l
bnQuZ2V0KCk7Ci0gICAgcHVzaENvbW1vbihlbGVtZW50KTsKKyAgICBtX2hlYWRFbGVtZW50ID0g
bm9kZS0+ZWxlbWVudCgpOworICAgIHB1c2hDb21tb24obm9kZSk7CiB9CiAKLXZvaWQgSFRNTEVs
ZW1lbnRTdGFjazo6cHVzaEhUTUxCb2R5RWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1l
bnQpCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0
cjxIVE1MU3RhY2tOb2RlPiBub2RlKQogewotICAgIEFTU0VSVChlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6Ym9keVRhZykpOworICAgIEFTU0VSVChub2RlLT5lbGVtZW50KCktPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpib2R5VGFnKSk7CiAgICAgQVNTRVJUKCFtX2JvZHlFbGVtZW50KTsK
LSAgICBtX2JvZHlFbGVtZW50ID0gZWxlbWVudC5nZXQoKTsKLSAgICBwdXNoQ29tbW9uKGVsZW1l
bnQpOworICAgIG1fYm9keUVsZW1lbnQgPSBub2RlLT5lbGVtZW50KCk7CisgICAgcHVzaENvbW1v
bihub2RlKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoKFBhc3NSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaChQYXNzUmVmUHRyPEhU
TUxTdGFja05vZGU+IG5vZGUpCiB7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aHRtbFRhZykpOwotICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmhlYWRUYWcpKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpib2R5VGFnKSk7CisgICAgQVNTRVJUKCFub2RlLT5lbGVtZW50KCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpodG1sVGFnKSk7CisgICAgQVNTRVJUKCFub2RlLT5lbGVtZW50KCktPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSk7CisgICAgQVNTRVJUKCFub2RlLT5lbGVtZW50KCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5VGFnKSk7CiAgICAgQVNTRVJUKG1fcm9vdE5vZGUp
OwotICAgIHB1c2hDb21tb24oZWxlbWVudCk7CisgICAgcHVzaENvbW1vbihub2RlKTsKIH0KIAot
dm9pZCBIVE1MRWxlbWVudFN0YWNrOjppbnNlcnRBYm92ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQsIEVsZW1lbnRSZWNvcmQqIHJlY29yZEJlbG93KQordm9pZCBIVE1MRWxlbWVudFN0YWNr
OjppbnNlcnRBYm92ZShQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IG5vZGUsIEVsZW1lbnRSZWNv
cmQqIHJlY29yZEJlbG93KQogewotICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBBU1NFUlQobm9k
ZSk7CiAgICAgQVNTRVJUKHJlY29yZEJlbG93KTsKICAgICBBU1NFUlQobV90b3ApOwotICAgIEFT
U0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKLSAgICBBU1NF
UlQoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSk7Ci0gICAgQVNTRVJU
KCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOworICAgIEFTU0VSVCgh
bm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpOworICAgIEFT
U0VSVCghbm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpOwor
ICAgIEFTU0VSVCghbm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRh
ZykpOwogICAgIEFTU0VSVChtX3Jvb3ROb2RlKTsKICAgICBpZiAocmVjb3JkQmVsb3cgPT0gbV90
b3ApIHsKLSAgICAgICAgcHVzaChlbGVtZW50KTsKKyAgICAgICAgcHVzaChub2RlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgSFRNTEVsZW1lbnRT
dGFjazo6aW5zZXJ0QWJvdmUoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBFbGVtZW50UmVj
b3JkKiByCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBtX3N0YWNrRGVwdGgrKzsK
LSAgICAgICAgcmVjb3JkQWJvdmUtPnNldE5leHQoYWRvcHRQdHIobmV3IEVsZW1lbnRSZWNvcmQo
ZWxlbWVudCwgcmVjb3JkQWJvdmUtPnJlbGVhc2VOZXh0KCkpKSk7CisgICAgICAgIHJlY29yZEFi
b3ZlLT5zZXROZXh0KGFkb3B0UHRyKG5ldyBFbGVtZW50UmVjb3JkKG5vZGUsIHJlY29yZEFib3Zl
LT5yZWxlYXNlTmV4dCgpKSkpOwogICAgICAgICByZWNvcmRBYm92ZS0+bmV4dCgpLT5lbGVtZW50
KCktPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01
NjcsNyArNTY3LDcgQEAgQ29udGFpbmVyTm9kZSogSFRNTEVsZW1lbnRTdGFjazo6cm9vdE5vZGUo
KSBjb25zdAogICAgIHJldHVybiBtX3Jvb3ROb2RlOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3Rh
Y2s6OnB1c2hDb21tb24oUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlKQordm9pZCBIVE1M
RWxlbWVudFN0YWNrOjpwdXNoQ29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkK
IHsKICAgICBBU1NFUlQobV9yb290Tm9kZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxFbGVtZW50U3RhY2suaAppbmRleCBmN2JhYTM2NDQ3YjA3ZDUyOGYzZTI3NzMzMjRj
ODE0MmU5MTQxZjg4Li4zNDkxODViOTdlNDNmYjUwMDU1NWUxMzViNDljYTI5MmQ4NDFlY2JiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5oCkBAIC0y
OSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiSFRNTFN0YWNrTm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpA
QCAtNTUsMjMgKzU2LDI0IEBAIHB1YmxpYzoKICAgICBwdWJsaWM6CiAgICAgICAgIH5FbGVtZW50
UmVjb3JkKCk7IC8vIFB1YmxpYyBmb3IgflBhc3NPd25QdHIoKQogICAgIAotICAgICAgICBFbGVt
ZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG1fbm9kZS5nZXQoKSk7IH0K
LSAgICAgICAgQ29udGFpbmVyTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQo
KTsgfQotICAgICAgICB2b2lkIHJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOwor
ICAgICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLT5lbGVtZW50
KCk7IH0KKyAgICAgICAgQ29udGFpbmVyTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZS0+bm9kZSgpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gc3RhY2tOb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisKKyAgICAgICAgdm9pZCByZXBsYWNlRWxlbWVu
dChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsKIAogICAgICAgICBib29sIGlzQWJvdmUoRWxl
bWVudFJlY29yZCopIGNvbnN0OwogCiAgICAgICAgIEVsZW1lbnRSZWNvcmQqIG5leHQoKSBjb25z
dCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBIVE1MRWxlbWVudFN0YWNrOwogCi0gICAgICAgIEVsZW1lbnRSZWNvcmQoUGFzc1Jl
ZlB0cjxDb250YWluZXJOb2RlPiwgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPik7CisgICAgICAg
IEVsZW1lbnRSZWNvcmQoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiwgUGFzc093blB0cjxFbGVt
ZW50UmVjb3JkPik7CiAKICAgICAgICAgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPiByZWxlYXNl
TmV4dCgpIHsgcmV0dXJuIG1fbmV4dC5yZWxlYXNlKCk7IH0KICAgICAgICAgdm9pZCBzZXROZXh0
KFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4gbmV4dCkgeyBtX25leHQgPSBuZXh0OyB9CiAKLSAg
ICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG1fbm9kZTsKKyAgICAgICAgUmVmUHRyPEhUTUxT
dGFja05vZGU+IG1fbm9kZTsKICAgICAgICAgT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG1fbmV4dDsK
ICAgICB9OwogCkBAIC05NywxMyArOTksMTMgQEAgcHVibGljOgogICAgIEVsZW1lbnRSZWNvcmQq
IGZpbmQoRWxlbWVudCopIGNvbnN0OwogICAgIEVsZW1lbnRSZWNvcmQqIHRvcG1vc3QoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lKSBjb25zdDsKIAotICAgIHZvaWQgaW5zZXJ0QWJvdmUoUGFz
c1JlZlB0cjxFbGVtZW50PiwgRWxlbWVudFJlY29yZCopOworICAgIHZvaWQgaW5zZXJ0QWJvdmUo
UGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiwgRWxlbWVudFJlY29yZCopOwogCi0gICAgdm9pZCBw
dXNoKFBhc3NSZWZQdHI8RWxlbWVudD4pOwotICAgIHZvaWQgcHVzaFJvb3ROb2RlKFBhc3NSZWZQ
dHI8Q29udGFpbmVyTm9kZT4pOwotICAgIHZvaWQgcHVzaEhUTUxIdG1sRWxlbWVudChQYXNzUmVm
UHRyPEVsZW1lbnQ+KTsKLSAgICB2b2lkIHB1c2hIVE1MSGVhZEVsZW1lbnQoUGFzc1JlZlB0cjxF
bGVtZW50Pik7Ci0gICAgdm9pZCBwdXNoSFRNTEJvZHlFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVu
dD4pOworICAgIHZvaWQgcHVzaChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsKKyAgICB2b2lk
IHB1c2hSb290Tm9kZShQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsKKyAgICB2b2lkIHB1c2hI
VE1MSHRtbEVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7CisgICAgdm9pZCBwdXNo
SFRNTEhlYWRFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4pOworICAgIHZvaWQgcHVz
aEhUTUxCb2R5RWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsKIAogICAgIHZvaWQg
cG9wKCk7CiAgICAgdm9pZCBwb3BVbnRpbChjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwpA
QCAtMTU2LDggKzE1OCw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIHZvaWQg
cHVzaENvbW1vbihQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+KTsKLSAgICB2b2lkIHB1c2hSb290
Tm9kZUNvbW1vbihQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+KTsKKyAgICB2b2lkIHB1c2hDb21t
b24oUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7CisgICAgdm9pZCBwdXNoUm9vdE5vZGVDb21t
b24oUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7CiAgICAgdm9pZCBwb3BDb21tb24oKTsKICAg
ICB2b2lkIHJlbW92ZU5vblRvcENvbW1vbihFbGVtZW50Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKaW5k
ZXggMDE0NWRlMGU2ZjM5ZTAxOTAwYzI0MTViNDdkOWU2NTdhNTIxZWRmMS4uMWM1M2JjYzczMTc0
MzIzODM1OTI1NDZkZjcxMzViYzUwMjUzOGRmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKQEAgLTg3LDI1
ICs4NywyNyBAQCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpCb29rbWFyayBIVE1MRm9ybWF0
dGluZ0VsZW1lbnRMaXN0Ojpib29rbWFya0ZvcihFbGVtZQogICAgIHJldHVybiBCb29rbWFyaygm
YXQoaW5kZXgpKTsKIH0KIAotdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpzd2FwVG8o
RWxlbWVudCogb2xkRWxlbWVudCwgRWxlbWVudCogbmV3RWxlbWVudCwgY29uc3QgQm9va21hcmsm
IGJvb2ttYXJrKQordm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpzd2FwVG8oRWxlbWVu
dCogb2xkRWxlbWVudCwgUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBwcnBOZXdOb2RlLCBjb25z
dCBCb29rbWFyayYgYm9va21hcmspCiB7CisgICAgUmVmUHRyPEhUTUxTdGFja05vZGU+IG5ld05v
ZGUgPSBwcnBOZXdOb2RlOworCiAgICAgQVNTRVJUKGNvbnRhaW5zKG9sZEVsZW1lbnQpKTsKLSAg
ICBBU1NFUlQoIWNvbnRhaW5zKG5ld0VsZW1lbnQpKTsKKyAgICBBU1NFUlQoIWNvbnRhaW5zKG5l
d05vZGUtPmVsZW1lbnQoKSkpOwogICAgIGlmICghYm9va21hcmsuaGFzQmVlbk1vdmVkKCkpIHsK
ICAgICAgICAgQVNTRVJUKGJvb2ttYXJrLm1hcmsoKS0+ZWxlbWVudCgpID09IG9sZEVsZW1lbnQp
OwotICAgICAgICBib29rbWFyay5tYXJrKCktPnJlcGxhY2VFbGVtZW50KG5ld0VsZW1lbnQpOwor
ICAgICAgICBib29rbWFyay5tYXJrKCktPnJlcGxhY2VFbGVtZW50KG5ld05vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIHNpemVfdCBpbmRleCA9IGJvb2ttYXJrLm1hcmsoKSAtIGZp
cnN0KCk7CiAgICAgQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKLSAgICBtX2VudHJpZXMuaW5zZXJ0
KGluZGV4ICsgMSwgbmV3RWxlbWVudCk7CisgICAgbV9lbnRyaWVzLmluc2VydChpbmRleCArIDEs
IG5ld05vZGUpOwogICAgIHJlbW92ZShvbGRFbGVtZW50KTsKIH0KIAotdm9pZCBIVE1MRm9ybWF0
dGluZ0VsZW1lbnRMaXN0OjphcHBlbmQoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdDo6YXBwZW5kKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkK
IHsKLSAgICBlbnN1cmVOb2Foc0Fya0NvbmRpdGlvbihlbGVtZW50KTsKLSAgICBtX2VudHJpZXMu
YXBwZW5kKGVsZW1lbnQpOworICAgIGVuc3VyZU5vYWhzQXJrQ29uZGl0aW9uKG5vZGUtPmVsZW1l
bnQoKSk7CisgICAgbV9lbnRyaWVzLmFwcGVuZChub2RlKTsKIH0KIAogdm9pZCBIVE1MRm9ybWF0
dGluZ0VsZW1lbnRMaXN0OjpyZW1vdmUoRWxlbWVudCogZWxlbWVudCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaAppbmRl
eCA3OWZlMmZmMzc1NzU1MGU0ZDNhZThlNTI4ZTEzZDkwNTVkZDE3OTg0Li4yZjdkYjlmOTFkNTBh
ODEzZGE0ZjhhNjBkYTVlNDY5YTdiOGY1NmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oCkBAIC0yNiw2ICsyNiw3
IEBACiAjaWZuZGVmIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3RfaAogI2RlZmluZSBIVE1MRm9y
bWF0dGluZ0VsZW1lbnRMaXN0X2gKIAorI2luY2x1ZGUgIkhUTUxTdGFja05vZGUuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CkBAIC00NywzNSArNDgsMzUgQEAgcHVibGljOgogICAgIGNsYXNzIEVudHJ5
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIElubGluZSBiZWNhdXNlIHRoZXkncmUgaG90IGFu
ZCBWZWN0b3I8VD4gdXNlcyB0aGVtLgotICAgICAgICBleHBsaWNpdCBFbnRyeShFbGVtZW50KiBl
bGVtZW50KQotICAgICAgICAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgZXhwbGlj
aXQgRW50cnkoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBub2RlKQorICAgICAgICAgICAgOiBt
X25vZGUobm9kZSkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQpOwogICAg
ICAgICB9CiAgICAgICAgIGVudW0gTWFya2VyRW50cnlUeXBlIHsgTWFya2VyRW50cnkgfTsKICAg
ICAgICAgRW50cnkoTWFya2VyRW50cnlUeXBlKQotICAgICAgICAgICAgOiBtX2VsZW1lbnQoMCkK
KyAgICAgICAgICAgIDogbV9ub2RlKDApCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICB+
RW50cnkoKSB7fQogCi0gICAgICAgIGJvb2wgaXNNYXJrZXIoKSBjb25zdCB7IHJldHVybiAhbV9l
bGVtZW50OyB9CisgICAgICAgIGJvb2wgaXNNYXJrZXIoKSBjb25zdCB7IHJldHVybiAhbV9ub2Rl
OyB9CiAKKyAgICAgICAgUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBzdGFja05vZGUoKSBjb25z
dCB7IHJldHVybiBtX25vZGU7IH0KICAgICAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZSBmYWN0IHRoYXQgIW1fZWxlbWVudCA9PSBpc01h
cmtlcigpIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbAorICAgICAgICAgICAgLy8gVGhlIGZh
Y3QgdGhhdCAhbV9ub2RlID09IGlzTWFya2VyKCkgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWls
CiAgICAgICAgICAgICAvLyBjYWxsZXJzIHNob3VsZCBjaGVjayBpc01hcmtlcigpIGJlZm9yZSBj
YWxsaW5nIGVsZW1lbnQoKS4KLSAgICAgICAgICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgICAg
ICAgICAgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChtX25vZGUp
OworICAgICAgICAgICAgcmV0dXJuIG1fbm9kZS0+ZWxlbWVudCgpOwogICAgICAgICB9Ci0gICAg
ICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KSB7IG1f
ZWxlbWVudCA9IGVsZW1lbnQ7IH0KKyAgICAgICAgdm9pZCByZXBsYWNlRWxlbWVudChQYXNzUmVm
UHRyPEhUTUxTdGFja05vZGU+IG5vZGUpIHsgbV9ub2RlID0gbm9kZTsgfQogCiAgICAgICAgIC8v
IE5lZWRlZCBmb3IgdXNlIHdpdGggVmVjdG9yLiAgVGhlc2UgYXJlIHN1cGVyLWhvdCBhbmQgbXVz
dCBiZSBpbmxpbmUuCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShFbGVtZW50KiBlbGVtZW50KSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnQgPT0gZWxlbWVudDsgfQotICAgICAgICBib29sIG9wZXJh
dG9yIT0oRWxlbWVudCogZWxlbWVudCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50ICE9IGVsZW1l
bnQ7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsg
cmV0dXJuICFtX25vZGUgPyAhZWxlbWVudCA6IG1fbm9kZS0+ZWxlbWVudCgpID09IGVsZW1lbnQ7
IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsgcmV0
dXJuICFtX25vZGUgPyAhIWVsZW1lbnQgOiBtX25vZGUtPmVsZW1lbnQoKSAhPSBlbGVtZW50OyB9
CiAKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworICAg
ICAgICBSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbV9ub2RlOwogICAgIH07CiAKICAgICBjbGFzcyBC
b29rbWFyayB7CkBAIC0xMDcsMTEgKzEwOCwxMSBAQCBwdWJsaWM6CiAKICAgICBFbnRyeSogZmlu
ZChFbGVtZW50Kik7CiAgICAgYm9vbCBjb250YWlucyhFbGVtZW50Kik7Ci0gICAgdm9pZCBhcHBl
bmQoRWxlbWVudCopOworICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4p
OwogICAgIHZvaWQgcmVtb3ZlKEVsZW1lbnQqKTsKIAogICAgIEJvb2ttYXJrIGJvb2ttYXJrRm9y
KEVsZW1lbnQqKTsKLSAgICB2b2lkIHN3YXBUbyhFbGVtZW50KiBvbGRFbGVtZW50LCBFbGVtZW50
KiBuZXdFbGVtZW50LCBjb25zdCBCb29rbWFyayYpOworICAgIHZvaWQgc3dhcFRvKEVsZW1lbnQq
IG9sZEVsZW1lbnQsIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gcHJwTmV3Tm9kZSwgY29uc3Qg
Qm9va21hcmsmKTsKIAogICAgIHZvaWQgYXBwZW5kTWFya2VyKCk7CiAgICAgLy8gY2xlYXJUb0xh
c3RNYXJrZXIgYWxzbyBjbGVhcnMgdGhlIG1hcmtlciAocGVyIHRoZSBIVE1MNSBzcGVjKS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTdGFja05vZGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTdGFja05vZGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZWJm
ZGU5YTEyMGFjODllZjM0OGI3NTMwNzU5NGU0ZTcxODAyZjJmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrTm9kZS5oCkBAIC0wLDAgKzEsOTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBIVE1MU3RhY2tOb2RlX2gKKyNkZWZpbmUgSFRNTFN0YWNrTm9kZV9oCisKKyNp
bmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRN
TFRva2VuLmgiCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDb250YWluZXJOb2RlOworCitjbGFzcyBIVE1MU3RhY2tOb2Rl
IDogcHVibGljIFJlZkNvdW50ZWQ8SFRNTFN0YWNrTm9kZT4geworcHVibGljOgorICAgIC8vIERv
Y3VtZW50RnJhZ21lbnQgY2FzZS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2Rl
PiBjcmVhdGUoUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlKQorICAgIHsKKyAgICAgICAg
QXRvbWljSFRNTFRva2VuIGZha2VUb2tlbihIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsICIiKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MU3RhY2tOb2RlKG5vZGUsIGZha2VUb2tl
bikpOworICAgIH0KKworICAgIC8vIFVzZWQgYnkgSFRNTEVsZW1lbnRTdGFjay4KKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBjcmVhdGUoUGFzc1JlZlB0cjxDb250YWluZXJO
b2RlPiBub2RlLCBBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxTdGFja05vZGUobm9kZSwgdG9rZW4sIG5hbWVzcGFj
ZVVSSSkpOworICAgIH0KKworICAgIC8vIFVzZWQgYnkgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dC4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBjcmVhdGUoRWxlbWVudCog
ZWxlbWVudCwgQXRvbWljSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
c3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MU3RhY2tOb2RlKGVsZW1lbnQsIHRva2VuLCBuYW1lc3Bh
Y2VVUkkpKTsKKyAgICB9CisKKyAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
dG9FbGVtZW50KG1fbm9kZS5nZXQoKSk7IH0KKyAgICBDb250YWluZXJOb2RlKiBub2RlKCkgY29u
c3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CisKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQg
YmUgY29uc3QuCisgICAgQXRvbWljSFRNTFRva2VuJiB0b2tlbigpIHsgcmV0dXJuIG1fdG9rZW47
IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZXNwYWNlVVJJOyB9CisKK3ByaXZhdGU6CisgICAgSFRNTFN0YWNrTm9kZShQYXNzUmVm
UHRyPENvbnRhaW5lck5vZGU+IG5vZGUsIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSkK
KyAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX3Rva2VuKEhUTUxUb2tlblR5cGVz
OjpTdGFydFRhZywgdG9rZW4ubmFtZSgpLCB0b2tlbi5hdHRyaWJ1dGVzKCkpCisgICAgICAgICwg
bV9uYW1lc3BhY2VVUkkobmFtZXNwYWNlVVJJKQorICAgIHsKKyAgICB9CisKKyAgICBIVE1MU3Rh
Y2tOb2RlKEVsZW1lbnQqIGVsZW1lbnQsIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSkK
KyAgICAgICAgOiBtX25vZGUoZWxlbWVudCkKKyAgICAgICAgLCBtX3Rva2VuKEhUTUxUb2tlblR5
cGVzOjpTdGFydFRhZywgdG9rZW4ubmFtZSgpLCB0b2tlbi5hdHRyaWJ1dGVzKCkpCisgICAgICAg
ICwgbV9uYW1lc3BhY2VVUkkobmFtZXNwYWNlVVJJKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gbV9ub2RlOworCisgICAgQXRvbWljSFRNTFRva2VuIG1fdG9rZW47
CisgICAgQXRvbWljU3RyaW5nIG1fbmFtZXNwYWNlVVJJOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gSFRNTFN0YWNrTm9kZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCA4MDNiMGU3ZDMyZjI1NjViZGM4
ZDk5ZDA2YzU0N2NlYWExYTNhNTIwLi43MzM2ZmI4NmQ3OTc5YjNjMWVhMGVmYjllNGZiZGY1NDRj
M2MwODkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1
aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MU3RhY2tOb2RlLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCiAjaW5jbHVk
ZSAiSFRNTFRva2VuaXplci5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKQEAgLTM4
Miw3ICszODMsNyBAQCBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1l
bnRQYXJzZXIqIHBhcnNlciwgRG9jdW1lbnRGcmFnbWVudCogZgogICAgICAgICAvLyBodHRwOi8v
d3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUt
ZW5kLmh0bWwjZnJhZ21lbnQtY2FzZQogICAgICAgICAvLyBGb3IgZWZmaWNpZW5jeSwgd2Ugc2tp
cCBzdGVwIDQuMiAoIkxldCByb290IGJlIGEgbmV3IGh0bWwgZWxlbWVudCB3aXRoIG5vIGF0dHJp
YnV0ZXMiKQogICAgICAgICAvLyBhbmQgaW5zdGVhZCB1c2UgdGhlIERvY3VtZW50RnJhZ21lbnQg
YXMgYSByb290IG5vZGUuCi0gICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cHVzaFJvb3RO
b2RlKGZyYWdtZW50KTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wdXNoUm9vdE5v
ZGUoSFRNTFN0YWNrTm9kZTo6Y3JlYXRlKGZyYWdtZW50KSk7CiAgICAgICAgIHJlc2V0SW5zZXJ0
aW9uTW9kZUFwcHJvcHJpYXRlbHkoKTsKICAgICAgICAgbV90cmVlLnNldEZvcm0oY2xvc2VzdEZv
cm1BbmNlc3Rvcihjb250ZXh0RWxlbWVudCkpOwogICAgIH0KQEAgLTExODYsNyArMTE4Nyw3IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0aXRsZVRhZykgewogICAgICAg
ICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBBU1NFUlQobV90cmVlLmhlYWQo
KSk7Ci0gICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnB1c2hIVE1MSGVhZEVsZW1l
bnQobV90cmVlLmhlYWQoKSk7CisgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnB1
c2hIVE1MSGVhZEVsZW1lbnQoSFRNTFN0YWNrTm9kZTo6Y3JlYXRlKG1fdHJlZS5oZWFkKCksIHRv
a2VuKSk7CiAgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOwogICAg
ICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5yZW1vdmVIVE1MSGVhZEVsZW1lbnQobV90
cmVlLmhlYWQoKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTU1LDkgKzE1NTYsMTAgQEAg
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICAgICAgaWYgKG5vZGUgPT0gZm9ybWF0dGluZ0VsZW1lbnRSZWNv
cmQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAvLyA2LjUKLSAgICAgICAg
ICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gbV90cmVlLmNyZWF0ZUhUTUxFbGVtZW50
RnJvbUVsZW1lbnRSZWNvcmQobm9kZSk7CisgICAgICAgICAgICBSZWZQdHI8SFRNTFN0YWNrTm9k
ZT4gbmV3RWxlbWVudCA9IG1fdHJlZS5jcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4obm9kZS0+
c3RhY2tOb2RlKCkpOworCiAgICAgICAgICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpF
bnRyeSogbm9kZUVudHJ5ID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5maW5k
KG5vZGUtPmVsZW1lbnQoKSk7Ci0gICAgICAgICAgICBub2RlRW50cnktPnJlcGxhY2VFbGVtZW50
KG5ld0VsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgbm9kZUVudHJ5LT5yZXBsYWNlRWxlbWVu
dChuZXdFbGVtZW50KTsKICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VFbGVtZW50KG5ld0VsZW1l
bnQucmVsZWFzZSgpKTsKICAgICAgICAgICAgIC8vIDYuNCAtLSBJbnRlbnRpb25hbGx5IG91dCBv
ZiBvcmRlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbm9kZQogICAgICAgICAgICAgLy8gd2Fz
IHJlcGxhY2VkIGluIDYuNS4KQEAgLTE1OTEsMjIgKzE1OTMsMjIgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
ICAgICAgICAgICAgIGxhc3ROb2RlLT5lbGVtZW50KCktPmxhenlBdHRhY2goKTsKICAgICAgICAg
fQogICAgICAgICAvLyA4Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gbV90
cmVlLmNyZWF0ZUhUTUxFbGVtZW50RnJvbUVsZW1lbnRSZWNvcmQoZm9ybWF0dGluZ0VsZW1lbnRS
ZWNvcmQpOworICAgICAgICBSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbmV3RWxlbWVudCA9IG1fdHJl
ZS5jcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4oZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQtPnN0
YWNrTm9kZSgpKTsKICAgICAgICAgLy8gOQotICAgICAgICBuZXdFbGVtZW50LT50YWtlQWxsQ2hp
bGRyZW5Gcm9tKGZ1cnRoZXN0QmxvY2stPmVsZW1lbnQoKSk7CisgICAgICAgIG5ld0VsZW1lbnQt
PmVsZW1lbnQoKS0+dGFrZUFsbENoaWxkcmVuRnJvbShmdXJ0aGVzdEJsb2NrLT5lbGVtZW50KCkp
OwogICAgICAgICAvLyAxMAogICAgICAgICBFbGVtZW50KiBmdXJ0aGVzdEJsb2NrRWxlbWVudCA9
IGZ1cnRoZXN0QmxvY2stPmVsZW1lbnQoKTsKICAgICAgICAgLy8gRklYTUU6IEFsbCB0aGlzIGNy
ZWF0aW9uIC8gcGFyc2VyQWRkQ2hpbGQgLyBhdHRhY2ggYnVzaW5lc3Mgc2hvdWxkCiAgICAgICAg
IC8vICAgICAgICBiZSBpbiBIVE1MQ29uc3RydWN0aW9uU2l0ZS4gIE15IGd1ZXNzIGlzIHRoYXQg
c3RlcHMgOC0tMTIKICAgICAgICAgLy8gICAgICAgIHNob3VsZCBhbGwgYmUgaW4gc29tZSBIVE1M
Q29uc3RydWN0aW9uU2l0ZSBmdW5jdGlvbi4KLSAgICAgICAgZnVydGhlc3RCbG9ja0VsZW1lbnQt
PnBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQpOwotICAgICAgICBpZiAoZnVydGhlc3RCbG9ja0Vs
ZW1lbnQtPmF0dGFjaGVkKCkgJiYgIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpIHsKKyAgICAgICAg
ZnVydGhlc3RCbG9ja0VsZW1lbnQtPnBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQtPmVsZW1lbnQo
KSk7CisgICAgICAgIGlmIChmdXJ0aGVzdEJsb2NrRWxlbWVudC0+YXR0YWNoZWQoKSAmJiAhbmV3
RWxlbWVudC0+ZWxlbWVudCgpLT5hdHRhY2hlZCgpKSB7CiAgICAgICAgICAgICAvLyBOb3RpY2Ug
dGhhdCBuZXdFbGVtZW50IG1pZ2h0IGFscmVhZHkgYmUgYXR0YWNoZWQgaWYsIGZvciBleGFtcGxl
LCBvbmUgb2YgdGhlIHJlcGFyZW50ZWQKICAgICAgICAgICAgIC8vIGNoaWxkcmVuIGlzIGEgc3R5
bGUgZWxlbWVudCwgd2hpY2ggYXR0YWNoZXMgaXRzZWxmIGF1dG9tYXRpY2FsbHkuCi0gICAgICAg
ICAgICBuZXdFbGVtZW50LT5hdHRhY2goKTsKKyAgICAgICAgICAgIG5ld0VsZW1lbnQtPmVsZW1l
bnQoKS0+YXR0YWNoKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gMTEKLSAgICAgICAgbV90cmVl
LmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5zd2FwVG8oZm9ybWF0dGluZ0VsZW1lbnQsIG5l
d0VsZW1lbnQuZ2V0KCksIGJvb2ttYXJrKTsKKyAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cygpLT5zd2FwVG8oZm9ybWF0dGluZ0VsZW1lbnQsIG5ld0VsZW1lbnQsIGJvb2tt
YXJrKTsKICAgICAgICAgLy8gMTIKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5yZW1v
dmUoZm9ybWF0dGluZ0VsZW1lbnQpOwogICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmlu
c2VydEFib3ZlKG5ld0VsZW1lbnQsIGZ1cnRoZXN0QmxvY2spOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdkODg1MTI2M2Jk
YjQ4OTM3ZWZlOWQ4YTI3Yzc0YTlhM2RhN2NjZTguLmQ2NzhiYmE1NjRiZWZlNTk1ZTE3YTk0NmQ1
ZTEzMzc4MWEzMjdhMGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNy0xOSAgS3dhbmcg
WXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIFVzZSB0aGUgb3JpZ2lu
YWwgdG9rZW4gdG8gY3JlYXRlIGFuIGVsZW1lbnQgaW4gInJlY29uc3RydWN0IHRoZSBhY3RpdmUg
Zm9ybWF0dGluZyBlbGVtZW50cyIgYW5kICJjYWxsIHRoZSBhZG9wdGlvbiBhZ2VuY3kiCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTcwMworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgdGVzdCBl
eHBlY3RhdGlvbiBmb3IgaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLnR4dAorICAgICAgICBiZWNh
dXNlIG5vdyByZXNvdXJjZXMvc2NyaXB0ZWQvYWRvcHRpb24wMS5kYXQgcGFzc2VzLgorCisgICAg
ICAgICogaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLnR4dDoKKwogMjAxMi0wNy0xOCAgSm9zaHVh
IEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWREQjogRGlyZWN0
aW9uIHBhcmFtZXRlciBpZ25vcmVkIGJ5IHNvbWUgb3BlbkN1cnNvcigpIG92ZXJsb2FkcwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQKaW5kZXggMTljNGIxYTY1YTA0Mjk3
OTQ4YWJiMDJlODQ5MzMyYzRiNmIyYWIxNS4uY2Q1YTIwZjlhZjJjZTgwOTAwMWEzOGY4MDZjMzky
ZGNiMDA4ZmI5MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0CkBA
IC00MywzMyArNDMsNiBAQCByZXNvdXJjZXMvdGFibGVzMDEuZGF0OiBQQVNTCiAKIHJlc291cmNl
cy90cmlja3kwMS5kYXQ6IFBBU1MKIAotcmVzb3VyY2VzL3NjcmlwdGVkL2Fkb3B0aW9uMDEuZGF0
OgotMQotCi1UZXN0IDEgb2YgMSBpbiByZXNvdXJjZXMvc2NyaXB0ZWQvYWRvcHRpb24wMS5kYXQg
ZmFpbGVkLiBJbnB1dDoKLTxwPjxiIGlkPSJBIj48c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJBIikuaWQgPSAiQiI8L3NjcmlwdD48L3A+VEVYVDwvYj4KLUdvdDoKLXwgPGh0bWw+Ci18
ICAgPGhlYWQ+Ci18ICAgPGJvZHk+Ci18ICAgICA8cD4KLXwgICAgICAgPGI+Ci18ICAgICAgICAg
aWQ9IkIiCi18ICAgICAgICAgPHNjcmlwdD4KLXwgICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiQSIpLmlkID0gIkIiIgotfCAgICAgPGI+Ci18ICAgICAgIGlkPSJCIgotfCAgICAg
ICAiVEVYVCIKLUV4cGVjdGVkOgotfCA8aHRtbD4KLXwgICA8aGVhZD4KLXwgICA8Ym9keT4KLXwg
ICAgIDxwPgotfCAgICAgICA8Yj4KLXwgICAgICAgICBpZD0iQiIKLXwgICAgICAgICA8c2NyaXB0
PgotfCAgICAgICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJBIikuaWQgPSAiQiIiCi18
ICAgICA8Yj4KLXwgICAgICAgaWQ9IkEiCi18ICAgICAgICJURVhUIgorcmVzb3VyY2VzL3Njcmlw
dGVkL2Fkb3B0aW9uMDEuZGF0OiBQQVNTCisKIHJlc291cmNlcy9zY3JpcHRlZC93ZWJraXQwMS5k
YXQ6IFBBU1MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153450</attachid>
            <date>2012-07-20 01:59:02 -0700</date>
            <delta_ts>2012-07-21 01:16:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91703-20120720175857.patch</filename>
            <type>text/plain</type>
            <size>139030</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGEyYzdkYTVkNTQxZmM4
NjZmMGZmNmE2MTdlMGJlMzU3M2U1YzJlZS4uODQ5Mjc2YWQyMjUyYmU2NzYwYmUwYmU4MzA4ODA3
ZGU5NjEyMWUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxMi0wNy0yMCAgS3dh
bmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIFVzZSB0aGUgb3Jp
Z2luYWwgdG9rZW4gdG8gY3JlYXRlIGFuIGVsZW1lbnQgaW4gInJlY29uc3RydWN0IHRoZSBhY3Rp
dmUgZm9ybWF0dGluZyBlbGVtZW50cyIgYW5kICJjYWxsIHRoZSBhZG9wdGlvbiBhZ2VuY3kiCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTcwMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50
IFdlYktpdCBIVE1MNSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgaG9sZCB0aGUgb3Jp
Z2luYWwgdG9rZW4KKyAgICAgICAgaW4gdGhlIHN0YWNrIG9mIG9wZW4gZWxlbWVudHMgYW5kIHRo
ZSBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cy4gVGhpcyBpcworICAgICAgICBwcm9ibGVtYXRp
YyBiZWNhdXNlIHRoZSBvcmlnaW5hbCB0b2tlbiBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBlbGVtZW50
IGluCisgICAgICAgICJyZWNvbnN0cnVjdCB0aGUgYWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVudHMi
IGFuZCAiY2FsbCB0aGUgYWRvcHRpb24gYWdlbmN5Ii4KKworICAgICAgICBBcyBhIHdvcmthcm91
bmQsIFdlYktpdCB1c2VzIHRoZSBzYXZlZCBlbGVtZW50IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFs
IHRva2VuCisgICAgICAgIHRvIGNyZWF0ZSBhbiBlbGVtZW50LiBCdXQgdGhpcyBjYXVzZXMgdXMg
dG8gZmFpbCBleGFtcGxlcyBsaWtlIHRoaXM6CisgICAgICAgIDxiIGlkPSIxIj48cD48c2NyaXB0
PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIxIikuaWQgPSAiMiI8L3NjcmlwdD48L3A+VEVYVDwv
Yj4KKyAgICAgICAgcmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMgY2FsbHMg
dGhpcyBtZXRob2QgdG8gb3BlbiBhIHNlY29uZCA8Yj4KKyAgICAgICAgdGFnIHRvIHdyYXAgVEVY
VCwgaXQgd2lsbCBoYXZlIGlkICIyIiwgZXZlbiB0aG91Z2ggdGhlIEhUTUw1IHNwZWMgaW1wbGll
cyBpdAorICAgICAgICBzaG91bGQgYmUgIjEiLgorCisgICAgICAgIENyZWF0ZWQgYSByZWYtY291
bnRlZCBjb250YWluZXIgY2xhc3MsIEhUTUxTdGFja05vZGUgdG8gaG9sZCB0aGUgb3JpZ2luYWwg
dG9rZW4KKyAgICAgICAgYW5kIHRoZSBuYW1lc3BhY2UgVVJJIGFzIHdlbGwgYXMgdGhlIGVsZW1l
bnQuIENoYW5nZWQgSFRNTEVsZW1lbnRTdGFjayBhbmQKKyAgICAgICAgSFRNTEZvcm1hdHRpbmdF
bGVtZW50TGlzdCB0byB1c2UgSFRNTFN0YWNrTm9kZS4KKyAgICAgICAgQ2hhbmdlZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6cmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMgYW5k
CisgICAgICAgIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5IHRvIGNyZWF0
ZSBhbiBlbGVtZW50IGZyb20gdGhlIHNhdmVkIHRva2VuCisgICAgICAgIGluc3RlYWQgb2YgdGhl
IHNhdmVkIGVsZW1lbnQuCisKKyAgICAgICAgVXBkYXRlZCB0ZXN0IGV4cGVjdGF0aW9uIGZvciBo
dG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0CisgICAgICAgIGJlY2F1c2Ugbm93IHJlc291cmNl
cy9zY3JpcHRlZC9hZG9wdGlvbjAxLmRhdCBwYXNzZXMuCisKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbklu
dG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25Eb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uSFRNTEh0
bWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MSGVhZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydEhUTUxCb2R5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNj
cmlwdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydEZvcmVpZ25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpjcmVhdGVIVE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaDoKKyAg
ICAgICAgKEhUTUxDb25zdHJ1Y3Rpb25TaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjpjdXJyZW50RWxlbWVudFJlY29yZCk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTEVsZW1lbnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0bWxFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZUNvbW1vbik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEhlYWRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MQm9keUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRWxlbWVudFN0YWNrOjppbnNlcnRBYm92ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudFN0YWNrOjpwdXNoQ29tbW9uKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRWxlbWVu
dFN0YWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVj
b3JkOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1l
bnRSZWNvcmQ6Om5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxl
bWVudFJlY29yZDo6c3RhY2tOb2RlKToKKyAgICAgICAgKEVsZW1lbnRSZWNvcmQpOgorICAgICAg
ICAoSFRNTEVsZW1lbnRTdGFjayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRp
bmdFbGVtZW50TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0Ojpzd2FwVG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50
TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpF
bnRyeTo6RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dDo6RW50cnk6OmlzTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxl
bWVudExpc3Q6OkVudHJ5OjpzdGFja05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OnJlcGxhY2VFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpvcGVy
YXRvciE9KToKKyAgICAgICAgKEVudHJ5KToKKyAgICAgICAgKEhUTUxGb3JtYXR0aW5nRWxlbWVu
dExpc3QpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTdGFja05vZGUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhUTUxTdGFja05vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFN0YWNrTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdGFj
a05vZGU6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0YWNrTm9kZTo6bm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tOb2RlOjp0b2tlbik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU3RhY2tOb2RlOjpuYW1lc3BhY2VVUkkpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFN0YWNrTm9kZTo6SFRNTFN0YWNrTm9kZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRv
a2VuLmg6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OmNyZWF0ZSk6CisgICAg
ICAgIChBdG9taWNIVE1MVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2Vu
OjpBdG9taWNIVE1MVG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFj
dGVyVG9rZW5CdWZmZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjb25zdHJ1Y3RUcmVlRnJvbVRva2VuKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NEb2N0eXBlVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVN0YXJ0VGFnKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VFbmRUYWcpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1
dHRvblNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRl
c0ZvcklzaW5kZXhJbnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWcp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJ
bkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRU
YWdGb3JJblRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1N0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Jv
ZHlFbmRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRy
ZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3kpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZUJvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Sb3cpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5DZWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblRhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDb21tZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9yQmVmb3JlSFRNTCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JCZWZvcmVIZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckluSGVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbkhlYWROb3NjcmlwdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JBZnRlckhlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkhl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1JD
REFUQVN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVC
dWlsZGVyOjpzaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnBhcnNlRXJyb3IpOgorICAgICAgICAq
IGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oOgorICAgICAgICAoSFRNTFRyZWVCdWlsZGVy
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCk6CisK
IDIwMTItMDctMTggIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBJbmRleGVkREI6IERpcmVjdGlvbiBwYXJhbWV0ZXIgaWdub3JlZCBieSBzb21lIG9wZW5DdXJz
b3IoKSBvdmVybG9hZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxD
b25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCA0ZGE3YTdhZTljNjEyZTA1ZGJjNzQ2MmRmNDRhNjA0
Njk3YzMzOTIwLi43NjAxOTZjN2YwNTA3NThhMDU0YWM0NTFhNTNhMmMwNjFlMzk0YWUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUu
Y3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTFN0YWNrTm9kZS5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgogI2luY2x1ZGUg
IkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCkBAIC0xOTIs
MzMgKzE5MywzMyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpkaXNwYXRjaERvY3VtZW50
RWxlbWVudEF2YWlsYWJsZUlmTmVlZGVkKCkKICAgICAgICAgbV9kb2N1bWVudC0+ZnJhbWUoKS0+
bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7CiB9CiAKLXZvaWQg
SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRI
VE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAg
IFJlZlB0cjxIVE1MSHRtbEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0
ZShtX2RvY3VtZW50KTsKLSAgICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLmF0
dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIGVsZW1lbnQt
PnBhcnNlclNldEF0dHJpYnV0ZXModG9rZW4tPmF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24pOwogICAgIGF0dGFjaExhdGVyKG1fYXR0YWNobWVudFJvb3QsIGVsZW1l
bnQpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MSHRtbEVsZW1lbnQoZWxlbWVudCk7Cisg
ICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxIdG1sRWxlbWVudChIVE1MU3RhY2tOb2RlOjpjcmVh
dGUoZWxlbWVudCwgdG9rZW4pKTsKIAogICAgIGV4ZWN1dGVRdWV1ZWRUYXNrcygpOwogICAgIGVs
ZW1lbnQtPmluc2VydGVkQnlQYXJzZXIoKTsKICAgICBkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2
YWlsYWJsZUlmTmVlZGVkKCk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdl
QXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIEVs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0
ZXNGcm9tVG9rZW5JbnRvRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBFbGVtZW50KiBl
bGVtZW50KQogewotICAgIGlmICh0b2tlbi5hdHRyaWJ1dGVzKCkuaXNFbXB0eSgpKQorICAgIGlm
ICh0b2tlbi0+YXR0cmlidXRlcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
RWxlbWVudEF0dHJpYnV0ZURhdGEqIGVsZW1lbnRBdHRyaWJ1dGVEYXRhID0gZWxlbWVudC0+ZW5z
dXJlQXR0cmlidXRlRGF0YSgpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRva2Vu
LmF0dHJpYnV0ZXMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIHRv
a2VuQXR0cmlidXRlID0gdG9rZW4uYXR0cmlidXRlcygpLmF0KGkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0b2tlbi0+YXR0cmlidXRlcygpLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGNvbnN0IEF0dHJpYnV0ZSYgdG9rZW5BdHRyaWJ1dGUgPSB0b2tlbi0+YXR0cmlidXRlcygpLmF0
KGkpOwogICAgICAgICBpZiAoIWVsZW1lbnRBdHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVJdGVt
KHRva2VuQXR0cmlidXRlLm5hbWUoKSkpCiAgICAgICAgICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1
dGUodG9rZW5BdHRyaWJ1dGUubmFtZSgpLCB0b2tlbkF0dHJpYnV0ZS52YWx1ZSgpKTsKICAgICB9
CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdJ
bkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6
Omluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsK
ICAgICAvLyBGSVhNRTogcGFyc2UgZXJyb3IKIApAQCAtMjMwLDE3ICsyMzEsMTcgQEAgdm9pZCBI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keShBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50
KHRva2VuLCBtX29wZW5FbGVtZW50cy5odG1sRWxlbWVudCgpKTsKIH0KIAotdm9pZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keShBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEJvZHlTdGFy
dFRhZ0luQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIC8vIEZJWE1FOiBwYXJz
ZSBlcnJvcgogICAgIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KHRva2VuLCBt
X29wZW5FbGVtZW50cy5ib2R5RWxlbWVudCgpKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0RG9jdHlwZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9jdHlwZShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewot
ICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkRPQ1RZUEUpOworICAg
IEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpET0NUWVBFKTsKIAotICAg
IFJlZlB0cjxEb2N1bWVudFR5cGU+IGRvY3R5cGUgPSBEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2Rv
Y3VtZW50LCB0b2tlbi5uYW1lKCksIFN0cmluZzo6YWRvcHQodG9rZW4ucHVibGljSWRlbnRpZmll
cigpKSwgU3RyaW5nOjphZG9wdCh0b2tlbi5zeXN0ZW1JZGVudGlmaWVyKCkpKTsKKyAgICBSZWZQ
dHI8RG9jdW1lbnRUeXBlPiBkb2N0eXBlID0gRG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2N1bWVu
dCwgdG9rZW4tPm5hbWUoKSwgU3RyaW5nOjphZG9wdCh0b2tlbi0+cHVibGljSWRlbnRpZmllcigp
KSwgU3RyaW5nOjphZG9wdCh0b2tlbi0+c3lzdGVtSWRlbnRpZmllcigpKSk7CiAgICAgYXR0YWNo
TGF0ZXIobV9hdHRhY2htZW50Um9vdCwgZG9jdHlwZS5yZWxlYXNlKCkpOwogCiAgICAgLy8gRE9D
VFlQRSBub2RlcyBhcmUgb25seSBwcm9jZXNzZWQgd2hlbiBwYXJzaW5nIGZyYWdtZW50cyB3L28g
Y29udGV4dEVsZW1lbnRzLCB3aGljaApAQCAtMjUyLDcgKzI1Myw3IEBAIHZvaWQgSFRNTENvbnN0
cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBp
ZiAobV9pc1BhcnNpbmdGcmFnbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHRva2Vu
LmZvcmNlUXVpcmtzKCkpCisgICAgaWYgKHRva2VuLT5mb3JjZVF1aXJrcygpKQogICAgICAgICBt
X2RvY3VtZW50LT5zZXRDb21wYXRpYmlsaXR5TW9kZShEb2N1bWVudDo6UXVpcmtzTW9kZSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWN0dWFsbHkgYWRkIHRoZSBEb2N0eXBl
IG5vZGUgdG8gdGhlIERPTS4KQEAgLTI2MSw2MSArMjYyLDYxIEBAIHZvaWQgSFRNTENvbnN0cnVj
dGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICB9CiB9
CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnQoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnQoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxU
b2tlblR5cGVzOjpDb21tZW50KTsKLSAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBDb21t
ZW50OjpjcmVhdGUoY3VycmVudE5vZGUoKS0+ZG9jdW1lbnQoKSwgdG9rZW4uY29tbWVudCgpKSk7
CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkNvbW1lbnQpOwor
ICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIENvbW1lbnQ6OmNyZWF0ZShjdXJyZW50Tm9k
ZSgpLT5kb2N1bWVudCgpLCB0b2tlbi0+Y29tbWVudCgpKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0
cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnRPbkRvY3VtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25Eb2N1bWVudChB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRN
TFRva2VuVHlwZXM6OkNvbW1lbnQpOwotICAgIGF0dGFjaExhdGVyKG1fYXR0YWNobWVudFJvb3Qs
IENvbW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50LCB0b2tlbi5jb21tZW50KCkpKTsKKyAgICBBU1NF
UlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6Q29tbWVudCk7CisgICAgYXR0YWNo
TGF0ZXIobV9hdHRhY2htZW50Um9vdCwgQ29tbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2Vu
LT5jb21tZW50KCkpKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29t
bWVudE9uSFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoQXRvbWljSFRN
TFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5
cGVzOjpDb21tZW50KTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBl
czo6Q29tbWVudCk7CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV9vcGVuRWxlbWVudHMu
cm9vdE5vZGUoKTsKLSAgICBhdHRhY2hMYXRlcihwYXJlbnQsIENvbW1lbnQ6OmNyZWF0ZShwYXJl
bnQtPmRvY3VtZW50KCksIHRva2VuLmNvbW1lbnQoKSkpOworICAgIGF0dGFjaExhdGVyKHBhcmVu
dCwgQ29tbWVudDo6Y3JlYXRlKHBhcmVudC0+ZG9jdW1lbnQoKSwgdG9rZW4tPmNvbW1lbnQoKSkp
OwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSGVhZEVsZW1lbnQo
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2Vy
dEhUTUxIZWFkRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIEFTU0VSVCgh
c2hvdWxkRm9zdGVyUGFyZW50KCkpOwogICAgIG1faGVhZCA9IGNyZWF0ZUhUTUxFbGVtZW50KHRv
a2VuKTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBtX2hlYWQpOwotICAgIG1fb3Bl
bkVsZW1lbnRzLnB1c2hIVE1MSGVhZEVsZW1lbnQobV9oZWFkKTsKKyAgICBtX29wZW5FbGVtZW50
cy5wdXNoSFRNTEhlYWRFbGVtZW50KEhUTUxTdGFja05vZGU6OmNyZWF0ZShtX2hlYWQsIHRva2Vu
KSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5RWxlbWVu
dChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5z
ZXJ0SFRNTEJvZHlFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgQVNTRVJU
KCFzaG91bGRGb3N0ZXJQYXJlbnQoKSk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGJvZHkgPSBjcmVh
dGVIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgYm9k
eSk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxCb2R5RWxlbWVudChib2R5LnJlbGVhc2Uo
KSk7CisgICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxCb2R5RWxlbWVudChIVE1MU3RhY2tOb2Rl
OjpjcmVhdGUoYm9keS5yZWxlYXNlKCksIHRva2VuKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVj
dGlvblNpdGU6Omluc2VydEhUTUxGb3JtRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBi
b29sIGlzRGVtb3RlZCkKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxGb3Jt
RWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBib29sIGlzRGVtb3RlZCkKIHsKICAgICBS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KHRva2VuKTsKICAgICBB
U1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSk7CiAgICAgbV9mb3JtID0gc3RhdGlj
X3BvaW50ZXJfY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KGVsZW1lbnQucmVsZWFzZSgpKTsKICAgICBt
X2Zvcm0tPnNldERlbW90ZWQoaXNEZW1vdGVkKTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9k
ZSgpLCBtX2Zvcm0pOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2gobV9mb3JtKTsKKyAgICBtX29w
ZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja05vZGU6OmNyZWF0ZShtX2Zvcm0sIHRva2VuKSk7CiB9
CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxFbGVtZW50KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRWxl
bWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVt
ZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnRO
b2RlKCksIGVsZW1lbnQpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudC5yZWxlYXNl
KCkpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrTm9kZTo6Y3JlYXRlKGVsZW1l
bnQucmVsZWFzZSgpLCB0b2tlbikpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KEF0b21p
Y0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW5UeXBlczo6U3RhcnRUYWcpOworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tl
blR5cGVzOjpTdGFydFRhZyk7CiAgICAgLy8gTm9ybWFsbHkgSFRNTEVsZW1lbnRTdGFjayBpcyBy
ZXNwb25zaWJsZSBmb3IgY2FsbGluZyBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4sCiAgICAgLy8gYnV0
IHNlbGYtY2xvc2luZyBlbGVtZW50cyBhcmUgbmV2ZXIgaW4gdGhlIGVsZW1lbnQgc3RhY2sgc28g
dGhlIHN0YWNrCiAgICAgLy8gZG9lc24ndCBnZXQgYSBjaGFuY2UgdG8gdGVsbCB0aGVtIHRoYXQg
d2UncmUgZG9uZSBwYXJzaW5nIHRoZWlyIGNoaWxkcmVuLgpAQCAtMzI0LDE2ICszMjUsMTYgQEAg
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudChB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVj
cy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI2Fja25v
d2xlZGdlLXNlbGYtY2xvc2luZy1mbGFnCiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6
Omluc2VydEZvcm1hdHRpbmdFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQogewogICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBw
cy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCN0aGUtc3RhY2stb2Ytb3Blbi1l
bGVtZW50cwogICAgIC8vIFBvc3NpYmxlIGFjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIGluY2x1
ZGU6CiAgICAgLy8gYSwgYiwgYmlnLCBjb2RlLCBlbSwgZm9udCwgaSwgbm9iciwgcywgc21hbGws
IHN0cmlrZSwgc3Ryb25nLCB0dCwgYW5kIHUuCiAgICAgaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4p
OwotICAgIG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmFwcGVuZChjdXJyZW50RWxlbWVudCgp
KTsKKyAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5hcHBlbmQoY3VycmVudEVsZW1lbnRS
ZWNvcmQoKS0+c3RhY2tOb2RlKCkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4p
CiB7CiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQt
d29yay9tdWx0aXBhZ2Uvc2NyaXB0aW5nLTEuaHRtbCNhbHJlYWR5LXN0YXJ0ZWQKICAgICAvLyBo
dHRwOi8vaHRtbDUub3JnL3NwZWNzL2RvbS1wYXJzaW5nLmh0bWwjZG9tLXJhbmdlLWNyZWF0ZWNv
bnRleHR1YWxmcmFnbWVudApAQCAtMzQ0LDIwICszNDUsMjAgQEAgdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
IGNvbnN0IGJvb2wgYWxyZWFkeVN0YXJ0ZWQgPSBtX2lzUGFyc2luZ0ZyYWdtZW50ICYmIHBhcnNl
ckluc2VydGVkOwogICAgIFJlZlB0cjxIVE1MU2NyaXB0RWxlbWVudD4gZWxlbWVudCA9IEhUTUxT
Y3JpcHRFbGVtZW50OjpjcmVhdGUoc2NyaXB0VGFnLCBjdXJyZW50Tm9kZSgpLT5kb2N1bWVudCgp
LCBwYXJzZXJJbnNlcnRlZCwgYWxyZWFkeVN0YXJ0ZWQpOwogICAgIGlmIChtX2ZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbiAhPSBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpCi0gICAgICAgIGVs
ZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZXModG9rZW4uYXR0cmlidXRlcygpLCBtX2ZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0
ZXModG9rZW4tPmF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwog
ICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQpOwotICAgIG1fb3BlbkVsZW1l
bnRzLnB1c2goZWxlbWVudC5yZWxlYXNlKCkpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRN
TFN0YWNrTm9kZTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgpLCB0b2tlbikpOwogfQogCi12b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JlaWduRWxlbWVudChBdG9taWNIVE1MVG9r
ZW4mIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSkKK3ZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydEZvcmVpZ25FbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9r
ZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKQogewotICAgIEFTU0VSVCh0b2tl
bi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQodG9rZW4t
PnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwogICAgIG5vdEltcGxlbWVudGVk
KCk7IC8vIHBhcnNlRXJyb3Igd2hlbiB4bWxucyBvciB4bWxuczp4bGluayBhcmUgd3JvbmcuCiAK
ICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQodG9rZW4sIG5hbWVz
cGFjZVVSSSk7Ci0gICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgZWxlbWVudCwgdG9rZW4u
c2VsZkNsb3NpbmcoKSk7Ci0gICAgaWYgKCF0b2tlbi5zZWxmQ2xvc2luZygpKQotICAgICAgICBt
X29wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQucmVsZWFzZSgpKTsKKyAgICBhdHRhY2hMYXRlcihj
dXJyZW50Tm9kZSgpLCBlbGVtZW50LCB0b2tlbi0+c2VsZkNsb3NpbmcoKSk7CisgICAgaWYgKCF0
b2tlbi0+c2VsZkNsb3NpbmcoKSkKKyAgICAgICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3Rh
Y2tOb2RlOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNlKCksIHRva2VuLCBuYW1lc3BhY2VVUkkpKTsK
IH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZGUoY29uc3QgU3Ry
aW5nJiBjaGFyYWN0ZXJzLCBXaGl0ZXNwYWNlTW9kZSB3aGl0ZXNwYWNlTW9kZSkKQEAgLTQwMSw0
OCArNDAyLDM0IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFRleHROb2RlKGNv
bnN0IFN0cmluZyYgY2hhcmFjdGVycywgV2hpdGVzcGFjZU1vCiAgICAgfQogfQogCi1QYXNzUmVm
UHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKQorUGFzc1Jl
ZlB0cjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudChBdG9taWNI
VE1MVG9rZW4qIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSkKIHsKLSAg
ICBRdWFsaWZpZWROYW1lIHRhZ05hbWUobnVsbEF0b20sIHRva2VuLm5hbWUoKSwgbmFtZXNwYWNl
VVJJKTsKKyAgICBRdWFsaWZpZWROYW1lIHRhZ05hbWUobnVsbEF0b20sIHRva2VuLT5uYW1lKCks
IG5hbWVzcGFjZVVSSSk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBjdXJyZW50Tm9k
ZSgpLT5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRhZ05hbWUsIHRydWUpOwotICAgIGVsZW1l
bnQtPnBhcnNlclNldEF0dHJpYnV0ZXModG9rZW4uYXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbik7CisgICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tl
bi0+YXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgcmV0
dXJuIGVsZW1lbnQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQor
UGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1l
bnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBRdWFsaWZpZWROYW1lIHRhZ05hbWUo
bnVsbEF0b20sIHRva2VuLm5hbWUoKSwgeGh0bWxOYW1lc3BhY2VVUkkpOworICAgIFF1YWxpZmll
ZE5hbWUgdGFnTmFtZShudWxsQXRvbSwgdG9rZW4tPm5hbWUoKSwgeGh0bWxOYW1lc3BhY2VVUkkp
OwogICAgIC8vIEZJWE1FOiBUaGlzIGNhbid0IHVzZSBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3Jl
YXRlRWxlbWVudCBiZWNhdXNlIHdlCiAgICAgLy8gaGF2ZSB0byBwYXNzIHRoZSBjdXJyZW50IGZv
cm0gZWxlbWVudC4gIFdlIHNob3VsZCByZXdvcmsgZm9ybSBhc3NvY2lhdGlvbgogICAgIC8vIHRv
IG9jY3VyIGFmdGVyIGNvbnN0cnVjdGlvbiB0byBhbGxvdyBiZXR0ZXIgY29kZSBzaGFyaW5nIGhl
cmUuCiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNy
ZWF0ZUhUTUxFbGVtZW50KHRhZ05hbWUsIGN1cnJlbnROb2RlKCktPmRvY3VtZW50KCksIGZvcm0o
KSwgdHJ1ZSk7Ci0gICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi5hdHRyaWJ1
dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBlbGVtZW50LT5wYXJz
ZXJTZXRBdHRyaWJ1dGVzKHRva2VuLT5hdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uKTsKICAgICBBU1NFUlQoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBy
ZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENv
bnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50RnJvbUVsZW1lbnRSZWNvcmQoSFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogcmVjb3JkKQorUGFzc1JlZlB0cjxIVE1MU3RhY2tO
b2RlPiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKFBh
c3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlSFRNTEVs
ZW1lbnRGcm9tU2F2ZWRFbGVtZW50KHJlY29yZC0+ZWxlbWVudCgpKTsKLX0KLQotUGFzc1JlZlB0
cjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnRGcm9tU2F2
ZWRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgbWV0aG9k
IGlzIHdyb25nLiAgV2Ugc2hvdWxkIGJlIHVzaW5nIHRoZSBvcmlnaW5hbCB0b2tlbi4KLSAgICAv
LyBVc2luZyBhbiBFbGVtZW50KiBjYXVzZXMgdXMgdG8gZmFpbCBleGFtcGxlcyBsaWtlIHRoaXM6
Ci0gICAgLy8gPGIgaWQ9IjEiPjxwPjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjEi
KS5pZCA9ICIyIjwvc2NyaXB0PjwvcD5URVhUPC9iPgotICAgIC8vIFdoZW4gcmVjb25zdHJ1Y3RU
aGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMgY2FsbHMgdGhpcyBtZXRob2QgdG8gb3BlbgotICAg
IC8vIGEgc2Vjb25kIDxiPiB0YWcgdG8gd3JhcCBURVhULCBpdCB3aWxsIGhhdmUgaWQgIjIiLCBl
dmVuIHRob3VnaCB0aGUgSFRNTDUKLSAgICAvLyBzcGVjIGltcGxpZXMgaXQgc2hvdWxkIGJlICIx
Ii4gIE1pbmVmaWVsZCBtYXRjaGVzIHRoZSBIVE1MNSBzcGVjIGhlcmUuCi0KLSAgICBBU1NFUlQo
ZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKTsgLy8gb3RoZXJ3aXNlIGxvY2FsTmFtZSgpIG1pZ2h0
IGJlIHdyb25nLgotCi0gICAgVmVjdG9yPEF0dHJpYnV0ZT4gY2xvbmVkQXR0cmlidXRlczsKLSAg
ICBpZiAoRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBlbGVtZW50LT51cGRh
dGVkQXR0cmlidXRlRGF0YSgpKQotICAgICAgICBjbG9uZWRBdHRyaWJ1dGVzID0gYXR0cmlidXRl
RGF0YS0+Y2xvbmVkQXR0cmlidXRlVmVjdG9yKCk7Ci0KLSAgICBBdG9taWNIVE1MVG9rZW4gZmFr
ZVRva2VuKEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZywgZWxlbWVudC0+bG9jYWxOYW1lKCksIGNs
b25lZEF0dHJpYnV0ZXMpOwotICAgIHJldHVybiBjcmVhdGVIVE1MRWxlbWVudChmYWtlVG9rZW4p
OworICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50OworICAgIGlmIChub2RlLT5uYW1lc3BhY2VV
UkkoKSA9PSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKQorICAgICAgICBlbGVtZW50ID0g
Y3JlYXRlSFRNTEVsZW1lbnQobm9kZS0+dG9rZW4oKSk7CisgICAgZWxzZQorICAgICAgICBlbGVt
ZW50ID0gY3JlYXRlRWxlbWVudChub2RlLT50b2tlbigpLCBub2RlLT5uYW1lc3BhY2VVUkkoKSk7
CisgICAgcmV0dXJuIEhUTUxTdGFja05vZGU6OmNyZWF0ZShlbGVtZW50LnJlbGVhc2UoKSwgbm9k
ZS0+dG9rZW4oKSwgbm9kZS0+bmFtZXNwYWNlVVJJKCkpOwogfQogCiBib29sIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbmRleE9mRmlyc3RVbm9wZW5Gb3JtYXR0aW5nRWxlbWVudCh1bnNpZ25lZCYg
Zmlyc3RVbm9wZW5FbGVtZW50SW5kZXgpIGNvbnN0CkBAIC00NzIsMTAgKzQ1OSwxMCBAQCB2b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cygpCiAgICAgQVNTRVJUKHVub3BlbkVudHJ5SW5kZXggPCBtX2FjdGl2ZUZvcm1hdHRpbmdF
bGVtZW50cy5zaXplKCkpOwogICAgIGZvciAoOyB1bm9wZW5FbnRyeUluZGV4IDwgbV9hY3RpdmVG
b3JtYXR0aW5nRWxlbWVudHMuc2l6ZSgpOyArK3Vub3BlbkVudHJ5SW5kZXgpIHsKICAgICAgICAg
SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnkmIHVub3BlbmVkRW50cnkgPSBtX2FjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cy5hdCh1bm9wZW5FbnRyeUluZGV4KTsKLSAgICAgICAgUmVmUHRy
PEVsZW1lbnQ+IHJlY29uc3RydWN0ZWQgPSBjcmVhdGVIVE1MRWxlbWVudEZyb21TYXZlZEVsZW1l
bnQodW5vcGVuZWRFbnRyeS5lbGVtZW50KCkpOwotICAgICAgICBhdHRhY2hMYXRlcihjdXJyZW50
Tm9kZSgpLCByZWNvbnN0cnVjdGVkKTsKLSAgICAgICAgbV9vcGVuRWxlbWVudHMucHVzaChyZWNv
bnN0cnVjdGVkLnJlbGVhc2UoKSk7Ci0gICAgICAgIHVub3BlbmVkRW50cnkucmVwbGFjZUVsZW1l
bnQoY3VycmVudEVsZW1lbnQoKSk7CisgICAgICAgIFJlZlB0cjxIVE1MU3RhY2tOb2RlPiByZWNv
bnN0cnVjdGVkID0gY3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKHVub3BlbmVkRW50cnkuc3Rh
Y2tOb2RlKCkpOworICAgICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCByZWNvbnN0cnVj
dGVkLT5ub2RlKCkpOworICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNoKHJlY29uc3RydWN0ZWQp
OworICAgICAgICB1bm9wZW5lZEVudHJ5LnJlcGxhY2VFbGVtZW50KHJlY29uc3RydWN0ZWQucmVs
ZWFzZSgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MQ29uc3RydWN0aW9uU2l0ZS5oCmluZGV4IDM2N2MwZmUyNjg1NmJmNzZkMWQ0ZTY4NDJhNmZj
ZTFkOTVmYjNjYTEuLmFkOGViYzc3ZDFjZTI0N2FkNDY3MjI0Y2ViMzEzZDRhMDQ2NGQ5MTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUu
aApAQCAtODcsMjYgKzg3LDI2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFjaCgpOwogICAgIHZv
aWQgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAKLSAgICB2b2lkIGluc2VydERvY3R5cGUoQXRvbWlj
SFRNTFRva2VuJik7Ci0gICAgdm9pZCBpbnNlcnRDb21tZW50KEF0b21pY0hUTUxUb2tlbiYpOwot
ICAgIHZvaWQgaW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRva2VuJik7Ci0gICAg
dm9pZCBpbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7Ci0g
ICAgdm9pZCBpbnNlcnRIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGlu
c2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBp
bnNlcnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGluc2Vy
dEhUTUxIZWFkRWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGluc2VydEhUTUxC
b2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGluc2VydEhUTUxGb3JtRWxl
bWVudChBdG9taWNIVE1MVG9rZW4mLCBib29sIGlzRGVtb3RlZCA9IGZhbHNlKTsKLSAgICB2b2lk
IGluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRE
b2N0eXBlKEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgaW5zZXJ0Q29tbWVudChBdG9taWNI
VE1MVG9rZW4qKTsKKyAgICB2b2lkIGluc2VydENvbW1lbnRPbkRvY3VtZW50KEF0b21pY0hUTUxU
b2tlbiopOworICAgIHZvaWQgaW5zZXJ0Q29tbWVudE9uSFRNTEh0bWxFbGVtZW50KEF0b21pY0hU
TUxUb2tlbiopOworICAgIHZvaWQgaW5zZXJ0SFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7
CisgICAgdm9pZCBpbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiop
OworICAgIHZvaWQgaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7Cisg
ICAgdm9pZCBpbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9p
ZCBpbnNlcnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBpbnNl
cnRIVE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiwgYm9vbCBpc0RlbW90ZWQgPSBmYWxz
ZSk7CisgICAgdm9pZCBpbnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiopOwogICAg
IHZvaWQgaW5zZXJ0VGV4dE5vZGUoY29uc3QgU3RyaW5nJiwgV2hpdGVzcGFjZU1vZGUgPSBXaGl0
ZXNwYWNlVW5rbm93bik7Ci0gICAgdm9pZCBpbnNlcnRGb3JlaWduRWxlbWVudChBdG9taWNIVE1M
VG9rZW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7CisgICAgdm9pZCBpbnNl
cnRGb3JlaWduRWxlbWVudChBdG9taWNIVE1MVG9rZW4qLCBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVzcGFjZVVSSSk7CiAKLSAgICB2b2lkIGluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1M
KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9k
eShBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGluc2VydEhUTUxCb2R5U3RhcnRUYWdJbkJv
ZHkoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVm
b3JlSFRNTChBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIGluc2VydEhUTUxIdG1sU3RhcnRU
YWdJbkJvZHkoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBpbnNlcnRIVE1MQm9keVN0YXJ0
VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tlbiopOwogCi0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBj
cmVhdGVIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICBQYXNzUmVmUHRyPEVsZW1l
bnQ+IGNyZWF0ZUhUTUxFbGVtZW50RnJvbUVsZW1lbnRSZWNvcmQoSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZCopOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1l
bnQoQXRvbWljSFRNTFRva2VuKik7CisgICAgUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBjcmVh
dGVFbGVtZW50RnJvbVNhdmVkVG9rZW4oUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7CiAKICAg
ICBib29sIHNob3VsZEZvc3RlclBhcmVudCgpIGNvbnN0OwogICAgIHZvaWQgZm9zdGVyUGFyZW50
KFBhc3NSZWZQdHI8Tm9kZT4pOwpAQCAtMTE4LDYgKzExOCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSk7CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9vcGVuRWxl
bWVudHMuc3RhY2tEZXB0aCgpOyB9CisgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29y
ZCogY3VycmVudEVsZW1lbnRSZWNvcmQoKSBjb25zdCB7IHJldHVybiBtX29wZW5FbGVtZW50cy50
b3BSZWNvcmQoKTsgfQogICAgIEVsZW1lbnQqIGN1cnJlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9vcGVuRWxlbWVudHMudG9wKCk7IH0KICAgICBDb250YWluZXJOb2RlKiBjdXJyZW50Tm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkVsZW1lbnRzLnRvcE5vZGUoKTsgfQogICAgIEVsZW1l
bnQqIG9uZUJlbG93VG9wKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuRWxlbWVudHMub25lQmVsb3dU
b3AoKTsgfQpAQCAtMTYwLDEwICsxNjEsOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5kRm9z
dGVyU2l0ZShIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2smKTsKIAotICAgIFBhc3NSZWZQdHI8RWxl
bWVudD4gY3JlYXRlSFRNTEVsZW1lbnRGcm9tU2F2ZWRFbGVtZW50KEVsZW1lbnQqKTsKLSAgICBQ
YXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3Jl
YXRlRWxlbWVudChBdG9taWNIVE1MVG9rZW4qLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFj
ZVVSSSk7CiAKLSAgICB2b2lkIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEF0
b21pY0hUTUxUb2tlbiYsIEVsZW1lbnQqKTsKKyAgICB2b2lkIG1lcmdlQXR0cmlidXRlc0Zyb21U
b2tlbkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tlbiosIEVsZW1lbnQqKTsKICAgICB2b2lkIGRp
c3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVkZWQoKTsKIAogICAgIERvY3VtZW50
KiBtX2RvY3VtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TEVsZW1lbnRTdGFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVu
dFN0YWNrLmNwcAppbmRleCBjZDVkMDhhNTUzZWRjODQ3MzU2MWExNjFlZTFhOTc0YTI3ZjYwM2Mz
Li5mZjcwYWMyMWY1MWE0ZTJkMTg4NTkzNzNhZmI0YTkwMzhjNmZkMTQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcApAQCAtMTI1LDcgKzEy
NSw3IEBAIGlubGluZSBib29sIGlzU2VsZWN0U2NvcGVNYXJrZXIoQ29udGFpbmVyTm9kZSogbm9k
ZSkKIAogfQogCi1IVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVjb3Jk
KFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSwgUGFzc093blB0cjxFbGVtZW50UmVjb3Jk
PiBuZXh0KQorSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6RWxlbWVudFJlY29yZChQ
YXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IG5vZGUsIFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4g
bmV4dCkKICAgICA6IG1fbm9kZShub2RlKQogICAgICwgbV9uZXh0KG5leHQpCiB7CkBAIC0xMzYs
MTIgKzEzNiwxMiBAQCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjp+RWxlbWVudFJl
Y29yZCgpCiB7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6cmVw
bGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVu
dFN0YWNrOjpFbGVtZW50UmVjb3JkOjpyZXBsYWNlRWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFj
a05vZGU+IG5vZGUpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIEFTU0VSVCghbV9ub2Rl
IHx8IG1fbm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNT
RVJUKCFtX25vZGUgfHwgbV9ub2RlLT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSk7CiAgICAgLy8g
RklYTUU6IFNob3VsZCB0aGlzIGNhbGwgZmluaXNoUGFyc2luZ0NoaWxkcmVuPwotICAgIG1fbm9k
ZSA9IGVsZW1lbnQ7CisgICAgbV9ub2RlID0gbm9kZTsKIH0KIAogYm9vbCBIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkOjppc0Fib3ZlKEVsZW1lbnRSZWNvcmQqIG90aGVyKSBjb25zdApA
QCAtMzA3LDYyICszMDcsNjIgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BVbnRpbEZvcmVp
Z25Db250ZW50U2NvcGVNYXJrZXIoKQogICAgICAgICBwb3AoKTsKIH0KICAgICAKLXZvaWQgSFRN
TEVsZW1lbnRTdGFjazo6cHVzaFJvb3ROb2RlKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gcm9v
dE5vZGUpCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZShQYXNzUmVmUHRyPEhU
TUxTdGFja05vZGU+IHJvb3ROb2RlKQogewotICAgIEFTU0VSVChyb290Tm9kZS0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKTsKKyAgICBBU1NFUlQocm9vdE5vZGUt
Pm5vZGUoKS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKTsKICAg
ICBwdXNoUm9vdE5vZGVDb21tb24ocm9vdE5vZGUpOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3Rh
Y2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQordm9p
ZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0bWxFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0
YWNrTm9kZT4gbm9kZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Omh0bWxUYWcpKTsKLSAgICBwdXNoUm9vdE5vZGVDb21tb24oZWxlbWVudCk7CisgICAgQVNT
RVJUKG5vZGUtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKKyAg
ICBwdXNoUm9vdE5vZGVDb21tb24obm9kZSk7CiB9CiAgICAgCi12b2lkIEhUTUxFbGVtZW50U3Rh
Y2s6OnB1c2hSb290Tm9kZUNvbW1vbihQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHJvb3ROb2Rl
KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoUm9vdE5vZGVDb21tb24oUGFzc1JlZlB0cjxI
VE1MU3RhY2tOb2RlPiByb290Tm9kZSkKIHsKICAgICBBU1NFUlQoIW1fdG9wKTsKICAgICBBU1NF
UlQoIW1fcm9vdE5vZGUpOwotICAgIG1fcm9vdE5vZGUgPSByb290Tm9kZS5nZXQoKTsKKyAgICBt
X3Jvb3ROb2RlID0gcm9vdE5vZGUtPm5vZGUoKTsKICAgICBwdXNoQ29tbW9uKHJvb3ROb2RlKTsK
IH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEhlYWRFbGVtZW50KFBhc3NSZWZQ
dHI8RWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaEhUTUxIZWFk
RWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IG5vZGUpCiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSk7CisgICAgQVNTRVJUKG5vZGUt
PmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKTsKICAgICBBU1NFUlQo
IW1faGVhZEVsZW1lbnQpOwotICAgIG1faGVhZEVsZW1lbnQgPSBlbGVtZW50LmdldCgpOwotICAg
IHB1c2hDb21tb24oZWxlbWVudCk7CisgICAgbV9oZWFkRWxlbWVudCA9IG5vZGUtPmVsZW1lbnQo
KTsKKyAgICBwdXNoQ29tbW9uKG5vZGUpOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1
c2hIVE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQordm9pZCBIVE1M
RWxlbWVudFN0YWNrOjpwdXNoSFRNTEJvZHlFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9k
ZT4gbm9kZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJv
ZHlUYWcpKTsKKyAgICBBU1NFUlQobm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6Ym9keVRhZykpOwogICAgIEFTU0VSVCghbV9ib2R5RWxlbWVudCk7Ci0gICAgbV9ib2R5RWxl
bWVudCA9IGVsZW1lbnQuZ2V0KCk7Ci0gICAgcHVzaENvbW1vbihlbGVtZW50KTsKKyAgICBtX2Jv
ZHlFbGVtZW50ID0gbm9kZS0+ZWxlbWVudCgpOworICAgIHB1c2hDb21tb24obm9kZSk7CiB9CiAK
LXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQp
Cit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2goUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBu
b2RlKQogewotICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxU
YWcpKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFn
KSk7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykp
OworICAgIEFTU0VSVCghbm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRt
bFRhZykpOworICAgIEFTU0VSVCghbm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aGVhZFRhZykpOworICAgIEFTU0VSVCghbm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Ym9keVRhZykpOwogICAgIEFTU0VSVChtX3Jvb3ROb2RlKTsKLSAgICBwdXNoQ29t
bW9uKGVsZW1lbnQpOworICAgIHB1c2hDb21tb24obm9kZSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1l
bnRTdGFjazo6aW5zZXJ0QWJvdmUoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBFbGVtZW50
UmVjb3JkKiByZWNvcmRCZWxvdykKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJvdmUo
UGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBub2RlLCBFbGVtZW50UmVjb3JkKiByZWNvcmRCZWxv
dykKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgQVNTRVJUKG5vZGUpOwogICAgIEFTU0VS
VChyZWNvcmRCZWxvdyk7CiAgICAgQVNTRVJUKG1fdG9wKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpOwotICAgIEFTU0VSVCghZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsKKyAgICBBU1NFUlQoIW5vZGUtPmVsZW1lbnQo
KS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKKyAgICBBU1NFUlQoIW5vZGUtPmVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKTsKKyAgICBBU1NFUlQoIW5v
ZGUtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsKICAgICBBU1NF
UlQobV9yb290Tm9kZSk7CiAgICAgaWYgKHJlY29yZEJlbG93ID09IG1fdG9wKSB7Ci0gICAgICAg
IHB1c2goZWxlbWVudCk7CisgICAgICAgIHB1c2gobm9kZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFi
b3ZlKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgRWxlbWVudFJlY29yZCogcgogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgbV9zdGFja0RlcHRoKys7Ci0gICAgICAgIHJlY29y
ZEFib3ZlLT5zZXROZXh0KGFkb3B0UHRyKG5ldyBFbGVtZW50UmVjb3JkKGVsZW1lbnQsIHJlY29y
ZEFib3ZlLT5yZWxlYXNlTmV4dCgpKSkpOworICAgICAgICByZWNvcmRBYm92ZS0+c2V0TmV4dChh
ZG9wdFB0cihuZXcgRWxlbWVudFJlY29yZChub2RlLCByZWNvcmRBYm92ZS0+cmVsZWFzZU5leHQo
KSkpKTsKICAgICAgICAgcmVjb3JkQWJvdmUtPm5leHQoKS0+ZWxlbWVudCgpLT5iZWdpblBhcnNp
bmdDaGlsZHJlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTY3LDcgKzU2Nyw3IEBA
IENvbnRhaW5lck5vZGUqIEhUTUxFbGVtZW50U3RhY2s6OnJvb3ROb2RlKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9yb290Tm9kZTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoQ29tbW9u
KFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6
cHVzaENvbW1vbihQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IG5vZGUpCiB7CiAgICAgQVNTRVJU
KG1fcm9vdE5vZGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRWxlbWVudFN0YWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVu
dFN0YWNrLmgKaW5kZXggZjdiYWEzNjQ0N2IwN2Q1MjhmM2UyNzczMzI0YzgxNDJlOTE0MWY4OC4u
MzQ5MTg1Yjk3ZTQzZmI1MDA1NTVlMTM1YjQ5Y2EyOTJkODQxZWNiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaApAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IkhUTUxTdGFja05vZGUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTU1LDIzICs1Niwy
NCBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICB+RWxlbWVudFJlY29yZCgpOyAvLyBQ
dWJsaWMgZm9yIH5QYXNzT3duUHRyKCkKICAgICAKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChtX25vZGUuZ2V0KCkpOyB9Ci0gICAgICAgIENvbnRh
aW5lck5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KLSAgICAgICAg
dm9pZCByZXBsYWNlRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKKyAgICAgICAgRWxlbWVu
dCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS0+ZWxlbWVudCgpOyB9CisgICAgICAg
IENvbnRhaW5lck5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUtPm5vZGUoKTsgfQor
ICAgICAgICBQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IHN0YWNrTm9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbm9kZTsgfQorCisgICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxI
VE1MU3RhY2tOb2RlPik7CiAKICAgICAgICAgYm9vbCBpc0Fib3ZlKEVsZW1lbnRSZWNvcmQqKSBj
b25zdDsKIAogICAgICAgICBFbGVtZW50UmVjb3JkKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9u
ZXh0LmdldCgpOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgSFRNTEVs
ZW1lbnRTdGFjazsKIAotICAgICAgICBFbGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8Q29udGFpbmVy
Tm9kZT4sIFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4pOworICAgICAgICBFbGVtZW50UmVjb3Jk
KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4sIFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4pOwog
CiAgICAgICAgIFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4gcmVsZWFzZU5leHQoKSB7IHJldHVy
biBtX25leHQucmVsZWFzZSgpOyB9CiAgICAgICAgIHZvaWQgc2V0TmV4dChQYXNzT3duUHRyPEVs
ZW1lbnRSZWNvcmQ+IG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQogCi0gICAgICAgIFJlZlB0cjxD
b250YWluZXJOb2RlPiBtX25vZGU7CisgICAgICAgIFJlZlB0cjxIVE1MU3RhY2tOb2RlPiBtX25v
ZGU7CiAgICAgICAgIE93blB0cjxFbGVtZW50UmVjb3JkPiBtX25leHQ7CiAgICAgfTsKIApAQCAt
OTcsMTMgKzk5LDEzIEBAIHB1YmxpYzoKICAgICBFbGVtZW50UmVjb3JkKiBmaW5kKEVsZW1lbnQq
KSBjb25zdDsKICAgICBFbGVtZW50UmVjb3JkKiB0b3Btb3N0KGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSkgY29uc3Q7CiAKLSAgICB2b2lkIGluc2VydEFib3ZlKFBhc3NSZWZQdHI8RWxlbWVu
dD4sIEVsZW1lbnRSZWNvcmQqKTsKKyAgICB2b2lkIGluc2VydEFib3ZlKFBhc3NSZWZQdHI8SFRN
TFN0YWNrTm9kZT4sIEVsZW1lbnRSZWNvcmQqKTsKIAotICAgIHZvaWQgcHVzaChQYXNzUmVmUHRy
PEVsZW1lbnQ+KTsKLSAgICB2b2lkIHB1c2hSb290Tm9kZShQYXNzUmVmUHRyPENvbnRhaW5lck5v
ZGU+KTsKLSAgICB2b2lkIHB1c2hIVE1MSHRtbEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7
Ci0gICAgdm9pZCBwdXNoSFRNTEhlYWRFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOwotICAg
IHZvaWQgcHVzaEhUTUxCb2R5RWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKKyAgICB2b2lk
IHB1c2goUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7CisgICAgdm9pZCBwdXNoUm9vdE5vZGUo
UGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7CisgICAgdm9pZCBwdXNoSFRNTEh0bWxFbGVtZW50
KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4pOworICAgIHZvaWQgcHVzaEhUTUxIZWFkRWxlbWVu
dChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsKKyAgICB2b2lkIHB1c2hIVE1MQm9keUVsZW1l
bnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7CiAKICAgICB2b2lkIHBvcCgpOwogICAgIHZv
aWQgcG9wVW50aWwoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKQEAgLTE1Niw4ICsxNTgs
OCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICB2b2lkIHB1c2hDb21tb24oUGFz
c1JlZlB0cjxDb250YWluZXJOb2RlPik7Ci0gICAgdm9pZCBwdXNoUm9vdE5vZGVDb21tb24oUGFz
c1JlZlB0cjxDb250YWluZXJOb2RlPik7CisgICAgdm9pZCBwdXNoQ29tbW9uKFBhc3NSZWZQdHI8
SFRNTFN0YWNrTm9kZT4pOworICAgIHZvaWQgcHVzaFJvb3ROb2RlQ29tbW9uKFBhc3NSZWZQdHI8
SFRNTFN0YWNrTm9kZT4pOwogICAgIHZvaWQgcG9wQ29tbW9uKCk7CiAgICAgdm9pZCByZW1vdmVO
b25Ub3BDb21tb24oRWxlbWVudCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCmluZGV4IDAxNDVkZTBlNmYz
OWUwMTkwMGMyNDE1YjQ3ZDllNjU3YTUyMWVkZjEuLjFjNTNiY2M3MzE3NDMyMzgzNTkyNTQ2ZGY3
MTM1YmM1MDI1MzhkZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCkBAIC04NywyNSArODcsMjcgQEAgSFRN
TEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Qm9va21hcmsgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dDo6Ym9va21hcmtGb3IoRWxlbWUKICAgICByZXR1cm4gQm9va21hcmsoJmF0KGluZGV4KSk7CiB9
CiAKLXZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6c3dhcFRvKEVsZW1lbnQqIG9sZEVs
ZW1lbnQsIEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNvbnN0IEJvb2ttYXJrJiBib29rbWFyaykKK3Zv
aWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6c3dhcFRvKEVsZW1lbnQqIG9sZEVsZW1lbnQs
IFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gcHJwTmV3Tm9kZSwgY29uc3QgQm9va21hcmsmIGJv
b2ttYXJrKQogeworICAgIFJlZlB0cjxIVE1MU3RhY2tOb2RlPiBuZXdOb2RlID0gcHJwTmV3Tm9k
ZTsKKwogICAgIEFTU0VSVChjb250YWlucyhvbGRFbGVtZW50KSk7Ci0gICAgQVNTRVJUKCFjb250
YWlucyhuZXdFbGVtZW50KSk7CisgICAgQVNTRVJUKCFjb250YWlucyhuZXdOb2RlLT5lbGVtZW50
KCkpKTsKICAgICBpZiAoIWJvb2ttYXJrLmhhc0JlZW5Nb3ZlZCgpKSB7CiAgICAgICAgIEFTU0VS
VChib29rbWFyay5tYXJrKCktPmVsZW1lbnQoKSA9PSBvbGRFbGVtZW50KTsKLSAgICAgICAgYm9v
a21hcmsubWFyaygpLT5yZXBsYWNlRWxlbWVudChuZXdFbGVtZW50KTsKKyAgICAgICAgYm9va21h
cmsubWFyaygpLT5yZXBsYWNlRWxlbWVudChuZXdOb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBzaXplX3QgaW5kZXggPSBib29rbWFyay5tYXJrKCkgLSBmaXJzdCgpOwogICAgIEFT
U0VSVChpbmRleCA8IHNpemUoKSk7Ci0gICAgbV9lbnRyaWVzLmluc2VydChpbmRleCArIDEsIG5l
d0VsZW1lbnQpOworICAgIG1fZW50cmllcy5pbnNlcnQoaW5kZXggKyAxLCBuZXdOb2RlKTsKICAg
ICByZW1vdmUob2xkRWxlbWVudCk7CiB9CiAKLXZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dDo6YXBwZW5kKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3Q6OmFwcGVuZChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IG5vZGUpCiB7Ci0gICAgZW5zdXJl
Tm9haHNBcmtDb25kaXRpb24oZWxlbWVudCk7Ci0gICAgbV9lbnRyaWVzLmFwcGVuZChlbGVtZW50
KTsKKyAgICBlbnN1cmVOb2Foc0Fya0NvbmRpdGlvbihub2RlLT5lbGVtZW50KCkpOworICAgIG1f
ZW50cmllcy5hcHBlbmQobm9kZSk7CiB9CiAKIHZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dDo6cmVtb3ZlKEVsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgKaW5kZXggNzlmZTJmZjM3NTc1
NTBlNGQzYWU4ZTUyOGUxM2Q5MDU1ZGQxNzk4NC4uMmY3ZGI5ZjkxZDUwYTgxM2RhNGY4YTYwZGE1
ZTQ2OWE3YjhmNTZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBI
VE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0X2gKICNkZWZpbmUgSFRNTEZvcm1hdHRpbmdFbGVtZW50
TGlzdF9oCiAKKyNpbmNsdWRlICJIVE1MU3RhY2tOb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtNDcsMzUgKzQ4LDM1IEBAIHB1YmxpYzoKICAgICBjbGFzcyBFbnRyeSB7CiAgICAgcHVibGlj
OgogICAgICAgICAvLyBJbmxpbmUgYmVjYXVzZSB0aGV5J3JlIGhvdCBhbmQgVmVjdG9yPFQ+IHVz
ZXMgdGhlbS4KLSAgICAgICAgZXhwbGljaXQgRW50cnkoRWxlbWVudCogZWxlbWVudCkKLSAgICAg
ICAgICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisgICAgICAgIGV4cGxpY2l0IEVudHJ5KFBhc3NS
ZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkKKyAgICAgICAgICAgIDogbV9ub2RlKG5vZGUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChlbGVtZW50KTsKICAgICAgICAgfQogICAgICAg
ICBlbnVtIE1hcmtlckVudHJ5VHlwZSB7IE1hcmtlckVudHJ5IH07CiAgICAgICAgIEVudHJ5KE1h
cmtlckVudHJ5VHlwZSkKLSAgICAgICAgICAgIDogbV9lbGVtZW50KDApCisgICAgICAgICAgICA6
IG1fbm9kZSgwKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgfkVudHJ5KCkge30KIAot
ICAgICAgICBib29sIGlzTWFya2VyKCkgY29uc3QgeyByZXR1cm4gIW1fZWxlbWVudDsgfQorICAg
ICAgICBib29sIGlzTWFya2VyKCkgY29uc3QgeyByZXR1cm4gIW1fbm9kZTsgfQogCisgICAgICAg
IFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gc3RhY2tOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9u
b2RlOyB9CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdAogICAgICAgICB7Ci0gICAg
ICAgICAgICAvLyBUaGUgZmFjdCB0aGF0ICFtX2VsZW1lbnQgPT0gaXNNYXJrZXIoKSBpcyBhbiBp
bXBsZW1lbnRhdGlvbiBkZXRhaWwKKyAgICAgICAgICAgIC8vIFRoZSBmYWN0IHRoYXQgIW1fbm9k
ZSA9PSBpc01hcmtlcigpIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbAogICAgICAgICAgICAg
Ly8gY2FsbGVycyBzaG91bGQgY2hlY2sgaXNNYXJrZXIoKSBiZWZvcmUgY2FsbGluZyBlbGVtZW50
KCkuCi0gICAgICAgICAgICBBU1NFUlQobV9lbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBt
X2VsZW1lbnQuZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQobV9ub2RlKTsKKyAgICAgICAgICAg
IHJldHVybiBtX25vZGUtPmVsZW1lbnQoKTsKICAgICAgICAgfQotICAgICAgICB2b2lkIHJlcGxh
Y2VFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkgeyBtX2VsZW1lbnQgPSBlbGVt
ZW50OyB9CisgICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tO
b2RlPiBub2RlKSB7IG1fbm9kZSA9IG5vZGU7IH0KIAogICAgICAgICAvLyBOZWVkZWQgZm9yIHVz
ZSB3aXRoIFZlY3Rvci4gIFRoZXNlIGFyZSBzdXBlci1ob3QgYW5kIG11c3QgYmUgaW5saW5lLgot
ICAgICAgICBib29sIG9wZXJhdG9yPT0oRWxlbWVudCogZWxlbWVudCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50ID09IGVsZW1lbnQ7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudCAhPSBlbGVtZW50OyB9CisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShFbGVtZW50KiBlbGVtZW50KSBjb25zdCB7IHJldHVybiAhbV9ub2Rl
ID8gIWVsZW1lbnQgOiBtX25vZGUtPmVsZW1lbnQoKSA9PSBlbGVtZW50OyB9CisgICAgICAgIGJv
b2wgb3BlcmF0b3IhPShFbGVtZW50KiBlbGVtZW50KSBjb25zdCB7IHJldHVybiAhbV9ub2RlID8g
ISFlbGVtZW50IDogbV9ub2RlLT5lbGVtZW50KCkgIT0gZWxlbWVudDsgfQogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKKyAgICAgICAgUmVmUHRyPEhU
TUxTdGFja05vZGU+IG1fbm9kZTsKICAgICB9OwogCiAgICAgY2xhc3MgQm9va21hcmsgewpAQCAt
MTA3LDExICsxMDgsMTEgQEAgcHVibGljOgogCiAgICAgRW50cnkqIGZpbmQoRWxlbWVudCopOwog
ICAgIGJvb2wgY29udGFpbnMoRWxlbWVudCopOwotICAgIHZvaWQgYXBwZW5kKEVsZW1lbnQqKTsK
KyAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsKICAgICB2b2lkIHJl
bW92ZShFbGVtZW50Kik7CiAKICAgICBCb29rbWFyayBib29rbWFya0ZvcihFbGVtZW50Kik7Ci0g
ICAgdm9pZCBzd2FwVG8oRWxlbWVudCogb2xkRWxlbWVudCwgRWxlbWVudCogbmV3RWxlbWVudCwg
Y29uc3QgQm9va21hcmsmKTsKKyAgICB2b2lkIHN3YXBUbyhFbGVtZW50KiBvbGRFbGVtZW50LCBQ
YXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IHBycE5ld05vZGUsIGNvbnN0IEJvb2ttYXJrJik7CiAK
ICAgICB2b2lkIGFwcGVuZE1hcmtlcigpOwogICAgIC8vIGNsZWFyVG9MYXN0TWFya2VyIGFsc28g
Y2xlYXJzIHRoZSBtYXJrZXIgKHBlciB0aGUgSFRNTDUgc3BlYykuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3RhY2tOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MU3RhY2tOb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzZlODJhNGFjZjc0NGJkODJl
Y2M5Nzg3ZjI3YzgyNDA4ZTdiZjA2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxTdGFja05vZGUuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSFRN
TFN0YWNrTm9kZV9oCisjZGVmaW5lIEhUTUxTdGFja05vZGVfaAorCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgorCisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ29udGFpbmVyTm9kZTsKKworY2xhc3MgSFRNTFN0YWNrTm9kZSA6IHB1YmxpYyBSZWZD
b3VudGVkPEhUTUxTdGFja05vZGU+IHsKK3B1YmxpYzoKKyAgICAvLyBEb2N1bWVudEZyYWdtZW50
IGNhc2UuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gY3JlYXRlKFBhc3NS
ZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSkKKyAgICB7CisgICAgICAgIFJlZlB0cjxBdG9taWNI
VE1MVG9rZW4+IGZha2VUb2tlbiA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlblR5
cGVzOjpTdGFydFRhZywgIiIpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxTdGFj
a05vZGUobm9kZSwgZmFrZVRva2VuLmdldCgpKSk7CisgICAgfQorCisgICAgLy8gVXNlZCBieSBI
VE1MRWxlbWVudFN0YWNrLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IGNy
ZWF0ZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IG5vZGUsIEF0b21pY0hUTUxUb2tlbiogdG9r
ZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5h
bWVzcGFjZVVSSSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFN0YWNr
Tm9kZShub2RlLCB0b2tlbiwgbmFtZXNwYWNlVVJJKSk7CisgICAgfQorCisgICAgLy8gVXNlZCBi
eSBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxT
dGFja05vZGU+IGNyZWF0ZShFbGVtZW50KiBlbGVtZW50LCBBdG9taWNIVE1MVG9rZW4qIHRva2Vu
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1l
c3BhY2VVUkkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxTdGFja05v
ZGUoZWxlbWVudCwgdG9rZW4sIG5hbWVzcGFjZVVSSSkpOworICAgIH0KKworICAgIEVsZW1lbnQq
IGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQobV9ub2RlLmdldCgpKTsgfQorICAg
IENvbnRhaW5lck5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KKwor
ICAgIEF0b21pY0hUTUxUb2tlbiogdG9rZW4oKSB7IHJldHVybiBtX3Rva2VuLmdldCgpOyB9Cisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkoKSBjb25zdCB7IHJldHVybiBtX25h
bWVzcGFjZVVSSTsgfQorCitwcml2YXRlOgorICAgIEhUTUxTdGFja05vZGUoUGFzc1JlZlB0cjxD
b250YWluZXJOb2RlPiBub2RlLCBBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpCisgICAg
ICAgIDogbV9ub2RlKG5vZGUpCisgICAgICAgICwgbV90b2tlbih0b2tlbikKKyAgICAgICAgLCBt
X25hbWVzcGFjZVVSSShuYW1lc3BhY2VVUkkpCisgICAgeworICAgIH0KKworICAgIEhUTUxTdGFj
a05vZGUoRWxlbWVudCogZWxlbWVudCwgQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKQor
ICAgICAgICA6IG1fbm9kZShlbGVtZW50KQorICAgICAgICAsIG1fdG9rZW4odG9rZW4pCisgICAg
ICAgICwgbV9uYW1lc3BhY2VVUkkobmFtZXNwYWNlVVJJKQorICAgIHsKKyAgICB9CisKKyAgICBS
ZWZQdHI8Q29udGFpbmVyTm9kZT4gbV9ub2RlOworCisgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tl
bj4gbV90b2tlbjsKKyAgICBBdG9taWNTdHJpbmcgbV9uYW1lc3BhY2VVUkk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIVE1MU3RhY2tOb2RlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbi5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuLmgKaW5kZXggM2E4N2UyMjRkMDYxNzNkOTU1ZmFkOTNl
MTc5NzI0MTg0MzNmMDNmMi4uNTY4OTFhYWJmNDI5M2QyOTI5Y2RmYjI4NzNlZmVlY2IxZmEyZjdh
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuLmgKQEAgLTI3LDYgKzI3LDgg
QEAKICNkZWZpbmUgSFRNTFRva2VuX2gKIAogI2luY2x1ZGUgIk1hcmt1cFRva2VuQmFzZS5oIgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgxLDE0ICs4MywxNyBAQCBwdWJsaWM6CiAgICAgfQog
fTsKIAotY2xhc3MgQXRvbWljSFRNTFRva2VuIDogcHVibGljIEF0b21pY01hcmt1cFRva2VuQmFz
ZTxIVE1MVG9rZW4+IHsKK2NsYXNzIEF0b21pY0hUTUxUb2tlbiA6IHB1YmxpYyBBdG9taWNNYXJr
dXBUb2tlbkJhc2U8SFRNTFRva2VuPiwgcHVibGljIFJlZkNvdW50ZWQ8QXRvbWljSFRNTFRva2Vu
PiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXRvbWljSFRNTFRva2VuKTsKIHB1YmxpYzoK
LSAgICBBdG9taWNIVE1MVG9rZW4oSFRNTFRva2VuJiB0b2tlbikgOiBBdG9taWNNYXJrdXBUb2tl
bkJhc2U8SFRNTFRva2VuPigmdG9rZW4pIHsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF0b21p
Y0hUTUxUb2tlbj4gY3JlYXRlKEhUTUxUb2tlbiYgdG9rZW4pCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEF0b21pY0hUTUxUb2tlbih0b2tlbikpOworICAgIH0KIAotICAgIEF0
b21pY0hUTUxUb2tlbihIVE1MVG9rZW5UeXBlczo6VHlwZSB0eXBlLCBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzID0gVmVjdG9yPEF0
dHJpYnV0ZT4oKSkKLSAgICAgICAgOiBBdG9taWNNYXJrdXBUb2tlbkJhc2U8SFRNTFRva2VuPih0
eXBlLCBuYW1lLCBhdHRyaWJ1dGVzKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF0b21pY0hUTUxU
b2tlbj4gY3JlYXRlKEhUTUxUb2tlblR5cGVzOjpUeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMgPSBWZWN0b3I8QXR0
cmlidXRlPigpKQogICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdG9taWNIVE1M
VG9rZW4odHlwZSwgbmFtZSwgYXR0cmlidXRlcykpOwogICAgIH0KIAogICAgIGJvb2wgZm9yY2VR
dWlya3MoKSBjb25zdApAQCAtOTYsNiArMTAxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6RE9DVFlQRSk7CiAgICAgICAgIHJldHVybiBtX2Rv
Y3R5cGVEYXRhLT5tX2ZvcmNlUXVpcmtzOwogICAgIH0KKworcHJpdmF0ZToKKyAgICBBdG9taWNI
VE1MVG9rZW4oSFRNTFRva2VuJiB0b2tlbikgOiBBdG9taWNNYXJrdXBUb2tlbkJhc2U8SFRNTFRv
a2VuPigmdG9rZW4pIHsgfQorCisgICAgQXRvbWljSFRNTFRva2VuKEhUTUxUb2tlblR5cGVzOjpU
eXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPEF0dHJpYnV0
ZT4mIGF0dHJpYnV0ZXMgPSBWZWN0b3I8QXR0cmlidXRlPigpKQorICAgICAgICA6IEF0b21pY01h
cmt1cFRva2VuQmFzZTxIVE1MVG9rZW4+KHR5cGUsIG5hbWUsIGF0dHJpYnV0ZXMpCisgICAgewor
ICAgIH0KKwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHAKaW5kZXggODAzYjBlN2QzMmYyNTY1YmRjOGQ5OWQwNmM1NDdjZWFhMWEzYTUy
MC4uOTQ5N2E4Yzk0YmM3NTZlMTFjNThlNzVkNDA2ZGE4MjI5N2FhNjRjYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC00MCw2ICs0MCw3
IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5o
IgogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFN0YWNrTm9k
ZS5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIK
ICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCkBAIC0yNDUsOSArMjQ2LDkgQEAgSFRNTEZv
cm1FbGVtZW50KiBjbG9zZXN0Rm9ybUFuY2VzdG9yKEVsZW1lbnQqIGVsZW1lbnQpCiBjbGFzcyBI
VE1MVHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIpOwogcHVibGljOgot
ICAgIGV4cGxpY2l0IEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKLSAgICAgICAgOiBtX2N1cnJlbnQodG9rZW4uY2hhcmFjdGVycygpLmRhdGEoKSkK
LSAgICAgICAgLCBtX2VuZChtX2N1cnJlbnQgKyB0b2tlbi5jaGFyYWN0ZXJzKCkuc2l6ZSgpKQor
ICAgIGV4cGxpY2l0IEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKKyAgICAgICAgOiBtX2N1cnJlbnQodG9rZW4tPmNoYXJhY3RlcnMoKS5kYXRhKCkp
CisgICAgICAgICwgbV9lbmQobV9jdXJyZW50ICsgdG9rZW4tPmNoYXJhY3RlcnMoKS5zaXplKCkp
CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgfQpAQCAtMzgyLDcgKzM4
Myw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNl
ciogcGFyc2VyLCBEb2N1bWVudEZyYWdtZW50KiBmCiAgICAgICAgIC8vIGh0dHA6Ly93d3cud2hh
dHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1lbmQuaHRt
bCNmcmFnbWVudC1jYXNlCiAgICAgICAgIC8vIEZvciBlZmZpY2llbmN5LCB3ZSBza2lwIHN0ZXAg
NC4yICgiTGV0IHJvb3QgYmUgYSBuZXcgaHRtbCBlbGVtZW50IHdpdGggbm8gYXR0cmlidXRlcyIp
CiAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHVzZSB0aGUgRG9jdW1lbnRGcmFnbWVudCBhcyBhIHJv
b3Qgbm9kZS4KLSAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wdXNoUm9vdE5vZGUoZnJh
Z21lbnQpOworICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnB1c2hSb290Tm9kZShIVE1M
U3RhY2tOb2RlOjpjcmVhdGUoZnJhZ21lbnQpKTsKICAgICAgICAgcmVzZXRJbnNlcnRpb25Nb2Rl
QXBwcm9wcmlhdGVseSgpOwogICAgICAgICBtX3RyZWUuc2V0Rm9ybShjbG9zZXN0Rm9ybUFuY2Vz
dG9yKGNvbnRleHRFbGVtZW50KSk7CiAgICAgfQpAQCAtNDM1LDcgKzQzNiw3IEBAIFBhc3NSZWZQ
dHI8RWxlbWVudD4gSFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKFRleHRQb3Np
dGlvbiYgc2NyaXB0U3RhCiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjb25zdHJ1Y3RUcmVlRnJv
bVRva2VuKEhUTUxUb2tlbiYgcmF3VG9rZW4pCiB7Ci0gICAgQXRvbWljSFRNTFRva2VuIHRva2Vu
KHJhd1Rva2VuKTsKKyAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiB0b2tlbiA9IEF0b21pY0hU
TUxUb2tlbjo6Y3JlYXRlKHJhd1Rva2VuKTsKIAogICAgIC8vIFdlIGNsZWFyIHRoZSByYXdUb2tl
biBpbiBjYXNlIGNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4KICAgICAvLyBzeW5jaHJvbm91
c2x5IHJlLWVudGVycyB0aGUgcGFyc2VyLiBXZSBkb24ndCBjbGVhciB0aGUgdG9rZW4gaW1tZWRh
dGVseQpAQCAtNDUwLDcgKzQ1MSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjb25zdHJ1Y3RU
cmVlRnJvbVRva2VuKEhUTUxUb2tlbiYgcmF3VG9rZW4pCiAgICAgaWYgKHJhd1Rva2VuLnR5cGUo
KSAhPSBIVE1MVG9rZW5UeXBlczo6Q2hhcmFjdGVyKQogICAgICAgICByYXdUb2tlbi5jbGVhcigp
OwogCi0gICAgY29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tlbih0b2tlbik7CisgICAgY29uc3Ry
dWN0VHJlZUZyb21BdG9taWNUb2tlbih0b2tlbi5nZXQoKSk7CiAKICAgICBpZiAoIXJhd1Rva2Vu
LmlzVW5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIEFTU0VSVChyYXdUb2tlbi50eXBlKCkgPT0g
SFRNTFRva2VuVHlwZXM6OkNoYXJhY3Rlcik7CkBAIC00NTgsNyArNDU5LDcgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWVGcm9tVG9rZW4oSFRNTFRva2VuJiByYXdUb2tlbikK
ICAgICB9CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjb25zdHJ1Y3RUcmVlRnJvbUF0b21p
Y1Rva2VuKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y29u
c3RydWN0VHJlZUZyb21BdG9taWNUb2tlbihBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAg
IGlmIChzaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSkKICAgICAgICAg
cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbik7CkBAIC00NzcsOSArNDc4LDkgQEAg
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4oQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICAvLyBXZSBtaWdodCBiZSBkZXRhY2hlZCBub3cuCiB9CiAK
LXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW4oQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW4oQXRvbWljSFRNTFRva2VuKiB0
b2tlbikKIHsKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIHN3aXRjaCAodG9rZW4t
PnR5cGUoKSkgewogICAgIGNhc2UgSFRNTFRva2VuVHlwZXM6OlVuaW5pdGlhbGl6ZWQ6CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKQEAgLTUwOSw5ICs1MTAs
OSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgfQogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RvY3R5cGVU
b2tlbihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NEb2N0eXBlVG9rZW4oQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9r
ZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpET0NUWVBFKTsKKyAgICBBU1NFUlQodG9rZW4t
PnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RE9DVFlQRSk7CiAgICAgaWYgKG1faW5zZXJ0aW9u
TW9kZSA9PSBJbml0aWFsTW9kZSkgewogICAgICAgICBtX3RyZWUuaW5zZXJ0RG9jdHlwZSh0b2tl
bik7CiAgICAgICAgIHNldEluc2VydGlvbk1vZGUoQmVmb3JlSFRNTE1vZGUpOwpAQCAtNTI4LDE1
ICs1MjksMTUgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NEb2N0eXBlVG9rZW4oQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVN0
YXJ0VGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIGNvbnN0IFZlY3RvcjxBdHRyaWJ1
dGU+JiBhdHRyaWJ1dGVzKQogewogICAgIC8vIEZJWE1FOiBXZSdsbCBuZWVkIGEgZmFuY2llciBj
b252ZXJzaW9uIHRoYW4ganVzdCAibG9jYWxOYW1lIiBmb3IgU1ZHL01hdGhNTCB0YWdzLgotICAg
IEF0b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCB0YWdO
YW1lLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVzKTsKLSAgICBwcm9jZXNzU3RhcnRUYWcoZmFrZVRv
a2VuKTsKKyAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBmYWtlVG9rZW4gPSBBdG9taWNIVE1M
VG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIHRhZ05hbWUubG9jYWxOYW1l
KCksIGF0dHJpYnV0ZXMpOworICAgIHByb2Nlc3NTdGFydFRhZyhmYWtlVG9rZW4uZ2V0KCkpOwog
fQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VFbmRUYWcoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSkKIHsKICAgICAvLyBGSVhNRTogV2UnbGwgbmVlZCBhIGZhbmNpZXIg
Y29udmVyc2lvbiB0aGFuIGp1c3QgImxvY2FsTmFtZSIgZm9yIFNWRy9NYXRoTUwgdGFncy4KLSAg
ICBBdG9taWNIVE1MVG9rZW4gZmFrZVRva2VuKEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIHRhZ05h
bWUubG9jYWxOYW1lKCkpOwotICAgIHByb2Nlc3NFbmRUYWcoZmFrZVRva2VuKTsKKyAgICBSZWZQ
dHI8QXRvbWljSFRNTFRva2VuPiBmYWtlVG9rZW4gPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShI
VE1MVG9rZW5UeXBlczo6RW5kVGFnLCB0YWdOYW1lLmxvY2FsTmFtZSgpKTsKKyAgICBwcm9jZXNz
RW5kVGFnKGZha2VUb2tlbi5nZXQoKSk7CiB9CiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzRmFrZUNoYXJhY3RlcnMoY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzKQpAQCAtNTUwLDEzICs1
NTEsMTMgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0
dG9uU2NvcGUoKQogewogICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRvblNj
b3BlKHBUYWcubG9jYWxOYW1lKCkpKQogICAgICAgICByZXR1cm47Ci0gICAgQXRvbWljSFRNTFRv
a2VuIGVuZFAoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgcFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAg
cHJvY2Vzc0VuZFRhZyhlbmRQKTsKKyAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBlbmRQID0g
QXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgcFRhZy5sb2Nh
bE5hbWUoKSk7CisgICAgcHJvY2Vzc0VuZFRhZyhlbmRQLmdldCgpKTsKIH0KIAotVmVjdG9yPEF0
dHJpYnV0ZT4gSFRNTFRyZWVCdWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCitWZWN0b3I8QXR0cmlidXRlPiBIVE1MVHJlZUJ1aWxkZXI6OmF0
dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBW
ZWN0b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gdG9rZW4uYXR0cmlidXRlcygpOworICAgIFZl
Y3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXMgPSB0b2tlbi0+YXR0cmlidXRlcygpOwogICAgIGZv
ciAoaW50IGkgPSBhdHRyaWJ1dGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUgPSBhdHRyaWJ1dGVzLmF0KGkpLm5hbWUoKTsKICAg
ICAgICAgaWYgKG5hbWUubWF0Y2hlcyhuYW1lQXR0cikgfHwgbmFtZS5tYXRjaGVzKGFjdGlvbkF0
dHIpIHx8IG5hbWUubWF0Y2hlcyhwcm9tcHRBdHRyKSkKQEAgLTU2NywyMSArNTY4LDIxIEBAIFZl
Y3RvcjxBdHRyaWJ1dGU+IEhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1
dChBdG9taWNIVE1MVG9rZW4mIHRvCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CiB9CiAKLXZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSXNpbmRleFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0lzaW5kZXhTdGFy
dFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tl
bi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKLSAgICBBU1NFUlQodG9rZW4u
bmFtZSgpID09IGlzaW5kZXhUYWcpOworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxU
b2tlblR5cGVzOjpTdGFydFRhZyk7CisgICAgQVNTRVJUKHRva2VuLT5uYW1lKCkgPT0gaXNpbmRl
eFRhZyk7CiAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgaWYgKG1fdHJlZS5mb3JtKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBBY2tub3dsZWRnZSBzZWxm
LWNsb3NpbmcgZmxhZwogICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcoZm9ybVRhZyk7Ci0gICAgQXR0
cmlidXRlKiBhY3Rpb25BdHRyaWJ1dGUgPSB0b2tlbi5nZXRBdHRyaWJ1dGVJdGVtKGFjdGlvbkF0
dHIpOworICAgIEF0dHJpYnV0ZSogYWN0aW9uQXR0cmlidXRlID0gdG9rZW4tPmdldEF0dHJpYnV0
ZUl0ZW0oYWN0aW9uQXR0cik7CiAgICAgaWYgKGFjdGlvbkF0dHJpYnV0ZSkKICAgICAgICAgbV90
cmVlLmZvcm0oKS0+c2V0QXR0cmlidXRlKGFjdGlvbkF0dHIsIGFjdGlvbkF0dHJpYnV0ZS0+dmFs
dWUoKSk7CiAgICAgcHJvY2Vzc0Zha2VTdGFydFRhZyhoclRhZyk7CiAgICAgcHJvY2Vzc0Zha2VT
dGFydFRhZyhsYWJlbFRhZyk7Ci0gICAgQXR0cmlidXRlKiBwcm9tcHRBdHRyaWJ1dGUgPSB0b2tl
bi5nZXRBdHRyaWJ1dGVJdGVtKHByb21wdEF0dHIpOworICAgIEF0dHJpYnV0ZSogcHJvbXB0QXR0
cmlidXRlID0gdG9rZW4tPmdldEF0dHJpYnV0ZUl0ZW0ocHJvbXB0QXR0cik7CiAgICAgaWYgKHBy
b21wdEF0dHJpYnV0ZSkKICAgICAgICAgcHJvY2Vzc0Zha2VDaGFyYWN0ZXJzKHByb21wdEF0dHJp
YnV0ZS0+dmFsdWUoKSk7CiAgICAgZWxzZQpAQCAtNjA5LDcgKzYxMCw3IEBAIGJvb2wgaXNEZE9y
RHQoY29uc3QgQ29udGFpbmVyTm9kZSogZWxlbWVudCkKIH0KIAogdGVtcGxhdGUgPGJvb2wgc2hv
dWxkQ2xvc2UoY29uc3QgQ29udGFpbmVyTm9kZSopPgotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFnKEF0b21pY0hUTUxUb2tlbiog
dG9rZW4pCiB7CiAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgSFRNTEVsZW1lbnRTdGFj
azo6RWxlbWVudFJlY29yZCogbm9kZVJlY29yZCA9IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+dG9w
UmVjb3JkKCk7CkBAIC02NDMsNyArNjQ0LDcgQEAgdm9pZCBtYXBMb3dlcmVkTG9jYWxOYW1lVG9O
YW1lKFByZWZpeGVkTmFtZVRvUXVhbGlmaWVkTmFtZU1hcCogbWFwLCBRdWFsaWZpZWROYW0KICAg
ICB9CiB9CiAKLXZvaWQgYWRqdXN0U1ZHVGFnTmFtZUNhc2UoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKK3ZvaWQgYWRqdXN0U1ZHVGFnTmFtZUNhc2UoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsK
ICAgICBzdGF0aWMgUHJlZml4ZWROYW1lVG9RdWFsaWZpZWROYW1lTWFwKiBjYXNlTWFwID0gMDsK
ICAgICBpZiAoIWNhc2VNYXApIHsKQEAgLTY1MywxNCArNjU0LDE0IEBAIHZvaWQgYWRqdXN0U1ZH
VGFnTmFtZUNhc2UoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgbWFwTG93ZXJlZExv
Y2FsTmFtZVRvTmFtZShjYXNlTWFwLCBzdmdUYWdzLCBsZW5ndGgpOwogICAgIH0KIAotICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGNhc2VkTmFtZSA9IGNhc2VNYXAtPmdldCh0b2tlbi5uYW1lKCkp
OworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNhc2VkTmFtZSA9IGNhc2VNYXAtPmdldCh0b2tl
bi0+bmFtZSgpKTsKICAgICBpZiAoY2FzZWROYW1lLmxvY2FsTmFtZSgpLmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgdG9rZW4uc2V0TmFtZShjYXNlZE5hbWUubG9jYWxOYW1lKCkpOwor
ICAgIHRva2VuLT5zZXROYW1lKGNhc2VkTmFtZS5sb2NhbE5hbWUoKSk7CiB9CiAKIHRlbXBsYXRl
PFF1YWxpZmllZE5hbWUqKiBnZXRBdHRycyhzaXplX3QqIGxlbmd0aCk+Ci12b2lkIGFkanVzdEF0
dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgYWRqdXN0QXR0cmlidXRlcyhB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIHN0YXRpYyBQcmVmaXhlZE5hbWVUb1F1YWxp
ZmllZE5hbWVNYXAqIGNhc2VNYXAgPSAwOwogICAgIGlmICghY2FzZU1hcCkgewpAQCAtNjcwLDIw
ICs2NzEsMjAgQEAgdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgIG1hcExvd2VyZWRMb2NhbE5hbWVUb05hbWUoY2FzZU1hcCwgYXR0cnMsIGxlbmd0
aCk7CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRva2VuLmF0dHJpYnV0
ZXMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBBdHRyaWJ1dGUmIHRva2VuQXR0cmlidXRlID0g
dG9rZW4uYXR0cmlidXRlcygpLmF0KGkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
b2tlbi0+YXR0cmlidXRlcygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIEF0dHJpYnV0ZSYgdG9r
ZW5BdHRyaWJ1dGUgPSB0b2tlbi0+YXR0cmlidXRlcygpLmF0KGkpOwogICAgICAgICBjb25zdCBR
dWFsaWZpZWROYW1lJiBjYXNlZE5hbWUgPSBjYXNlTWFwLT5nZXQodG9rZW5BdHRyaWJ1dGUubG9j
YWxOYW1lKCkpOwogICAgICAgICBpZiAoIWNhc2VkTmFtZS5sb2NhbE5hbWUoKS5pc051bGwoKSkK
ICAgICAgICAgICAgIHRva2VuQXR0cmlidXRlLnBhcnNlclNldE5hbWUoY2FzZWROYW1lKTsKICAg
ICB9CiB9CiAKLXZvaWQgYWRqdXN0U1ZHQXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQordm9pZCBhZGp1c3RTVkdBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAg
ICAgYWRqdXN0QXR0cmlidXRlczxTVkdOYW1lczo6Z2V0U1ZHQXR0cnM+KHRva2VuKTsKIH0KIAot
dm9pZCBhZGp1c3RNYXRoTUxBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lk
IGFkanVzdE1hdGhNTEF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKICAgICBh
ZGp1c3RBdHRyaWJ1dGVzPE1hdGhNTE5hbWVzOjpnZXRNYXRoTUxBdHRycz4odG9rZW4pOwogfQpA
QCAtNjk5LDcgKzcwMCw3IEBAIHZvaWQgYWRkTmFtZXNXaXRoUHJlZml4KFByZWZpeGVkTmFtZVRv
UXVhbGlmaWVkTmFtZU1hcCogbWFwLCBjb25zdCBBdG9taWNTdHJpbmcmCiAgICAgfQogfQogCi12
b2lkIGFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lk
IGFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAg
c3RhdGljIFByZWZpeGVkTmFtZVRvUXVhbGlmaWVkTmFtZU1hcCogbWFwID0gMDsKICAgICBpZiAo
IW1hcCkgewpAQCAtNzE1LDggKzcxNiw4IEBAIHZvaWQgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMo
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgbWFwLT5hZGQoInhtbG5zOnhsaW5rIiwg
UXVhbGlmaWVkTmFtZSgieG1sbnMiLCAieGxpbmsiLCBYTUxOU05hbWVzOjp4bWxuc05hbWVzcGFj
ZVVSSSkpOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b2tlbi5hdHRy
aWJ1dGVzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQXR0cmlidXRlJiB0b2tlbkF0dHJpYnV0
ZSA9IHRva2VuLmF0dHJpYnV0ZXMoKS5hdChpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdG9rZW4tPmF0dHJpYnV0ZXMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBBdHRyaWJ1dGUm
IHRva2VuQXR0cmlidXRlID0gdG9rZW4tPmF0dHJpYnV0ZXMoKS5hdChpKTsKICAgICAgICAgY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9IG1hcC0+Z2V0KHRva2VuQXR0cmlidXRlLmxvY2FsTmFt
ZSgpKTsKICAgICAgICAgaWYgKCFuYW1lLmxvY2FsTmFtZSgpLmlzTnVsbCgpKQogICAgICAgICAg
ICAgdG9rZW5BdHRyaWJ1dGUucGFyc2VyU2V0TmFtZShuYW1lKTsKQEAgLTcyNSwyOCArNzI2LDI4
IEBAIHZvaWQgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
IAogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2Vu
LnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwotICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gaHRtbFRhZykgeworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5
cGVzOjpTdGFydFRhZyk7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZykgewogICAg
ICAgICBtX3RyZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keSh0b2tlbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiYXNlVGFnCi0gICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBiYXNlZm9udFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gYmdzb3VuZFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY29tbWFuZFRhZwotICAg
ICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbGlua1RhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gbWV0YVRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcKLSAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gc3R5bGVUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRpdGxlVGFnKSB7CisgICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gYmFzZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IGJhc2Vmb250VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYmdzb3VuZFRhZworICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGNvbW1hbmRUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5h
bWUoKSA9PSBsaW5rVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbWV0YVRhZworICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG5vZnJhbWVzVGFnCisgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gc2NyaXB0VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3R5bGVUYWcK
KyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0aXRsZVRhZykgewogICAgICAgICBib29sIGRp
ZFByb2Nlc3MgPSBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOwogICAgICAgICBBU1NF
UlRfVU5VU0VEKGRpZFByb2Nlc3MsIGRpZFByb2Nlc3MpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZykgeworICAgIGlmICh0b2tlbi0+bmFt
ZSgpID09IGJvZHlUYWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIGlm
ICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5zZWNvbmRFbGVtZW50SXNIVE1MQm9keUVsZW1lbnQo
KSB8fCBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmhhc09ubHlPbmVFbGVtZW50KCkpIHsKICAgICAg
ICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKQEAgLTc1Niw3ICs3NTcsNyBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5
KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09
IGZyYW1lc2V0VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsK
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5zZWNvbmRFbGVtZW50SXNIVE1MQm9keUVsZW1lbnQoKSB8fCBtX3RyZWUub3BlbkVs
ZW1lbnRzKCktPmhhc09ubHlPbmVFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc1Bh
cnNpbmdGcmFnbWVudCgpKTsKQEAgLTc3NCwzMyArNzc1LDMzIEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAg
ICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbkZyYW1lc2V0TW9kZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhZGRyZXNzVGFnCi0gICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBhcnRpY2xlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBhc2lk
ZVRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmxvY2txdW90ZVRhZwotICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gY2VudGVyVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBk
ZXRhaWxzVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBkaXJUYWcKLSAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IGRpdlRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGxUYWcK
LSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGZpZWxkc2V0VGFnCi0gICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBmaWdjYXB0aW9uVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmaWd1
cmVUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGZvb3RlclRhZwotICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0gaGVhZGVyVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBoZ3Jv
dXBUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1lbnVUYWcKLSAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IG5hdlRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gb2xUYWcKLSAg
ICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHBUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IHNlY3Rpb25UYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHN1bW1hcnlUYWcKLSAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IHVsVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
YWRkcmVzc1RhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGFydGljbGVUYWcKKyAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBhc2lkZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IGJsb2NrcXVvdGVUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBjZW50ZXJUYWcK
KyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkZXRhaWxzVGFnCisgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gZGlyVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGl2VGFnCisg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGxUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUo
KSA9PSBmaWVsZHNldFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGZpZ2NhcHRpb25U
YWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBmaWd1cmVUYWcKKyAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSBmb290ZXJUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBoZWFk
ZXJUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBoZ3JvdXBUYWcKKyAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBtZW51VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbmF2
VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gb2xUYWcKKyAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBwVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc2VjdGlvblRhZwor
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHN1bW1hcnlUYWcKKyAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSB1bFRhZykgewogICAgICAgICBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRv
blNjb3BlKCk7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGlzTnVtYmVyZWRIZWFkZXJUYWcodG9rZW4ubmFt
ZSgpKSkgeworICAgIGlmIChpc051bWJlcmVkSGVhZGVyVGFnKHRva2VuLT5uYW1lKCkpKSB7CiAg
ICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKICAgICAgICAgaWYg
KGlzTnVtYmVyZWRIZWFkZXJUYWcobV90cmVlLmN1cnJlbnROb2RlKCktPmxvY2FsTmFtZSgpKSkg
ewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CkBAIC04MDksMTQgKzgxMCwxNCBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwcmVUYWcgfHwg
dG9rZW4ubmFtZSgpID09IGxpc3RpbmdUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBw
cmVUYWcgfHwgdG9rZW4tPm5hbWUoKSA9PSBsaXN0aW5nVGFnKSB7CiAgICAgICAgIHByb2Nlc3NG
YWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKICAgICAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KHRva2VuKTsKICAgICAgICAgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUgPSB0cnVl
OwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAodG9rZW4ubmFtZSgpID09IGZvcm1UYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBmb3JtVGFnKSB7CiAgICAgICAgIGlmIChtX3RyZWUuZm9ybSgpKSB7CiAgICAgICAgICAg
ICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTgyNSwyMSArODI2
LDIxIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgbV90cmVlLmluc2VydEhUTUxGb3JtRWxlbWVu
dCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBsaVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGxpVGFnKSB7CiAgICAgICAgIHBy
b2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWc8aXNMaT4odG9rZW4pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZGRUYWcgfHwgdG9rZW4ubmFtZSgpID09IGR0
VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gZGRUYWcgfHwgdG9rZW4tPm5hbWUoKSA9
PSBkdFRhZykgewogICAgICAgICBwcm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFnPGlzRGRPckR0Pih0
b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBw
bGFpbnRleHRUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBwbGFpbnRleHRUYWcpIHsK
ICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwogICAgICAgICBt
X3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX3BhcnNlci0+dG9rZW5p
emVyKCktPnNldFN0YXRlKEhUTUxUb2tlbml6ZXJTdGF0ZTo6UExBSU5URVhUU3RhdGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYnV0dG9uVGFnKSB7
CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYnV0dG9uVGFnKSB7CiAgICAgICAgIGlmIChtX3Ry
ZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUoYnV0dG9uVGFnKSkgewogICAgICAgICAgICAgcGFy
c2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhidXR0b25UYWcp
OwpAQCAtODUxLDcgKzg1Miw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRU
YWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgbV9mcmFtZXNldE9r
ID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBhVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYVRhZykgewogICAgICAgICBFbGVt
ZW50KiBhY3RpdmVBVGFnID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5jbG9z
ZXN0RWxlbWVudEluU2NvcGVXaXRoTmFtZShhVGFnLmxvY2FsTmFtZSgpKTsKICAgICAgICAgaWYg
KGFjdGl2ZUFUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwpAQCAtODY0LDEy
ICs4NjUsMTIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9k
eShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0dGlu
Z0VsZW1lbnQodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc05vbkFu
Y2hvck5vbk5vYnJGb3JtYXR0aW5nVGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICBpZiAoaXNOb25B
bmNob3JOb25Ob2JyRm9ybWF0dGluZ1RhZyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICBtX3Ry
ZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgbV90
cmVlLmluc2VydEZvcm1hdHRpbmdFbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vYnJUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5h
bWUoKSA9PSBub2JyVGFnKSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZv
cm1hdHRpbmdFbGVtZW50cygpOwogICAgICAgICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLT5p
blNjb3BlKG5vYnJUYWcpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKQEAgLTg3
OSwxNiArODgwLDE2IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJ
bkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgbV90cmVlLmluc2VydEZvcm1h
dHRpbmdFbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGFwcGxldFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbWFycXVl
ZVRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gb2JqZWN0VGFnKSB7CisgICAgaWYgKHRv
a2VuLT5uYW1lKCkgPT0gYXBwbGV0VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbWFy
cXVlZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG9iamVjdFRhZykgewogICAgICAg
ICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAg
ICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgbV90cmVlLmFjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5hcHBlbmRNYXJrZXIoKTsKICAgICAgICAgbV9mcmFtZXNl
dE9rID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUo
KSA9PSB0YWJsZVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnKSB7CiAg
ICAgICAgIGlmICghbV9kb2N1bWVudC0+aW5RdWlya3NNb2RlKCkgJiYgbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5pbkJ1dHRvblNjb3BlKHBUYWcpKQogICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRU
YWcocFRhZyk7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CkBAIC04
OTYsNDggKzg5Nyw0OCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9y
SW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHNldEluc2VydGlvbk1vZGUo
SW5UYWJsZU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gaW1hZ2VUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBpbWFnZVRhZykgewog
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgLy8gQXBwYXJlbnRseSB3ZSdyZSBu
b3Qgc3VwcG9zZWQgdG8gYXNrLgotICAgICAgICB0b2tlbi5zZXROYW1lKGltZ1RhZy5sb2NhbE5h
bWUoKSk7CisgICAgICAgIHRva2VuLT5zZXROYW1lKGltZ1RhZy5sb2NhbE5hbWUoKSk7CiAgICAg
ICAgIC8vIE5vdGUgdGhlIGZhbGwgdGhyb3VnaCB0byB0aGUgaW1nVGFnIGhhbmRsaW5nIGJlbG93
IQogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGFyZWFUYWcKLSAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IGJyVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBlbWJlZFRhZwot
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaW1nVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSBrZXlnZW5UYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHdiclRhZykgeworICAg
IGlmICh0b2tlbi0+bmFtZSgpID09IGFyZWFUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBiclRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGVtYmVkVGFnCisgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gaW1nVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0ga2V5
Z2VuVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gd2JyVGFnKSB7CiAgICAgICAgIG1f
dHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwogICAgICAgICBt
X3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1fZnJh
bWVzZXRPayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gaW5wdXRUYWcpIHsKLSAgICAgICAgQXR0cmlidXRlKiB0eXBlQXR0cmlidXRlID0g
dG9rZW4uZ2V0QXR0cmlidXRlSXRlbSh0eXBlQXR0cik7CisgICAgaWYgKHRva2VuLT5uYW1lKCkg
PT0gaW5wdXRUYWcpIHsKKyAgICAgICAgQXR0cmlidXRlKiB0eXBlQXR0cmlidXRlID0gdG9rZW4t
PmdldEF0dHJpYnV0ZUl0ZW0odHlwZUF0dHIpOwogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RU
aGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgbV90cmVlLmluc2VydFNlbGZD
bG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBpZiAoIXR5cGVBdHRyaWJ1dGUgfHwg
IWVxdWFsSWdub3JpbmdDYXNlKHR5cGVBdHRyaWJ1dGUtPnZhbHVlKCksICJoaWRkZW4iKSkKICAg
ICAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gcGFyYW1UYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IHNvdXJjZVRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdHJhY2tUYWcpIHsKKyAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBwYXJhbVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IHNvdXJjZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyYWNrVGFnKSB7CiAg
ICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGhyVGFnKSB7CisgICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gaHJUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFn
SWZQSW5CdXR0b25TY29wZSgpOwogICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1M
RWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaXNpbmRleFRhZykgeworICAg
IGlmICh0b2tlbi0+bmFtZSgpID09IGlzaW5kZXhUYWcpIHsKICAgICAgICAgcHJvY2Vzc0lzaW5k
ZXhTdGFydFRhZ0ZvckluQm9keSh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKHRva2VuLm5hbWUoKSA9PSB0ZXh0YXJlYVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgp
ID09IHRleHRhcmVhVGFnKSB7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tl
bik7CiAgICAgICAgIG1fc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lID0gdHJ1ZTsKICAgICAgICAg
bV9wYXJzZXItPnRva2VuaXplcigpLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyU3RhdGU6OlJDREFU
QVN0YXRlKTsKQEAgLTk0NiwyNyArOTQ3LDI3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgc2V0
SW5zZXJ0aW9uTW9kZShUZXh0TW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYg
KHRva2VuLm5hbWUoKSA9PSB4bXBUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB4bXBU
YWcpIHsKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwogICAg
ICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAg
ICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4
dFN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4u
bmFtZSgpID09IGlmcmFtZVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGlmcmFtZVRh
ZykgewogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcHJvY2Vzc0dlbmVy
aWNSYXdUZXh0U3RhcnRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gbm9lbWJlZFRhZyAmJiBwbHVnaW5zRW5hYmxlZChtX2RvY3VtZW50
LT5mcmFtZSgpKSkgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG5vZW1iZWRUYWcgJiYgcGx1
Z2luc0VuYWJsZWQobV9kb2N1bWVudC0+ZnJhbWUoKSkpIHsKICAgICAgICAgcHJvY2Vzc0dlbmVy
aWNSYXdUZXh0U3RhcnRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gbm9zY3JpcHRUYWcgJiYgc2NyaXB0RW5hYmxlZChtX2RvY3VtZW50
LT5mcmFtZSgpKSkgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG5vc2NyaXB0VGFnICYmIHNj
cmlwdEVuYWJsZWQobV9kb2N1bWVudC0+ZnJhbWUoKSkpIHsKICAgICAgICAgcHJvY2Vzc0dlbmVy
aWNSYXdUZXh0U3RhcnRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
c2VsZWN0VGFnKSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cygpOwogICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwog
ICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKQEAgLTk4MSwxNiArOTgyLDE2IEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKICAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5TZWxlY3RNb2RlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IG9wdGdyb3VwVGFn
IHx8IHRva2VuLm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9
PSBvcHRncm91cFRhZyB8fCB0b2tlbi0+bmFtZSgpID09IG9wdGlvblRhZykgewogICAgICAgICBp
ZiAobV90cmVlLmN1cnJlbnROb2RlKCktPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkgewotICAgICAg
ICAgICAgQXRvbWljSFRNTFRva2VuIGVuZE9wdGlvbihIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBv
cHRpb25UYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRp
b24pOworICAgICAgICAgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZW5kT3B0aW9uID0gQXRv
bWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgb3B0aW9uVGFnLmxv
Y2FsTmFtZSgpKTsKKyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kT3B0aW9uLmdldCgpKTsK
ICAgICAgICAgfQogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5n
RWxlbWVudHMoKTsKICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IHJwVGFnIHx8IHRv
a2VuLm5hbWUoKSA9PSBydFRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHJwVGFnIHx8
IHRva2VuLT5uYW1lKCkgPT0gcnRUYWcpIHsKICAgICAgICAgaWYgKG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+aW5TY29wZShydWJ5VGFnLmxvY2FsTmFtZSgpKSkgewogICAgICAgICAgICAgbV90cmVl
LmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsKICAgICAgICAgICAgIGlmICghbV90cmVlLmN1cnJl
bnROb2RlKCktPmhhc1RhZ05hbWUocnVieVRhZykpCkBAIC05OTksMjYgKzEwMDAsMjYgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gTWF0aE1MTmFtZXM6
Om1hdGhUYWcubG9jYWxOYW1lKCkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBNYXRoTUxO
YW1lczo6bWF0aFRhZy5sb2NhbE5hbWUoKSkgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RU
aGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgYWRqdXN0TWF0aE1MQXR0cmli
dXRlcyh0b2tlbik7CiAgICAgICAgIGFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKHRva2VuKTsKICAg
ICAgICAgbV90cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KHRva2VuLCBNYXRoTUxOYW1lczo6bWF0
aG1sTmFtZXNwYWNlVVJJKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4u
bmFtZSgpID09IFNWR05hbWVzOjpzdmdUYWcubG9jYWxOYW1lKCkpIHsKKyAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBTVkdOYW1lczo6c3ZnVGFnLmxvY2FsTmFtZSgpKSB7CiAgICAgICAgIG1fdHJl
ZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwogICAgICAgICBhZGp1
c3RTVkdBdHRyaWJ1dGVzKHRva2VuKTsKICAgICAgICAgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMo
dG9rZW4pOwogICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9yZWlnbkVsZW1lbnQodG9rZW4sIFNWR05h
bWVzOjpzdmdOYW1lc3BhY2VVUkkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChp
c0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGZyYW1lVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBoZWFkVGFnCi0g
ICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAgIHx8
IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSB0clRhZykgeworICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2Vu
LT5uYW1lKCkpCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZnJhbWVUYWcKKyAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBoZWFkVGFnCisgICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4
dFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9r
ZW4tPm5hbWUoKSkKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0clRhZykgewogICAgICAg
ICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNTIsNDIg
KzEwNTMsNDIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNsb3NlVGhlQ2VsbCgpCiAgICAgQVNT
RVJUKGluc2VydGlvbk1vZGUoKSA9PSBJblJvd01vZGUpOwogfQogCi12b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQor
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRN
TFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5
cGVzOjpTdGFydFRhZyk7Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBjYXB0aW9uVGFnKSB7Cisg
ICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjYXB0aW9uVGFnKSB7CiAgICAgICAgIG1fdHJlZS5vcGVu
RWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZVNjb3BlTWFya2VyKCk7CiAgICAgICAgIG1fdHJlZS5h
Y3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+YXBwZW5kTWFya2VyKCk7CiAgICAgICAgIG1fdHJl
ZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5D
YXB0aW9uTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBjb2xncm91cFRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGNvbGdyb3VwVGFn
KSB7CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZVNjb3BlTWFy
a2VyKCk7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAg
IHNldEluc2VydGlvbk1vZGUoSW5Db2x1bW5Hcm91cE1vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY29sVGFnKSB7CisgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gY29sVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcoY29sZ3JvdXBU
YWcpOwogICAgICAgICBBU1NFUlQoSW5Db2x1bW5Hcm91cE1vZGUpOwogICAgICAgICBwcm9jZXNz
U3RhcnRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc1RhYmxl
Qm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgeworICAgIGlmIChpc1RhYmxlQm9keUNvbnRl
eHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5w
b3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsKICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVt
ZW50KHRva2VuKTsKICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJblRhYmxlQm9keU1vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9r
ZW4ubmFtZSgpKQotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdHJUYWcpIHsKKyAgICBpZiAo
aXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gdHJUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Zha2VTdGFydFRhZyh0Ym9keVRhZyk7
CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5UYWJsZUJvZHlNb2RlKTsKICAg
ICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkg
PT0gdGFibGVUYWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIGlmICgh
cHJvY2Vzc1RhYmxlRW5kVGFnRm9ySW5UYWJsZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNQ
YXJzaW5nRnJhZ21lbnQoKSk7CkBAIC0xMDk2LDEyICsxMDk3LDEyIEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzdHlsZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc2Ny
aXB0VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gc3R5bGVUYWcgfHwgdG9rZW4tPm5h
bWUoKSA9PSBzY3JpcHRUYWcpIHsKICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKHRv
a2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGlu
cHV0VGFnKSB7Ci0gICAgICAgIEF0dHJpYnV0ZSogdHlwZUF0dHJpYnV0ZSA9IHRva2VuLmdldEF0
dHJpYnV0ZUl0ZW0odHlwZUF0dHIpOworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGlucHV0VGFn
KSB7CisgICAgICAgIEF0dHJpYnV0ZSogdHlwZUF0dHJpYnV0ZSA9IHRva2VuLT5nZXRBdHRyaWJ1
dGVJdGVtKHR5cGVBdHRyKTsKICAgICAgICAgaWYgKHR5cGVBdHRyaWJ1dGUgJiYgZXF1YWxJZ25v
cmluZ0Nhc2UodHlwZUF0dHJpYnV0ZS0+dmFsdWUoKSwgImhpZGRlbiIpKSB7CiAgICAgICAgICAg
ICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2lu
Z0hUTUxFbGVtZW50KHRva2VuKTsKQEAgLTExMDksNyArMTExMCw3IEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgIH0KICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvICJhbnl0aGluZyBlbHNlIiBj
YXNlLgogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGZvcm1UYWcpIHsKKyAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBmb3JtVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwog
ICAgICAgICBpZiAobV90cmVlLmZvcm0oKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExMjIs
OSArMTEyMyw5IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJblRh
YmxlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5
KHRva2VuKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRh
ZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0g
SFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBI
VE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwogICAgIHN3aXRjaCAoaW5zZXJ0aW9uTW9kZSgpKSB7
CiAgICAgY2FzZSBJbml0aWFsTW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9
PSBJbml0aWFsTW9kZSk7CkBAIC0xMTMyLDcgKzExMzMsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIC8vIEZh
bGwgdGhyb3VnaC4KICAgICBjYXNlIEJlZm9yZUhUTUxNb2RlOgogICAgICAgICBBU1NFUlQoaW5z
ZXJ0aW9uTW9kZSgpID09IEJlZm9yZUhUTUxNb2RlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBodG1sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsK
ICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCh0b2tl
bik7CiAgICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEJlZm9yZUhlYWRNb2RlKTsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTExNDEsMTEgKzExNDIsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAvLyBG
YWxsIHRocm91Z2guCiAgICAgY2FzZSBCZWZvcmVIZWFkTW9kZToKICAgICAgICAgQVNTRVJUKGlu
c2VydGlvbk1vZGUoKSA9PSBCZWZvcmVIZWFkTW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gaHRtbFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7
CiAgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keSh0b2tlbik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBoZWFkVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGhlYWRUYWcpIHsK
ICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSGVhZEVsZW1lbnQodG9rZW4pOwogICAgICAg
ICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbkhlYWRNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTExNjAsMzggKzExNjEsMzggQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFy
dFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAvLyBGYWxsIHRocm91Z2guCiAg
ICAgY2FzZSBBZnRlckhlYWRNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09
IEFmdGVySGVhZE1vZGUpOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsK
KyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZykgewogICAgICAgICAgICAgbV90
cmVlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkodG9rZW4pOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZykgewor
ICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnKSB7CiAgICAgICAgICAgICBtX2Zy
YW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MQm9keUVsZW1l
bnQodG9rZW4pOwogICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbkJvZHlNb2RlKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09
IGZyYW1lc2V0VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGZyYW1lc2V0VGFn
KSB7CiAgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAg
ICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbkZyYW1lc2V0TW9kZSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiYXNlVGFnCi0gICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmFzZWZvbnRUYWcKLSAgICAgICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBiZ3NvdW5kVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0g
bGlua1RhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1ldGFUYWcKLSAgICAgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBub2ZyYW1lc1RhZwotICAgICAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IHNjcmlwdFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHN0eWxl
VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKKyAgICAgICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gYmFzZVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUo
KSA9PSBiYXNlZm9udFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBiZ3NvdW5k
VGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGxpbmtUYWcKKyAgICAgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gbWV0YVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUo
KSA9PSBub2ZyYW1lc1RhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzY3JpcHRU
YWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3R5bGVUYWcKKyAgICAgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwogICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5oZWFkKCkpOwotICAgICAgICAgICAg
bV90cmVlLm9wZW5FbGVtZW50cygpLT5wdXNoSFRNTEhlYWRFbGVtZW50KG1fdHJlZS5oZWFkKCkp
OworICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wdXNoSFRNTEhlYWRFbGVtZW50
KEhUTUxTdGFja05vZGU6OmNyZWF0ZShtX3RyZWUuaGVhZCgpLCB0b2tlbikpOwogICAgICAgICAg
ICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKTsKICAgICAgICAgICAgIG1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+cmVtb3ZlSFRNTEhlYWRFbGVtZW50KG1fdHJlZS5oZWFkKCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0g
aGVhZFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBoZWFkVGFnKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtMTIwNywxMCArMTIwOCwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SW5DYXB0aW9uTW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbkNhcHRp
b25Nb2RlKTsKLSAgICAgICAgaWYgKGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4ubmFt
ZSgpKQotICAgICAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkK
LSAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCi0gICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdHJUYWcpIHsKKyAgICAgICAgaWYgKGlzQ2FwdGlv
bkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgICAgIHx8IGlzVGFibGVC
b2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxD
b250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IHRyVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIGlm
ICghcHJvY2Vzc0NhcHRpb25FbmRUYWdGb3JJbkNhcHRpb24oKSkgewogICAgICAgICAgICAgICAg
IEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKQEAgLTEyMjMsMTEgKzEyMjQsMTEgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogICAgICAgICBicmVhazsKICAgICBjYXNlIEluQ29sdW1uR3JvdXBNb2RlOgogICAgICAgICBB
U1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluQ29sdW1uR3JvdXBNb2RlKTsKLSAgICAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09
IGh0bWxUYWcpIHsKICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0YXJ0VGFnSW5C
b2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAo
dG9rZW4ubmFtZSgpID09IGNvbFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBj
b2xUYWcpIHsKICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50
KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTIzOSwyMCArMTI0
MCwyMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5UYWJsZUJvZHlNb2RlOgog
ICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluVGFibGVCb2R5TW9kZSk7Ci0gICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdHJUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1l
KCkgPT0gdHJUYWcpIHsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50
aWxUYWJsZUJvZHlTY29wZU1hcmtlcigpOyAvLyBIb3cgaXMgdGhlcmUgZXZlciBhbnl0aGluZyB0
byBwb3A/CiAgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAg
ICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJblJvd01vZGUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFt
ZSgpKSkgeworICAgICAgICBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkp
KSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHByb2Nlc3NG
YWtlU3RhcnRUYWcodHJUYWcpOwogICAgICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9
PSBJblJvd01vZGUpOwogICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xn
cm91cFRhZyh0b2tlbi5uYW1lKCkpIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1l
KCkpKSB7CisgICAgICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1l
KCkpIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgc2xvdy4KICAgICAgICAgICAgIGlmICghbV90cmVlLm9wZW5F
bGVtZW50cygpLT5pblRhYmxlU2NvcGUodGJvZHlUYWcubG9jYWxOYW1lKCkpICYmICFtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0aGVhZFRhZy5sb2NhbE5hbWUoKSkgJiYgIW1f
dHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRmb290VGFnLmxvY2FsTmFtZSgpKSkg
ewogICAgICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKQEAgLTEyNjks
MTYgKzEyNzAsMTYgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICBjYXNlIEluUm93TW9kZToK
ICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJblJvd01vZGUpOwotICAgICAgICBp
ZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKGlz
VGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAgbV90cmVl
Lm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFRhYmxlUm93U2NvcGVNYXJrZXIoKTsKICAgICAgICAg
ICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICBzZXRJbnNl
cnRpb25Nb2RlKEluQ2VsbE1vZGUpOwogICAgICAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cygpLT5hcHBlbmRNYXJrZXIoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRyVGFnCi0gICAgICAgICAgICB8fCBp
c0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgICAgIHx8IGlz
VGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CisgICAgICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IHRyVGFnCisgICAgICAgICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFn
KHRva2VuLT5uYW1lKCkpCisgICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9r
ZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAgIGlmICghcHJvY2Vzc1RyRW5kVGFnRm9ySW5Sb3co
KSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xMjkxLDEwICsxMjkyLDEwIEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJbkNlbGxNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9k
ZSgpID09IEluQ2VsbE1vZGUpOwotICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRh
Zyh0b2tlbi5uYW1lKCkpCi0gICAgICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9r
ZW4ubmFtZSgpKQotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnCi0gICAgICAg
ICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgeworICAgICAgICBp
ZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICAgICAg
fHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IHRyVGFnCisgICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRU
YWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJl
IG1vcmUgZWZmaWNpZW50LgogICAgICAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCkt
PmluVGFibGVTY29wZSh0ZFRhZykgJiYgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNj
b3BlKHRoVGFnKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgp
KTsKQEAgLTEzMTAsNyArMTMxMSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3Rh
cnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBjYXNlIEFmdGVyQm9keU1vZGU6CiAg
ICAgY2FzZSBBZnRlckFmdGVyQm9keU1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2Rl
KCkgPT0gQWZ0ZXJCb2R5TW9kZSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gQWZ0ZXJBZnRlckJvZHlN
b2RlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRI
VE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMTMxOSwyMSArMTMyMCwyMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSW5IZWFkTm9zY3JpcHRNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09
IEluSGVhZE5vc2NyaXB0TW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRh
ZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keSh0b2tlbik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiYXNlZm9u
dFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJnc291bmRUYWcKLSAgICAgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaW5rVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1l
KCkgPT0gbWV0YVRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFn
Ci0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3R5bGVUYWcpIHsKKyAgICAgICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gYmFzZWZvbnRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gYmdzb3VuZFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBsaW5rVGFn
CisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1ldGFUYWcKKyAgICAgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gbm9mcmFtZXNUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gc3R5bGVUYWcpIHsKICAgICAgICAgICAgIGJvb2wgZGlkUHJvY2VzcyA9IHByb2Nlc3NT
dGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGRpZFBy
b2Nlc3MsIGRpZFByb2Nlc3MpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gbm9zY3Jp
cHRUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZyB8fCB0b2tlbi0+
bmFtZSgpID09IG5vc2NyaXB0VGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTM0MiwxOSArMTM0MywxOSBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5GcmFtZXNldE1vZGU6CiAgICAgICAgIEFT
U0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5GcmFtZXNldE1vZGUpOwotICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRt
bFRhZykgewogICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHko
dG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
ZnJhbWVzZXRUYWcpIHsKICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tl
bik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5h
bWUoKSA9PSBmcmFtZVRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBmcmFtZVRh
ZykgewogICAgICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9r
ZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gbm9mcmFtZXNUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gbm9m
cmFtZXNUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEzNjMsMTEgKzEzNjQsMTEgQEAg
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogICAgIGNhc2UgQWZ0ZXJGcmFtZXNldE1vZGU6CiAgICAgY2FzZSBBZnRlckFmdGVyRnJh
bWVzZXRNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEFmdGVyRnJhbWVz
ZXRNb2RlIHx8IGluc2VydGlvbk1vZGUoKSA9PSBBZnRlckFmdGVyRnJhbWVzZXRNb2RlKTsKLSAg
ICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0
YXJ0VGFnSW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnKSB7CisgICAgICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IG5vZnJhbWVzVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWdG
b3JJbkhlYWQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMzc1
LDY0ICsxMzc2LDY0IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJblNlbGVjdElu
VGFibGVNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluU2VsZWN0SW5U
YWJsZU1vZGUpOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNhcHRpb25UYWcKLSAgICAg
ICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0YWJsZVRhZwotICAgICAgICAgICAgfHwgaXNUYWJs
ZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSB0clRhZwotICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5h
bWUoKSkpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gY2FwdGlvblRhZworICAgICAg
ICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0YWJsZVRhZworICAgICAgICAgICAgfHwgaXNUYWJs
ZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IHRyVGFnCisgICAgICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4t
Pm5hbWUoKSkpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICAgICAg
QXRvbWljSFRNTFRva2VuIGVuZFNlbGVjdChIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBzZWxlY3RU
YWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3QpOwor
ICAgICAgICAgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZW5kU2VsZWN0ID0gQXRvbWljSFRN
TFRva2VuOjpjcmVhdGUoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgc2VsZWN0VGFnLmxvY2FsTmFt
ZSgpKTsKKyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kU2VsZWN0LmdldCgpKTsKICAgICAg
ICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgLy8gRmFsbCB0aHJvdWdoCiAgICAgY2FzZSBJblNlbGVjdE1vZGU6CiAg
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5TZWxlY3RNb2RlIHx8IGluc2VydGlv
bk1vZGUoKSA9PSBJblNlbGVjdEluVGFibGVNb2RlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBodG1sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsK
ICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KHRva2VuKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgp
ID09IG9wdGlvblRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRpb25UYWcp
IHsKICAgICAgICAgICAgIGlmIChtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzVGFnTmFtZShvcHRp
b25UYWcpKSB7Ci0gICAgICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZE9wdGlvbihIVE1M
VG9rZW5UeXBlczo6RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAg
ICAgIHByb2Nlc3NFbmRUYWcoZW5kT3B0aW9uKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8QXRv
bWljSFRNTFRva2VuPiBlbmRPcHRpb24gPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9r
ZW5UeXBlczo6RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAg
IHByb2Nlc3NFbmRUYWcoZW5kT3B0aW9uLmdldCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBvcHRncm91cFRhZykgewor
ICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRncm91cFRhZykgewogICAgICAgICAgICAg
aWYgKG1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpIHsKLSAgICAg
ICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kT3B0aW9uKEhUTUxUb2tlblR5cGVzOjpFbmRU
YWcsIG9wdGlvblRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRh
ZyhlbmRPcHRpb24pOworICAgICAgICAgICAgICAgIFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+IGVu
ZE9wdGlvbiA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlblR5cGVzOjpFbmRUYWcs
IG9wdGlvblRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhl
bmRPcHRpb24uZ2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1fdHJlZS5j
dXJyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKG9wdGdyb3VwVGFnKSkgewotICAgICAgICAgICAgICAg
IEF0b21pY0hUTUxUb2tlbiBlbmRPcHRncm91cChIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBvcHRn
cm91cFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRP
cHRncm91cCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZW5kT3B0
Z3JvdXAgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBv
cHRncm91cFRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhl
bmRPcHRncm91cC5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3RyZWUuaW5z
ZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7CisgICAgICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IHNlbGVjdFRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7
Ci0gICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kU2VsZWN0KEhUTUxUb2tlblR5cGVzOjpF
bmRUYWcsIHNlbGVjdFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICBwcm9jZXNzRW5kVGFn
KGVuZFNlbGVjdCk7CisgICAgICAgICAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBlbmRTZWxl
Y3QgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBzZWxl
Y3RUYWcubG9jYWxOYW1lKCkpOworICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3Qu
Z2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gaW5wdXRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBrZXln
ZW5UYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0ZXh0YXJlYVRhZykgeworICAg
ICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBpbnB1dFRhZworICAgICAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBrZXlnZW5UYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdGV4
dGFyZWFUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAg
aWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2VsZWN0U2NvcGUoc2VsZWN0VGFnKSkgewog
ICAgICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4g
ZW5kU2VsZWN0KEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIHNlbGVjdFRhZy5sb2NhbE5hbWUoKSk7
Ci0gICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZFNlbGVjdCk7CisgICAgICAgICAgICBSZWZQ
dHI8QXRvbWljSFRNTFRva2VuPiBlbmRTZWxlY3QgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShI
VE1MVG9rZW5UeXBlczo6RW5kVGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkpOworICAgICAgICAg
ICAgcHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3QuZ2V0KCkpOwogICAgICAgICAgICAgcHJvY2Vzc1N0
YXJ0VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBzY3JpcHRUYWcpIHsKICAgICAgICAgICAgIGJvb2wgZGlkUHJvY2VzcyA9IHByb2Nlc3NT
dGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGRpZFBy
b2Nlc3MsIGRpZFByb2Nlc3MpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTQ0OCwxMCArMTQ0
OSwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiAgICAgfQogfQogCi1ib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Jv
ZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZyk7
Ci0gICAgQVNTRVJUKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnKTsKKyAgICBBU1NFUlQodG9rZW4t
PnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKTsKKyAgICBBU1NFUlQodG9rZW4tPm5h
bWUoKSA9PSBib2R5VGFnKTsKICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29w
ZShib2R5VGFnLmxvY2FsTmFtZSgpKSkgewogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQ2MSwxNSArMTQ2MiwxNSBAQCBib29sIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NB
bnlPdGhlckVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6
OkVuZFRhZyk7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVu
ZFRhZyk7CiAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogcmVjb3JkID0gbV90
cmVlLm9wZW5FbGVtZW50cygpLT50b3BSZWNvcmQoKTsKICAgICB3aGlsZSAoMSkgewogICAgICAg
ICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSA9IHJlY29yZC0+bm9kZSgpOwotICAgICAgICBp
ZiAobm9kZS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpIHsKLSAgICAgICAgICAgIG1fdHJl
ZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi5uYW1lKCkpOwotICAg
ICAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5h
bWUoKSkpCisgICAgICAgIGlmIChub2RlLT5oYXNMb2NhbE5hbWUodG9rZW4tPm5hbWUoKSkpIHsK
KyAgICAgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0
b2tlbi0+bmFtZSgpKTsKKyAgICAgICAgICAgIGlmICghbV90cmVlLmN1cnJlbnROb2RlKCktPmhh
c0xvY2FsTmFtZSh0b2tlbi0+bmFtZSgpKSkKICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKHRv
a2VuKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQo
dG9FbGVtZW50KG5vZGUuZ2V0KCkpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE0OTgsNyAr
MTQ5OSw3IEBAIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIEhUTUxUcmVlQnVpbGRl
cjo6ZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtCiB9CiAKIC8vIGh0dHA6Ly93d3cud2hh
dHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlv
bi5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHkKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhl
QWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKICAg
ICAvLyBUaGUgYWRvcHRpb24gYWdlbmN5IGFsZ29yaXRobSBpcyBOXjIuIFdlIGxpbWl0IHRoZSBu
dW1iZXIgb2YgaXRlcmF0aW9ucwogICAgIC8vIHRvIHN0b3AgZnJvbSBoYW5naW5nIHRoZSB3aG9s
ZSBicm93c2VyLiBUaGlzIGxpbWl0IGlzIHNwZWNpZmllZCBpbiB0aGUKQEAgLTE1MDksNyArMTUx
MCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0ZXJJdGVyYXRp
b25MaW1pdDsgKytpKSB7CiAgICAgICAgIC8vIDEuCi0gICAgICAgIEVsZW1lbnQqIGZvcm1hdHRp
bmdFbGVtZW50ID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5jbG9zZXN0RWxl
bWVudEluU2NvcGVXaXRoTmFtZSh0b2tlbi5uYW1lKCkpOworICAgICAgICBFbGVtZW50KiBmb3Jt
YXR0aW5nRWxlbWVudCA9IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+Y2xvc2Vz
dEVsZW1lbnRJblNjb3BlV2l0aE5hbWUodG9rZW4tPm5hbWUoKSk7CiAgICAgICAgIGlmICghZm9y
bWF0dGluZ0VsZW1lbnQgfHwgKChtX3RyZWUub3BlbkVsZW1lbnRzKCktPmNvbnRhaW5zKGZvcm1h
dHRpbmdFbGVtZW50KSkgJiYgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZShmb3JtYXR0
aW5nRWxlbWVudCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIENoZWNrIHRoZSBzdGFjayBvZiBvcGVuIGVsZW1lbnRz
IGZvciBhIG1vcmUgc3BlY2lmaWMgcGFyc2UgZXJyb3IuCkBAIC0xNTU1LDkgKzE1NTYsMTAgQEAg
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICAgICAgaWYgKG5vZGUgPT0gZm9ybWF0dGluZ0VsZW1lbnRSZWNv
cmQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAvLyA2LjUKLSAgICAgICAg
ICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gbV90cmVlLmNyZWF0ZUhUTUxFbGVtZW50
RnJvbUVsZW1lbnRSZWNvcmQobm9kZSk7CisgICAgICAgICAgICBSZWZQdHI8SFRNTFN0YWNrTm9k
ZT4gbmV3RWxlbWVudCA9IG1fdHJlZS5jcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4obm9kZS0+
c3RhY2tOb2RlKCkpOworCiAgICAgICAgICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpF
bnRyeSogbm9kZUVudHJ5ID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5maW5k
KG5vZGUtPmVsZW1lbnQoKSk7Ci0gICAgICAgICAgICBub2RlRW50cnktPnJlcGxhY2VFbGVtZW50
KG5ld0VsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgbm9kZUVudHJ5LT5yZXBsYWNlRWxlbWVu
dChuZXdFbGVtZW50KTsKICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VFbGVtZW50KG5ld0VsZW1l
bnQucmVsZWFzZSgpKTsKICAgICAgICAgICAgIC8vIDYuNCAtLSBJbnRlbnRpb25hbGx5IG91dCBv
ZiBvcmRlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbm9kZQogICAgICAgICAgICAgLy8gd2Fz
IHJlcGxhY2VkIGluIDYuNS4KQEAgLTE1OTEsMjIgKzE1OTMsMjIgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
ICAgICAgICAgICAgIGxhc3ROb2RlLT5lbGVtZW50KCktPmxhenlBdHRhY2goKTsKICAgICAgICAg
fQogICAgICAgICAvLyA4Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gbV90
cmVlLmNyZWF0ZUhUTUxFbGVtZW50RnJvbUVsZW1lbnRSZWNvcmQoZm9ybWF0dGluZ0VsZW1lbnRS
ZWNvcmQpOworICAgICAgICBSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbmV3RWxlbWVudCA9IG1fdHJl
ZS5jcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4oZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQtPnN0
YWNrTm9kZSgpKTsKICAgICAgICAgLy8gOQotICAgICAgICBuZXdFbGVtZW50LT50YWtlQWxsQ2hp
bGRyZW5Gcm9tKGZ1cnRoZXN0QmxvY2stPmVsZW1lbnQoKSk7CisgICAgICAgIG5ld0VsZW1lbnQt
PmVsZW1lbnQoKS0+dGFrZUFsbENoaWxkcmVuRnJvbShmdXJ0aGVzdEJsb2NrLT5lbGVtZW50KCkp
OwogICAgICAgICAvLyAxMAogICAgICAgICBFbGVtZW50KiBmdXJ0aGVzdEJsb2NrRWxlbWVudCA9
IGZ1cnRoZXN0QmxvY2stPmVsZW1lbnQoKTsKICAgICAgICAgLy8gRklYTUU6IEFsbCB0aGlzIGNy
ZWF0aW9uIC8gcGFyc2VyQWRkQ2hpbGQgLyBhdHRhY2ggYnVzaW5lc3Mgc2hvdWxkCiAgICAgICAg
IC8vICAgICAgICBiZSBpbiBIVE1MQ29uc3RydWN0aW9uU2l0ZS4gIE15IGd1ZXNzIGlzIHRoYXQg
c3RlcHMgOC0tMTIKICAgICAgICAgLy8gICAgICAgIHNob3VsZCBhbGwgYmUgaW4gc29tZSBIVE1M
Q29uc3RydWN0aW9uU2l0ZSBmdW5jdGlvbi4KLSAgICAgICAgZnVydGhlc3RCbG9ja0VsZW1lbnQt
PnBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQpOwotICAgICAgICBpZiAoZnVydGhlc3RCbG9ja0Vs
ZW1lbnQtPmF0dGFjaGVkKCkgJiYgIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpIHsKKyAgICAgICAg
ZnVydGhlc3RCbG9ja0VsZW1lbnQtPnBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQtPmVsZW1lbnQo
KSk7CisgICAgICAgIGlmIChmdXJ0aGVzdEJsb2NrRWxlbWVudC0+YXR0YWNoZWQoKSAmJiAhbmV3
RWxlbWVudC0+ZWxlbWVudCgpLT5hdHRhY2hlZCgpKSB7CiAgICAgICAgICAgICAvLyBOb3RpY2Ug
dGhhdCBuZXdFbGVtZW50IG1pZ2h0IGFscmVhZHkgYmUgYXR0YWNoZWQgaWYsIGZvciBleGFtcGxl
LCBvbmUgb2YgdGhlIHJlcGFyZW50ZWQKICAgICAgICAgICAgIC8vIGNoaWxkcmVuIGlzIGEgc3R5
bGUgZWxlbWVudCwgd2hpY2ggYXR0YWNoZXMgaXRzZWxmIGF1dG9tYXRpY2FsbHkuCi0gICAgICAg
ICAgICBuZXdFbGVtZW50LT5hdHRhY2goKTsKKyAgICAgICAgICAgIG5ld0VsZW1lbnQtPmVsZW1l
bnQoKS0+YXR0YWNoKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gMTEKLSAgICAgICAgbV90cmVl
LmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5zd2FwVG8oZm9ybWF0dGluZ0VsZW1lbnQsIG5l
d0VsZW1lbnQuZ2V0KCksIGJvb2ttYXJrKTsKKyAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cygpLT5zd2FwVG8oZm9ybWF0dGluZ0VsZW1lbnQsIG5ld0VsZW1lbnQsIGJvb2tt
YXJrKTsKICAgICAgICAgLy8gMTIKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5yZW1v
dmUoZm9ybWF0dGluZ0VsZW1lbnQpOwogICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmlu
c2VydEFib3ZlKG5ld0VsZW1lbnQsIGZ1cnRoZXN0QmxvY2spOwpAQCAtMTY2NSwxMSArMTY2Nywx
MSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cmVzZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlhdGVs
eSgpCiAgICAgfQogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0Zvcklu
VGFibGVCb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0g
ICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKTsKLSAgICBp
ZiAoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKLSAgICAgICAgaWYgKCFt
X3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi5uYW1lKCkpKSB7CisgICAg
QVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZyk7CisgICAgaWYg
KGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgeworICAgICAgICBpZiAoIW1f
dHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtMTY3OCw3ICsxNjgwLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRU
YWdGb3JJblRhYmxlQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBzZXRJbnNl
cnRpb25Nb2RlKEluVGFibGVNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
dG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGFi
bGVUYWcpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgc2xvdy4KICAgICAgICAgaWYgKCFt
X3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0Ym9keVRhZy5sb2NhbE5hbWUoKSkg
JiYgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRoZWFkVGFnLmxvY2FsTmFt
ZSgpKSAmJiAhbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodGZvb3RUYWcubG9j
YWxOYW1lKCkpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7CkBA
IC0xNjkxLDI1ICsxNjkzLDI1IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFn
Rm9ySW5UYWJsZUJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgcHJvY2Vzc0Vu
ZFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBib2R5VGFnCi0gICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4u
bmFtZSgpKQotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZwotICAgICAgICB8fCBp
c1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICB8fCB0b2tlbi5uYW1l
KCkgPT0gdHJUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAg
IHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnCisgICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRh
Zyh0b2tlbi0+bmFtZSgpKQorICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7CiAg
ICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBy
b2Nlc3NFbmRUYWdGb3JJblRhYmxlKHRva2VuKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NFbmRUYWdGb3JJblJvdyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblJvdyhBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZyk7
Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0clRhZykgeworICAgIEFTU0VSVCh0b2tlbi0+dHlw
ZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOworICAgIGlmICh0b2tlbi0+bmFtZSgpID09
IHRyVGFnKSB7CiAgICAgICAgIHByb2Nlc3NUckVuZFRhZ0ZvckluUm93KCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0YWJsZVRhZykgeworICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnKSB7CiAgICAgICAgIGlmICghcHJvY2Vzc1RyRW5k
VGFnRm9ySW5Sb3coKSkgewogICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkp
OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTcxOCw4ICsxNzIwLDggQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblJvdyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKLSAgICAgICAgaWYg
KCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi5uYW1lKCkpKSB7Cisg
ICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgeworICAgICAgICBp
ZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRva2VuLT5uYW1lKCkpKSB7
CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtMTcyOCw0MyArMTczMCw0MyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0VuZFRhZ0ZvckluUm93KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHByb2Nl
c3NFbmRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gYm9keVRhZwotICAgICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRv
a2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGh0bWxUYWcKLSAgICAgICAg
fHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWco
dG9rZW4tPm5hbWUoKSkKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnCisgICAg
ICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBwcm9jZXNzRW5k
VGFnRm9ySW5UYWJsZSh0b2tlbik7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
RW5kVGFnRm9ySW5DZWxsKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewot
ICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZyk7Ci0gICAg
aWYgKGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7Ci0gICAgICAgIGlmICgh
bV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgeworICAg
IEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOworICAgIGlm
IChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKCFt
X3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi0+bmFtZSgpKSkgewogICAg
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsKLSAgICAgICAgaWYg
KCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpCisgICAg
ICAgIGlmICghbV90cmVlLmN1cnJlbnROb2RlKCktPmhhc0xvY2FsTmFtZSh0b2tlbi0+bmFtZSgp
KSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICBtX3RyZWUub3BlbkVs
ZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2VuLm5hbWUoKSk7CisgICAgICAgIG1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4tPm5hbWUoKSk7CiAgICAgICAgIG1f
dHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+Y2xlYXJUb0xhc3RNYXJrZXIoKTsKICAg
ICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJblJvd01vZGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZwotICAgICAgICB8fCBpc0NhcHRpb25D
b2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IGh0bWxUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAgIHx8
IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcKLSAg
ICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnCi0gICAgICAgIHx8IGlzVGFibGVCb2R5Q29u
dGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50
cygpLT5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgewotICAgICAgICAgICAgQVNTRVJUKGlz
VGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpIHx8IGlzUGFyc2luZ0ZyYWdtZW50KCkp
OworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnCisgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gdHJUYWcKKyAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5u
YW1lKCkpKSB7CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2Nv
cGUodG9rZW4tPm5hbWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpc1RhYmxlQm9keUNvbnRl
eHRUYWcodG9rZW4tPm5hbWUoKSkgfHwgaXNQYXJzaW5nRnJhZ21lbnQoKSk7CiAgICAgICAgICAg
ICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
MTc3NSw1NCArMTc3Nyw1NCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0Zv
ckluQ2VsbChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIHByb2Nlc3NFbmRUYWdGb3JJbkJv
ZHkodG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0Zvcklu
Qm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQo
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOwotICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gYm9keVRhZykgeworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tl
blR5cGVzOjpFbmRUYWcpOworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJvZHlUYWcpIHsKICAg
ICAgICAgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICBBdG9t
aWNIVE1MVG9rZW4gZW5kQm9keShIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBib2R5VGFnLmxvY2Fs
TmFtZSgpKTsKLSAgICAgICAgaWYgKHByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KGVuZEJvZHkp
KQorICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgUmVmUHRyPEF0
b21pY0hUTUxUb2tlbj4gZW5kQm9keSA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tl
blR5cGVzOjpFbmRUYWcsIGJvZHlUYWcubG9jYWxOYW1lKCkpOworICAgICAgICBpZiAocHJvY2Vz
c0JvZHlFbmRUYWdGb3JJbkJvZHkoZW5kQm9keS5nZXQoKSkpCiAgICAgICAgICAgICBwcm9jZXNz
RW5kVGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFt
ZSgpID09IGFkZHJlc3NUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGFydGljbGVUYWcK
LSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGFzaWRlVGFnCi0gICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBibG9ja3F1b3RlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBidXR0b25U
YWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGNlbnRlclRhZwotICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gZGV0YWlsc1RhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGlyVGFn
Ci0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBkaXZUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IGRsVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmaWVsZHNldFRhZwotICAg
ICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZmlnY2FwdGlvblRhZwotICAgICAgICB8fCB0b2tlbi5u
YW1lKCkgPT0gZmlndXJlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmb290ZXJUYWcK
LSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGhlYWRlclRhZwotICAgICAgICB8fCB0b2tlbi5u
YW1lKCkgPT0gaGdyb3VwVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaXN0aW5nVGFn
Ci0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZW51VGFnCi0gICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBuYXZUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG9sVGFnCi0gICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBwcmVUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNl
Y3Rpb25UYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHN1bW1hcnlUYWcKLSAgICAgICAg
fHwgdG9rZW4ubmFtZSgpID09IHVsVGFnKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5pblNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9
PSBhZGRyZXNzVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYXJ0aWNsZVRhZworICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGFzaWRlVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gYmxvY2txdW90ZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJ1dHRvblRh
ZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGNlbnRlclRhZworICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IGRldGFpbHNUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkaXJU
YWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkaXZUYWcKKyAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBkbFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGZpZWxkc2V0VGFn
CisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZmlnY2FwdGlvblRhZworICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGZpZ3VyZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGZv
b3RlclRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGhlYWRlclRhZworICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IGhncm91cFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IGxpc3RpbmdUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtZW51VGFnCisgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gbmF2VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
b2xUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBwcmVUYWcKKyAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSBzZWN0aW9uVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3Vt
bWFyeVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHVsVGFnKSB7CisgICAgICAgIGlm
ICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpOwotICAgICAgICBpZiAo
IW1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNMb2NhbE5hbWUodG9rZW4ubmFtZSgpKSkKKyAgICAg
ICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1lKCkp
KQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4ubmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi0+bmFtZSgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGZvcm1UYWcpIHsKKyAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBmb3JtVGFnKSB7CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBub2Rl
ID0gbV90cmVlLnRha2VGb3JtKCk7CiAgICAgICAgIGlmICghbm9kZSB8fCAhbV90cmVlLm9wZW5F
bGVtZW50cygpLT5pblNjb3BlKG5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKQEAgLTE4MzMsNzMgKzE4MzUsNzMgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAg
IHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnJlbW92
ZShub2RlLmdldCgpKTsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwVGFnKSB7Ci0g
ICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRvblNjb3BlKHRva2VuLm5h
bWUoKSkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBwVGFnKSB7CisgICAgICAgIGlmICgh
bV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRvblNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHByb2Nlc3NGYWtlU3Rh
cnRUYWcocFRhZyk7Ci0gICAgICAgICAgICBBU1NFUlQobV90cmVlLm9wZW5FbGVtZW50cygpLT5p
blNjb3BlKHRva2VuLm5hbWUoKSkpOworICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+aW5TY29wZSh0b2tlbi0+bmFtZSgpKSk7CiAgICAgICAgICAgICBwcm9jZXNzRW5k
VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX3Ry
ZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG9rZW4ubmFtZSgpKTsKLSAg
ICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUo
KSkpCisgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0
b2tlbi0+bmFtZSgpKTsKKyAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9j
YWxOYW1lKHRva2VuLT5uYW1lKCkpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0g
ICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4ubmFtZSgp
KTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi0+
bmFtZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09
IGxpVGFnKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkxpc3RJdGVt
U2NvcGUodG9rZW4ubmFtZSgpKSkgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGxpVGFnKSB7
CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkxpc3RJdGVtU2NvcGUodG9r
ZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRU
YWdzV2l0aEV4Y2x1c2lvbih0b2tlbi5uYW1lKCkpOwotICAgICAgICBpZiAoIW1fdHJlZS5jdXJy
ZW50Tm9kZSgpLT5oYXNMb2NhbE5hbWUodG9rZW4ubmFtZSgpKSkKKyAgICAgICAgbV90cmVlLmdl
bmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKHRva2VuLT5uYW1lKCkpOworICAgICAg
ICBpZiAoIW1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNMb2NhbE5hbWUodG9rZW4tPm5hbWUoKSkp
CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi5uYW1lKCkpOworICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2VuLT5uYW1lKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZGRUYWcKLSAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IGR0VGFnKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygp
LT5pblNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBkZFRh
ZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGR0VGFnKSB7CisgICAgICAgIGlmICghbV90
cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAg
ICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG9rZW4ubmFt
ZSgpKTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRv
a2VuLm5hbWUoKSkpCisgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4
Y2x1c2lvbih0b2tlbi0+bmFtZSgpKTsKKyAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUo
KS0+aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1lKCkpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0
b2tlbik7Ci0gICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9r
ZW4ubmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBl
ZCh0b2tlbi0+bmFtZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoaXNOdW1i
ZXJlZEhlYWRlclRhZyh0b2tlbi5uYW1lKCkpKSB7CisgICAgaWYgKGlzTnVtYmVyZWRIZWFkZXJU
YWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCkt
Pmhhc051bWJlcmVkSGVhZGVyRWxlbWVudEluU2NvcGUoKSkgewogICAgICAgICAgICAgcGFyc2VF
cnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV90
cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVu
dE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpCisgICAgICAgIGlmICghbV90cmVl
LmN1cnJlbnROb2RlKCktPmhhc0xvY2FsTmFtZSh0b2tlbi0+bmFtZSgpKSkKICAgICAgICAgICAg
IHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVu
dGlsTnVtYmVyZWRIZWFkZXJFbGVtZW50UG9wcGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKGlzRm9ybWF0dGluZ1RhZyh0b2tlbi5uYW1lKCkpKSB7CisgICAgaWYgKGlzRm9y
bWF0dGluZ1RhZyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICBjYWxsVGhlQWRvcHRpb25BZ2Vu
Y3kodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gYXBwbGV0VGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtYXJxdWVlVGFnCi0gICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBvYmplY3RUYWcpIHsKLSAgICAgICAgaWYgKCFtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPmluU2NvcGUodG9rZW4ubmFtZSgpKSkgeworICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IGFwcGxldFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1hcnF1ZWVU
YWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBvYmplY3RUYWcpIHsKKyAgICAgICAgaWYg
KCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUodG9rZW4tPm5hbWUoKSkpIHsKICAgICAg
ICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7Ci0gICAgICAgIGlmICgh
bV90cmVlLmN1cnJlbnROb2RlKCktPmhhc0xvY2FsTmFtZSh0b2tlbi5uYW1lKCkpKQorICAgICAg
ICBpZiAoIW1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNMb2NhbE5hbWUodG9rZW4tPm5hbWUoKSkp
CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi5uYW1lKCkpOworICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2VuLT5uYW1lKCkpOwogICAgICAgICBtX3Ry
ZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPmNsZWFyVG9MYXN0TWFya2VyKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiclRhZykgeworICAg
IGlmICh0b2tlbi0+bmFtZSgpID09IGJyVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4p
OwogICAgICAgICBwcm9jZXNzRmFrZVN0YXJ0VGFnKGJyVGFnKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMTk0OCwxOSArMTk1MCwxOSBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1RhYmxl
RW5kVGFnRm9ySW5UYWJsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQor
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxU
b2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBl
czo6RW5kVGFnKTsKLSAgICBpZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgQVNT
RVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZyk7CisgICAgaWYgKHRv
a2VuLT5uYW1lKCkgPT0gdGFibGVUYWcpIHsKICAgICAgICAgcHJvY2Vzc1RhYmxlRW5kVGFnRm9y
SW5UYWJsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gYm9keVRhZwotICAgICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5h
bWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGh0bWxUYWcKLSAgICAgICAgfHwgaXNU
YWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgaXNUYWJsZUNlbGxD
b250ZXh0VGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFn
KSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYm9keVRhZworICAgICAgICB8fCBpc0NhcHRp
b25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gaHRtbFRhZworICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5h
bWUoKSkKKyAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCisg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJUYWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0
b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTY5LDkgKzE5NzEsOSBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKICAgICBwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KHRva2VuKTsKIH0KIAotdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3Zv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4p
CiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKTsK
KyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKTsKICAg
ICBzd2l0Y2ggKGluc2VydGlvbk1vZGUoKSkgewogICAgIGNhc2UgSW5pdGlhbE1vZGU6CiAgICAg
ICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5pdGlhbE1vZGUpOwpAQCAtMTk3OSw3ICsx
OTgxLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgogICAgIGNhc2UgQmVmb3JlSFRN
TE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gQmVmb3JlSFRNTE1vZGUp
OwotICAgICAgICBpZiAodG9rZW4ubmFtZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4ubmFtZSgpICE9
IGJvZHlUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGh0bWxUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGJy
VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4tPm5h
bWUoKSAhPSBib2R5VGFnICYmIHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFt
ZSgpICE9IGJyVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTk4Nyw3ICsxOTg5LDcgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAg
Ly8gRmFsbCB0aHJvdWdoLgogICAgIGNhc2UgQmVmb3JlSGVhZE1vZGU6CiAgICAgICAgIEFTU0VS
VChpbnNlcnRpb25Nb2RlKCkgPT0gQmVmb3JlSGVhZE1vZGUpOwotICAgICAgICBpZiAodG9rZW4u
bmFtZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGJvZHlUYWcgJiYgdG9rZW4ubmFt
ZSgpICE9IGh0bWxUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGJyVGFnKSB7CisgICAgICAgIGlmICh0
b2tlbi0+bmFtZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4tPm5hbWUoKSAhPSBib2R5VGFnICYmIHRv
a2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGJyVGFnKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtMTk5NSwxMiArMTk5NywxMiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAvLyBGYWxsIHRocm91Z2guCiAg
ICAgY2FzZSBJbkhlYWRNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IElu
SGVhZE1vZGUpOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhlYWRUYWcpIHsKKyAgICAg
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaGVhZFRhZykgewogICAgICAgICAgICAgbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5wb3BIVE1MSGVhZEVsZW1lbnQoKTsKICAgICAgICAgICAgIHNldEluc2Vy
dGlvbk1vZGUoQWZ0ZXJIZWFkTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLm5hbWUoKSAhPSBo
dG1sVGFnICYmIHRva2VuLm5hbWUoKSAhPSBiclRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5h
bWUoKSAhPSBib2R5VGFnICYmIHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFt
ZSgpICE9IGJyVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjAwOCw3ICsyMDEwLDcgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAg
Ly8gRmFsbCB0aHJvdWdoLgogICAgIGNhc2UgQWZ0ZXJIZWFkTW9kZToKICAgICAgICAgQVNTRVJU
KGluc2VydGlvbk1vZGUoKSA9PSBBZnRlckhlYWRNb2RlKTsKLSAgICAgICAgaWYgKHRva2VuLm5h
bWUoKSAhPSBib2R5VGFnICYmIHRva2VuLm5hbWUoKSAhPSBodG1sVGFnICYmIHRva2VuLm5hbWUo
KSAhPSBiclRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSAhPSBib2R5VGFnICYmIHRv
a2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGJyVGFnKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtMjAyNCwxMSArMjAyNiwxMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICBjYXNlIElu
Q2FwdGlvbk1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5DYXB0aW9u
TW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY2FwdGlvblRhZykgeworICAgICAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjYXB0aW9uVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNz
Q2FwdGlvbkVuZFRhZ0ZvckluQ2FwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcpIHsKKyAgICAgICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9r
ZW4pOwogICAgICAgICAgICAgaWYgKCFwcm9jZXNzQ2FwdGlvbkVuZFRhZ0ZvckluQ2FwdGlvbigp
KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkpOwpAQCAtMjAz
NywxMyArMjAzOSwxMyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBib2R5VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY29sVGFnCi0gICAgICAg
ICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY29sZ3JvdXBUYWcKLSAgICAgICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBodG1sVGFnCi0gICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWco
dG9rZW4ubmFtZSgpKQotICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2Vu
Lm5hbWUoKSkKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0clRhZykgeworICAgICAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IGNvbFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBjb2xncm91cFRh
ZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnCisgICAgICAgICAgICB8
fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgICAgIHx8IGlz
VGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSB0clRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTIwNTEsMTEgKzIwNTMsMTEgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbkNvbHVtbkdyb3VwTW9kZToKICAgICAgICAgQVNTRVJU
KGluc2VydGlvbk1vZGUoKSA9PSBJbkNvbHVtbkdyb3VwTW9kZSk7Ci0gICAgICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gY29sZ3JvdXBUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
Y29sZ3JvdXBUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NDb2xncm91cEVuZFRhZ0ZvckluQ29s
dW1uR3JvdXAoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAo
dG9rZW4ubmFtZSgpID09IGNvbFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBj
b2xUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkBAIC0yMDc5LDcgKzIwODEsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEFmdGVyQm9keU1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkg
PT0gQWZ0ZXJCb2R5TW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykg
eworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBp
ZiAoaXNQYXJzaW5nRnJhZ21lbnQoKSkgewogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9r
ZW4pOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIwOTYsMTQgKzIwOTgsMTQgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbkhlYWROb3NjcmlwdE1vZGU6CiAgICAgICAgIEFT
U0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5IZWFkTm9zY3JpcHRNb2RlKTsKLSAgICAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBub3NjcmlwdFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBub3NjcmlwdFRhZykgewogICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50RWxl
bWVudCgpLT5oYXNUYWdOYW1lKG5vc2NyaXB0VGFnKSk7CiAgICAgICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50RWxl
bWVudCgpLT5oYXNUYWdOYW1lKGhlYWRUYWcpKTsKICAgICAgICAgICAgIHNldEluc2VydGlvbk1v
ZGUoSW5IZWFkTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKHRva2VuLm5hbWUoKSAhPSBiclRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSAh
PSBiclRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KQEAgLTIxMTEsNyArMjExMyw3IEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHByb2Nl
c3NUb2tlbih0b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dE1vZGU6Ci0gICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2NyaXB0VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IHNjcmlwdFRhZykgewogICAgICAgICAgICAgLy8gUGF1c2Ugb3Vyc2VsdmVzIHNv
IHRoYXQgcGFyc2luZyBzdG9wcyB1bnRpbCB0aGUgc2NyaXB0IGNhbiBiZSBwcm9jZXNzZWQgYnkg
dGhlIGNhbGxlci4KICAgICAgICAgICAgIEFTU0VSVChtX3RyZWUuY3VycmVudEVsZW1lbnQoKS0+
aGFzVGFnTmFtZShzY3JpcHRUYWcpKTsKICAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzID0g
bV90cmVlLmN1cnJlbnRFbGVtZW50KCk7CkBAIC0yMTMzLDcgKzIxMzUsNyBAQCB2b2lkIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEluRnJhbWVzZXRNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0
aW9uTW9kZSgpID09IEluRnJhbWVzZXRNb2RlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBmcmFtZXNldFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBmcmFtZXNldFRh
ZykgewogICAgICAgICAgICAgaWYgKG1fdHJlZS5jdXJyZW50Tm9kZSgpID09IG1fdHJlZS5vcGVu
RWxlbWVudHMoKS0+cm9vdE5vZGUoKSkgewogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9r
ZW4pOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIxNDYsNyArMjE0OCw3IEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWZ0ZXJGcmFtZXNldE1vZGU6CiAgICAgICAgIEFTU0VS
VChpbnNlcnRpb25Nb2RlKCkgPT0gQWZ0ZXJGcmFtZXNldE1vZGUpOwotICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRt
bFRhZykgewogICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShBZnRlckFmdGVyRnJhbWVzZXRN
b2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjE1NywxNSArMjE1OSwx
NSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQogICAgICAgICBicmVhazsKICAgICBjYXNlIEluU2VsZWN0SW5UYWJsZU1vZGU6CiAg
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5TZWxlY3RJblRhYmxlTW9kZSk7Ci0g
ICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY2FwdGlvblRhZwotICAgICAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IHRhYmxlVGFnCi0gICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRU
YWcodG9rZW4ubmFtZSgpKQotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnCi0g
ICAgICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgeworICAg
ICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjYXB0aW9uVGFnCisgICAgICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IHRhYmxlVGFnCisgICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRU
YWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJUYWcK
KyAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgewog
ICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgICAgICBpZiAobV90cmVlLm9w
ZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgewotICAgICAgICAgICAg
ICAgIEF0b21pY0hUTUxUb2tlbiBlbmRTZWxlY3QoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgc2Vs
ZWN0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZFNl
bGVjdCk7CisgICAgICAgICAgICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2Nv
cGUodG9rZW4tPm5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8QXRvbWljSFRNTFRv
a2VuPiBlbmRTZWxlY3QgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6
RW5kVGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAgIHByb2Nlc3NF
bmRUYWcoZW5kU2VsZWN0LmdldCgpKTsKICAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKHRv
a2VuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKQEAgLTIxNzMsNyArMjE3
NSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tl
biYgdG9rZW4pCiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KICAgICBjYXNlIEluU2VsZWN0TW9k
ZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJblNlbGVjdE1vZGUgfHwgaW5z
ZXJ0aW9uTW9kZSgpID09IEluU2VsZWN0SW5UYWJsZU1vZGUpOwotICAgICAgICBpZiAodG9rZW4u
bmFtZSgpID09IG9wdGdyb3VwVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9w
dGdyb3VwVGFnKSB7CiAgICAgICAgICAgICBpZiAobV90cmVlLmN1cnJlbnROb2RlKCktPmhhc1Rh
Z05hbWUob3B0aW9uVGFnKSAmJiBtX3RyZWUub25lQmVsb3dUb3AoKSAmJiBtX3RyZWUub25lQmVs
b3dUb3AoKS0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpCiAgICAgICAgICAgICAgICAgcHJvY2Vz
c0Zha2VFbmRUYWcob3B0aW9uVGFnKTsKICAgICAgICAgICAgIGlmIChtX3RyZWUuY3VycmVudE5v
ZGUoKS0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpIHsKQEAgLTIxODMsNyArMjE4NSw3IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IG9wdGlvblRhZykgeworICAgICAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKICAgICAgICAgICAgIGlmIChtX3Ry
ZWUuY3VycmVudE5vZGUoKS0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7CiAgICAgICAgICAgICAg
ICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CkBAIC0yMTkxLDggKzIxOTMsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRh
ZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBzZWxlY3RUYWcpIHsKLSAgICAgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygp
LT5pblNlbGVjdFNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1l
KCkgPT0gc2VsZWN0VGFnKSB7CisgICAgICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMo
KS0+aW5TZWxlY3RTY29wZSh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAgICAgIEFTU0VS
VChpc1BhcnNpbmdGcmFnbWVudCgpKTsKICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMjA5LDkgKzIyMTEsOSBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
IH0KIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDb21tZW50KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NvbW1lbnQoQXRvbWlj
SFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tl
blR5cGVzOjpDb21tZW50KTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5U
eXBlczo6Q29tbWVudCk7CiAgICAgaWYgKG1faW5zZXJ0aW9uTW9kZSA9PSBJbml0aWFsTW9kZQog
ICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0gQmVmb3JlSFRNTE1vZGUKICAgICAgICAgfHwg
bV9pbnNlcnRpb25Nb2RlID09IEFmdGVyQWZ0ZXJCb2R5TW9kZQpAQCAtMjIzMSw5ICsyMjMzLDkg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDb21tZW50KEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgbV90cmVlLmluc2VydENvbW1lbnQodG9rZW4pOwogfQogCi12b2lkIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlcihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIoQXRvbWljSFRNTFRva2VuKiB0b2tl
bikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0
ZXIpOworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0
ZXIpOwogICAgIEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIgYnVmZmVyKHRva2VuKTsKICAg
ICBwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyKGJ1ZmZlcik7CiB9CkBAIC0yNDE0LDkgKzI0MTYsOSBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlckJ1ZmZlckZvckluQm9keShF
eHRlcm5hbENoYXJhY3RlclRva2VuQnVmZgogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsK
IH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKEF0b21p
Y0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW5UeXBlczo6RW5kT2ZGaWxlKTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9r
ZW5UeXBlczo6RW5kT2ZGaWxlKTsKICAgICBzd2l0Y2ggKGluc2VydGlvbk1vZGUoKSkgewogICAg
IGNhc2UgSW5pdGlhbE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5p
dGlhbE1vZGUpOwpAQCAtMjUwNywzMyArMjUwOSwzMyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
ZGVmYXVsdEZvckluaXRpYWwoKQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckJl
Zm9yZUhUTUwoKQogewotICAgIEF0b21pY0hUTUxUb2tlbiBzdGFydEhUTUwoSFRNTFRva2VuVHlw
ZXM6OlN0YXJ0VGFnLCBodG1sVGFnLmxvY2FsTmFtZSgpKTsKLSAgICBtX3RyZWUuaW5zZXJ0SFRN
TEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoc3RhcnRIVE1MKTsKKyAgICBSZWZQdHI8QXRvbWljSFRN
TFRva2VuPiBzdGFydEhUTUwgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBl
czo6U3RhcnRUYWcsIGh0bWxUYWcubG9jYWxOYW1lKCkpOworICAgIG1fdHJlZS5pbnNlcnRIVE1M
SHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChzdGFydEhUTUwuZ2V0KCkpOwogICAgIHNldEluc2VydGlv
bk1vZGUoQmVmb3JlSGVhZE1vZGUpOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVs
dEZvckJlZm9yZUhlYWQoKQogewotICAgIEF0b21pY0hUTUxUb2tlbiBzdGFydEhlYWQoSFRNTFRv
a2VuVHlwZXM6OlN0YXJ0VGFnLCBoZWFkVGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzU3Rh
cnRUYWcoc3RhcnRIZWFkKTsKKyAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBzdGFydEhlYWQg
PSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIGhlYWRU
YWcubG9jYWxOYW1lKCkpOworICAgIHByb2Nlc3NTdGFydFRhZyhzdGFydEhlYWQuZ2V0KCkpOwog
fQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckluSGVhZCgpCiB7Ci0gICAgQXRv
bWljSFRNTFRva2VuIGVuZEhlYWQoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgaGVhZFRhZy5sb2Nh
bE5hbWUoKSk7Ci0gICAgcHJvY2Vzc0VuZFRhZyhlbmRIZWFkKTsKKyAgICBSZWZQdHI8QXRvbWlj
SFRNTFRva2VuPiBlbmRIZWFkID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuVHlw
ZXM6OkVuZFRhZywgaGVhZFRhZy5sb2NhbE5hbWUoKSk7CisgICAgcHJvY2Vzc0VuZFRhZyhlbmRI
ZWFkLmdldCgpKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbkhlYWRO
b3NjcmlwdCgpCiB7Ci0gICAgQXRvbWljSFRNTFRva2VuIGVuZE5vc2NyaXB0KEhUTUxUb2tlblR5
cGVzOjpFbmRUYWcsIG5vc2NyaXB0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzRW5kVGFn
KGVuZE5vc2NyaXB0KTsKKyAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBlbmROb3NjcmlwdCA9
IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIG5vc2NyaXB0
VGFnLmxvY2FsTmFtZSgpKTsKKyAgICBwcm9jZXNzRW5kVGFnKGVuZE5vc2NyaXB0LmdldCgpKTsK
IH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JBZnRlckhlYWQoKQogewotICAg
IEF0b21pY0hUTUxUb2tlbiBzdGFydEJvZHkoSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCBib2R5
VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzU3RhcnRUYWcoc3RhcnRCb2R5KTsKKyAgICBS
ZWZQdHI8QXRvbWljSFRNTFRva2VuPiBzdGFydEJvZHkgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0
ZShIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIGJvZHlUYWcubG9jYWxOYW1lKCkpOworICAgIHBy
b2Nlc3NTdGFydFRhZyhzdGFydEJvZHkuZ2V0KCkpOwogICAgIG1fZnJhbWVzZXRPayA9IHRydWU7
CiB9CiAKQEAgLTI1NTQsMjggKzI1NTYsMjggQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1
bHRGb3JJblRhYmxlVGV4dCgpCiAgICAgc2V0SW5zZXJ0aW9uTW9kZShtX29yaWdpbmFsSW5zZXJ0
aW9uTW9kZSk7CiB9CiAKLWJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJ
bkhlYWQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzU3RhcnRUYWdGb3JJbkhlYWQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NF
UlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7Ci0gICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRN
TFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFn
KSB7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KHRva2VuKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYmFz
ZVRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmFzZWZvbnRUYWcKLSAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IGJnc291bmRUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGNv
bW1hbmRUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGxpbmtUYWcKLSAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IG1ldGFUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBiYXNl
VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYmFzZWZvbnRUYWcKKyAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBiZ3NvdW5kVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
Y29tbWFuZFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGxpbmtUYWcKKyAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBtZXRhVGFnKSB7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxm
Q2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgLy8gTm90ZTogVGhlIGN1c3RvbSBw
cm9jZXNzaW5nIGZvciB0aGUgPG1ldGE+IHRhZyBpcyBkb25lIGluIEhUTUxNZXRhRWxlbWVudDo6
cHJvY2VzcygpLgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5h
bWUoKSA9PSB0aXRsZVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRpdGxlVGFnKSB7
CiAgICAgICAgIHByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcodG9rZW4pOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub3NjcmlwdFRhZykg
eworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG5vc2NyaXB0VGFnKSB7CiAgICAgICAgIGlmIChz
Y3JpcHRFbmFibGVkKG1fZG9jdW1lbnQtPmZyYW1lKCkpKSB7CiAgICAgICAgICAgICBwcm9jZXNz
R2VuZXJpY1Jhd1RleHRTdGFydFRhZyh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI1ODQsNDQgKzI1ODYsNDQgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFy
dFRhZ0ZvckluSGVhZChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBzZXRJbnNlcnRp
b25Nb2RlKEluSGVhZE5vc2NyaXB0TW9kZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
LSAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBz
dHlsZVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG5vZnJhbWVzVGFnIHx8IHRva2Vu
LT5uYW1lKCkgPT0gc3R5bGVUYWcpIHsKICAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3Rh
cnRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBzY3JpcHRUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBzY3JpcHRU
YWcpIHsKICAgICAgICAgcHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKHRva2VuKTsKLSAgICAgICAgaWYg
KG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MgJiYgdG9rZW4uc2VsZkNsb3NpbmcoKSkKKyAgICAg
ICAgaWYgKG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MgJiYgdG9rZW4tPnNlbGZDbG9zaW5nKCkp
CiAgICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhzY3JpcHRUYWcpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoZWFkVGFnKSB7CisgICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gaGVhZFRhZykgewogICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1JD
REFUQVN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2Vu
LnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOworICAgIEFTU0VSVCh0b2tlbi0+
dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgbV90cmVlLmluc2VydEhU
TUxFbGVtZW50KHRva2VuKTsKICAgICBtX3BhcnNlci0+dG9rZW5pemVyKCktPnNldFN0YXRlKEhU
TUxUb2tlbml6ZXJTdGF0ZTo6UkNEQVRBU3RhdGUpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRpb25N
b2RlID0gbV9pbnNlcnRpb25Nb2RlOwogICAgIHNldEluc2VydGlvbk1vZGUoVGV4dE1vZGUpOwog
fQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2Vu
ZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VS
VCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQo
dG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwogICAgIG1fdHJlZS5p
bnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgbV9wYXJzZXItPnRva2VuaXplcigpLT5zZXRT
dGF0ZShIVE1MVG9rZW5pemVyU3RhdGU6OlJBV1RFWFRTdGF0ZSk7CiAgICAgbV9vcmlnaW5hbElu
c2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7CiAgICAgc2V0SW5zZXJ0aW9uTW9kZShUZXh0
TW9kZSk7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU2Ny
aXB0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4u
dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CisgICAgQVNTRVJUKHRva2VuLT50
eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAgICBtX3RyZWUuaW5zZXJ0U2Ny
aXB0RWxlbWVudCh0b2tlbik7CiAgICAgbV9wYXJzZXItPnRva2VuaXplcigpLT5zZXRTdGF0ZShI
VE1MVG9rZW5pemVyU3RhdGU6OlNjcmlwdERhdGFTdGF0ZSk7CiAgICAgbV9vcmlnaW5hbEluc2Vy
dGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7CkBAIC0yNjM0LDcgKzI2MzYsNyBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiB9CiAKIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50
LXdvcmsvbXVsdGlwYWdlL3RyZWUtY29uc3RydWN0aW9uLmh0bWwjdHJlZS1jb25zdHJ1Y3Rpb24K
LWJvb2wgSFRNTFRyZWVCdWlsZGVyOjpzaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCitib29sIEhUTUxUcmVlQnVpbGRlcjo6c2hvdWxkUHJv
Y2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAg
IGlmIChtX3RyZWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjQyLDMx
ICsyNjQ0LDMxIEBAIGJvb2wgSFRNTFRyZWVCdWlsZGVyOjpzaG91bGRQcm9jZXNzVG9rZW5JbkZv
cmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgaWYgKGlzSW5IVE1MTmFt
ZXNwYWNlKG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKEhUTUxFbGVtZW50
U3RhY2s6OmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQobm9kZSkpIHsKLSAgICAgICAgaWYg
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcKLSAgICAgICAgICAgICYm
IHRva2VuLm5hbWUoKSAhPSBNYXRoTUxOYW1lczo6bWdseXBoVGFnCi0gICAgICAgICAgICAmJiB0
b2tlbi5uYW1lKCkgIT0gTWF0aE1MTmFtZXM6Om1hbGlnbm1hcmtUYWcpCisgICAgICAgIGlmICh0
b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZworICAgICAgICAgICAgJiYg
dG9rZW4tPm5hbWUoKSAhPSBNYXRoTUxOYW1lczo6bWdseXBoVGFnCisgICAgICAgICAgICAmJiB0
b2tlbi0+bmFtZSgpICE9IE1hdGhNTE5hbWVzOjptYWxpZ25tYXJrVGFnKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVz
OjpDaGFyYWN0ZXIpCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVz
OjpDaGFyYWN0ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjphbm5vdGF0aW9uX3htbFRhZykKLSAgICAgICAg
JiYgdG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZwotICAgICAgICAmJiB0
b2tlbi5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN2Z1RhZykKKyAgICAgICAgJiYgdG9rZW4tPnR5cGUo
KSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcKKyAgICAgICAgJiYgdG9rZW4tPm5hbWUoKSA9
PSBTVkdOYW1lczo6c3ZnVGFnKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKEhUTUxF
bGVtZW50U3RhY2s6OmlzSFRNTEludGVncmF0aW9uUG9pbnQobm9kZSkpIHsKLSAgICAgICAgaWYg
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpCisgICAgICAgIGlmICh0
b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZykKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6
Q2hhcmFjdGVyKQorICAgICAgICBpZiAodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6
Q2hhcmFjdGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAodG9r
ZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRPZkZpbGUpCisgICAgaWYgKHRva2VuLT50
eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZE9mRmlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rv
a2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuKiB0
b2tlbikKIHsKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIHN3aXRjaCAodG9rZW4t
PnR5cGUoKSkgewogICAgIGNhc2UgSFRNTFRva2VuVHlwZXM6OlVuaW5pdGlhbGl6ZWQ6CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKQEAgLTI2NzQsNDYgKzI2
NzYsNDYgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRl
bnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnOiB7Ci0gICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYlRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IGJpZ1RhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJsb2NrcXVvdGVUYWcK
LSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBib2R5VGFnCi0gICAgICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0gYnJUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBjZW50
ZXJUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBjb2RlVGFnCi0gICAgICAgICAg
ICB8fCB0b2tlbi5uYW1lKCkgPT0gZGRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSBkaXZUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBkbFRhZwotICAgICAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IGR0VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gZW1UYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBlbWJlZFRhZwotICAgICAg
ICAgICAgfHwgaXNOdW1iZXJlZEhlYWRlclRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gaGVhZFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IGhyVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaVRhZwotICAgICAgICAgICAg
fHwgdG9rZW4ubmFtZSgpID09IGltZ1RhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IGxpVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbGlzdGluZ1RhZwotICAgICAg
ICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1lbnVUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBtZXRhVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbm9iclRhZwot
ICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG9sVGFnCi0gICAgICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gcFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHByZVRhZwot
ICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHJ1YnlUYWcKLSAgICAgICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBzVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc21hbGxU
YWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzcGFuVGFnCi0gICAgICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gc3Ryb25nVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gc3RyaWtlVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3ViVGFnCi0gICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3VwVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5u
YW1lKCkgPT0gdGFibGVUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0dFRhZwot
ICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHVUYWcKLSAgICAgICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSB1bFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHZhclRhZwot
ICAgICAgICAgICAgfHwgKHRva2VuLm5hbWUoKSA9PSBmb250VGFnICYmICh0b2tlbi5nZXRBdHRy
aWJ1dGVJdGVtKGNvbG9yQXR0cikgfHwgdG9rZW4uZ2V0QXR0cmlidXRlSXRlbShmYWNlQXR0cikg
fHwgdG9rZW4uZ2V0QXR0cmlidXRlSXRlbShzaXplQXR0cikpKSkgeworICAgICAgICBpZiAodG9r
ZW4tPm5hbWUoKSA9PSBiVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJpZ1Rh
ZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBibG9ja3F1b3RlVGFnCisgICAgICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJvZHlUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gYnJUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gY2VudGVyVGFn
CisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGNvZGVUYWcKKyAgICAgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gZGRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
ZGl2VGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGRsVGFnCisgICAgICAgICAg
ICB8fCB0b2tlbi0+bmFtZSgpID09IGR0VGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IGVtVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGVtYmVkVGFnCisgICAg
ICAgICAgICB8fCBpc051bWJlcmVkSGVhZGVyVGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAgICAg
ICB8fCB0b2tlbi0+bmFtZSgpID09IGhlYWRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gaHJUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gaVRhZworICAgICAg
ICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBpbWdUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gbGlUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbGlzdGluZ1Rh
ZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtZW51VGFnCisgICAgICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IG1ldGFUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkg
PT0gbm9iclRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBvbFRhZworICAgICAg
ICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBwVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IHByZVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBydWJ5VGFnCisg
ICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHNUYWcKKyAgICAgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gc21hbGxUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3Bh
blRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdHJvbmdUYWcKKyAgICAgICAg
ICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3RyaWtlVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IHN1YlRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdXBUYWcK
KyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcKKyAgICAgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gdHRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
dVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB1bFRhZworICAgICAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSB2YXJUYWcKKyAgICAgICAgICAgIHx8ICh0b2tlbi0+bmFtZSgp
ID09IGZvbnRUYWcgJiYgKHRva2VuLT5nZXRBdHRyaWJ1dGVJdGVtKGNvbG9yQXR0cikgfHwgdG9r
ZW4tPmdldEF0dHJpYnV0ZUl0ZW0oZmFjZUF0dHIpIHx8IHRva2VuLT5nZXRBdHRyaWJ1dGVJdGVt
KHNpemVBdHRyKSkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
ICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxGb3JlaWduQ29udGVudFNjb3BlTWFy
a2VyKCk7CiAgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOwpAQCAtMjczNCw3ICsy
NzM2LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRl
bnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgaWYgKG1fdHJlZS5jdXJyZW50Tm9k
ZSgpLT5uYW1lc3BhY2VVUkkoKSA9PSBTVkdOYW1lczo6c3ZnTmFtZXNwYWNlVVJJKQogICAgICAg
ICAgICAgYWRqdXN0U1ZHVGFnTmFtZUNhc2UodG9rZW4pOwogCi0gICAgICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnNjcmlwdFRhZyAmJiBtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFz
VGFnTmFtZShTVkdOYW1lczo6c2NyaXB0VGFnKSkgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBTVkdOYW1lczo6c2NyaXB0VGFnICYmIG1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNUYWdO
YW1lKFNWR05hbWVzOjpzY3JpcHRUYWcpKSB7CiAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2Vz
cyA9IG1fdHJlZS5jdXJyZW50RWxlbWVudCgpOwogICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5wb3AoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3NDIsMTAgKzI3NDQsMTAg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgaWYgKCFpc0luSFRNTE5hbWVzcGFjZShtX3Ry
ZWUuY3VycmVudE5vZGUoKSkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUganVz
dCB3YW50cyBhbiBFbGVtZW50KiBpdGVyYXRvciwgaW5zdGVhZCBvZiBhbiBFbGVtZW50UmVjb3Jk
KgogICAgICAgICAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbm9kZVJlY29y
ZCA9IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+dG9wUmVjb3JkKCk7Ci0gICAgICAgICAgICBpZiAo
IW5vZGVSZWNvcmQtPm5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpCisgICAgICAg
ICAgICBpZiAoIW5vZGVSZWNvcmQtPm5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1lKCkp
KQogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgd2hpbGUg
KDEpIHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZVJlY29yZC0+bm9kZSgpLT5oYXNMb2NhbE5h
bWUodG9rZW4ubmFtZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlUmVjb3JkLT5ub2Rl
KCktPmhhc0xvY2FsTmFtZSh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAgICAgICAgICBt
X3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKG5vZGVSZWNvcmQtPmVsZW1lbnQo
KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0y
NzYzLDcgKzI3NjUsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3Jl
aWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBtX3RyZWUuaW5zZXJ0
Q29tbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEhUTUxUb2tlblR5cGVz
OjpDaGFyYWN0ZXI6IHsKLSAgICAgICAgU3RyaW5nIGNoYXJhY3RlcnMgPSBTdHJpbmcodG9rZW4u
Y2hhcmFjdGVycygpLmRhdGEoKSwgdG9rZW4uY2hhcmFjdGVycygpLnNpemUoKSk7CisgICAgICAg
IFN0cmluZyBjaGFyYWN0ZXJzID0gU3RyaW5nKHRva2VuLT5jaGFyYWN0ZXJzKCkuZGF0YSgpLCB0
b2tlbi0+Y2hhcmFjdGVycygpLnNpemUoKSk7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9k
ZShjaGFyYWN0ZXJzKTsKICAgICAgICAgaWYgKG1fZnJhbWVzZXRPayAmJiAhaXNBbGxXaGl0ZXNw
YWNlT3JSZXBsYWNlbWVudENoYXJhY3RlcnMoY2hhcmFjdGVycykpCiAgICAgICAgICAgICBtX2Zy
YW1lc2V0T2sgPSBmYWxzZTsKQEAgLTI3ODUsNyArMjc4Nyw3IEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpmaW5pc2hlZCgpCiAgICAgbV9kb2N1bWVudC0+ZmluaXNoZWRQYXJzaW5nKCk7CiB9CiAK
LXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwYXJzZUVycm9yKEF0b21pY0hUTUxUb2tlbiYpCit2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cGFyc2VFcnJvcihBdG9taWNIVE1MVG9rZW4qKQogewogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4IGU3YzY4
OTA4NGNlODc4YmRjZDhkMWVlYjcyMTBlNzVlZWJjYzliMmMuLjA4YzA1YTQ5OTQyZjY1MWExYmQ4
NTQ1ZGI4MDRhZGQ1OGMzNDYzMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxUcmVlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxUcmVlQnVpbGRlci5oCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRoZSB0
b2tlbiByZWFsbHkgc2hvdWxkIGJlIHBhc3NlZCBhcyBhIGNvbnN0JiBzaW5jZSBpdCdzIG5ldmVy
IG1vZGlmaWVkLgogICAgIHZvaWQgY29uc3RydWN0VHJlZUZyb21Ub2tlbihIVE1MVG9rZW4mKTsK
LSAgICB2b2lkIGNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4oQXRvbWljSFRNTFRva2VuJik7
CisgICAgdm9pZCBjb25zdHJ1Y3RUcmVlRnJvbUF0b21pY1Rva2VuKEF0b21pY0hUTUxUb2tlbiop
OwogCiAgICAgYm9vbCBoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpIGNvbnN0IHsgcmV0dXJuICEh
bV9zY3JpcHRUb1Byb2Nlc3M7IH0KICAgICAvLyBNdXN0IGJlIGNhbGxlZCB0byB0YWtlIHRoZSBw
YXJzZXItYmxvY2tpbmcgc2NyaXB0IGJlZm9yZSBjYWxsaW5nIHRoZSBwYXJzZXIgYWdhaW4uCkBA
IC0xMTgsMzMgKzExOCwzMyBAQCBwcml2YXRlOgogICAgIEhUTUxUcmVlQnVpbGRlcihIVE1MRG9j
dW1lbnRQYXJzZXIqLCBIVE1MRG9jdW1lbnQqLCBib29sIHJlcG9ydEVycm9ycywgYm9vbCB1c2VQ
cmVIVE1MNVBhcnNlclF1aXJrcywgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCk7CiAgICAg
SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNlciosIERvY3VtZW50RnJhZ21lbnQqLCBF
bGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLCBib29s
IHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzLCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKTsK
IAotICAgIHZvaWQgcHJvY2Vzc1Rva2VuKEF0b21pY0hUTUxUb2tlbiYpOwotCi0gICAgdm9pZCBw
cm9jZXNzRG9jdHlwZVRva2VuKEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc1N0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZyhBdG9taWNI
VE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NDb21tZW50KEF0b21pY0hUTUxUb2tlbiYpOwot
ICAgIHZvaWQgcHJvY2Vzc0NoYXJhY3RlcihBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHBy
b2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRNTFRva2VuJik7Ci0KLSAgICBib29sIHByb2Nlc3NTdGFy
dFRhZ0ZvckluSGVhZChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NTdGFydFRh
Z0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NTdGFydFRhZ0Zv
ckluVGFibGUoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5C
b2R5KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUo
QXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZUJvZHko
QXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5Sb3coQXRvbWlj
SFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5DZWxsKEF0b21pY0hUTUxU
b2tlbiYpOwotCi0gICAgdm9pZCBwcm9jZXNzSXNpbmRleFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21p
Y0hUTUxUb2tlbiYpOwotICAgIGJvb2wgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWlj
SFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzVG9rZW4oQXRvbWljSFRNTFRva2VuKik7CisK
KyAgICB2b2lkIHByb2Nlc3NEb2N0eXBlVG9rZW4oQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9p
ZCBwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBwcm9jZXNzRW5k
VGFnKEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vzc0NvbW1lbnQoQXRvbWljSFRN
TFRva2VuKik7CisgICAgdm9pZCBwcm9jZXNzQ2hhcmFjdGVyKEF0b21pY0hUTUxUb2tlbiopOwor
ICAgIHZvaWQgcHJvY2Vzc0VuZE9mRmlsZShBdG9taWNIVE1MVG9rZW4qKTsKKworICAgIGJvb2wg
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJv
Y2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vz
c1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NF
bmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBwcm9jZXNzRW5kVGFn
Rm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJ
blRhYmxlQm9keShBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJ
blJvdyhBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJbkNlbGwo
QXRvbWljSFRNTFRva2VuKik7CisKKyAgICB2b2lkIHByb2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJ
bkJvZHkoQXRvbWljSFRNTFRva2VuKik7CisgICAgYm9vbCBwcm9jZXNzQm9keUVuZFRhZ0Zvcklu
Qm9keShBdG9taWNIVE1MVG9rZW4qKTsKICAgICBib29sIHByb2Nlc3NUYWJsZUVuZFRhZ0Zvcklu
VGFibGUoKTsKICAgICBib29sIHByb2Nlc3NDYXB0aW9uRW5kVGFnRm9ySW5DYXB0aW9uKCk7CiAg
ICAgYm9vbCBwcm9jZXNzQ29sZ3JvdXBFbmRUYWdGb3JJbkNvbHVtbkdyb3VwKCk7CiAgICAgYm9v
bCBwcm9jZXNzVHJFbmRUYWdGb3JJblJvdygpOwogICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9u
IHNob3VsZCBiZSBpbmxpbmVkIGludG8gaXRzIG9uZSBjYWxsIHNpdGUgb3IgaXQKICAgICAvLyBu
ZWVkcyB0byBhc3NlcnQgd2hpY2ggdG9rZW5zIGl0IGNhbiBiZSBjYWxsZWQgd2l0aC4KLSAgICB2
b2lkIHByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mKTsKKyAg
ICB2b2lkIHByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qKTsK
IAogICAgIHZvaWQgcHJvY2Vzc0NoYXJhY3RlckJ1ZmZlcihFeHRlcm5hbENoYXJhY3RlclRva2Vu
QnVmZmVyJik7CiAgICAgaW5saW5lIHZvaWQgcHJvY2Vzc0NoYXJhY3RlckJ1ZmZlckZvckluQm9k
eShFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyJik7CkBAIC0xNTQsOSArMTU0LDkgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHByb2Nlc3NGYWtlQ2hhcmFjdGVycyhjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKIAotICAgIHZvaWQg
cHJvY2Vzc0dlbmVyaWNSQ0RBVEFTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lk
IHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZv
aWQgcHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJv
Y2Vzc0dlbmVyaWNSQ0RBVEFTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHBy
b2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQg
cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiopOwogCiAgICAgLy8gRGVmYXVs
dCBwcm9jZXNzaW5nIGZvciB0aGUgZGlmZmVyZW50IGluc2VydGlvbiBtb2Rlcy4KICAgICB2b2lk
IGRlZmF1bHRGb3JJbml0aWFsKCk7CkBAIC0xNjcsMjIgKzE2NywyMiBAQCBwcml2YXRlOgogICAg
IHZvaWQgZGVmYXVsdEZvckFmdGVySGVhZCgpOwogICAgIHZvaWQgZGVmYXVsdEZvckluVGFibGVU
ZXh0KCk7CiAKLSAgICBpbmxpbmUgYm9vbCBzaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250
ZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29u
dGVudChBdG9taWNIVE1MVG9rZW4mKTsKKyAgICBpbmxpbmUgYm9vbCBzaG91bGRQcm9jZXNzVG9r
ZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vzc1Rv
a2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4qKTsKIAotICAgIFZlY3RvcjxBdHRy
aWJ1dGU+IGF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuJik7CisgICAg
VmVjdG9yPEF0dHJpYnV0ZT4gYXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1dChBdG9taWNIVE1MVG9r
ZW4qKTsKIAogICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGZ1cnRoZXN0Qmxv
Y2tGb3JGb3JtYXR0aW5nRWxlbWVudChFbGVtZW50Kik7Ci0gICAgdm9pZCBjYWxsVGhlQWRvcHRp
b25BZ2VuY3koQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBjYWxsVGhlQWRvcHRpb25BZ2Vu
Y3koQXRvbWljSFRNTFRva2VuKik7CiAKICAgICB2b2lkIGNsb3NlVGhlQ2VsbCgpOwogCiAgICAg
dGVtcGxhdGUgPGJvb2wgc2hvdWxkQ2xvc2UoY29uc3QgQ29udGFpbmVyTm9kZSopPgotICAgIHZv
aWQgcHJvY2Vzc0Nsb3NlV2hlbk5lc3RlZFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lk
IHByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWcoQXRvbWljSFRNTFRva2VuKik7CiAKICAgICBib29s
IG1fZnJhbWVzZXRPazsKIAotICAgIHZvaWQgcGFyc2VFcnJvcihBdG9taWNIVE1MVG9rZW4mKTsK
KyAgICB2b2lkIHBhcnNlRXJyb3IoQXRvbWljSFRNTFRva2VuKik7CiAKICAgICBJbnNlcnRpb25N
b2RlIGluc2VydGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2luc2VydGlvbk1vZGU7IH0KICAg
ICB2b2lkIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZSBtb2RlKSB7IG1faW5zZXJ0aW9u
TW9kZSA9IG1vZGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1Rl
eHREb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9j
dW1lbnRQYXJzZXIuY3BwCmluZGV4IDczNGVkZjA5ZjgzNmZhNjllYzJlY2I4MWVmNDc4NTdmNGRh
MjI5MGQuLmUzOGQwZTBjNGZkZGFmYTY1Y2NjOGZlZWUwZjBjNThiNjY2OTQzYTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcApAQCAt
NjIsOSArNjIsOSBAQCB2b2lkIFRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVsZW1l
bnQoKQogCiAgICAgVmVjdG9yPEF0dHJpYnV0ZT4gYXR0cmlidXRlczsKICAgICBhdHRyaWJ1dGVz
LmFwcGVuZChBdHRyaWJ1dGUoc3R5bGVBdHRyLCAid29yZC13cmFwOiBicmVhay13b3JkOyB3aGl0
ZS1zcGFjZTogcHJlLXdyYXA7IikpOwotICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlUHJlKEhUTUxU
b2tlblR5cGVzOjpTdGFydFRhZywgcHJlVGFnLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVzKTsKKyAg
ICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBmYWtlUHJlID0gQXRvbWljSFRNTFRva2VuOjpjcmVh
dGUoSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCBwcmVUYWcubG9jYWxOYW1lKCksIGF0dHJpYnV0
ZXMpOwogCi0gICAgdHJlZUJ1aWxkZXIoKS0+Y29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tlbihm
YWtlUHJlKTsKKyAgICB0cmVlQnVpbGRlcigpLT5jb25zdHJ1Y3RUcmVlRnJvbUF0b21pY1Rva2Vu
KGZha2VQcmUuZ2V0KCkpOwogICAgIC8vIE5vcm1hbGx5IHdlIHdvdWxkIHNraXAgdGhlIGZpcnN0
IFxuIGFmdGVyIGEgPHByZT4gZWxlbWVudCwgYnV0IHdlIGRvbid0CiAgICAgLy8gd2FudCB0byBz
a2lwIHRoZSBmaXJzdCBcbiBmb3IgdGV4dCBkb2N1bWVudHMhCiAgICAgdHJlZUJ1aWxkZXIoKS0+
c2V0U2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lKGZhbHNlKTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3ZDg4NTEyNjNiZGI0
ODkzN2VmZTlkOGEyN2M3NGE5YTNkYTdjY2U4Li4zMTQ5OTMyMzAzMTRkYjIwYjg1OWRhZWJlOWJk
MzFkZGM2MTQxNDFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDctMjAgIEt3YW5nIFl1
bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBVc2UgdGhlIG9yaWdpbmFs
IHRva2VuIHRvIGNyZWF0ZSBhbiBlbGVtZW50IGluICJyZWNvbnN0cnVjdCB0aGUgYWN0aXZlIGZv
cm1hdHRpbmcgZWxlbWVudHMiIGFuZCAiY2FsbCB0aGUgYWRvcHRpb24gYWdlbmN5IgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE3MDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGVkIHRlc3QgZXhw
ZWN0YXRpb24gZm9yIGh0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQKKyAgICAgICAgYmVjYXVz
ZSBub3cgcmVzb3VyY2VzL3NjcmlwdGVkL2Fkb3B0aW9uMDEuZGF0IHBhc3Nlcy4KKworICAgICAg
ICAqIGh0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQ6CisKIDIwMTItMDctMTggIEpvc2h1YSBC
ZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVkREI6IERpcmVjdGlv
biBwYXJhbWV0ZXIgaWdub3JlZCBieSBzb21lIG9wZW5DdXJzb3IoKSBvdmVybG9hZHMKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0CmluZGV4IDE5YzRiMWE2NWEwNDI5Nzk0
OGFiYjAyZTg0OTMzMmM0YjZiMmFiMTUuLmNkNWEyMGY5YWYyY2U4MDkwMDFhMzhmODA2YzM5MmRj
YjAwOGZiOTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLnR4dApAQCAt
NDMsMzMgKzQzLDYgQEAgcmVzb3VyY2VzL3RhYmxlczAxLmRhdDogUEFTUwogCiByZXNvdXJjZXMv
dHJpY2t5MDEuZGF0OiBQQVNTCiAKLXJlc291cmNlcy9zY3JpcHRlZC9hZG9wdGlvbjAxLmRhdDoK
LTEKLQotVGVzdCAxIG9mIDEgaW4gcmVzb3VyY2VzL3NjcmlwdGVkL2Fkb3B0aW9uMDEuZGF0IGZh
aWxlZC4gSW5wdXQ6Ci08cD48YiBpZD0iQSI+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiQSIpLmlkID0gIkIiPC9zY3JpcHQ+PC9wPlRFWFQ8L2I+Ci1Hb3Q6Ci18IDxodG1sPgotfCAg
IDxoZWFkPgotfCAgIDxib2R5PgotfCAgICAgPHA+Ci18ICAgICAgIDxiPgotfCAgICAgICAgIGlk
PSJCIgotfCAgICAgICAgIDxzY3JpcHQ+Ci18ICAgICAgICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIkEiKS5pZCA9ICJCIiIKLXwgICAgIDxiPgotfCAgICAgICBpZD0iQiIKLXwgICAgICAg
IlRFWFQiCi1FeHBlY3RlZDoKLXwgPGh0bWw+Ci18ICAgPGhlYWQ+Ci18ICAgPGJvZHk+Ci18ICAg
ICA8cD4KLXwgICAgICAgPGI+Ci18ICAgICAgICAgaWQ9IkIiCi18ICAgICAgICAgPHNjcmlwdD4K
LXwgICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQSIpLmlkID0gIkIiIgotfCAg
ICAgPGI+Ci18ICAgICAgIGlkPSJBIgotfCAgICAgICAiVEVYVCIKK3Jlc291cmNlcy9zY3JpcHRl
ZC9hZG9wdGlvbjAxLmRhdDogUEFTUworCiByZXNvdXJjZXMvc2NyaXB0ZWQvd2Via2l0MDEuZGF0
OiBQQVNTCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153658</attachid>
            <date>2012-07-21 01:16:25 -0700</date>
            <delta_ts>2012-07-23 05:22:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91703-20120721171618.patch</filename>
            <type>text/plain</type>
            <size>139536</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzY1NzhjYjQ5OGU0ZDll
ZTNlOWY0NTAwMDBiYjU0ODcwYTE1ZjQ5Mi4uYTg1MmM4MGE2NzA5MmEwYzMwN2YwYzg3YzE0NzM1
MzNlNGQwNjIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE0OCBAQAogMjAxMi0wNy0yMSAgS3dh
bmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0PgogCisgICAgICAgIFVzZSB0aGUgb3Jp
Z2luYWwgdG9rZW4gdG8gY3JlYXRlIGFuIGVsZW1lbnQgaW4gInJlY29uc3RydWN0IHRoZSBhY3Rp
dmUgZm9ybWF0dGluZyBlbGVtZW50cyIgYW5kICJjYWxsIHRoZSBhZG9wdGlvbiBhZ2VuY3kiCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTcwMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50
IFdlYktpdCBIVE1MNSBwYXJzZXIgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgaG9sZCB0aGUgb3Jp
Z2luYWwgdG9rZW4KKyAgICAgICAgaW4gdGhlIHN0YWNrIG9mIG9wZW4gZWxlbWVudHMgYW5kIHRo
ZSBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cy4gVGhpcyBpcworICAgICAgICBwcm9ibGVtYXRp
YyBiZWNhdXNlIHRoZSBvcmlnaW5hbCB0b2tlbiBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBlbGVtZW50
IGluCisgICAgICAgICJyZWNvbnN0cnVjdCB0aGUgYWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVudHMi
IGFuZCAiY2FsbCB0aGUgYWRvcHRpb24gYWdlbmN5Ii4KKworICAgICAgICBBcyBhIHdvcmthcm91
bmQsIFdlYktpdCB1c2VzIHRoZSBzYXZlZCBlbGVtZW50IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFs
IHRva2VuCisgICAgICAgIHRvIGNyZWF0ZSBhbiBlbGVtZW50LiBCdXQgdGhpcyBjYXVzZXMgdXMg
dG8gZmFpbCBleGFtcGxlcyBsaWtlIHRoaXM6CisgICAgICAgIDxiIGlkPSIxIj48cD48c2NyaXB0
PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIxIikuaWQgPSAiMiI8L3NjcmlwdD48L3A+VEVYVDwv
Yj4KKyAgICAgICAgcmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMgY2FsbHMg
dGhpcyBtZXRob2QgdG8gb3BlbiBhIHNlY29uZCA8Yj4KKyAgICAgICAgdGFnIHRvIHdyYXAgVEVY
VCwgaXQgd2lsbCBoYXZlIGlkICIyIiwgZXZlbiB0aG91Z2ggdGhlIEhUTUw1IHNwZWMgaW1wbGll
cyBpdAorICAgICAgICBzaG91bGQgYmUgIjEiLgorCisgICAgICAgIENyZWF0ZWQgYSByZWYtY291
bnRlZCBjb250YWluZXIgY2xhc3MsIEhUTUxTdGFja05vZGUgdG8gaG9sZCB0aGUgb3JpZ2luYWwg
dG9rZW4KKyAgICAgICAgYW5kIHRoZSBuYW1lc3BhY2UgVVJJIGFzIHdlbGwgYXMgdGhlIGVsZW1l
bnQuIENoYW5nZWQgSFRNTEVsZW1lbnRTdGFjayBhbmQKKyAgICAgICAgSFRNTEZvcm1hdHRpbmdF
bGVtZW50TGlzdCB0byB1c2UgSFRNTFN0YWNrTm9kZS4KKyAgICAgICAgQ2hhbmdlZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6cmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMgYW5k
CisgICAgICAgIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5IHRvIGNyZWF0
ZSBhbiBlbGVtZW50IGZyb20gdGhlIHNhdmVkIHRva2VuCisgICAgICAgIGluc3RlYWQgb2YgdGhl
IHNhdmVkIGVsZW1lbnQuCisKKyAgICAgICAgVXBkYXRlZCB0ZXN0IGV4cGVjdGF0aW9uIGZvciBo
dG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0CisgICAgICAgIGJlY2F1c2Ugbm93IHJlc291cmNl
cy9zY3JpcHRlZC9hZG9wdGlvbjAxLmRhdCBwYXNzZXMuCisKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbklu
dG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25Eb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uSFRNTEh0
bWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MSGVhZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydEhUTUxCb2R5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNj
cmlwdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydEZvcmVpZ25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpjcmVhdGVIVE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaDoKKyAg
ICAgICAgKEhUTUxDb25zdHJ1Y3Rpb25TaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjpjdXJyZW50RWxlbWVudFJlY29yZCk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTEVsZW1lbnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0bWxFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZUNvbW1vbik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEhlYWRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MQm9keUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRWxlbWVudFN0YWNrOjppbnNlcnRBYm92ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudFN0YWNrOjpwdXNoQ29tbW9uKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRWxlbWVu
dFN0YWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVj
b3JkOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1l
bnRSZWNvcmQ6Om5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxl
bWVudFJlY29yZDo6c3RhY2tOb2RlKToKKyAgICAgICAgKEVsZW1lbnRSZWNvcmQpOgorICAgICAg
ICAoSFRNTEVsZW1lbnRTdGFjayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRp
bmdFbGVtZW50TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0Ojpzd2FwVG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50
TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpF
bnRyeTo6RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dDo6RW50cnk6OmlzTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxl
bWVudExpc3Q6OkVudHJ5OjpzdGFja05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OnJlcGxhY2VFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpvcGVy
YXRvciE9KToKKyAgICAgICAgKEVudHJ5KToKKyAgICAgICAgKEhUTUxGb3JtYXR0aW5nRWxlbWVu
dExpc3QpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTdGFja05vZGUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhUTUxTdGFja05vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFN0YWNrTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdGFj
a05vZGU6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0YWNrTm9kZTo6bm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tOb2RlOjp0b2tlbik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU3RhY2tOb2RlOjpuYW1lc3BhY2VVUkkpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFN0YWNrTm9kZTo6SFRNTFN0YWNrTm9kZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRv
a2VuLmg6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OmNyZWF0ZSk6CisgICAg
ICAgIChBdG9taWNIVE1MVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2Vu
OjpBdG9taWNIVE1MVG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFj
dGVyVG9rZW5CdWZmZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjb25zdHJ1Y3RUcmVlRnJvbVRva2VuKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NEb2N0eXBlVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVN0YXJ0VGFnKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VFbmRUYWcpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1
dHRvblNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRl
c0ZvcklzaW5kZXhJbnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWcp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJ
bkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRU
YWdGb3JJblRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1N0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0h0
bWxTdGFydFRhZ0ZvckluQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0FueU90aGVyRW5kVGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluUm93KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQ2Vs
bCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJ
bkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFn
Rm9ySW5UYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NF
bmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ29tbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckJlZm9yZUhUTUwp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9yQmVmb3JlSGVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbkhlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5IZWFkTm9z
Y3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9yQWZ0
ZXJIZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnRm9ySW5IZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0dlbmVyaWNSQ0RBVEFTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUcmVlQnVpbGRlcjo6c2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNv
bnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwYXJzZUVycm9yKToK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaDoKKyAgICAgICAgKEhUTUxU
cmVlQnVpbGRlcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVs
ZW1lbnQpOgorCisyMDEyLTA3LTIxICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5u
ZXQ+CisKICAgICAgICAgQSBzdGFydCB0YWcgd2hvc2UgdGFnIG5hbWUgaXMgImh0bWwiIGluIHRo
ZSAiaW4gYm9keSIgaW5zZXJ0aW9uIG1vZGUgaXMgYSBwYXJzZSBlcnJvcgogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MTYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCmluZGV4IDk0
NTRmNWZkOWJjNTAzNjc0NGJlNWQ1NzMyMmU4YjEwMjliOWUzNWUuLmU2MmYxN2Q2ODgzNTA4YzJm
ODY3N2RiNjM5ODQyYTBmMjAxNTA5ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVk
ZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU3RhY2tOb2RlLmgiCiAjaW5j
bHVkZSAiSFRNTFRva2VuLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgogI2luY2x1ZGUg
IkxvY2FsaXplZFN0cmluZ3MuaCIKQEAgLTE5MiwzMyArMTkzLDMzIEBAIHZvaWQgSFRNTENvbnN0
cnVjdGlvblNpdGU6OmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVkZWQoKQog
ICAgICAgICBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEb2N1bWVudEVs
ZW1lbnRBdmFpbGFibGUoKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQg
SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0
b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgUmVmUHRyPEhUTUxIdG1sRWxlbWVudD4gZWxl
bWVudCA9IEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpOwotICAgIGVsZW1lbnQt
PnBhcnNlclNldEF0dHJpYnV0ZXModG9rZW4uYXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbik7CisgICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi0+
YXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgYXR0YWNo
TGF0ZXIobV9hdHRhY2htZW50Um9vdCwgZWxlbWVudCk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVz
aEhUTUxIdG1sRWxlbWVudChlbGVtZW50KTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEh0
bWxFbGVtZW50KEhUTUxTdGFja05vZGU6OmNyZWF0ZShlbGVtZW50LCB0b2tlbikpOwogCiAgICAg
ZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAgICAgZWxlbWVudC0+aW5zZXJ0ZWRCeVBhcnNlcigpOwog
ICAgIGRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVkZWQoKTsKIH0KIAotdm9p
ZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1l
bnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbiwgRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEF0b21p
Y0hUTUxUb2tlbiogdG9rZW4sIEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKHRva2VuLmF0
dHJpYnV0ZXMoKS5pc0VtcHR5KCkpCisgICAgaWYgKHRva2VuLT5hdHRyaWJ1dGVzKCkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogZWxlbWVu
dEF0dHJpYnV0ZURhdGEgPSBlbGVtZW50LT5lbnN1cmVBdHRyaWJ1dGVEYXRhKCk7CiAKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRlcygpLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgdG9rZW5BdHRyaWJ1dGUgPSB0b2tlbi5hdHRyaWJ1
dGVzKCkuYXQoaSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRva2VuLT5hdHRyaWJ1
dGVzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgQXR0cmlidXRlJiB0b2tlbkF0dHJp
YnV0ZSA9IHRva2VuLT5hdHRyaWJ1dGVzKCkuYXQoaSk7CiAgICAgICAgIGlmICghZWxlbWVudEF0
dHJpYnV0ZURhdGEtPmdldEF0dHJpYnV0ZUl0ZW0odG9rZW5BdHRyaWJ1dGUubmFtZSgpKSkKICAg
ICAgICAgICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0b2tlbkF0dHJpYnV0ZS5uYW1lKCksIHRv
a2VuQXR0cmlidXRlLnZhbHVlKCkpOwogICAgIH0KIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9k
eShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIC8vIEZyYWdtZW50cyBkbyBub3QgaGF2
ZSBhIHJvb3QgSFRNTCBlbGVtZW50LCBzbyBhbnkgYWRkaXRpb25hbCBIVE1MIGVsZW1lbnRzCiAg
ICAgLy8gZW5jb3VudGVyZWQgZHVyaW5nIGZyYWdtZW50IHBhcnNpbmcgc2hvdWxkIGJlIGlnbm9y
ZWQuCkBAIC0yMjgsMTYgKzIyOSwxNiBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgbWVy
Z2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQodG9rZW4sIG1fb3BlbkVsZW1lbnRzLmh0
bWxFbGVtZW50KCkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1M
Qm9keVN0YXJ0VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tl
biogdG9rZW4pCiB7CiAgICAgbWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQodG9r
ZW4sIG1fb3BlbkVsZW1lbnRzLmJvZHlFbGVtZW50KCkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBlKEF0b21pY0hUTUxUb2tlbiogdG9rZW4p
CiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RE9DVFlQRSk7
CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkRPQ1RZUEUpOwog
Ci0gICAgUmVmUHRyPERvY3VtZW50VHlwZT4gZG9jdHlwZSA9IERvY3VtZW50VHlwZTo6Y3JlYXRl
KG1fZG9jdW1lbnQsIHRva2VuLm5hbWUoKSwgU3RyaW5nOjphZG9wdCh0b2tlbi5wdWJsaWNJZGVu
dGlmaWVyKCkpLCBTdHJpbmc6OmFkb3B0KHRva2VuLnN5c3RlbUlkZW50aWZpZXIoKSkpOworICAg
IFJlZlB0cjxEb2N1bWVudFR5cGU+IGRvY3R5cGUgPSBEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2Rv
Y3VtZW50LCB0b2tlbi0+bmFtZSgpLCBTdHJpbmc6OmFkb3B0KHRva2VuLT5wdWJsaWNJZGVudGlm
aWVyKCkpLCBTdHJpbmc6OmFkb3B0KHRva2VuLT5zeXN0ZW1JZGVudGlmaWVyKCkpKTsKICAgICBh
dHRhY2hMYXRlcihtX2F0dGFjaG1lbnRSb290LCBkb2N0eXBlLnJlbGVhc2UoKSk7CiAKICAgICAv
LyBET0NUWVBFIG5vZGVzIGFyZSBvbmx5IHByb2Nlc3NlZCB3aGVuIHBhcnNpbmcgZnJhZ21lbnRz
IHcvbyBjb250ZXh0RWxlbWVudHMsIHdoaWNoCkBAIC0yNDksNyArMjUwLDcgQEAgdm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9jdHlwZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ICAgIGlmIChtX2lzUGFyc2luZ0ZyYWdtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
dG9rZW4uZm9yY2VRdWlya3MoKSkKKyAgICBpZiAodG9rZW4tPmZvcmNlUXVpcmtzKCkpCiAgICAg
ICAgIG1fZG9jdW1lbnQtPnNldENvbXBhdGliaWxpdHlNb2RlKERvY3VtZW50OjpRdWlya3NNb2Rl
KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBhY3R1YWxseSBhZGQgdGhlIERv
Y3R5cGUgbm9kZSB0byB0aGUgRE9NLgpAQCAtMjU4LDYxICsyNTksNjEgQEAgdm9pZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9jdHlwZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
IH0KIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudChBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVu
dChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0g
SFRNTFRva2VuVHlwZXM6OkNvbW1lbnQpOwotICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCks
IENvbW1lbnQ6OmNyZWF0ZShjdXJyZW50Tm9kZSgpLT5kb2N1bWVudCgpLCB0b2tlbi5jb21tZW50
KCkpKTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6Q29tbWVu
dCk7CisgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgQ29tbWVudDo6Y3JlYXRlKGN1cnJl
bnROb2RlKCktPmRvY3VtZW50KCksIHRva2VuLT5jb21tZW50KCkpKTsKIH0KIAotdm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnRPbkRvY3Vt
ZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9
PSBIVE1MVG9rZW5UeXBlczo6Q29tbWVudCk7Ci0gICAgYXR0YWNoTGF0ZXIobV9hdHRhY2htZW50
Um9vdCwgQ29tbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2VuLmNvbW1lbnQoKSkpOworICAg
IEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDb21tZW50KTsKKyAgICBh
dHRhY2hMYXRlcihtX2F0dGFjaG1lbnRSb290LCBDb21tZW50OjpjcmVhdGUobV9kb2N1bWVudCwg
dG9rZW4tPmNvbW1lbnQoKSkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQg
SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnRPbkhUTUxIdG1sRWxlbWVudChBdG9t
aWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRv
a2VuVHlwZXM6OkNvbW1lbnQpOworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tl
blR5cGVzOjpDb21tZW50KTsKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBtX29wZW5FbGVt
ZW50cy5yb290Tm9kZSgpOwotICAgIGF0dGFjaExhdGVyKHBhcmVudCwgQ29tbWVudDo6Y3JlYXRl
KHBhcmVudC0+ZG9jdW1lbnQoKSwgdG9rZW4uY29tbWVudCgpKSk7CisgICAgYXR0YWNoTGF0ZXIo
cGFyZW50LCBDb21tZW50OjpjcmVhdGUocGFyZW50LT5kb2N1bWVudCgpLCB0b2tlbi0+Y29tbWVu
dCgpKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIZWFkRWxl
bWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5zZXJ0SFRNTEhlYWRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgQVNT
RVJUKCFzaG91bGRGb3N0ZXJQYXJlbnQoKSk7CiAgICAgbV9oZWFkID0gY3JlYXRlSFRNTEVsZW1l
bnQodG9rZW4pOwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIG1faGVhZCk7Ci0gICAg
bV9vcGVuRWxlbWVudHMucHVzaEhUTUxIZWFkRWxlbWVudChtX2hlYWQpOworICAgIG1fb3BlbkVs
ZW1lbnRzLnB1c2hIVE1MSGVhZEVsZW1lbnQoSFRNTFN0YWNrTm9kZTo6Y3JlYXRlKG1faGVhZCwg
dG9rZW4pKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEJvZHlF
bGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbnNlcnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKICAgICBB
U1NFUlQoIXNob3VsZEZvc3RlclBhcmVudCgpKTsKICAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9
IGNyZWF0ZUhUTUxFbGVtZW50KHRva2VuKTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgp
LCBib2R5KTsKLSAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEJvZHlFbGVtZW50KGJvZHkucmVs
ZWFzZSgpKTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEJvZHlFbGVtZW50KEhUTUxTdGFj
a05vZGU6OmNyZWF0ZShib2R5LnJlbGVhc2UoKSwgdG9rZW4pKTsKIH0KIAotdm9pZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4sIGJvb2wgaXNEZW1vdGVkKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRN
TEZvcm1FbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4sIGJvb2wgaXNEZW1vdGVkKQogewog
ICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwog
ICAgIEFTU0VSVChlbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcpKTsKICAgICBtX2Zvcm0gPSBz
dGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxGb3JtRWxlbWVudD4oZWxlbWVudC5yZWxlYXNlKCkpOwog
ICAgIG1fZm9ybS0+c2V0RGVtb3RlZChpc0RlbW90ZWQpOwogICAgIGF0dGFjaExhdGVyKGN1cnJl
bnROb2RlKCksIG1fZm9ybSk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaChtX2Zvcm0pOworICAg
IG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrTm9kZTo6Y3JlYXRlKG1fZm9ybSwgdG9rZW4p
KTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEVsZW1lbnQoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhU
TUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgUmVmUHRyPEVsZW1lbnQ+
IGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgYXR0YWNoTGF0ZXIoY3Vy
cmVudE5vZGUoKSwgZWxlbWVudCk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaChlbGVtZW50LnJl
bGVhc2UoKSk7CisgICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tOb2RlOjpjcmVhdGUo
ZWxlbWVudC5yZWxlYXNlKCksIHRva2VuKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
K3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQo
QXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhU
TUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRN
TFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAgICAvLyBOb3JtYWxseSBIVE1MRWxlbWVudFN0YWNr
IGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGZpbmlzaFBhcnNpbmdDaGlsZHJlbiwKICAgICAv
LyBidXQgc2VsZi1jbG9zaW5nIGVsZW1lbnRzIGFyZSBuZXZlciBpbiB0aGUgZWxlbWVudCBzdGFj
ayBzbyB0aGUgc3RhY2sKICAgICAvLyBkb2Vzbid0IGdldCBhIGNoYW5jZSB0byB0ZWxsIHRoZW0g
dGhhdCB3ZSdyZSBkb25lIHBhcnNpbmcgdGhlaXIgY2hpbGRyZW4uCkBAIC0zMjEsMTYgKzMyMiwx
NiBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3Jn
L3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwj
YWNrbm93bGVkZ2Utc2VsZi1jbG9zaW5nLWZsYWcKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3Zv
aWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcm1hdHRpbmdFbGVtZW50KEF0b21pY0hU
TUxUb2tlbiogdG9rZW4pCiB7CiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dl
Yi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3RoZS1zdGFjay1vZi1v
cGVuLWVsZW1lbnRzCiAgICAgLy8gUG9zc2libGUgYWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVudHMg
aW5jbHVkZToKICAgICAvLyBhLCBiLCBiaWcsIGNvZGUsIGVtLCBmb250LCBpLCBub2JyLCBzLCBz
bWFsbCwgc3RyaWtlLCBzdHJvbmcsIHR0LCBhbmQgdS4KICAgICBpbnNlcnRIVE1MRWxlbWVudCh0
b2tlbik7Ci0gICAgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuYXBwZW5kKGN1cnJlbnRFbGVt
ZW50KCkpOworICAgIG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmFwcGVuZChjdXJyZW50RWxl
bWVudFJlY29yZCgpLT5zdGFja05vZGUoKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRN
TENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0
b2tlbikKIHsKICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3Vy
cmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI2FscmVhZHktc3RhcnRlZAogICAg
IC8vIGh0dHA6Ly9odG1sNS5vcmcvc3BlY3MvZG9tLXBhcnNpbmcuaHRtbCNkb20tcmFuZ2UtY3Jl
YXRlY29udGV4dHVhbGZyYWdtZW50CkBAIC0zNDEsMjAgKzM0MiwyMCBAQCB2b2lkIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgY29uc3QgYm9vbCBhbHJlYWR5U3RhcnRlZCA9IG1faXNQYXJzaW5nRnJhZ21lbnQgJiYg
cGFyc2VySW5zZXJ0ZWQ7CiAgICAgUmVmUHRyPEhUTUxTY3JpcHRFbGVtZW50PiBlbGVtZW50ID0g
SFRNTFNjcmlwdEVsZW1lbnQ6OmNyZWF0ZShzY3JpcHRUYWcsIGN1cnJlbnROb2RlKCktPmRvY3Vt
ZW50KCksIHBhcnNlckluc2VydGVkLCBhbHJlYWR5U3RhcnRlZCk7CiAgICAgaWYgKG1fZnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uICE9IERpc2FsbG93U2NyaXB0aW5nQ29udGVudCkKLSAgICAg
ICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi5hdHRyaWJ1dGVzKCksIG1fZnJh
Z21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAgICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0
cmlidXRlcyh0b2tlbi0+YXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
bik7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgZWxlbWVudCk7Ci0gICAgbV9vcGVu
RWxlbWVudHMucHVzaChlbGVtZW50LnJlbGVhc2UoKSk7CisgICAgbV9vcGVuRWxlbWVudHMucHVz
aChIVE1MU3RhY2tOb2RlOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNlKCksIHRva2VuKSk7CiB9CiAK
LXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcmVpZ25FbGVtZW50KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKQordm9pZCBI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9yZWlnbkVsZW1lbnQoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpCiB7Ci0gICAgQVNTRVJU
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOworICAgIEFTU0VSVCh0
b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsgLy8gcGFyc2VFcnJvciB3aGVuIHhtbG5zIG9yIHhtbG5zOnhsaW5rIGFyZSB3cm9u
Zy4KIAogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0b2tlbiwg
bmFtZXNwYWNlVVJJKTsKLSAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBlbGVtZW50LCB0
b2tlbi5zZWxmQ2xvc2luZygpKTsKLSAgICBpZiAoIXRva2VuLnNlbGZDbG9zaW5nKCkpCi0gICAg
ICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudC5yZWxlYXNlKCkpOworICAgIGF0dGFjaExh
dGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQsIHRva2VuLT5zZWxmQ2xvc2luZygpKTsKKyAgICBp
ZiAoIXRva2VuLT5zZWxmQ2xvc2luZygpKQorICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNoKEhU
TUxTdGFja05vZGU6OmNyZWF0ZShlbGVtZW50LnJlbGVhc2UoKSwgdG9rZW4sIG5hbWVzcGFjZVVS
SSkpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kZShjb25z
dCBTdHJpbmcmIGNoYXJhY3RlcnMsIFdoaXRlc3BhY2VNb2RlIHdoaXRlc3BhY2VNb2RlKQpAQCAt
Mzk4LDQ4ICszOTksMzQgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5v
ZGUoY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBXaGl0ZXNwYWNlTW8KICAgICB9CiB9CiAKLVBh
c3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUVsZW1lbnQoQXRv
bWljSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpCitQ
YXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50KEF0
b21pY0hUTUxUb2tlbiogdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKQog
ewotICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZShudWxsQXRvbSwgdG9rZW4ubmFtZSgpLCBuYW1l
c3BhY2VVUkkpOworICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZShudWxsQXRvbSwgdG9rZW4tPm5h
bWUoKSwgbmFtZXNwYWNlVVJJKTsKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGN1cnJl
bnROb2RlKCktPmRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgdHJ1ZSk7Ci0gICAg
ZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi5hdHRyaWJ1dGVzKCksIG1fZnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVz
KHRva2VuLT5hdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKICAg
ICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4gSFRN
TENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCitQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1M
RWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIFF1YWxpZmllZE5hbWUgdGFn
TmFtZShudWxsQXRvbSwgdG9rZW4ubmFtZSgpLCB4aHRtbE5hbWVzcGFjZVVSSSk7CisgICAgUXVh
bGlmaWVkTmFtZSB0YWdOYW1lKG51bGxBdG9tLCB0b2tlbi0+bmFtZSgpLCB4aHRtbE5hbWVzcGFj
ZVVSSSk7CiAgICAgLy8gRklYTUU6IFRoaXMgY2FuJ3QgdXNlIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjpjcmVhdGVFbGVtZW50IGJlY2F1c2Ugd2UKICAgICAvLyBoYXZlIHRvIHBhc3MgdGhlIGN1cnJl
bnQgZm9ybSBlbGVtZW50LiAgV2Ugc2hvdWxkIHJld29yayBmb3JtIGFzc29jaWF0aW9uCiAgICAg
Ly8gdG8gb2NjdXIgYWZ0ZXIgY29uc3RydWN0aW9uIHRvIGFsbG93IGJldHRlciBjb2RlIHNoYXJp
bmcgaGVyZS4KICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IEhUTUxFbGVtZW50RmFjdG9y
eTo6Y3JlYXRlSFRNTEVsZW1lbnQodGFnTmFtZSwgY3VycmVudE5vZGUoKS0+ZG9jdW1lbnQoKSwg
Zm9ybSgpLCB0cnVlKTsKLSAgICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLmF0
dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIGVsZW1lbnQt
PnBhcnNlclNldEF0dHJpYnV0ZXModG9rZW4tPmF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24pOwogICAgIEFTU0VSVChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpOwog
ICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnRGcm9tRWxlbWVudFJlY29yZChI
VE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiByZWNvcmQpCitQYXNzUmVmUHRyPEhUTUxT
dGFja05vZGU+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9r
ZW4oUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBub2RlKQogewotICAgIHJldHVybiBjcmVhdGVI
VE1MRWxlbWVudEZyb21TYXZlZEVsZW1lbnQocmVjb3JkLT5lbGVtZW50KCkpOwotfQotCi1QYXNz
UmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudEZy
b21TYXZlZEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBt
ZXRob2QgaXMgd3JvbmcuICBXZSBzaG91bGQgYmUgdXNpbmcgdGhlIG9yaWdpbmFsIHRva2VuLgot
ICAgIC8vIFVzaW5nIGFuIEVsZW1lbnQqIGNhdXNlcyB1cyB0byBmYWlsIGV4YW1wbGVzIGxpa2Ug
dGhpczoKLSAgICAvLyA8YiBpZD0iMSI+PHA+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiMSIpLmlkID0gIjIiPC9zY3JpcHQ+PC9wPlRFWFQ8L2I+Ci0gICAgLy8gV2hlbiByZWNvbnN0
cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyBjYWxscyB0aGlzIG1ldGhvZCB0byBvcGVu
Ci0gICAgLy8gYSBzZWNvbmQgPGI+IHRhZyB0byB3cmFwIFRFWFQsIGl0IHdpbGwgaGF2ZSBpZCAi
MiIsIGV2ZW4gdGhvdWdoIHRoZSBIVE1MNQotICAgIC8vIHNwZWMgaW1wbGllcyBpdCBzaG91bGQg
YmUgIjEiLiAgTWluZWZpZWxkIG1hdGNoZXMgdGhlIEhUTUw1IHNwZWMgaGVyZS4KLQotICAgIEFT
U0VSVChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpOyAvLyBvdGhlcndpc2UgbG9jYWxOYW1lKCkg
bWlnaHQgYmUgd3JvbmcuCi0KLSAgICBWZWN0b3I8QXR0cmlidXRlPiBjbG9uZWRBdHRyaWJ1dGVz
OwotICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQt
PnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkpCi0gICAgICAgIGNsb25lZEF0dHJpYnV0ZXMgPSBhdHRy
aWJ1dGVEYXRhLT5jbG9uZWRBdHRyaWJ1dGVWZWN0b3IoKTsKLQotICAgIEF0b21pY0hUTUxUb2tl
biBmYWtlVG9rZW4oSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCBlbGVtZW50LT5sb2NhbE5hbWUo
KSwgY2xvbmVkQXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxFbGVtZW50KGZha2VU
b2tlbik7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQ7CisgICAgaWYgKG5vZGUtPm5hbWVz
cGFjZVVSSSgpID09IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpCisgICAgICAgIGVsZW1l
bnQgPSBjcmVhdGVIVE1MRWxlbWVudChub2RlLT50b2tlbigpKTsKKyAgICBlbHNlCisgICAgICAg
IGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KG5vZGUtPnRva2VuKCksIG5vZGUtPm5hbWVzcGFjZVVS
SSgpKTsKKyAgICByZXR1cm4gSFRNTFN0YWNrTm9kZTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgp
LCBub2RlLT50b2tlbigpLCBub2RlLT5uYW1lc3BhY2VVUkkoKSk7CiB9CiAKIGJvb2wgSFRNTENv
bnN0cnVjdGlvblNpdGU6OmluZGV4T2ZGaXJzdFVub3BlbkZvcm1hdHRpbmdFbGVtZW50KHVuc2ln
bmVkJiBmaXJzdFVub3BlbkVsZW1lbnRJbmRleCkgY29uc3QKQEAgLTQ2OSwxMCArNDU2LDEwIEBA
IHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGlu
Z0VsZW1lbnRzKCkKICAgICBBU1NFUlQodW5vcGVuRW50cnlJbmRleCA8IG1fYWN0aXZlRm9ybWF0
dGluZ0VsZW1lbnRzLnNpemUoKSk7CiAgICAgZm9yICg7IHVub3BlbkVudHJ5SW5kZXggPCBtX2Fj
dGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5zaXplKCk7ICsrdW5vcGVuRW50cnlJbmRleCkgewogICAg
ICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeSYgdW5vcGVuZWRFbnRyeSA9IG1f
YWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmF0KHVub3BlbkVudHJ5SW5kZXgpOwotICAgICAgICBS
ZWZQdHI8RWxlbWVudD4gcmVjb25zdHJ1Y3RlZCA9IGNyZWF0ZUhUTUxFbGVtZW50RnJvbVNhdmVk
RWxlbWVudCh1bm9wZW5lZEVudHJ5LmVsZW1lbnQoKSk7Ci0gICAgICAgIGF0dGFjaExhdGVyKGN1
cnJlbnROb2RlKCksIHJlY29uc3RydWN0ZWQpOwotICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNo
KHJlY29uc3RydWN0ZWQucmVsZWFzZSgpKTsKLSAgICAgICAgdW5vcGVuZWRFbnRyeS5yZXBsYWNl
RWxlbWVudChjdXJyZW50RWxlbWVudCgpKTsKKyAgICAgICAgUmVmUHRyPEhUTUxTdGFja05vZGU+
IHJlY29uc3RydWN0ZWQgPSBjcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4odW5vcGVuZWRFbnRy
eS5zdGFja05vZGUoKSk7CisgICAgICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIHJlY29u
c3RydWN0ZWQtPm5vZGUoKSk7CisgICAgICAgIG1fb3BlbkVsZW1lbnRzLnB1c2gocmVjb25zdHJ1
Y3RlZCk7CisgICAgICAgIHVub3BlbmVkRW50cnkucmVwbGFjZUVsZW1lbnQocmVjb25zdHJ1Y3Rl
ZC5yZWxlYXNlKCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgKaW5kZXggMzY3YzBmZTI2ODU2YmY3NmQxZDRlNjg0
MmE2ZmNlMWQ5NWZiM2NhMS4uYWQ4ZWJjNzdkMWNlMjQ3YWQ0NjcyMjRjZWIzMTNkNGEwNDY0ZDkx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlv
blNpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9u
U2l0ZS5oCkBAIC04NywyNiArODcsMjYgQEAgcHVibGljOgogICAgIHZvaWQgZGV0YWNoKCk7CiAg
ICAgdm9pZCBleGVjdXRlUXVldWVkVGFza3MoKTsKIAotICAgIHZvaWQgaW5zZXJ0RG9jdHlwZShB
dG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGluc2VydENvbW1lbnQoQXRvbWljSFRNTFRva2Vu
Jik7Ci0gICAgdm9pZCBpbnNlcnRDb21tZW50T25Eb2N1bWVudChBdG9taWNIVE1MVG9rZW4mKTsK
LSAgICB2b2lkIGluc2VydENvbW1lbnRPbkhUTUxIdG1sRWxlbWVudChBdG9taWNIVE1MVG9rZW4m
KTsKLSAgICB2b2lkIGluc2VydEhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZv
aWQgaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2
b2lkIGluc2VydEZvcm1hdHRpbmdFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQg
aW5zZXJ0SFRNTEhlYWRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0
SFRNTEJvZHlFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0SFRNTEZv
cm1FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYsIGJvb2wgaXNEZW1vdGVkID0gZmFsc2UpOwotICAg
IHZvaWQgaW5zZXJ0U2NyaXB0RWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIGlu
c2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBpbnNlcnRDb21tZW50KEF0
b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgaW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoQXRvbWlj
SFRNTFRva2VuKik7CisgICAgdm9pZCBpbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoQXRv
bWljSFRNTFRva2VuKik7CisgICAgdm9pZCBpbnNlcnRIVE1MRWxlbWVudChBdG9taWNIVE1MVG9r
ZW4qKTsKKyAgICB2b2lkIGluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRv
a2VuKik7CisgICAgdm9pZCBpbnNlcnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNIVE1MVG9rZW4q
KTsKKyAgICB2b2lkIGluc2VydEhUTUxIZWFkRWxlbWVudChBdG9taWNIVE1MVG9rZW4qKTsKKyAg
ICB2b2lkIGluc2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lk
IGluc2VydEhUTUxGb3JtRWxlbWVudChBdG9taWNIVE1MVG9rZW4qLCBib29sIGlzRGVtb3RlZCA9
IGZhbHNlKTsKKyAgICB2b2lkIGluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7
CiAgICAgdm9pZCBpbnNlcnRUZXh0Tm9kZShjb25zdCBTdHJpbmcmLCBXaGl0ZXNwYWNlTW9kZSA9
IFdoaXRlc3BhY2VVbmtub3duKTsKLSAgICB2b2lkIGluc2VydEZvcmVpZ25FbGVtZW50KEF0b21p
Y0hUTUxUb2tlbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKTsKKyAgICB2b2lk
IGluc2VydEZvcmVpZ25FbGVtZW50KEF0b21pY0hUTUxUb2tlbiosIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZXNwYWNlVVJJKTsKIAotICAgIHZvaWQgaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9y
ZUhUTUwoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBpbnNlcnRIVE1MSHRtbFN0YXJ0VGFn
SW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0SFRNTEJvZHlTdGFydFRh
Z0luQm9keShBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIGluc2VydEhUTUxIdG1sU3RhcnRU
YWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgaW5zZXJ0SFRNTEh0bWxT
dGFydFRhZ0luQm9keShBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIGluc2VydEhUTUxCb2R5
U3RhcnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuKik7CiAKLSAgICBQYXNzUmVmUHRyPEVsZW1l
bnQ+IGNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIFBhc3NSZWZQdHI8
RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1lbnRGcm9tRWxlbWVudFJlY29yZChIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkKik7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVIVE1M
RWxlbWVudChBdG9taWNIVE1MVG9rZW4qKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+
IGNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbihQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsK
IAogICAgIGJvb2wgc2hvdWxkRm9zdGVyUGFyZW50KCkgY29uc3Q7CiAgICAgdm9pZCBmb3N0ZXJQ
YXJlbnQoUGFzc1JlZlB0cjxOb2RlPik7CkBAIC0xMTgsNiArMTE4LDcgQEAgcHVibGljOgogICAg
IHZvaWQgZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24oY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lKTsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX29w
ZW5FbGVtZW50cy5zdGFja0RlcHRoKCk7IH0KKyAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
UmVjb3JkKiBjdXJyZW50RWxlbWVudFJlY29yZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkVsZW1l
bnRzLnRvcFJlY29yZCgpOyB9CiAgICAgRWxlbWVudCogY3VycmVudEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX29wZW5FbGVtZW50cy50b3AoKTsgfQogICAgIENvbnRhaW5lck5vZGUqIGN1cnJl
bnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuRWxlbWVudHMudG9wTm9kZSgpOyB9CiAgICAg
RWxlbWVudCogb25lQmVsb3dUb3AoKSBjb25zdCB7IHJldHVybiBtX29wZW5FbGVtZW50cy5vbmVC
ZWxvd1RvcCgpOyB9CkBAIC0xNjAsMTAgKzE2MSw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZp
bmRGb3N0ZXJTaXRlKEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYpOwogCi0gICAgUGFzc1JlZlB0
cjxFbGVtZW50PiBjcmVhdGVIVE1MRWxlbWVudEZyb21TYXZlZEVsZW1lbnQoRWxlbWVudCopOwot
ICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlRWxlbWVudChBdG9taWNIVE1MVG9rZW4mLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50
PiBjcmVhdGVFbGVtZW50KEF0b21pY0hUTUxUb2tlbiosIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZXNwYWNlVVJJKTsKIAotICAgIHZvaWQgbWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1l
bnQoQXRvbWljSFRNTFRva2VuJiwgRWxlbWVudCopOworICAgIHZvaWQgbWVyZ2VBdHRyaWJ1dGVz
RnJvbVRva2VuSW50b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuKiwgRWxlbWVudCopOwogICAgIHZv
aWQgZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5lZWRlZCgpOwogCiAgICAgRG9j
dW1lbnQqIG1fZG9jdW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRWxlbWVudFN0YWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxF
bGVtZW50U3RhY2suY3BwCmluZGV4IGNkNWQwOGE1NTNlZGM4NDczNTYxYTE2MWVlMWE5NzRhMjdm
NjAzYzMuLmZmNzBhYzIxZjUxYTRlMmQxODg1OTM3M2FmYjRhOTAzOGM2ZmQxNDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCkBAIC0xMjUs
NyArMTI1LDcgQEAgaW5saW5lIGJvb2wgaXNTZWxlY3RTY29wZU1hcmtlcihDb250YWluZXJOb2Rl
KiBub2RlKQogCiB9CiAKLUhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OkVsZW1lbnRS
ZWNvcmQoUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlLCBQYXNzT3duUHRyPEVsZW1lbnRS
ZWNvcmQ+IG5leHQpCitIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVj
b3JkKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSwgUGFzc093blB0cjxFbGVtZW50UmVj
b3JkPiBuZXh0KQogICAgIDogbV9ub2RlKG5vZGUpCiAgICAgLCBtX25leHQobmV4dCkKIHsKQEAg
LTEzNiwxMiArMTM2LDEyIEBAIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6On5FbGVt
ZW50UmVjb3JkKCkKIHsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3Jk
OjpyZXBsYWNlRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit2b2lkIEhUTUxF
bGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8SFRN
TFN0YWNrTm9kZT4gbm9kZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgQVNTRVJUKCFt
X25vZGUgfHwgbV9ub2RlLT5pc0VsZW1lbnROb2RlKCkpOworICAgIEFTU0VSVChub2RlKTsKKyAg
ICBBU1NFUlQoIW1fbm9kZSB8fCBtX25vZGUtPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKTsKICAg
ICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgY2FsbCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4/Ci0gICAg
bV9ub2RlID0gZWxlbWVudDsKKyAgICBtX25vZGUgPSBub2RlOwogfQogCiBib29sIEhUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OmlzQWJvdmUoRWxlbWVudFJlY29yZCogb3RoZXIpIGNv
bnN0CkBAIC0zMDcsNjIgKzMwNyw2MiBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnBvcFVudGls
Rm9yZWlnbkNvbnRlbnRTY29wZU1hcmtlcigpCiAgICAgICAgIHBvcCgpOwogfQogICAgIAotdm9p
ZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoUm9vdE5vZGUoUGFzc1JlZlB0cjxDb250YWluZXJOb2Rl
PiByb290Tm9kZSkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaFJvb3ROb2RlKFBhc3NSZWZQ
dHI8SFRNTFN0YWNrTm9kZT4gcm9vdE5vZGUpCiB7Ci0gICAgQVNTRVJUKHJvb3ROb2RlLT5ub2Rl
VHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpOworICAgIEFTU0VSVChyb290
Tm9kZS0+bm9kZSgpLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUp
OwogICAgIHB1c2hSb290Tm9kZUNvbW1vbihyb290Tm9kZSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1l
bnRTdGFjazo6cHVzaEhUTUxIdG1sRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQp
Cit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQoUGFzc1JlZlB0cjxI
VE1MU3RhY2tOb2RlPiBub2RlKQogewotICAgIEFTU0VSVChlbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aHRtbFRhZykpOwotICAgIHB1c2hSb290Tm9kZUNvbW1vbihlbGVtZW50KTsKKyAg
ICBBU1NFUlQobm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykp
OworICAgIHB1c2hSb290Tm9kZUNvbW1vbihub2RlKTsKIH0KICAgICAKLXZvaWQgSFRNTEVsZW1l
bnRTdGFjazo6cHVzaFJvb3ROb2RlQ29tbW9uKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gcm9v
dE5vZGUpCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZUNvbW1vbihQYXNzUmVm
UHRyPEhUTUxTdGFja05vZGU+IHJvb3ROb2RlKQogewogICAgIEFTU0VSVCghbV90b3ApOwogICAg
IEFTU0VSVCghbV9yb290Tm9kZSk7Ci0gICAgbV9yb290Tm9kZSA9IHJvb3ROb2RlLmdldCgpOwor
ICAgIG1fcm9vdE5vZGUgPSByb290Tm9kZS0+bm9kZSgpOwogICAgIHB1c2hDb21tb24ocm9vdE5v
ZGUpOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSGVhZEVsZW1lbnQoUGFz
c1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRN
TEhlYWRFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkKIHsKLSAgICBBU1NF
UlQoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKTsKKyAgICBBU1NFUlQo
bm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpOwogICAgIEFT
U0VSVCghbV9oZWFkRWxlbWVudCk7Ci0gICAgbV9oZWFkRWxlbWVudCA9IGVsZW1lbnQuZ2V0KCk7
Ci0gICAgcHVzaENvbW1vbihlbGVtZW50KTsKKyAgICBtX2hlYWRFbGVtZW50ID0gbm9kZS0+ZWxl
bWVudCgpOworICAgIHB1c2hDb21tb24obm9kZSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFj
azo6cHVzaEhUTUxCb2R5RWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit2b2lk
IEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3Rh
Y2tOb2RlPiBub2RlKQogewotICAgIEFTU0VSVChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6Ym9keVRhZykpOworICAgIEFTU0VSVChub2RlLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpib2R5VGFnKSk7CiAgICAgQVNTRVJUKCFtX2JvZHlFbGVtZW50KTsKLSAgICBtX2Jv
ZHlFbGVtZW50ID0gZWxlbWVudC5nZXQoKTsKLSAgICBwdXNoQ29tbW9uKGVsZW1lbnQpOworICAg
IG1fYm9keUVsZW1lbnQgPSBub2RlLT5lbGVtZW50KCk7CisgICAgcHVzaENvbW1vbihub2RlKTsK
IH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxl
bWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaChQYXNzUmVmUHRyPEhUTUxTdGFja05v
ZGU+IG5vZGUpCiB7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aHRtbFRhZykpOwotICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omhl
YWRUYWcpKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5
VGFnKSk7CisgICAgQVNTRVJUKCFub2RlLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpodG1sVGFnKSk7CisgICAgQVNTRVJUKCFub2RlLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpoZWFkVGFnKSk7CisgICAgQVNTRVJUKCFub2RlLT5lbGVtZW50KCktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpib2R5VGFnKSk7CiAgICAgQVNTRVJUKG1fcm9vdE5vZGUpOwotICAgIHB1
c2hDb21tb24oZWxlbWVudCk7CisgICAgcHVzaENvbW1vbihub2RlKTsKIH0KIAotdm9pZCBIVE1M
RWxlbWVudFN0YWNrOjppbnNlcnRBYm92ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIEVs
ZW1lbnRSZWNvcmQqIHJlY29yZEJlbG93KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjppbnNlcnRB
Ym92ZShQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+IG5vZGUsIEVsZW1lbnRSZWNvcmQqIHJlY29y
ZEJlbG93KQogewotICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBBU1NFUlQobm9kZSk7CiAgICAg
QVNTRVJUKHJlY29yZEJlbG93KTsKICAgICBBU1NFUlQobV90b3ApOwotICAgIEFTU0VSVCghZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKLSAgICBBU1NFUlQoIWVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSk7Ci0gICAgQVNTRVJUKCFlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOworICAgIEFTU0VSVCghbm9kZS0+ZWxl
bWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpOworICAgIEFTU0VSVCghbm9k
ZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpOworICAgIEFTU0VS
VCghbm9kZS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOwogICAg
IEFTU0VSVChtX3Jvb3ROb2RlKTsKICAgICBpZiAocmVjb3JkQmVsb3cgPT0gbV90b3ApIHsKLSAg
ICAgICAgcHVzaChlbGVtZW50KTsKKyAgICAgICAgcHVzaChub2RlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6aW5z
ZXJ0QWJvdmUoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBFbGVtZW50UmVjb3JkKiByCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBtX3N0YWNrRGVwdGgrKzsKLSAgICAgICAg
cmVjb3JkQWJvdmUtPnNldE5leHQoYWRvcHRQdHIobmV3IEVsZW1lbnRSZWNvcmQoZWxlbWVudCwg
cmVjb3JkQWJvdmUtPnJlbGVhc2VOZXh0KCkpKSk7CisgICAgICAgIHJlY29yZEFib3ZlLT5zZXRO
ZXh0KGFkb3B0UHRyKG5ldyBFbGVtZW50UmVjb3JkKG5vZGUsIHJlY29yZEFib3ZlLT5yZWxlYXNl
TmV4dCgpKSkpOwogICAgICAgICByZWNvcmRBYm92ZS0+bmV4dCgpLT5lbGVtZW50KCktPmJlZ2lu
UGFyc2luZ0NoaWxkcmVuKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01NjcsNyArNTY3
LDcgQEAgQ29udGFpbmVyTm9kZSogSFRNTEVsZW1lbnRTdGFjazo6cm9vdE5vZGUoKSBjb25zdAog
ICAgIHJldHVybiBtX3Jvb3ROb2RlOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hD
b21tb24oUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlKQordm9pZCBIVE1MRWxlbWVudFN0
YWNrOjpwdXNoQ29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkKIHsKICAgICBB
U1NFUlQobV9yb290Tm9kZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxFbGVtZW50U3RhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxF
bGVtZW50U3RhY2suaAppbmRleCBmN2JhYTM2NDQ3YjA3ZDUyOGYzZTI3NzMzMjRjODE0MmU5MTQx
Zjg4Li4zNDkxODViOTdlNDNmYjUwMDU1NWUxMzViNDljYTI5MmQ4NDFlY2JiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5oCkBAIC0yOSw2ICsyOSw3
IEBACiAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5j
bHVkZSAiSFRNTFN0YWNrTm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNTUsMjMg
KzU2LDI0IEBAIHB1YmxpYzoKICAgICBwdWJsaWM6CiAgICAgICAgIH5FbGVtZW50UmVjb3JkKCk7
IC8vIFB1YmxpYyBmb3IgflBhc3NPd25QdHIoKQogICAgIAotICAgICAgICBFbGVtZW50KiBlbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG1fbm9kZS5nZXQoKSk7IH0KLSAgICAgICAg
Q29udGFpbmVyTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQotICAg
ICAgICB2b2lkIHJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOworICAgICAgICBF
bGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLT5lbGVtZW50KCk7IH0KKyAg
ICAgICAgQ29udGFpbmVyTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS0+bm9kZSgp
OyB9CisgICAgICAgIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gc3RhY2tOb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9ub2RlOyB9CisKKyAgICAgICAgdm9pZCByZXBsYWNlRWxlbWVudChQYXNzUmVm
UHRyPEhUTUxTdGFja05vZGU+KTsKIAogICAgICAgICBib29sIGlzQWJvdmUoRWxlbWVudFJlY29y
ZCopIGNvbnN0OwogCiAgICAgICAgIEVsZW1lbnRSZWNvcmQqIG5leHQoKSBjb25zdCB7IHJldHVy
biBtX25leHQuZ2V0KCk7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBI
VE1MRWxlbWVudFN0YWNrOwogCi0gICAgICAgIEVsZW1lbnRSZWNvcmQoUGFzc1JlZlB0cjxDb250
YWluZXJOb2RlPiwgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPik7CisgICAgICAgIEVsZW1lbnRS
ZWNvcmQoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiwgUGFzc093blB0cjxFbGVtZW50UmVjb3Jk
Pik7CiAKICAgICAgICAgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPiByZWxlYXNlTmV4dCgpIHsg
cmV0dXJuIG1fbmV4dC5yZWxlYXNlKCk7IH0KICAgICAgICAgdm9pZCBzZXROZXh0KFBhc3NPd25Q
dHI8RWxlbWVudFJlY29yZD4gbmV4dCkgeyBtX25leHQgPSBuZXh0OyB9CiAKLSAgICAgICAgUmVm
UHRyPENvbnRhaW5lck5vZGU+IG1fbm9kZTsKKyAgICAgICAgUmVmUHRyPEhUTUxTdGFja05vZGU+
IG1fbm9kZTsKICAgICAgICAgT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG1fbmV4dDsKICAgICB9Owog
CkBAIC05NywxMyArOTksMTMgQEAgcHVibGljOgogICAgIEVsZW1lbnRSZWNvcmQqIGZpbmQoRWxl
bWVudCopIGNvbnN0OwogICAgIEVsZW1lbnRSZWNvcmQqIHRvcG1vc3QoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lKSBjb25zdDsKIAotICAgIHZvaWQgaW5zZXJ0QWJvdmUoUGFzc1JlZlB0cjxF
bGVtZW50PiwgRWxlbWVudFJlY29yZCopOworICAgIHZvaWQgaW5zZXJ0QWJvdmUoUGFzc1JlZlB0
cjxIVE1MU3RhY2tOb2RlPiwgRWxlbWVudFJlY29yZCopOwogCi0gICAgdm9pZCBwdXNoKFBhc3NS
ZWZQdHI8RWxlbWVudD4pOwotICAgIHZvaWQgcHVzaFJvb3ROb2RlKFBhc3NSZWZQdHI8Q29udGFp
bmVyTm9kZT4pOwotICAgIHZvaWQgcHVzaEhUTUxIdG1sRWxlbWVudChQYXNzUmVmUHRyPEVsZW1l
bnQ+KTsKLSAgICB2b2lkIHB1c2hIVE1MSGVhZEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7
Ci0gICAgdm9pZCBwdXNoSFRNTEJvZHlFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOworICAg
IHZvaWQgcHVzaChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsKKyAgICB2b2lkIHB1c2hSb290
Tm9kZShQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsKKyAgICB2b2lkIHB1c2hIVE1MSHRtbEVs
ZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPik7CisgICAgdm9pZCBwdXNoSFRNTEhlYWRF
bGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4pOworICAgIHZvaWQgcHVzaEhUTUxCb2R5
RWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFja05vZGU+KTsKIAogICAgIHZvaWQgcG9wKCk7CiAg
ICAgdm9pZCBwb3BVbnRpbChjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwpAQCAtMTU2LDgg
KzE1OCw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIHZvaWQgcHVzaENvbW1v
bihQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+KTsKLSAgICB2b2lkIHB1c2hSb290Tm9kZUNvbW1v
bihQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+KTsKKyAgICB2b2lkIHB1c2hDb21tb24oUGFzc1Jl
ZlB0cjxIVE1MU3RhY2tOb2RlPik7CisgICAgdm9pZCBwdXNoUm9vdE5vZGVDb21tb24oUGFzc1Jl
ZlB0cjxIVE1MU3RhY2tOb2RlPik7CiAgICAgdm9pZCBwb3BDb21tb24oKTsKICAgICB2b2lkIHJl
bW92ZU5vblRvcENvbW1vbihFbGVtZW50Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKaW5kZXggMDE0NWRl
MGU2ZjM5ZTAxOTAwYzI0MTViNDdkOWU2NTdhNTIxZWRmMS4uMWM1M2JjYzczMTc0MzIzODM1OTI1
NDZkZjcxMzViYzUwMjUzOGRmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKQEAgLTg3LDI1ICs4NywyNyBA
QCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpCb29rbWFyayBIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0Ojpib29rbWFya0ZvcihFbGVtZQogICAgIHJldHVybiBCb29rbWFyaygmYXQoaW5kZXgp
KTsKIH0KIAotdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpzd2FwVG8oRWxlbWVudCog
b2xkRWxlbWVudCwgRWxlbWVudCogbmV3RWxlbWVudCwgY29uc3QgQm9va21hcmsmIGJvb2ttYXJr
KQordm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpzd2FwVG8oRWxlbWVudCogb2xkRWxl
bWVudCwgUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBwcnBOZXdOb2RlLCBjb25zdCBCb29rbWFy
ayYgYm9va21hcmspCiB7CisgICAgUmVmUHRyPEhUTUxTdGFja05vZGU+IG5ld05vZGUgPSBwcnBO
ZXdOb2RlOworCiAgICAgQVNTRVJUKGNvbnRhaW5zKG9sZEVsZW1lbnQpKTsKLSAgICBBU1NFUlQo
IWNvbnRhaW5zKG5ld0VsZW1lbnQpKTsKKyAgICBBU1NFUlQoIWNvbnRhaW5zKG5ld05vZGUtPmVs
ZW1lbnQoKSkpOwogICAgIGlmICghYm9va21hcmsuaGFzQmVlbk1vdmVkKCkpIHsKICAgICAgICAg
QVNTRVJUKGJvb2ttYXJrLm1hcmsoKS0+ZWxlbWVudCgpID09IG9sZEVsZW1lbnQpOwotICAgICAg
ICBib29rbWFyay5tYXJrKCktPnJlcGxhY2VFbGVtZW50KG5ld0VsZW1lbnQpOworICAgICAgICBi
b29rbWFyay5tYXJrKCktPnJlcGxhY2VFbGVtZW50KG5ld05vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIHNpemVfdCBpbmRleCA9IGJvb2ttYXJrLm1hcmsoKSAtIGZpcnN0KCk7CiAg
ICAgQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKLSAgICBtX2VudHJpZXMuaW5zZXJ0KGluZGV4ICsg
MSwgbmV3RWxlbWVudCk7CisgICAgbV9lbnRyaWVzLmluc2VydChpbmRleCArIDEsIG5ld05vZGUp
OwogICAgIHJlbW92ZShvbGRFbGVtZW50KTsKIH0KIAotdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0OjphcHBlbmQoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTEZvcm1hdHRpbmdFbGVt
ZW50TGlzdDo6YXBwZW5kKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbm9kZSkKIHsKLSAgICBl
bnN1cmVOb2Foc0Fya0NvbmRpdGlvbihlbGVtZW50KTsKLSAgICBtX2VudHJpZXMuYXBwZW5kKGVs
ZW1lbnQpOworICAgIGVuc3VyZU5vYWhzQXJrQ29uZGl0aW9uKG5vZGUtPmVsZW1lbnQoKSk7Cisg
ICAgbV9lbnRyaWVzLmFwcGVuZChub2RlKTsKIH0KIAogdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0OjpyZW1vdmUoRWxlbWVudCogZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaAppbmRleCA3OWZlMmZm
Mzc1NzU1MGU0ZDNhZThlNTI4ZTEzZDkwNTVkZDE3OTg0Li4yZjdkYjlmOTFkNTBhODEzZGE0Zjhh
NjBkYTVlNDY5YTdiOGY1NmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZu
ZGVmIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3RfaAogI2RlZmluZSBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0X2gKIAorI2luY2x1ZGUgIkhUTUxTdGFja05vZGUuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkBAIC00NywzNSArNDgsMzUgQEAgcHVibGljOgogICAgIGNsYXNzIEVudHJ5IHsKICAgICBw
dWJsaWM6CiAgICAgICAgIC8vIElubGluZSBiZWNhdXNlIHRoZXkncmUgaG90IGFuZCBWZWN0b3I8
VD4gdXNlcyB0aGVtLgotICAgICAgICBleHBsaWNpdCBFbnRyeShFbGVtZW50KiBlbGVtZW50KQot
ICAgICAgICAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgZXhwbGljaXQgRW50cnko
UGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBub2RlKQorICAgICAgICAgICAgOiBtX25vZGUobm9k
ZSkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQpOwogICAgICAgICB9CiAg
ICAgICAgIGVudW0gTWFya2VyRW50cnlUeXBlIHsgTWFya2VyRW50cnkgfTsKICAgICAgICAgRW50
cnkoTWFya2VyRW50cnlUeXBlKQotICAgICAgICAgICAgOiBtX2VsZW1lbnQoMCkKKyAgICAgICAg
ICAgIDogbV9ub2RlKDApCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICB+RW50cnkoKSB7
fQogCi0gICAgICAgIGJvb2wgaXNNYXJrZXIoKSBjb25zdCB7IHJldHVybiAhbV9lbGVtZW50OyB9
CisgICAgICAgIGJvb2wgaXNNYXJrZXIoKSBjb25zdCB7IHJldHVybiAhbV9ub2RlOyB9CiAKKyAg
ICAgICAgUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBzdGFja05vZGUoKSBjb25zdCB7IHJldHVy
biBtX25vZGU7IH0KICAgICAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0CiAgICAgICAgIHsK
LSAgICAgICAgICAgIC8vIFRoZSBmYWN0IHRoYXQgIW1fZWxlbWVudCA9PSBpc01hcmtlcigpIGlz
IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbAorICAgICAgICAgICAgLy8gVGhlIGZhY3QgdGhhdCAh
bV9ub2RlID09IGlzTWFya2VyKCkgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsCiAgICAgICAg
ICAgICAvLyBjYWxsZXJzIHNob3VsZCBjaGVjayBpc01hcmtlcigpIGJlZm9yZSBjYWxsaW5nIGVs
ZW1lbnQoKS4KLSAgICAgICAgICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgICAgICAgICAgcmV0
dXJuIG1fZWxlbWVudC5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChtX25vZGUpOworICAgICAg
ICAgICAgcmV0dXJuIG1fbm9kZS0+ZWxlbWVudCgpOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQg
cmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KSB7IG1fZWxlbWVudCA9
IGVsZW1lbnQ7IH0KKyAgICAgICAgdm9pZCByZXBsYWNlRWxlbWVudChQYXNzUmVmUHRyPEhUTUxT
dGFja05vZGU+IG5vZGUpIHsgbV9ub2RlID0gbm9kZTsgfQogCiAgICAgICAgIC8vIE5lZWRlZCBm
b3IgdXNlIHdpdGggVmVjdG9yLiAgVGhlc2UgYXJlIHN1cGVyLWhvdCBhbmQgbXVzdCBiZSBpbmxp
bmUuCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShFbGVtZW50KiBlbGVtZW50KSBjb25zdCB7IHJl
dHVybiBtX2VsZW1lbnQgPT0gZWxlbWVudDsgfQotICAgICAgICBib29sIG9wZXJhdG9yIT0oRWxl
bWVudCogZWxlbWVudCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50ICE9IGVsZW1lbnQ7IH0KKyAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuICFt
X25vZGUgPyAhZWxlbWVudCA6IG1fbm9kZS0+ZWxlbWVudCgpID09IGVsZW1lbnQ7IH0KKyAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuICFtX25v
ZGUgPyAhIWVsZW1lbnQgOiBtX25vZGUtPmVsZW1lbnQoKSAhPSBlbGVtZW50OyB9CiAKICAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworICAgICAgICBSZWZQ
dHI8SFRNTFN0YWNrTm9kZT4gbV9ub2RlOwogICAgIH07CiAKICAgICBjbGFzcyBCb29rbWFyayB7
CkBAIC0xMDcsMTEgKzEwOCwxMSBAQCBwdWJsaWM6CiAKICAgICBFbnRyeSogZmluZChFbGVtZW50
Kik7CiAgICAgYm9vbCBjb250YWlucyhFbGVtZW50Kik7Ci0gICAgdm9pZCBhcHBlbmQoRWxlbWVu
dCopOworICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4pOwogICAgIHZv
aWQgcmVtb3ZlKEVsZW1lbnQqKTsKIAogICAgIEJvb2ttYXJrIGJvb2ttYXJrRm9yKEVsZW1lbnQq
KTsKLSAgICB2b2lkIHN3YXBUbyhFbGVtZW50KiBvbGRFbGVtZW50LCBFbGVtZW50KiBuZXdFbGVt
ZW50LCBjb25zdCBCb29rbWFyayYpOworICAgIHZvaWQgc3dhcFRvKEVsZW1lbnQqIG9sZEVsZW1l
bnQsIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9kZT4gcHJwTmV3Tm9kZSwgY29uc3QgQm9va21hcmsm
KTsKIAogICAgIHZvaWQgYXBwZW5kTWFya2VyKCk7CiAgICAgLy8gY2xlYXJUb0xhc3RNYXJrZXIg
YWxzbyBjbGVhcnMgdGhlIG1hcmtlciAocGVyIHRoZSBIVE1MNSBzcGVjKS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTdGFja05vZGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxTdGFja05vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NmU4MmE0YWNmNzQ0
YmQ4MmVjYzk3ODdmMjdjODI0MDhlN2JmMDYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrTm9kZS5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBIVE1MU3RhY2tOb2RlX2gKKyNkZWZpbmUgSFRNTFN0YWNrTm9kZV9oCisKKyNpbmNsdWRlICJF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFRva2VuLmgi
CisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDb250YWluZXJOb2RlOworCitjbGFzcyBIVE1MU3RhY2tOb2RlIDogcHVibGlj
IFJlZkNvdW50ZWQ8SFRNTFN0YWNrTm9kZT4geworcHVibGljOgorICAgIC8vIERvY3VtZW50RnJh
Z21lbnQgY2FzZS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MU3RhY2tOb2RlPiBjcmVhdGUo
UGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlKQorICAgIHsKKyAgICAgICAgUmVmUHRyPEF0
b21pY0hUTUxUb2tlbj4gZmFrZVRva2VuID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRv
a2VuVHlwZXM6OlN0YXJ0VGFnLCAiIik7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRN
TFN0YWNrTm9kZShub2RlLCBmYWtlVG9rZW4uZ2V0KCkpKTsKKyAgICB9CisKKyAgICAvLyBVc2Vk
IGJ5IEhUTUxFbGVtZW50U3RhY2suCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFN0YWNrTm9k
ZT4gY3JlYXRlKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSwgQXRvbWljSFRNTFRva2Vu
KiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6Onho
dG1sTmFtZXNwYWNlVVJJKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1M
U3RhY2tOb2RlKG5vZGUsIHRva2VuLCBuYW1lc3BhY2VVUkkpKTsKKyAgICB9CisKKyAgICAvLyBV
c2VkIGJ5IEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SFRNTFN0YWNrTm9kZT4gY3JlYXRlKEVsZW1lbnQqIGVsZW1lbnQsIEF0b21pY0hUTUxUb2tlbiog
dG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRt
bE5hbWVzcGFjZVVSSSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFN0
YWNrTm9kZShlbGVtZW50LCB0b2tlbiwgbmFtZXNwYWNlVVJJKSk7CisgICAgfQorCisgICAgRWxl
bWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChtX25vZGUuZ2V0KCkpOyB9
CisgICAgQ29udGFpbmVyTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsg
fQorCisgICAgQXRvbWljSFRNTFRva2VuKiB0b2tlbigpIHsgcmV0dXJuIG1fdG9rZW4uZ2V0KCk7
IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZXNwYWNlVVJJOyB9CisKK3ByaXZhdGU6CisgICAgSFRNTFN0YWNrTm9kZShQYXNzUmVm
UHRyPENvbnRhaW5lck5vZGU+IG5vZGUsIEF0b21pY0hUTUxUb2tlbiogdG9rZW4sIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSkK
KyAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX3Rva2VuKHRva2VuKQorICAgICAg
ICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKKyAgICB7CisgICAgfQorCisgICAgSFRN
TFN0YWNrTm9kZShFbGVtZW50KiBlbGVtZW50LCBBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VV
UkkpCisgICAgICAgIDogbV9ub2RlKGVsZW1lbnQpCisgICAgICAgICwgbV90b2tlbih0b2tlbikK
KyAgICAgICAgLCBtX25hbWVzcGFjZVVSSShuYW1lc3BhY2VVUkkpCisgICAgeworICAgIH0KKwor
ICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX25vZGU7CisKKyAgICBSZWZQdHI8QXRvbWljSFRN
TFRva2VuPiBtX3Rva2VuOworICAgIEF0b21pY1N0cmluZyBtX25hbWVzcGFjZVVSSTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhUTUxTdGFja05vZGVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4uaAppbmRleCAzYTg3ZTIyNGQwNjE3M2Q5NTVm
YWQ5M2UxNzk3MjQxODQzM2YwM2YyLi41Njg5MWFhYmY0MjkzZDI5MjljZGZiMjg3M2VmZWVjYjFm
YTJmN2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4uaApAQCAtMjcsNiAr
MjcsOCBAQAogI2RlZmluZSBIVE1MVG9rZW5faAogCiAjaW5jbHVkZSAiTWFya3VwVG9rZW5CYXNl
LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODEsMTQgKzgzLDE3IEBAIHB1YmxpYzoKICAg
ICB9CiB9OwogCi1jbGFzcyBBdG9taWNIVE1MVG9rZW4gOiBwdWJsaWMgQXRvbWljTWFya3VwVG9r
ZW5CYXNlPEhUTUxUb2tlbj4geworY2xhc3MgQXRvbWljSFRNTFRva2VuIDogcHVibGljIEF0b21p
Y01hcmt1cFRva2VuQmFzZTxIVE1MVG9rZW4+LCBwdWJsaWMgUmVmQ291bnRlZDxBdG9taWNIVE1M
VG9rZW4+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBdG9taWNIVE1MVG9rZW4pOwogcHVi
bGljOgotICAgIEF0b21pY0hUTUxUb2tlbihIVE1MVG9rZW4mIHRva2VuKSA6IEF0b21pY01hcmt1
cFRva2VuQmFzZTxIVE1MVG9rZW4+KCZ0b2tlbikgeyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
QXRvbWljSFRNTFRva2VuPiBjcmVhdGUoSFRNTFRva2VuJiB0b2tlbikKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQXRvbWljSFRNTFRva2VuKHRva2VuKSk7CisgICAgfQogCi0g
ICAgQXRvbWljSFRNTFRva2VuKEhUTUxUb2tlblR5cGVzOjpUeXBlIHR5cGUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMgPSBWZWN0
b3I8QXR0cmlidXRlPigpKQotICAgICAgICA6IEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1MVG9r
ZW4+KHR5cGUsIG5hbWUsIGF0dHJpYnV0ZXMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXRvbWlj
SFRNTFRva2VuPiBjcmVhdGUoSFRNTFRva2VuVHlwZXM6OlR5cGUgdHlwZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcyA9IFZlY3Rv
cjxBdHRyaWJ1dGU+KCkpCiAgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF0b21p
Y0hUTUxUb2tlbih0eXBlLCBuYW1lLCBhdHRyaWJ1dGVzKSk7CiAgICAgfQogCiAgICAgYm9vbCBm
b3JjZVF1aXJrcygpIGNvbnN0CkBAIC05Niw2ICsxMDEsMTUgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQobV90eXBlID09IEhUTUxUb2tlblR5cGVzOjpET0NUWVBFKTsKICAgICAgICAgcmV0dXJu
IG1fZG9jdHlwZURhdGEtPm1fZm9yY2VRdWlya3M7CiAgICAgfQorCitwcml2YXRlOgorICAgIEF0
b21pY0hUTUxUb2tlbihIVE1MVG9rZW4mIHRva2VuKSA6IEF0b21pY01hcmt1cFRva2VuQmFzZTxI
VE1MVG9rZW4+KCZ0b2tlbikgeyB9CisKKyAgICBBdG9taWNIVE1MVG9rZW4oSFRNTFRva2VuVHlw
ZXM6OlR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8QXR0
cmlidXRlPiYgYXR0cmlidXRlcyA9IFZlY3RvcjxBdHRyaWJ1dGU+KCkpCisgICAgICAgIDogQXRv
bWljTWFya3VwVG9rZW5CYXNlPEhUTUxUb2tlbj4odHlwZSwgbmFtZSwgYXR0cmlidXRlcykKKyAg
ICB7CisgICAgfQorCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcAppbmRleCA2YTJiMGU3NzA2MmE4NDAyN2ZjMDRkNGJkMWQ5ZjhiZjk0
N2VjYmFjLi5lYmMzNDAxMWIyYzJhYWJmMTAwOTRhMjM1ZmE2ZTRkOGM5YjRjMzA4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTQwLDYg
KzQwLDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRp
b21zLmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU3Rh
Y2tOb2RlLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXpl
ci5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKQEAgLTI0NSw5ICsyNDYsOSBAQCBI
VE1MRm9ybUVsZW1lbnQqIGNsb3Nlc3RGb3JtQW5jZXN0b3IoRWxlbWVudCogZWxlbWVudCkKIGNs
YXNzIEhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcik7CiBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcihBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQotICAgICAgICA6IG1fY3VycmVudCh0b2tlbi5jaGFyYWN0ZXJzKCkuZGF0
YSgpKQotICAgICAgICAsIG1fZW5kKG1fY3VycmVudCArIHRva2VuLmNoYXJhY3RlcnMoKS5zaXpl
KCkpCisgICAgZXhwbGljaXQgRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcihBdG9taWNIVE1M
VG9rZW4qIHRva2VuKQorICAgICAgICA6IG1fY3VycmVudCh0b2tlbi0+Y2hhcmFjdGVycygpLmRh
dGEoKSkKKyAgICAgICAgLCBtX2VuZChtX2N1cnJlbnQgKyB0b2tlbi0+Y2hhcmFjdGVycygpLnNp
emUoKSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICB9CkBAIC0zODAs
NyArMzgxLDcgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50
UGFyc2VyKiBwYXJzZXIsIERvY3VtZW50RnJhZ21lbnQqIGYKICAgICAgICAgLy8gaHR0cDovL3d3
dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLWVu
ZC5odG1sI2ZyYWdtZW50LWNhc2UKICAgICAgICAgLy8gRm9yIGVmZmljaWVuY3ksIHdlIHNraXAg
c3RlcCA0LjIgKCJMZXQgcm9vdCBiZSBhIG5ldyBodG1sIGVsZW1lbnQgd2l0aCBubyBhdHRyaWJ1
dGVzIikKICAgICAgICAgLy8gYW5kIGluc3RlYWQgdXNlIHRoZSBEb2N1bWVudEZyYWdtZW50IGFz
IGEgcm9vdCBub2RlLgotICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnB1c2hSb290Tm9k
ZShmcmFnbWVudCk7CisgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cHVzaFJvb3ROb2Rl
KEhUTUxTdGFja05vZGU6OmNyZWF0ZShmcmFnbWVudCkpOwogICAgICAgICByZXNldEluc2VydGlv
bk1vZGVBcHByb3ByaWF0ZWx5KCk7CiAgICAgICAgIG1fdHJlZS5zZXRGb3JtKGNsb3Nlc3RGb3Jt
QW5jZXN0b3IoY29udGV4dEVsZW1lbnQpKTsKICAgICB9CkBAIC00MzMsNyArNDM0LDcgQEAgUGFz
c1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MoVGV4
dFBvc2l0aW9uJiBzY3JpcHRTdGEKIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRy
ZWVGcm9tVG9rZW4oSFRNTFRva2VuJiByYXdUb2tlbikKIHsKLSAgICBBdG9taWNIVE1MVG9rZW4g
dG9rZW4ocmF3VG9rZW4pOworICAgIFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+IHRva2VuID0gQXRv
bWljSFRNTFRva2VuOjpjcmVhdGUocmF3VG9rZW4pOwogCiAgICAgLy8gV2UgY2xlYXIgdGhlIHJh
d1Rva2VuIGluIGNhc2UgY29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tlbgogICAgIC8vIHN5bmNo
cm9ub3VzbHkgcmUtZW50ZXJzIHRoZSBwYXJzZXIuIFdlIGRvbid0IGNsZWFyIHRoZSB0b2tlbiBp
bW1lZGF0ZWx5CkBAIC00NDgsNyArNDQ5LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0
cnVjdFRyZWVGcm9tVG9rZW4oSFRNTFRva2VuJiByYXdUb2tlbikKICAgICBpZiAocmF3VG9rZW4u
dHlwZSgpICE9IEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0ZXIpCiAgICAgICAgIHJhd1Rva2VuLmNs
ZWFyKCk7CiAKLSAgICBjb25zdHJ1Y3RUcmVlRnJvbUF0b21pY1Rva2VuKHRva2VuKTsKKyAgICBj
b25zdHJ1Y3RUcmVlRnJvbUF0b21pY1Rva2VuKHRva2VuLmdldCgpKTsKIAogICAgIGlmICghcmF3
VG9rZW4uaXNVbmluaXRpYWxpemVkKCkpIHsKICAgICAgICAgQVNTRVJUKHJhd1Rva2VuLnR5cGUo
KSA9PSBIVE1MVG9rZW5UeXBlczo6Q2hhcmFjdGVyKTsKQEAgLTQ1Niw3ICs0NTcsNyBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJlZUZyb21Ub2tlbihIVE1MVG9rZW4mIHJhd1Rv
a2VuKQogICAgIH0KIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWVGcm9t
QXRvbWljVG9rZW4oQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpjb25zdHJ1Y3RUcmVlRnJvbUF0b21pY1Rva2VuKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7
CiAgICAgaWYgKHNob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQodG9rZW4pKQogICAg
ICAgICBwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKTsKQEAgLTQ3NSw5ICs0NzYs
OSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tlbihB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIC8vIFdlIG1pZ2h0IGJlIGRldGFjaGVkIG5vdy4K
IH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQogewotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CisgICAgc3dpdGNoICh0
b2tlbi0+dHlwZSgpKSB7CiAgICAgY2FzZSBIVE1MVG9rZW5UeXBlczo6VW5pbml0aWFsaXplZDoK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNTA3LDkg
KzUwOCw5IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW4oQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICB9CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9j
dHlwZVRva2VuKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0RvY3R5cGVUb2tlbihBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VS
VCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkRPQ1RZUEUpOworICAgIEFTU0VSVCh0
b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpET0NUWVBFKTsKICAgICBpZiAobV9pbnNl
cnRpb25Nb2RlID09IEluaXRpYWxNb2RlKSB7CiAgICAgICAgIG1fdHJlZS5pbnNlcnREb2N0eXBl
KHRva2VuKTsKICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShCZWZvcmVIVE1MTW9kZSk7CkBAIC01
MjYsMTUgKzUyNywxNSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RvY3R5cGVUb2tl
bihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NG
YWtlU3RhcnRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgY29uc3QgVmVjdG9yPEF0
dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCiB7CiAgICAgLy8gRklYTUU6IFdlJ2xsIG5lZWQgYSBmYW5j
aWVyIGNvbnZlcnNpb24gdGhhbiBqdXN0ICJsb2NhbE5hbWUiIGZvciBTVkcvTWF0aE1MIHRhZ3Mu
Ci0gICAgQXRvbWljSFRNTFRva2VuIGZha2VUb2tlbihIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcs
IHRhZ05hbWUubG9jYWxOYW1lKCksIGF0dHJpYnV0ZXMpOwotICAgIHByb2Nlc3NTdGFydFRhZyhm
YWtlVG9rZW4pOworICAgIFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+IGZha2VUb2tlbiA9IEF0b21p
Y0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZywgdGFnTmFtZS5sb2Nh
bE5hbWUoKSwgYXR0cmlidXRlcyk7CisgICAgcHJvY2Vzc1N0YXJ0VGFnKGZha2VUb2tlbi5nZXQo
KSk7CiB9CiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZUVuZFRhZyhjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lKQogewogICAgIC8vIEZJWE1FOiBXZSdsbCBuZWVkIGEgZmFu
Y2llciBjb252ZXJzaW9uIHRoYW4ganVzdCAibG9jYWxOYW1lIiBmb3IgU1ZHL01hdGhNTCB0YWdz
LgotICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuVHlwZXM6OkVuZFRhZywg
dGFnTmFtZS5sb2NhbE5hbWUoKSk7Ci0gICAgcHJvY2Vzc0VuZFRhZyhmYWtlVG9rZW4pOworICAg
IFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+IGZha2VUb2tlbiA9IEF0b21pY0hUTUxUb2tlbjo6Y3Jl
YXRlKEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIHRhZ05hbWUubG9jYWxOYW1lKCkpOworICAgIHBy
b2Nlc3NFbmRUYWcoZmFrZVRva2VuLmdldCgpKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NGYWtlQ2hhcmFjdGVycyhjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMpCkBAIC01NDgs
MTMgKzU0OSwxMyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VQRW5kVGFnSWZQ
SW5CdXR0b25TY29wZSgpCiB7CiAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluQnV0
dG9uU2NvcGUocFRhZy5sb2NhbE5hbWUoKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBBdG9taWNI
VE1MVG9rZW4gZW5kUChIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBwVGFnLmxvY2FsTmFtZSgpKTsK
LSAgICBwcm9jZXNzRW5kVGFnKGVuZFApOworICAgIFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+IGVu
ZFAgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBwVGFn
LmxvY2FsTmFtZSgpKTsKKyAgICBwcm9jZXNzRW5kVGFnKGVuZFAuZ2V0KCkpOwogfQogCi1WZWN0
b3I8QXR0cmlidXRlPiBIVE1MVHJlZUJ1aWxkZXI6OmF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQo
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKK1ZlY3RvcjxBdHRyaWJ1dGU+IEhUTUxUcmVlQnVpbGRl
cjo6YXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1dChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewot
ICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCk7Cisg
ICAgVmVjdG9yPEF0dHJpYnV0ZT4gYXR0cmlidXRlcyA9IHRva2VuLT5hdHRyaWJ1dGVzKCk7CiAg
ICAgZm9yIChpbnQgaSA9IGF0dHJpYnV0ZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAg
ICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9IGF0dHJpYnV0ZXMuYXQoaSkubmFtZSgp
OwogICAgICAgICBpZiAobmFtZS5tYXRjaGVzKG5hbWVBdHRyKSB8fCBuYW1lLm1hdGNoZXMoYWN0
aW9uQXR0cikgfHwgbmFtZS5tYXRjaGVzKHByb21wdEF0dHIpKQpAQCAtNTY1LDIxICs1NjYsMjEg
QEAgVmVjdG9yPEF0dHJpYnV0ZT4gSFRNTFRyZWVCdWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRl
eElucHV0KEF0b21pY0hUTUxUb2tlbiYgdG8KICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIAot
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSXNpbmRl
eFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJU
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwotICAgIEFTU0VSVCh0
b2tlbi5uYW1lKCkgPT0gaXNpbmRleFRhZyk7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0g
SFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQodG9rZW4tPm5hbWUoKSA9PSBp
c2luZGV4VGFnKTsKICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICBpZiAobV90cmVlLmZvcm0o
KSkKICAgICAgICAgcmV0dXJuOwogICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIEFja25vd2xlZGdl
IHNlbGYtY2xvc2luZyBmbGFnCiAgICAgcHJvY2Vzc0Zha2VTdGFydFRhZyhmb3JtVGFnKTsKLSAg
ICBBdHRyaWJ1dGUqIGFjdGlvbkF0dHJpYnV0ZSA9IHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0oYWN0
aW9uQXR0cik7CisgICAgQXR0cmlidXRlKiBhY3Rpb25BdHRyaWJ1dGUgPSB0b2tlbi0+Z2V0QXR0
cmlidXRlSXRlbShhY3Rpb25BdHRyKTsKICAgICBpZiAoYWN0aW9uQXR0cmlidXRlKQogICAgICAg
ICBtX3RyZWUuZm9ybSgpLT5zZXRBdHRyaWJ1dGUoYWN0aW9uQXR0ciwgYWN0aW9uQXR0cmlidXRl
LT52YWx1ZSgpKTsKICAgICBwcm9jZXNzRmFrZVN0YXJ0VGFnKGhyVGFnKTsKICAgICBwcm9jZXNz
RmFrZVN0YXJ0VGFnKGxhYmVsVGFnKTsKLSAgICBBdHRyaWJ1dGUqIHByb21wdEF0dHJpYnV0ZSA9
IHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0ocHJvbXB0QXR0cik7CisgICAgQXR0cmlidXRlKiBwcm9t
cHRBdHRyaWJ1dGUgPSB0b2tlbi0+Z2V0QXR0cmlidXRlSXRlbShwcm9tcHRBdHRyKTsKICAgICBp
ZiAocHJvbXB0QXR0cmlidXRlKQogICAgICAgICBwcm9jZXNzRmFrZUNoYXJhY3RlcnMocHJvbXB0
QXR0cmlidXRlLT52YWx1ZSgpKTsKICAgICBlbHNlCkBAIC02MDcsNyArNjA4LDcgQEAgYm9vbCBp
c0RkT3JEdChjb25zdCBDb250YWluZXJOb2RlKiBlbGVtZW50KQogfQogCiB0ZW1wbGF0ZSA8Ym9v
bCBzaG91bGRDbG9zZShjb25zdCBDb250YWluZXJOb2RlKik+Ci12b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0Nsb3NlV2hlbk5lc3RlZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWcoQXRvbWljSFRNTFRv
a2VuKiB0b2tlbikKIHsKICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICBIVE1MRWxlbWVu
dFN0YWNrOjpFbGVtZW50UmVjb3JkKiBub2RlUmVjb3JkID0gbV90cmVlLm9wZW5FbGVtZW50cygp
LT50b3BSZWNvcmQoKTsKQEAgLTY0MSw3ICs2NDIsNyBAQCB2b2lkIG1hcExvd2VyZWRMb2NhbE5h
bWVUb05hbWUoUHJlZml4ZWROYW1lVG9RdWFsaWZpZWROYW1lTWFwKiBtYXAsIFF1YWxpZmllZE5h
bQogICAgIH0KIH0KIAotdm9pZCBhZGp1c3RTVkdUYWdOYW1lQ2FzZShBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQordm9pZCBhZGp1c3RTVkdUYWdOYW1lQ2FzZShBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQogewogICAgIHN0YXRpYyBQcmVmaXhlZE5hbWVUb1F1YWxpZmllZE5hbWVNYXAqIGNhc2VNYXAg
PSAwOwogICAgIGlmICghY2FzZU1hcCkgewpAQCAtNjUxLDE0ICs2NTIsMTQgQEAgdm9pZCBhZGp1
c3RTVkdUYWdOYW1lQ2FzZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBtYXBMb3dl
cmVkTG9jYWxOYW1lVG9OYW1lKGNhc2VNYXAsIHN2Z1RhZ3MsIGxlbmd0aCk7CiAgICAgfQogCi0g
ICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgY2FzZWROYW1lID0gY2FzZU1hcC0+Z2V0KHRva2VuLm5h
bWUoKSk7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgY2FzZWROYW1lID0gY2FzZU1hcC0+Z2V0
KHRva2VuLT5uYW1lKCkpOwogICAgIGlmIChjYXNlZE5hbWUubG9jYWxOYW1lKCkuaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICB0b2tlbi5zZXROYW1lKGNhc2VkTmFtZS5sb2NhbE5hbWUo
KSk7CisgICAgdG9rZW4tPnNldE5hbWUoY2FzZWROYW1lLmxvY2FsTmFtZSgpKTsKIH0KIAogdGVt
cGxhdGU8UXVhbGlmaWVkTmFtZSoqIGdldEF0dHJzKHNpemVfdCogbGVuZ3RoKT4KLXZvaWQgYWRq
dXN0QXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBhZGp1c3RBdHRyaWJ1
dGVzKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgc3RhdGljIFByZWZpeGVkTmFtZVRv
UXVhbGlmaWVkTmFtZU1hcCogY2FzZU1hcCA9IDA7CiAgICAgaWYgKCFjYXNlTWFwKSB7CkBAIC02
NjgsMjAgKzY2OSwyMCBAQCB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICAgICAgbWFwTG93ZXJlZExvY2FsTmFtZVRvTmFtZShjYXNlTWFwLCBhdHRycywg
bGVuZ3RoKTsKICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9rZW4uYXR0
cmlidXRlcygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEF0dHJpYnV0ZSYgdG9rZW5BdHRyaWJ1
dGUgPSB0b2tlbi5hdHRyaWJ1dGVzKCkuYXQoaSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRva2VuLT5hdHRyaWJ1dGVzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQXR0cmlidXRl
JiB0b2tlbkF0dHJpYnV0ZSA9IHRva2VuLT5hdHRyaWJ1dGVzKCkuYXQoaSk7CiAgICAgICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGNhc2VkTmFtZSA9IGNhc2VNYXAtPmdldCh0b2tlbkF0dHJpYnV0
ZS5sb2NhbE5hbWUoKSk7CiAgICAgICAgIGlmICghY2FzZWROYW1lLmxvY2FsTmFtZSgpLmlzTnVs
bCgpKQogICAgICAgICAgICAgdG9rZW5BdHRyaWJ1dGUucGFyc2VyU2V0TmFtZShjYXNlZE5hbWUp
OwogICAgIH0KIH0KIAotdm9pZCBhZGp1c3RTVkdBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCit2b2lkIGFkanVzdFNWR0F0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuKiB0b2tlbikK
IHsKICAgICBhZGp1c3RBdHRyaWJ1dGVzPFNWR05hbWVzOjpnZXRTVkdBdHRycz4odG9rZW4pOwog
fQogCi12b2lkIGFkanVzdE1hdGhNTEF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
K3ZvaWQgYWRqdXN0TWF0aE1MQXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewog
ICAgIGFkanVzdEF0dHJpYnV0ZXM8TWF0aE1MTmFtZXM6OmdldE1hdGhNTEF0dHJzPih0b2tlbik7
CiB9CkBAIC02OTcsNyArNjk4LDcgQEAgdm9pZCBhZGROYW1lc1dpdGhQcmVmaXgoUHJlZml4ZWRO
YW1lVG9RdWFsaWZpZWROYW1lTWFwKiBtYXAsIGNvbnN0IEF0b21pY1N0cmluZyYKICAgICB9CiB9
CiAKLXZvaWQgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
K3ZvaWQgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsK
ICAgICBzdGF0aWMgUHJlZml4ZWROYW1lVG9RdWFsaWZpZWROYW1lTWFwKiBtYXAgPSAwOwogICAg
IGlmICghbWFwKSB7CkBAIC03MTMsOCArNzE0LDggQEAgdm9pZCBhZGp1c3RGb3JlaWduQXR0cmli
dXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBtYXAtPmFkZCgieG1sbnM6eGxp
bmsiLCBRdWFsaWZpZWROYW1lKCJ4bWxucyIsICJ4bGluayIsIFhNTE5TTmFtZXM6OnhtbG5zTmFt
ZXNwYWNlVVJJKSk7CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRva2Vu
LmF0dHJpYnV0ZXMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBBdHRyaWJ1dGUmIHRva2VuQXR0
cmlidXRlID0gdG9rZW4uYXR0cmlidXRlcygpLmF0KGkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b2tlbi0+YXR0cmlidXRlcygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIEF0dHJp
YnV0ZSYgdG9rZW5BdHRyaWJ1dGUgPSB0b2tlbi0+YXR0cmlidXRlcygpLmF0KGkpOwogICAgICAg
ICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lID0gbWFwLT5nZXQodG9rZW5BdHRyaWJ1dGUubG9j
YWxOYW1lKCkpOwogICAgICAgICBpZiAoIW5hbWUubG9jYWxOYW1lKCkuaXNOdWxsKCkpCiAgICAg
ICAgICAgICB0b2tlbkF0dHJpYnV0ZS5wYXJzZXJTZXROYW1lKG5hbWUpOwpAQCAtNzIzLDI4ICs3
MjQsMjggQEAgdm9pZCBhZGp1c3RGb3JlaWduQXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogCiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJv
ZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
U3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQo
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7Ci0gICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRv
a2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7
CiAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYmFzZVRhZwotICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gYmFzZWZvbnRUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IGJnc291bmRUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGNvbW1hbmRUYWcKLSAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IGxpbmtUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IG1ldGFUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnCi0gICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IHN0eWxlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0aXRsZVRhZykgeworICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IGJhc2VUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBi
YXNlZm9udFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJnc291bmRUYWcKKyAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBjb21tYW5kVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gbGlua1RhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1ldGFUYWcKKyAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBub2ZyYW1lc1RhZworICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IHNjcmlwdFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHN0eWxlVGFnCisg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKICAgICAgICAgYm9vbCBkaWRQ
cm9jZXNzID0gcHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKTsKICAgICAgICAgQVNTRVJU
X1VOVVNFRChkaWRQcm9jZXNzLCBkaWRQcm9jZXNzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAodG9rZW4ubmFtZSgpID09IGJvZHlUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBib2R5VGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBpZiAo
IW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+c2Vjb25kRWxlbWVudElzSFRNTEJvZHlFbGVtZW50KCkg
fHwgbV90cmVlLm9wZW5FbGVtZW50cygpLT5oYXNPbmx5T25lRWxlbWVudCgpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7CkBAIC03NTQsNyArNzU1LDcgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keSh0
b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBm
cmFtZXNldFRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGZyYW1lc2V0VGFnKSB7CiAg
ICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+c2Vjb25kRWxlbWVudElzSFRNTEJvZHlFbGVtZW50KCkgfHwgbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5oYXNPbmx5T25lRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNQYXJz
aW5nRnJhZ21lbnQoKSk7CkBAIC03NzIsMzMgKzc3MywzMyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAg
ICAgIHNldEluc2VydGlvbk1vZGUoSW5GcmFtZXNldE1vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYWRkcmVzc1RhZwotICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gYXJ0aWNsZVRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYXNpZGVU
YWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJsb2NrcXVvdGVUYWcKLSAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IGNlbnRlclRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGV0
YWlsc1RhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGlyVGFnCi0gICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBkaXZUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGRsVGFnCi0g
ICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmaWVsZHNldFRhZwotICAgICAgICB8fCB0b2tlbi5u
YW1lKCkgPT0gZmlnY2FwdGlvblRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZmlndXJl
VGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmb290ZXJUYWcKLSAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IGhlYWRlclRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaGdyb3Vw
VGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZW51VGFnCi0gICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBuYXZUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG9sVGFnCi0gICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBwVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBz
ZWN0aW9uVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdW1tYXJ5VGFnCi0gICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSB1bFRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGFk
ZHJlc3NUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBhcnRpY2xlVGFnCisgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gYXNpZGVUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBibG9ja3F1b3RlVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gY2VudGVyVGFnCisg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGV0YWlsc1RhZworICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IGRpclRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGRpdlRhZworICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGRsVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkg
PT0gZmllbGRzZXRUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBmaWdjYXB0aW9uVGFn
CisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZmlndXJlVGFnCisgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gZm9vdGVyVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gaGVhZGVy
VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gaGdyb3VwVGFnCisgICAgICAgIHx8IHRv
a2VuLT5uYW1lKCkgPT0gbWVudVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG5hdlRh
ZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG9sVGFnCisgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gcFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHNlY3Rpb25UYWcKKyAg
ICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdW1tYXJ5VGFnCisgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gdWxUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25T
Y29wZSgpOwogICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc051bWJlcmVkSGVhZGVyVGFnKHRva2VuLm5hbWUo
KSkpIHsKKyAgICBpZiAoaXNOdW1iZXJlZEhlYWRlclRhZyh0b2tlbi0+bmFtZSgpKSkgewogICAg
ICAgICBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7CiAgICAgICAgIGlmIChp
c051bWJlcmVkSGVhZGVyVGFnKG1fdHJlZS5jdXJyZW50Tm9kZSgpLT5sb2NhbE5hbWUoKSkpIHsK
ICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwpAQCAtODA3LDE0ICs4MDgsMTQgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gcHJlVGFnIHx8IHRv
a2VuLm5hbWUoKSA9PSBsaXN0aW5nVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gcHJl
VGFnIHx8IHRva2VuLT5uYW1lKCkgPT0gbGlzdGluZ1RhZykgewogICAgICAgICBwcm9jZXNzRmFr
ZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxl
bWVudCh0b2tlbik7CiAgICAgICAgIG1fc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lID0gdHJ1ZTsK
ICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBmb3JtVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkg
PT0gZm9ybVRhZykgewogICAgICAgICBpZiAobV90cmVlLmZvcm0oKSkgewogICAgICAgICAgICAg
cGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC04MjMsMjEgKzgyNCwy
MSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRm9ybUVsZW1lbnQo
dG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0g
bGlUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBsaVRhZykgewogICAgICAgICBwcm9j
ZXNzQ2xvc2VXaGVuTmVzdGVkVGFnPGlzTGk+KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGRkVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBkdFRh
ZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGRkVGFnIHx8IHRva2VuLT5uYW1lKCkgPT0g
ZHRUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Nsb3NlV2hlbk5lc3RlZFRhZzxpc0RkT3JEdD4odG9r
ZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gcGxh
aW50ZXh0VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gcGxhaW50ZXh0VGFnKSB7CiAg
ICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKICAgICAgICAgbV90
cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgbV9wYXJzZXItPnRva2VuaXpl
cigpLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyU3RhdGU6OlBMQUlOVEVYVFN0YXRlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGJ1dHRvblRhZykgewor
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJ1dHRvblRhZykgewogICAgICAgICBpZiAobV90cmVl
Lm9wZW5FbGVtZW50cygpLT5pblNjb3BlKGJ1dHRvblRhZykpIHsKICAgICAgICAgICAgIHBhcnNl
RXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcoYnV0dG9uVGFnKTsK
QEAgLTg0OSw3ICs4NTAsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFn
Rm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIG1fZnJhbWVzZXRPayA9
IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0g
YVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGFUYWcpIHsKICAgICAgICAgRWxlbWVu
dCogYWN0aXZlQVRhZyA9IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+Y2xvc2Vz
dEVsZW1lbnRJblNjb3BlV2l0aE5hbWUoYVRhZy5sb2NhbE5hbWUoKSk7CiAgICAgICAgIGlmIChh
Y3RpdmVBVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKQEAgLTg2MiwxMiAr
ODYzLDEyIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHko
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgbV90cmVlLmluc2VydEZvcm1hdHRpbmdF
bGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoaXNOb25BbmNo
b3JOb25Ob2JyRm9ybWF0dGluZ1RhZyh0b2tlbi5uYW1lKCkpKSB7CisgICAgaWYgKGlzTm9uQW5j
aG9yTm9uTm9ickZvcm1hdHRpbmdUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgbV90cmVl
LnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAgICAgIG1fdHJl
ZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub2JyVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1l
KCkgPT0gbm9iclRhZykgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3Jt
YXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgaWYgKG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5T
Y29wZShub2JyVGFnKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CkBAIC04Nzcs
MTYgKzg3OCwxNiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5C
b2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIG1fdHJlZS5pbnNlcnRGb3JtYXR0
aW5nRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBhcHBsZXRUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1hcnF1ZWVU
YWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG9iamVjdFRhZykgeworICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IGFwcGxldFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1hcnF1
ZWVUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBvYmplY3RUYWcpIHsKICAgICAgICAg
bV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAgICAg
IG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1fdHJlZS5hY3RpdmVG
b3JtYXR0aW5nRWxlbWVudHMoKS0+YXBwZW5kTWFya2VyKCk7CiAgICAgICAgIG1fZnJhbWVzZXRP
ayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gdGFibGVUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0YWJsZVRhZykgewogICAg
ICAgICBpZiAoIW1fZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpICYmIG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+aW5CdXR0b25TY29wZShwVGFnKSkKICAgICAgICAgICAgIHByb2Nlc3NGYWtlRW5kVGFn
KHBUYWcpOwogICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwpAQCAtODk0
LDQ4ICs4OTUsNDggQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0Zvcklu
Qm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKElu
VGFibGVNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgp
ID09IGltYWdlVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaW1hZ2VUYWcpIHsKICAg
ICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIC8vIEFwcGFyZW50bHkgd2UncmUgbm90
IHN1cHBvc2VkIHRvIGFzay4KLSAgICAgICAgdG9rZW4uc2V0TmFtZShpbWdUYWcubG9jYWxOYW1l
KCkpOworICAgICAgICB0b2tlbi0+c2V0TmFtZShpbWdUYWcubG9jYWxOYW1lKCkpOwogICAgICAg
ICAvLyBOb3RlIHRoZSBmYWxsIHRocm91Z2ggdG8gdGhlIGltZ1RhZyBoYW5kbGluZyBiZWxvdyEK
ICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhcmVhVGFnCi0gICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBiclRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZW1iZWRUYWcKLSAg
ICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGltZ1RhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0ga2V5Z2VuVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB3YnJUYWcpIHsKKyAgICBp
ZiAodG9rZW4tPm5hbWUoKSA9PSBhcmVhVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
YnJUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBlbWJlZFRhZworICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGltZ1RhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGtleWdl
blRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHdiclRhZykgewogICAgICAgICBtX3Ry
ZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgbV90
cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX2ZyYW1l
c2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFt
ZSgpID09IGlucHV0VGFnKSB7Ci0gICAgICAgIEF0dHJpYnV0ZSogdHlwZUF0dHJpYnV0ZSA9IHRv
a2VuLmdldEF0dHJpYnV0ZUl0ZW0odHlwZUF0dHIpOworICAgIGlmICh0b2tlbi0+bmFtZSgpID09
IGlucHV0VGFnKSB7CisgICAgICAgIEF0dHJpYnV0ZSogdHlwZUF0dHJpYnV0ZSA9IHRva2VuLT5n
ZXRBdHRyaWJ1dGVJdGVtKHR5cGVBdHRyKTsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhl
QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xv
c2luZ0hUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgaWYgKCF0eXBlQXR0cmlidXRlIHx8ICFl
cXVhbElnbm9yaW5nQ2FzZSh0eXBlQXR0cmlidXRlLT52YWx1ZSgpLCAiaGlkZGVuIikpCiAgICAg
ICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAodG9rZW4ubmFtZSgpID09IHBhcmFtVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSBzb3VyY2VUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyYWNrVGFnKSB7CisgICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gcGFyYW1UYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBzb3VyY2VUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0cmFja1RhZykgewogICAg
ICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoclRhZykgeworICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IGhyVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lm
UEluQnV0dG9uU2NvcGUoKTsKICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVs
ZW1lbnQodG9rZW4pOwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGlzaW5kZXhUYWcpIHsKKyAgICBp
ZiAodG9rZW4tPm5hbWUoKSA9PSBpc2luZGV4VGFnKSB7CiAgICAgICAgIHByb2Nlc3NJc2luZGV4
U3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gdGV4dGFyZWFUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9
PSB0ZXh0YXJlYVRhZykgewogICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4p
OwogICAgICAgICBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZSA9IHRydWU7CiAgICAgICAgIG1f
cGFyc2VyLT50b2tlbml6ZXIoKS0+c2V0U3RhdGUoSFRNTFRva2VuaXplclN0YXRlOjpSQ0RBVEFT
dGF0ZSk7CkBAIC05NDQsMjcgKzk0NSwyNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHNldElu
c2VydGlvbk1vZGUoVGV4dE1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0geG1wVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0geG1wVGFn
KSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKICAgICAg
ICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAg
ICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICBwcm9jZXNzR2VuZXJpY1Jhd1RleHRT
dGFydFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5h
bWUoKSA9PSBpZnJhbWVUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBpZnJhbWVUYWcp
IHsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHByb2Nlc3NHZW5lcmlj
UmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
dG9rZW4ubmFtZSgpID09IG5vZW1iZWRUYWcgJiYgcGx1Z2luc0VuYWJsZWQobV9kb2N1bWVudC0+
ZnJhbWUoKSkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBub2VtYmVkVGFnICYmIHBsdWdp
bnNFbmFibGVkKG1fZG9jdW1lbnQtPmZyYW1lKCkpKSB7CiAgICAgICAgIHByb2Nlc3NHZW5lcmlj
UmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
dG9rZW4ubmFtZSgpID09IG5vc2NyaXB0VGFnICYmIHNjcmlwdEVuYWJsZWQobV9kb2N1bWVudC0+
ZnJhbWUoKSkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBub3NjcmlwdFRhZyAmJiBzY3Jp
cHRFbmFibGVkKG1fZG9jdW1lbnQtPmZyYW1lKCkpKSB7CiAgICAgICAgIHByb2Nlc3NHZW5lcmlj
UmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
dG9rZW4ubmFtZSgpID09IHNlbGVjdFRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHNl
bGVjdFRhZykgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5n
RWxlbWVudHMoKTsKICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAg
ICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CkBAIC05NzksMTYgKzk4MCwxNiBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluU2VsZWN0TW9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBvcHRncm91cFRhZyB8
fCB0b2tlbi5uYW1lKCkgPT0gb3B0aW9uVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
b3B0Z3JvdXBUYWcgfHwgdG9rZW4tPm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKICAgICAgICAgaWYg
KG1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpIHsKLSAgICAgICAg
ICAgIEF0b21pY0hUTUxUb2tlbiBlbmRPcHRpb24oSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgb3B0
aW9uVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kT3B0aW9u
KTsKKyAgICAgICAgICAgIFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+IGVuZE9wdGlvbiA9IEF0b21p
Y0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIG9wdGlvblRhZy5sb2Nh
bE5hbWUoKSk7CisgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGlvbi5nZXQoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0Vs
ZW1lbnRzKCk7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBycFRhZyB8fCB0b2tl
bi5uYW1lKCkgPT0gcnRUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBycFRhZyB8fCB0
b2tlbi0+bmFtZSgpID09IHJ0VGFnKSB7CiAgICAgICAgIGlmIChtX3RyZWUub3BlbkVsZW1lbnRz
KCktPmluU2NvcGUocnVieVRhZy5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgICAgIG1fdHJlZS5n
ZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7CiAgICAgICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50
Tm9kZSgpLT5oYXNUYWdOYW1lKHJ1YnlUYWcpKQpAQCAtOTk3LDI2ICs5OTgsMjYgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQogICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gTWF0aE1MTmFtZXM6Om1h
dGhUYWcubG9jYWxOYW1lKCkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBNYXRoTUxOYW1l
czo6bWF0aFRhZy5sb2NhbE5hbWUoKSkgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVB
Y3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgYWRqdXN0TWF0aE1MQXR0cmlidXRl
cyh0b2tlbik7CiAgICAgICAgIGFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKHRva2VuKTsKICAgICAg
ICAgbV90cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KHRva2VuLCBNYXRoTUxOYW1lczo6bWF0aG1s
TmFtZXNwYWNlVVJJKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFt
ZSgpID09IFNWR05hbWVzOjpzdmdUYWcubG9jYWxOYW1lKCkpIHsKKyAgICBpZiAodG9rZW4tPm5h
bWUoKSA9PSBTVkdOYW1lczo6c3ZnVGFnLmxvY2FsTmFtZSgpKSB7CiAgICAgICAgIG1fdHJlZS5y
ZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwogICAgICAgICBhZGp1c3RT
VkdBdHRyaWJ1dGVzKHRva2VuKTsKICAgICAgICAgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXModG9r
ZW4pOwogICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9yZWlnbkVsZW1lbnQodG9rZW4sIFNWR05hbWVz
OjpzdmdOYW1lc3BhY2VVUkkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc0Nh
cHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IGZyYW1lVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBoZWFkVGFnCi0gICAg
ICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAgIHx8IGlz
VGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSB0clRhZykgeworICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5u
YW1lKCkpCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZnJhbWVUYWcKKyAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBoZWFkVGFnCisgICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRh
Zyh0b2tlbi0+bmFtZSgpKQorICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4t
Pm5hbWUoKSkKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0clRhZykgewogICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNTAsNDIgKzEw
NTEsNDIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNsb3NlVGhlQ2VsbCgpCiAgICAgQVNTRVJU
KGluc2VydGlvbk1vZGUoKSA9PSBJblJvd01vZGUpOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRv
a2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVz
OjpTdGFydFRhZyk7Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBjYXB0aW9uVGFnKSB7CisgICAg
QVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBp
ZiAodG9rZW4tPm5hbWUoKSA9PSBjYXB0aW9uVGFnKSB7CiAgICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+cG9wVW50aWxUYWJsZVNjb3BlTWFya2VyKCk7CiAgICAgICAgIG1fdHJlZS5hY3Rp
dmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+YXBwZW5kTWFya2VyKCk7CiAgICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5DYXB0
aW9uTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBjb2xncm91cFRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGNvbGdyb3VwVGFnKSB7
CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZVNjb3BlTWFya2Vy
KCk7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHNl
dEluc2VydGlvbk1vZGUoSW5Db2x1bW5Hcm91cE1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY29sVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1l
KCkgPT0gY29sVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcoY29sZ3JvdXBUYWcp
OwogICAgICAgICBBU1NFUlQoSW5Db2x1bW5Hcm91cE1vZGUpOwogICAgICAgICBwcm9jZXNzU3Rh
cnRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc1RhYmxlQm9k
eUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgeworICAgIGlmIChpc1RhYmxlQm9keUNvbnRleHRU
YWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BV
bnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsKICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KHRva2VuKTsKICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJblRhYmxlQm9keU1vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4u
bmFtZSgpKQotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdHJUYWcpIHsKKyAgICBpZiAoaXNU
YWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gdHJUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Zha2VTdGFydFRhZyh0Ym9keVRhZyk7CiAg
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5UYWJsZUJvZHlNb2RlKTsKICAgICAg
ICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
dGFibGVUYWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIGlmICghcHJv
Y2Vzc1RhYmxlRW5kVGFnRm9ySW5UYWJsZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNQYXJz
aW5nRnJhZ21lbnQoKSk7CkBAIC0xMDk0LDEyICsxMDk1LDEyIEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAg
ICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzdHlsZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc2NyaXB0
VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gc3R5bGVUYWcgfHwgdG9rZW4tPm5hbWUo
KSA9PSBzY3JpcHRUYWcpIHsKICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKHRva2Vu
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGlucHV0
VGFnKSB7Ci0gICAgICAgIEF0dHJpYnV0ZSogdHlwZUF0dHJpYnV0ZSA9IHRva2VuLmdldEF0dHJp
YnV0ZUl0ZW0odHlwZUF0dHIpOworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGlucHV0VGFnKSB7
CisgICAgICAgIEF0dHJpYnV0ZSogdHlwZUF0dHJpYnV0ZSA9IHRva2VuLT5nZXRBdHRyaWJ1dGVJ
dGVtKHR5cGVBdHRyKTsKICAgICAgICAgaWYgKHR5cGVBdHRyaWJ1dGUgJiYgZXF1YWxJZ25vcmlu
Z0Nhc2UodHlwZUF0dHJpYnV0ZS0+dmFsdWUoKSwgImhpZGRlbiIpKSB7CiAgICAgICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hU
TUxFbGVtZW50KHRva2VuKTsKQEAgLTExMDcsNyArMTEwOCw3IEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAg
ICAgICAgIH0KICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvICJhbnl0aGluZyBlbHNlIiBjYXNl
LgogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGZvcm1UYWcpIHsKKyAgICBpZiAodG9r
ZW4tPm5hbWUoKSA9PSBmb3JtVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAg
ICAgICBpZiAobV90cmVlLmZvcm0oKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExMjAsOSAr
MTEyMSw5IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJblRhYmxl
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KHRv
a2VuKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRN
TFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1M
VG9rZW5UeXBlczo6U3RhcnRUYWcpOwogICAgIHN3aXRjaCAoaW5zZXJ0aW9uTW9kZSgpKSB7CiAg
ICAgY2FzZSBJbml0aWFsTW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJ
bml0aWFsTW9kZSk7CkBAIC0xMTMwLDcgKzExMzEsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIC8vIEZhbGwg
dGhyb3VnaC4KICAgICBjYXNlIEJlZm9yZUhUTUxNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0
aW9uTW9kZSgpID09IEJlZm9yZUhUTUxNb2RlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBodG1sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKICAg
ICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCh0b2tlbik7
CiAgICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEJlZm9yZUhlYWRNb2RlKTsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTExMzksMTEgKzExNDAsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAvLyBGYWxs
IHRocm91Z2guCiAgICAgY2FzZSBCZWZvcmVIZWFkTW9kZToKICAgICAgICAgQVNTRVJUKGluc2Vy
dGlvbk1vZGUoKSA9PSBCZWZvcmVIZWFkTW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gaHRtbFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAg
ICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhlYWRU
YWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaGVhZFRhZykgewogICAgICAgICAg
ICAgbV90cmVlLmluc2VydEhUTUxIZWFkRWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICBzZXRJ
bnNlcnRpb25Nb2RlKEluSGVhZE1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTE1OCwz
OCArMTE1OSwzOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KICAgICBjYXNlIEFm
dGVySGVhZE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gQWZ0ZXJIZWFk
TW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBp
ZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzSHRtbFN0
YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGJvZHlUYWcpIHsKKyAgICAgICAgaWYgKHRva2Vu
LT5uYW1lKCkgPT0gYm9keVRhZykgewogICAgICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7
CiAgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEJvZHlFbGVtZW50KHRva2VuKTsKICAgICAg
ICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5Cb2R5TW9kZSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBmcmFtZXNldFRhZykgewor
ICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBmcmFtZXNldFRhZykgewogICAgICAgICAgICAg
bV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHNldEluc2VydGlv
bk1vZGUoSW5GcmFtZXNldE1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYmFzZVRhZwotICAgICAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGJhc2Vmb250VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmdz
b3VuZFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGxpbmtUYWcKLSAgICAgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZXRhVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1l
KCkgPT0gbm9mcmFtZXNUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzY3JpcHRU
YWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdHlsZVRhZwotICAgICAgICAgICAg
fHwgdG9rZW4ubmFtZSgpID09IHRpdGxlVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgp
ID09IGJhc2VUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYmFzZWZvbnRUYWcK
KyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYmdzb3VuZFRhZworICAgICAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBsaW5rVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IG1ldGFUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbm9mcmFtZXNUYWcK
KyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc2NyaXB0VGFnCisgICAgICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IHN0eWxlVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IHRpdGxlVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
ICAgIEFTU0VSVChtX3RyZWUuaGVhZCgpKTsKLSAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+cHVzaEhUTUxIZWFkRWxlbWVudChtX3RyZWUuaGVhZCgpKTsKKyAgICAgICAgICAgIG1f
dHJlZS5vcGVuRWxlbWVudHMoKS0+cHVzaEhUTUxIZWFkRWxlbWVudChIVE1MU3RhY2tOb2RlOjpj
cmVhdGUobV90cmVlLmhlYWQoKSwgdG9rZW4pKTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRh
Z0ZvckluSGVhZCh0b2tlbik7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnJl
bW92ZUhUTUxIZWFkRWxlbWVudChtX3RyZWUuaGVhZCgpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhlYWRUYWcpIHsKKyAgICAg
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaGVhZFRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJv
cih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEyMDUsMTAgKzEy
MDYsMTAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICBjYXNlIEluQ2FwdGlvbk1vZGU6CiAg
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5DYXB0aW9uTW9kZSk7Ci0gICAgICAg
IGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgICAg
IHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAgICAgICB8fCBp
c1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IHRyVGFnKSB7CisgICAgICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFn
KHRva2VuLT5uYW1lKCkpCisgICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9r
ZW4tPm5hbWUoKSkKKyAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+
bmFtZSgpKQorICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0clRhZykgewogICAgICAg
ICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBpZiAoIXByb2Nlc3NDYXB0aW9u
RW5kVGFnRm9ySW5DYXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5n
RnJhZ21lbnQoKSk7CkBAIC0xMjIxLDExICsxMjIyLDExIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJbkNvbHVtbkdyb3VwTW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1v
ZGUoKSA9PSBJbkNvbHVtbkdyb3VwTW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0g
aHRtbFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAg
ICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNvbFRhZykg
eworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjb2xUYWcpIHsKICAgICAgICAgICAgIG1f
dHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtMTIzNywyMCArMTIzOCwyMCBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSW5UYWJsZUJvZHlNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9u
TW9kZSgpID09IEluVGFibGVCb2R5TW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0g
dHJUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdHJUYWcpIHsKICAgICAgICAg
ICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcigp
OyAvLyBIb3cgaXMgdGhlcmUgZXZlciBhbnl0aGluZyB0byBwb3A/CiAgICAgICAgICAgICBtX3Ry
ZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9k
ZShJblJvd01vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgeworICAgICAgICBpZiAoaXNU
YWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVy
cm9yKHRva2VuKTsKICAgICAgICAgICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcodHJUYWcpOwogICAg
ICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJblJvd01vZGUpOwogICAgICAgICAg
ICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi5uYW1lKCkpIHx8
IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CisgICAgICAgIGlmIChpc0Nh
cHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1lKCkpIHx8IGlzVGFibGVCb2R5Q29udGV4
dFRhZyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgc2xv
dy4KICAgICAgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUo
dGJvZHlUYWcubG9jYWxOYW1lKCkpICYmICFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVT
Y29wZSh0aGVhZFRhZy5sb2NhbE5hbWUoKSkgJiYgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5U
YWJsZVNjb3BlKHRmb290VGFnLmxvY2FsTmFtZSgpKSkgewogICAgICAgICAgICAgICAgIEFTU0VS
VChpc1BhcnNpbmdGcmFnbWVudCgpKTsKQEAgLTEyNjcsMTYgKzEyNjgsMTYgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEluUm93TW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlv
bk1vZGUoKSA9PSBJblJvd01vZGUpOwotICAgICAgICBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFn
KHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tl
bi0+bmFtZSgpKSkgewogICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRp
bFRhYmxlUm93U2NvcGVNYXJrZXIoKTsKICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxl
bWVudCh0b2tlbik7CiAgICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluQ2VsbE1vZGUpOwog
ICAgICAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5hcHBlbmRNYXJr
ZXIoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4u
bmFtZSgpID09IHRyVGFnCi0gICAgICAgICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFn
KHRva2VuLm5hbWUoKSkKLSAgICAgICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tl
bi5uYW1lKCkpKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRyVGFnCisgICAgICAg
ICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAg
ICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAg
ICAgIGlmICghcHJvY2Vzc1RyRW5kVGFnRm9ySW5Sb3coKSkgewogICAgICAgICAgICAgICAgIEFT
U0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0x
Mjg5LDEwICsxMjkwLDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbkNlbGxN
b2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluQ2VsbE1vZGUpOwotICAg
ICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAg
ICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICAgICAg
fHwgdG9rZW4ubmFtZSgpID09IHRyVGFnCi0gICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRl
eHRUYWcodG9rZW4ubmFtZSgpKSkgeworICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91
cFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFn
KHRva2VuLT5uYW1lKCkpCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnCisg
ICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50LgogICAgICAg
ICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0ZFRhZykgJiYg
IW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRoVGFnKSkgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKQEAgLTEzMDgsNyArMTMwOSw3IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICBjYXNlIEFmdGVyQm9keU1vZGU6CiAgICAgY2FzZSBBZnRlckFmdGVyQm9keU1v
ZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gQWZ0ZXJCb2R5TW9kZSB8fCBp
bnNlcnRpb25Nb2RlKCkgPT0gQWZ0ZXJBZnRlckJvZHlNb2RlKTsKLSAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxU
YWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMzE3LDIxICsxMzE4LDIxIEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbkhlYWROb3NjcmlwdE1vZGU6CiAgICAgICAg
IEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5IZWFkTm9zY3JpcHRNb2RlKTsKLSAgICAgICAg
aWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgp
ID09IGh0bWxUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHko
dG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gYmFzZWZvbnRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBi
Z3NvdW5kVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbGlua1RhZwotICAgICAg
ICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1ldGFUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBub2ZyYW1lc1RhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHN0eWxl
VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJhc2Vmb250VGFnCisgICAgICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJnc291bmRUYWcKKyAgICAgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gbGlua1RhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtZXRh
VGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG5vZnJhbWVzVGFnCisgICAgICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHN0eWxlVGFnKSB7CiAgICAgICAgICAgICBib29sIGRp
ZFByb2Nlc3MgPSBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOwogICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChkaWRQcm9jZXNzLCBkaWRQcm9jZXNzKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcgfHwgdG9r
ZW4ubmFtZSgpID09IG5vc2NyaXB0VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09
IGh0bWxUYWcgfHwgdG9rZW4tPm5hbWUoKSA9PSBub3NjcmlwdFRhZykgewogICAgICAgICAgICAg
cGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEz
NDAsMTkgKzEzNDEsMTkgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICBjYXNlIEluRnJhbWVz
ZXRNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluRnJhbWVzZXRNb2Rl
KTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgIGlmICh0
b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRU
YWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsKKyAgICAgICAgaWYgKHRva2Vu
LT5uYW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsKICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1M
RWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKHRva2VuLm5hbWUoKSA9PSBmcmFtZVRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBmcmFtZVRhZykgewogICAgICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRN
TEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGlmICh0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gbm9mcmFtZXNUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZ0Zvcklu
SGVhZCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEzNjEsMTEg
KzEzNjIsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgIGNhc2UgQWZ0ZXJGcmFtZXNldE1vZGU6CiAgICAgY2FzZSBB
ZnRlckFmdGVyRnJhbWVzZXRNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09
IEFmdGVyRnJhbWVzZXRNb2RlIHx8IGluc2VydGlvbk1vZGUoKSA9PSBBZnRlckFmdGVyRnJhbWVz
ZXRNb2RlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAg
IGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1s
U3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcpIHsKKyAgICAgICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gbm9mcmFtZXNUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NTdGFy
dFRhZ0ZvckluSGVhZCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTEzNzMsNjQgKzEzNzQsNjQgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRh
ZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICBjYXNlIEluU2Vs
ZWN0SW5UYWJsZU1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5TZWxl
Y3RJblRhYmxlTW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY2FwdGlvblRhZwot
ICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRhYmxlVGFnCi0gICAgICAgICAgICB8fCBp
c1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IHRyVGFnCi0gICAgICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9r
ZW4ubmFtZSgpKSkgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjYXB0aW9uVGFnCisg
ICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnCisgICAgICAgICAgICB8fCBp
c1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gdHJUYWcKKyAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0
b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAg
ICAgICBBdG9taWNIVE1MVG9rZW4gZW5kU2VsZWN0KEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIHNl
bGVjdFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZFNlbGVj
dCk7CisgICAgICAgICAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBlbmRTZWxlY3QgPSBBdG9t
aWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBzZWxlY3RUYWcubG9j
YWxOYW1lKCkpOworICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3QuZ2V0KCkpOwog
ICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICAvLyBGYWxsIHRocm91Z2gKICAgICBjYXNlIEluU2VsZWN0TW9k
ZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJblNlbGVjdE1vZGUgfHwgaW5z
ZXJ0aW9uTW9kZSgpID09IEluU2VsZWN0SW5UYWJsZU1vZGUpOwotICAgICAgICBpZiAodG9rZW4u
bmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRtbFRh
ZykgewogICAgICAgICAgICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keSh0b2tlbik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBvcHRpb25UYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gb3B0aW9uVGFnKSB7
CiAgICAgICAgICAgICBpZiAobV90cmVlLmN1cnJlbnROb2RlKCktPmhhc1RhZ05hbWUob3B0aW9u
VGFnKSkgewotICAgICAgICAgICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRPcHRpb24oSFRNTFRv
a2VuVHlwZXM6OkVuZFRhZywgb3B0aW9uVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAg
ICBwcm9jZXNzRW5kVGFnKGVuZE9wdGlvbik7CisgICAgICAgICAgICAgICAgUmVmUHRyPEF0b21p
Y0hUTUxUb2tlbj4gZW5kT3B0aW9uID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2Vu
VHlwZXM6OkVuZFRhZywgb3B0aW9uVGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgICAgICBw
cm9jZXNzRW5kVGFnKGVuZE9wdGlvbi5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gb3B0Z3JvdXBUYWcpIHsKKyAg
ICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gb3B0Z3JvdXBUYWcpIHsKICAgICAgICAgICAgIGlm
IChtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7Ci0gICAgICAg
ICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZE9wdGlvbihIVE1MVG9rZW5UeXBlczo6RW5kVGFn
LCBvcHRpb25UYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWco
ZW5kT3B0aW9uKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBlbmRP
cHRpb24gPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBv
cHRpb25UYWcubG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5k
T3B0aW9uLmdldCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtX3RyZWUuY3Vy
cmVudE5vZGUoKS0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpIHsKLSAgICAgICAgICAgICAgICBB
dG9taWNIVE1MVG9rZW4gZW5kT3B0Z3JvdXAoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgb3B0Z3Jv
dXBUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kT3B0
Z3JvdXApOworICAgICAgICAgICAgICAgIFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+IGVuZE9wdGdy
b3VwID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgb3B0
Z3JvdXBUYWcubG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5k
T3B0Z3JvdXAuZ2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV90cmVlLmluc2Vy
dEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IHNlbGVjdFRhZykgeworICAgICAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBzZWxlY3RUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwot
ICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZFNlbGVjdChIVE1MVG9rZW5UeXBlczo6RW5k
VGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhl
bmRTZWxlY3QpOworICAgICAgICAgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZW5kU2VsZWN0
ID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgc2VsZWN0
VGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kU2VsZWN0Lmdl
dCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4u
bmFtZSgpID09IGlucHV0VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0ga2V5Z2Vu
VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdGV4dGFyZWFUYWcpIHsKKyAgICAg
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaW5wdXRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0ga2V5Z2VuVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRleHRh
cmVhVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIGlm
ICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNlbGVjdFNjb3BlKHNlbGVjdFRhZykpIHsKICAg
ICAgICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVu
ZFNlbGVjdChIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkpOwot
ICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3QpOworICAgICAgICAgICAgUmVmUHRy
PEF0b21pY0hUTUxUb2tlbj4gZW5kU2VsZWN0ID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRN
TFRva2VuVHlwZXM6OkVuZFRhZywgc2VsZWN0VGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAg
IHByb2Nlc3NFbmRUYWcoZW5kU2VsZWN0LmdldCgpKTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFy
dFRhZyh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkg
PT0gc2NyaXB0VGFnKSB7CiAgICAgICAgICAgICBib29sIGRpZFByb2Nlc3MgPSBwcm9jZXNzU3Rh
cnRUYWdGb3JJbkhlYWQodG9rZW4pOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChkaWRQcm9j
ZXNzLCBkaWRQcm9jZXNzKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE0NDYsMTYgKzE0NDcs
MTYgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgIH0KIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NIdG1s
U3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9r
ZW4pCiB7CiAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgbV90cmVlLmluc2VydEhUTUxIdG1s
U3RhcnRUYWdJbkJvZHkodG9rZW4pOwogfQogCi1ib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRv
a2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRh
Zyk7Ci0gICAgQVNTRVJUKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnKTsKKyAgICBBU1NFUlQodG9r
ZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKTsKKyAgICBBU1NFUlQodG9rZW4t
Pm5hbWUoKSA9PSBib2R5VGFnKTsKICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5T
Y29wZShib2R5VGFnLmxvY2FsTmFtZSgpKSkgewogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQ2NSwxNSArMTQ2NiwxNSBAQCBib29sIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1M
VG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlw
ZXM6OkVuZFRhZyk7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6
OkVuZFRhZyk7CiAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogcmVjb3JkID0g
bV90cmVlLm9wZW5FbGVtZW50cygpLT50b3BSZWNvcmQoKTsKICAgICB3aGlsZSAoMSkgewogICAg
ICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSA9IHJlY29yZC0+bm9kZSgpOwotICAgICAg
ICBpZiAobm9kZS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpIHsKLSAgICAgICAgICAgIG1f
dHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi5uYW1lKCkpOwot
ICAgICAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2Vu
Lm5hbWUoKSkpCisgICAgICAgIGlmIChub2RlLT5oYXNMb2NhbE5hbWUodG9rZW4tPm5hbWUoKSkp
IHsKKyAgICAgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lv
bih0b2tlbi0+bmFtZSgpKTsKKyAgICAgICAgICAgIGlmICghbV90cmVlLmN1cnJlbnROb2RlKCkt
Pmhhc0xvY2FsTmFtZSh0b2tlbi0+bmFtZSgpKSkKICAgICAgICAgICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3Bw
ZWQodG9FbGVtZW50KG5vZGUuZ2V0KCkpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1MDIs
NyArMTUwMyw3IEBAIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIEhUTUxUcmVlQnVp
bGRlcjo6ZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtCiB9CiAKIC8vIGh0dHA6Ly93d3cu
d2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXph
dGlvbi5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHkKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxs
VGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsK
ICAgICAvLyBUaGUgYWRvcHRpb24gYWdlbmN5IGFsZ29yaXRobSBpcyBOXjIuIFdlIGxpbWl0IHRo
ZSBudW1iZXIgb2YgaXRlcmF0aW9ucwogICAgIC8vIHRvIHN0b3AgZnJvbSBoYW5naW5nIHRoZSB3
aG9sZSBicm93c2VyLiBUaGlzIGxpbWl0IGlzIHNwZWNpZmllZCBpbiB0aGUKQEAgLTE1MTMsNyAr
MTUxNCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0ZXJJdGVy
YXRpb25MaW1pdDsgKytpKSB7CiAgICAgICAgIC8vIDEuCi0gICAgICAgIEVsZW1lbnQqIGZvcm1h
dHRpbmdFbGVtZW50ID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5jbG9zZXN0
RWxlbWVudEluU2NvcGVXaXRoTmFtZSh0b2tlbi5uYW1lKCkpOworICAgICAgICBFbGVtZW50KiBm
b3JtYXR0aW5nRWxlbWVudCA9IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+Y2xv
c2VzdEVsZW1lbnRJblNjb3BlV2l0aE5hbWUodG9rZW4tPm5hbWUoKSk7CiAgICAgICAgIGlmICgh
Zm9ybWF0dGluZ0VsZW1lbnQgfHwgKChtX3RyZWUub3BlbkVsZW1lbnRzKCktPmNvbnRhaW5zKGZv
cm1hdHRpbmdFbGVtZW50KSkgJiYgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZShmb3Jt
YXR0aW5nRWxlbWVudCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIENoZWNrIHRoZSBzdGFjayBvZiBvcGVuIGVsZW1l
bnRzIGZvciBhIG1vcmUgc3BlY2lmaWMgcGFyc2UgZXJyb3IuCkBAIC0xNTU5LDkgKzE1NjAsMTAg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgICAgICAgICAgaWYgKG5vZGUgPT0gZm9ybWF0dGluZ0VsZW1lbnRS
ZWNvcmQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAvLyA2LjUKLSAgICAg
ICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gbV90cmVlLmNyZWF0ZUhUTUxFbGVt
ZW50RnJvbUVsZW1lbnRSZWNvcmQobm9kZSk7CisgICAgICAgICAgICBSZWZQdHI8SFRNTFN0YWNr
Tm9kZT4gbmV3RWxlbWVudCA9IG1fdHJlZS5jcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4obm9k
ZS0+c3RhY2tOb2RlKCkpOworCiAgICAgICAgICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
OjpFbnRyeSogbm9kZUVudHJ5ID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5m
aW5kKG5vZGUtPmVsZW1lbnQoKSk7Ci0gICAgICAgICAgICBub2RlRW50cnktPnJlcGxhY2VFbGVt
ZW50KG5ld0VsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgbm9kZUVudHJ5LT5yZXBsYWNlRWxl
bWVudChuZXdFbGVtZW50KTsKICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VFbGVtZW50KG5ld0Vs
ZW1lbnQucmVsZWFzZSgpKTsKICAgICAgICAgICAgIC8vIDYuNCAtLSBJbnRlbnRpb25hbGx5IG91
dCBvZiBvcmRlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbm9kZQogICAgICAgICAgICAgLy8g
d2FzIHJlcGxhY2VkIGluIDYuNS4KQEAgLTE1OTUsMjIgKzE1OTcsMjIgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ICAgICAgICAgICAgICAgIGxhc3ROb2RlLT5lbGVtZW50KCktPmxhenlBdHRhY2goKTsKICAgICAg
ICAgfQogICAgICAgICAvLyA4Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0g
bV90cmVlLmNyZWF0ZUhUTUxFbGVtZW50RnJvbUVsZW1lbnRSZWNvcmQoZm9ybWF0dGluZ0VsZW1l
bnRSZWNvcmQpOworICAgICAgICBSZWZQdHI8SFRNTFN0YWNrTm9kZT4gbmV3RWxlbWVudCA9IG1f
dHJlZS5jcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4oZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQt
PnN0YWNrTm9kZSgpKTsKICAgICAgICAgLy8gOQotICAgICAgICBuZXdFbGVtZW50LT50YWtlQWxs
Q2hpbGRyZW5Gcm9tKGZ1cnRoZXN0QmxvY2stPmVsZW1lbnQoKSk7CisgICAgICAgIG5ld0VsZW1l
bnQtPmVsZW1lbnQoKS0+dGFrZUFsbENoaWxkcmVuRnJvbShmdXJ0aGVzdEJsb2NrLT5lbGVtZW50
KCkpOwogICAgICAgICAvLyAxMAogICAgICAgICBFbGVtZW50KiBmdXJ0aGVzdEJsb2NrRWxlbWVu
dCA9IGZ1cnRoZXN0QmxvY2stPmVsZW1lbnQoKTsKICAgICAgICAgLy8gRklYTUU6IEFsbCB0aGlz
IGNyZWF0aW9uIC8gcGFyc2VyQWRkQ2hpbGQgLyBhdHRhY2ggYnVzaW5lc3Mgc2hvdWxkCiAgICAg
ICAgIC8vICAgICAgICBiZSBpbiBIVE1MQ29uc3RydWN0aW9uU2l0ZS4gIE15IGd1ZXNzIGlzIHRo
YXQgc3RlcHMgOC0tMTIKICAgICAgICAgLy8gICAgICAgIHNob3VsZCBhbGwgYmUgaW4gc29tZSBI
VE1MQ29uc3RydWN0aW9uU2l0ZSBmdW5jdGlvbi4KLSAgICAgICAgZnVydGhlc3RCbG9ja0VsZW1l
bnQtPnBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQpOwotICAgICAgICBpZiAoZnVydGhlc3RCbG9j
a0VsZW1lbnQtPmF0dGFjaGVkKCkgJiYgIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpIHsKKyAgICAg
ICAgZnVydGhlc3RCbG9ja0VsZW1lbnQtPnBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQtPmVsZW1l
bnQoKSk7CisgICAgICAgIGlmIChmdXJ0aGVzdEJsb2NrRWxlbWVudC0+YXR0YWNoZWQoKSAmJiAh
bmV3RWxlbWVudC0+ZWxlbWVudCgpLT5hdHRhY2hlZCgpKSB7CiAgICAgICAgICAgICAvLyBOb3Rp
Y2UgdGhhdCBuZXdFbGVtZW50IG1pZ2h0IGFscmVhZHkgYmUgYXR0YWNoZWQgaWYsIGZvciBleGFt
cGxlLCBvbmUgb2YgdGhlIHJlcGFyZW50ZWQKICAgICAgICAgICAgIC8vIGNoaWxkcmVuIGlzIGEg
c3R5bGUgZWxlbWVudCwgd2hpY2ggYXR0YWNoZXMgaXRzZWxmIGF1dG9tYXRpY2FsbHkuCi0gICAg
ICAgICAgICBuZXdFbGVtZW50LT5hdHRhY2goKTsKKyAgICAgICAgICAgIG5ld0VsZW1lbnQtPmVs
ZW1lbnQoKS0+YXR0YWNoKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gMTEKLSAgICAgICAgbV90
cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5zd2FwVG8oZm9ybWF0dGluZ0VsZW1lbnQs
IG5ld0VsZW1lbnQuZ2V0KCksIGJvb2ttYXJrKTsKKyAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1h
dHRpbmdFbGVtZW50cygpLT5zd2FwVG8oZm9ybWF0dGluZ0VsZW1lbnQsIG5ld0VsZW1lbnQsIGJv
b2ttYXJrKTsKICAgICAgICAgLy8gMTIKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5y
ZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOwogICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkt
Pmluc2VydEFib3ZlKG5ld0VsZW1lbnQsIGZ1cnRoZXN0QmxvY2spOwpAQCAtMTY2OSwxMSArMTY3
MSwxMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cmVzZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlh
dGVseSgpCiAgICAgfQogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0Zv
ckluVGFibGVCb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7
Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKTsKLSAg
ICBpZiAoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKLSAgICAgICAgaWYg
KCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi5uYW1lKCkpKSB7Cisg
ICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZyk7CisgICAg
aWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgeworICAgICAgICBpZiAo
IW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMTY4Miw3ICsxNjg0LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NF
bmRUYWdGb3JJblRhYmxlQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBzZXRJ
bnNlcnRpb25Nb2RlKEluVGFibGVNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
dGFibGVUYWcpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgc2xvdy4KICAgICAgICAgaWYg
KCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0Ym9keVRhZy5sb2NhbE5hbWUo
KSkgJiYgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRoZWFkVGFnLmxvY2Fs
TmFtZSgpKSAmJiAhbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodGZvb3RUYWcu
bG9jYWxOYW1lKCkpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7
CkBAIC0xNjk1LDI1ICsxNjk3LDI1IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5k
VGFnRm9ySW5UYWJsZUJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgcHJvY2Vz
c0VuZFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5h
bWUoKSA9PSBib2R5VGFnCi0gICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9r
ZW4ubmFtZSgpKQotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZwotICAgICAgICB8
fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICB8fCB0b2tlbi5u
YW1lKCkgPT0gdHJUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnCisgICAg
ICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnCisgICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4
dFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7
CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKHRva2VuKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NFbmRUYWdGb3JJblJvdyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblJvdyhBdG9taWNIVE1MVG9rZW4qIHRv
a2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRh
Zyk7Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0clRhZykgeworICAgIEFTU0VSVCh0b2tlbi0+
dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOworICAgIGlmICh0b2tlbi0+bmFtZSgp
ID09IHRyVGFnKSB7CiAgICAgICAgIHByb2Nlc3NUckVuZFRhZ0ZvckluUm93KCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0YWJsZVRhZykgeworICAg
IGlmICh0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnKSB7CiAgICAgICAgIGlmICghcHJvY2Vzc1Ry
RW5kVGFnRm9ySW5Sb3coKSkgewogICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50
KCkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTcyMiw4ICsxNzI0LDggQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblJvdyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKLSAgICAgICAg
aWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi5uYW1lKCkpKSB7
CisgICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgeworICAgICAg
ICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRva2VuLT5uYW1lKCkp
KSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMTczMiw0MyArMTczNCw0MyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0VuZFRhZ0ZvckluUm93KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHBy
b2Nlc3NFbmRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gYm9keVRhZwotICAgICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFn
KHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGh0bWxUYWcKLSAgICAg
ICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICBpZiAodG9r
ZW4tPm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBU
YWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnCisg
ICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAg
ICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBwcm9jZXNz
RW5kVGFnRm9ySW5UYWJsZSh0b2tlbik7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzRW5kVGFnRm9ySW5DZWxsKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQog
ewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZyk7Ci0g
ICAgaWYgKGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7Ci0gICAgICAgIGlm
ICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgewor
ICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOworICAg
IGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKKyAgICAgICAgaWYg
KCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi0+bmFtZSgpKSkgewog
ICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsKLSAgICAgICAg
aWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpCisg
ICAgICAgIGlmICghbV90cmVlLmN1cnJlbnROb2RlKCktPmhhc0xvY2FsTmFtZSh0b2tlbi0+bmFt
ZSgpKSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2VuLm5hbWUoKSk7CisgICAgICAgIG1fdHJl
ZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4tPm5hbWUoKSk7CiAgICAgICAg
IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+Y2xlYXJUb0xhc3RNYXJrZXIoKTsK
ICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJblJvd01vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZwotICAgICAgICB8fCBpc0NhcHRp
b25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IGh0bWxUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAg
IHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcK
LSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnCi0gICAgICAgIHx8IGlzVGFibGVCb2R5
Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgewotICAgICAgICAgICAgQVNTRVJU
KGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpIHx8IGlzUGFyc2luZ0ZyYWdtZW50
KCkpOworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnCisgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gdHJUYWcKKyAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2Vu
LT5uYW1lKCkpKSB7CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxl
U2NvcGUodG9rZW4tPm5hbWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpc1RhYmxlQm9keUNv
bnRleHRUYWcodG9rZW4tPm5hbWUoKSkgfHwgaXNQYXJzaW5nRnJhZ21lbnQoKSk7CiAgICAgICAg
ICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtMTc3OSw1NCArMTc4MSw1NCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRh
Z0ZvckluQ2VsbChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIHByb2Nlc3NFbmRUYWdGb3JJ
bkJvZHkodG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0Zv
ckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NF
UlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOwotICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gYm9keVRhZykgeworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxU
b2tlblR5cGVzOjpFbmRUYWcpOworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJvZHlUYWcpIHsK
ICAgICAgICAgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICBB
dG9taWNIVE1MVG9rZW4gZW5kQm9keShIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBib2R5VGFnLmxv
Y2FsTmFtZSgpKTsKLSAgICAgICAgaWYgKHByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KGVuZEJv
ZHkpKQorICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgUmVmUHRy
PEF0b21pY0hUTUxUb2tlbj4gZW5kQm9keSA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxU
b2tlblR5cGVzOjpFbmRUYWcsIGJvZHlUYWcubG9jYWxOYW1lKCkpOworICAgICAgICBpZiAocHJv
Y2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoZW5kQm9keS5nZXQoKSkpCiAgICAgICAgICAgICBwcm9j
ZXNzRW5kVGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4u
bmFtZSgpID09IGFkZHJlc3NUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGFydGljbGVU
YWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGFzaWRlVGFnCi0gICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBibG9ja3F1b3RlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBidXR0
b25UYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGNlbnRlclRhZwotICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0gZGV0YWlsc1RhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGly
VGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBkaXZUYWcKLSAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGRsVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmaWVsZHNldFRhZwot
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZmlnY2FwdGlvblRhZwotICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gZmlndXJlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmb290ZXJU
YWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGhlYWRlclRhZwotICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gaGdyb3VwVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaXN0aW5n
VGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZW51VGFnCi0gICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBuYXZUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG9sVGFnCi0gICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBwcmVUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IHNlY3Rpb25UYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHN1bW1hcnlUYWcKLSAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IHVsVGFnKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5F
bGVtZW50cygpLT5pblNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBhZGRyZXNzVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYXJ0aWNsZVRhZwor
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGFzaWRlVGFnCisgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gYmxvY2txdW90ZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJ1dHRv
blRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGNlbnRlclRhZworICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGRldGFpbHNUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBk
aXJUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkaXZUYWcKKyAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSBkbFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGZpZWxkc2V0
VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZmlnY2FwdGlvblRhZworICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IGZpZ3VyZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IGZvb3RlclRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGhlYWRlclRhZworICAgICAg
ICB8fCB0b2tlbi0+bmFtZSgpID09IGhncm91cFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IGxpc3RpbmdUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtZW51VGFnCisgICAg
ICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbmF2VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkg
PT0gb2xUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBwcmVUYWcKKyAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBzZWN0aW9uVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
c3VtbWFyeVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHVsVGFnKSB7CisgICAgICAg
IGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpOwotICAgICAgICBp
ZiAoIW1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNMb2NhbE5hbWUodG9rZW4ubmFtZSgpKSkKKyAg
ICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1l
KCkpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgIG1fdHJlZS5vcGVu
RWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4ubmFtZSgpKTsKKyAgICAgICAgbV90cmVl
Lm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi0+bmFtZSgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGZvcm1UYWcpIHsKKyAgICBp
ZiAodG9rZW4tPm5hbWUoKSA9PSBmb3JtVGFnKSB7CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBu
b2RlID0gbV90cmVlLnRha2VGb3JtKCk7CiAgICAgICAgIGlmICghbm9kZSB8fCAhbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5pblNjb3BlKG5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVy
cm9yKHRva2VuKTsKQEAgLTE4MzcsNzMgKzE4MzksNzMgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnJl
bW92ZShub2RlLmdldCgpKTsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwVGFnKSB7
Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRvblNjb3BlKHRva2Vu
Lm5hbWUoKSkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBwVGFnKSB7CisgICAgICAgIGlm
ICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRvblNjb3BlKHRva2VuLT5uYW1lKCkpKSB7
CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHByb2Nlc3NGYWtl
U3RhcnRUYWcocFRhZyk7Ci0gICAgICAgICAgICBBU1NFUlQobV90cmVlLm9wZW5FbGVtZW50cygp
LT5pblNjb3BlKHRva2VuLm5hbWUoKSkpOworICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5vcGVu
RWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi0+bmFtZSgpKSk7CiAgICAgICAgICAgICBwcm9jZXNz
RW5kVGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBt
X3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG9rZW4ubmFtZSgpKTsK
LSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5h
bWUoKSkpCisgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lv
bih0b2tlbi0+bmFtZSgpKTsKKyAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFz
TG9jYWxOYW1lKHRva2VuLT5uYW1lKCkpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7
Ci0gICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4ubmFt
ZSgpKTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tl
bi0+bmFtZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgp
ID09IGxpVGFnKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkxpc3RJ
dGVtU2NvcGUodG9rZW4ubmFtZSgpKSkgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGxpVGFn
KSB7CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkxpc3RJdGVtU2NvcGUo
dG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRF
bmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi5uYW1lKCkpOwotICAgICAgICBpZiAoIW1fdHJlZS5j
dXJyZW50Tm9kZSgpLT5oYXNMb2NhbE5hbWUodG9rZW4ubmFtZSgpKSkKKyAgICAgICAgbV90cmVl
LmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKHRva2VuLT5uYW1lKCkpOworICAg
ICAgICBpZiAoIW1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNMb2NhbE5hbWUodG9rZW4tPm5hbWUo
KSkpCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgbV90cmVlLm9wZW5F
bGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi5uYW1lKCkpOworICAgICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2VuLT5uYW1lKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZGRUYWcKLSAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IGR0VGFnKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50
cygpLT5pblNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBk
ZFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGR0VGFnKSB7CisgICAgICAgIGlmICgh
bV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAg
ICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG9rZW4u
bmFtZSgpKTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1l
KHRva2VuLm5hbWUoKSkpCisgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0
aEV4Y2x1c2lvbih0b2tlbi0+bmFtZSgpKTsKKyAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5v
ZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1lKCkpKQogICAgICAgICAgICAgcGFyc2VFcnJv
cih0b2tlbik7Ci0gICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQo
dG9rZW4ubmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBv
cHBlZCh0b2tlbi0+bmFtZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoaXNO
dW1iZXJlZEhlYWRlclRhZyh0b2tlbi5uYW1lKCkpKSB7CisgICAgaWYgKGlzTnVtYmVyZWRIZWFk
ZXJUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRz
KCktPmhhc051bWJlcmVkSGVhZGVyRWxlbWVudEluU2NvcGUoKSkgewogICAgICAgICAgICAgcGFy
c2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
bV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3Vy
cmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpCisgICAgICAgIGlmICghbV90
cmVlLmN1cnJlbnROb2RlKCktPmhhc0xvY2FsTmFtZSh0b2tlbi0+bmFtZSgpKSkKICAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBv
cFVudGlsTnVtYmVyZWRIZWFkZXJFbGVtZW50UG9wcGVkKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaWYgKGlzRm9ybWF0dGluZ1RhZyh0b2tlbi5uYW1lKCkpKSB7CisgICAgaWYgKGlz
Rm9ybWF0dGluZ1RhZyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICBjYWxsVGhlQWRvcHRpb25B
Z2VuY3kodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gYXBwbGV0VGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtYXJxdWVlVGFnCi0g
ICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBvYmplY3RUYWcpIHsKLSAgICAgICAgaWYgKCFtX3Ry
ZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUodG9rZW4ubmFtZSgpKSkgeworICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IGFwcGxldFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1hcnF1
ZWVUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBvYmplY3RUYWcpIHsKKyAgICAgICAg
aWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUodG9rZW4tPm5hbWUoKSkpIHsKICAg
ICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7Ci0gICAgICAgIGlm
ICghbV90cmVlLmN1cnJlbnROb2RlKCktPmhhc0xvY2FsTmFtZSh0b2tlbi5uYW1lKCkpKQorICAg
ICAgICBpZiAoIW1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNMb2NhbE5hbWUodG9rZW4tPm5hbWUo
KSkpCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgbV90cmVlLm9wZW5F
bGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi5uYW1lKCkpOworICAgICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2VuLT5uYW1lKCkpOwogICAgICAgICBt
X3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPmNsZWFyVG9MYXN0TWFya2VyKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiclRhZykgewor
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJyVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9r
ZW4pOwogICAgICAgICBwcm9jZXNzRmFrZVN0YXJ0VGFnKGJyVGFnKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMTk1MiwxOSArMTk1NCwxOSBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rh
YmxlRW5kVGFnRm9ySW5UYWJsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKEF0b21pY0hU
TUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5U
eXBlczo6RW5kVGFnKTsKLSAgICBpZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAg
QVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZyk7CisgICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcpIHsKICAgICAgICAgcHJvY2Vzc1RhYmxlRW5kVGFn
Rm9ySW5UYWJsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gYm9keVRhZwotICAgICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2Vu
Lm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGh0bWxUYWcKLSAgICAgICAgfHwg
aXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgaXNUYWJsZUNl
bGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRy
VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYm9keVRhZworICAgICAgICB8fCBpc0Nh
cHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gaHRtbFRhZworICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4t
Pm5hbWUoKSkKKyAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkp
CisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJUYWcpIHsKICAgICAgICAgcGFyc2VFcnJv
cih0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTc0LDkgKzE5NzYsOSBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICBwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KHRva2VuKTsKIH0KIAotdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
K3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiogdG9r
ZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFn
KTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKTsK
ICAgICBzd2l0Y2ggKGluc2VydGlvbk1vZGUoKSkgewogICAgIGNhc2UgSW5pdGlhbE1vZGU6CiAg
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5pdGlhbE1vZGUpOwpAQCAtMTk4NCw3
ICsxOTg2LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgogICAgIGNhc2UgQmVmb3Jl
SFRNTE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gQmVmb3JlSFRNTE1v
ZGUpOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4ubmFtZSgp
ICE9IGJvZHlUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGh0bWxUYWcgJiYgdG9rZW4ubmFtZSgpICE9
IGJyVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4t
Pm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+
bmFtZSgpICE9IGJyVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTk5Miw3ICsxOTk0LDcgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAg
ICAgLy8gRmFsbCB0aHJvdWdoLgogICAgIGNhc2UgQmVmb3JlSGVhZE1vZGU6CiAgICAgICAgIEFT
U0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gQmVmb3JlSGVhZE1vZGUpOwotICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGJvZHlUYWcgJiYgdG9rZW4u
bmFtZSgpICE9IGh0bWxUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGJyVGFnKSB7CisgICAgICAgIGlm
ICh0b2tlbi0+bmFtZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4tPm5hbWUoKSAhPSBib2R5VGFnICYm
IHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGJyVGFnKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMjAwMCwxMiArMjAwMiwxMiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAvLyBGYWxsIHRocm91Z2gu
CiAgICAgY2FzZSBJbkhlYWRNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09
IEluSGVhZE1vZGUpOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhlYWRUYWcpIHsKKyAg
ICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaGVhZFRhZykgewogICAgICAgICAgICAgbV90cmVl
Lm9wZW5FbGVtZW50cygpLT5wb3BIVE1MSGVhZEVsZW1lbnQoKTsKICAgICAgICAgICAgIHNldElu
c2VydGlvbk1vZGUoQWZ0ZXJIZWFkTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLm5hbWUoKSAh
PSBodG1sVGFnICYmIHRva2VuLm5hbWUoKSAhPSBiclRhZykgeworICAgICAgICBpZiAodG9rZW4t
Pm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+
bmFtZSgpICE9IGJyVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjAxMyw3ICsyMDE1LDcgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAg
ICAgLy8gRmFsbCB0aHJvdWdoLgogICAgIGNhc2UgQWZ0ZXJIZWFkTW9kZToKICAgICAgICAgQVNT
RVJUKGluc2VydGlvbk1vZGUoKSA9PSBBZnRlckhlYWRNb2RlKTsKLSAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLm5hbWUoKSAhPSBodG1sVGFnICYmIHRva2VuLm5h
bWUoKSAhPSBiclRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSAhPSBib2R5VGFnICYm
IHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGJyVGFnKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMjAyOSwxMSArMjAzMSwxMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICBjYXNl
IEluQ2FwdGlvbk1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5DYXB0
aW9uTW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY2FwdGlvblRhZykgeworICAg
ICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjYXB0aW9uVGFnKSB7CiAgICAgICAgICAgICBwcm9j
ZXNzQ2FwdGlvbkVuZFRhZ0ZvckluQ2FwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcpIHsKKyAgICAgICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwogICAgICAgICAgICAgaWYgKCFwcm9jZXNzQ2FwdGlvbkVuZFRhZ0ZvckluQ2FwdGlv
bigpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkpOwpAQCAt
MjA0MiwxMyArMjA0NCwxMyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBib2R5VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY29sVGFnCi0gICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY29sZ3JvdXBUYWcKLSAgICAgICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBodG1sVGFnCi0gICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRU
YWcodG9rZW4ubmFtZSgpKQotICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRv
a2VuLm5hbWUoKSkKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0clRhZykgeworICAg
ICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IGNvbFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBjb2xncm91
cFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnCisgICAgICAgICAg
ICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgICAgIHx8
IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSB0clRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTIwNTYsMTEgKzIwNTgsMTEgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbkNvbHVtbkdyb3VwTW9kZToKICAgICAgICAgQVNT
RVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbkNvbHVtbkdyb3VwTW9kZSk7Ci0gICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gY29sZ3JvdXBUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkg
PT0gY29sZ3JvdXBUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NDb2xncm91cEVuZFRhZ0Zvcklu
Q29sdW1uR3JvdXAoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IGNvbFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9
PSBjb2xUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC0yMDg0LDcgKzIwODYsNyBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBicmVh
azsKICAgICBjYXNlIEFmdGVyQm9keU1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2Rl
KCkgPT0gQWZ0ZXJCb2R5TW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRh
ZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAg
ICBpZiAoaXNQYXJzaW5nRnJhZ21lbnQoKSkgewogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIxMDEsMTQgKzIxMDMsMTQgQEAg
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbkhlYWROb3NjcmlwdE1vZGU6CiAgICAgICAg
IEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5IZWFkTm9zY3JpcHRNb2RlKTsKLSAgICAgICAg
aWYgKHRva2VuLm5hbWUoKSA9PSBub3NjcmlwdFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5h
bWUoKSA9PSBub3NjcmlwdFRhZykgewogICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50
RWxlbWVudCgpLT5oYXNUYWdOYW1lKG5vc2NyaXB0VGFnKSk7CiAgICAgICAgICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50
RWxlbWVudCgpLT5oYXNUYWdOYW1lKGhlYWRUYWcpKTsKICAgICAgICAgICAgIHNldEluc2VydGlv
bk1vZGUoSW5IZWFkTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKHRva2VuLm5hbWUoKSAhPSBiclRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUo
KSAhPSBiclRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTIxMTYsNyArMjExOCw3IEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHBy
b2Nlc3NUb2tlbih0b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dE1vZGU6Ci0g
ICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2NyaXB0VGFnKSB7CisgICAgICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IHNjcmlwdFRhZykgewogICAgICAgICAgICAgLy8gUGF1c2Ugb3Vyc2VsdmVz
IHNvIHRoYXQgcGFyc2luZyBzdG9wcyB1bnRpbCB0aGUgc2NyaXB0IGNhbiBiZSBwcm9jZXNzZWQg
YnkgdGhlIGNhbGxlci4KICAgICAgICAgICAgIEFTU0VSVChtX3RyZWUuY3VycmVudEVsZW1lbnQo
KS0+aGFzVGFnTmFtZShzY3JpcHRUYWcpKTsKICAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNz
ID0gbV90cmVlLmN1cnJlbnRFbGVtZW50KCk7CkBAIC0yMTM4LDcgKzIxNDAsNyBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEluRnJhbWVzZXRNb2RlOgogICAgICAgICBBU1NFUlQoaW5z
ZXJ0aW9uTW9kZSgpID09IEluRnJhbWVzZXRNb2RlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBmcmFtZXNldFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBmcmFtZXNl
dFRhZykgewogICAgICAgICAgICAgaWYgKG1fdHJlZS5jdXJyZW50Tm9kZSgpID09IG1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+cm9vdE5vZGUoKSkgewogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIxNTEsNyArMjE1Myw3IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWZ0ZXJGcmFtZXNldE1vZGU6CiAgICAgICAgIEFT
U0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gQWZ0ZXJGcmFtZXNldE1vZGUpOwotICAgICAgICBpZiAo
dG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
aHRtbFRhZykgewogICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShBZnRlckFmdGVyRnJhbWVz
ZXRNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjE2MiwxNSArMjE2
NCwxNSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICBjYXNlIEluU2VsZWN0SW5UYWJsZU1vZGU6
CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5TZWxlY3RJblRhYmxlTW9kZSk7
Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY2FwdGlvblRhZwotICAgICAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IHRhYmxlVGFnCi0gICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRl
eHRUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFn
Ci0gICAgICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgewor
ICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjYXB0aW9uVGFnCisgICAgICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnCisgICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRl
eHRUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJU
YWcKKyAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkg
ewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgICAgICBpZiAobV90cmVl
Lm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgewotICAgICAgICAg
ICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRTZWxlY3QoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywg
c2VsZWN0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVu
ZFNlbGVjdCk7CisgICAgICAgICAgICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxl
U2NvcGUodG9rZW4tPm5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8QXRvbWljSFRN
TFRva2VuPiBlbmRTZWxlY3QgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBl
czo6RW5kVGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAgIHByb2Nl
c3NFbmRUYWcoZW5kU2VsZWN0LmdldCgpKTsKICAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFn
KHRva2VuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKQEAgLTIxNzgsNyAr
MjE4MCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KICAgICBjYXNlIEluU2VsZWN0
TW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJblNlbGVjdE1vZGUgfHwg
aW5zZXJ0aW9uTW9kZSgpID09IEluU2VsZWN0SW5UYWJsZU1vZGUpOwotICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IG9wdGdyb3VwVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09
IG9wdGdyb3VwVGFnKSB7CiAgICAgICAgICAgICBpZiAobV90cmVlLmN1cnJlbnROb2RlKCktPmhh
c1RhZ05hbWUob3B0aW9uVGFnKSAmJiBtX3RyZWUub25lQmVsb3dUb3AoKSAmJiBtX3RyZWUub25l
QmVsb3dUb3AoKS0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpCiAgICAgICAgICAgICAgICAgcHJv
Y2Vzc0Zha2VFbmRUYWcob3B0aW9uVGFnKTsKICAgICAgICAgICAgIGlmIChtX3RyZWUuY3VycmVu
dE5vZGUoKS0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpIHsKQEAgLTIxODgsNyArMjE5MCw3IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IG9wdGlvblRhZykgeworICAg
ICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKICAgICAgICAgICAgIGlmICht
X3RyZWUuY3VycmVudE5vZGUoKS0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7CiAgICAgICAgICAg
ICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CkBAIC0yMTk2LDggKzIxOTgsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tl
bik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5h
bWUoKSA9PSBzZWxlY3RUYWcpIHsKLSAgICAgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50
cygpLT5pblNlbGVjdFNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gc2VsZWN0VGFnKSB7CisgICAgICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+aW5TZWxlY3RTY29wZSh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAgICAgIEFT
U0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKHRv
a2VuKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMjE0LDkgKzIyMTYsOSBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ICAgIH0KIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDb21tZW50KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NvbW1lbnQoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxU
b2tlblR5cGVzOjpDb21tZW50KTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9r
ZW5UeXBlczo6Q29tbWVudCk7CiAgICAgaWYgKG1faW5zZXJ0aW9uTW9kZSA9PSBJbml0aWFsTW9k
ZQogICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0gQmVmb3JlSFRNTE1vZGUKICAgICAgICAg
fHwgbV9pbnNlcnRpb25Nb2RlID09IEFmdGVyQWZ0ZXJCb2R5TW9kZQpAQCAtMjIzNiw5ICsyMjM4
LDkgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDb21tZW50KEF0b21pY0hUTUxUb2tl
biYgdG9rZW4pCiAgICAgbV90cmVlLmluc2VydENvbW1lbnQodG9rZW4pOwogfQogCi12b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlcihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQor
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIoQXRvbWljSFRNTFRva2VuKiB0
b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDaGFy
YWN0ZXIpOworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDaGFy
YWN0ZXIpOwogICAgIEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIgYnVmZmVyKHRva2VuKTsK
ICAgICBwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyKGJ1ZmZlcik7CiB9CkBAIC0yNDE5LDkgKzI0MjEs
OSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlckJ1ZmZlckZvckluQm9k
eShFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZgogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxz
ZTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKEF0
b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1M
VG9rZW5UeXBlczo6RW5kT2ZGaWxlKTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1M
VG9rZW5UeXBlczo6RW5kT2ZGaWxlKTsKICAgICBzd2l0Y2ggKGluc2VydGlvbk1vZGUoKSkgewog
ICAgIGNhc2UgSW5pdGlhbE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0g
SW5pdGlhbE1vZGUpOwpAQCAtMjUxMiwzMyArMjUxNCwzMyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6ZGVmYXVsdEZvckluaXRpYWwoKQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZv
ckJlZm9yZUhUTUwoKQogewotICAgIEF0b21pY0hUTUxUb2tlbiBzdGFydEhUTUwoSFRNTFRva2Vu
VHlwZXM6OlN0YXJ0VGFnLCBodG1sVGFnLmxvY2FsTmFtZSgpKTsKLSAgICBtX3RyZWUuaW5zZXJ0
SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoc3RhcnRIVE1MKTsKKyAgICBSZWZQdHI8QXRvbWlj
SFRNTFRva2VuPiBzdGFydEhUTUwgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5U
eXBlczo6U3RhcnRUYWcsIGh0bWxUYWcubG9jYWxOYW1lKCkpOworICAgIG1fdHJlZS5pbnNlcnRI
VE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChzdGFydEhUTUwuZ2V0KCkpOwogICAgIHNldEluc2Vy
dGlvbk1vZGUoQmVmb3JlSGVhZE1vZGUpOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVm
YXVsdEZvckJlZm9yZUhlYWQoKQogewotICAgIEF0b21pY0hUTUxUb2tlbiBzdGFydEhlYWQoSFRN
TFRva2VuVHlwZXM6OlN0YXJ0VGFnLCBoZWFkVGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNz
U3RhcnRUYWcoc3RhcnRIZWFkKTsKKyAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBzdGFydEhl
YWQgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIGhl
YWRUYWcubG9jYWxOYW1lKCkpOworICAgIHByb2Nlc3NTdGFydFRhZyhzdGFydEhlYWQuZ2V0KCkp
OwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckluSGVhZCgpCiB7Ci0gICAg
QXRvbWljSFRNTFRva2VuIGVuZEhlYWQoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgaGVhZFRhZy5s
b2NhbE5hbWUoKSk7Ci0gICAgcHJvY2Vzc0VuZFRhZyhlbmRIZWFkKTsKKyAgICBSZWZQdHI8QXRv
bWljSFRNTFRva2VuPiBlbmRIZWFkID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2Vu
VHlwZXM6OkVuZFRhZywgaGVhZFRhZy5sb2NhbE5hbWUoKSk7CisgICAgcHJvY2Vzc0VuZFRhZyhl
bmRIZWFkLmdldCgpKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbkhl
YWROb3NjcmlwdCgpCiB7Ci0gICAgQXRvbWljSFRNTFRva2VuIGVuZE5vc2NyaXB0KEhUTUxUb2tl
blR5cGVzOjpFbmRUYWcsIG5vc2NyaXB0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzRW5k
VGFnKGVuZE5vc2NyaXB0KTsKKyAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBlbmROb3Njcmlw
dCA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIG5vc2Ny
aXB0VGFnLmxvY2FsTmFtZSgpKTsKKyAgICBwcm9jZXNzRW5kVGFnKGVuZE5vc2NyaXB0LmdldCgp
KTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JBZnRlckhlYWQoKQogewot
ICAgIEF0b21pY0hUTUxUb2tlbiBzdGFydEJvZHkoSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCBi
b2R5VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzU3RhcnRUYWcoc3RhcnRCb2R5KTsKKyAg
ICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBzdGFydEJvZHkgPSBBdG9taWNIVE1MVG9rZW46OmNy
ZWF0ZShIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIGJvZHlUYWcubG9jYWxOYW1lKCkpOworICAg
IHByb2Nlc3NTdGFydFRhZyhzdGFydEJvZHkuZ2V0KCkpOwogICAgIG1fZnJhbWVzZXRPayA9IHRy
dWU7CiB9CiAKQEAgLTI1NTksMjggKzI1NjEsMjggQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRl
ZmF1bHRGb3JJblRhYmxlVGV4dCgpCiAgICAgc2V0SW5zZXJ0aW9uTW9kZShtX29yaWdpbmFsSW5z
ZXJ0aW9uTW9kZSk7CiB9CiAKLWJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdG
b3JJbkhlYWQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBB
U1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7Ci0gICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0g
SFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1s
VGFnKSB7CiAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiYXNlVGFn
Ci0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBiYXNlZm9udFRhZwotICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gYmdzb3VuZFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY29tbWFu
ZFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbGlua1RhZwotICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gbWV0YVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJhc2VUYWcK
KyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBiYXNlZm9udFRhZworICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IGJnc291bmRUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBjb21t
YW5kVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbGlua1RhZworICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IG1ldGFUYWcpIHsKICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9z
aW5nSFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAvLyBOb3RlOiBUaGUgY3VzdG9tIHByb2Nl
c3NpbmcgZm9yIHRoZSA8bWV0YT4gdGFnIGlzIGRvbmUgaW4gSFRNTE1ldGFFbGVtZW50Ojpwcm9j
ZXNzKCkuCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgp
ID09IHRpdGxlVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKICAg
ICAgICAgcHJvY2Vzc0dlbmVyaWNSQ0RBVEFTdGFydFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vc2NyaXB0VGFnKSB7Cisg
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gbm9zY3JpcHRUYWcpIHsKICAgICAgICAgaWYgKHNjcmlw
dEVuYWJsZWQobV9kb2N1bWVudC0+ZnJhbWUoKSkpIHsKICAgICAgICAgICAgIHByb2Nlc3NHZW5l
cmljUmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MjU4OSw0NCArMjU5MSw0NCBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFn
Rm9ySW5IZWFkKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHNldEluc2VydGlvbk1v
ZGUoSW5IZWFkTm9zY3JpcHRNb2RlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAg
IGlmICh0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcgfHwgdG9rZW4ubmFtZSgpID09IHN0eWxl
VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gbm9mcmFtZXNUYWcgfHwgdG9rZW4tPm5h
bWUoKSA9PSBzdHlsZVRhZykgewogICAgICAgICBwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRh
Zyh0b2tlbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFt
ZSgpID09IHNjcmlwdFRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHNjcmlwdFRhZykg
ewogICAgICAgICBwcm9jZXNzU2NyaXB0U3RhcnRUYWcodG9rZW4pOwotICAgICAgICBpZiAobV91
c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAmJiB0b2tlbi5zZWxmQ2xvc2luZygpKQorICAgICAgICBp
ZiAobV91c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAmJiB0b2tlbi0+c2VsZkNsb3NpbmcoKSkKICAg
ICAgICAgICAgIHByb2Nlc3NGYWtlRW5kVGFnKHNjcmlwdFRhZyk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGhlYWRUYWcpIHsKKyAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBoZWFkVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNSQ0RBVEFTdGFydFRhZyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NHZW5lcmljUkNEQVRB
U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlw
ZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CisgICAgQVNTRVJUKHRva2VuLT50eXBl
KCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVs
ZW1lbnQodG9rZW4pOwogICAgIG1fcGFyc2VyLT50b2tlbml6ZXIoKS0+c2V0U3RhdGUoSFRNTFRv
a2VuaXplclN0YXRlOjpSQ0RBVEFTdGF0ZSk7CiAgICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUg
PSBtX2luc2VydGlvbk1vZGU7CiAgICAgc2V0SW5zZXJ0aW9uTW9kZShUZXh0TW9kZSk7CiB9CiAK
LXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NHZW5lcmlj
UmF3VGV4dFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRv
a2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOworICAgIEFTU0VSVCh0b2tl
bi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgbV90cmVlLmluc2Vy
dEhUTUxFbGVtZW50KHRva2VuKTsKICAgICBtX3BhcnNlci0+dG9rZW5pemVyKCktPnNldFN0YXRl
KEhUTUxUb2tlbml6ZXJTdGF0ZTo6UkFXVEVYVFN0YXRlKTsKICAgICBtX29yaWdpbmFsSW5zZXJ0
aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKICAgICBzZXRJbnNlcnRpb25Nb2RlKFRleHRNb2Rl
KTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRT
dGFydFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUo
KSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwogICAgIG1fdHJlZS5pbnNlcnRTY3JpcHRF
bGVtZW50KHRva2VuKTsKICAgICBtX3BhcnNlci0+dG9rZW5pemVyKCktPnNldFN0YXRlKEhUTUxU
b2tlbml6ZXJTdGF0ZTo6U2NyaXB0RGF0YVN0YXRlKTsKICAgICBtX29yaWdpbmFsSW5zZXJ0aW9u
TW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKQEAgLTI2MzksNyArMjY0MSw3IEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
IH0KIAogLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29y
ay9tdWx0aXBhZ2UvdHJlZS1jb25zdHJ1Y3Rpb24uaHRtbCN0cmVlLWNvbnN0cnVjdGlvbgotYm9v
bCBIVE1MVHJlZUJ1aWxkZXI6OnNob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgSFRNTFRyZWVCdWlsZGVyOjpzaG91bGRQcm9jZXNz
VG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgaWYg
KG1fdHJlZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI2NDcsMzEgKzI2
NDksMzEgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnNob3VsZFByb2Nlc3NUb2tlbkluRm9yZWln
bkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBpZiAoaXNJbkhUTUxOYW1lc3Bh
Y2Uobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoSFRNTEVsZW1lbnRTdGFj
azo6aXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludChub2RlKSkgewotICAgICAgICBpZiAodG9r
ZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZwotICAgICAgICAgICAgJiYgdG9r
ZW4ubmFtZSgpICE9IE1hdGhNTE5hbWVzOjptZ2x5cGhUYWcKLSAgICAgICAgICAgICYmIHRva2Vu
Lm5hbWUoKSAhPSBNYXRoTUxOYW1lczo6bWFsaWdubWFya1RhZykKKyAgICAgICAgaWYgKHRva2Vu
LT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnCisgICAgICAgICAgICAmJiB0b2tl
bi0+bmFtZSgpICE9IE1hdGhNTE5hbWVzOjptZ2x5cGhUYWcKKyAgICAgICAgICAgICYmIHRva2Vu
LT5uYW1lKCkgIT0gTWF0aE1MTmFtZXM6Om1hbGlnbm1hcmtUYWcpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkNo
YXJhY3RlcikKKyAgICAgICAgaWYgKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkNo
YXJhY3RlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKG5vZGUt
Pmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6OmFubm90YXRpb25feG1sVGFnKQotICAgICAgICAmJiB0
b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnCi0gICAgICAgICYmIHRva2Vu
Lm5hbWUoKSA9PSBTVkdOYW1lczo6c3ZnVGFnKQorICAgICAgICAmJiB0b2tlbi0+dHlwZSgpID09
IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZworICAgICAgICAmJiB0b2tlbi0+bmFtZSgpID09IFNW
R05hbWVzOjpzdmdUYWcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoSFRNTEVsZW1l
bnRTdGFjazo6aXNIVE1MSW50ZWdyYXRpb25Qb2ludChub2RlKSkgewotICAgICAgICBpZiAodG9r
ZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZykKKyAgICAgICAgaWYgKHRva2Vu
LT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDaGFy
YWN0ZXIpCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDaGFy
YWN0ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmICh0b2tlbi50
eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZE9mRmlsZSkKKyAgICBpZiAodG9rZW4tPnR5cGUo
KSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kT2ZGaWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW5J
bkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQogewotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CisgICAgc3dpdGNoICh0b2tlbi0+dHlw
ZSgpKSB7CiAgICAgY2FzZSBIVE1MVG9rZW5UeXBlczo6VW5pbml0aWFsaXplZDoKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjY3OSw0NiArMjY4MSw0
NiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWc6IHsKLSAgICAgICAg
aWYgKHRva2VuLm5hbWUoKSA9PSBiVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0g
YmlnVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmxvY2txdW90ZVRhZwotICAg
ICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJvZHlUYWcKLSAgICAgICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBiclRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGNlbnRlclRh
ZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGNvZGVUYWcKLSAgICAgICAgICAgIHx8
IHRva2VuLm5hbWUoKSA9PSBkZFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGRp
dlRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGRsVGFnCi0gICAgICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gZHRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBl
bVRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGVtYmVkVGFnCi0gICAgICAgICAg
ICB8fCBpc051bWJlcmVkSGVhZGVyVGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBoZWFkVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaHJU
YWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBpVGFnCi0gICAgICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0gaW1nVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbGlU
YWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaXN0aW5nVGFnCi0gICAgICAgICAg
ICB8fCB0b2tlbi5uYW1lKCkgPT0gbWVudVRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IG1ldGFUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBub2JyVGFnCi0gICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gb2xUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBwVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gcHJlVGFnCi0gICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gcnVieVRhZwotICAgICAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IHNUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzbWFsbFRhZwot
ICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNwYW5UYWcKLSAgICAgICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBzdHJvbmdUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBz
dHJpa2VUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdWJUYWcKLSAgICAgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdXBUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSB0YWJsZVRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHR0VGFnCi0gICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdVRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IHVsVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdmFyVGFnCi0gICAg
ICAgICAgICB8fCAodG9rZW4ubmFtZSgpID09IGZvbnRUYWcgJiYgKHRva2VuLmdldEF0dHJpYnV0
ZUl0ZW0oY29sb3JBdHRyKSB8fCB0b2tlbi5nZXRBdHRyaWJ1dGVJdGVtKGZhY2VBdHRyKSB8fCB0
b2tlbi5nZXRBdHRyaWJ1dGVJdGVtKHNpemVBdHRyKSkpKSB7CisgICAgICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IGJUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYmlnVGFnCisg
ICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJsb2NrcXVvdGVUYWcKKyAgICAgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gYm9keVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUo
KSA9PSBiclRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBjZW50ZXJUYWcKKyAg
ICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gY29kZVRhZworICAgICAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSBkZFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkaXZU
YWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGxUYWcKKyAgICAgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gZHRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
ZW1UYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZW1iZWRUYWcKKyAgICAgICAg
ICAgIHx8IGlzTnVtYmVyZWRIZWFkZXJUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gaGVhZFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBoclRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBpVGFnCisgICAgICAgICAg
ICB8fCB0b2tlbi0+bmFtZSgpID09IGltZ1RhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUo
KSA9PSBsaVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBsaXN0aW5nVGFnCisg
ICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1lbnVUYWcKKyAgICAgICAgICAgIHx8IHRv
a2VuLT5uYW1lKCkgPT0gbWV0YVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBu
b2JyVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG9sVGFnCisgICAgICAgICAg
ICB8fCB0b2tlbi0+bmFtZSgpID09IHBUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkg
PT0gcHJlVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHJ1YnlUYWcKKyAgICAg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc1RhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5h
bWUoKSA9PSBzbWFsbFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzcGFuVGFn
CisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHN0cm9uZ1RhZworICAgICAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBzdHJpa2VUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gc3ViVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHN1cFRhZworICAg
ICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0YWJsZVRhZworICAgICAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSB0dFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB1VGFn
CisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHVsVGFnCisgICAgICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IHZhclRhZworICAgICAgICAgICAgfHwgKHRva2VuLT5uYW1lKCkgPT0g
Zm9udFRhZyAmJiAodG9rZW4tPmdldEF0dHJpYnV0ZUl0ZW0oY29sb3JBdHRyKSB8fCB0b2tlbi0+
Z2V0QXR0cmlidXRlSXRlbShmYWNlQXR0cikgfHwgdG9rZW4tPmdldEF0dHJpYnV0ZUl0ZW0oc2l6
ZUF0dHIpKSkpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAg
bV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbEZvcmVpZ25Db250ZW50U2NvcGVNYXJrZXIo
KTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CkBAIC0yNzM5LDcgKzI3NDEs
NyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBpZiAobV90cmVlLmN1cnJlbnROb2RlKCkt
Pm5hbWVzcGFjZVVSSSgpID09IFNWR05hbWVzOjpzdmdOYW1lc3BhY2VVUkkpCiAgICAgICAgICAg
ICBhZGp1c3RTVkdUYWdOYW1lQ2FzZSh0b2tlbik7CiAKLSAgICAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBTVkdOYW1lczo6c2NyaXB0VGFnICYmIG1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNUYWdO
YW1lKFNWR05hbWVzOjpzY3JpcHRUYWcpKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09
IFNWR05hbWVzOjpzY3JpcHRUYWcgJiYgbV90cmVlLmN1cnJlbnROb2RlKCktPmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OnNjcmlwdFRhZykpIHsKICAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzID0g
bV90cmVlLmN1cnJlbnRFbGVtZW50KCk7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRz
KCktPnBvcCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjc0NywxMCArMjc0OSwxMCBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgICAgICBpZiAoIWlzSW5IVE1MTmFtZXNwYWNlKG1fdHJlZS5j
dXJyZW50Tm9kZSgpKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBqdXN0IHdh
bnRzIGFuIEVsZW1lbnQqIGl0ZXJhdG9yLCBpbnN0ZWFkIG9mIGFuIEVsZW1lbnRSZWNvcmQqCiAg
ICAgICAgICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBub2RlUmVjb3JkID0g
bV90cmVlLm9wZW5FbGVtZW50cygpLT50b3BSZWNvcmQoKTsKLSAgICAgICAgICAgIGlmICghbm9k
ZVJlY29yZC0+bm9kZSgpLT5oYXNMb2NhbE5hbWUodG9rZW4ubmFtZSgpKSkKKyAgICAgICAgICAg
IGlmICghbm9kZVJlY29yZC0+bm9kZSgpLT5oYXNMb2NhbE5hbWUodG9rZW4tPm5hbWUoKSkpCiAg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICB3aGlsZSAoMSkg
ewotICAgICAgICAgICAgICAgIGlmIChub2RlUmVjb3JkLT5ub2RlKCktPmhhc0xvY2FsTmFtZSh0
b2tlbi5uYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVSZWNvcmQtPm5vZGUoKS0+
aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fdHJl
ZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQobm9kZVJlY29yZC0+ZWxlbWVudCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTI3Njgs
NyArMjc3MCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25D
b250ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIG1fdHJlZS5pbnNlcnRDb21t
ZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSFRNTFRva2VuVHlwZXM6OkNo
YXJhY3RlcjogewotICAgICAgICBTdHJpbmcgY2hhcmFjdGVycyA9IFN0cmluZyh0b2tlbi5jaGFy
YWN0ZXJzKCkuZGF0YSgpLCB0b2tlbi5jaGFyYWN0ZXJzKCkuc2l6ZSgpKTsKKyAgICAgICAgU3Ry
aW5nIGNoYXJhY3RlcnMgPSBTdHJpbmcodG9rZW4tPmNoYXJhY3RlcnMoKS5kYXRhKCksIHRva2Vu
LT5jaGFyYWN0ZXJzKCkuc2l6ZSgpKTsKICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGNo
YXJhY3RlcnMpOwogICAgICAgICBpZiAobV9mcmFtZXNldE9rICYmICFpc0FsbFdoaXRlc3BhY2VP
clJlcGxhY2VtZW50Q2hhcmFjdGVycyhjaGFyYWN0ZXJzKSkKICAgICAgICAgICAgIG1fZnJhbWVz
ZXRPayA9IGZhbHNlOwpAQCAtMjc5MCw3ICsyNzkyLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OmZpbmlzaGVkKCkKICAgICBtX2RvY3VtZW50LT5maW5pc2hlZFBhcnNpbmcoKTsKIH0KIAotdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnBhcnNlRXJyb3IoQXRvbWljSFRNTFRva2VuJikKK3ZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwYXJzZUVycm9yKEF0b21pY0hUTUxUb2tlbiopCiB7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKaW5kZXggMTkyODg0ZTVi
NjU5N2ZmM2Y1NzkwMmM5OGUyYTM3ZWUzOTQ4M2YwMC4uM2YyMTE0YzVhMTE0M2UyNGI3NzA4NDI2
OWE3ZjM1ZTBkNTQ1ZDYzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogCiAgICAgLy8gVGhlIHRva2Vu
IHJlYWxseSBzaG91bGQgYmUgcGFzc2VkIGFzIGEgY29uc3QmIHNpbmNlIGl0J3MgbmV2ZXIgbW9k
aWZpZWQuCiAgICAgdm9pZCBjb25zdHJ1Y3RUcmVlRnJvbVRva2VuKEhUTUxUb2tlbiYpOwotICAg
IHZvaWQgY29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tlbihBdG9taWNIVE1MVG9rZW4mKTsKKyAg
ICB2b2lkIGNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4oQXRvbWljSFRNTFRva2VuKik7CiAK
ICAgICBib29sIGhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gISFtX3Nj
cmlwdFRvUHJvY2VzczsgfQogICAgIC8vIE11c3QgYmUgY2FsbGVkIHRvIHRha2UgdGhlIHBhcnNl
ci1ibG9ja2luZyBzY3JpcHQgYmVmb3JlIGNhbGxpbmcgdGhlIHBhcnNlciBhZ2Fpbi4KQEAgLTEx
OCwzNCArMTE4LDM0IEBAIHByaXZhdGU6CiAgICAgSFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVu
dFBhcnNlciosIEhUTUxEb2N1bWVudCosIGJvb2wgcmVwb3J0RXJyb3JzLCBib29sIHVzZVByZUhU
TUw1UGFyc2VyUXVpcmtzLCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKTsKICAgICBIVE1M
VHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyKiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1l
bnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24sIGJvb2wgdXNl
UHJlSFRNTDVQYXJzZXJRdWlya3MsIHVuc2lnbmVkIG1heGltdW1ET01UcmVlRGVwdGgpOwogCi0g
ICAgdm9pZCBwcm9jZXNzVG9rZW4oQXRvbWljSFRNTFRva2VuJik7Ci0KLSAgICB2b2lkIHByb2Nl
c3NEb2N0eXBlVG9rZW4oQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzU3RhcnRU
YWcoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxU
b2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0NvbW1lbnQoQXRvbWljSFRNTFRva2VuJik7Ci0gICAg
dm9pZCBwcm9jZXNzQ2hhcmFjdGVyKEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vz
c0VuZE9mRmlsZShBdG9taWNIVE1MVG9rZW4mKTsKLQotICAgIGJvb2wgcHJvY2Vzc1N0YXJ0VGFn
Rm9ySW5IZWFkKEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc1N0YXJ0VGFnRm9y
SW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5U
YWJsZShBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJbkJvZHko
QXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZShBdG9t
aWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlQm9keShBdG9t
aWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJblJvdyhBdG9taWNIVE1M
VG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJbkNlbGwoQXRvbWljSFRNTFRva2Vu
Jik7Ci0KLSAgICB2b2lkIHByb2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRN
TFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hU
TUxUb2tlbiYpOwotICAgIGJvb2wgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRN
TFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzVG9rZW4oQXRvbWljSFRNTFRva2VuKik7CisKKyAg
ICB2b2lkIHByb2Nlc3NEb2N0eXBlVG9rZW4oQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBw
cm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBwcm9jZXNzRW5kVGFn
KEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vzc0NvbW1lbnQoQXRvbWljSFRNTFRv
a2VuKik7CisgICAgdm9pZCBwcm9jZXNzQ2hhcmFjdGVyKEF0b21pY0hUTUxUb2tlbiopOworICAg
IHZvaWQgcHJvY2Vzc0VuZE9mRmlsZShBdG9taWNIVE1MVG9rZW4qKTsKKworICAgIGJvb2wgcHJv
Y2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vz
c1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vzc1N0
YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRU
YWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9y
SW5UYWJsZShBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJblRh
YmxlQm9keShBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJblJv
dyhBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJbkNlbGwoQXRv
bWljSFRNTFRva2VuKik7CisKKyAgICB2b2lkIHByb2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJbkJv
ZHkoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5C
b2R5KEF0b21pY0hUTUxUb2tlbiopOworICAgIGJvb2wgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJv
ZHkoQXRvbWljSFRNTFRva2VuKik7CiAgICAgYm9vbCBwcm9jZXNzVGFibGVFbmRUYWdGb3JJblRh
YmxlKCk7CiAgICAgYm9vbCBwcm9jZXNzQ2FwdGlvbkVuZFRhZ0ZvckluQ2FwdGlvbigpOwogICAg
IGJvb2wgcHJvY2Vzc0NvbGdyb3VwRW5kVGFnRm9ySW5Db2x1bW5Hcm91cCgpOwogICAgIGJvb2wg
cHJvY2Vzc1RyRW5kVGFnRm9ySW5Sb3coKTsKICAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBz
aG91bGQgYmUgaW5saW5lZCBpbnRvIGl0cyBvbmUgY2FsbCBzaXRlIG9yIGl0CiAgICAgLy8gbmVl
ZHMgdG8gYXNzZXJ0IHdoaWNoIHRva2VucyBpdCBjYW4gYmUgY2FsbGVkIHdpdGguCi0gICAgdm9p
ZCBwcm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJik7CisgICAg
dm9pZCBwcm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKik7CiAK
ICAgICB2b2lkIHByb2Nlc3NDaGFyYWN0ZXJCdWZmZXIoRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1
ZmZlciYpOwogICAgIGlubGluZSB2b2lkIHByb2Nlc3NDaGFyYWN0ZXJCdWZmZXJGb3JJbkJvZHko
RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlciYpOwpAQCAtMTU1LDkgKzE1NSw5IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwcm9jZXNzRmFrZUNoYXJhY3RlcnMoY29uc3QgU3RyaW5nJik7CiAgICAg
dm9pZCBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7CiAKLSAgICB2b2lkIHBy
b2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBw
cm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lk
IHByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIHByb2Nl
c3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBwcm9j
ZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHBy
b2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKIAogICAgIC8vIERlZmF1bHQg
cHJvY2Vzc2luZyBmb3IgdGhlIGRpZmZlcmVudCBpbnNlcnRpb24gbW9kZXMuCiAgICAgdm9pZCBk
ZWZhdWx0Rm9ySW5pdGlhbCgpOwpAQCAtMTY4LDIyICsxNjgsMjIgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRlZmF1bHRGb3JBZnRlckhlYWQoKTsKICAgICB2b2lkIGRlZmF1bHRGb3JJblRhYmxlVGV4
dCgpOwogCi0gICAgaW5saW5lIGJvb2wgc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVu
dChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRl
bnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgaW5saW5lIGJvb2wgc2hvdWxkUHJvY2Vzc1Rva2Vu
SW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NUb2tl
bkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuKik7CiAKLSAgICBWZWN0b3I8QXR0cmli
dXRlPiBhdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxUb2tlbiYpOworICAgIFZl
Y3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2Vu
Kik7CiAKICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBmdXJ0aGVzdEJsb2Nr
Rm9yRm9ybWF0dGluZ0VsZW1lbnQoRWxlbWVudCopOwotICAgIHZvaWQgY2FsbFRoZUFkb3B0aW9u
QWdlbmN5KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgY2FsbFRoZUFkb3B0aW9uQWdlbmN5
KEF0b21pY0hUTUxUb2tlbiopOwogCiAgICAgdm9pZCBjbG9zZVRoZUNlbGwoKTsKIAogICAgIHRl
bXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNvbnN0IENvbnRhaW5lck5vZGUqKT4KLSAgICB2b2lk
IHByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWcoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBw
cm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFnKEF0b21pY0hUTUxUb2tlbiopOwogCiAgICAgYm9vbCBt
X2ZyYW1lc2V0T2s7CiAKLSAgICB2b2lkIHBhcnNlRXJyb3IoQXRvbWljSFRNTFRva2VuJik7Cisg
ICAgdm9pZCBwYXJzZUVycm9yKEF0b21pY0hUTUxUb2tlbiopOwogCiAgICAgSW5zZXJ0aW9uTW9k
ZSBpbnNlcnRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNlcnRpb25Nb2RlOyB9CiAgICAg
dm9pZCBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGUgbW9kZSkgeyBtX2luc2VydGlvbk1v
ZGUgPSBtb2RlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0
RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3Vt
ZW50UGFyc2VyLmNwcAppbmRleCA3MzRlZGYwOWY4MzZmYTY5ZWMyZWNiODFlZjQ3ODU3ZjRkYTIy
OTBkLi5lMzhkMGUwYzRmZGRhZmE2NWNjYzhmZWVlMGYwYzU4YjY2Njk0M2E1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKQEAgLTYy
LDkgKzYyLDkgQEAgdm9pZCBUZXh0RG9jdW1lbnRQYXJzZXI6Omluc2VydEZha2VQcmVFbGVtZW50
KCkKIAogICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7CiAgICAgYXR0cmlidXRlcy5h
cHBlbmQoQXR0cmlidXRlKHN0eWxlQXR0ciwgIndvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUt
c3BhY2U6IHByZS13cmFwOyIpKTsKLSAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVByZShIVE1MVG9r
ZW5UeXBlczo6U3RhcnRUYWcsIHByZVRhZy5sb2NhbE5hbWUoKSwgYXR0cmlidXRlcyk7CisgICAg
UmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZmFrZVByZSA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRl
KEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZywgcHJlVGFnLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVz
KTsKIAotICAgIHRyZWVCdWlsZGVyKCktPmNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4oZmFr
ZVByZSk7CisgICAgdHJlZUJ1aWxkZXIoKS0+Y29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tlbihm
YWtlUHJlLmdldCgpKTsKICAgICAvLyBOb3JtYWxseSB3ZSB3b3VsZCBza2lwIHRoZSBmaXJzdCBc
biBhZnRlciBhIDxwcmU+IGVsZW1lbnQsIGJ1dCB3ZSBkb24ndAogICAgIC8vIHdhbnQgdG8gc2tp
cCB0aGUgZmlyc3QgXG4gZm9yIHRleHQgZG9jdW1lbnRzIQogICAgIHRyZWVCdWlsZGVyKCktPnNl
dFNob3VsZFNraXBMZWFkaW5nTmV3bGluZShmYWxzZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMmIyMzAwNWIxZGVlMzNl
NTFkNmZjODQxYTg0NmE1MDZmMzIyMjZiYy4uOTU4M2RkMTg1ZDk5MzRmMGU0NTI5MzgwMGQ0ZjA0
ODA1MzU1NjRlOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA3LTIxICBLd2FuZyBZdWwg
U2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgVXNlIHRoZSBvcmlnaW5hbCB0
b2tlbiB0byBjcmVhdGUgYW4gZWxlbWVudCBpbiAicmVjb25zdHJ1Y3QgdGhlIGFjdGl2ZSBmb3Jt
YXR0aW5nIGVsZW1lbnRzIiBhbmQgImNhbGwgdGhlIGFkb3B0aW9uIGFnZW5jeSIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNzAzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCB0ZXN0IGV4cGVj
dGF0aW9uIGZvciBodG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0CisgICAgICAgIGJlY2F1c2Ug
bm93IHJlc291cmNlcy9zY3JpcHRlZC9hZG9wdGlvbjAxLmRhdCBwYXNzZXMuCisKKyAgICAgICAg
KiBodG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0OgorCiAyMDEyLTA3LTIwICBUb255IENoYW5n
ICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBNYXJrIGFudGhlciB0
ZXN0IGFzIG5lZWRpbmcgYSByZWJhc2VsaW5lIGR1ZSB0byByMTIzMjg1LgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0
bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQKaW5kZXggMTljNGIxYTY1YTA0Mjk3OTQ4YWJiMDJl
ODQ5MzMyYzRiNmIyYWIxNS4uY2Q1YTIwZjlhZjJjZTgwOTAwMWEzOGY4MDZjMzkyZGNiMDA4ZmI5
MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0CkBAIC00MywzMyAr
NDMsNiBAQCByZXNvdXJjZXMvdGFibGVzMDEuZGF0OiBQQVNTCiAKIHJlc291cmNlcy90cmlja3kw
MS5kYXQ6IFBBU1MKIAotcmVzb3VyY2VzL3NjcmlwdGVkL2Fkb3B0aW9uMDEuZGF0OgotMQotCi1U
ZXN0IDEgb2YgMSBpbiByZXNvdXJjZXMvc2NyaXB0ZWQvYWRvcHRpb24wMS5kYXQgZmFpbGVkLiBJ
bnB1dDoKLTxwPjxiIGlkPSJBIj48c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJBIiku
aWQgPSAiQiI8L3NjcmlwdD48L3A+VEVYVDwvYj4KLUdvdDoKLXwgPGh0bWw+Ci18ICAgPGhlYWQ+
Ci18ICAgPGJvZHk+Ci18ICAgICA8cD4KLXwgICAgICAgPGI+Ci18ICAgICAgICAgaWQ9IkIiCi18
ICAgICAgICAgPHNjcmlwdD4KLXwgICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
QSIpLmlkID0gIkIiIgotfCAgICAgPGI+Ci18ICAgICAgIGlkPSJCIgotfCAgICAgICAiVEVYVCIK
LUV4cGVjdGVkOgotfCA8aHRtbD4KLXwgICA8aGVhZD4KLXwgICA8Ym9keT4KLXwgICAgIDxwPgot
fCAgICAgICA8Yj4KLXwgICAgICAgICBpZD0iQiIKLXwgICAgICAgICA8c2NyaXB0PgotfCAgICAg
ICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJBIikuaWQgPSAiQiIiCi18ICAgICA8Yj4K
LXwgICAgICAgaWQ9IkEiCi18ICAgICAgICJURVhUIgorcmVzb3VyY2VzL3NjcmlwdGVkL2Fkb3B0
aW9uMDEuZGF0OiBQQVNTCisKIHJlc291cmNlcy9zY3JpcHRlZC93ZWJraXQwMS5kYXQ6IFBBU1MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153780</attachid>
            <date>2012-07-23 05:22:12 -0700</date>
            <delta_ts>2012-07-23 05:32:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91703-20120723212201.patch</filename>
            <type>text/plain</type>
            <size>36812</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMwY2E4MzI1NGFlNGNk
MTU1NzQ1MzdiMThlMGVkNGNlMmE5N2FjNi4uMzgzMThmZDc2ZTdiZjQ1NGQ4M2RkYmU3ZTQ4MThk
OTYxNTI0YjIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDkyIEBACiAyMDEyLTA3LTIzICBLd2Fu
ZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CiAKKyAgICAgICAgVXNlIHRoZSBvcmln
aW5hbCB0b2tlbiB0byBjcmVhdGUgYW4gZWxlbWVudCBpbiAicmVjb25zdHJ1Y3QgdGhlIGFjdGl2
ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIiBhbmQgImNhbGwgdGhlIGFkb3B0aW9uIGFnZW5jeSIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNzAzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGN1cnJlbnQg
V2ViS2l0IEhUTUw1IHBhcnNlciBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBob2xkIHRoZSBvcmln
aW5hbCB0b2tlbgorICAgICAgICBpbiB0aGUgc3RhY2sgb2Ygb3BlbiBlbGVtZW50cyBhbmQgdGhl
IGFjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzLiBUaGlzIGlzCisgICAgICAgIHByb2JsZW1hdGlj
IGJlY2F1c2UgdGhlIG9yaWdpbmFsIHRva2VuIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGVsZW1lbnQg
aW4KKyAgICAgICAgInJlY29uc3RydWN0IHRoZSBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cyIg
YW5kICJjYWxsIHRoZSBhZG9wdGlvbiBhZ2VuY3kiLgorCisgICAgICAgIEFzIGEgd29ya2Fyb3Vu
ZCwgV2ViS2l0IHVzZXMgdGhlIHNhdmVkIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwg
dG9rZW4KKyAgICAgICAgdG8gY3JlYXRlIGFuIGVsZW1lbnQuIEJ1dCB0aGlzIGNhdXNlcyB1cyB0
byBmYWlsIGV4YW1wbGVzIGxpa2UgdGhpczoKKyAgICAgICAgPGIgaWQ9IjEiPjxwPjxzY3JpcHQ+
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjEiKS5pZCA9ICIyIjwvc2NyaXB0PjwvcD5URVhUPC9i
PgorICAgICAgICByZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyBjYWxscyB0
aGlzIG1ldGhvZCB0byBvcGVuIGEgc2Vjb25kIDxiPgorICAgICAgICB0YWcgdG8gd3JhcCBURVhU
LCBpdCB3aWxsIGhhdmUgaWQgIjIiLCBldmVuIHRob3VnaCB0aGUgSFRNTDUgc3BlYyBpbXBsaWVz
IGl0CisgICAgICAgIHNob3VsZCBiZSAiMSIuCisKKyAgICAgICAgQ3JlYXRlZCBhIHJlZi1jb3Vu
dGVkIGNvbnRhaW5lciBjbGFzcywgSFRNTFN0YWNrTm9kZSB0byBob2xkIHRoZSBvcmlnaW5hbCB0
b2tlbgorICAgICAgICBhbmQgdGhlIG5hbWVzcGFjZSBVUkkgYXMgd2VsbCBhcyB0aGUgZWxlbWVu
dC4gQ2hhbmdlZCBIVE1MRWxlbWVudFN0YWNrIGFuZAorICAgICAgICBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0IHRvIHVzZSBIVE1MU3RhY2tOb2RlLgorICAgICAgICBDaGFuZ2VkIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyBhbmQK
KyAgICAgICAgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3kgdG8gY3JlYXRl
IGFuIGVsZW1lbnQgZnJvbSB0aGUgc2F2ZWQgdG9rZW4KKyAgICAgICAgaW5zdGVhZCBvZiB0aGUg
c2F2ZWQgZWxlbWVudC4KKworICAgICAgICBVcGRhdGVkIHRlc3QgZXhwZWN0YXRpb24gZm9yIGh0
bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQKKyAgICAgICAgYmVjYXVzZSBub3cgcmVzb3VyY2Vz
L3NjcmlwdGVkL2Fkb3B0aW9uMDEuZGF0IHBhc3Nlcy4KKworICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEhlYWRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxG
b3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5z
ZXJ0SFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6
Omluc2VydEZvcm1hdHRpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JlaWduRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVj
dGlvblNpdGUuaDoKKyAgICAgICAgKEhUTUxDb25zdHJ1Y3Rpb25TaXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjdXJyZW50RWxlbWVudFJlY29yZCk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVjb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0bWxFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZUNvbW1v
bik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEhlYWRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MQm9keUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjppbnNlcnRBYm92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoQ29tbW9uKToKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9IVE1MRWxlbWVudFN0YWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6Om5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6c3RhY2tJdGVtKToKKyAgICAgICAgKEVsZW1lbnRS
ZWNvcmQpOgorICAgICAgICAoSFRNTEVsZW1lbnRTdGFjayk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpzd2FwVG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1hdHRpbmdFbGVtZW50TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGlu
Z0VsZW1lbnRMaXN0OjpFbnRyeTo6RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OmlzTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpzdGFja0l0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OmVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OnJlcGxhY2VFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3Q6OkVudHJ5OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEVudHJ5KToKKyAgICAgICAgKEhUTUxG
b3JtYXR0aW5nRWxlbWVudExpc3QpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTdGFja0l0
ZW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhUTUxTdGFja0l0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0YWNrSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTdGFja0l0ZW06OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0
YWNrSXRlbTo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tJdGVtOjp0b2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tJdGVtOjpuYW1lc3BhY2VVUkkpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFN0YWNrSXRlbTo6SFRNTFN0YWNrSXRlbSk6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KToKKworMjAxMi0wNy0yMyAgS3dhbmcgWXVsIFNlbyAg
PHNreXVsQGNvbXBhbnkxMDAubmV0PgorCiAgICAgICAgIFJlZi1jb3VudCBBdG9taWNIVE1MVG9r
ZW4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxOTgx
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25T
aXRlLmNwcAppbmRleCBiMzBhOGFlYjc5ZjU4ZDk4YWRhM2JjYzVkMTA0YmM1MDUzMmI2MmE5Li5j
YzhiYzI5ZDJkNGUyNzIzMWNmNWIxNDBkZjk0MzE1OTQ2Y2ZlNzFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC0zOSw2
ICszOSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklk
aW9tcy5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFN0
YWNrSXRlbS5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6
ZXIuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCkBAIC0xOTcsNyArMTk4LDcgQEAg
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhU
TUwoQXRvbWljSFRNTFRva2VuKiB0b2sKICAgICBSZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBlbGVt
ZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7CiAgICAgZWxlbWVudC0+
cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi0+YXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbik7CiAgICAgYXR0YWNoTGF0ZXIobV9hdHRhY2htZW50Um9vdCwgZWxlbWVu
dCk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxIdG1sRWxlbWVudChlbGVtZW50KTsKKyAg
ICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEh0bWxFbGVtZW50KEhUTUxTdGFja0l0ZW06OmNyZWF0
ZShlbGVtZW50LCB0b2tlbikpOwogCiAgICAgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAgICAgZWxl
bWVudC0+aW5zZXJ0ZWRCeVBhcnNlcigpOwpAQCAtMjgyLDcgKzI4Myw3IEBAIHZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIZWFkRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRv
a2VuKQogICAgIEFTU0VSVCghc2hvdWxkRm9zdGVyUGFyZW50KCkpOwogICAgIG1faGVhZCA9IGNy
ZWF0ZUhUTUxFbGVtZW50KHRva2VuKTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBt
X2hlYWQpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MSGVhZEVsZW1lbnQobV9oZWFkKTsK
KyAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEhlYWRFbGVtZW50KEhUTUxTdGFja0l0ZW06OmNy
ZWF0ZShtX2hlYWQsIHRva2VuKSk7CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQpAQCAtMjkwLDcgKzI5
MSw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgIEFTU0VSVCghc2hvdWxkRm9zdGVyUGFyZW50KCkp
OwogICAgIFJlZlB0cjxFbGVtZW50PiBib2R5ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwog
ICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGJvZHkpOwotICAgIG1fb3BlbkVsZW1lbnRz
LnB1c2hIVE1MQm9keUVsZW1lbnQoYm9keS5yZWxlYXNlKCkpOworICAgIG1fb3BlbkVsZW1lbnRz
LnB1c2hIVE1MQm9keUVsZW1lbnQoSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGJvZHkucmVsZWFzZSgp
LCB0b2tlbikpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9y
bUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgYm9vbCBpc0RlbW90ZWQpCkBAIC0zMDAs
MTQgKzMwMSwxNCBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9ybUVs
ZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgYm9vbCBpcwogICAgIG1fZm9ybSA9IHN0YXRp
Y19wb2ludGVyX2Nhc3Q8SFRNTEZvcm1FbGVtZW50PihlbGVtZW50LnJlbGVhc2UoKSk7CiAgICAg
bV9mb3JtLT5zZXREZW1vdGVkKGlzRGVtb3RlZCk7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5v
ZGUoKSwgbV9mb3JtKTsKLSAgICBtX29wZW5FbGVtZW50cy5wdXNoKG1fZm9ybSk7CisgICAgbV9v
cGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUobV9mb3JtLCB0b2tlbikpOwog
fQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRWxlbWVudChBdG9taWNI
VE1MVG9rZW4qIHRva2VuKQogewogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRl
SFRNTEVsZW1lbnQodG9rZW4pOwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1l
bnQpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudC5yZWxlYXNlKCkpOworICAgIG1f
b3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgp
LCB0b2tlbikpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTZWxmQ2xv
c2luZ0hUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCkBAIC0zMjcsNyArMzI4LDcg
QEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKICAgICAvLyBQb3NzaWJsZSBhY3RpdmUgZm9ybWF0dGluZyBl
bGVtZW50cyBpbmNsdWRlOgogICAgIC8vIGEsIGIsIGJpZywgY29kZSwgZW0sIGZvbnQsIGksIG5v
YnIsIHMsIHNtYWxsLCBzdHJpa2UsIHN0cm9uZywgdHQsIGFuZCB1LgogICAgIGluc2VydEhUTUxF
bGVtZW50KHRva2VuKTsKLSAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5hcHBlbmQoY3Vy
cmVudEVsZW1lbnQoKSk7CisgICAgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuYXBwZW5kKGN1
cnJlbnRFbGVtZW50UmVjb3JkKCktPnN0YWNrSXRlbSgpKTsKIH0KIAogdm9pZCBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQpA
QCAtMzQzLDcgKzM0NCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlw
dEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICBpZiAobV9mcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24gIT0gRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KQogICAgICAgICBlbGVt
ZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLT5hdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBlbGVt
ZW50KTsKLSAgICBtX29wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQucmVsZWFzZSgpKTsKKyAgICBt
X29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShlbGVtZW50LnJlbGVhc2Uo
KSwgdG9rZW4pKTsKIH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9yZWln
bkVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
c3BhY2VVUkkpCkBAIC0zNTQsNyArMzU1LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5zZXJ0Rm9yZWlnbkVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgY29uc3QgQXQKICAg
ICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQodG9rZW4sIG5hbWVzcGFj
ZVVSSSk7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgZWxlbWVudCwgdG9rZW4tPnNl
bGZDbG9zaW5nKCkpOwogICAgIGlmICghdG9rZW4tPnNlbGZDbG9zaW5nKCkpCi0gICAgICAgIG1f
b3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudC5yZWxlYXNlKCkpOworICAgICAgICBtX29wZW5FbGVt
ZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShlbGVtZW50LnJlbGVhc2UoKSwgdG9rZW4s
IG5hbWVzcGFjZVVSSSkpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRU
ZXh0Tm9kZShjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIFdoaXRlc3BhY2VNb2RlIHdoaXRlc3Bh
Y2VNb2RlKQpAQCAtNDE4LDI4ICs0MTksMTQgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2sKICAg
ICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4gSFRN
TENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50RnJvbUVsZW1lbnRSZWNvcmQoSFRN
TEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogcmVjb3JkKQorUGFzc1JlZlB0cjxIVE1MU3Rh
Y2tJdGVtPiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2Vu
KEhUTUxTdGFja0l0ZW0qIGl0ZW0pCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxFbGVtZW50RnJv
bVNhdmVkRWxlbWVudChyZWNvcmQtPmVsZW1lbnQoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RWxlbWVu
dD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50RnJvbVNhdmVkRWxlbWVu
dChFbGVtZW50KiBlbGVtZW50KQotewotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyB3cm9u
Zy4gIFdlIHNob3VsZCBiZSB1c2luZyB0aGUgb3JpZ2luYWwgdG9rZW4uCi0gICAgLy8gVXNpbmcg
YW4gRWxlbWVudCogY2F1c2VzIHVzIHRvIGZhaWwgZXhhbXBsZXMgbGlrZSB0aGlzOgotICAgIC8v
IDxiIGlkPSIxIj48cD48c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIxIikuaWQgPSAi
MiI8L3NjcmlwdD48L3A+VEVYVDwvYj4KLSAgICAvLyBXaGVuIHJlY29uc3RydWN0VGhlQWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG9wZW4KLSAgICAvLyBhIHNl
Y29uZCA8Yj4gdGFnIHRvIHdyYXAgVEVYVCwgaXQgd2lsbCBoYXZlIGlkICIyIiwgZXZlbiB0aG91
Z2ggdGhlIEhUTUw1Ci0gICAgLy8gc3BlYyBpbXBsaWVzIGl0IHNob3VsZCBiZSAiMSIuICBNaW5l
ZmllbGQgbWF0Y2hlcyB0aGUgSFRNTDUgc3BlYyBoZXJlLgotCi0gICAgQVNTRVJUKGVsZW1lbnQt
PmlzSFRNTEVsZW1lbnQoKSk7IC8vIG90aGVyd2lzZSBsb2NhbE5hbWUoKSBtaWdodCBiZSB3cm9u
Zy4KLQotICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGNsb25lZEF0dHJpYnV0ZXM7Ci0gICAgaWYgKEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gZWxlbWVudC0+dXBkYXRlZEF0dHJp
YnV0ZURhdGEoKSkKLSAgICAgICAgY2xvbmVkQXR0cmlidXRlcyA9IGF0dHJpYnV0ZURhdGEtPmNs
b25lZEF0dHJpYnV0ZVZlY3RvcigpOwotCi0gICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZmFr
ZVRva2VuID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFn
LCBlbGVtZW50LT5sb2NhbE5hbWUoKSwgY2xvbmVkQXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUhUTUxFbGVtZW50KGZha2VUb2tlbi5nZXQoKSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQ7CisgICAgaWYgKGl0ZW0tPm5hbWVzcGFjZVVSSSgpID09IEhUTUxOYW1lczo6eGh0bWxO
YW1lc3BhY2VVUkkpCisgICAgICAgIGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudChpdGVtLT50
b2tlbigpKTsKKyAgICBlbHNlCisgICAgICAgIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KGl0ZW0t
PnRva2VuKCksIGl0ZW0tPm5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gSFRNTFN0YWNrSXRl
bTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgpLCBpdGVtLT50b2tlbigpLCBpdGVtLT5uYW1lc3Bh
Y2VVUkkoKSk7CiB9CiAKIGJvb2wgSFRNTENvbnN0cnVjdGlvblNpdGU6OmluZGV4T2ZGaXJzdFVu
b3BlbkZvcm1hdHRpbmdFbGVtZW50KHVuc2lnbmVkJiBmaXJzdFVub3BlbkVsZW1lbnRJbmRleCkg
Y29uc3QKQEAgLTQ2OSwxMCArNDU2LDEwIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OnJl
Y29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCkKICAgICBBU1NFUlQodW5vcGVu
RW50cnlJbmRleCA8IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnNpemUoKSk7CiAgICAgZm9y
ICg7IHVub3BlbkVudHJ5SW5kZXggPCBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5zaXplKCk7
ICsrdW5vcGVuRW50cnlJbmRleCkgewogICAgICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
OjpFbnRyeSYgdW5vcGVuZWRFbnRyeSA9IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmF0KHVu
b3BlbkVudHJ5SW5kZXgpOwotICAgICAgICBSZWZQdHI8RWxlbWVudD4gcmVjb25zdHJ1Y3RlZCA9
IGNyZWF0ZUhUTUxFbGVtZW50RnJvbVNhdmVkRWxlbWVudCh1bm9wZW5lZEVudHJ5LmVsZW1lbnQo
KSk7Ci0gICAgICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIHJlY29uc3RydWN0ZWQpOwot
ICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNoKHJlY29uc3RydWN0ZWQucmVsZWFzZSgpKTsKLSAg
ICAgICAgdW5vcGVuZWRFbnRyeS5yZXBsYWNlRWxlbWVudChjdXJyZW50RWxlbWVudCgpKTsKKyAg
ICAgICAgUmVmUHRyPEhUTUxTdGFja0l0ZW0+IHJlY29uc3RydWN0ZWQgPSBjcmVhdGVFbGVtZW50
RnJvbVNhdmVkVG9rZW4odW5vcGVuZWRFbnRyeS5zdGFja0l0ZW0oKS5nZXQoKSk7CisgICAgICAg
IGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIHJlY29uc3RydWN0ZWQtPm5vZGUoKSk7CisgICAg
ICAgIG1fb3BlbkVsZW1lbnRzLnB1c2gocmVjb25zdHJ1Y3RlZCk7CisgICAgICAgIHVub3BlbmVk
RW50cnkucmVwbGFjZUVsZW1lbnQocmVjb25zdHJ1Y3RlZC5yZWxlYXNlKCkpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlv
blNpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRl
LmgKaW5kZXggZWQ5NTg0OTQ1ZDM0NDU5ZDE3ZjMzNmI1MjNhMjAwMTEzYTE2MzVmNi4uYTQzNjY4
YjFhYmQ1MDRmY2QxZGYwODcxNWU4MTZkNDVkNzE1OGRhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCkBAIC0xMDYsNyArMTA2LDcg
QEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keShBdG9taWNI
VE1MVG9rZW4qKTsKIAogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1lbnQo
QXRvbWljSFRNTFRva2VuKik7Ci0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVIVE1MRWxl
bWVudEZyb21FbGVtZW50UmVjb3JkKEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqKTsK
KyAgICBQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tl
bihIVE1MU3RhY2tJdGVtKik7CiAKICAgICBib29sIHNob3VsZEZvc3RlclBhcmVudCgpIGNvbnN0
OwogICAgIHZvaWQgZm9zdGVyUGFyZW50KFBhc3NSZWZQdHI8Tm9kZT4pOwpAQCAtMTE4LDYgKzEx
OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVz
aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAKICAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiAhbV9vcGVuRWxlbWVudHMuc3RhY2tEZXB0aCgpOyB9CisgICAgSFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogY3VycmVudEVsZW1lbnRSZWNvcmQoKSBjb25zdCB7
IHJldHVybiBtX29wZW5FbGVtZW50cy50b3BSZWNvcmQoKTsgfQogICAgIEVsZW1lbnQqIGN1cnJl
bnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9vcGVuRWxlbWVudHMudG9wKCk7IH0KICAgICBD
b250YWluZXJOb2RlKiBjdXJyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkVsZW1lbnRz
LnRvcE5vZGUoKTsgfQogICAgIEVsZW1lbnQqIG9uZUJlbG93VG9wKCkgY29uc3QgeyByZXR1cm4g
bV9vcGVuRWxlbWVudHMub25lQmVsb3dUb3AoKTsgfQpAQCAtMTYwLDcgKzE2MSw2IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIGZpbmRGb3N0ZXJTaXRlKEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYp
OwogCi0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVIVE1MRWxlbWVudEZyb21TYXZlZEVs
ZW1lbnQoRWxlbWVudCopOwogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlRWxlbWVudChB
dG9taWNIVE1MVG9rZW4qLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7CiAKICAg
ICB2b2lkIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tl
biosIEVsZW1lbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxFbGVtZW50U3RhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1l
bnRTdGFjay5jcHAKaW5kZXggY2Q1ZDA4YTU1M2VkYzg0NzM1NjFhMTYxZWUxYTk3NGEyN2Y2MDNj
My4uN2FjYWI5YWU3MTJhMWQwNTI0YzRjOGE2Y2IyMjk5YWZkMjI3NWVhOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAKQEAgLTEyNSwyMyAr
MTI1LDIzIEBAIGlubGluZSBib29sIGlzU2VsZWN0U2NvcGVNYXJrZXIoQ29udGFpbmVyTm9kZSog
bm9kZSkKIAogfQogCi1IVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVj
b3JkKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSwgUGFzc093blB0cjxFbGVtZW50UmVj
b3JkPiBuZXh0KQotICAgIDogbV9ub2RlKG5vZGUpCitIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
UmVjb3JkOjpFbGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSwgUGFz
c093blB0cjxFbGVtZW50UmVjb3JkPiBuZXh0KQorICAgIDogbV9pdGVtKGl0ZW0pCiAgICAgLCBt
X25leHQobmV4dCkKIHsKLSAgICBBU1NFUlQobV9ub2RlKTsKKyAgICBBU1NFUlQobV9pdGVtKTsK
IH0KIAogSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6fkVsZW1lbnRSZWNvcmQoKQog
ewogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVt
ZW50KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZDo6cmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBp
dGVtKQogewotICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBBU1NFUlQoIW1fbm9kZSB8fCBtX25v
ZGUtPmlzRWxlbWVudE5vZGUoKSk7CisgICAgQVNTRVJUKGl0ZW0pOworICAgIEFTU0VSVCghbV9p
dGVtIHx8IG1faXRlbS0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpOwogICAgIC8vIEZJWE1FOiBT
aG91bGQgdGhpcyBjYWxsIGZpbmlzaFBhcnNpbmdDaGlsZHJlbj8KLSAgICBtX25vZGUgPSBlbGVt
ZW50OworICAgIG1faXRlbSA9IGl0ZW07CiB9CiAKIGJvb2wgSFRNTEVsZW1lbnRTdGFjazo6RWxl
bWVudFJlY29yZDo6aXNBYm92ZShFbGVtZW50UmVjb3JkKiBvdGhlcikgY29uc3QKQEAgLTMwNyw2
MiArMzA3LDYyIEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wVW50aWxGb3JlaWduQ29udGVu
dFNjb3BlTWFya2VyKCkKICAgICAgICAgcG9wKCk7CiB9CiAgICAgCi12b2lkIEhUTUxFbGVtZW50
U3RhY2s6OnB1c2hSb290Tm9kZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHJvb3ROb2RlKQor
dm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoUm9vdE5vZGUoUGFzc1JlZlB0cjxIVE1MU3RhY2tJ
dGVtPiByb290SXRlbSkKIHsKLSAgICBBU1NFUlQocm9vdE5vZGUtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERSk7Ci0gICAgcHVzaFJvb3ROb2RlQ29tbW9uKHJvb3RO
b2RlKTsKKyAgICBBU1NFUlQocm9vdEl0ZW0tPm5vZGUoKS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpE
T0NVTUVOVF9GUkFHTUVOVF9OT0RFKTsKKyAgICBwdXNoUm9vdE5vZGVDb21tb24ocm9vdEl0ZW0p
OwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQoUGFzc1Jl
ZlB0cjxFbGVtZW50PiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0
bWxFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSkKIHsKLSAgICBBU1NFUlQo
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKLSAgICBwdXNoUm9vdE5v
ZGVDb21tb24oZWxlbWVudCk7CisgICAgQVNTRVJUKGl0ZW0tPmVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKKyAgICBwdXNoUm9vdE5vZGVDb21tb24oaXRlbSk7CiB9
CiAgICAgCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZUNvbW1vbihQYXNzUmVm
UHRyPENvbnRhaW5lck5vZGU+IHJvb3ROb2RlKQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNo
Um9vdE5vZGVDb21tb24oUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiByb290SXRlbSkKIHsKICAg
ICBBU1NFUlQoIW1fdG9wKTsKICAgICBBU1NFUlQoIW1fcm9vdE5vZGUpOwotICAgIG1fcm9vdE5v
ZGUgPSByb290Tm9kZS5nZXQoKTsKLSAgICBwdXNoQ29tbW9uKHJvb3ROb2RlKTsKKyAgICBtX3Jv
b3ROb2RlID0gcm9vdEl0ZW0tPm5vZGUoKTsKKyAgICBwdXNoQ29tbW9uKHJvb3RJdGVtKTsKIH0K
IAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEhlYWRFbGVtZW50KFBhc3NSZWZQdHI8
RWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaEhUTUxIZWFkRWxl
bWVudChQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGl0ZW0pCiB7Ci0gICAgQVNTRVJUKGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSk7CisgICAgQVNTRVJUKGl0ZW0tPmVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKTsKICAgICBBU1NFUlQoIW1f
aGVhZEVsZW1lbnQpOwotICAgIG1faGVhZEVsZW1lbnQgPSBlbGVtZW50LmdldCgpOwotICAgIHB1
c2hDb21tb24oZWxlbWVudCk7CisgICAgbV9oZWFkRWxlbWVudCA9IGl0ZW0tPmVsZW1lbnQoKTsK
KyAgICBwdXNoQ29tbW9uKGl0ZW0pOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hI
VE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQordm9pZCBIVE1MRWxl
bWVudFN0YWNrOjpwdXNoSFRNTEJvZHlFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4g
aXRlbSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlU
YWcpKTsKKyAgICBBU1NFUlQoaXRlbS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Ym9keVRhZykpOwogICAgIEFTU0VSVCghbV9ib2R5RWxlbWVudCk7Ci0gICAgbV9ib2R5RWxlbWVu
dCA9IGVsZW1lbnQuZ2V0KCk7Ci0gICAgcHVzaENvbW1vbihlbGVtZW50KTsKKyAgICBtX2JvZHlF
bGVtZW50ID0gaXRlbS0+ZWxlbWVudCgpOworICAgIHB1c2hDb21tb24oaXRlbSk7CiB9CiAKLXZv
aWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit2
b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2goUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVt
KQogewotICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcp
KTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSk7
Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOwor
ICAgIEFTU0VSVCghaXRlbS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRh
ZykpOworICAgIEFTU0VSVCghaXRlbS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aGVhZFRhZykpOworICAgIEFTU0VSVCghaXRlbS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Ym9keVRhZykpOwogICAgIEFTU0VSVChtX3Jvb3ROb2RlKTsKLSAgICBwdXNoQ29tbW9u
KGVsZW1lbnQpOworICAgIHB1c2hDb21tb24oaXRlbSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRT
dGFjazo6aW5zZXJ0QWJvdmUoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBFbGVtZW50UmVj
b3JkKiByZWNvcmRCZWxvdykKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJvdmUoUGFz
c1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVtLCBFbGVtZW50UmVjb3JkKiByZWNvcmRCZWxvdykK
IHsKLSAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgQVNTRVJUKGl0ZW0pOwogICAgIEFTU0VSVChy
ZWNvcmRCZWxvdyk7CiAgICAgQVNTRVJUKG1fdG9wKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpOwotICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsKKyAgICBBU1NFUlQoIWl0ZW0tPmVsZW1lbnQoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKKyAgICBBU1NFUlQoIWl0ZW0tPmVsZW1l
bnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKTsKKyAgICBBU1NFUlQoIWl0ZW0t
PmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsKICAgICBBU1NFUlQo
bV9yb290Tm9kZSk7CiAgICAgaWYgKHJlY29yZEJlbG93ID09IG1fdG9wKSB7Ci0gICAgICAgIHB1
c2goZWxlbWVudCk7CisgICAgICAgIHB1c2goaXRlbSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFib3Zl
KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgRWxlbWVudFJlY29yZCogcgogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgbV9zdGFja0RlcHRoKys7Ci0gICAgICAgIHJlY29yZEFi
b3ZlLT5zZXROZXh0KGFkb3B0UHRyKG5ldyBFbGVtZW50UmVjb3JkKGVsZW1lbnQsIHJlY29yZEFi
b3ZlLT5yZWxlYXNlTmV4dCgpKSkpOworICAgICAgICByZWNvcmRBYm92ZS0+c2V0TmV4dChhZG9w
dFB0cihuZXcgRWxlbWVudFJlY29yZChpdGVtLCByZWNvcmRBYm92ZS0+cmVsZWFzZU5leHQoKSkp
KTsKICAgICAgICAgcmVjb3JkQWJvdmUtPm5leHQoKS0+ZWxlbWVudCgpLT5iZWdpblBhcnNpbmdD
aGlsZHJlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTY3LDEyICs1NjcsMTIgQEAg
Q29udGFpbmVyTm9kZSogSFRNTEVsZW1lbnRTdGFjazo6cm9vdE5vZGUoKSBjb25zdAogICAgIHJl
dHVybiBtX3Jvb3ROb2RlOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hDb21tb24o
UGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlKQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpw
dXNoQ29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSkKIHsKICAgICBBU1NFUlQo
bV9yb290Tm9kZSk7CiAKICAgICBtX3N0YWNrRGVwdGgrKzsKLSAgICBtX3RvcCA9IGFkb3B0UHRy
KG5ldyBFbGVtZW50UmVjb3JkKG5vZGUsIG1fdG9wLnJlbGVhc2UoKSkpOworICAgIG1fdG9wID0g
YWRvcHRQdHIobmV3IEVsZW1lbnRSZWNvcmQoaXRlbSwgbV90b3AucmVsZWFzZSgpKSk7CiB9CiAK
IHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wQ29tbW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaAppbmRleCBmN2JhYTM2NDQ3YjA3ZDUyOGYzZTI3
NzMzMjRjODE0MmU5MTQxZjg4Li42ZTMxMjUxMzA2MWIxOGZjZWQ2OTEzY2VjN2ZmYzcwZmFmZjEz
YmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0
YWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5o
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0YWNrSXRlbS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgpAQCAtNTUsMjMgKzU2LDIzIEBAIHB1YmxpYzoKICAgICBwdWJsaWM6CiAgICAgICAgIH5F
bGVtZW50UmVjb3JkKCk7IC8vIFB1YmxpYyBmb3IgflBhc3NPd25QdHIoKQogICAgIAotICAgICAg
ICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG1fbm9kZS5nZXQo
KSk7IH0KLSAgICAgICAgQ29udGFpbmVyTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZS5nZXQoKTsgfQotICAgICAgICB2b2lkIHJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVu
dD4pOworICAgICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLT5l
bGVtZW50KCk7IH0KKyAgICAgICAgQ29udGFpbmVyTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1faXRlbS0+bm9kZSgpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gc3Rh
Y2tJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtOyB9CisgICAgICAgIHZvaWQgcmVwbGFjZUVs
ZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7CiAKICAgICAgICAgYm9vbCBpc0Fib3Zl
KEVsZW1lbnRSZWNvcmQqKSBjb25zdDsKIAogICAgICAgICBFbGVtZW50UmVjb3JkKiBuZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBm
cmllbmQgY2xhc3MgSFRNTEVsZW1lbnRTdGFjazsKIAotICAgICAgICBFbGVtZW50UmVjb3JkKFBh
c3NSZWZQdHI8Q29udGFpbmVyTm9kZT4sIFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4pOworICAg
ICAgICBFbGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4sIFBhc3NPd25QdHI8
RWxlbWVudFJlY29yZD4pOwogCiAgICAgICAgIFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4gcmVs
ZWFzZU5leHQoKSB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CiAgICAgICAgIHZvaWQgc2V0
TmV4dChQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQog
Ci0gICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX25vZGU7CisgICAgICAgIFJlZlB0cjxI
VE1MU3RhY2tJdGVtPiBtX2l0ZW07CiAgICAgICAgIE93blB0cjxFbGVtZW50UmVjb3JkPiBtX25l
eHQ7CiAgICAgfTsKIApAQCAtOTcsMTMgKzk4LDEzIEBAIHB1YmxpYzoKICAgICBFbGVtZW50UmVj
b3JkKiBmaW5kKEVsZW1lbnQqKSBjb25zdDsKICAgICBFbGVtZW50UmVjb3JkKiB0b3Btb3N0KGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3Q7CiAKLSAgICB2b2lkIGluc2VydEFib3Zl
KFBhc3NSZWZQdHI8RWxlbWVudD4sIEVsZW1lbnRSZWNvcmQqKTsKKyAgICB2b2lkIGluc2VydEFi
b3ZlKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4sIEVsZW1lbnRSZWNvcmQqKTsKIAotICAgIHZv
aWQgcHVzaChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKLSAgICB2b2lkIHB1c2hSb290Tm9kZShQYXNz
UmVmUHRyPENvbnRhaW5lck5vZGU+KTsKLSAgICB2b2lkIHB1c2hIVE1MSHRtbEVsZW1lbnQoUGFz
c1JlZlB0cjxFbGVtZW50Pik7Ci0gICAgdm9pZCBwdXNoSFRNTEhlYWRFbGVtZW50KFBhc3NSZWZQ
dHI8RWxlbWVudD4pOwotICAgIHZvaWQgcHVzaEhUTUxCb2R5RWxlbWVudChQYXNzUmVmUHRyPEVs
ZW1lbnQ+KTsKKyAgICB2b2lkIHB1c2goUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7CisgICAg
dm9pZCBwdXNoUm9vdE5vZGUoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7CisgICAgdm9pZCBw
dXNoSFRNTEh0bWxFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4pOworICAgIHZvaWQg
cHVzaEhUTUxIZWFkRWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+KTsKKyAgICB2b2lk
IHB1c2hIVE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7CiAKICAgICB2
b2lkIHBvcCgpOwogICAgIHZvaWQgcG9wVW50aWwoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
KTsKQEAgLTE1Niw4ICsxNTcsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICB2
b2lkIHB1c2hDb21tb24oUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPik7Ci0gICAgdm9pZCBwdXNo
Um9vdE5vZGVDb21tb24oUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPik7CisgICAgdm9pZCBwdXNo
Q29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4pOworICAgIHZvaWQgcHVzaFJvb3ROb2Rl
Q29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4pOwogICAgIHZvaWQgcG9wQ29tbW9uKCk7
CiAgICAgdm9pZCByZW1vdmVOb25Ub3BDb21tb24oRWxlbWVudCopOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3Bw
CmluZGV4IDAxNDVkZTBlNmYzOWUwMTkwMGMyNDE1YjQ3ZDllNjU3YTUyMWVkZjEuLmQ1YmJlMGUy
ZDZkZjNiODBhZGIzNjdiODhhMmU2Mjc3ZWZmMzQxNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCkBAIC04
NywyNSArODcsMjcgQEAgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Qm9va21hcmsgSFRNTEZv
cm1hdHRpbmdFbGVtZW50TGlzdDo6Ym9va21hcmtGb3IoRWxlbWUKICAgICByZXR1cm4gQm9va21h
cmsoJmF0KGluZGV4KSk7CiB9CiAKLXZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6c3dh
cFRvKEVsZW1lbnQqIG9sZEVsZW1lbnQsIEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNvbnN0IEJvb2tt
YXJrJiBib29rbWFyaykKK3ZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6c3dhcFRvKEVs
ZW1lbnQqIG9sZEVsZW1lbnQsIFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gcHJwTmV3SXRlbSwg
Y29uc3QgQm9va21hcmsmIGJvb2ttYXJrKQogeworICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVtPiBu
ZXdJdGVtID0gcHJwTmV3SXRlbTsKKwogICAgIEFTU0VSVChjb250YWlucyhvbGRFbGVtZW50KSk7
Ci0gICAgQVNTRVJUKCFjb250YWlucyhuZXdFbGVtZW50KSk7CisgICAgQVNTRVJUKCFjb250YWlu
cyhuZXdJdGVtKSk7CiAgICAgaWYgKCFib29rbWFyay5oYXNCZWVuTW92ZWQoKSkgewogICAgICAg
ICBBU1NFUlQoYm9va21hcmsubWFyaygpLT5lbGVtZW50KCkgPT0gb2xkRWxlbWVudCk7Ci0gICAg
ICAgIGJvb2ttYXJrLm1hcmsoKS0+cmVwbGFjZUVsZW1lbnQobmV3RWxlbWVudCk7CisgICAgICAg
IGJvb2ttYXJrLm1hcmsoKS0+cmVwbGFjZUVsZW1lbnQobmV3SXRlbSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgc2l6ZV90IGluZGV4ID0gYm9va21hcmsubWFyaygpIC0gZmlyc3QoKTsK
ICAgICBBU1NFUlQoaW5kZXggPCBzaXplKCkpOwotICAgIG1fZW50cmllcy5pbnNlcnQoaW5kZXgg
KyAxLCBuZXdFbGVtZW50KTsKKyAgICBtX2VudHJpZXMuaW5zZXJ0KGluZGV4ICsgMSwgbmV3SXRl
bSk7CiAgICAgcmVtb3ZlKG9sZEVsZW1lbnQpOwogfQogCi12b2lkIEhUTUxGb3JtYXR0aW5nRWxl
bWVudExpc3Q6OmFwcGVuZChFbGVtZW50KiBlbGVtZW50KQordm9pZCBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0OjphcHBlbmQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVtKQogewotICAg
IGVuc3VyZU5vYWhzQXJrQ29uZGl0aW9uKGVsZW1lbnQpOwotICAgIG1fZW50cmllcy5hcHBlbmQo
ZWxlbWVudCk7CisgICAgZW5zdXJlTm9haHNBcmtDb25kaXRpb24oaXRlbS0+ZWxlbWVudCgpKTsK
KyAgICBtX2VudHJpZXMuYXBwZW5kKGl0ZW0pOwogfQogCiB2b2lkIEhUTUxGb3JtYXR0aW5nRWxl
bWVudExpc3Q6OnJlbW92ZShFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oCmluZGV4IDc5ZmUy
ZmYzNzU3NTUwZTRkM2FlOGU1MjhlMTNkOTA1NWRkMTc5ODQuLjYzNWUzZWRmNjgxMzUzNmNiZjQx
OWFjNzVlZTkwNjcyOTVhNThkZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNp
Zm5kZWYgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdF9oCiAjZGVmaW5lIEhUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3RfaAogCisjaW5jbHVkZSAiSFRNTFN0YWNrSXRlbS5oIgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KQEAgLTQ3LDM1ICs0OCwzNSBAQCBwdWJsaWM6CiAgICAgY2xhc3MgRW50cnkgewogICAg
IHB1YmxpYzoKICAgICAgICAgLy8gSW5saW5lIGJlY2F1c2UgdGhleSdyZSBob3QgYW5kIFZlY3Rv
cjxUPiB1c2VzIHRoZW0uCi0gICAgICAgIGV4cGxpY2l0IEVudHJ5KEVsZW1lbnQqIGVsZW1lbnQp
Ci0gICAgICAgICAgICA6IG1fZWxlbWVudChlbGVtZW50KQorICAgICAgICBleHBsaWNpdCBFbnRy
eShQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGl0ZW0pCisgICAgICAgICAgICA6IG1faXRlbShp
dGVtKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgICAgIH0K
ICAgICAgICAgZW51bSBNYXJrZXJFbnRyeVR5cGUgeyBNYXJrZXJFbnRyeSB9OwogICAgICAgICBF
bnRyeShNYXJrZXJFbnRyeVR5cGUpCi0gICAgICAgICAgICA6IG1fZWxlbWVudCgwKQorICAgICAg
ICAgICAgOiBtX2l0ZW0oMCkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIH5FbnRyeSgp
IHt9CiAKLSAgICAgICAgYm9vbCBpc01hcmtlcigpIGNvbnN0IHsgcmV0dXJuICFtX2VsZW1lbnQ7
IH0KKyAgICAgICAgYm9vbCBpc01hcmtlcigpIGNvbnN0IHsgcmV0dXJuICFtX2l0ZW07IH0KIAor
ICAgICAgICBQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IHN0YWNrSXRlbSgpIGNvbnN0IHsgcmV0
dXJuIG1faXRlbTsgfQogICAgICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QKICAgICAgICAg
ewotICAgICAgICAgICAgLy8gVGhlIGZhY3QgdGhhdCAhbV9lbGVtZW50ID09IGlzTWFya2VyKCkg
aXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsCisgICAgICAgICAgICAvLyBUaGUgZmFjdCB0aGF0
ICFtX2l0ZW0gPT0gaXNNYXJrZXIoKSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwKICAgICAg
ICAgICAgIC8vIGNhbGxlcnMgc2hvdWxkIGNoZWNrIGlzTWFya2VyKCkgYmVmb3JlIGNhbGxpbmcg
ZWxlbWVudCgpLgotICAgICAgICAgICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9lbGVtZW50LmdldCgpOworICAgICAgICAgICAgQVNTRVJUKG1faXRlbSk7CisgICAg
ICAgICAgICByZXR1cm4gbV9pdGVtLT5lbGVtZW50KCk7CiAgICAgICAgIH0KLSAgICAgICAgdm9p
ZCByZXBsYWNlRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpIHsgbV9lbGVtZW50
ID0gZWxlbWVudDsgfQorICAgICAgICB2b2lkIHJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8SFRN
TFN0YWNrSXRlbT4gaXRlbSkgeyBtX2l0ZW0gPSBpdGVtOyB9CiAKICAgICAgICAgLy8gTmVlZGVk
IGZvciB1c2Ugd2l0aCBWZWN0b3IuICBUaGVzZSBhcmUgc3VwZXItaG90IGFuZCBtdXN0IGJlIGlu
bGluZS4KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsg
cmV0dXJuIG1fZWxlbWVudCA9PSBlbGVtZW50OyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3IhPShF
bGVtZW50KiBlbGVtZW50KSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQgIT0gZWxlbWVudDsgfQor
ICAgICAgICBib29sIG9wZXJhdG9yPT0oRWxlbWVudCogZWxlbWVudCkgY29uc3QgeyByZXR1cm4g
IW1faXRlbSA/ICFlbGVtZW50IDogbV9pdGVtLT5lbGVtZW50KCkgPT0gZWxlbWVudDsgfQorICAg
ICAgICBib29sIG9wZXJhdG9yIT0oRWxlbWVudCogZWxlbWVudCkgY29uc3QgeyByZXR1cm4gIW1f
aXRlbSA/ICEhZWxlbWVudCA6IG1faXRlbS0+ZWxlbWVudCgpICE9IGVsZW1lbnQ7IH0KIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CisgICAgICAgIFJl
ZlB0cjxIVE1MU3RhY2tJdGVtPiBtX2l0ZW07CiAgICAgfTsKIAogICAgIGNsYXNzIEJvb2ttYXJr
IHsKQEAgLTEwNywxMSArMTA4LDExIEBAIHB1YmxpYzoKIAogICAgIEVudHJ5KiBmaW5kKEVsZW1l
bnQqKTsKICAgICBib29sIGNvbnRhaW5zKEVsZW1lbnQqKTsKLSAgICB2b2lkIGFwcGVuZChFbGVt
ZW50Kik7CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7CiAgICAg
dm9pZCByZW1vdmUoRWxlbWVudCopOwogCiAgICAgQm9va21hcmsgYm9va21hcmtGb3IoRWxlbWVu
dCopOwotICAgIHZvaWQgc3dhcFRvKEVsZW1lbnQqIG9sZEVsZW1lbnQsIEVsZW1lbnQqIG5ld0Vs
ZW1lbnQsIGNvbnN0IEJvb2ttYXJrJik7CisgICAgdm9pZCBzd2FwVG8oRWxlbWVudCogb2xkRWxl
bWVudCwgUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBwcnBOZXdJdGVtLCBjb25zdCBCb29rbWFy
ayYpOwogCiAgICAgdm9pZCBhcHBlbmRNYXJrZXIoKTsKICAgICAvLyBjbGVhclRvTGFzdE1hcmtl
ciBhbHNvIGNsZWFycyB0aGUgbWFya2VyIChwZXIgdGhlIEhUTUw1IHNwZWMpLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkODE0MGNhZjUw
NGJlMTIzMmVmOThiNWUyN2Y4ZjljM2YyZDI3YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3RhY2tJdGVtLmgKQEAgLTAsMCArMSw5OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEhUTUxTdGFja0l0ZW1faAorI2RlZmluZSBIVE1MU3RhY2tJdGVtX2gKKworI2luY2x1ZGUg
IkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVG9rZW4u
aCIKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENvbnRhaW5lck5vZGU7CisKK2NsYXNzIEhUTUxTdGFja0l0ZW0gOiBwdWJs
aWMgUmVmQ291bnRlZDxIVE1MU3RhY2tJdGVtPiB7CitwdWJsaWM6CisgICAgLy8gRG9jdW1lbnRG
cmFnbWVudCBjYXNlLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGNyZWF0
ZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEhUTUxTdGFja0l0ZW0obm9kZSkpOworICAgIH0KKworICAgIC8vIFVzZWQg
YnkgSFRNTEVsZW1lbnRTdGFjay4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVt
PiBjcmVhdGUoUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlLCBBdG9taWNIVE1MVG9rZW4q
IHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0
bWxOYW1lc3BhY2VVUkkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxT
dGFja0l0ZW0obm9kZSwgdG9rZW4sIG5hbWVzcGFjZVVSSSkpOworICAgIH0KKworICAgIC8vIFVz
ZWQgYnkgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MU3RhY2tJdGVtPiBjcmVhdGUoRWxlbWVudCogZWxlbWVudCwgQXRvbWljSFRNTFRva2VuKiB0
b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1s
TmFtZXNwYWNlVVJJKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MU3Rh
Y2tJdGVtKGVsZW1lbnQsIHRva2VuLCBuYW1lc3BhY2VVUkkpKTsKKyAgICB9CisKKyAgICBFbGVt
ZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG1fbm9kZS5nZXQoKSk7IH0K
KyAgICBDb250YWluZXJOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9
CisKKyAgICBBdG9taWNIVE1MVG9rZW4qIHRva2VuKCkgeyByZXR1cm4gbV90b2tlbi5nZXQoKTsg
fQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lc3BhY2VVUkk7IH0KKworcHJpdmF0ZToKKyAgICBIVE1MU3RhY2tJdGVtKFBhc3NSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gbm9kZSkKKyAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAg
LCBtX2lzRG9jdW1lbnRGcmFnbWVudE5vZGUodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgSFRN
TFN0YWNrSXRlbShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8QXRv
bWljSFRNTFRva2VuPiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBI
VE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKQorICAgICAgICA6IG1fbm9kZShub2RlKQorICAg
ICAgICAsIG1fdG9rZW4odG9rZW4pCisgICAgICAgICwgbV9uYW1lc3BhY2VVUkkobmFtZXNwYWNl
VVJJKQorICAgICAgICAsIG1faXNEb2N1bWVudEZyYWdtZW50Tm9kZShmYWxzZSkKKyAgICB7Cisg
ICAgfQorCisgICAgSFRNTFN0YWNrSXRlbShFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRyPEF0
b21pY0hUTUxUb2tlbj4gdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0g
SFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSkKKyAgICAgICAgOiBtX25vZGUoZWxlbWVudCkK
KyAgICAgICAgLCBtX3Rva2VuKHRva2VuKQorICAgICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVz
cGFjZVVSSSkKKyAgICAgICAgLCBtX2lzRG9jdW1lbnRGcmFnbWVudE5vZGUoZmFsc2UpCisgICAg
eworICAgIH0KKworICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX25vZGU7CisKKyAgICBSZWZQ
dHI8QXRvbWljSFRNTFRva2VuPiBtX3Rva2VuOworICAgIEF0b21pY1N0cmluZyBtX25hbWVzcGFj
ZVVSSTsKKyAgICBib29sIG1faXNEb2N1bWVudEZyYWdtZW50Tm9kZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhUTUxTdGFja0l0ZW1faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggNzAyNmU2ODQwYWYx
NGM2YzcyY2E5OWY2OWEzM2NhMDI5Y2NmM2VkNS4uNzI5Mzg4ZDU4OTFlMGIyMjJiNTljMjM1ZGQ1
MDVhODQ3NDA3YjNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTFN0YWNrSXRlbS5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgog
I2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
CkBAIC0zODAsNyArMzgxLDcgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRN
TERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERvY3VtZW50RnJhZ21lbnQqIGYKICAgICAgICAgLy8g
aHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBh
Z2UvdGhlLWVuZC5odG1sI2ZyYWdtZW50LWNhc2UKICAgICAgICAgLy8gRm9yIGVmZmljaWVuY3ks
IHdlIHNraXAgc3RlcCA0LjIgKCJMZXQgcm9vdCBiZSBhIG5ldyBodG1sIGVsZW1lbnQgd2l0aCBu
byBhdHRyaWJ1dGVzIikKICAgICAgICAgLy8gYW5kIGluc3RlYWQgdXNlIHRoZSBEb2N1bWVudEZy
YWdtZW50IGFzIGEgcm9vdCBub2RlLgotICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnB1
c2hSb290Tm9kZShmcmFnbWVudCk7CisgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cHVz
aFJvb3ROb2RlKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShmcmFnbWVudCkpOwogICAgICAgICByZXNl
dEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KCk7CiAgICAgICAgIG1fdHJlZS5zZXRGb3JtKGNs
b3Nlc3RGb3JtQW5jZXN0b3IoY29udGV4dEVsZW1lbnQpKTsKICAgICB9CkBAIC0xMTg0LDcgKzEx
ODUsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxU
b2tlbiogdG9rZW4pCiAgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRpdGxlVGFnKSB7
CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIEFTU0VSVChtX3Ry
ZWUuaGVhZCgpKTsKLSAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cHVzaEhUTUxI
ZWFkRWxlbWVudChtX3RyZWUuaGVhZCgpKTsKKyAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+cHVzaEhUTUxIZWFkRWxlbWVudChIVE1MU3RhY2tJdGVtOjpjcmVhdGUobV90cmVlLmhl
YWQoKSwgdG9rZW4pKTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tl
bik7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnJlbW92ZUhUTUxIZWFkRWxl
bWVudChtX3RyZWUuaGVhZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1NTksMTAgKzE1
NjAsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9t
aWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgaWYgKG5vZGUgPT0gZm9ybWF0dGluZ0Vs
ZW1lbnRSZWNvcmQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAvLyA2LjUK
LSAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gbV90cmVlLmNyZWF0ZUhU
TUxFbGVtZW50RnJvbUVsZW1lbnRSZWNvcmQobm9kZSk7CisgICAgICAgICAgICBSZWZQdHI8SFRN
TFN0YWNrSXRlbT4gbmV3SXRlbSA9IG1fdHJlZS5jcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4o
bm9kZS0+c3RhY2tJdGVtKCkuZ2V0KCkpOworCiAgICAgICAgICAgICBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0OjpFbnRyeSogbm9kZUVudHJ5ID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cygpLT5maW5kKG5vZGUtPmVsZW1lbnQoKSk7Ci0gICAgICAgICAgICBub2RlRW50cnktPnJl
cGxhY2VFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOwotICAgICAgICAgICAgbm9kZS0+cmVwbGFj
ZUVsZW1lbnQobmV3RWxlbWVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgbm9kZUVudHJ5LT5y
ZXBsYWNlRWxlbWVudChuZXdJdGVtKTsKKyAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VFbGVtZW50
KG5ld0l0ZW0ucmVsZWFzZSgpKTsKICAgICAgICAgICAgIC8vIDYuNCAtLSBJbnRlbnRpb25hbGx5
IG91dCBvZiBvcmRlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbm9kZQogICAgICAgICAgICAg
Ly8gd2FzIHJlcGxhY2VkIGluIDYuNS4KICAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3Jn
L0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0xMDA5NgpAQCAtMTU5NSwyNSArMTU5NywyNSBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxU
b2tlbiogdG9rZW4pCiAgICAgICAgICAgICAgICAgbGFzdE5vZGUtPmVsZW1lbnQoKS0+bGF6eUF0
dGFjaCgpOwogICAgICAgICB9CiAgICAgICAgIC8vIDgKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+
IG5ld0VsZW1lbnQgPSBtX3RyZWUuY3JlYXRlSFRNTEVsZW1lbnRGcm9tRWxlbWVudFJlY29yZChm
b3JtYXR0aW5nRWxlbWVudFJlY29yZCk7CisgICAgICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVtPiBu
ZXdJdGVtID0gbV90cmVlLmNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbihmb3JtYXR0aW5nRWxl
bWVudFJlY29yZC0+c3RhY2tJdGVtKCkuZ2V0KCkpOwogICAgICAgICAvLyA5Ci0gICAgICAgIG5l
d0VsZW1lbnQtPnRha2VBbGxDaGlsZHJlbkZyb20oZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpKTsK
KyAgICAgICAgbmV3SXRlbS0+ZWxlbWVudCgpLT50YWtlQWxsQ2hpbGRyZW5Gcm9tKGZ1cnRoZXN0
QmxvY2stPmVsZW1lbnQoKSk7CiAgICAgICAgIC8vIDEwCiAgICAgICAgIEVsZW1lbnQqIGZ1cnRo
ZXN0QmxvY2tFbGVtZW50ID0gZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpOwogICAgICAgICAvLyBG
SVhNRTogQWxsIHRoaXMgY3JlYXRpb24gLyBwYXJzZXJBZGRDaGlsZCAvIGF0dGFjaCBidXNpbmVz
cyBzaG91bGQKICAgICAgICAgLy8gICAgICAgIGJlIGluIEhUTUxDb25zdHJ1Y3Rpb25TaXRlLiAg
TXkgZ3Vlc3MgaXMgdGhhdCBzdGVwcyA4LS0xMgogICAgICAgICAvLyAgICAgICAgc2hvdWxkIGFs
bCBiZSBpbiBzb21lIEhUTUxDb25zdHJ1Y3Rpb25TaXRlIGZ1bmN0aW9uLgotICAgICAgICBmdXJ0
aGVzdEJsb2NrRWxlbWVudC0+cGFyc2VyQWRkQ2hpbGQobmV3RWxlbWVudCk7Ci0gICAgICAgIGlm
IChmdXJ0aGVzdEJsb2NrRWxlbWVudC0+YXR0YWNoZWQoKSAmJiAhbmV3RWxlbWVudC0+YXR0YWNo
ZWQoKSkgewotICAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgbmV3RWxlbWVudCBtaWdodCBhbHJl
YWR5IGJlIGF0dGFjaGVkIGlmLCBmb3IgZXhhbXBsZSwgb25lIG9mIHRoZSByZXBhcmVudGVkCisg
ICAgICAgIGZ1cnRoZXN0QmxvY2tFbGVtZW50LT5wYXJzZXJBZGRDaGlsZChuZXdJdGVtLT5lbGVt
ZW50KCkpOworICAgICAgICBpZiAoZnVydGhlc3RCbG9ja0VsZW1lbnQtPmF0dGFjaGVkKCkgJiYg
IW5ld0l0ZW0tPmVsZW1lbnQoKS0+YXR0YWNoZWQoKSkgeworICAgICAgICAgICAgLy8gTm90aWNl
IHRoYXQgbmV3SXRlbS0+ZWxlbWVudCgpIG1pZ2h0IGFscmVhZHkgYmUgYXR0YWNoZWQgaWYsIGZv
ciBleGFtcGxlLCBvbmUgb2YgdGhlIHJlcGFyZW50ZWQKICAgICAgICAgICAgIC8vIGNoaWxkcmVu
IGlzIGEgc3R5bGUgZWxlbWVudCwgd2hpY2ggYXR0YWNoZXMgaXRzZWxmIGF1dG9tYXRpY2FsbHku
Ci0gICAgICAgICAgICBuZXdFbGVtZW50LT5hdHRhY2goKTsKKyAgICAgICAgICAgIG5ld0l0ZW0t
PmVsZW1lbnQoKS0+YXR0YWNoKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gMTEKLSAgICAgICAg
bV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5zd2FwVG8oZm9ybWF0dGluZ0VsZW1l
bnQsIG5ld0VsZW1lbnQuZ2V0KCksIGJvb2ttYXJrKTsKKyAgICAgICAgbV90cmVlLmFjdGl2ZUZv
cm1hdHRpbmdFbGVtZW50cygpLT5zd2FwVG8oZm9ybWF0dGluZ0VsZW1lbnQsIG5ld0l0ZW0sIGJv
b2ttYXJrKTsKICAgICAgICAgLy8gMTIKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5y
ZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOwotICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkt
Pmluc2VydEFib3ZlKG5ld0VsZW1lbnQsIGZ1cnRoZXN0QmxvY2spOworICAgICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPmluc2VydEFib3ZlKG5ld0l0ZW0sIGZ1cnRoZXN0QmxvY2spOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IGI1MTFiYzU3NTJlNDBhMDQyMzA2MjljNmEyZmRmNzRiNDIzODFhYzAu
LjRlYzZmZDI3MDYyN2IxNDE1NTZjOWI1MmRhZjcwYzk4Y2JlN2EwZmYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAxMi0wNy0yMyAgS3dhbmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0
PgorCisgICAgICAgIFVzZSB0aGUgb3JpZ2luYWwgdG9rZW4gdG8gY3JlYXRlIGFuIGVsZW1lbnQg
aW4gInJlY29uc3RydWN0IHRoZSBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cyIgYW5kICJjYWxs
IHRoZSBhZG9wdGlvbiBhZ2VuY3kiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MTcwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZWQgdGVzdCBleHBlY3RhdGlvbiBmb3IgaHRtbDVsaWIvcnVubmVy
LWV4cGVjdGVkLnR4dAorICAgICAgICBiZWNhdXNlIG5vdyByZXNvdXJjZXMvc2NyaXB0ZWQvYWRv
cHRpb24wMS5kYXQgcGFzc2VzLgorCisgICAgICAgICogaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVk
LnR4dDoKKwogMjAxMi0wNy0yMyAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpA
aW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdIFNraXAgaHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5h
YmxlZC9pbmplY3RlZC1zY3JpcHQtZGlzY2FyZC5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVu
bmVyLWV4cGVjdGVkLnR4dAppbmRleCAxOWM0YjFhNjVhMDQyOTc5NDhhYmIwMmU4NDkzMzJjNGI2
YjJhYjE1Li5jZDVhMjBmOWFmMmNlODA5MDAxYTM4ZjgwNmMzOTJkY2IwMDhmYjkzIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQKQEAgLTQzLDMzICs0Myw2IEBAIHJl
c291cmNlcy90YWJsZXMwMS5kYXQ6IFBBU1MKIAogcmVzb3VyY2VzL3RyaWNreTAxLmRhdDogUEFT
UwogCi1yZXNvdXJjZXMvc2NyaXB0ZWQvYWRvcHRpb24wMS5kYXQ6Ci0xCi0KLVRlc3QgMSBvZiAx
IGluIHJlc291cmNlcy9zY3JpcHRlZC9hZG9wdGlvbjAxLmRhdCBmYWlsZWQuIElucHV0OgotPHA+
PGIgaWQ9IkEiPjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkEiKS5pZCA9ICJCIjwv
c2NyaXB0PjwvcD5URVhUPC9iPgotR290OgotfCA8aHRtbD4KLXwgICA8aGVhZD4KLXwgICA8Ym9k
eT4KLXwgICAgIDxwPgotfCAgICAgICA8Yj4KLXwgICAgICAgICBpZD0iQiIKLXwgICAgICAgICA8
c2NyaXB0PgotfCAgICAgICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJBIikuaWQgPSAi
QiIiCi18ICAgICA8Yj4KLXwgICAgICAgaWQ9IkIiCi18ICAgICAgICJURVhUIgotRXhwZWN0ZWQ6
Ci18IDxodG1sPgotfCAgIDxoZWFkPgotfCAgIDxib2R5PgotfCAgICAgPHA+Ci18ICAgICAgIDxi
PgotfCAgICAgICAgIGlkPSJCIgotfCAgICAgICAgIDxzY3JpcHQ+Ci18ICAgICAgICAgICAiZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkEiKS5pZCA9ICJCIiIKLXwgICAgIDxiPgotfCAgICAgICBp
ZD0iQSIKLXwgICAgICAgIlRFWFQiCityZXNvdXJjZXMvc2NyaXB0ZWQvYWRvcHRpb24wMS5kYXQ6
IFBBU1MKKwogcmVzb3VyY2VzL3NjcmlwdGVkL3dlYmtpdDAxLmRhdDogUEFTUwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153783</attachid>
            <date>2012-07-23 05:32:57 -0700</date>
            <delta_ts>2012-07-23 11:06:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91703-20120723213245.patch</filename>
            <type>text/plain</type>
            <size>36812</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMwY2E4MzI1NGFlNGNk
MTU1NzQ1MzdiMThlMGVkNGNlMmE5N2FjNi4uYmVhZWQyM2U2MTAyZWFjOWRhNTIwNjE0MDc0NWRl
ZDA3NTRkYjhiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDkyIEBACiAyMDEyLTA3LTIzICBLd2Fu
ZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CiAKKyAgICAgICAgVXNlIHRoZSBvcmln
aW5hbCB0b2tlbiB0byBjcmVhdGUgYW4gZWxlbWVudCBpbiAicmVjb25zdHJ1Y3QgdGhlIGFjdGl2
ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIiBhbmQgImNhbGwgdGhlIGFkb3B0aW9uIGFnZW5jeSIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNzAzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGN1cnJlbnQg
V2ViS2l0IEhUTUw1IHBhcnNlciBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBob2xkIHRoZSBvcmln
aW5hbCB0b2tlbgorICAgICAgICBpbiB0aGUgc3RhY2sgb2Ygb3BlbiBlbGVtZW50cyBhbmQgdGhl
IGFjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzLiBUaGlzIGlzCisgICAgICAgIHByb2JsZW1hdGlj
IGJlY2F1c2UgdGhlIG9yaWdpbmFsIHRva2VuIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGVsZW1lbnQg
aW4KKyAgICAgICAgInJlY29uc3RydWN0IHRoZSBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cyIg
YW5kICJjYWxsIHRoZSBhZG9wdGlvbiBhZ2VuY3kiLgorCisgICAgICAgIEFzIGEgd29ya2Fyb3Vu
ZCwgV2ViS2l0IHVzZXMgdGhlIHNhdmVkIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwg
dG9rZW4KKyAgICAgICAgdG8gY3JlYXRlIGFuIGVsZW1lbnQuIEJ1dCB0aGlzIGNhdXNlcyB1cyB0
byBmYWlsIGV4YW1wbGVzIGxpa2UgdGhpczoKKyAgICAgICAgPGIgaWQ9IjEiPjxwPjxzY3JpcHQ+
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjEiKS5pZCA9ICIyIjwvc2NyaXB0PjwvcD5URVhUPC9i
PgorICAgICAgICByZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyBjYWxscyB0
aGlzIG1ldGhvZCB0byBvcGVuIGEgc2Vjb25kIDxiPgorICAgICAgICB0YWcgdG8gd3JhcCBURVhU
LCBpdCB3aWxsIGhhdmUgaWQgIjIiLCBldmVuIHRob3VnaCB0aGUgSFRNTDUgc3BlYyBpbXBsaWVz
IGl0CisgICAgICAgIHNob3VsZCBiZSAiMSIuCisKKyAgICAgICAgQ3JlYXRlZCBhIHJlZi1jb3Vu
dGVkIGNvbnRhaW5lciBjbGFzcywgSFRNTFN0YWNrSXRlbSB0byBob2xkIHRoZSBvcmlnaW5hbCB0
b2tlbgorICAgICAgICBhbmQgdGhlIG5hbWVzcGFjZSBVUkkgYXMgd2VsbCBhcyB0aGUgZWxlbWVu
dC4gQ2hhbmdlZCBIVE1MRWxlbWVudFN0YWNrIGFuZAorICAgICAgICBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0IHRvIHVzZSBIVE1MU3RhY2tJdGVtLgorICAgICAgICBDaGFuZ2VkIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyBhbmQK
KyAgICAgICAgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3kgdG8gY3JlYXRl
IGFuIGVsZW1lbnQgZnJvbSB0aGUgc2F2ZWQgdG9rZW4KKyAgICAgICAgaW5zdGVhZCBvZiB0aGUg
c2F2ZWQgZWxlbWVudC4KKworICAgICAgICBVcGRhdGVkIHRlc3QgZXhwZWN0YXRpb24gZm9yIGh0
bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQKKyAgICAgICAgYmVjYXVzZSBub3cgcmVzb3VyY2Vz
L3NjcmlwdGVkL2Fkb3B0aW9uMDEuZGF0IHBhc3Nlcy4KKworICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEhlYWRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxG
b3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5z
ZXJ0SFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6
Omluc2VydEZvcm1hdHRpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JlaWduRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVj
dGlvblNpdGUuaDoKKyAgICAgICAgKEhUTUxDb25zdHJ1Y3Rpb25TaXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjdXJyZW50RWxlbWVudFJlY29yZCk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVjb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0bWxFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZUNvbW1v
bik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEhlYWRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MQm9keUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjppbnNlcnRBYm92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoQ29tbW9uKToKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9IVE1MRWxlbWVudFN0YWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6Om5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6c3RhY2tJdGVtKToKKyAgICAgICAgKEVsZW1lbnRS
ZWNvcmQpOgorICAgICAgICAoSFRNTEVsZW1lbnRTdGFjayk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpzd2FwVG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1hdHRpbmdFbGVtZW50TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGlu
Z0VsZW1lbnRMaXN0OjpFbnRyeTo6RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OmlzTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpzdGFja0l0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OmVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OnJlcGxhY2VFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3Q6OkVudHJ5OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEVudHJ5KToKKyAgICAgICAgKEhUTUxG
b3JtYXR0aW5nRWxlbWVudExpc3QpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTdGFja0l0
ZW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhUTUxTdGFja0l0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0YWNrSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTdGFja0l0ZW06OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0
YWNrSXRlbTo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tJdGVtOjp0b2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tJdGVtOjpuYW1lc3BhY2VVUkkpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFN0YWNrSXRlbTo6SFRNTFN0YWNrSXRlbSk6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KToKKworMjAxMi0wNy0yMyAgS3dhbmcgWXVsIFNlbyAg
PHNreXVsQGNvbXBhbnkxMDAubmV0PgorCiAgICAgICAgIFJlZi1jb3VudCBBdG9taWNIVE1MVG9r
ZW4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxOTgx
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25T
aXRlLmNwcAppbmRleCBiMzBhOGFlYjc5ZjU4ZDk4YWRhM2JjYzVkMTA0YmM1MDUzMmI2MmE5Li5j
YzhiYzI5ZDJkNGUyNzIzMWNmNWIxNDBkZjk0MzE1OTQ2Y2ZlNzFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC0zOSw2
ICszOSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklk
aW9tcy5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFN0
YWNrSXRlbS5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6
ZXIuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCkBAIC0xOTcsNyArMTk4LDcgQEAg
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhU
TUwoQXRvbWljSFRNTFRva2VuKiB0b2sKICAgICBSZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBlbGVt
ZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7CiAgICAgZWxlbWVudC0+
cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi0+YXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbik7CiAgICAgYXR0YWNoTGF0ZXIobV9hdHRhY2htZW50Um9vdCwgZWxlbWVu
dCk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxIdG1sRWxlbWVudChlbGVtZW50KTsKKyAg
ICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEh0bWxFbGVtZW50KEhUTUxTdGFja0l0ZW06OmNyZWF0
ZShlbGVtZW50LCB0b2tlbikpOwogCiAgICAgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAgICAgZWxl
bWVudC0+aW5zZXJ0ZWRCeVBhcnNlcigpOwpAQCAtMjgyLDcgKzI4Myw3IEBAIHZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIZWFkRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRv
a2VuKQogICAgIEFTU0VSVCghc2hvdWxkRm9zdGVyUGFyZW50KCkpOwogICAgIG1faGVhZCA9IGNy
ZWF0ZUhUTUxFbGVtZW50KHRva2VuKTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBt
X2hlYWQpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MSGVhZEVsZW1lbnQobV9oZWFkKTsK
KyAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEhlYWRFbGVtZW50KEhUTUxTdGFja0l0ZW06OmNy
ZWF0ZShtX2hlYWQsIHRva2VuKSk7CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQpAQCAtMjkwLDcgKzI5
MSw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgIEFTU0VSVCghc2hvdWxkRm9zdGVyUGFyZW50KCkp
OwogICAgIFJlZlB0cjxFbGVtZW50PiBib2R5ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwog
ICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGJvZHkpOwotICAgIG1fb3BlbkVsZW1lbnRz
LnB1c2hIVE1MQm9keUVsZW1lbnQoYm9keS5yZWxlYXNlKCkpOworICAgIG1fb3BlbkVsZW1lbnRz
LnB1c2hIVE1MQm9keUVsZW1lbnQoSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGJvZHkucmVsZWFzZSgp
LCB0b2tlbikpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9y
bUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgYm9vbCBpc0RlbW90ZWQpCkBAIC0zMDAs
MTQgKzMwMSwxNCBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9ybUVs
ZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgYm9vbCBpcwogICAgIG1fZm9ybSA9IHN0YXRp
Y19wb2ludGVyX2Nhc3Q8SFRNTEZvcm1FbGVtZW50PihlbGVtZW50LnJlbGVhc2UoKSk7CiAgICAg
bV9mb3JtLT5zZXREZW1vdGVkKGlzRGVtb3RlZCk7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5v
ZGUoKSwgbV9mb3JtKTsKLSAgICBtX29wZW5FbGVtZW50cy5wdXNoKG1fZm9ybSk7CisgICAgbV9v
cGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUobV9mb3JtLCB0b2tlbikpOwog
fQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRWxlbWVudChBdG9taWNI
VE1MVG9rZW4qIHRva2VuKQogewogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRl
SFRNTEVsZW1lbnQodG9rZW4pOwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1l
bnQpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudC5yZWxlYXNlKCkpOworICAgIG1f
b3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgp
LCB0b2tlbikpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTZWxmQ2xv
c2luZ0hUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCkBAIC0zMjcsNyArMzI4LDcg
QEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKICAgICAvLyBQb3NzaWJsZSBhY3RpdmUgZm9ybWF0dGluZyBl
bGVtZW50cyBpbmNsdWRlOgogICAgIC8vIGEsIGIsIGJpZywgY29kZSwgZW0sIGZvbnQsIGksIG5v
YnIsIHMsIHNtYWxsLCBzdHJpa2UsIHN0cm9uZywgdHQsIGFuZCB1LgogICAgIGluc2VydEhUTUxF
bGVtZW50KHRva2VuKTsKLSAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5hcHBlbmQoY3Vy
cmVudEVsZW1lbnQoKSk7CisgICAgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuYXBwZW5kKGN1
cnJlbnRFbGVtZW50UmVjb3JkKCktPnN0YWNrSXRlbSgpKTsKIH0KIAogdm9pZCBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQpA
QCAtMzQzLDcgKzM0NCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlw
dEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICBpZiAobV9mcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24gIT0gRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KQogICAgICAgICBlbGVt
ZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLT5hdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBlbGVt
ZW50KTsKLSAgICBtX29wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQucmVsZWFzZSgpKTsKKyAgICBt
X29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShlbGVtZW50LnJlbGVhc2Uo
KSwgdG9rZW4pKTsKIH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9yZWln
bkVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
c3BhY2VVUkkpCkBAIC0zNTQsNyArMzU1LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5zZXJ0Rm9yZWlnbkVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgY29uc3QgQXQKICAg
ICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQodG9rZW4sIG5hbWVzcGFj
ZVVSSSk7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgZWxlbWVudCwgdG9rZW4tPnNl
bGZDbG9zaW5nKCkpOwogICAgIGlmICghdG9rZW4tPnNlbGZDbG9zaW5nKCkpCi0gICAgICAgIG1f
b3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudC5yZWxlYXNlKCkpOworICAgICAgICBtX29wZW5FbGVt
ZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShlbGVtZW50LnJlbGVhc2UoKSwgdG9rZW4s
IG5hbWVzcGFjZVVSSSkpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRU
ZXh0Tm9kZShjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIFdoaXRlc3BhY2VNb2RlIHdoaXRlc3Bh
Y2VNb2RlKQpAQCAtNDE4LDI4ICs0MTksMTQgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2sKICAg
ICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4gSFRN
TENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50RnJvbUVsZW1lbnRSZWNvcmQoSFRN
TEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogcmVjb3JkKQorUGFzc1JlZlB0cjxIVE1MU3Rh
Y2tJdGVtPiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2Vu
KEhUTUxTdGFja0l0ZW0qIGl0ZW0pCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxFbGVtZW50RnJv
bVNhdmVkRWxlbWVudChyZWNvcmQtPmVsZW1lbnQoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RWxlbWVu
dD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50RnJvbVNhdmVkRWxlbWVu
dChFbGVtZW50KiBlbGVtZW50KQotewotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyB3cm9u
Zy4gIFdlIHNob3VsZCBiZSB1c2luZyB0aGUgb3JpZ2luYWwgdG9rZW4uCi0gICAgLy8gVXNpbmcg
YW4gRWxlbWVudCogY2F1c2VzIHVzIHRvIGZhaWwgZXhhbXBsZXMgbGlrZSB0aGlzOgotICAgIC8v
IDxiIGlkPSIxIj48cD48c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIxIikuaWQgPSAi
MiI8L3NjcmlwdD48L3A+VEVYVDwvYj4KLSAgICAvLyBXaGVuIHJlY29uc3RydWN0VGhlQWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG9wZW4KLSAgICAvLyBhIHNl
Y29uZCA8Yj4gdGFnIHRvIHdyYXAgVEVYVCwgaXQgd2lsbCBoYXZlIGlkICIyIiwgZXZlbiB0aG91
Z2ggdGhlIEhUTUw1Ci0gICAgLy8gc3BlYyBpbXBsaWVzIGl0IHNob3VsZCBiZSAiMSIuICBNaW5l
ZmllbGQgbWF0Y2hlcyB0aGUgSFRNTDUgc3BlYyBoZXJlLgotCi0gICAgQVNTRVJUKGVsZW1lbnQt
PmlzSFRNTEVsZW1lbnQoKSk7IC8vIG90aGVyd2lzZSBsb2NhbE5hbWUoKSBtaWdodCBiZSB3cm9u
Zy4KLQotICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGNsb25lZEF0dHJpYnV0ZXM7Ci0gICAgaWYgKEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gZWxlbWVudC0+dXBkYXRlZEF0dHJp
YnV0ZURhdGEoKSkKLSAgICAgICAgY2xvbmVkQXR0cmlidXRlcyA9IGF0dHJpYnV0ZURhdGEtPmNs
b25lZEF0dHJpYnV0ZVZlY3RvcigpOwotCi0gICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZmFr
ZVRva2VuID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFn
LCBlbGVtZW50LT5sb2NhbE5hbWUoKSwgY2xvbmVkQXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUhUTUxFbGVtZW50KGZha2VUb2tlbi5nZXQoKSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQ7CisgICAgaWYgKGl0ZW0tPm5hbWVzcGFjZVVSSSgpID09IEhUTUxOYW1lczo6eGh0bWxO
YW1lc3BhY2VVUkkpCisgICAgICAgIGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudChpdGVtLT50
b2tlbigpKTsKKyAgICBlbHNlCisgICAgICAgIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KGl0ZW0t
PnRva2VuKCksIGl0ZW0tPm5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gSFRNTFN0YWNrSXRl
bTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgpLCBpdGVtLT50b2tlbigpLCBpdGVtLT5uYW1lc3Bh
Y2VVUkkoKSk7CiB9CiAKIGJvb2wgSFRNTENvbnN0cnVjdGlvblNpdGU6OmluZGV4T2ZGaXJzdFVu
b3BlbkZvcm1hdHRpbmdFbGVtZW50KHVuc2lnbmVkJiBmaXJzdFVub3BlbkVsZW1lbnRJbmRleCkg
Y29uc3QKQEAgLTQ2OSwxMCArNDU2LDEwIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OnJl
Y29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCkKICAgICBBU1NFUlQodW5vcGVu
RW50cnlJbmRleCA8IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnNpemUoKSk7CiAgICAgZm9y
ICg7IHVub3BlbkVudHJ5SW5kZXggPCBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5zaXplKCk7
ICsrdW5vcGVuRW50cnlJbmRleCkgewogICAgICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
OjpFbnRyeSYgdW5vcGVuZWRFbnRyeSA9IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmF0KHVu
b3BlbkVudHJ5SW5kZXgpOwotICAgICAgICBSZWZQdHI8RWxlbWVudD4gcmVjb25zdHJ1Y3RlZCA9
IGNyZWF0ZUhUTUxFbGVtZW50RnJvbVNhdmVkRWxlbWVudCh1bm9wZW5lZEVudHJ5LmVsZW1lbnQo
KSk7Ci0gICAgICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIHJlY29uc3RydWN0ZWQpOwot
ICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNoKHJlY29uc3RydWN0ZWQucmVsZWFzZSgpKTsKLSAg
ICAgICAgdW5vcGVuZWRFbnRyeS5yZXBsYWNlRWxlbWVudChjdXJyZW50RWxlbWVudCgpKTsKKyAg
ICAgICAgUmVmUHRyPEhUTUxTdGFja0l0ZW0+IHJlY29uc3RydWN0ZWQgPSBjcmVhdGVFbGVtZW50
RnJvbVNhdmVkVG9rZW4odW5vcGVuZWRFbnRyeS5zdGFja0l0ZW0oKS5nZXQoKSk7CisgICAgICAg
IGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIHJlY29uc3RydWN0ZWQtPm5vZGUoKSk7CisgICAg
ICAgIG1fb3BlbkVsZW1lbnRzLnB1c2gocmVjb25zdHJ1Y3RlZCk7CisgICAgICAgIHVub3BlbmVk
RW50cnkucmVwbGFjZUVsZW1lbnQocmVjb25zdHJ1Y3RlZC5yZWxlYXNlKCkpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlv
blNpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRl
LmgKaW5kZXggZWQ5NTg0OTQ1ZDM0NDU5ZDE3ZjMzNmI1MjNhMjAwMTEzYTE2MzVmNi4uYTQzNjY4
YjFhYmQ1MDRmY2QxZGYwODcxNWU4MTZkNDVkNzE1OGRhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCkBAIC0xMDYsNyArMTA2LDcg
QEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keShBdG9taWNI
VE1MVG9rZW4qKTsKIAogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1lbnQo
QXRvbWljSFRNTFRva2VuKik7Ci0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVIVE1MRWxl
bWVudEZyb21FbGVtZW50UmVjb3JkKEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqKTsK
KyAgICBQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tl
bihIVE1MU3RhY2tJdGVtKik7CiAKICAgICBib29sIHNob3VsZEZvc3RlclBhcmVudCgpIGNvbnN0
OwogICAgIHZvaWQgZm9zdGVyUGFyZW50KFBhc3NSZWZQdHI8Tm9kZT4pOwpAQCAtMTE4LDYgKzEx
OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVz
aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAKICAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiAhbV9vcGVuRWxlbWVudHMuc3RhY2tEZXB0aCgpOyB9CisgICAgSFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogY3VycmVudEVsZW1lbnRSZWNvcmQoKSBjb25zdCB7
IHJldHVybiBtX29wZW5FbGVtZW50cy50b3BSZWNvcmQoKTsgfQogICAgIEVsZW1lbnQqIGN1cnJl
bnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9vcGVuRWxlbWVudHMudG9wKCk7IH0KICAgICBD
b250YWluZXJOb2RlKiBjdXJyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkVsZW1lbnRz
LnRvcE5vZGUoKTsgfQogICAgIEVsZW1lbnQqIG9uZUJlbG93VG9wKCkgY29uc3QgeyByZXR1cm4g
bV9vcGVuRWxlbWVudHMub25lQmVsb3dUb3AoKTsgfQpAQCAtMTYwLDcgKzE2MSw2IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIGZpbmRGb3N0ZXJTaXRlKEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYp
OwogCi0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVIVE1MRWxlbWVudEZyb21TYXZlZEVs
ZW1lbnQoRWxlbWVudCopOwogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlRWxlbWVudChB
dG9taWNIVE1MVG9rZW4qLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7CiAKICAg
ICB2b2lkIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tl
biosIEVsZW1lbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxFbGVtZW50U3RhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1l
bnRTdGFjay5jcHAKaW5kZXggY2Q1ZDA4YTU1M2VkYzg0NzM1NjFhMTYxZWUxYTk3NGEyN2Y2MDNj
My4uN2FjYWI5YWU3MTJhMWQwNTI0YzRjOGE2Y2IyMjk5YWZkMjI3NWVhOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAKQEAgLTEyNSwyMyAr
MTI1LDIzIEBAIGlubGluZSBib29sIGlzU2VsZWN0U2NvcGVNYXJrZXIoQ29udGFpbmVyTm9kZSog
bm9kZSkKIAogfQogCi1IVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVj
b3JkKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSwgUGFzc093blB0cjxFbGVtZW50UmVj
b3JkPiBuZXh0KQotICAgIDogbV9ub2RlKG5vZGUpCitIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
UmVjb3JkOjpFbGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSwgUGFz
c093blB0cjxFbGVtZW50UmVjb3JkPiBuZXh0KQorICAgIDogbV9pdGVtKGl0ZW0pCiAgICAgLCBt
X25leHQobmV4dCkKIHsKLSAgICBBU1NFUlQobV9ub2RlKTsKKyAgICBBU1NFUlQobV9pdGVtKTsK
IH0KIAogSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6fkVsZW1lbnRSZWNvcmQoKQog
ewogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVt
ZW50KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZDo6cmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBp
dGVtKQogewotICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBBU1NFUlQoIW1fbm9kZSB8fCBtX25v
ZGUtPmlzRWxlbWVudE5vZGUoKSk7CisgICAgQVNTRVJUKGl0ZW0pOworICAgIEFTU0VSVCghbV9p
dGVtIHx8IG1faXRlbS0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpOwogICAgIC8vIEZJWE1FOiBT
aG91bGQgdGhpcyBjYWxsIGZpbmlzaFBhcnNpbmdDaGlsZHJlbj8KLSAgICBtX25vZGUgPSBlbGVt
ZW50OworICAgIG1faXRlbSA9IGl0ZW07CiB9CiAKIGJvb2wgSFRNTEVsZW1lbnRTdGFjazo6RWxl
bWVudFJlY29yZDo6aXNBYm92ZShFbGVtZW50UmVjb3JkKiBvdGhlcikgY29uc3QKQEAgLTMwNyw2
MiArMzA3LDYyIEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wVW50aWxGb3JlaWduQ29udGVu
dFNjb3BlTWFya2VyKCkKICAgICAgICAgcG9wKCk7CiB9CiAgICAgCi12b2lkIEhUTUxFbGVtZW50
U3RhY2s6OnB1c2hSb290Tm9kZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHJvb3ROb2RlKQor
dm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoUm9vdE5vZGUoUGFzc1JlZlB0cjxIVE1MU3RhY2tJ
dGVtPiByb290SXRlbSkKIHsKLSAgICBBU1NFUlQocm9vdE5vZGUtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERSk7Ci0gICAgcHVzaFJvb3ROb2RlQ29tbW9uKHJvb3RO
b2RlKTsKKyAgICBBU1NFUlQocm9vdEl0ZW0tPm5vZGUoKS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpE
T0NVTUVOVF9GUkFHTUVOVF9OT0RFKTsKKyAgICBwdXNoUm9vdE5vZGVDb21tb24ocm9vdEl0ZW0p
OwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQoUGFzc1Jl
ZlB0cjxFbGVtZW50PiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0
bWxFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSkKIHsKLSAgICBBU1NFUlQo
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKLSAgICBwdXNoUm9vdE5v
ZGVDb21tb24oZWxlbWVudCk7CisgICAgQVNTRVJUKGl0ZW0tPmVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKKyAgICBwdXNoUm9vdE5vZGVDb21tb24oaXRlbSk7CiB9
CiAgICAgCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZUNvbW1vbihQYXNzUmVm
UHRyPENvbnRhaW5lck5vZGU+IHJvb3ROb2RlKQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNo
Um9vdE5vZGVDb21tb24oUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiByb290SXRlbSkKIHsKICAg
ICBBU1NFUlQoIW1fdG9wKTsKICAgICBBU1NFUlQoIW1fcm9vdE5vZGUpOwotICAgIG1fcm9vdE5v
ZGUgPSByb290Tm9kZS5nZXQoKTsKLSAgICBwdXNoQ29tbW9uKHJvb3ROb2RlKTsKKyAgICBtX3Jv
b3ROb2RlID0gcm9vdEl0ZW0tPm5vZGUoKTsKKyAgICBwdXNoQ29tbW9uKHJvb3RJdGVtKTsKIH0K
IAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEhlYWRFbGVtZW50KFBhc3NSZWZQdHI8
RWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaEhUTUxIZWFkRWxl
bWVudChQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGl0ZW0pCiB7Ci0gICAgQVNTRVJUKGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSk7CisgICAgQVNTRVJUKGl0ZW0tPmVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKTsKICAgICBBU1NFUlQoIW1f
aGVhZEVsZW1lbnQpOwotICAgIG1faGVhZEVsZW1lbnQgPSBlbGVtZW50LmdldCgpOwotICAgIHB1
c2hDb21tb24oZWxlbWVudCk7CisgICAgbV9oZWFkRWxlbWVudCA9IGl0ZW0tPmVsZW1lbnQoKTsK
KyAgICBwdXNoQ29tbW9uKGl0ZW0pOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hI
VE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQordm9pZCBIVE1MRWxl
bWVudFN0YWNrOjpwdXNoSFRNTEJvZHlFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4g
aXRlbSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlU
YWcpKTsKKyAgICBBU1NFUlQoaXRlbS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Ym9keVRhZykpOwogICAgIEFTU0VSVCghbV9ib2R5RWxlbWVudCk7Ci0gICAgbV9ib2R5RWxlbWVu
dCA9IGVsZW1lbnQuZ2V0KCk7Ci0gICAgcHVzaENvbW1vbihlbGVtZW50KTsKKyAgICBtX2JvZHlF
bGVtZW50ID0gaXRlbS0+ZWxlbWVudCgpOworICAgIHB1c2hDb21tb24oaXRlbSk7CiB9CiAKLXZv
aWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit2
b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2goUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVt
KQogewotICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcp
KTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSk7
Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOwor
ICAgIEFTU0VSVCghaXRlbS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRh
ZykpOworICAgIEFTU0VSVCghaXRlbS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aGVhZFRhZykpOworICAgIEFTU0VSVCghaXRlbS0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Ym9keVRhZykpOwogICAgIEFTU0VSVChtX3Jvb3ROb2RlKTsKLSAgICBwdXNoQ29tbW9u
KGVsZW1lbnQpOworICAgIHB1c2hDb21tb24oaXRlbSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRT
dGFjazo6aW5zZXJ0QWJvdmUoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBFbGVtZW50UmVj
b3JkKiByZWNvcmRCZWxvdykKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJvdmUoUGFz
c1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVtLCBFbGVtZW50UmVjb3JkKiByZWNvcmRCZWxvdykK
IHsKLSAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgQVNTRVJUKGl0ZW0pOwogICAgIEFTU0VSVChy
ZWNvcmRCZWxvdyk7CiAgICAgQVNTRVJUKG1fdG9wKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpOwotICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsKKyAgICBBU1NFUlQoIWl0ZW0tPmVsZW1lbnQoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKKyAgICBBU1NFUlQoIWl0ZW0tPmVsZW1l
bnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKTsKKyAgICBBU1NFUlQoIWl0ZW0t
PmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsKICAgICBBU1NFUlQo
bV9yb290Tm9kZSk7CiAgICAgaWYgKHJlY29yZEJlbG93ID09IG1fdG9wKSB7Ci0gICAgICAgIHB1
c2goZWxlbWVudCk7CisgICAgICAgIHB1c2goaXRlbSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFib3Zl
KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgRWxlbWVudFJlY29yZCogcgogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgbV9zdGFja0RlcHRoKys7Ci0gICAgICAgIHJlY29yZEFi
b3ZlLT5zZXROZXh0KGFkb3B0UHRyKG5ldyBFbGVtZW50UmVjb3JkKGVsZW1lbnQsIHJlY29yZEFi
b3ZlLT5yZWxlYXNlTmV4dCgpKSkpOworICAgICAgICByZWNvcmRBYm92ZS0+c2V0TmV4dChhZG9w
dFB0cihuZXcgRWxlbWVudFJlY29yZChpdGVtLCByZWNvcmRBYm92ZS0+cmVsZWFzZU5leHQoKSkp
KTsKICAgICAgICAgcmVjb3JkQWJvdmUtPm5leHQoKS0+ZWxlbWVudCgpLT5iZWdpblBhcnNpbmdD
aGlsZHJlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTY3LDEyICs1NjcsMTIgQEAg
Q29udGFpbmVyTm9kZSogSFRNTEVsZW1lbnRTdGFjazo6cm9vdE5vZGUoKSBjb25zdAogICAgIHJl
dHVybiBtX3Jvb3ROb2RlOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hDb21tb24o
UGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlKQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpw
dXNoQ29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSkKIHsKICAgICBBU1NFUlQo
bV9yb290Tm9kZSk7CiAKICAgICBtX3N0YWNrRGVwdGgrKzsKLSAgICBtX3RvcCA9IGFkb3B0UHRy
KG5ldyBFbGVtZW50UmVjb3JkKG5vZGUsIG1fdG9wLnJlbGVhc2UoKSkpOworICAgIG1fdG9wID0g
YWRvcHRQdHIobmV3IEVsZW1lbnRSZWNvcmQoaXRlbSwgbV90b3AucmVsZWFzZSgpKSk7CiB9CiAK
IHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wQ29tbW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaAppbmRleCBmN2JhYTM2NDQ3YjA3ZDUyOGYzZTI3
NzMzMjRjODE0MmU5MTQxZjg4Li42ZTMxMjUxMzA2MWIxOGZjZWQ2OTEzY2VjN2ZmYzcwZmFmZjEz
YmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0
YWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5o
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0YWNrSXRlbS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgpAQCAtNTUsMjMgKzU2LDIzIEBAIHB1YmxpYzoKICAgICBwdWJsaWM6CiAgICAgICAgIH5F
bGVtZW50UmVjb3JkKCk7IC8vIFB1YmxpYyBmb3IgflBhc3NPd25QdHIoKQogICAgIAotICAgICAg
ICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG1fbm9kZS5nZXQo
KSk7IH0KLSAgICAgICAgQ29udGFpbmVyTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZS5nZXQoKTsgfQotICAgICAgICB2b2lkIHJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVu
dD4pOworICAgICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLT5l
bGVtZW50KCk7IH0KKyAgICAgICAgQ29udGFpbmVyTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1faXRlbS0+bm9kZSgpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gc3Rh
Y2tJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtOyB9CisgICAgICAgIHZvaWQgcmVwbGFjZUVs
ZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7CiAKICAgICAgICAgYm9vbCBpc0Fib3Zl
KEVsZW1lbnRSZWNvcmQqKSBjb25zdDsKIAogICAgICAgICBFbGVtZW50UmVjb3JkKiBuZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBm
cmllbmQgY2xhc3MgSFRNTEVsZW1lbnRTdGFjazsKIAotICAgICAgICBFbGVtZW50UmVjb3JkKFBh
c3NSZWZQdHI8Q29udGFpbmVyTm9kZT4sIFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4pOworICAg
ICAgICBFbGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4sIFBhc3NPd25QdHI8
RWxlbWVudFJlY29yZD4pOwogCiAgICAgICAgIFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4gcmVs
ZWFzZU5leHQoKSB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CiAgICAgICAgIHZvaWQgc2V0
TmV4dChQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQog
Ci0gICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX25vZGU7CisgICAgICAgIFJlZlB0cjxI
VE1MU3RhY2tJdGVtPiBtX2l0ZW07CiAgICAgICAgIE93blB0cjxFbGVtZW50UmVjb3JkPiBtX25l
eHQ7CiAgICAgfTsKIApAQCAtOTcsMTMgKzk4LDEzIEBAIHB1YmxpYzoKICAgICBFbGVtZW50UmVj
b3JkKiBmaW5kKEVsZW1lbnQqKSBjb25zdDsKICAgICBFbGVtZW50UmVjb3JkKiB0b3Btb3N0KGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3Q7CiAKLSAgICB2b2lkIGluc2VydEFib3Zl
KFBhc3NSZWZQdHI8RWxlbWVudD4sIEVsZW1lbnRSZWNvcmQqKTsKKyAgICB2b2lkIGluc2VydEFi
b3ZlKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4sIEVsZW1lbnRSZWNvcmQqKTsKIAotICAgIHZv
aWQgcHVzaChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKLSAgICB2b2lkIHB1c2hSb290Tm9kZShQYXNz
UmVmUHRyPENvbnRhaW5lck5vZGU+KTsKLSAgICB2b2lkIHB1c2hIVE1MSHRtbEVsZW1lbnQoUGFz
c1JlZlB0cjxFbGVtZW50Pik7Ci0gICAgdm9pZCBwdXNoSFRNTEhlYWRFbGVtZW50KFBhc3NSZWZQ
dHI8RWxlbWVudD4pOwotICAgIHZvaWQgcHVzaEhUTUxCb2R5RWxlbWVudChQYXNzUmVmUHRyPEVs
ZW1lbnQ+KTsKKyAgICB2b2lkIHB1c2goUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7CisgICAg
dm9pZCBwdXNoUm9vdE5vZGUoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7CisgICAgdm9pZCBw
dXNoSFRNTEh0bWxFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4pOworICAgIHZvaWQg
cHVzaEhUTUxIZWFkRWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+KTsKKyAgICB2b2lk
IHB1c2hIVE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7CiAKICAgICB2
b2lkIHBvcCgpOwogICAgIHZvaWQgcG9wVW50aWwoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
KTsKQEAgLTE1Niw4ICsxNTcsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICB2
b2lkIHB1c2hDb21tb24oUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPik7Ci0gICAgdm9pZCBwdXNo
Um9vdE5vZGVDb21tb24oUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPik7CisgICAgdm9pZCBwdXNo
Q29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4pOworICAgIHZvaWQgcHVzaFJvb3ROb2Rl
Q29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4pOwogICAgIHZvaWQgcG9wQ29tbW9uKCk7
CiAgICAgdm9pZCByZW1vdmVOb25Ub3BDb21tb24oRWxlbWVudCopOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3Bw
CmluZGV4IDAxNDVkZTBlNmYzOWUwMTkwMGMyNDE1YjQ3ZDllNjU3YTUyMWVkZjEuLmQ1YmJlMGUy
ZDZkZjNiODBhZGIzNjdiODhhMmU2Mjc3ZWZmMzQxNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCkBAIC04
NywyNSArODcsMjcgQEAgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Qm9va21hcmsgSFRNTEZv
cm1hdHRpbmdFbGVtZW50TGlzdDo6Ym9va21hcmtGb3IoRWxlbWUKICAgICByZXR1cm4gQm9va21h
cmsoJmF0KGluZGV4KSk7CiB9CiAKLXZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6c3dh
cFRvKEVsZW1lbnQqIG9sZEVsZW1lbnQsIEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNvbnN0IEJvb2tt
YXJrJiBib29rbWFyaykKK3ZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6c3dhcFRvKEVs
ZW1lbnQqIG9sZEVsZW1lbnQsIFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gcHJwTmV3SXRlbSwg
Y29uc3QgQm9va21hcmsmIGJvb2ttYXJrKQogeworICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVtPiBu
ZXdJdGVtID0gcHJwTmV3SXRlbTsKKwogICAgIEFTU0VSVChjb250YWlucyhvbGRFbGVtZW50KSk7
Ci0gICAgQVNTRVJUKCFjb250YWlucyhuZXdFbGVtZW50KSk7CisgICAgQVNTRVJUKCFjb250YWlu
cyhuZXdJdGVtKSk7CiAgICAgaWYgKCFib29rbWFyay5oYXNCZWVuTW92ZWQoKSkgewogICAgICAg
ICBBU1NFUlQoYm9va21hcmsubWFyaygpLT5lbGVtZW50KCkgPT0gb2xkRWxlbWVudCk7Ci0gICAg
ICAgIGJvb2ttYXJrLm1hcmsoKS0+cmVwbGFjZUVsZW1lbnQobmV3RWxlbWVudCk7CisgICAgICAg
IGJvb2ttYXJrLm1hcmsoKS0+cmVwbGFjZUVsZW1lbnQobmV3SXRlbSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgc2l6ZV90IGluZGV4ID0gYm9va21hcmsubWFyaygpIC0gZmlyc3QoKTsK
ICAgICBBU1NFUlQoaW5kZXggPCBzaXplKCkpOwotICAgIG1fZW50cmllcy5pbnNlcnQoaW5kZXgg
KyAxLCBuZXdFbGVtZW50KTsKKyAgICBtX2VudHJpZXMuaW5zZXJ0KGluZGV4ICsgMSwgbmV3SXRl
bSk7CiAgICAgcmVtb3ZlKG9sZEVsZW1lbnQpOwogfQogCi12b2lkIEhUTUxGb3JtYXR0aW5nRWxl
bWVudExpc3Q6OmFwcGVuZChFbGVtZW50KiBlbGVtZW50KQordm9pZCBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0OjphcHBlbmQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVtKQogewotICAg
IGVuc3VyZU5vYWhzQXJrQ29uZGl0aW9uKGVsZW1lbnQpOwotICAgIG1fZW50cmllcy5hcHBlbmQo
ZWxlbWVudCk7CisgICAgZW5zdXJlTm9haHNBcmtDb25kaXRpb24oaXRlbS0+ZWxlbWVudCgpKTsK
KyAgICBtX2VudHJpZXMuYXBwZW5kKGl0ZW0pOwogfQogCiB2b2lkIEhUTUxGb3JtYXR0aW5nRWxl
bWVudExpc3Q6OnJlbW92ZShFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oCmluZGV4IDc5ZmUy
ZmYzNzU3NTUwZTRkM2FlOGU1MjhlMTNkOTA1NWRkMTc5ODQuLjYzNWUzZWRmNjgxMzUzNmNiZjQx
OWFjNzVlZTkwNjcyOTVhNThkZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNp
Zm5kZWYgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdF9oCiAjZGVmaW5lIEhUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3RfaAogCisjaW5jbHVkZSAiSFRNTFN0YWNrSXRlbS5oIgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KQEAgLTQ3LDM1ICs0OCwzNSBAQCBwdWJsaWM6CiAgICAgY2xhc3MgRW50cnkgewogICAg
IHB1YmxpYzoKICAgICAgICAgLy8gSW5saW5lIGJlY2F1c2UgdGhleSdyZSBob3QgYW5kIFZlY3Rv
cjxUPiB1c2VzIHRoZW0uCi0gICAgICAgIGV4cGxpY2l0IEVudHJ5KEVsZW1lbnQqIGVsZW1lbnQp
Ci0gICAgICAgICAgICA6IG1fZWxlbWVudChlbGVtZW50KQorICAgICAgICBleHBsaWNpdCBFbnRy
eShQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGl0ZW0pCisgICAgICAgICAgICA6IG1faXRlbShp
dGVtKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgICAgIH0K
ICAgICAgICAgZW51bSBNYXJrZXJFbnRyeVR5cGUgeyBNYXJrZXJFbnRyeSB9OwogICAgICAgICBF
bnRyeShNYXJrZXJFbnRyeVR5cGUpCi0gICAgICAgICAgICA6IG1fZWxlbWVudCgwKQorICAgICAg
ICAgICAgOiBtX2l0ZW0oMCkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIH5FbnRyeSgp
IHt9CiAKLSAgICAgICAgYm9vbCBpc01hcmtlcigpIGNvbnN0IHsgcmV0dXJuICFtX2VsZW1lbnQ7
IH0KKyAgICAgICAgYm9vbCBpc01hcmtlcigpIGNvbnN0IHsgcmV0dXJuICFtX2l0ZW07IH0KIAor
ICAgICAgICBQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IHN0YWNrSXRlbSgpIGNvbnN0IHsgcmV0
dXJuIG1faXRlbTsgfQogICAgICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QKICAgICAgICAg
ewotICAgICAgICAgICAgLy8gVGhlIGZhY3QgdGhhdCAhbV9lbGVtZW50ID09IGlzTWFya2VyKCkg
aXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsCisgICAgICAgICAgICAvLyBUaGUgZmFjdCB0aGF0
ICFtX2l0ZW0gPT0gaXNNYXJrZXIoKSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwKICAgICAg
ICAgICAgIC8vIGNhbGxlcnMgc2hvdWxkIGNoZWNrIGlzTWFya2VyKCkgYmVmb3JlIGNhbGxpbmcg
ZWxlbWVudCgpLgotICAgICAgICAgICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9lbGVtZW50LmdldCgpOworICAgICAgICAgICAgQVNTRVJUKG1faXRlbSk7CisgICAg
ICAgICAgICByZXR1cm4gbV9pdGVtLT5lbGVtZW50KCk7CiAgICAgICAgIH0KLSAgICAgICAgdm9p
ZCByZXBsYWNlRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpIHsgbV9lbGVtZW50
ID0gZWxlbWVudDsgfQorICAgICAgICB2b2lkIHJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8SFRN
TFN0YWNrSXRlbT4gaXRlbSkgeyBtX2l0ZW0gPSBpdGVtOyB9CiAKICAgICAgICAgLy8gTmVlZGVk
IGZvciB1c2Ugd2l0aCBWZWN0b3IuICBUaGVzZSBhcmUgc3VwZXItaG90IGFuZCBtdXN0IGJlIGlu
bGluZS4KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsg
cmV0dXJuIG1fZWxlbWVudCA9PSBlbGVtZW50OyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3IhPShF
bGVtZW50KiBlbGVtZW50KSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQgIT0gZWxlbWVudDsgfQor
ICAgICAgICBib29sIG9wZXJhdG9yPT0oRWxlbWVudCogZWxlbWVudCkgY29uc3QgeyByZXR1cm4g
IW1faXRlbSA/ICFlbGVtZW50IDogbV9pdGVtLT5lbGVtZW50KCkgPT0gZWxlbWVudDsgfQorICAg
ICAgICBib29sIG9wZXJhdG9yIT0oRWxlbWVudCogZWxlbWVudCkgY29uc3QgeyByZXR1cm4gIW1f
aXRlbSA/ICEhZWxlbWVudCA6IG1faXRlbS0+ZWxlbWVudCgpICE9IGVsZW1lbnQ7IH0KIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CisgICAgICAgIFJl
ZlB0cjxIVE1MU3RhY2tJdGVtPiBtX2l0ZW07CiAgICAgfTsKIAogICAgIGNsYXNzIEJvb2ttYXJr
IHsKQEAgLTEwNywxMSArMTA4LDExIEBAIHB1YmxpYzoKIAogICAgIEVudHJ5KiBmaW5kKEVsZW1l
bnQqKTsKICAgICBib29sIGNvbnRhaW5zKEVsZW1lbnQqKTsKLSAgICB2b2lkIGFwcGVuZChFbGVt
ZW50Kik7CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7CiAgICAg
dm9pZCByZW1vdmUoRWxlbWVudCopOwogCiAgICAgQm9va21hcmsgYm9va21hcmtGb3IoRWxlbWVu
dCopOwotICAgIHZvaWQgc3dhcFRvKEVsZW1lbnQqIG9sZEVsZW1lbnQsIEVsZW1lbnQqIG5ld0Vs
ZW1lbnQsIGNvbnN0IEJvb2ttYXJrJik7CisgICAgdm9pZCBzd2FwVG8oRWxlbWVudCogb2xkRWxl
bWVudCwgUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBwcnBOZXdJdGVtLCBjb25zdCBCb29rbWFy
ayYpOwogCiAgICAgdm9pZCBhcHBlbmRNYXJrZXIoKTsKICAgICAvLyBjbGVhclRvTGFzdE1hcmtl
ciBhbHNvIGNsZWFycyB0aGUgbWFya2VyIChwZXIgdGhlIEhUTUw1IHNwZWMpLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkODE0MGNhZjUw
NGJlMTIzMmVmOThiNWUyN2Y4ZjljM2YyZDI3YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3RhY2tJdGVtLmgKQEAgLTAsMCArMSw5OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEhUTUxTdGFja0l0ZW1faAorI2RlZmluZSBIVE1MU3RhY2tJdGVtX2gKKworI2luY2x1ZGUg
IkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVG9rZW4u
aCIKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENvbnRhaW5lck5vZGU7CisKK2NsYXNzIEhUTUxTdGFja0l0ZW0gOiBwdWJs
aWMgUmVmQ291bnRlZDxIVE1MU3RhY2tJdGVtPiB7CitwdWJsaWM6CisgICAgLy8gRG9jdW1lbnRG
cmFnbWVudCBjYXNlLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGNyZWF0
ZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEhUTUxTdGFja0l0ZW0obm9kZSkpOworICAgIH0KKworICAgIC8vIFVzZWQg
YnkgSFRNTEVsZW1lbnRTdGFjay4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVt
PiBjcmVhdGUoUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlLCBBdG9taWNIVE1MVG9rZW4q
IHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0
bWxOYW1lc3BhY2VVUkkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxT
dGFja0l0ZW0obm9kZSwgdG9rZW4sIG5hbWVzcGFjZVVSSSkpOworICAgIH0KKworICAgIC8vIFVz
ZWQgYnkgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MU3RhY2tJdGVtPiBjcmVhdGUoRWxlbWVudCogZWxlbWVudCwgQXRvbWljSFRNTFRva2VuKiB0
b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1s
TmFtZXNwYWNlVVJJKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MU3Rh
Y2tJdGVtKGVsZW1lbnQsIHRva2VuLCBuYW1lc3BhY2VVUkkpKTsKKyAgICB9CisKKyAgICBFbGVt
ZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG1fbm9kZS5nZXQoKSk7IH0K
KyAgICBDb250YWluZXJOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9
CisKKyAgICBBdG9taWNIVE1MVG9rZW4qIHRva2VuKCkgeyByZXR1cm4gbV90b2tlbi5nZXQoKTsg
fQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lc3BhY2VVUkk7IH0KKworcHJpdmF0ZToKKyAgICBIVE1MU3RhY2tJdGVtKFBhc3NSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gbm9kZSkKKyAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAg
LCBtX2lzRG9jdW1lbnRGcmFnbWVudE5vZGUodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgSFRN
TFN0YWNrSXRlbShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8QXRv
bWljSFRNTFRva2VuPiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBI
VE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKQorICAgICAgICA6IG1fbm9kZShub2RlKQorICAg
ICAgICAsIG1fdG9rZW4odG9rZW4pCisgICAgICAgICwgbV9uYW1lc3BhY2VVUkkobmFtZXNwYWNl
VVJJKQorICAgICAgICAsIG1faXNEb2N1bWVudEZyYWdtZW50Tm9kZShmYWxzZSkKKyAgICB7Cisg
ICAgfQorCisgICAgSFRNTFN0YWNrSXRlbShFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRyPEF0
b21pY0hUTUxUb2tlbj4gdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0g
SFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSkKKyAgICAgICAgOiBtX25vZGUoZWxlbWVudCkK
KyAgICAgICAgLCBtX3Rva2VuKHRva2VuKQorICAgICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVz
cGFjZVVSSSkKKyAgICAgICAgLCBtX2lzRG9jdW1lbnRGcmFnbWVudE5vZGUoZmFsc2UpCisgICAg
eworICAgIH0KKworICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX25vZGU7CisKKyAgICBSZWZQ
dHI8QXRvbWljSFRNTFRva2VuPiBtX3Rva2VuOworICAgIEF0b21pY1N0cmluZyBtX25hbWVzcGFj
ZVVSSTsKKyAgICBib29sIG1faXNEb2N1bWVudEZyYWdtZW50Tm9kZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhUTUxTdGFja0l0ZW1faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggNzAyNmU2ODQwYWYx
NGM2YzcyY2E5OWY2OWEzM2NhMDI5Y2NmM2VkNS4uNzI5Mzg4ZDU4OTFlMGIyMjJiNTljMjM1ZGQ1
MDVhODQ3NDA3YjNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTFN0YWNrSXRlbS5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgog
I2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
CkBAIC0zODAsNyArMzgxLDcgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRN
TERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERvY3VtZW50RnJhZ21lbnQqIGYKICAgICAgICAgLy8g
aHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBh
Z2UvdGhlLWVuZC5odG1sI2ZyYWdtZW50LWNhc2UKICAgICAgICAgLy8gRm9yIGVmZmljaWVuY3ks
IHdlIHNraXAgc3RlcCA0LjIgKCJMZXQgcm9vdCBiZSBhIG5ldyBodG1sIGVsZW1lbnQgd2l0aCBu
byBhdHRyaWJ1dGVzIikKICAgICAgICAgLy8gYW5kIGluc3RlYWQgdXNlIHRoZSBEb2N1bWVudEZy
YWdtZW50IGFzIGEgcm9vdCBub2RlLgotICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnB1
c2hSb290Tm9kZShmcmFnbWVudCk7CisgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cHVz
aFJvb3ROb2RlKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShmcmFnbWVudCkpOwogICAgICAgICByZXNl
dEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KCk7CiAgICAgICAgIG1fdHJlZS5zZXRGb3JtKGNs
b3Nlc3RGb3JtQW5jZXN0b3IoY29udGV4dEVsZW1lbnQpKTsKICAgICB9CkBAIC0xMTg0LDcgKzEx
ODUsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxU
b2tlbiogdG9rZW4pCiAgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRpdGxlVGFnKSB7
CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIEFTU0VSVChtX3Ry
ZWUuaGVhZCgpKTsKLSAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cHVzaEhUTUxI
ZWFkRWxlbWVudChtX3RyZWUuaGVhZCgpKTsKKyAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+cHVzaEhUTUxIZWFkRWxlbWVudChIVE1MU3RhY2tJdGVtOjpjcmVhdGUobV90cmVlLmhl
YWQoKSwgdG9rZW4pKTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tl
bik7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnJlbW92ZUhUTUxIZWFkRWxl
bWVudChtX3RyZWUuaGVhZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1NTksMTAgKzE1
NjAsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9t
aWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgaWYgKG5vZGUgPT0gZm9ybWF0dGluZ0Vs
ZW1lbnRSZWNvcmQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAvLyA2LjUK
LSAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gbV90cmVlLmNyZWF0ZUhU
TUxFbGVtZW50RnJvbUVsZW1lbnRSZWNvcmQobm9kZSk7CisgICAgICAgICAgICBSZWZQdHI8SFRN
TFN0YWNrSXRlbT4gbmV3SXRlbSA9IG1fdHJlZS5jcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4o
bm9kZS0+c3RhY2tJdGVtKCkuZ2V0KCkpOworCiAgICAgICAgICAgICBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0OjpFbnRyeSogbm9kZUVudHJ5ID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cygpLT5maW5kKG5vZGUtPmVsZW1lbnQoKSk7Ci0gICAgICAgICAgICBub2RlRW50cnktPnJl
cGxhY2VFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOwotICAgICAgICAgICAgbm9kZS0+cmVwbGFj
ZUVsZW1lbnQobmV3RWxlbWVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgbm9kZUVudHJ5LT5y
ZXBsYWNlRWxlbWVudChuZXdJdGVtKTsKKyAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VFbGVtZW50
KG5ld0l0ZW0ucmVsZWFzZSgpKTsKICAgICAgICAgICAgIC8vIDYuNCAtLSBJbnRlbnRpb25hbGx5
IG91dCBvZiBvcmRlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbm9kZQogICAgICAgICAgICAg
Ly8gd2FzIHJlcGxhY2VkIGluIDYuNS4KICAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3Jn
L0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0xMDA5NgpAQCAtMTU5NSwyNSArMTU5NywyNSBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxU
b2tlbiogdG9rZW4pCiAgICAgICAgICAgICAgICAgbGFzdE5vZGUtPmVsZW1lbnQoKS0+bGF6eUF0
dGFjaCgpOwogICAgICAgICB9CiAgICAgICAgIC8vIDgKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+
IG5ld0VsZW1lbnQgPSBtX3RyZWUuY3JlYXRlSFRNTEVsZW1lbnRGcm9tRWxlbWVudFJlY29yZChm
b3JtYXR0aW5nRWxlbWVudFJlY29yZCk7CisgICAgICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVtPiBu
ZXdJdGVtID0gbV90cmVlLmNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbihmb3JtYXR0aW5nRWxl
bWVudFJlY29yZC0+c3RhY2tJdGVtKCkuZ2V0KCkpOwogICAgICAgICAvLyA5Ci0gICAgICAgIG5l
d0VsZW1lbnQtPnRha2VBbGxDaGlsZHJlbkZyb20oZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpKTsK
KyAgICAgICAgbmV3SXRlbS0+ZWxlbWVudCgpLT50YWtlQWxsQ2hpbGRyZW5Gcm9tKGZ1cnRoZXN0
QmxvY2stPmVsZW1lbnQoKSk7CiAgICAgICAgIC8vIDEwCiAgICAgICAgIEVsZW1lbnQqIGZ1cnRo
ZXN0QmxvY2tFbGVtZW50ID0gZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpOwogICAgICAgICAvLyBG
SVhNRTogQWxsIHRoaXMgY3JlYXRpb24gLyBwYXJzZXJBZGRDaGlsZCAvIGF0dGFjaCBidXNpbmVz
cyBzaG91bGQKICAgICAgICAgLy8gICAgICAgIGJlIGluIEhUTUxDb25zdHJ1Y3Rpb25TaXRlLiAg
TXkgZ3Vlc3MgaXMgdGhhdCBzdGVwcyA4LS0xMgogICAgICAgICAvLyAgICAgICAgc2hvdWxkIGFs
bCBiZSBpbiBzb21lIEhUTUxDb25zdHJ1Y3Rpb25TaXRlIGZ1bmN0aW9uLgotICAgICAgICBmdXJ0
aGVzdEJsb2NrRWxlbWVudC0+cGFyc2VyQWRkQ2hpbGQobmV3RWxlbWVudCk7Ci0gICAgICAgIGlm
IChmdXJ0aGVzdEJsb2NrRWxlbWVudC0+YXR0YWNoZWQoKSAmJiAhbmV3RWxlbWVudC0+YXR0YWNo
ZWQoKSkgewotICAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgbmV3RWxlbWVudCBtaWdodCBhbHJl
YWR5IGJlIGF0dGFjaGVkIGlmLCBmb3IgZXhhbXBsZSwgb25lIG9mIHRoZSByZXBhcmVudGVkCisg
ICAgICAgIGZ1cnRoZXN0QmxvY2tFbGVtZW50LT5wYXJzZXJBZGRDaGlsZChuZXdJdGVtLT5lbGVt
ZW50KCkpOworICAgICAgICBpZiAoZnVydGhlc3RCbG9ja0VsZW1lbnQtPmF0dGFjaGVkKCkgJiYg
IW5ld0l0ZW0tPmVsZW1lbnQoKS0+YXR0YWNoZWQoKSkgeworICAgICAgICAgICAgLy8gTm90aWNl
IHRoYXQgbmV3SXRlbS0+ZWxlbWVudCgpIG1pZ2h0IGFscmVhZHkgYmUgYXR0YWNoZWQgaWYsIGZv
ciBleGFtcGxlLCBvbmUgb2YgdGhlIHJlcGFyZW50ZWQKICAgICAgICAgICAgIC8vIGNoaWxkcmVu
IGlzIGEgc3R5bGUgZWxlbWVudCwgd2hpY2ggYXR0YWNoZXMgaXRzZWxmIGF1dG9tYXRpY2FsbHku
Ci0gICAgICAgICAgICBuZXdFbGVtZW50LT5hdHRhY2goKTsKKyAgICAgICAgICAgIG5ld0l0ZW0t
PmVsZW1lbnQoKS0+YXR0YWNoKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gMTEKLSAgICAgICAg
bV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5zd2FwVG8oZm9ybWF0dGluZ0VsZW1l
bnQsIG5ld0VsZW1lbnQuZ2V0KCksIGJvb2ttYXJrKTsKKyAgICAgICAgbV90cmVlLmFjdGl2ZUZv
cm1hdHRpbmdFbGVtZW50cygpLT5zd2FwVG8oZm9ybWF0dGluZ0VsZW1lbnQsIG5ld0l0ZW0sIGJv
b2ttYXJrKTsKICAgICAgICAgLy8gMTIKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5y
ZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOwotICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkt
Pmluc2VydEFib3ZlKG5ld0VsZW1lbnQsIGZ1cnRoZXN0QmxvY2spOworICAgICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPmluc2VydEFib3ZlKG5ld0l0ZW0sIGZ1cnRoZXN0QmxvY2spOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IGI1MTFiYzU3NTJlNDBhMDQyMzA2MjljNmEyZmRmNzRiNDIzODFhYzAu
LjRlYzZmZDI3MDYyN2IxNDE1NTZjOWI1MmRhZjcwYzk4Y2JlN2EwZmYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAxMi0wNy0yMyAgS3dhbmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0
PgorCisgICAgICAgIFVzZSB0aGUgb3JpZ2luYWwgdG9rZW4gdG8gY3JlYXRlIGFuIGVsZW1lbnQg
aW4gInJlY29uc3RydWN0IHRoZSBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cyIgYW5kICJjYWxs
IHRoZSBhZG9wdGlvbiBhZ2VuY3kiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MTcwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZWQgdGVzdCBleHBlY3RhdGlvbiBmb3IgaHRtbDVsaWIvcnVubmVy
LWV4cGVjdGVkLnR4dAorICAgICAgICBiZWNhdXNlIG5vdyByZXNvdXJjZXMvc2NyaXB0ZWQvYWRv
cHRpb24wMS5kYXQgcGFzc2VzLgorCisgICAgICAgICogaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVk
LnR4dDoKKwogMjAxMi0wNy0yMyAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpA
aW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdIFNraXAgaHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5h
YmxlZC9pbmplY3RlZC1zY3JpcHQtZGlzY2FyZC5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVu
bmVyLWV4cGVjdGVkLnR4dAppbmRleCAxOWM0YjFhNjVhMDQyOTc5NDhhYmIwMmU4NDkzMzJjNGI2
YjJhYjE1Li5jZDVhMjBmOWFmMmNlODA5MDAxYTM4ZjgwNmMzOTJkY2IwMDhmYjkzIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQKQEAgLTQzLDMzICs0Myw2IEBAIHJl
c291cmNlcy90YWJsZXMwMS5kYXQ6IFBBU1MKIAogcmVzb3VyY2VzL3RyaWNreTAxLmRhdDogUEFT
UwogCi1yZXNvdXJjZXMvc2NyaXB0ZWQvYWRvcHRpb24wMS5kYXQ6Ci0xCi0KLVRlc3QgMSBvZiAx
IGluIHJlc291cmNlcy9zY3JpcHRlZC9hZG9wdGlvbjAxLmRhdCBmYWlsZWQuIElucHV0OgotPHA+
PGIgaWQ9IkEiPjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkEiKS5pZCA9ICJCIjwv
c2NyaXB0PjwvcD5URVhUPC9iPgotR290OgotfCA8aHRtbD4KLXwgICA8aGVhZD4KLXwgICA8Ym9k
eT4KLXwgICAgIDxwPgotfCAgICAgICA8Yj4KLXwgICAgICAgICBpZD0iQiIKLXwgICAgICAgICA8
c2NyaXB0PgotfCAgICAgICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJBIikuaWQgPSAi
QiIiCi18ICAgICA8Yj4KLXwgICAgICAgaWQ9IkIiCi18ICAgICAgICJURVhUIgotRXhwZWN0ZWQ6
Ci18IDxodG1sPgotfCAgIDxoZWFkPgotfCAgIDxib2R5PgotfCAgICAgPHA+Ci18ICAgICAgIDxi
PgotfCAgICAgICAgIGlkPSJCIgotfCAgICAgICAgIDxzY3JpcHQ+Ci18ICAgICAgICAgICAiZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkEiKS5pZCA9ICJCIiIKLXwgICAgIDxiPgotfCAgICAgICBp
ZD0iQSIKLXwgICAgICAgIlRFWFQiCityZXNvdXJjZXMvc2NyaXB0ZWQvYWRvcHRpb24wMS5kYXQ6
IFBBU1MKKwogcmVzb3VyY2VzL3NjcmlwdGVkL3dlYmtpdDAxLmRhdDogUEFTUwo=
</data>
<flag name="review"
          id="162831"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>