<?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>110352</bug_id>
          
          <creation_ts>2013-02-20 09:01:31 -0800</creation_ts>
          <short_desc>Use DOM ordering for list counts</short_desc>
          <delta_ts>2013-04-22 01:32:44 -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>WebCore Misc.</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>AdobeTracked</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>113312</dependson>
    
    <dependson>113433</dependson>
    
    <dependson>113517</dependson>
          <blocked>113193</blocked>
    
    <blocked>103975</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrei Bucur">abucur</reporter>
          <assigned_to name="Andrei Bucur">abucur</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>esprehn</cc>
    
    <cc>koivisto</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>837505</commentid>
    <comment_count>0</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-02-20 09:01:31 -0800</bug_when>
    <thetext>The counters implementation is currently based on the render tree order. This generates problems in the case of regions and shadow DOM because the list items are not always rendered as children of their DOM parents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841924</commentid>
    <comment_count>1</comment_count>
      <attachid>190269</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-02-26 05:43:46 -0800</bug_when>
    <thetext>Created attachment 190269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841939</commentid>
    <comment_count>2</comment_count>
      <attachid>190269</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-26 06:10:34 -0800</bug_when>
    <thetext>Comment on attachment 190269
Patch

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

r=me

&gt; Source/WebCore/ChangeLog:3
&gt; +        Move the list counting logic from the render tree to the DOM tree

The name is bit vague. Move how? &quot;Use DOM ordering for list counts&quot; or something?

&gt; Source/WebCore/dom/NodeTraversal.h:60
&gt; +// Pre-order traversal including the pseudo-elements.
&gt; +Element* previousWithPseudo(const Element*, const Element* = 0);
&gt; +Element* nextWithPseudo(const Element*, const Element* = 0);
&gt; +Element* previousWithPseudoSkippingChildren(const Element*, const Element* = 0);
&gt; +Element* nextWithPseudoSkippingChildren(const Element*, const Element* = 0);
&gt; +
&gt; +// Traversal helpers aware of pseudo-elements.
&gt; +Element* nextElementSiblingWithPseudo(const Element*);
&gt; +Element* previousElementSiblingWithPseudo(const Element*);
&gt; +Element* firstElementChildWithPseudo(const Element*);
&gt; +Element* lastElementChildWithPseudo(const Element*);

You can drop word &quot;Element&quot;, it is already in the namespace name. Also WithPseudo sounds like you are excluding everything that is not pseudo. IncludingPseudo perhaps?

It would be nice to not pile everything to NodeTraversal.cpp/.h. However maybe that can be figure out separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842124</commentid>
    <comment_count>3</comment_count>
      <attachid>190269</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-02-26 10:04:11 -0800</bug_when>
    <thetext>Comment on attachment 190269
Patch

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

r-

This patch is not correct since it breaks Shadow DOM since it doesn&apos;t use NodeRenderingTraversal. You shouldn&apos;t need these tons of traversal methods added to ElementTraversal either. NodeRenderingTraversal already contains logic to handle pseudo elements, you want to add NodeRenderingTraversal::next and NodeRenderingTraversal::previous which use the existing nextSibling() and previousSibling() which are already pseudo element aware.

&gt; Source/WebCore/dom/NodeTraversal.cpp:35
&gt; +Element* nextElementSiblingWithPseudo(const Element* current)

These methods are not needed, we already have NodeRenderingTraversal::nextSibling and previousSibling which do the right thing.

&gt; Source/WebCore/html/HTMLLIElement.cpp:101
&gt; +            current = current-&gt;parentElement();

This doesn&apos;t seem right at all. You break Shadow DOM here, and EventPathWalker should have worked just fine (since it does this already).

&gt; Source/WebCore/html/HTMLOListElement.cpp:109
&gt; +    // This will iterate through the list items in DOM order.

These comments don&apos;t seem needed. If you want to explain the nextListItem method though, put this comment where that method is declared.

&gt; Source/WebCore/rendering/RenderCounter.cpp:64
&gt; +        previous = ElementTraversal::previousWithPseudo(previous);

Can we make the changes to RenderCounter in a separate patch?

&gt; Source/WebCore/rendering/RenderCounter.cpp:88
&gt; +    return self-&gt;parentElement();

Just remove the parentElement method entirely. As you noticed it&apos;s not needed anymore.

&gt; Source/WebCore/rendering/RenderListItem.cpp:105
&gt; +    for (Element* parent = listItemNode-&gt;parentElement(); parent; parent = parent-&gt;parentElement()) {

Again this needs to be NodeRenderingTraversal, not parentElement(), to be aware of what&apos;s going on inside Shadow DOM (which the render tree is implicitly aware of since it&apos;s composed already).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842955</commentid>
    <comment_count>4</comment_count>
      <attachid>190269</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-27 05:09:42 -0800</bug_when>
    <thetext>Comment on attachment 190269
Patch

Attachment 190269 did not pass chromium-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/16672314

New failing tests:
editing/shadow/delete-list-in-shadow.html
fast/dom/shadow/shadow-and-list-elements.html
editing/shadow/pressing-enter-on-list.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846468</commentid>
    <comment_count>5</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-03-04 07:26:44 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 190269 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190269&amp;action=review
&gt; 
&gt; r-
&gt; 
&gt; This patch is not correct since it breaks Shadow DOM since it doesn&apos;t use NodeRenderingTraversal. You shouldn&apos;t need these tons of traversal methods added to ElementTraversal either. NodeRenderingTraversal already contains logic to handle pseudo elements, you want to add NodeRenderingTraversal::next and NodeRenderingTraversal::previous which use the existing nextSibling() and previousSibling() which are already pseudo element aware.
&gt; 
&gt; &gt; Source/WebCore/dom/NodeTraversal.cpp:35
&gt; &gt; +Element* nextElementSiblingWithPseudo(const Element* current)
&gt; 
&gt; These methods are not needed, we already have NodeRenderingTraversal::nextSibling and previousSibling which do the right thing.
&gt; 
&gt; &gt; Source/WebCore/html/HTMLLIElement.cpp:101
&gt; &gt; +            current = current-&gt;parentElement();
&gt; 
&gt; This doesn&apos;t seem right at all. You break Shadow DOM here, and EventPathWalker should have worked just fine (since it does this already).
&gt; 
&gt; &gt; Source/WebCore/html/HTMLOListElement.cpp:109
&gt; &gt; +    // This will iterate through the list items in DOM order.
&gt; 
&gt; These comments don&apos;t seem needed. If you want to explain the nextListItem method though, put this comment where that method is declared.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderCounter.cpp:64
&gt; &gt; +        previous = ElementTraversal::previousWithPseudo(previous);
&gt; 
&gt; Can we make the changes to RenderCounter in a separate patch?
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderCounter.cpp:88
&gt; &gt; +    return self-&gt;parentElement();
&gt; 
&gt; Just remove the parentElement method entirely. As you noticed it&apos;s not needed anymore.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderListItem.cpp:105
&gt; &gt; +    for (Element* parent = listItemNode-&gt;parentElement(); parent; parent = parent-&gt;parentElement()) {
&gt; 
&gt; Again this needs to be NodeRenderingTraversal, not parentElement(), to be aware of what&apos;s going on inside Shadow DOM (which the render tree is implicitly aware of since it&apos;s composed already).

I&apos;m sorry in advance if I talk rubbish, I&apos;m not familiar with shadow DOM code or the terminology from the spec.

NodeRenderingTraversal doesn&apos;t seem to provide a way to NOT cross both lower-boundary and upper-boundary encapsulation into the shadow tree. This is what I understand it&apos;s the expected behavior after reading this thread:
http://lists.w3.org/Archives/Public/public-webapps/2013JanMar/0484.html

For document nodes, we want to do the numbering based on the non-shadow tree ancestor chain if I understand correctly. EventPathWalker seems to do node distribution and visiting inside the reprojection. To me this doesn&apos;t sound in agreement with the mailing list thread.

As an example:
If we have a projected ancestor chain like this:
ol1-&gt;ShadowRoot-&gt;ol2-&gt;InesrtionPoint-&gt;li
We want the li element to be numbered by ol1, not ol2. If We use EventPathWalker, we take into account ol2 as well, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846511</commentid>
    <comment_count>6</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-04 08:21:50 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 190269 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190269&amp;action=review
&gt; &gt; 
&gt; &gt; r-
&gt; &gt; 
&gt; ...
&gt; NodeRenderingTraversal doesn&apos;t seem to provide a way to NOT cross both lower-boundary and upper-boundary encapsulation into the shadow tree. This is what I understand it&apos;s the expected behavior after reading this thread:
&gt; http://lists.w3.org/Archives/Public/public-webapps/2013JanMar/0484.html
&gt; 
&gt; For document nodes, we want to do the numbering based on the non-shadow tree ancestor chain if I understand correctly. EventPathWalker seems to do node distribution and visiting inside the reprojection. To me this doesn&apos;t sound in agreement with the mailing list thread.
&gt; 
&gt; As an example:
&gt; If we have a projected ancestor chain like this:
&gt; ol1-&gt;ShadowRoot-&gt;ol2-&gt;InesrtionPoint-&gt;li
&gt; We want the li element to be numbered by ol1, not ol2. If We use EventPathWalker, we take into account ol2 as well, right?

Ah good point! Seems I forgot about that discussion to use the original DOM; let me review this again today. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847671</commentid>
    <comment_count>7</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-03-05 07:33:17 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (From update of attachment 190269 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190269&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; r-
&gt; &gt; &gt; 
&gt; &gt; ...
&gt; &gt; NodeRenderingTraversal doesn&apos;t seem to provide a way to NOT cross both lower-boundary and upper-boundary encapsulation into the shadow tree. This is what I understand it&apos;s the expected behavior after reading this thread:
&gt; &gt; http://lists.w3.org/Archives/Public/public-webapps/2013JanMar/0484.html
&gt; &gt; 
&gt; &gt; For document nodes, we want to do the numbering based on the non-shadow tree ancestor chain if I understand correctly. EventPathWalker seems to do node distribution and visiting inside the reprojection. To me this doesn&apos;t sound in agreement with the mailing list thread.
&gt; &gt; 
&gt; &gt; As an example:
&gt; &gt; If we have a projected ancestor chain like this:
&gt; &gt; ol1-&gt;ShadowRoot-&gt;ol2-&gt;InesrtionPoint-&gt;li
&gt; &gt; We want the li element to be numbered by ol1, not ol2. If We use EventPathWalker, we take into account ol2 as well, right?
&gt; 
&gt; Ah good point! Seems I forgot about that discussion to use the original DOM; let me review this again today. :)

The crashers happen because the ShadowRoot nodes are not Elements. If the first child of a ShadowRoot is an &lt;li&gt; it will try to select it as a counting root. Unfortunately the patch assumes it&apos;s possible to walk only on Elements.
I need to rewrite the crawling logic to be Node based.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849969</commentid>
    <comment_count>8</comment_count>
      <attachid>191972</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-03-07 04:45:03 -0800</bug_when>
    <thetext>Created attachment 191972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855514</commentid>
    <comment_count>9</comment_count>
      <attachid>191972</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-14 15:00:51 -0700</bug_when>
    <thetext>Comment on attachment 191972
Patch

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

This should use Element* pretty much everywhere. There&apos;s no reason to be skipping the Text nodes manually everywhere. :)

&gt; Source/WebCore/dom/NodeTraversal.cpp:35
&gt; +Node* nextSiblingIncludingPseudo(const Node* current)

This is more complicated than it needs to be. Just add Node::pseudoAwareNextSibling() and Node::pseudoAwarePreviousSibling(). In fact these methods used to exist and then I removed them when I didnt&apos; need them. Just add them back. https://trac.webkit.org/changeset/136744/trunk/Source/WebCore/dom/Node.cpp

&gt; Source/WebCore/dom/NodeTraversal.cpp:52
&gt; +Node* previousSiblingIncludingPseudo(const Node* current)

All these methods should be in ElementTraversal and should return Element*.

&gt; Source/WebCore/dom/NodeTraversal.cpp:69
&gt; +Node* firstChildIncludingPseudo(const Node* current)

These methods would be much clearer if they were split by type.

if (current-&gt;isElement()) { ... return ...; } ... return;

&gt; Source/WebCore/dom/NodeTraversal.h:82
&gt; +// Pre-order traversal including the pseudo-elements.

ElementTraversal and return Element*. I don&apos;t know why you need to see Text nodes in any of these traversals.

&gt; Source/WebCore/rendering/RenderCounter.cpp:75
&gt; +        previous = NodeTraversal::previousSiblingIncludingPseudo(previous);

ElementTraversal removes the need for all this.

&gt; Source/WebCore/rendering/RenderListItem.cpp:105
&gt; +    for (Node* parent = listItemNode-&gt;parentNode(); parent; parent = parent-&gt;parentNode()) {

parentElement(), this should all be element related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860429</commentid>
    <comment_count>10</comment_count>
      <attachid>191972</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-03-21 09:54:53 -0700</bug_when>
    <thetext>Comment on attachment 191972
Patch

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

&gt;&gt; Source/WebCore/dom/NodeTraversal.cpp:35
&gt;&gt; +Node* nextSiblingIncludingPseudo(const Node* current)
&gt; 
&gt; This is more complicated than it needs to be. Just add Node::pseudoAwareNextSibling() and Node::pseudoAwarePreviousSibling(). In fact these methods used to exist and then I removed them when I didnt&apos; need them. Just add them back. https://trac.webkit.org/changeset/136744/trunk/Source/WebCore/dom/Node.cpp

Oh, nice! I didn&apos;t want to touch Node, but if they were there before... :)

&gt;&gt; Source/WebCore/dom/NodeTraversal.cpp:52
&gt;&gt; +Node* previousSiblingIncludingPseudo(const Node* current)
&gt; 
&gt; All these methods should be in ElementTraversal and should return Element*.

Yea, this was the case of my initial patch but it was crashing because the ShadowRoot is not an element. I&apos;ll go back to Element and see what I can do about the ShadowRoot.

&gt;&gt; Source/WebCore/dom/NodeTraversal.cpp:69
&gt;&gt; +Node* firstChildIncludingPseudo(const Node* current)
&gt; 
&gt; These methods would be much clearer if they were split by type.
&gt; 
&gt; if (current-&gt;isElement()) { ... return ...; } ... return;

Sounds good.

&gt;&gt; Source/WebCore/dom/NodeTraversal.h:82
&gt;&gt; +// Pre-order traversal including the pseudo-elements.
&gt; 
&gt; ElementTraversal and return Element*. I don&apos;t know why you need to see Text nodes in any of these traversals.

Yea, I didn&apos;t like this either but it was the easiest way to not monkey patch the code for ShadowRoot.

&gt;&gt; Source/WebCore/rendering/RenderCounter.cpp:75
&gt;&gt; +        previous = NodeTraversal::previousSiblingIncludingPseudo(previous);
&gt; 
&gt; ElementTraversal removes the need for all this.

Agree.

&gt;&gt; Source/WebCore/rendering/RenderListItem.cpp:105
&gt;&gt; +    for (Node* parent = listItemNode-&gt;parentNode(); parent; parent = parent-&gt;parentNode()) {
&gt; 
&gt; parentElement(), this should all be element related.

Unfortunately the shadow root is not an element. I need to monkey patch the case if I use parentElement().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860450</commentid>
    <comment_count>11</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-21 10:22:12 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 191972 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191972&amp;action=review
&gt; 
&gt;...
&gt; 
&gt; Yea, this was the case of my initial patch but it was crashing because the ShadowRoot is not an element. I&apos;ll go back to Element and see what I can do about the ShadowRoot.

parentElement should return 0 if you would have crossed through a ShadowRoot which is what you want if we&apos;re saying counters are encapsulated inside a tree scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861683</commentid>
    <comment_count>12</comment_count>
      <attachid>194600</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-03-22 11:04:34 -0700</bug_when>
    <thetext>Created attachment 194600
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861806</commentid>
    <comment_count>13</comment_count>
      <attachid>194600</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-22 13:37:48 -0700</bug_when>
    <thetext>Comment on attachment 194600
Patch

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

You don&apos;t actually handle ShadowRoot hosts properly, and ShadowRoot will never pass the isList test. Please fix that comment and file a follow up bug and mention it in the ChangeLog before landing.

&gt; Source/WebCore/ChangeLog:25
&gt; +        In later patches I&apos;ll add tests that should cover the regions and shadow DOM use cases.

File a bug about needing these tests and add a link here.

&gt; Source/WebCore/rendering/RenderCounter.cpp:83
&gt; +    Element* self = toElement(object-&gt;node());

nit: Don&apos;t need the extra local.

&gt; Source/WebCore/rendering/RenderListItem.cpp:106
&gt; +    for (Node* parent = listItemNode-&gt;parentNode(); parent; parent = parent-&gt;parentNode()) {

This loop doesn&apos;t do what you think it does for ShadowRoot. ShadowRoot is a Node but it&apos;s parentNode() is also always null and it&apos;ll never match isList since that&apos;s about tags. You&apos;d need to check if parent-&gt;isShadowRoot() and isList(toShadowRoot(parent)-&gt;host()). I&apos;d add a FIXME here. The comment makes it sound like this handles ShadowRoot when it doesn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862669</commentid>
    <comment_count>14</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-03-25 05:35:15 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 194600 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=194600&amp;action=review
&gt; 
&gt; You don&apos;t actually handle ShadowRoot hosts properly, and ShadowRoot will never pass the isList test. Please fix that comment and file a follow up bug and mention it in the ChangeLog before landing.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:25
&gt; &gt; +        In later patches I&apos;ll add tests that should cover the regions and shadow DOM use cases.
&gt; 
&gt; File a bug about needing these tests and add a link here.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderCounter.cpp:83
&gt; &gt; +    Element* self = toElement(object-&gt;node());
&gt; 
&gt; nit: Don&apos;t need the extra local.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderListItem.cpp:106
&gt; &gt; +    for (Node* parent = listItemNode-&gt;parentNode(); parent; parent = parent-&gt;parentNode()) {
&gt; 
&gt; This loop doesn&apos;t do what you think it does for ShadowRoot. ShadowRoot is a Node but it&apos;s parentNode() is also always null and it&apos;ll never match isList since that&apos;s about tags. You&apos;d need to check if parent-&gt;isShadowRoot() and isList(toShadowRoot(parent)-&gt;host()). I&apos;d add a FIXME here. The comment makes it sound like this handles ShadowRoot when it doesn&apos;t.

I&apos;m a bit confused. Didn&apos;t we decide list counting doesn&apos;t cross shadow root boundaries? Why do I need to inspect the host element? The case I&apos;m talking about in the comment is this one:
&lt;HostElement&gt;
&lt;ShadowRoot&gt;
&lt;li/&gt;
&lt;/ShadowRoot&gt;
&lt;/HostElement&gt;

The &lt;li&gt; element will use the ShadowRoot as a counter scope (the &lt;li&gt; is NOT projected, it&apos;s just a child of the shadow root). It will not go up to the HostElement. The comment tries to explain why I can&apos;t use parentElement instead of parentNode. parentElement will return 0 for the &lt;li&gt;. parentNode will return the shadow root. isList will indeed return false all the time for the shadow root but it may very well be the first ancestor node (as in the example above) of a &lt;li&gt; so it will become the counter scope for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>863587</commentid>
    <comment_count>15</comment_count>
      <attachid>195064</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-03-26 05:27:49 -0700</bug_when>
    <thetext>Created attachment 195064
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>863629</commentid>
    <comment_count>16</comment_count>
      <attachid>195064</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-26 06:55:50 -0700</bug_when>
    <thetext>Comment on attachment 195064
Patch for landing

Clearing flags on attachment: 195064

Committed r146879: &lt;http://trac.webkit.org/changeset/146879&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>863630</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-26 06:55:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>863680</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-26 08:11:55 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 113312</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>863765</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-26 10:09:05 -0700</bug_when>
    <thetext>This patch caused multiple crashes on Mac as well:
e.g. http://build.webkit.org/results/Apple%20Lion%20Debug%20WK2%20(Tests)/r146879%20(8380)/results.html

CRASHING TEST: fast/css/pseudo-required-optional-006.html

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000bbadbeef

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.WebCore             	0x000000010f17f96e WebCore::RenderListItem::updateListMarkerNumbers() + 94 (RenderListItem.cpp:474)
1   com.apple.WebCore             	0x000000010f17faa8 WebCore::RenderListItem::willBeRemovedFromTree() + 40 (RenderListItem.cpp:93)
2   com.apple.WebCore             	0x000000010f1bc4f0 WebCore::RenderObjectChildList::removeChildNode(WebCore::RenderObject*, WebCore::RenderObject*, bool) + 416 (RenderObjectChildList.cpp:93)
3   com.apple.WebCore             	0x000000010f1a9394 WebCore::RenderObject::removeChild(WebCore::RenderObject*) + 164 (RenderObject.cpp:355)
4   com.apple.WebCore             	0x000000010eff09e0 WebCore::RenderBlock::removeChild(WebCore::RenderObject*) + 1040 (RenderBlock.cpp:1234)
5   com.apple.WebCore             	0x000000010f0f8c26 WebCore::RenderObject::remove() + 70 (RenderObject.h:965)
6   com.apple.WebCore             	0x000000010f1b80b7 WebCore::RenderObject::willBeDestroyed() + 327 (RenderObject.cpp:2421)
7   com.apple.WebCore             	0x000000010f176e92 WebCore::RenderLayerModelObject::willBeDestroyed() + 162 (RenderLayerModelObject.cpp:91)
8   com.apple.WebCore             	0x000000010f09a6f9 WebCore::RenderBoxModelObject::willBeDestroyed() + 153 (RenderBoxModelObject.cpp:340)
9   com.apple.WebCore             	0x000000010f073c2d WebCore::RenderBox::willBeDestroyed() + 61 (RenderBox.cpp:179)
10  com.apple.WebCore             	0x000000010efec4d2 WebCore::RenderBlock::willBeDestroyed() + 578 (RenderBlock.cpp:304)
11  com.apple.WebCore             	0x000000010f17f8da WebCore::RenderListItem::willBeDestroyed() + 90 (RenderListItem.cpp:79)
12  com.apple.WebCore             	0x000000010f1b884d WebCore::RenderObject::destroy() + 29 (RenderObject.cpp:2570)
13  com.apple.WebCore             	0x000000010f1b8827 WebCore::RenderObject::destroyAndCleanupAnonymousWrappers() + 247 (RenderObject.cpp:2565)
14  com.apple.WebCore             	0x000000010ef02875 WebCore::Node::detach() + 149 (Node.cpp:1118)
15  com.apple.WebCore             	0x000000010de5252b WebCore::ContainerNode::detach() + 43 (ContainerNode.cpp:834)
16  com.apple.WebCore             	0x000000010e2a9730 WebCore::Element::detach() + 288 (Element.cpp:1353)
17  com.apple.WebCore             	0x000000010de51c95 WebCore::ContainerNode::removeChildren() + 741 (ContainerNode.cpp:640)
18  com.apple.WebCore             	0x000000010ee58ee6 WebCore::replaceChildrenWithFragment(WebCore::ContainerNode*, WTF::PassRefPtr&lt;WebCore::DocumentFragment&gt;, int&amp;) + 422 (markup.cpp:1110)
19  com.apple.WebCore             	0x000000010e56e0bc WebCore::HTMLElement::setInnerHTML(WTF::String const&amp;, int&amp;) + 156 (HTMLElement.cpp:356)
20  com.apple.WebCore             	0x000000010ea1f3aa WebCore::setJSHTMLElementInnerHTML(JSC::ExecState*, JSC::JSObject*, JSC::JSValue) + 106 (JSHTMLElement.cpp:544)
21  com.apple.WebCore             	0x000000010ea21349 bool JSC::lookupPut&lt;WebCore::JSHTMLElement&gt;(JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::HashTable const*, WebCore::JSHTMLElement*, bool) + 249 (Lookup.h:373)
22  com.apple.WebCore             	0x000000010ea20de8 void JSC::lookupPut&lt;WebCore::JSHTMLElement, WebCore::JSElement&gt;(JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::HashTable const*, WebCore::JSHTMLElement*, JSC::PutPropertySlot&amp;) + 120 (Lookup.h:389)
23  com.apple.WebCore             	0x000000010ea1e033 WebCore::JSHTMLElement::put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&amp;) + 387 (JSHTMLElement.cpp:446)
24  com.apple.WebCore             	0x000000010ea8b42c void JSC::lookupPut&lt;WebCore::JSHTMLOListElement, WebCore::JSHTMLElement&gt;(JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::HashTable const*, WebCore::JSHTMLOListElement*, JSC::PutPropertySlot&amp;) + 172 (Lookup.h:391)
25  com.apple.WebCore             	0x000000010ea8a163 WebCore::JSHTMLOListElement::put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&amp;) + 387 (JSHTMLOListElement.cpp:177)
26  com.apple.JavaScriptCore      	0x000000010ccf0159 JSC::JSValue::put(JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&amp;) + 185 (JSCJSValueInlines.h:679)
27  com.apple.JavaScriptCore      	0x000000010cee5930 llint_slow_path_put_by_id + 416 (LLIntSlowPaths.cpp:983)
28  com.apple.JavaScriptCore      	0x000000010ceeee58 llint_op_put_by_id + 155
29  com.apple.JavaScriptCore      	0x000000010cdcc044 JSC::JITCode::execute(JSC::JSStack*, JSC::ExecState*, JSC::JSGlobalData*) + 84 (JITCode.h:135)
30  com.apple.JavaScriptCore      	0x000000010cdc92bf JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 1519 (Interpreter.cpp:1059)
31  com.apple.JavaScriptCore      	0x000000010cbd95f2 JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 306 (CallData.cpp:40)
32  com.apple.WebCore             	0x000000010e864b72 WebCore::JSMainThreadExecState::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 146 (JSMainThreadExecState.h:56)
33  com.apple.WebCore             	0x000000010e9b60f6 WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*) + 1238 (JSEventListener.cpp:129)
34  com.apple.WebCore             	0x000000010e303e22 WebCore::EventTarget::fireEventListeners(WebCore::Event*, WebCore::EventTargetData*, WTF::Vector&lt;WebCore::RegisteredEventListener, 1ul&gt;&amp;) + 498 (EventTarget.cpp:258)
35  com.apple.WebCore             	0x000000010e303a3c WebCore::EventTarget::fireEventListeners(WebCore::Event*) + 380 (EventTarget.cpp:203)
36  com.apple.WebCore             	0x000000010e243b20 WebCore::DOMWindow::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;, WTF::PassRefPtr&lt;WebCore::EventTarget&gt;) + 272 (DOMWindow.cpp:1714)
37  com.apple.WebCore             	0x000000010e24abf8 WebCore::DOMWindow::dispatchLoadEvent() + 296 (DOMWindow.cpp:1688)
38  com.apple.WebCore             	0x000000010e0922cf WebCore::Document::dispatchWindowLoadEvent() + 143 (Document.cpp:3731)
39  com.apple.WebCore             	0x000000010e08fce2 WebCore::Document::implicitClose() + 466 (Document.cpp:2485)
40  com.apple.WebCore             	0x000000010e3d46db WebCore::FrameLoader::checkCallImplicitClose() + 155 (FrameLoader.cpp:838)
41  com.apple.WebCore             	0x000000010e3d4386 WebCore::FrameLoader::checkCompleted() + 358 (FrameLoader.cpp:782)
42  com.apple.WebCore             	0x000000010e3d2fe3 WebCore::FrameLoader::finishedParsing() + 179 (FrameLoader.cpp:715)
43  com.apple.WebCore             	0x000000010e09ac59 WebCore::Document::finishedParsing() + 521 (Document.cpp:4513)
44  com.apple.WebCore             	0x000000010e53ed3c WebCore::HTMLConstructionSite::finishedParsing() + 28 (HTMLConstructionSite.cpp:342)
45  com.apple.WebCore             	0x000000010e63520b WebCore::HTMLTreeBuilder::finished() + 139 (HTMLTreeBuilder.cpp:2923)
46  com.apple.WebCore             	0x000000010e55ecfc WebCore::HTMLDocumentParser::end() + 220 (HTMLDocumentParser.cpp:756)
47  com.apple.WebCore             	0x000000010e55d6e0 WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd() + 288 (HTMLDocumentParser.cpp:767)
48  com.apple.WebCore             	0x000000010e55d4c6 WebCore::HTMLDocumentParser::prepareToStopParsing() + 294 (HTMLDocumentParser.cpp:211)
49  com.apple.WebCore             	0x000000010e55ed53 WebCore::HTMLDocumentParser::attemptToEnd() + 67 (HTMLDocumentParser.cpp:779)
50  com.apple.WebCore             	0x000000010e55eda8 WebCore::HTMLDocumentParser::finish() + 72 (HTMLDocumentParser.cpp:828)
51  com.apple.WebCore             	0x000000010e12d4b8 WebCore::DocumentWriter::end() + 392 (DocumentWriter.cpp:249)
52  com.apple.WebCore             	0x000000010e0f0cae WebCore::DocumentLoader::finishedLoading(double) + 398 (DocumentLoader.cpp:403)
53  com.apple.WebCore             	0x000000010e0f0a8c WebCore::DocumentLoader::notifyFinished(WebCore::CachedResource*) + 316 (DocumentLoader.cpp:342)
54  com.apple.WebCore             	0x000000010dd9dd9d WebCore::CachedResource::checkNotify() + 109 (CachedResource.cpp:379)
55  com.apple.WebCore             	0x000000010dd9de05 WebCore::CachedResource::data(WTF::PassRefPtr&lt;WebCore::ResourceBuffer&gt;, bool) + 69 (CachedResource.cpp:389)
56  com.apple.WebCore             	0x000000010dd979f1 WebCore::CachedRawResource::data(WTF::PassRefPtr&lt;WebCore::ResourceBuffer&gt;, bool) + 673 (CachedRawResource.cpp:72)
57  com.apple.WebCore             	0x000000010f523cff WebCore::SubresourceLoader::didFinishLoading(double) + 527 (SubresourceLoader.cpp:290)
58  com.apple.WebCore             	0x000000010f305f35 WebCore::ResourceLoader::didFinishLoading(WebCore::ResourceHandle*, double) + 53 (ResourceLoader.cpp:501)
59  com.apple.WebCore             	0x000000010f83d36a -[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:] + 186 (WebCoreResourceHandleAsDelegate.mm:232)
60  com.apple.Foundation          	0x00007fff8a04063e ___NSURLConnectionDidFinishLoading_block_invoke_1 + 122
61  com.apple.Foundation          	0x00007fff8a0405be _NSURLConnectionDidFinishLoading + 81
62  com.apple.CFNetwork           	0x00007fff9128c4e6 URLConnectionClient::_clientDidFinishLoading(URLConnectionClient::ClientConnectionEventQueue*) + 296
63  com.apple.CFNetwork           	0x00007fff9133c8fe URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo&lt;XClientEvent, XClientEventParams&gt;*, long) + 862
64  com.apple.CFNetwork           	0x00007fff91267231 URLConnectionClient::processEvents() + 185
65  com.apple.CFNetwork           	0x00007fff912670d6 MultiplexerSource::perform() + 212
66  com.apple.CoreFoundation      	0x00007fff8c4314f1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
67  com.apple.CoreFoundation      	0x00007fff8c430d5d __CFRunLoopDoSources0 + 253
68  com.apple.CoreFoundation      	0x00007fff8c457b49 __CFRunLoopRun + 905
69  com.apple.CoreFoundation      	0x00007fff8c457486 CFRunLoopRunSpecific + 230
70  com.apple.HIToolbox           	0x00007fff8d7ae2bf RunCurrentEventLoopInMode + 277
71  com.apple.HIToolbox           	0x00007fff8d7b556d ReceiveNextEventCommon + 355
72  com.apple.HIToolbox           	0x00007fff8d7b53fa BlockUntilNextEventMatchingListInMode + 62
73  com.apple.AppKit              	0x00007fff8b2d0779 _DPSNextEvent + 659
74  com.apple.AppKit              	0x00007fff8b2d007d -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 135
75  com.apple.AppKit              	0x00007fff8b2cc9b9 -[NSApplication run] + 470
76  com.apple.WebCore             	0x000000010f33ac99 WebCore::RunLoop::run() + 105 (RunLoopMac.mm:44)
77  com.apple.WebKit2             	0x000000010b947af5 int WebKit::ChildProcessMain&lt;WebKit::WebProcess, WebKit::WebContentProcessMainDelegate&gt;(int, char**) + 917 (ChildProcessEntryPoint.h:98)
78  com.apple.WebKit2             	0x000000010b94774b WebContentProcessMain + 27 (WebContentProcessMain.mm:179)
79  com.apple.WebProcess          	0x000000010b6d5c94 _ZN6WebKitL13BootstrapMainEiPPc + 308
80  com.apple.WebProcess          	0x000000010b6d5b52 main + 34
81  com.apple.WebProcess          	0x000000010b6d5b24 start + 52</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>863832</commentid>
    <comment_count>20</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-03-26 10:47:05 -0700</bug_when>
    <thetext>Thanks for the stack trace! I&apos;ve managed already to find the issue and want to clarify something.
In ContainerNode, when removing a child, we first detach it and then remove if from the tree. When removing all the children the process is reversed. We first remove them from the tree and then detach them.
This crash appears because the list item renderer wants to find the counter node when it is removed from the tree so it can notify the other list items they need to be updated. This doesn&apos;t work any more when the list item node is removed through removeChildren because its node is not in the DOM any more :/.
Is there a good reason why we have to remove the DOM nodes first and then the renderers? The order of operations seems wrong to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864264</commentid>
    <comment_count>21</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-27 00:26:28 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; ...
&gt; Is there a good reason why we have to remove the DOM nodes first and then the renderers? The order of operations seems wrong to me.

The reason is in the comment:

            // Detach the nodes only after properly removed from the tree because
            // a. detaching requires a proper DOM tree (for counters and quotes for
            // example) and during the previous loop the next sibling still points to
            // the node being removed while the node being removed does not point back
            // and does not point to the same parent as its next sibling.
            // b. destroying Renderers of standalone nodes is sometimes faster.

there are cases where this could be important, but I think a saner approach than what&apos;s inside ::removeChildren() right now would be to detach() yourself, remove all your children, then reattach() yourself. We&apos;d be destroying and recreating one more renderer, but we&apos;d be doing something much saner in the process. The only thing to watch out for would be that innerHTML doesn&apos;t get slower.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871595</commentid>
    <comment_count>22</comment_count>
      <attachid>197021</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-09 03:50:47 -0700</bug_when>
    <thetext>Created attachment 197021
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871890</commentid>
    <comment_count>23</comment_count>
      <attachid>197021</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-09 08:25:35 -0700</bug_when>
    <thetext>Comment on attachment 197021
Patch for landing

Clearing flags on attachment: 197021

Committed r148026: &lt;http://trac.webkit.org/changeset/148026&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871891</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-09 08:25:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876512</commentid>
    <comment_count>25</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-16 04:41:57 -0700</bug_when>
    <thetext>Reopened  after 113517 rollback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>879002</commentid>
    <comment_count>26</comment_count>
      <attachid>197021</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-04-22 01:03:34 -0700</bug_when>
    <thetext>Comment on attachment 197021
Patch for landing

Re-land after http://trac.webkit.org/changeset/148754 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>879009</commentid>
    <comment_count>27</comment_count>
      <attachid>197021</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-22 01:32:40 -0700</bug_when>
    <thetext>Comment on attachment 197021
Patch for landing

Clearing flags on attachment: 197021

Committed r148863: &lt;http://trac.webkit.org/changeset/148863&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>879010</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-22 01:32:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190269</attachid>
            <date>2013-02-26 05:43:46 -0800</date>
            <delta_ts>2013-03-07 04:44:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110352-20130226154000.patch</filename>
            <type>text/plain</type>
            <size>26315</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODEzNDIxZWMzNGFiYmZl
YmEzYWYzOTVjOTVmZGQ3OTViYWMzYTcxZC4uYjg3YTBkNTkzMjcyNGZjMGMzNzAyYWM0OGI2MTc4
OGRjODY5ODJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEzLTAyLTI2ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIE1vdmUgdGhlIGxpc3QgY291
bnRpbmcgbG9naWMgZnJvbSB0aGUgcmVuZGVyIHRyZWUgdG8gdGhlIERPTSB0cmVlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzNTIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGxp
c3QgaXRlbXMgb3JkZXJpbmcgaXMgbWFkZSBieSB0cmF2ZXJzaW5nIHRoZSByZW5kZXIgdHJlZS4g
VGhpcyBnaXZlcyBiYWQgcmVzdWx0cyBmb3I6CisgICAgICAgIC0gbGlzdCBpdGVtcyBmbG93biBp
bnNpZGUgcmVnaW9ucyBiZWNhdXNlIHRoZXkgYXJlIG5vdCByZW5kZXJlZCBhcyBkZXNjZW5kYW50
cyBvZiB0aGVpciBET00gbGlzdCBhbmNlc3RvcnMuCisgICAgICAgIC0gbGlzdCBpdGVtcyBtYXRj
aGVkIHRvIGluc2VydGlvbiBwb2ludHMgaW5zaWRlIGEgc2hhZG93IHRyZWUuIFRoZSBpbnNlcnRp
b24gcG9pbnQgbWF5IGJlIGEgY2hpbGQgb2YgYQorICAgICAgICBsaXN0IHNvIHRoZSBudW1iZXJp
bmcgZ2V0cyBicm9rZW4uCisKKyAgICAgICAgVG8gaW1wbGVtZW50IGNvcnJlY3QgRE9NIG9yZGVy
aW5nIEkndmUgdGFrZW4gaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgcHNldWRvLWVsZW1lbnRz
IGNhbiBoYXZlIGRpc3BsYXk6IGxpc3QtaXRlbQorICAgICAgICBzbyB0aGV5IHNob3VsZCBiZSBp
bmNsdWRlZCB3aGVuIHRyYXZlcnNpbmcgdGhlIERPTSB0cmVlLiBJJ3ZlIGFkZGVkIGhlbHBlciBt
ZXRob2RzIG9uIHRoZSBFbGVtZW50VHJhdmVyc2FsCisgICAgICAgIG5hbWVzcGFjZSB0aGF0IHNo
b3VsZCBhbGxvdyBlYXNpbHkgdHJhdmVyc2luZyB0aGUgdHJlZSBpbmNsdWRpbmcgdGhlIHBzZXVk
by1lbGVtZW50cyAoZS5nLiBmaXJzdEVsZW1lbnRDaGlsZFdpdGhQc2V1ZG8KKyAgICAgICAgZm9y
IGFuIGVsZW1lbnQgd2l0aCBwc2V1ZG8tYmVmb3JlIHdpbGwgcmV0dXJuIHRoZSBiZWZvcmUgUHNl
dWRvRWxlbWVudCkuIFVzaW5nIHRoZXNlIGhlbHBlciBtZXRob2RzIEkndmUgaW1wbGVtZW50ZWQK
KyAgICAgICAgcHJlLW9yZGVyIHRyYXZlcnNhbCBtZXRob2RzIGF3YXJlIG9mIHRoZSBwc2V1ZG8t
ZWxlbWVudHMuCisgICAgICAgIFRoZSBSZW5kZXJMaXN0SXRlbSBjbGFzcyBub3cgbWFrZXMgdXNl
IG9mIHRoaXMgbmV3IG1ldGhvZCBvZiB0cmF2ZXJzYWwsIHJlcGxhY2luZyB0aGUgb25lIGJhc2Vk
IG9uIHRoZSByZW5kZXIgdHJlZS4KKyAgICAgICAgVG8gc2ltcGxpZnkgdGhlIENTUyBjb3VudGVy
cyBpbXBsZW1lbnRhdGlvbiwgSSd2ZSBjaGFuZ2VkIHRoZSB0cmF2ZXJzYWwgZnVuY3Rpb25zIGlu
c2lkZSBSZW5kZXJDb3VudGVyIHRvIGFsc28gbWFrZSB1c2UKKyAgICAgICAgb2YgdGhpcyBtZXRo
b2QuIFRoZSBDU1MgY291bnRlcnMgYW5kIHRoZSBsaXN0IGl0ZW1zIG5vdyBoYXZlIHRoZSBzYW1l
IHRyYXZlcnNhbCBhbGdvcml0aG0uCisKKyAgICAgICAgSW4gbGF0ZXIgcGF0Y2hlcyBJJ2xsIGFk
ZCB0ZXN0cyB0aGF0IHNob3VsZCBjb3ZlciB0aGUgcmVnaW9ucyBhbmQgc2hhZG93IERPTSB1c2Ug
Y2FzZXMuCisKKyAgICAgICAgVGVzdHM6IG5vIG5ldyB0ZXN0cyBpcyB0aGlzIHBhdGNoOyBhZGRl
ZCB0aGUgY29ycmVjdCBleHBlY3RhdGlvbiBmb3IgZmFzdC9saXN0cy9wb3NpdGlvbmVkLWNvdW50
LWNyYXNoLmh0bWwuCisKKyAgICAgICAgKiBkb20vTm9kZVRyYXZlcnNhbC5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKEVsZW1lbnRUcmF2ZXJzYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudFRyYXZlcnNhbDo6bmV4dEVsZW1lbnRTaWJsaW5nV2l0aFBzZXVkbyk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0VsZW1lbnRTaWJsaW5nV2l0
aFBzZXVkbyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpmaXJzdEVsZW1l
bnRDaGlsZFdpdGhQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFRyYXZlcnNhbDo6
bGFzdEVsZW1lbnRDaGlsZFdpdGhQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFRy
YXZlcnNhbDo6cHJldmlvdXNXaXRoUHNldWRvKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRU
cmF2ZXJzYWw6Om5leHRXaXRoUHNldWRvKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRUcmF2
ZXJzYWw6OnByZXZpb3VzV2l0aFBzZXVkb1NraXBwaW5nQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudFRyYXZlcnNhbDo6bmV4dFdpdGhQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKToK
KyAgICAgICAgKiBkb20vTm9kZVRyYXZlcnNhbC5oOgorICAgICAgICAoRWxlbWVudFRyYXZlcnNh
bCk6CisgICAgICAgICogaHRtbC9IVE1MTElFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxMSUVsZW1lbnQ6OmF0dGFjaCk6IFRoaXMgd2FzIGNoYW5nZWQgYmVjYXVzZSB0aGUgRXZl
bnRQYXRoV2Fsa2VyIGlzIHNoYWRvdyBhd2FyZS4gVGhlIGNvdW50aW5nIHNob3VsZCBub3QgYmUu
CisgICAgICAgICogaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxPTGlzdEVsZW1lbnQ6OnVwZGF0ZUl0ZW1WYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9MaXN0RWxlbWVudDo6cmVjYWxjdWxhdGVJdGVtQ291bnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzSW5QcmVP
cmRlcik6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c1NpYmxpbmdPclBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJlbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRJblBy
ZU9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpuZXh0TGlzdEl0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6cHJldmlvdXNMaXN0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6
Y2FsY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpleHBsaWNpdFZh
bHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTGlz
dE1hcmtlck51bWJlcnMpOgorCiAyMDEzLTAyLTAxICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogcGx1bWIgdHJhY2UgZXZlbnRz
IHRvIFRpbWVsaW5lIGFnZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRy
YXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5jcHAKaW5kZXgg
NDgyYTNiYWMxMmFjZTI3ZGQxYmU4NDFjNGVjMWI3N2Q2ZmM4YjZlOS4uMTAyNGIxMGYzZTQzZDlm
MzEzMjcyNDZjMjkwOGMwNWFmYTA4MGEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L05vZGVUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2Fs
LmNwcApAQCAtMjYsOCArMjYsMTMxIEBACiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogCiAj
aW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgRWxlbWVudFRyYXZlcnNhbCB7CisKK0Vs
ZW1lbnQqIG5leHRFbGVtZW50U2libGluZ1dpdGhQc2V1ZG8oY29uc3QgRWxlbWVudCogY3VycmVu
dCkKK3sKKyAgICBFbGVtZW50KiBuZXh0ID0gY3VycmVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7
CisgICAgaWYgKG5leHQpCisgICAgICAgIHJldHVybiBuZXh0OworICAgIGlmIChjdXJyZW50LT5p
c0FmdGVyUHNldWRvRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBFbGVtZW50KiBw
YXJlbnQgPSBjdXJyZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgaWYgKCFwYXJlbnQpCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmIChjdXJyZW50LT5pc0JlZm9yZVBzZXVkb0VsZW1lbnQoKSkK
KyAgICAgICAgbmV4dCA9IHBhcmVudC0+Zmlyc3RFbGVtZW50Q2hpbGQoKTsKKyAgICBpZiAoIW5l
eHQpCisgICAgICAgIG5leHQgPSBwYXJlbnQtPnBzZXVkb0VsZW1lbnQoQUZURVIpOworICAgIHJl
dHVybiBuZXh0OworfQorCitFbGVtZW50KiBwcmV2aW91c0VsZW1lbnRTaWJsaW5nV2l0aFBzZXVk
byhjb25zdCBFbGVtZW50KiBjdXJyZW50KQoreworICAgIEVsZW1lbnQqIHByZXZpb3VzID0gY3Vy
cmVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOworICAgIGlmIChwcmV2aW91cykKKyAgICAg
ICAgcmV0dXJuIHByZXZpb3VzOworICAgIGlmIChjdXJyZW50LT5pc0JlZm9yZVBzZXVkb0VsZW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRWxlbWVudCogcGFyZW50ID0gY3VycmVudC0+
cGFyZW50RWxlbWVudCgpOworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBpZiAoY3VycmVudC0+aXNBZnRlclBzZXVkb0VsZW1lbnQoKSkKKyAgICAgICAgcHJldmlvdXMg
PSBwYXJlbnQtPmxhc3RFbGVtZW50Q2hpbGQoKTsKKyAgICBpZiAoIXByZXZpb3VzKQorICAgICAg
ICBwcmV2aW91cyA9IHBhcmVudC0+cHNldWRvRWxlbWVudChCRUZPUkUpOworICAgIHJldHVybiBw
cmV2aW91czsKK30KKworRWxlbWVudCogZmlyc3RFbGVtZW50Q2hpbGRXaXRoUHNldWRvKGNvbnN0
IEVsZW1lbnQqIGN1cnJlbnQpCit7CisgICAgaWYgKEVsZW1lbnQqIGJlZm9yZSA9IGN1cnJlbnQt
PnBzZXVkb0VsZW1lbnQoQkVGT1JFKSkKKyAgICAgICAgcmV0dXJuIGJlZm9yZTsKKyAgICBFbGVt
ZW50KiBmaXJzdCA9IGN1cnJlbnQtPmZpcnN0RWxlbWVudENoaWxkKCk7CisgICAgaWYgKCFmaXJz
dCkKKyAgICAgICAgZmlyc3QgPSBjdXJyZW50LT5wc2V1ZG9FbGVtZW50KEFGVEVSKTsKKyAgICBy
ZXR1cm4gZmlyc3Q7Cit9CisKK0VsZW1lbnQqIGxhc3RFbGVtZW50Q2hpbGRXaXRoUHNldWRvKGNv
bnN0IEVsZW1lbnQqIGN1cnJlbnQpCit7CisgICAgaWYgKEVsZW1lbnQqIGFmdGVyID0gY3VycmVu
dC0+cHNldWRvRWxlbWVudChBRlRFUikpCisgICAgICAgIHJldHVybiBhZnRlcjsKKyAgICBFbGVt
ZW50KiBsYXN0ID0gY3VycmVudC0+bGFzdEVsZW1lbnRDaGlsZCgpOworICAgIGlmICghbGFzdCkK
KyAgICAgICAgbGFzdCA9IGN1cnJlbnQtPnBzZXVkb0VsZW1lbnQoQkVGT1JFKTsKKyAgICByZXR1
cm4gbGFzdDsKK30KKworRWxlbWVudCogcHJldmlvdXNXaXRoUHNldWRvKGNvbnN0IEVsZW1lbnQq
IGN1cnJlbnQsIGNvbnN0IEVsZW1lbnQqIHN0YXlXaXRoaW4pCit7CisgICAgRWxlbWVudCogcHJl
dmlvdXM7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKChwcmV2aW91cyA9IHByZXZpb3VzRWxlbWVudFNpYmxpbmdXaXRoUHNldWRvKGN1
cnJlbnQpKSkgeworICAgICAgICB3aGlsZSAobGFzdEVsZW1lbnRDaGlsZFdpdGhQc2V1ZG8ocHJl
dmlvdXMpKQorICAgICAgICAgICAgcHJldmlvdXMgPSBsYXN0RWxlbWVudENoaWxkV2l0aFBzZXVk
byhwcmV2aW91cyk7CisgICAgICAgIHJldHVybiBwcmV2aW91czsKKyAgICB9CisgICAgcmV0dXJu
IGN1cnJlbnQtPnBhcmVudEVsZW1lbnQoKTsKK30KKworRWxlbWVudCogbmV4dFdpdGhQc2V1ZG8o
Y29uc3QgRWxlbWVudCogY3VycmVudCwgY29uc3QgRWxlbWVudCogc3RheVdpdGhpbikKK3sKKyAg
ICBFbGVtZW50KiBuZXh0OworICAgIGlmICgobmV4dCA9IGZpcnN0RWxlbWVudENoaWxkV2l0aFBz
ZXVkbyhjdXJyZW50KSkpCisgICAgICAgIHJldHVybiBuZXh0OworICAgIGlmIChjdXJyZW50ID09
IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlmICgobmV4dCA9IG5leHRFbGVt
ZW50U2libGluZ1dpdGhQc2V1ZG8oY3VycmVudCkpKQorICAgICAgICByZXR1cm4gbmV4dDsKKyAg
ICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnRFbGVtZW50KCk7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBjdXJyZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0g
c3RheVdpdGhpbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoKG5leHQgPSBu
ZXh0RWxlbWVudFNpYmxpbmdXaXRoUHNldWRvKGN1cnJlbnQpKSkKKyAgICAgICAgICAgIHJldHVy
biBuZXh0OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworRWxlbWVudCogcHJldmlvdXNXaXRo
UHNldWRvU2tpcHBpbmdDaGlsZHJlbihjb25zdCBFbGVtZW50KiBjdXJyZW50LCBjb25zdCBFbGVt
ZW50KiBzdGF5V2l0aGluKQoreworICAgIEVsZW1lbnQqIHByZXZpb3VzOworICAgIGlmIChjdXJy
ZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlmICgocHJldmlvdXMg
PSBwcmV2aW91c0VsZW1lbnRTaWJsaW5nV2l0aFBzZXVkbyhjdXJyZW50KSkpCisgICAgICAgIHJl
dHVybiBwcmV2aW91czsKKyAgICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnRFbGVtZW50
KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAg
ICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBpZiAoKHByZXZpb3VzID0gcHJldmlvdXNFbGVtZW50U2libGluZ1dpdGhQc2V1ZG8oY3Vy
cmVudCkpKQorICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOworICAgIH0KKyAgICByZXR1cm4g
MDsKK30KKworRWxlbWVudCogbmV4dFdpdGhQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IEVs
ZW1lbnQqIGN1cnJlbnQsIGNvbnN0IEVsZW1lbnQqIHN0YXlXaXRoaW4pCit7CisgICAgRWxlbWVu
dCogbmV4dDsKKyAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAoKG5leHQgPSBuZXh0RWxlbWVudFNpYmxpbmdXaXRoUHNldWRvKGN1cnJlbnQp
KSkKKyAgICAgICAgcmV0dXJuIG5leHQ7CisgICAgZm9yIChjdXJyZW50ID0gY3VycmVudC0+cGFy
ZW50RWxlbWVudCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50RWxlbWVudCgp
KSB7CisgICAgICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgaWYgKChuZXh0ID0gbmV4dEVsZW1lbnRTaWJsaW5nV2l0aFBzZXVkbyhj
dXJyZW50KSkpCisgICAgICAgICAgICByZXR1cm4gbmV4dDsKKyAgICB9CisgICAgcmV0dXJuIDA7
Cit9CisKK30KKwogbmFtZXNwYWNlIE5vZGVUcmF2ZXJzYWwgewogCiBOb2RlKiBuZXh0QW5jZXN0
b3JTaWJsaW5nKGNvbnN0IE5vZGUqIGN1cnJlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVRyYXZlcnNhbC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwu
aAppbmRleCA3YTNjYTBlNmYzM2UwZTFmZDUyMzdhMzE0MzFmZDVjZTk3MjA5YzFkLi44MjgwZDU2
YmIyOTdhM2ZkYjUxMGQ2MDU3YjQ4YzJlYThiYThjNGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZVRyYXZlcnNhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJh
dmVyc2FsLmgKQEAgLTM0LDE3ICszNCwzMSBAQCBuYW1lc3BhY2UgRWxlbWVudFRyYXZlcnNhbCB7
CiAvLyBGaXJzdCBlbGVtZW50IGNoaWxkIG9mIHRoZSBub2RlLgogRWxlbWVudCogZmlyc3RXaXRo
aW4oY29uc3QgTm9kZSopOwogRWxlbWVudCogZmlyc3RXaXRoaW4oY29uc3QgQ29udGFpbmVyTm9k
ZSopOworCiAvLyBQcmUtb3JkZXIgdHJhdmVyc2FsIHNraXBwaW5nIG5vbi1lbGVtZW50IG5vZGVz
LgogRWxlbWVudCogbmV4dChjb25zdCBOb2RlKik7CiBFbGVtZW50KiBuZXh0KGNvbnN0IE5vZGUq
LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKIEVsZW1lbnQqIG5leHQoY29uc3QgQ29udGFpbmVy
Tm9kZSopOwogRWxlbWVudCogbmV4dChjb25zdCBDb250YWluZXJOb2RlKiwgY29uc3QgTm9kZSog
c3RheVdpdGhpbik7CisKIC8vIExpa2UgbmV4dCwgYnV0IHNraXBzIGNoaWxkcmVuLgogRWxlbWVu
dCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSopOwogRWxlbWVudCogbmV4dFNraXBw
aW5nQ2hpbGRyZW4oY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pOwogRWxlbWVu
dCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgQ29udGFpbmVyTm9kZSopOwogRWxlbWVudCog
bmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4pOwogCisvLyBQcmUtb3JkZXIgdHJhdmVyc2FsIGluY2x1ZGluZyB0aGUgcHNldWRv
LWVsZW1lbnRzLgorRWxlbWVudCogcHJldmlvdXNXaXRoUHNldWRvKGNvbnN0IEVsZW1lbnQqLCBj
b25zdCBFbGVtZW50KiA9IDApOworRWxlbWVudCogbmV4dFdpdGhQc2V1ZG8oY29uc3QgRWxlbWVu
dCosIGNvbnN0IEVsZW1lbnQqID0gMCk7CitFbGVtZW50KiBwcmV2aW91c1dpdGhQc2V1ZG9Ta2lw
cGluZ0NoaWxkcmVuKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBFbGVtZW50KiA9IDApOworRWxlbWVu
dCogbmV4dFdpdGhQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBF
bGVtZW50KiA9IDApOworCisvLyBUcmF2ZXJzYWwgaGVscGVycyBhd2FyZSBvZiBwc2V1ZG8tZWxl
bWVudHMuCitFbGVtZW50KiBuZXh0RWxlbWVudFNpYmxpbmdXaXRoUHNldWRvKGNvbnN0IEVsZW1l
bnQqKTsKK0VsZW1lbnQqIHByZXZpb3VzRWxlbWVudFNpYmxpbmdXaXRoUHNldWRvKGNvbnN0IEVs
ZW1lbnQqKTsKK0VsZW1lbnQqIGZpcnN0RWxlbWVudENoaWxkV2l0aFBzZXVkbyhjb25zdCBFbGVt
ZW50Kik7CitFbGVtZW50KiBsYXN0RWxlbWVudENoaWxkV2l0aFBzZXVkbyhjb25zdCBFbGVtZW50
Kik7CisKIH0KIAogbmFtZXNwYWNlIE5vZGVUcmF2ZXJzYWwgewpAQCAtMTM1LDYgKzE0OSw3IEBA
IGlubGluZSBFbGVtZW50KiB0cmF2ZXJzZU5leHRFbGVtZW50U2tpcHBpbmdDaGlsZHJlblRlbXBs
YXRlKE5vZGVUeXBlKiBjdXJyZW50LCBjCiB9CiBpbmxpbmUgRWxlbWVudCogbmV4dFNraXBwaW5n
Q2hpbGRyZW4oY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdp
dGhpbikgeyByZXR1cm4gdHJhdmVyc2VOZXh0RWxlbWVudFNraXBwaW5nQ2hpbGRyZW5UZW1wbGF0
ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQogaW5saW5lIEVsZW1lbnQqIG5leHRTa2lwcGluZ0No
aWxkcmVuKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0
dXJuIHRyYXZlcnNlTmV4dEVsZW1lbnRTa2lwcGluZ0NoaWxkcmVuVGVtcGxhdGUoY3VycmVudCwg
c3RheVdpdGhpbik7IH0KKwogfQogCiBuYW1lc3BhY2UgTm9kZVRyYXZlcnNhbCB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMSUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcAppbmRleCA2ZDBhNTIzZTZlZjk4ZDNjM2RmMDg4ZDZm
MzQ5MjQzZDRhZGRlMmVmLi4yZWYwZGQ3NmFlYTE2Zjk1ZWJkZmMyNWU1OTZhMDMxMDIzY2Q2NmNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMSUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExJRWxlbWVudC5jcHAKQEAgLTkyLDIzICs5MiwyMyBA
QCB2b2lkIEhUTUxMSUVsZW1lbnQ6OmF0dGFjaCgpCiAgICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgp
OwogCiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNMaXN0SXRlbSgpKSB7Ci0g
ICAgICAgIFJlbmRlckxpc3RJdGVtKiByZW5kZXIgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVy
KCkpOworICAgICAgICBSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW1SZW5kZXJlciA9IHRvUmVuZGVy
TGlzdEl0ZW0ocmVuZGVyZXIoKSk7CiAKICAgICAgICAgLy8gRmluZCB0aGUgZW5jbG9zaW5nIGxp
c3Qgbm9kZS4KLSAgICAgICAgTm9kZSogbGlzdE5vZGUgPSAwOwotICAgICAgICBFdmVudFBhdGhX
YWxrZXIgd2Fsa2VyKHRoaXMpOworICAgICAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IDA7CisgICAg
ICAgIEVsZW1lbnQqIGN1cnJlbnQgPSB0aGlzOwogICAgICAgICB3aGlsZSAoIWxpc3ROb2RlKSB7
Ci0gICAgICAgICAgICB3YWxrZXIubW92ZVRvUGFyZW50KCk7Ci0gICAgICAgICAgICBpZiAoIXdh
bGtlci5ub2RlKCkpCisgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50RWxlbWVu
dCgpOworICAgICAgICAgICAgaWYgKCFjdXJyZW50KQogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgaWYgKHdhbGtlci5ub2RlKCktPmhhc1RhZ05hbWUodWxUYWcpIHx8IHdhbGtl
ci5ub2RlKCktPmhhc1RhZ05hbWUob2xUYWcpKQotICAgICAgICAgICAgICAgIGxpc3ROb2RlID0g
d2Fsa2VyLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKHVsVGFn
KSB8fCBjdXJyZW50LT5oYXNUYWdOYW1lKG9sVGFnKSkKKyAgICAgICAgICAgICAgICBsaXN0Tm9k
ZSA9IGN1cnJlbnQ7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGluIGEg
bGlzdCwgdGVsbCB0aGUgcmVuZGVyZXIgc28gaXQgY2FuIHBvc2l0aW9uIHVzIGluc2lkZS4KICAg
ICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2Ugb3VyIHN0eWxlIHRvIHNheSAiaW5zaWRl
IiBzaW5jZSB0aGF0IHdvdWxkIGFmZmVjdCBuZXN0ZWQgbm9kZXMuCiAgICAgICAgIGlmICghbGlz
dE5vZGUpCi0gICAgICAgICAgICByZW5kZXItPnNldE5vdEluTGlzdCh0cnVlKTsKKyAgICAgICAg
ICAgIGxpc3RJdGVtUmVuZGVyZXItPnNldE5vdEluTGlzdCh0cnVlKTsKIAogICAgICAgICBwYXJz
ZVZhbHVlKGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAKaW5kZXggNDVmZTQyNmY0NzJmYzk0OTNiYmUxZjRm
YzIwODA4ODgwZWZlYTdkZC4uMjQ1MjBmZDhhYmUwNDczZWVkYjc5ZWFmNTQ1NzkyMmFiN2FkMDg3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwCkBAIC0xMDYsNiAr
MTA2LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpzZXRTdGFydChpbnQgc3RhcnQpCiAKIHZv
aWQgSFRNTE9MaXN0RWxlbWVudDo6dXBkYXRlSXRlbVZhbHVlcygpCiB7CisgICAgLy8gVGhpcyB3
aWxsIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdCBpdGVtcyBpbiBET00gb3JkZXIuCiAgICAgZm9y
IChSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0gPSBSZW5kZXJMaXN0SXRlbTo6bmV4dExpc3RJdGVt
KHJlbmRlcmVyKCkpOyBsaXN0SXRlbTsgbGlzdEl0ZW0gPSBSZW5kZXJMaXN0SXRlbTo6bmV4dExp
c3RJdGVtKHJlbmRlcmVyKCksIGxpc3RJdGVtKSkKICAgICAgICAgbGlzdEl0ZW0tPnVwZGF0ZVZh
bHVlKCk7CiB9CkBAIC0xMTQsNiArMTE1LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpyZWNh
bGN1bGF0ZUl0ZW1Db3VudCgpCiB7CiAgICAgbV9pdGVtQ291bnQgPSAwOwogCisgICAgLy8gVGhp
cyB3aWxsIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdCBpdGVtcyBpbiBET00gb3JkZXIuCiAgICAg
Zm9yIChSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0gPSBSZW5kZXJMaXN0SXRlbTo6bmV4dExpc3RJ
dGVtKHJlbmRlcmVyKCkpOyBsaXN0SXRlbTsgbGlzdEl0ZW0gPSBSZW5kZXJMaXN0SXRlbTo6bmV4
dExpc3RJdGVtKHJlbmRlcmVyKCksIGxpc3RJdGVtKSkKICAgICAgICAgbV9pdGVtQ291bnQrKzsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4IDM0YjJj
Yjg1MzBlMDM1NGMwYzk2Zjc2NTBlNmI1N2UwOTNkYTk4ZWYuLjk4MzA5YmU2ZDRlOTkyZmU0MmZm
ZThkZGQ0MDRmZjg1MDljMjQyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJDb3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q291bnRlci5jcHAKQEAgLTU3LDk0ICs1NywzNSBAQCBzdGF0aWMgQ291bnRlck1hcHMmIGNvdW50
ZXJNYXBzKCkKIC8vIGluY2x1ZGluZyBwc2V1ZG8gZWxlbWVudHMgYXMgZGVmaW5lZCBpbiBDU1Mg
Mi4xLgogc3RhdGljIFJlbmRlck9iamVjdCogcHJldmlvdXNJblByZU9yZGVyKGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0KQogewotICAgIEVsZW1lbnQqIHBhcmVudDsKLSAgICBFbGVtZW50KiBz
aWJsaW5nOwotICAgIHN3aXRjaCAob2JqZWN0LT5zdHlsZSgpLT5zdHlsZVR5cGUoKSkgewotICAg
IGNhc2UgTk9QU0VVRE86Ci0gICAgICAgIEFTU0VSVCghb2JqZWN0LT5pc0Fub255bW91cygpKTsK
LSAgICAgICAgcGFyZW50ID0gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgpKTsKLSAgICAgICAgc2li
bGluZyA9IHBhcmVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwotICAgICAgICBwYXJlbnQg
PSBwYXJlbnQtPnBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCRUZP
UkU6Ci0gICAgICAgIHJldHVybiBvYmplY3QtPmdlbmVyYXRpbmdOb2RlKCktPnJlbmRlcmVyKCk7
IC8vIEl0IGlzIGFsd2F5cyB0aGUgZ2VuZXJhdGluZyBub2RlJ3MgcmVuZGVyZXIKLSAgICBjYXNl
IEFGVEVSOgotICAgICAgICBwYXJlbnQgPSB0b0VsZW1lbnQob2JqZWN0LT5nZW5lcmF0aW5nTm9k
ZSgpKTsKLSAgICAgICAgc2libGluZyA9IHBhcmVudC0+bGFzdEVsZW1lbnRDaGlsZCgpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHdoaWxlIChzaWJsaW5nKSB7Ci0gICAgICAg
IGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc2libGluZy0+cmVuZGVyZXIoKSkgewotICAg
ICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogYWZ0ZXIgPSBzaWJsaW5nLT5wc2V1ZG9FbGVtZW50
UmVuZGVyZXIoQUZURVIpKQotICAgICAgICAgICAgICAgIHJldHVybiBhZnRlcjsKLSAgICAgICAg
ICAgIHBhcmVudCA9IHNpYmxpbmc7Ci0gICAgICAgICAgICBzaWJsaW5nID0gc2libGluZy0+bGFz
dEVsZW1lbnRDaGlsZCgpOwotICAgICAgICAgICAgaWYgKCFzaWJsaW5nKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKFJlbmRlck9iamVjdCogYmVmb3JlID0gdG9FbGVtZW50KHJlbmRlcmVyLT5ub2Rl
KCkpLT5wc2V1ZG9FbGVtZW50UmVuZGVyZXIoQkVGT1JFKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGJlZm9yZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmctPnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKKyAgICBFbGVtZW50KiBzZWxmID0gdG9FbGVtZW50KG9i
amVjdC0+bm9kZSgpKTsKKyAgICBFbGVtZW50KiBwcmV2aW91cyA9IEVsZW1lbnRUcmF2ZXJzYWw6
OnByZXZpb3VzV2l0aFBzZXVkbyhzZWxmKTsKKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgb3B0
aW1pemVkIHRvIHNraXAgdGhlIGNoaWxkcmVuIG9mIHRoZSBlbGVtZW50cyB3aXRob3V0IGEgcmVu
ZGVyZXI/CisgICAgd2hpbGUgKHByZXZpb3VzICYmICFwcmV2aW91cy0+cmVuZGVyZXIoKSkgewor
ICAgICAgICBwcmV2aW91cyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzV2l0aFBzZXVkbyhw
cmV2aW91cyk7CiAgICAgfQotICAgIGlmICghcGFyZW50KQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAoUmVuZGVyT2JqZWN0KiBiZWZvcmUgPSBwYXJlbnQtPnBzZXVkb0VsZW1lbnRSZW5kZXJl
cihCRUZPUkUpKQotICAgICAgICByZXR1cm4gYmVmb3JlOwotICAgIHJldHVybiBwYXJlbnQtPnJl
bmRlcmVyKCk7CisgICAgcmV0dXJuIHByZXZpb3VzID8gcHJldmlvdXMtPnJlbmRlcmVyKCkgOiAw
OwogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgcmVuZGVyZXIgdHJlZSBpbiB0
aGUgb3JkZXIgb2YgdGhlIERPTSB0cmVlCiAvLyBpbmNsdWRpbmcgcHNldWRvIGVsZW1lbnRzIGFz
IGRlZmluZWQgaW4gQ1NTIDIuMS4KIHN0YXRpYyBSZW5kZXJPYmplY3QqIHByZXZpb3VzU2libGlu
Z09yUGFyZW50KGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIEVsZW1lbnQqIHBh
cmVudDsKLSAgICBFbGVtZW50KiBzaWJsaW5nOwotICAgIHN3aXRjaCAob2JqZWN0LT5zdHlsZSgp
LT5zdHlsZVR5cGUoKSkgewotICAgIGNhc2UgTk9QU0VVRE86Ci0gICAgICAgIEFTU0VSVCghb2Jq
ZWN0LT5pc0Fub255bW91cygpKTsKLSAgICAgICAgcGFyZW50ID0gdG9FbGVtZW50KG9iamVjdC0+
bm9kZSgpKTsKLSAgICAgICAgc2libGluZyA9IHBhcmVudC0+cHJldmlvdXNFbGVtZW50U2libGlu
ZygpOwotICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBCRUZPUkU6Ci0gICAgICAgIHJldHVybiBvYmplY3QtPmdlbmVyYXRp
bmdOb2RlKCktPnJlbmRlcmVyKCk7IC8vIEl0IGlzIGFsd2F5cyB0aGUgZ2VuZXJhdGluZyBub2Rl
J3MgcmVuZGVyZXIKLSAgICBjYXNlIEFGVEVSOgotICAgICAgICBwYXJlbnQgPSB0b0VsZW1lbnQo
b2JqZWN0LT5nZW5lcmF0aW5nTm9kZSgpKTsKLSAgICAgICAgc2libGluZyA9IHBhcmVudC0+bGFz
dEVsZW1lbnRDaGlsZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHdoaWxl
IChzaWJsaW5nKSB7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc2libGlu
Zy0+cmVuZGVyZXIoKSkgLy8gVGhpcyBza2lwcyBpbnZpc2libGUgbm9kZXMKLSAgICAgICAgICAg
IHJldHVybiByZW5kZXJlcjsKLSAgICAgICAgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxl
bWVudFNpYmxpbmcoKTsKKyAgICBFbGVtZW50KiBzZWxmID0gdG9FbGVtZW50KG9iamVjdC0+bm9k
ZSgpKTsKKyAgICBFbGVtZW50KiBwcmV2aW91cyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3Vz
RWxlbWVudFNpYmxpbmdXaXRoUHNldWRvKHNlbGYpOworICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBi
ZSBvcHRpbWl6ZWQgdG8gc2tpcCB0aGUgY2hpbGRyZW4gb2YgdGhlIGVsZW1lbnRzIHdpdGhvdXQg
YSByZW5kZXJlcj8KKyAgICB3aGlsZSAocHJldmlvdXMgJiYgIXByZXZpb3VzLT5yZW5kZXJlcigp
KSB7CisgICAgICAgIHByZXZpb3VzID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNFbGVtZW50
U2libGluZ1dpdGhQc2V1ZG8ocHJldmlvdXMpOwogICAgIH0KLSAgICBpZiAoIXBhcmVudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogYmVmb3JlID0gcGFyZW50LT5w
c2V1ZG9FbGVtZW50UmVuZGVyZXIoQkVGT1JFKSkKLSAgICAgICAgcmV0dXJuIGJlZm9yZTsKLSAg
ICByZXR1cm4gcGFyZW50LT5yZW5kZXJlcigpOworICAgIGlmIChwcmV2aW91cykKKyAgICAgICAg
cmV0dXJuIHByZXZpb3VzLT5yZW5kZXJlcigpOworICAgIHByZXZpb3VzID0gc2VsZi0+cGFyZW50
RWxlbWVudCgpOworICAgIHJldHVybiBwcmV2aW91cyA/IHByZXZpb3VzLT5yZW5kZXJlcigpIDog
MDsKIH0KIAogc3RhdGljIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCiB7Ci0gICAgc3dpdGNoIChvYmplY3QtPnN0eWxlKCktPnN0eWxlVHlwZSgpKSB7Ci0gICAg
Y2FzZSBOT1BTRVVETzoKLSAgICAgICAgQVNTRVJUKCFvYmplY3QtPmlzQW5vbnltb3VzKCkpOwot
ICAgICAgICByZXR1cm4gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgpKS0+cGFyZW50RWxlbWVudCgp
OwotICAgIGNhc2UgQkVGT1JFOgotICAgIGNhc2UgQUZURVI6Ci0gICAgICAgIHJldHVybiB0b0Vs
ZW1lbnQob2JqZWN0LT5nZW5lcmF0aW5nTm9kZSgpKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIEVsZW1l
bnQqIHNlbGYgPSB0b0VsZW1lbnQob2JqZWN0LT5ub2RlKCkpOworICAgIHJldHVybiBzZWxmLT5w
YXJlbnRFbGVtZW50KCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBhcmVSZW5kZXJlcnNFbGVt
ZW50c1NpYmxpbmdzKFJlbmRlck9iamVjdCogZmlyc3QsIFJlbmRlck9iamVjdCogc2Vjb25kKQpA
QCAtMTU2LDQ0ICs5NywxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJlUmVuZGVyZXJzRWxlbWVu
dHNTaWJsaW5ncyhSZW5kZXJPYmplY3QqIGZpcnN0LCBSZW5kZXJPYmplYwogLy8gaW5jbHVkaW5n
IHBzZXVkbyBlbGVtZW50cyBhcyBkZWZpbmVkIGluIENTUyAyLjEuCiBzdGF0aWMgUmVuZGVyT2Jq
ZWN0KiBuZXh0SW5QcmVPcmRlcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgRWxl
bWVudCogc3RheVdpdGhpbiwgYm9vbCBza2lwRGVzY2VuZGFudHMgPSBmYWxzZSkKIHsKLSAgICBF
bGVtZW50KiBzZWxmOwotICAgIEVsZW1lbnQqIGNoaWxkOwotICAgIHNlbGYgPSB0b0VsZW1lbnQo
b2JqZWN0LT5nZW5lcmF0aW5nTm9kZSgpKTsKLSAgICBpZiAoc2tpcERlc2NlbmRhbnRzKQotICAg
ICAgICBnb3RvIG5leHRzaWJsaW5nOwotICAgIHN3aXRjaCAob2JqZWN0LT5zdHlsZSgpLT5zdHls
ZVR5cGUoKSkgewotICAgIGNhc2UgTk9QU0VVRE86Ci0gICAgICAgIEFTU0VSVCghb2JqZWN0LT5p
c0Fub255bW91cygpKTsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogYmVmb3JlID0gc2VsZi0+
cHNldWRvRWxlbWVudFJlbmRlcmVyKEJFRk9SRSkpCi0gICAgICAgICAgICByZXR1cm4gYmVmb3Jl
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJFRk9SRToKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBBRlRFUjoKLSAgICAgICAgZ290byBuZXh0c2libGluZzsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAg
IGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oc2VsZik7Ci0gICAgd2hpbGUg
KHRydWUpIHsKLSAgICAgICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IGNoaWxkLT5yZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHJl
dHVybiByZW5kZXJlcjsKLSAgICAgICAgICAgIGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4oY2hpbGQsIHNlbGYpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChS
ZW5kZXJPYmplY3QqIGFmdGVyID0gc2VsZi0+cHNldWRvRWxlbWVudFJlbmRlcmVyKEFGVEVSKSkK
LSAgICAgICAgICAgIHJldHVybiBhZnRlcjsKLW5leHRzaWJsaW5nOgotICAgICAgICBpZiAoc2Vs
ZiA9PSBzdGF5V2l0aGluKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNoaWxkID0g
RWxlbWVudFRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oc2VsZik7Ci0gICAgICAgIHNl
bGYgPSBzZWxmLT5wYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgIGlmICghc2VsZikgewotICAgICAg
ICAgICAgQVNTRVJUKCFjaGlsZCk7IC8vIFdlIGNhbiBvbmx5IHJlYWNoIHRoaXMgaWYgd2UgYXJl
IHNlYXJjaGluZyBiZXlvbmQgdGhlIHJvb3QgZWxlbWVudAotICAgICAgICAgICAgcmV0dXJuIDA7
IC8vICB3aGljaCBjYW5ub3QgaGF2ZSBzaWJsaW5ncwotICAgICAgICB9CisgICAgRWxlbWVudCog
c2VsZiA9IHRvRWxlbWVudChvYmplY3QtPm5vZGUoKSk7CisgICAgRWxlbWVudCogbmV4dCA9IHNr
aXBEZXNjZW5kYW50cyA/IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRXaXRoUHNldWRvU2tpcHBpbmdD
aGlsZHJlbihzZWxmLCBzdGF5V2l0aGluKSA6IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRXaXRoUHNl
dWRvKHNlbGYsIHN0YXlXaXRoaW4pOworICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBvcHRpbWl6
ZWQgdG8gc2tpcCB0aGUgY2hpbGRyZW4gb2YgdGhlIGVsZW1lbnRzIHdpdGhvdXQgYSByZW5kZXJl
cj8KKyAgICB3aGlsZSAobmV4dCAmJiAhbmV4dC0+cmVuZGVyZXIoKSkgeworICAgICAgICBuZXh0
ID0gc2tpcERlc2NlbmRhbnRzID8gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFdpdGhQc2V1ZG9Ta2lw
cGluZ0NoaWxkcmVuKG5leHQsIHN0YXlXaXRoaW4pIDogRWxlbWVudFRyYXZlcnNhbDo6bmV4dFdp
dGhQc2V1ZG8obmV4dCwgc3RheVdpdGhpbik7CiAgICAgfQorICAgIHJldHVybiBuZXh0ID8gbmV4
dC0+cmVuZGVyZXIoKSA6IDA7CiB9CiAKIHN0YXRpYyBib29sIHBsYW5Db3VudGVyKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIsIGJvb2wmIGlzUmVz
ZXQsIGludCYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVt
LmNwcAppbmRleCBiZmM2MmIxYzlhOWVkYzBmZmY5YjViOTM4NjU3N2EyZDY5ODI0ODNjLi4wYWNj
ZDI1ZTJlYTcxNmY2N2Y3MDA1MWVhNzI1ZjI5NWQ1MzRiM2JkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl
ICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxP
TGlzdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTdHls
ZUluaGVyaXRlZERhdGEuaCIKQEAgLTk2LDYyICs5Nyw3NCBAQCBzdGF0aWMgYm9vbCBpc0xpc3Qo
Tm9kZSogbm9kZSkKICAgICByZXR1cm4gKG5vZGUtPmhhc1RhZ05hbWUodWxUYWcpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUob2xUYWcpKTsKIH0KIAotc3RhdGljIE5vZGUqIGVuY2xvc2luZ0xpc3QoY29u
c3QgUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtKQorLy8gUmV0dXJucyB0aGUgZW5jbG9zaW5nIGxp
c3Qgd2l0aCByZXNwZWN0IHRvIHRoZSBET00gb3JkZXIuCitzdGF0aWMgRWxlbWVudCogZW5jbG9z
aW5nTGlzdChjb25zdCBSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0pCiB7Ci0gICAgTm9kZSogZmly
c3ROb2RlID0gMDsKLQotICAgIGZvciAoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGxp
c3RJdGVtLT5wYXJlbnQoKTsgcmVuZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgp
KSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgpOwotICAgICAgICBpZiAo
bm9kZSkgewotICAgICAgICAgICAgaWYgKGlzTGlzdChub2RlKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIGlmICghZmlyc3ROb2RlKQotICAgICAgICAgICAgICAg
IGZpcnN0Tm9kZSA9IG5vZGU7Ci0gICAgICAgIH0KKyAgICBFbGVtZW50KiBsaXN0SXRlbU5vZGUg
PSB0b0VsZW1lbnQobGlzdEl0ZW0tPm5vZGUoKSk7CisgICAgRWxlbWVudCogZmlyc3ROb2RlID0g
MDsKKyAgICBmb3IgKEVsZW1lbnQqIHBhcmVudCA9IGxpc3RJdGVtTm9kZS0+cGFyZW50RWxlbWVu
dCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAg
IGlmIChpc0xpc3QocGFyZW50KSkKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7CisgICAgICAg
IGlmICghZmlyc3ROb2RlKQorICAgICAgICAgICAgZmlyc3ROb2RlID0gcGFyZW50OwogICAgIH0K
IAorICAgIC8vIFRoZSBlbmNsb3NpbmcgbGlzdCBzaG91bGQgaGF2ZSBhIHJlbmRlcmVyLgorICAg
IEFTU0VSVCghZmlyc3ROb2RlIHx8IGZpcnN0Tm9kZS0+cmVuZGVyZXIoKSk7CisKICAgICAvLyBJ
ZiB0aGVyZSdzIG5vIGFjdHVhbCA8dWw+IG9yIDxvbD4gbGlzdCBlbGVtZW50LCB0aGVuIHRoZSBm
aXJzdCBmb3VuZAogICAgIC8vIG5vZGUgYWN0cyBhcyBvdXIgbGlzdCBmb3IgcHVycG9zZXMgb2Yg
ZGV0ZXJtaW5pbmcgd2hhdCBvdGhlciBsaXN0IGl0ZW1zCiAgICAgLy8gc2hvdWxkIGJlIG51bWJl
cmVkIGFzIHBhcnQgb2YgdGhlIHNhbWUgbGlzdC4KICAgICByZXR1cm4gZmlyc3ROb2RlOwogfQog
CisvLyBSZXR1cm5zIHRoZSBuZXh0IGxpc3QgaXRlbSB3aXRoIHJlc3BlY3QgdG8gdGhlIERPTSBv
cmRlci4KIFJlbmRlckxpc3RJdGVtKiBSZW5kZXJMaXN0SXRlbTo6bmV4dExpc3RJdGVtKFJlbmRl
ck9iamVjdCogbGlzdCwgY29uc3QgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0pCiB7CiAgICAgaWYgKCFs
aXN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBp
dGVtID8gaXRlbS0+bmV4dEluUHJlT3JkZXIobGlzdCkgOiBsaXN0LT5uZXh0SW5QcmVPcmRlcihs
aXN0KTsKLSAgICB3aGlsZSAocmVuZGVyZXIpIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2Rl
KCkgJiYgaXNMaXN0KHJlbmRlcmVyLT5ub2RlKCkpKSB7CisgICAgRWxlbWVudCogbGlzdE5vZGUg
PSB0b0VsZW1lbnQobGlzdC0+bm9kZSgpKTsKKyAgICBFbGVtZW50KiBjdXJyZW50ID0gaXRlbSA/
IHRvRWxlbWVudChpdGVtLT5ub2RlKCkpIDogbGlzdE5vZGU7CisgICAgY3VycmVudCA9IEVsZW1l
bnRUcmF2ZXJzYWw6Om5leHRXaXRoUHNldWRvKGN1cnJlbnQsIGxpc3ROb2RlKTsKKworICAgIHdo
aWxlIChjdXJyZW50KSB7CisgICAgICAgIGlmIChpc0xpc3QoY3VycmVudCkpIHsKICAgICAgICAg
ICAgIC8vIFdlJ3ZlIGZvdW5kIGEgbmVzdGVkLCBpbmRlcGVuZGVudCBsaXN0OiBub3RoaW5nIHRv
IGRvIGhlcmUuCi0gICAgICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0SW5QcmVPcmRl
ckFmdGVyQ2hpbGRyZW4obGlzdCk7CisgICAgICAgICAgICBjdXJyZW50ID0gRWxlbWVudFRyYXZl
cnNhbDo6bmV4dFdpdGhQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGN1cnJlbnQsIGxpc3ROb2RlKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHJlbmRlcmVy
LT5pc0xpc3RJdGVtKCkpCisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50
LT5yZW5kZXJlcigpOworICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlzdEl0
ZW0oKSkKICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKTsKIAot
ICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0SW5QcmVPcmRlcihsaXN0KTsKKyAgICAg
ICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIG9wdGltaXplZCB0byBza2lwIHRoZSBjaGlsZHJlbiBv
ZiB0aGUgZWxlbWVudHMgd2l0aG91dCBhIHJlbmRlcmVyPworICAgICAgICBjdXJyZW50ID0gRWxl
bWVudFRyYXZlcnNhbDo6bmV4dFdpdGhQc2V1ZG8oY3VycmVudCwgbGlzdE5vZGUpOwogICAgIH0K
KwogICAgIHJldHVybiAwOwogfQogCisvLyBSZXR1cm5zIHRoZSBwcmV2aW91cyBsaXN0IGl0ZW0g
d2l0aCByZXNwZWN0IHRvIHRoZSBET00gb3JkZXIuCiBzdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIHBy
ZXZpb3VzTGlzdEl0ZW0oUmVuZGVyT2JqZWN0KiBsaXN0LCBjb25zdCBSZW5kZXJMaXN0SXRlbSog
aXRlbSkKIHsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdGVtLT5wcmV2aW91
c0luUHJlT3JkZXIoKTsgcmVuZGVyZXIgJiYgcmVuZGVyZXIgIT0gbGlzdDsgcmVuZGVyZXIgPSBy
ZW5kZXJlci0+cHJldmlvdXNJblByZU9yZGVyKCkpIHsKLSAgICAgICAgaWYgKCFyZW5kZXJlci0+
aXNMaXN0SXRlbSgpKQorICAgIEVsZW1lbnQqIGN1cnJlbnQgPSB0b0VsZW1lbnQoaXRlbS0+bm9k
ZSgpKTsKKyAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IHRvRWxlbWVudChsaXN0LT5ub2RlKCkpOwor
ICAgIGZvciAoY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzV2l0aFBzZXVkbyhj
dXJyZW50LCBsaXN0Tm9kZSk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpw
cmV2aW91c1dpdGhQc2V1ZG8oY3VycmVudCwgbGlzdE5vZGUpKSB7CisgICAgICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBjdXJyZW50LT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIXJlbmRl
cmVyIHx8IChyZW5kZXJlciAmJiAhcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgTm9kZSogb3RoZXJMaXN0ID0gZW5jbG9zaW5nTGlzdCh0b1Jl
bmRlckxpc3RJdGVtKHJlbmRlcmVyKSk7CisgICAgICAgIEVsZW1lbnQqIG90aGVyTGlzdCA9IGVu
Y2xvc2luZ0xpc3QodG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcikpOwogICAgICAgICAvLyBUaGlz
IGl0ZW0gaXMgcGFydCBvZiBvdXIgY3VycmVudCBsaXN0LCBzbyBpdCdzIHdoYXQgd2UncmUgbG9v
a2luZyBmb3IuCi0gICAgICAgIGlmIChsaXN0LT5ub2RlKCkgPT0gb3RoZXJMaXN0KQorICAgICAg
ICBpZiAobGlzdE5vZGUgPT0gb3RoZXJMaXN0KQogICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVy
TGlzdEl0ZW0ocmVuZGVyZXIpOwogICAgICAgICAvLyBXZSBmb3VuZCBvdXJzZWxmIGluc2lkZSBh
bm90aGVyIGxpc3Q7IGxldHMgc2tpcCB0aGUgcmVzdCBvZiBpdC4KLSAgICAgICAgLy8gVXNlIG5l
eHRJblByZU9yZGVyKCkgaGVyZSBiZWNhdXNlIHRoZSBvdGhlciBsaXN0IGl0c2VsZiBtYXkgYWN0
dWFsbHkKKyAgICAgICAgLy8gVXNlIG5leHRXaXRoUHNldWRvKCkgaGVyZSBiZWNhdXNlIHRoZSBv
dGhlciBsaXN0IGl0c2VsZiBtYXkgYWN0dWFsbHkKICAgICAgICAgLy8gYmUgYSBsaXN0IGl0ZW0g
aXRzZWxmLiBXZSBuZWVkIHRvIGV4YW1pbmUgaXQsIHNvIHdlIGRvIHRoaXMgdG8gY291bnRlcmFj
dAotICAgICAgICAvLyB0aGUgcHJldmlvdXNJblByZU9yZGVyKCkgdGhhdCB3aWxsIGJlIGRvbmUg
YnkgdGhlIGxvb3AuCisgICAgICAgIC8vIHRoZSBwcmV2aW91c1dpdGhQc2V1ZG8oKSB0aGF0IHdp
bGwgYmUgZG9uZSBieSB0aGUgbG9vcC4KICAgICAgICAgaWYgKG90aGVyTGlzdCkKLSAgICAgICAg
ICAgIHJlbmRlcmVyID0gb3RoZXJMaXN0LT5yZW5kZXJlcigpLT5uZXh0SW5QcmVPcmRlcigpOwor
ICAgICAgICAgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRXaXRoUHNldWRvKG90
aGVyTGlzdCk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMTYxLDcgKzE3NCw3IEBAIGlu
bGluZSBpbnQgUmVuZGVyTGlzdEl0ZW06OmNhbGNWYWx1ZSgpIGNvbnN0CiAgICAgaWYgKG1faGFz
RXhwbGljaXRWYWx1ZSkKICAgICAgICAgcmV0dXJuIG1fZXhwbGljaXRWYWx1ZTsKIAotICAgIE5v
ZGUqIGxpc3QgPSBlbmNsb3NpbmdMaXN0KHRoaXMpOworICAgIEVsZW1lbnQqIGxpc3QgPSBlbmNs
b3NpbmdMaXN0KHRoaXMpOwogICAgIFJlbmRlck9iamVjdCogbGlzdFJlbmRlcmVyID0gbGlzdCA/
IGxpc3QtPnJlbmRlcmVyKCkgOiAwOwogICAgIEhUTUxPTGlzdEVsZW1lbnQqIG9MaXN0RWxlbWVu
dCA9IChsaXN0ICYmIGxpc3QtPmhhc1RhZ05hbWUob2xUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxP
TGlzdEVsZW1lbnQqPihsaXN0KSA6IDA7CiAgICAgaW50IHZhbHVlU3RlcCA9IDE7CkBAIC00Mjcs
NyArNDQwLDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6ZXhwbGljaXRWYWx1ZUNoYW5nZWQoKQog
ewogICAgIGlmIChtX21hcmtlcikKICAgICAgICAgbV9tYXJrZXItPnNldE5lZWRzTGF5b3V0QW5k
UHJlZldpZHRoc1JlY2FsYygpOwotICAgIE5vZGUqIGxpc3ROb2RlID0gZW5jbG9zaW5nTGlzdCh0
aGlzKTsKKyAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3QodGhpcyk7CiAgICAg
UmVuZGVyT2JqZWN0KiBsaXN0UmVuZGVyZXIgPSAwOwogICAgIGlmIChsaXN0Tm9kZSkKICAgICAg
ICAgbGlzdFJlbmRlcmVyID0gbGlzdE5vZGUtPnJlbmRlcmVyKCk7CkBAIC00NjUsNyArNDc4LDcg
QEAgc3RhdGljIFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c09yTmV4dEl0ZW0oYm9vbCBpc0xpc3RS
ZXZlcnNlZCwgUmVuZGVyT2JqZWN0KiBsaXMKIAogdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRl
TGlzdE1hcmtlck51bWJlcnMoKQogewotICAgIE5vZGUqIGxpc3ROb2RlID0gZW5jbG9zaW5nTGlz
dCh0aGlzKTsKKyAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3QodGhpcyk7CiAg
ICAgQVNTRVJUKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5yZW5kZXJlcigpKTsKICAgICBpZiAoIWxp
c3ROb2RlIHx8ICFsaXN0Tm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDlmYjJjNDlhY2E3MjMyZjcyOWMyOGViNzJjZjA4NjdkYTU5NjU0ZjYuLjgyNjZmZDc5ZjYzYTNk
NmMwMGRhODliZWFiYzE4ODRkMjFmMWQwYTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0w
Mi0yNiAgQW5kcmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KKworICAgICAgICBNb3ZlIHRo
ZSBsaXN0IGNvdW50aW5nIGxvZ2ljIGZyb20gdGhlIHJlbmRlciB0cmVlIHRvIHRoZSBET00gdHJl
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzUy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHRl
c3QgZmFzdC9saXN0cy9wb3NpdGlvbmVkLWNvdW50LWNyYXNoLmh0bWwgaGFzIHRoZSBjb3JyZWN0
IHJlbmRlcmluZyBhZnRlciBjaGFuZ2luZworICAgICAgICB0aGUgbGlzdCBjb3VudGluZyB0byBi
ZSBpbiBET00gb3JkZXIuCisKKyAgICAgICAgKiBmYXN0L2xpc3RzL3Bvc2l0aW9uZWQtY291bnQt
Y3Jhc2gtZXhwZWN0ZWQudHh0OgorCiAyMDEzLTAyLTI2ICBUYWthc2hpIFRveW9zaGltYSAgPHRv
eW9zaGltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgVXNlci1BZ2VudCBoZWFkZXIgaW4g
b3BlbmluZyBoYW5kc2hha2UgaGVhZGVycy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
bGlzdHMvcG9zaXRpb25lZC1jb3VudC1jcmFzaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2xpc3RzL3Bvc2l0aW9uZWQtY291bnQtY3Jhc2gtZXhwZWN0ZWQudHh0CmluZGV4IDlmYzA2
NmQ1ZDExZjFlMDc4ODQ3MTEwMTE0ZTc3ZTIwMTBhMTY3ZDAuLmNlNDBjMDhjYjg0ZjgzZjQ2ZDA3
YzQ1OTczYjQxZDg2OTVjOThlZWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbGlzdHMv
cG9zaXRpb25lZC1jb3VudC1jcmFzaC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9saXN0cy9wb3NpdGlvbmVkLWNvdW50LWNyYXNoLWV4cGVjdGVkLnR4dApAQCAtMiw1ICsyLDUg
QEAgSUkKIAogCiBGb3IgbWFudWFsIHRlc3Q6IElmIHlvdSBzZWUgbm8gY3Jhc2ggYW5kICJJSSBJ
SSIsIGl0IG1lYW5zIHRoaXMgdGVzdCBQQVNTLgotRkFJTCBsaXN0IG1hcmtlciBzaG91bGQgYmUg
SUkuIFdhcyBJLgorUEFTUyBsaXN0IG1hcmtlciBpcyBJSS4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191972</attachid>
            <date>2013-03-07 04:45:03 -0800</date>
            <delta_ts>2013-03-22 11:04:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110352-20130307144106.patch</filename>
            <type>text/plain</type>
            <size>30678</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjViZjk0NWI4MGU1YWQ1
ZjhhNjVlZGZhNjBmNDViZTFkNDM4ZmFmNy4uYTI3NWMwY2YyOGQwZWVjM2YzYTk3OGRkY2NmOTIy
ZmUxZDQ4NDY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEzLTAzLTA3ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFVzZSBET00gb3JkZXJpbmcg
Zm9yIGxpc3QgY291bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTAzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDdXJyZW50bHkgdGhlIGxpc3QgaXRlbXMgb3JkZXJpbmcgaXMgbWFkZSBieSB0cmF2
ZXJzaW5nIHRoZSByZW5kZXIgdHJlZS4gVGhpcyBnaXZlcyBiYWQgcmVzdWx0cyBmb3I6CisgICAg
ICAgIC0gbGlzdCBpdGVtcyBmbG93biBpbnNpZGUgcmVnaW9ucyBiZWNhdXNlIHRoZXkgYXJlIG5v
dCByZW5kZXJlZCBhcyBkZXNjZW5kYW50cyBvZiB0aGVpciBET00gbGlzdCBhbmNlc3RvcnMuCisg
ICAgICAgIC0gbGlzdCBpdGVtcyBtYXRjaGVkIHRvIGluc2VydGlvbiBwb2ludHMgaW5zaWRlIGEg
c2hhZG93IHRyZWUuIFRoZSBpbnNlcnRpb24gcG9pbnQgbWF5IGJlIGEgY2hpbGQgb2YgYQorICAg
ICAgICBsaXN0IHNvIHRoZSBudW1iZXJpbmcgZ2V0cyBicm9rZW4uCisKKyAgICAgICAgVG8gaW1w
bGVtZW50IGNvcnJlY3QgRE9NIG9yZGVyaW5nIEkndmUgdGFrZW4gaW50byBhY2NvdW50IHRoZSBm
YWN0IHRoYXQgcHNldWRvLWVsZW1lbnRzIGNhbiBoYXZlIGRpc3BsYXk6IGxpc3QtaXRlbQorICAg
ICAgICBzbyB0aGV5IHNob3VsZCBiZSBpbmNsdWRlZCB3aGVuIHRyYXZlcnNpbmcgdGhlIERPTSB0
cmVlLiBJJ3ZlIGFkZGVkIGhlbHBlciBtZXRob2RzIG9uIHRoZSBOb2RlVHJhdmVyc2FsCisgICAg
ICAgIG5hbWVzcGFjZSB0aGF0IHNob3VsZCBhbGxvdyBlYXNpbHkgdHJhdmVyc2luZyB0aGUgdHJl
ZSBpbmNsdWRpbmcgdGhlIHBzZXVkby1lbGVtZW50cyAoZS5nLiBmaXJzdENoaWxkV2l0aFBzZXVk
bworICAgICAgICBmb3IgYW4gZWxlbWVudCB3aXRoIHBzZXVkby1iZWZvcmUgd2lsbCByZXR1cm4g
dGhlIGJlZm9yZSBQc2V1ZG9FbGVtZW50KS4gVXNpbmcgdGhlc2UgaGVscGVyIG1ldGhvZHMgSSd2
ZSBpbXBsZW1lbnRlZAorICAgICAgICBwcmUtb3JkZXIgdHJhdmVyc2FsIG1ldGhvZHMgYXdhcmUg
b2YgdGhlIHBzZXVkby1lbGVtZW50cy4KKyAgICAgICAgQW4gZWZmZWN0IG9mIHRoaXMgY2hhbmdl
IGlzIGhvdyB0aGUgbGlzdCBpdGVtcyBpbnNpZGUgc2hhZG93IHRyZWUgdXBkYXRlIHRoZWlyIGNv
dW50aW5nLiBXaXRoIHRoZSBwYXRjaCwgaWYgdGhlcmUncworICAgICAgICBubyA8b2w+IG9yIDx1
bD4gZWxlbWVudCBvbiB0aGUgYW5jZXN0b3IgY2hhaW4gb2YgYSA8bGk+IGVsZW1lbnQgdG8gdGhl
IHNoYWRvdyByb290LCB0aGUgbGlzdCBub2RlIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUKKyAgICAg
ICAgZmlyc3QgcGFyZW50IG9mIHRoZSA8bGk+IG9yIHRoZSBzaGFkb3cgcm9vdCBpZiB0aGVyZSBp
cyBubyBhbmNlc3Rvci4KKyAgICAgICAgVGhlIFJlbmRlckxpc3RJdGVtIGNsYXNzIG5vdyBtYWtl
cyB1c2Ugb2YgdGhpcyBuZXcgbWV0aG9kIG9mIHRyYXZlcnNhbCwgcmVwbGFjaW5nIHRoZSBvbmUg
YmFzZWQgb24gdGhlIHJlbmRlciB0cmVlLgorICAgICAgICBUbyBzaW1wbGlmeSB0aGUgQ1NTIGNv
dW50ZXJzIGltcGxlbWVudGF0aW9uLCBJJ3ZlIGNoYW5nZWQgdGhlIHRyYXZlcnNhbCBmdW5jdGlv
bnMgaW5zaWRlIFJlbmRlckNvdW50ZXIgdG8gYWxzbyBtYWtlIHVzZQorICAgICAgICBvZiB0aGlz
IG1ldGhvZC4gVGhlIENTUyBjb3VudGVycyBhbmQgdGhlIGxpc3QgaXRlbXMgbm93IGhhdmUgdGhl
IHNhbWUgdHJhdmVyc2FsIGFsZ29yaXRobS4KKworICAgICAgICBJbiBsYXRlciBwYXRjaGVzIEkn
bGwgYWRkIHRlc3RzIHRoYXQgc2hvdWxkIGNvdmVyIHRoZSByZWdpb25zIGFuZCBzaGFkb3cgRE9N
IHVzZSBjYXNlcy4KKworICAgICAgICBUZXN0czogbm8gbmV3IHRlc3RzIGlzIHRoaXMgcGF0Y2g7
IGFkZGVkIHRoZSBjb3JyZWN0IGV4cGVjdGF0aW9ucyBmb3IgZmFzdC9saXN0cy9wb3NpdGlvbmVk
LWNvdW50LWNyYXNoLmh0bWwKKyAgICAgICAgYW5kIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYW5k
LWxpc3QtZWxlbWVudHMuaHRtbAorCisgICAgICAgICogZG9tL05vZGVUcmF2ZXJzYWwuY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjpuZXh0
U2libGluZ0luY2x1ZGluZ1BzZXVkbyk6CisgICAgICAgIChOb2RlVHJhdmVyc2FsKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZ0luY2x1ZGluZ1BzZXVk
byk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjpmaXJzdENoaWxkSW5jbHVkaW5n
UHNldWRvKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVUcmF2ZXJzYWw6Omxhc3RDaGlsZEluY2x1
ZGluZ1BzZXVkbyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjpwcmV2aW91c0lu
Y2x1ZGluZ1BzZXVkbyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjpuZXh0SW5j
bHVkaW5nUHNldWRvKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVUcmF2ZXJzYWw6OnByZXZpb3Vz
SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbik6CisgICAgICAg
ICogZG9tL05vZGVUcmF2ZXJzYWwuaDoKKyAgICAgICAgKEVsZW1lbnRUcmF2ZXJzYWwpOgorICAg
ICAgICAoTm9kZVRyYXZlcnNhbCk6CisgICAgICAgICogaHRtbC9IVE1MTElFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxMSUVsZW1lbnQ6OmF0dGFjaCk6CisgICAgICAgICogaHRt
bC9IVE1MT0xpc3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1l
bnQ6OnVwZGF0ZUl0ZW1WYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVu
dDo6cmVjYWxjdWxhdGVJdGVtQ291bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3Vu
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzSW5QcmVPcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpwcmV2aW91c1NpYmxpbmdPclBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpw
YXJlbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRJblByZU9yZGVyKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RJdGVtOjpuZXh0TGlzdEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNMaXN0
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6Y2FsY1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpleHBsaWNpdFZhbHVlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpwcmV2aW91c09yTmV4dEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGlzdEl0ZW06OnVwZGF0ZUxpc3RNYXJrZXJOdW1iZXJzKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaDoKKyAgICAgICAgKFJlbmRlckxpc3RJdGVtKToKKwogMjAx
My0wMy0wNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0NTA1OS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
VHJhdmVyc2FsLmNwcAppbmRleCA0ODJhM2JhYzEyYWNlMjdkZDFiZTg0MWM0ZWMxYjc3ZDZmYzhi
NmU5Li5lZGYwNDliMDg2NzJhNTIxNDM3OWY4YjRmODMzYzM2Y2RkNzU4MDZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGVUcmF2ZXJzYWwuY3BwCkBAIC0yNiwxMCArMjYsMTMzIEBACiAjaW5jbHVkZSAi
Tm9kZVRyYXZlcnNhbC5oIgogCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUg
IlBzZXVkb0VsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworCiBuYW1lc3BhY2UgTm9k
ZVRyYXZlcnNhbCB7CiAKK05vZGUqIG5leHRTaWJsaW5nSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5v
ZGUqIGN1cnJlbnQpCit7CisgICAgTm9kZSogbmV4dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7
CisgICAgaWYgKG5leHQpCisgICAgICAgIHJldHVybiBuZXh0OworICAgIGlmIChjdXJyZW50LT5p
c0FmdGVyUHNldWRvRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBOb2RlKiBwYXJl
bnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJl
dHVybiAwOworICAgIGlmIChjdXJyZW50LT5pc0JlZm9yZVBzZXVkb0VsZW1lbnQoKSkKKyAgICAg
ICAgbmV4dCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOworICAgIGlmICghbmV4dCAmJiBwYXJlbnQt
PmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgbmV4dCA9IHRvRWxlbWVudChwYXJlbnQpLT5wc2V1
ZG9FbGVtZW50KEFGVEVSKTsKKyAgICByZXR1cm4gbmV4dDsKK30KKworTm9kZSogcHJldmlvdXNT
aWJsaW5nSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqIGN1cnJlbnQpCit7CisgICAgTm9kZSog
cHJldmlvdXMgPSBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBpZiAocHJldmlvdXMp
CisgICAgICAgIHJldHVybiBwcmV2aW91czsKKyAgICBpZiAoY3VycmVudC0+aXNCZWZvcmVQc2V1
ZG9FbGVtZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIE5vZGUqIHBhcmVudCA9IGN1cnJl
bnQtPnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaWYgKGN1cnJlbnQtPmlzQWZ0ZXJQc2V1ZG9FbGVtZW50KCkpCisgICAgICAgIHByZXZpb3Vz
ID0gcGFyZW50LT5sYXN0Q2hpbGQoKTsKKyAgICBpZiAoIXByZXZpb3VzICYmIHBhcmVudC0+aXNF
bGVtZW50Tm9kZSgpKQorICAgICAgICBwcmV2aW91cyA9IHRvRWxlbWVudChwYXJlbnQpLT5wc2V1
ZG9FbGVtZW50KEJFRk9SRSk7CisgICAgcmV0dXJuIHByZXZpb3VzOworfQorCitOb2RlKiBmaXJz
dENoaWxkSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqIGN1cnJlbnQpCit7CisgICAgY29uc3Qg
RWxlbWVudCogY3VycmVudEVsZW1lbnQgPSBjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkgPyB0b0Vs
ZW1lbnQoY3VycmVudCkgOiAwOworICAgIE5vZGUqIGZpcnN0ID0gY3VycmVudEVsZW1lbnQgPyBj
dXJyZW50RWxlbWVudC0+cHNldWRvRWxlbWVudChCRUZPUkUpIDogMDsKKyAgICBpZiAoZmlyc3Qp
CisgICAgICAgIHJldHVybiBmaXJzdDsKKyAgICBmaXJzdCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQo
KTsKKyAgICBpZiAoIWZpcnN0ICYmIGN1cnJlbnRFbGVtZW50KQorICAgICAgICBmaXJzdCA9IGN1
cnJlbnRFbGVtZW50LT5wc2V1ZG9FbGVtZW50KEFGVEVSKTsKKyAgICByZXR1cm4gZmlyc3Q7Cit9
CisKK05vZGUqIGxhc3RDaGlsZEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiBjdXJyZW50KQor
eworICAgIGNvbnN0IEVsZW1lbnQqIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudC0+aXNFbGVtZW50
Tm9kZSgpID8gdG9FbGVtZW50KGN1cnJlbnQpIDogMDsKKyAgICBOb2RlKiBsYXN0ID0gY3VycmVu
dEVsZW1lbnQgPyBjdXJyZW50RWxlbWVudC0+cHNldWRvRWxlbWVudChBRlRFUikgOiAwOworICAg
IGlmIChsYXN0KQorICAgICAgICByZXR1cm4gbGFzdDsKKyAgICBsYXN0ID0gY3VycmVudC0+bGFz
dENoaWxkKCk7CisgICAgaWYgKCFsYXN0ICYmIGN1cnJlbnRFbGVtZW50KQorICAgICAgICBsYXN0
ID0gY3VycmVudEVsZW1lbnQtPnBzZXVkb0VsZW1lbnQoQkVGT1JFKTsKKyAgICByZXR1cm4gbGFz
dDsKK30KKworTm9kZSogcHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY29uc3QgTm9kZSogY3VycmVu
dCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBOb2RlKiBwcmV2aW91czsKKyAgICBp
ZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoKHBy
ZXZpb3VzID0gcHJldmlvdXNTaWJsaW5nSW5jbHVkaW5nUHNldWRvKGN1cnJlbnQpKSkgeworICAg
ICAgICB3aGlsZSAobGFzdENoaWxkSW5jbHVkaW5nUHNldWRvKHByZXZpb3VzKSkKKyAgICAgICAg
ICAgIHByZXZpb3VzID0gbGFzdENoaWxkSW5jbHVkaW5nUHNldWRvKHByZXZpb3VzKTsKKyAgICAg
ICAgcmV0dXJuIHByZXZpb3VzOworICAgIH0KKyAgICByZXR1cm4gY3VycmVudC0+cGFyZW50Tm9k
ZSgpOworfQorCitOb2RlKiBuZXh0SW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqIGN1cnJlbnQs
IGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgTm9kZSogbmV4dDsKKyAgICBpZiAoKG5l
eHQgPSBmaXJzdENoaWxkSW5jbHVkaW5nUHNldWRvKGN1cnJlbnQpKSkKKyAgICAgICAgcmV0dXJu
IG5leHQ7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKChuZXh0ID0gbmV4dFNpYmxpbmdJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCkpKQor
ICAgICAgICByZXR1cm4gbmV4dDsKKyAgICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnRO
b2RlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAg
ICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBpZiAoKG5leHQgPSBuZXh0U2libGluZ0luY2x1ZGluZ1BzZXVkbyhjdXJyZW50KSkpCisg
ICAgICAgICAgICByZXR1cm4gbmV4dDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK05vZGUq
IHByZXZpb3VzSW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2RlKiBjdXJy
ZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQoreworICAgIE5vZGUqIHByZXZpb3VzOworICAg
IGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlmICgo
cHJldmlvdXMgPSBwcmV2aW91c1NpYmxpbmdJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCkpKQorICAg
ICAgICByZXR1cm4gcHJldmlvdXM7CisgICAgZm9yIChjdXJyZW50ID0gY3VycmVudC0+cGFyZW50
Tm9kZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgpKSB7CisgICAg
ICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgaWYgKChwcmV2aW91cyA9IHByZXZpb3VzU2libGluZ0luY2x1ZGluZ1BzZXVkbyhjdXJy
ZW50KSkpCisgICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7CisgICAgfQorICAgIHJldHVybiAw
OworfQorCitOb2RlKiBuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbihjb25zdCBO
b2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQoreworICAgIE5vZGUqIG5leHQ7
CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
aWYgKChuZXh0ID0gbmV4dFNpYmxpbmdJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCkpKQorICAgICAg
ICByZXR1cm4gbmV4dDsKKyAgICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCk7
IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYg
KGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBp
ZiAoKG5leHQgPSBuZXh0U2libGluZ0luY2x1ZGluZ1BzZXVkbyhjdXJyZW50KSkpCisgICAgICAg
ICAgICByZXR1cm4gbmV4dDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIE5vZGUqIG5leHRB
bmNlc3RvclNpYmxpbmcoY29uc3QgTm9kZSogY3VycmVudCkKIHsKICAgICBBU1NFUlQoIWN1cnJl
bnQtPm5leHRTaWJsaW5nKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVU
cmF2ZXJzYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmgKaW5kZXggN2Ez
Y2EwZTZmMzNlMGUxZmQ1MjM3YTMxNDMxZmQ1Y2U5NzIwOWMxZC4uNzljMjRjNTYwMDcyMWM5ZmQx
MzhlZDE5ODJkMTkwM2FiOTMwMzg0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGVUcmF2ZXJzYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oCkBA
IC0zNCwxMSArMzQsMTMgQEAgbmFtZXNwYWNlIEVsZW1lbnRUcmF2ZXJzYWwgewogLy8gRmlyc3Qg
ZWxlbWVudCBjaGlsZCBvZiB0aGUgbm9kZS4KIEVsZW1lbnQqIGZpcnN0V2l0aGluKGNvbnN0IE5v
ZGUqKTsKIEVsZW1lbnQqIGZpcnN0V2l0aGluKGNvbnN0IENvbnRhaW5lck5vZGUqKTsKKwogLy8g
UHJlLW9yZGVyIHRyYXZlcnNhbCBza2lwcGluZyBub24tZWxlbWVudCBub2Rlcy4KIEVsZW1lbnQq
IG5leHQoY29uc3QgTm9kZSopOwogRWxlbWVudCogbmV4dChjb25zdCBOb2RlKiwgY29uc3QgTm9k
ZSogc3RheVdpdGhpbik7CiBFbGVtZW50KiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUqKTsKIEVs
ZW1lbnQqIG5leHQoY29uc3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4p
OworCiAvLyBMaWtlIG5leHQsIGJ1dCBza2lwcyBjaGlsZHJlbi4KIEVsZW1lbnQqIG5leHRTa2lw
cGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqKTsKIEVsZW1lbnQqIG5leHRTa2lwcGluZ0NoaWxkcmVu
KGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKQEAgLTc3LDYgKzc5LDE4IEBA
IE5vZGUqIG5leHRQb3N0T3JkZXIoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4g
PSAwKTsKIE5vZGUqIHByZXZpb3VzUG9zdE9yZGVyKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBz
dGF5V2l0aGluID0gMCk7CiBOb2RlKiBwcmV2aW91c1NraXBwaW5nQ2hpbGRyZW5Qb3N0T3JkZXIo
Y29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKTsKIAorLy8gUHJlLW9yZGVy
IHRyYXZlcnNhbCBpbmNsdWRpbmcgdGhlIHBzZXVkby1lbGVtZW50cy4KK05vZGUqIHByZXZpb3Vz
SW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiA9IDApOworTm9kZSogbmV4
dEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogPSAwKTsKK05vZGUqIHBy
ZXZpb3VzSW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2RlKiwgY29uc3Qg
Tm9kZSogPSAwKTsKK05vZGUqIG5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNv
bnN0IE5vZGUqLCBjb25zdCBOb2RlKiA9IDApOworCisvLyBUcmF2ZXJzYWwgaGVscGVycyBhd2Fy
ZSBvZiBwc2V1ZG8tZWxlbWVudHMuCitOb2RlKiBuZXh0U2libGluZ0luY2x1ZGluZ1BzZXVkbyhj
b25zdCBOb2RlKik7CitOb2RlKiBwcmV2aW91c1NpYmxpbmdJbmNsdWRpbmdQc2V1ZG8oY29uc3Qg
Tm9kZSopOworTm9kZSogZmlyc3RDaGlsZEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKik7CitO
b2RlKiBsYXN0Q2hpbGRJbmNsdWRpbmdQc2V1ZG8oY29uc3QgTm9kZSopOworCiB9CiAKIG5hbWVz
cGFjZSBFbGVtZW50VHJhdmVyc2FsIHsKQEAgLTEzNSw2ICsxNDksNyBAQCBpbmxpbmUgRWxlbWVu
dCogdHJhdmVyc2VOZXh0RWxlbWVudFNraXBwaW5nQ2hpbGRyZW5UZW1wbGF0ZShOb2RlVHlwZSog
Y3VycmVudCwgYwogfQogaW5saW5lIEVsZW1lbnQqIG5leHRTa2lwcGluZ0NoaWxkcmVuKGNvbnN0
IENvbnRhaW5lck5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJu
IHRyYXZlcnNlTmV4dEVsZW1lbnRTa2lwcGluZ0NoaWxkcmVuVGVtcGxhdGUoY3VycmVudCwgc3Rh
eVdpdGhpbik7IH0KIGlubGluZSBFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGlsZHJlbihjb25zdCBO
b2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKSB7IHJldHVybiB0cmF2ZXJzZU5l
eHRFbGVtZW50U2tpcHBpbmdDaGlsZHJlblRlbXBsYXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4pOyB9
CisKIH0KIAogbmFtZXNwYWNlIE5vZGVUcmF2ZXJzYWwgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExJ
RWxlbWVudC5jcHAKaW5kZXggNmQwYTUyM2U2ZWY5OGQzYzNkZjA4OGQ2ZjM0OTI0M2Q0YWRkZTJl
Zi4uMmVmMGRkNzZhZWExNmY5NWViZGZjMjVlNTk2YTAzMTAyM2NkNjZjZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxMSUVsZW1lbnQuY3BwCkBAIC05MiwyMyArOTIsMjMgQEAgdm9pZCBIVE1MTElF
bGVtZW50OjphdHRhY2goKQogICAgIEhUTUxFbGVtZW50OjphdHRhY2goKTsKIAogICAgIGlmIChy
ZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzTGlzdEl0ZW0oKSkgewotICAgICAgICBSZW5kZXJM
aXN0SXRlbSogcmVuZGVyID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcigpKTsKKyAgICAgICAg
UmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtUmVuZGVyZXIgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRl
cmVyKCkpOwogCiAgICAgICAgIC8vIEZpbmQgdGhlIGVuY2xvc2luZyBsaXN0IG5vZGUuCi0gICAg
ICAgIE5vZGUqIGxpc3ROb2RlID0gMDsKLSAgICAgICAgRXZlbnRQYXRoV2Fsa2VyIHdhbGtlcih0
aGlzKTsKKyAgICAgICAgRWxlbWVudCogbGlzdE5vZGUgPSAwOworICAgICAgICBFbGVtZW50KiBj
dXJyZW50ID0gdGhpczsKICAgICAgICAgd2hpbGUgKCFsaXN0Tm9kZSkgewotICAgICAgICAgICAg
d2Fsa2VyLm1vdmVUb1BhcmVudCgpOwotICAgICAgICAgICAgaWYgKCF3YWxrZXIubm9kZSgpKQor
ICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAg
ICAgIGlmICghY3VycmVudCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlm
ICh3YWxrZXIubm9kZSgpLT5oYXNUYWdOYW1lKHVsVGFnKSB8fCB3YWxrZXIubm9kZSgpLT5oYXNU
YWdOYW1lKG9sVGFnKSkKLSAgICAgICAgICAgICAgICBsaXN0Tm9kZSA9IHdhbGtlci5ub2RlKCk7
CisgICAgICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZSh1bFRhZykgfHwgY3VycmVudC0+
aGFzVGFnTmFtZShvbFRhZykpCisgICAgICAgICAgICAgICAgbGlzdE5vZGUgPSBjdXJyZW50Owog
ICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBhIGxpc3QsIHRlbGwgdGhl
IHJlbmRlcmVyIHNvIGl0IGNhbiBwb3NpdGlvbiB1cyBpbnNpZGUuCiAgICAgICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8gY2hhbmdlIG91ciBzdHlsZSB0byBzYXkgImluc2lkZSIgc2luY2UgdGhhdCB3
b3VsZCBhZmZlY3QgbmVzdGVkIG5vZGVzLgogICAgICAgICBpZiAoIWxpc3ROb2RlKQotICAgICAg
ICAgICAgcmVuZGVyLT5zZXROb3RJbkxpc3QodHJ1ZSk7CisgICAgICAgICAgICBsaXN0SXRlbVJl
bmRlcmVyLT5zZXROb3RJbkxpc3QodHJ1ZSk7CiAKICAgICAgICAgcGFyc2VWYWx1ZShmYXN0R2V0
QXR0cmlidXRlKHZhbHVlQXR0cikpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPTGlz
dEVsZW1lbnQuY3BwCmluZGV4IDQ1ZmU0MjZmNDcyZmM5NDkzYmJlMWY0ZmMyMDgwODg4MGVmZWE3
ZGQuLjM5NmUzNDA0ZmU5MzE2NDY2MjAxOGRhMjU0ZDAwOGI0ZmU1NGI1OGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQg
SFRNTE9MaXN0RWxlbWVudDo6c2V0U3RhcnQoaW50IHN0YXJ0KQogCiB2b2lkIEhUTUxPTGlzdEVs
ZW1lbnQ6OnVwZGF0ZUl0ZW1WYWx1ZXMoKQogewotICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0qIGxp
c3RJdGVtID0gUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbShyZW5kZXJlcigpKTsgbGlzdEl0
ZW07IGxpc3RJdGVtID0gUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbShyZW5kZXJlcigpLCBs
aXN0SXRlbSkpCisgICAgZm9yIChSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0gPSBSZW5kZXJMaXN0
SXRlbTo6bmV4dExpc3RJdGVtKHRoaXMpOyBsaXN0SXRlbTsgbGlzdEl0ZW0gPSBSZW5kZXJMaXN0
SXRlbTo6bmV4dExpc3RJdGVtKHRoaXMsIGxpc3RJdGVtKSkKICAgICAgICAgbGlzdEl0ZW0tPnVw
ZGF0ZVZhbHVlKCk7CiB9CiAKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIEhUTUxPTGlzdEVsZW1l
bnQ6OnJlY2FsY3VsYXRlSXRlbUNvdW50KCkKIHsKICAgICBtX2l0ZW1Db3VudCA9IDA7CiAKLSAg
ICBmb3IgKFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSA9IFJlbmRlckxpc3RJdGVtOjpuZXh0TGlz
dEl0ZW0ocmVuZGVyZXIoKSk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IFJlbmRlckxpc3RJdGVtOjpu
ZXh0TGlzdEl0ZW0ocmVuZGVyZXIoKSwgbGlzdEl0ZW0pKQorICAgIGZvciAoUmVuZGVyTGlzdEl0
ZW0qIGxpc3RJdGVtID0gUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbSh0aGlzKTsgbGlzdEl0
ZW07IGxpc3RJdGVtID0gUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbSh0aGlzLCBsaXN0SXRl
bSkpCiAgICAgICAgIG1faXRlbUNvdW50Kys7CiAKICAgICBtX3Nob3VsZFJlY2FsY3VsYXRlSXRl
bUNvdW50ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQ291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5j
cHAKaW5kZXggMzRiMmNiODUzMGUwMzU0YzBjOTZmNzY1MGU2YjU3ZTA5M2RhOThlZi4uNWQzODQ5
ZDcxYTU2NWQ0NjA1NjA4OTIzYmI4ZjhmNTcxZTczMzZlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcApAQCAtNTcsOTQgKzU3LDMzIEBAIHN0YXRpYyBDb3Vu
dGVyTWFwcyYgY291bnRlck1hcHMoKQogLy8gaW5jbHVkaW5nIHBzZXVkbyBlbGVtZW50cyBhcyBk
ZWZpbmVkIGluIENTUyAyLjEuCiBzdGF0aWMgUmVuZGVyT2JqZWN0KiBwcmV2aW91c0luUHJlT3Jk
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgRWxlbWVudCogcGFyZW50Owot
ICAgIEVsZW1lbnQqIHNpYmxpbmc7Ci0gICAgc3dpdGNoIChvYmplY3QtPnN0eWxlKCktPnN0eWxl
VHlwZSgpKSB7Ci0gICAgY2FzZSBOT1BTRVVETzoKLSAgICAgICAgQVNTRVJUKCFvYmplY3QtPmlz
QW5vbnltb3VzKCkpOwotICAgICAgICBwYXJlbnQgPSB0b0VsZW1lbnQob2JqZWN0LT5ub2RlKCkp
OwotICAgICAgICBzaWJsaW5nID0gcGFyZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7Ci0g
ICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50RWxlbWVudCgpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEJFRk9SRToKLSAgICAgICAgcmV0dXJuIG9iamVjdC0+Z2VuZXJhdGluZ05vZGUo
KS0+cmVuZGVyZXIoKTsgLy8gSXQgaXMgYWx3YXlzIHRoZSBnZW5lcmF0aW5nIG5vZGUncyByZW5k
ZXJlcgotICAgIGNhc2UgQUZURVI6Ci0gICAgICAgIHBhcmVudCA9IHRvRWxlbWVudChvYmplY3Qt
PmdlbmVyYXRpbmdOb2RlKCkpOwotICAgICAgICBzaWJsaW5nID0gcGFyZW50LT5sYXN0RWxlbWVu
dENoaWxkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgd2hpbGUgKHNpYmxp
bmcpIHsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBzaWJsaW5nLT5yZW5k
ZXJlcigpKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBhZnRlciA9IHNpYmxpbmct
PnBzZXVkb0VsZW1lbnRSZW5kZXJlcihBRlRFUikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFm
dGVyOwotICAgICAgICAgICAgcGFyZW50ID0gc2libGluZzsKLSAgICAgICAgICAgIHNpYmxpbmcg
PSBzaWJsaW5nLT5sYXN0RWxlbWVudENoaWxkKCk7Ci0gICAgICAgICAgICBpZiAoIXNpYmxpbmcp
IHsKLSAgICAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBiZWZvcmUgPSB0b0VsZW1lbnQo
cmVuZGVyZXItPm5vZGUoKSktPnBzZXVkb0VsZW1lbnRSZW5kZXJlcihCRUZPUkUpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYmVmb3JlOwotICAgICAgICAgICAgICAgIHJldHVybiByZW5k
ZXJlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzaWJsaW5n
ID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpOworICAgIEVsZW1lbnQqIHNlbGYg
PSB0b0VsZW1lbnQob2JqZWN0LT5ub2RlKCkpOworICAgIE5vZGUqIHByZXZpb3VzID0gTm9kZVRy
YXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oc2VsZik7CisgICAgd2hpbGUgKHByZXZp
b3VzICYmICghcHJldmlvdXMtPnJlbmRlcmVyKCkgfHwgIXByZXZpb3VzLT5pc0VsZW1lbnROb2Rl
KCkpKSB7CisgICAgICAgIHByZXZpb3VzID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRp
bmdQc2V1ZG8ocHJldmlvdXMpOwogICAgIH0KLSAgICBpZiAoIXBhcmVudCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogYmVmb3JlID0gcGFyZW50LT5wc2V1ZG9FbGVt
ZW50UmVuZGVyZXIoQkVGT1JFKSkKLSAgICAgICAgcmV0dXJuIGJlZm9yZTsKLSAgICByZXR1cm4g
cGFyZW50LT5yZW5kZXJlcigpOworICAgIHJldHVybiBwcmV2aW91cyA/IHByZXZpb3VzLT5yZW5k
ZXJlcigpIDogMDsKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJlbmRlcmVy
IHRyZWUgaW4gdGhlIG9yZGVyIG9mIHRoZSBET00gdHJlZQogLy8gaW5jbHVkaW5nIHBzZXVkbyBl
bGVtZW50cyBhcyBkZWZpbmVkIGluIENTUyAyLjEuCiBzdGF0aWMgUmVuZGVyT2JqZWN0KiBwcmV2
aW91c1NpYmxpbmdPclBhcmVudChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBF
bGVtZW50KiBwYXJlbnQ7Ci0gICAgRWxlbWVudCogc2libGluZzsKLSAgICBzd2l0Y2ggKG9iamVj
dC0+c3R5bGUoKS0+c3R5bGVUeXBlKCkpIHsKLSAgICBjYXNlIE5PUFNFVURPOgotICAgICAgICBB
U1NFUlQoIW9iamVjdC0+aXNBbm9ueW1vdXMoKSk7Ci0gICAgICAgIHBhcmVudCA9IHRvRWxlbWVu
dChvYmplY3QtPm5vZGUoKSk7Ci0gICAgICAgIHNpYmxpbmcgPSBwYXJlbnQtPnByZXZpb3VzRWxl
bWVudFNpYmxpbmcoKTsKLSAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkVGT1JFOgotICAgICAgICByZXR1cm4gb2JqZWN0
LT5nZW5lcmF0aW5nTm9kZSgpLT5yZW5kZXJlcigpOyAvLyBJdCBpcyBhbHdheXMgdGhlIGdlbmVy
YXRpbmcgbm9kZSdzIHJlbmRlcmVyCi0gICAgY2FzZSBBRlRFUjoKLSAgICAgICAgcGFyZW50ID0g
dG9FbGVtZW50KG9iamVjdC0+Z2VuZXJhdGluZ05vZGUoKSk7Ci0gICAgICAgIHNpYmxpbmcgPSBw
YXJlbnQtPmxhc3RFbGVtZW50Q2hpbGQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICB3aGlsZSAoc2libGluZykgewotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IHNpYmxpbmctPnJlbmRlcmVyKCkpIC8vIFRoaXMgc2tpcHMgaW52aXNpYmxlIG5vZGVzCi0g
ICAgICAgICAgICByZXR1cm4gcmVuZGVyZXI7Ci0gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLT5w
cmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7CisgICAgRWxlbWVudCogc2VsZiA9IHRvRWxlbWVudChv
YmplY3QtPm5vZGUoKSk7CisgICAgTm9kZSogcHJldmlvdXMgPSBOb2RlVHJhdmVyc2FsOjpwcmV2
aW91c1NpYmxpbmdJbmNsdWRpbmdQc2V1ZG8oc2VsZik7CisgICAgd2hpbGUgKHByZXZpb3VzICYm
ICghcHJldmlvdXMtPnJlbmRlcmVyKCkgfHwgIXByZXZpb3VzLT5pc0VsZW1lbnROb2RlKCkpKSB7
CisgICAgICAgIHByZXZpb3VzID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nSW5jbHVk
aW5nUHNldWRvKHByZXZpb3VzKTsKICAgICB9Ci0gICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIGlmIChSZW5kZXJPYmplY3QqIGJlZm9yZSA9IHBhcmVudC0+cHNldWRvRWxl
bWVudFJlbmRlcmVyKEJFRk9SRSkpCi0gICAgICAgIHJldHVybiBiZWZvcmU7Ci0gICAgcmV0dXJu
IHBhcmVudC0+cmVuZGVyZXIoKTsKKyAgICBpZiAocHJldmlvdXMpCisgICAgICAgIHJldHVybiBw
cmV2aW91cy0+cmVuZGVyZXIoKTsKKyAgICBwcmV2aW91cyA9IHNlbGYtPnBhcmVudEVsZW1lbnQo
KTsKKyAgICByZXR1cm4gcHJldmlvdXMgPyBwcmV2aW91cy0+cmVuZGVyZXIoKSA6IDA7CiB9CiAK
IHN0YXRpYyBFbGVtZW50KiBwYXJlbnRFbGVtZW50KFJlbmRlck9iamVjdCogb2JqZWN0KQogewot
ICAgIHN3aXRjaCAob2JqZWN0LT5zdHlsZSgpLT5zdHlsZVR5cGUoKSkgewotICAgIGNhc2UgTk9Q
U0VVRE86Ci0gICAgICAgIEFTU0VSVCghb2JqZWN0LT5pc0Fub255bW91cygpKTsKLSAgICAgICAg
cmV0dXJuIHRvRWxlbWVudChvYmplY3QtPm5vZGUoKSktPnBhcmVudEVsZW1lbnQoKTsKLSAgICBj
YXNlIEJFRk9SRToKLSAgICBjYXNlIEFGVEVSOgotICAgICAgICByZXR1cm4gdG9FbGVtZW50KG9i
amVjdC0+Z2VuZXJhdGluZ05vZGUoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBFbGVtZW50KiBzZWxm
ID0gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgpKTsKKyAgICByZXR1cm4gc2VsZi0+cGFyZW50RWxl
bWVudCgpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgYXJlUmVuZGVyZXJzRWxlbWVudHNTaWJs
aW5ncyhSZW5kZXJPYmplY3QqIGZpcnN0LCBSZW5kZXJPYmplY3QqIHNlY29uZCkKQEAgLTE1Niw0
NCArOTUsMTMgQEAgc3RhdGljIGlubGluZSBib29sIGFyZVJlbmRlcmVyc0VsZW1lbnRzU2libGlu
Z3MoUmVuZGVyT2JqZWN0KiBmaXJzdCwgUmVuZGVyT2JqZWMKIC8vIGluY2x1ZGluZyBwc2V1ZG8g
ZWxlbWVudHMgYXMgZGVmaW5lZCBpbiBDU1MgMi4xLgogc3RhdGljIFJlbmRlck9iamVjdCogbmV4
dEluUHJlT3JkZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEVsZW1lbnQqIHN0
YXlXaXRoaW4sIGJvb2wgc2tpcERlc2NlbmRhbnRzID0gZmFsc2UpCiB7Ci0gICAgRWxlbWVudCog
c2VsZjsKLSAgICBFbGVtZW50KiBjaGlsZDsKLSAgICBzZWxmID0gdG9FbGVtZW50KG9iamVjdC0+
Z2VuZXJhdGluZ05vZGUoKSk7Ci0gICAgaWYgKHNraXBEZXNjZW5kYW50cykKLSAgICAgICAgZ290
byBuZXh0c2libGluZzsKLSAgICBzd2l0Y2ggKG9iamVjdC0+c3R5bGUoKS0+c3R5bGVUeXBlKCkp
IHsKLSAgICBjYXNlIE5PUFNFVURPOgotICAgICAgICBBU1NFUlQoIW9iamVjdC0+aXNBbm9ueW1v
dXMoKSk7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGJlZm9yZSA9IHNlbGYtPnBzZXVkb0Vs
ZW1lbnRSZW5kZXJlcihCRUZPUkUpKQotICAgICAgICAgICAgcmV0dXJuIGJlZm9yZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBCRUZPUkU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQUZU
RVI6Ci0gICAgICAgIGdvdG8gbmV4dHNpYmxpbmc7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBjaGlsZCA9
IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHNlbGYpOwotICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBjaGlsZC0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVu
ZGVyZXI7Ci0gICAgICAgICAgICBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lwcGlu
Z0NoaWxkcmVuKGNoaWxkLCBzZWxmKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoUmVuZGVyT2Jq
ZWN0KiBhZnRlciA9IHNlbGYtPnBzZXVkb0VsZW1lbnRSZW5kZXJlcihBRlRFUikpCi0gICAgICAg
ICAgICByZXR1cm4gYWZ0ZXI7Ci1uZXh0c2libGluZzoKLSAgICAgICAgaWYgKHNlbGYgPT0gc3Rh
eVdpdGhpbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjaGlsZCA9IEVsZW1lbnRU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHNlbGYpOwotICAgICAgICBzZWxmID0gc2Vs
Zi0+cGFyZW50RWxlbWVudCgpOwotICAgICAgICBpZiAoIXNlbGYpIHsKLSAgICAgICAgICAgIEFT
U0VSVCghY2hpbGQpOyAvLyBXZSBjYW4gb25seSByZWFjaCB0aGlzIGlmIHdlIGFyZSBzZWFyY2hp
bmcgYmV5b25kIHRoZSByb290IGVsZW1lbnQKLSAgICAgICAgICAgIHJldHVybiAwOyAvLyAgd2hp
Y2ggY2Fubm90IGhhdmUgc2libGluZ3MKLSAgICAgICAgfQorICAgIEVsZW1lbnQqIHNlbGYgPSB0
b0VsZW1lbnQob2JqZWN0LT5ub2RlKCkpOworICAgIE5vZGUqIG5leHQgPSBza2lwRGVzY2VuZGFu
dHMgPyBOb2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbihz
ZWxmLCBzdGF5V2l0aGluKSA6IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oc2Vs
Ziwgc3RheVdpdGhpbik7CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIG9wdGltaXplZCB0byBz
a2lwIHRoZSBjaGlsZHJlbiBvZiB0aGUgZWxlbWVudHMgd2l0aG91dCBhIHJlbmRlcmVyPworICAg
IHdoaWxlIChuZXh0ICYmICghbmV4dC0+cmVuZGVyZXIoKSB8fCAhbmV4dC0+aXNFbGVtZW50Tm9k
ZSgpKSkgeworICAgICAgICBuZXh0ID0gc2tpcERlc2NlbmRhbnRzID8gTm9kZVRyYXZlcnNhbDo6
bmV4dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4obmV4dCwgc3RheVdpdGhpbikgOiBO
b2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKG5leHQsIHN0YXlXaXRoaW4pOwogICAg
IH0KKyAgICByZXR1cm4gbmV4dCA/IG5leHQtPnJlbmRlcmVyKCkgOiAwOwogfQogCiBzdGF0aWMg
Ym9vbCBwbGFuQ291bnRlcihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgQXRvbWljU3RyaW5n
JiBpZGVudGlmaWVyLCBib29sJiBpc1Jlc2V0LCBpbnQmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKaW5kZXggZjJjMmZiMzI1NmQ5ZjE5NjE5NmNl
ZDc1Y2YxZDZjODUyNjJkMjA3OC4uN2NhNTRmZWQxNGFiYWYwYWY0ZWRmN2IwN2Y0ODVjNWJmZDdk
OWVlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT0xpc3RFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCkBAIC05NiwxOCArOTcs
MTYgQEAgc3RhdGljIGJvb2wgaXNMaXN0KE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIChub2RlLT5o
YXNUYWdOYW1lKHVsVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKG9sVGFnKSk7CiB9CiAKKy8vIFJl
dHVybnMgdGhlIGVuY2xvc2luZyBsaXN0IHdpdGggcmVzcGVjdCB0byB0aGUgRE9NIG9yZGVyLgog
c3RhdGljIE5vZGUqIGVuY2xvc2luZ0xpc3QoY29uc3QgUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVt
KQogeworICAgIE5vZGUqIGxpc3RJdGVtTm9kZSA9IGxpc3RJdGVtLT5ub2RlKCk7CiAgICAgTm9k
ZSogZmlyc3ROb2RlID0gMDsKLQotICAgIGZvciAoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGxpc3RJdGVtLT5wYXJlbnQoKTsgcmVuZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPnBh
cmVudCgpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgpOwotICAgICAg
ICBpZiAobm9kZSkgewotICAgICAgICAgICAgaWYgKGlzTGlzdChub2RlKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIGlmICghZmlyc3ROb2RlKQotICAgICAgICAg
ICAgICAgIGZpcnN0Tm9kZSA9IG5vZGU7Ci0gICAgICAgIH0KKyAgICBmb3IgKE5vZGUqIHBhcmVu
dCA9IGxpc3RJdGVtTm9kZS0+cGFyZW50Tm9kZSgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+
cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChpc0xpc3QocGFyZW50KSkKKyAgICAgICAgICAg
IHJldHVybiBwYXJlbnQ7CisgICAgICAgIGlmICghZmlyc3ROb2RlKQorICAgICAgICAgICAgZmly
c3ROb2RlID0gcGFyZW50OwogICAgIH0KIAogICAgIC8vIElmIHRoZXJlJ3Mgbm8gYWN0dWFsIDx1
bD4gb3IgPG9sPiBsaXN0IGVsZW1lbnQsIHRoZW4gdGhlIGZpcnN0IGZvdW5kCkBAIC0xMTYsNDIg
KzExNSw1MSBAQCBzdGF0aWMgTm9kZSogZW5jbG9zaW5nTGlzdChjb25zdCBSZW5kZXJMaXN0SXRl
bSogbGlzdEl0ZW0pCiAgICAgcmV0dXJuIGZpcnN0Tm9kZTsKIH0KIAotUmVuZGVyTGlzdEl0ZW0q
IFJlbmRlckxpc3RJdGVtOjpuZXh0TGlzdEl0ZW0oUmVuZGVyT2JqZWN0KiBsaXN0LCBjb25zdCBS
ZW5kZXJMaXN0SXRlbSogaXRlbSkKKy8vIFJldHVybnMgdGhlIG5leHQgbGlzdCBpdGVtIHdpdGgg
cmVzcGVjdCB0byB0aGUgRE9NIG9yZGVyLgorUmVuZGVyTGlzdEl0ZW0qIFJlbmRlckxpc3RJdGVt
OjpuZXh0TGlzdEl0ZW0oTm9kZSogbGlzdE5vZGUsIGNvbnN0IFJlbmRlckxpc3RJdGVtKiBpdGVt
KQogewotICAgIGlmICghbGlzdCkKKyAgICBpZiAoIWxpc3ROb2RlKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdGVtID8gaXRlbS0+bmV4dEluUHJl
T3JkZXIobGlzdCkgOiBsaXN0LT5uZXh0SW5QcmVPcmRlcihsaXN0KTsKLSAgICB3aGlsZSAocmVu
ZGVyZXIpIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlKCkgJiYgaXNMaXN0KHJlbmRlcmVy
LT5ub2RlKCkpKSB7CisgICAgTm9kZSogY3VycmVudCA9IGl0ZW0gPyBpdGVtLT5ub2RlKCkgOiBs
aXN0Tm9kZTsKKyAgICBjdXJyZW50ID0gTm9kZVRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVk
byhjdXJyZW50LCBsaXN0Tm9kZSk7CisKKyAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICBp
ZiAoaXNMaXN0KGN1cnJlbnQpKSB7CiAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCBhIG5lc3Rl
ZCwgaW5kZXBlbmRlbnQgbGlzdDogbm90aGluZyB0byBkbyBoZXJlLgotICAgICAgICAgICAgcmVu
ZGVyZXIgPSByZW5kZXJlci0+bmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKGxpc3QpOworICAg
ICAgICAgICAgY3VycmVudCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lw
cGluZ0NoaWxkcmVuKGN1cnJlbnQsIGxpc3ROb2RlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpCisgICAgICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50LT5yZW5kZXJlcigpOworICAgICAgICBp
ZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkKICAgICAgICAgICAgIHJldHVy
biB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKTsKIAotICAgICAgICByZW5kZXJlciA9IHJlbmRl
cmVyLT5uZXh0SW5QcmVPcmRlcihsaXN0KTsKKyAgICAgICAgLy8gRklYTUU6IENhbiB0aGlzIGJl
IG9wdGltaXplZCB0byBza2lwIHRoZSBjaGlsZHJlbiBvZiB0aGUgZWxlbWVudHMgd2l0aG91dCBh
IHJlbmRlcmVyPworICAgICAgICBjdXJyZW50ID0gTm9kZVRyYXZlcnNhbDo6bmV4dEluY2x1ZGlu
Z1BzZXVkbyhjdXJyZW50LCBsaXN0Tm9kZSk7CiAgICAgfQorCiAgICAgcmV0dXJuIDA7CiB9CiAK
LXN0YXRpYyBSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNMaXN0SXRlbShSZW5kZXJPYmplY3QqIGxp
c3QsIGNvbnN0IFJlbmRlckxpc3RJdGVtKiBpdGVtKQorLy8gUmV0dXJucyB0aGUgcHJldmlvdXMg
bGlzdCBpdGVtIHdpdGggcmVzcGVjdCB0byB0aGUgRE9NIG9yZGVyLgorc3RhdGljIFJlbmRlckxp
c3RJdGVtKiBwcmV2aW91c0xpc3RJdGVtKE5vZGUqIGxpc3ROb2RlLCBjb25zdCBSZW5kZXJMaXN0
SXRlbSogaXRlbSkKIHsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdGVtLT5w
cmV2aW91c0luUHJlT3JkZXIoKTsgcmVuZGVyZXIgJiYgcmVuZGVyZXIgIT0gbGlzdDsgcmVuZGVy
ZXIgPSByZW5kZXJlci0+cHJldmlvdXNJblByZU9yZGVyKCkpIHsKLSAgICAgICAgaWYgKCFyZW5k
ZXJlci0+aXNMaXN0SXRlbSgpKQorICAgIE5vZGUqIGN1cnJlbnQgPSBpdGVtLT5ub2RlKCk7Cisg
ICAgZm9yIChjdXJyZW50ID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8o
Y3VycmVudCwgbGlzdE5vZGUpOyBjdXJyZW50OyBjdXJyZW50ID0gTm9kZVRyYXZlcnNhbDo6cHJl
dmlvdXNJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgbGlzdE5vZGUpKSB7CisgICAgICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50LT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIXJl
bmRlcmVyIHx8IChyZW5kZXJlciAmJiAhcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgTm9kZSogb3RoZXJMaXN0ID0gZW5jbG9zaW5nTGlzdCh0
b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKSk7CiAgICAgICAgIC8vIFRoaXMgaXRlbSBpcyBwYXJ0
IG9mIG91ciBjdXJyZW50IGxpc3QsIHNvIGl0J3Mgd2hhdCB3ZSdyZSBsb29raW5nIGZvci4KLSAg
ICAgICAgaWYgKGxpc3QtPm5vZGUoKSA9PSBvdGhlckxpc3QpCisgICAgICAgIGlmIChsaXN0Tm9k
ZSA9PSBvdGhlckxpc3QpCiAgICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJMaXN0SXRlbShyZW5k
ZXJlcik7CiAgICAgICAgIC8vIFdlIGZvdW5kIG91cnNlbGYgaW5zaWRlIGFub3RoZXIgbGlzdDsg
bGV0cyBza2lwIHRoZSByZXN0IG9mIGl0LgotICAgICAgICAvLyBVc2UgbmV4dEluUHJlT3JkZXIo
KSBoZXJlIGJlY2F1c2UgdGhlIG90aGVyIGxpc3QgaXRzZWxmIG1heSBhY3R1YWxseQorICAgICAg
ICAvLyBVc2UgbmV4dEluY2x1ZGluZ1BzZXVkbygpIGhlcmUgYmVjYXVzZSB0aGUgb3RoZXIgbGlz
dCBpdHNlbGYgbWF5IGFjdHVhbGx5CiAgICAgICAgIC8vIGJlIGEgbGlzdCBpdGVtIGl0c2VsZi4g
V2UgbmVlZCB0byBleGFtaW5lIGl0LCBzbyB3ZSBkbyB0aGlzIHRvIGNvdW50ZXJhY3QKLSAgICAg
ICAgLy8gdGhlIHByZXZpb3VzSW5QcmVPcmRlcigpIHRoYXQgd2lsbCBiZSBkb25lIGJ5IHRoZSBs
b29wLgorICAgICAgICAvLyB0aGUgcHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oKSB0aGF0IHdpbGwg
YmUgZG9uZSBieSB0aGUgbG9vcC4KICAgICAgICAgaWYgKG90aGVyTGlzdCkKLSAgICAgICAgICAg
IHJlbmRlcmVyID0gb3RoZXJMaXN0LT5yZW5kZXJlcigpLT5uZXh0SW5QcmVPcmRlcigpOworICAg
ICAgICAgICAgY3VycmVudCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8ob3Ro
ZXJMaXN0KTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xNjIsNyArMTcwLDYgQEAgaW5s
aW5lIGludCBSZW5kZXJMaXN0SXRlbTo6Y2FsY1ZhbHVlKCkgY29uc3QKICAgICAgICAgcmV0dXJu
IG1fZXhwbGljaXRWYWx1ZTsKIAogICAgIE5vZGUqIGxpc3QgPSBlbmNsb3NpbmdMaXN0KHRoaXMp
OwotICAgIFJlbmRlck9iamVjdCogbGlzdFJlbmRlcmVyID0gbGlzdCA/IGxpc3QtPnJlbmRlcmVy
KCkgOiAwOwogICAgIEhUTUxPTGlzdEVsZW1lbnQqIG9MaXN0RWxlbWVudCA9IChsaXN0ICYmIGxp
c3QtPmhhc1RhZ05hbWUob2xUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnQqPihs
aXN0KSA6IDA7CiAgICAgaW50IHZhbHVlU3RlcCA9IDE7CiAgICAgaWYgKG9MaXN0RWxlbWVudCAm
JiBvTGlzdEVsZW1lbnQtPmlzUmV2ZXJzZWQoKSkKQEAgLTE3MCw3ICsxNzcsNyBAQCBpbmxpbmUg
aW50IFJlbmRlckxpc3RJdGVtOjpjYWxjVmFsdWUoKSBjb25zdAogCiAgICAgLy8gRklYTUU6IFRo
aXMgcmVjdXJzZXMgdG8gYSBwb3NzaWJsZSBkZXB0aCBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0
LgogICAgIC8vIFRoYXQncyBub3QgZ29vZCAtLSB3ZSBuZWVkIHRvIGNoYW5nZSB0aGlzIHRvIGFu
IGl0ZXJhdGl2ZSBhbGdvcml0aG0uCi0gICAgaWYgKFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c0l0
ZW0gPSBwcmV2aW91c0xpc3RJdGVtKGxpc3RSZW5kZXJlciwgdGhpcykpCisgICAgaWYgKFJlbmRl
ckxpc3RJdGVtKiBwcmV2aW91c0l0ZW0gPSBwcmV2aW91c0xpc3RJdGVtKGxpc3QsIHRoaXMpKQog
ICAgICAgICByZXR1cm4gcHJldmlvdXNJdGVtLT52YWx1ZSgpICsgdmFsdWVTdGVwOwogCiAgICAg
aWYgKG9MaXN0RWxlbWVudCkKQEAgLTQyNywxMCArNDM0LDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRl
bTo6ZXhwbGljaXRWYWx1ZUNoYW5nZWQoKQogICAgIGlmIChtX21hcmtlcikKICAgICAgICAgbV9t
YXJrZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIE5vZGUqIGxp
c3ROb2RlID0gZW5jbG9zaW5nTGlzdCh0aGlzKTsKLSAgICBSZW5kZXJPYmplY3QqIGxpc3RSZW5k
ZXJlciA9IDA7Ci0gICAgaWYgKGxpc3ROb2RlKQotICAgICAgICBsaXN0UmVuZGVyZXIgPSBsaXN0
Tm9kZS0+cmVuZGVyZXIoKTsKLSAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBpdGVtID0gdGhpczsg
aXRlbTsgaXRlbSA9IG5leHRMaXN0SXRlbShsaXN0UmVuZGVyZXIsIGl0ZW0pKQorICAgIGZvciAo
UmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSB0aGlzOyBpdGVtOyBpdGVtID0gbmV4dExpc3RJdGVtKGxp
c3ROb2RlLCBpdGVtKSkKICAgICAgICAgaXRlbS0+dXBkYXRlVmFsdWUoKTsKIH0KIApAQCAtNDU3
LDcgKzQ2MSw3IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OmNsZWFyRXhwbGljaXRWYWx1ZSgpCiAg
ICAgZXhwbGljaXRWYWx1ZUNoYW5nZWQoKTsKIH0KIAotc3RhdGljIFJlbmRlckxpc3RJdGVtKiBw
cmV2aW91c09yTmV4dEl0ZW0oYm9vbCBpc0xpc3RSZXZlcnNlZCwgUmVuZGVyT2JqZWN0KiBsaXN0
LCBSZW5kZXJMaXN0SXRlbSogaXRlbSkKK3N0YXRpYyBSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNP
ck5leHRJdGVtKGJvb2wgaXNMaXN0UmV2ZXJzZWQsIE5vZGUqIGxpc3QsIFJlbmRlckxpc3RJdGVt
KiBpdGVtKQogewogICAgIHJldHVybiBpc0xpc3RSZXZlcnNlZCA/IHByZXZpb3VzTGlzdEl0ZW0o
bGlzdCwgaXRlbSkgOiBSZW5kZXJMaXN0SXRlbTo6bmV4dExpc3RJdGVtKGxpc3QsIGl0ZW0pOwog
fQpAQCAtNDY1LDE4ICs0NjksMTggQEAgc3RhdGljIFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c09y
TmV4dEl0ZW0oYm9vbCBpc0xpc3RSZXZlcnNlZCwgUmVuZGVyT2JqZWN0KiBsaXMKIHZvaWQgUmVu
ZGVyTGlzdEl0ZW06OnVwZGF0ZUxpc3RNYXJrZXJOdW1iZXJzKCkKIHsKICAgICBOb2RlKiBsaXN0
Tm9kZSA9IGVuY2xvc2luZ0xpc3QodGhpcyk7Ci0gICAgQVNTRVJUKGxpc3ROb2RlICYmIGxpc3RO
b2RlLT5yZW5kZXJlcigpKTsKLSAgICBpZiAoIWxpc3ROb2RlIHx8ICFsaXN0Tm9kZS0+cmVuZGVy
ZXIoKSkKKyAgICAvLyBUaGUgbGlzdCBub2RlIGNhbiBiZSB0aGUgc2hhZG93IHJvb3Qgd2hpY2gg
aGFzIG5vIHJlbmRlcmVyLgorICAgIEFTU0VSVChsaXN0Tm9kZSk7CisgICAgaWYgKCFsaXN0Tm9k
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBpc0xpc3RSZXZlcnNlZCA9IGZhbHNlOwot
ICAgIFJlbmRlck9iamVjdCogbGlzdCA9IGxpc3ROb2RlLT5yZW5kZXJlcigpOwogICAgIEhUTUxP
TGlzdEVsZW1lbnQqIG9MaXN0RWxlbWVudCA9IChsaXN0Tm9kZSAmJiBsaXN0Tm9kZS0+aGFzVGFn
TmFtZShvbFRhZykpID8gc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudCo+KGxpc3ROb2RlKSA6
IDA7CiAgICAgaWYgKG9MaXN0RWxlbWVudCkgewogICAgICAgICBvTGlzdEVsZW1lbnQtPml0ZW1D
b3VudENoYW5nZWQoKTsKICAgICAgICAgaXNMaXN0UmV2ZXJzZWQgPSBvTGlzdEVsZW1lbnQtPmlz
UmV2ZXJzZWQoKTsKICAgICB9Ci0gICAgZm9yIChSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHByZXZp
b3VzT3JOZXh0SXRlbShpc0xpc3RSZXZlcnNlZCwgbGlzdCwgdGhpcyk7IGl0ZW07IGl0ZW0gPSBw
cmV2aW91c09yTmV4dEl0ZW0oaXNMaXN0UmV2ZXJzZWQsIGxpc3QsIGl0ZW0pKSB7CisgICAgZm9y
IChSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHByZXZpb3VzT3JOZXh0SXRlbShpc0xpc3RSZXZlcnNl
ZCwgbGlzdE5vZGUsIHRoaXMpOyBpdGVtOyBpdGVtID0gcHJldmlvdXNPck5leHRJdGVtKGlzTGlz
dFJldmVyc2VkLCBsaXN0Tm9kZSwgaXRlbSkpIHsKICAgICAgICAgaWYgKCFpdGVtLT5tX2lzVmFs
dWVVcFRvRGF0ZSkgewogICAgICAgICAgICAgLy8gSWYgYW4gaXRlbSBoYXMgYmVlbiBtYXJrZWQg
Zm9yIHVwZGF0ZSBiZWZvcmUsIHdlIGNhbiBzYWZlbHkKICAgICAgICAgICAgIC8vIGFzc3VtZSB0
aGF0IGFsbCB0aGUgZm9sbG93aW5nIG9uZXMgaGF2ZSB0b28uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0SXRlbS5oCmluZGV4IGQ4OGZjNDk4NmQ1NmRjNWIzMmNmMDU5ZWUxZDVm
ODQxZDE3MGM4OWUuLjdkZDNlYWY4OTQyYjgxNjQ2NjE2NmMxYWQ0Yzk4M2RkOWJmNGE5MGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCkBAIC00OSw3ICs0OSw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKTsKIAotICAg
IHN0YXRpYyBSZW5kZXJMaXN0SXRlbSogbmV4dExpc3RJdGVtKFJlbmRlck9iamVjdCogbGlzdFJl
bmRlcmVyLCBjb25zdCBSZW5kZXJMaXN0SXRlbSogPSAwKTsKKyAgICBzdGF0aWMgUmVuZGVyTGlz
dEl0ZW0qIG5leHRMaXN0SXRlbShOb2RlKiwgY29uc3QgUmVuZGVyTGlzdEl0ZW0qID0gMCk7CiAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gIlJlbmRlckxpc3RJdGVtIjsgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQyMTA5MmY3NjUwNjgyYjUxNmVkYzQ5
N2E4OTNlOTc5MjZhY2QxMzcuLjI3Y2NmZjMxZWRiZjk1MDRhNDFhOTlkYjg2YTliZGJkYThkM2Rj
OTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0wMy0wNyAgQW5kcmVpIEJ1Y3VyICA8YWJ1
Y3VyQGFkb2JlLmNvbT4KKworICAgICAgICBVc2UgRE9NIG9yZGVyaW5nIGZvciBsaXN0IGNvdW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzUy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGZh
c3QvZG9tL3NoYWRvdy9zaGFkb3ctYW5kLWxpc3QtZWxlbWVudHMtZXhwZWN0ZWQuaHRtbCBoYXMg
Y2hhbmdlZCBiZWNhdXNlIHRoZSBsaXN0IGl0ZW1zCisgICAgICAgIGluc2lkZSB0aGUgc2hhZG93
IHRyZWUgbm8gbG9uZ2VyIHNlZSB0aGUgcm9vdCA8b2w+IGVsZW1lbnQuCisgICAgICAgIFRoZSB0
ZXN0IGZhc3QvbGlzdHMvcG9zaXRpb25lZC1jb3VudC1jcmFzaC5odG1sIGhhcyB0aGUgY29ycmVj
dCByZW5kZXJpbmcgYWZ0ZXIgY2hhbmdpbmcKKyAgICAgICAgdGhlIGxpc3QgY291bnRpbmcgdG8g
YmUgaW4gRE9NIG9yZGVyLgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1hbmQt
bGlzdC1lbGVtZW50cy1leHBlY3RlZC5odG1sOgorICAgICAgICAqIGZhc3QvbGlzdHMvcG9zaXRp
b25lZC1jb3VudC1jcmFzaC1leHBlY3RlZC50eHQ6CisKIDIwMTMtMDMtMDcgIEFudG9pbmUgUXVp
bnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBpZGVudGlm
eSBsYXllcnMgZm9yIENTUyBnZW5lcmF0ZWQgY29udGVudCBpbiBMYXllclRyZWVBZ2VudApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1hbmQtbGlzdC1lbGVt
ZW50cy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1h
bmQtbGlzdC1lbGVtZW50cy1leHBlY3RlZC5odG1sCmluZGV4IDkzZWJmOWFlZGQ5M2RjZWIyNWRm
YmNiMDY4OTQ5NzNmYjkyYTMyOWUuLmRiYzg4YmM2ZjJlOGQwNDI5YTU2YzMxZTFiNTU2ZDcwYjM5
NDg4NWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYW5k
LWxpc3QtZWxlbWVudHMtZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9z
aGFkb3cvc2hhZG93LWFuZC1saXN0LWVsZW1lbnRzLWV4cGVjdGVkLmh0bWwKQEAgLTIyLDE4ICsy
MiwyMyBAQAogLy8gICA8bGk+QzwvbGk+CiAvLyA8L29sPiAgIAogdmFyIGhvc3RFcXVpdmFsZW50
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3RFcXVpdmFsZW50Iik7Cit2YXIgc2hhZG93
TGlzdFJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOworc2hhZG93TGlzdFJvb3Qu
c3R5bGUucGFkZGluZ0xlZnQgPSAiMHB4IjsKK2hvc3RFcXVpdmFsZW50LmFwcGVuZENoaWxkKHNo
YWRvd0xpc3RSb290KTsKIAogdmFyIGNoaWxkWCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxp
Iik7CiBjaGlsZFguaW5uZXJIVE1MID0gIlgiOwotaG9zdEVxdWl2YWxlbnQuYXBwZW5kQ2hpbGQo
Y2hpbGRYKTsKK2NoaWxkWC5zdHlsZS5saXN0U3R5bGVQb3NpdGlvbiA9ICJpbnNpZGUiOworc2hh
ZG93TGlzdFJvb3QuYXBwZW5kQ2hpbGQoY2hpbGRYKTsKIAogdmFyIGNoaWxkVWwgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJ1bCIpOwogY2hpbGRVbC5pbm5lckhUTUwgPSAiQiI7Ci1ob3N0RXF1
aXZhbGVudC5hcHBlbmRDaGlsZChjaGlsZFVsKTsKK3NoYWRvd0xpc3RSb290LmFwcGVuZENoaWxk
KGNoaWxkVWwpOwogCiB2YXIgY2hpbGRZID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsK
IGNoaWxkWS5pbm5lckhUTUwgPSAiWSI7Ci1ob3N0RXF1aXZhbGVudC5hcHBlbmRDaGlsZChjaGls
ZFkpOworY2hpbGRZLnN0eWxlLmxpc3RTdHlsZVBvc2l0aW9uID0gImluc2lkZSI7CitzaGFkb3dM
aXN0Um9vdC5hcHBlbmRDaGlsZChjaGlsZFkpOwogPC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2xpc3RzL3Bvc2l0aW9uZWQtY291bnQtY3Jh
c2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9saXN0cy9wb3NpdGlvbmVkLWNvdW50
LWNyYXNoLWV4cGVjdGVkLnR4dAppbmRleCA5ZmMwNjZkNWQxMWYxZTA3ODg0NzExMDExNGU3N2Uy
MDEwYTE2N2QwLi5jZTQwYzA4Y2I4NGY4M2Y0NmQwN2M0NTk3M2I0MWQ4Njk1Yzk4ZWVmIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2xpc3RzL3Bvc2l0aW9uZWQtY291bnQtY3Jhc2gtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbGlzdHMvcG9zaXRpb25lZC1jb3VudC1j
cmFzaC1leHBlY3RlZC50eHQKQEAgLTIsNSArMiw1IEBAIElJCiAKIAogRm9yIG1hbnVhbCB0ZXN0
OiBJZiB5b3Ugc2VlIG5vIGNyYXNoIGFuZCAiSUkgSUkiLCBpdCBtZWFucyB0aGlzIHRlc3QgUEFT
Uy4KLUZBSUwgbGlzdCBtYXJrZXIgc2hvdWxkIGJlIElJLiBXYXMgSS4KK1BBU1MgbGlzdCBtYXJr
ZXIgaXMgSUkuCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194600</attachid>
            <date>2013-03-22 11:04:34 -0700</date>
            <delta_ts>2013-03-26 05:27:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110352-20130322200017.patch</filename>
            <type>text/plain</type>
            <size>32643</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2NTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmY3YTE4ZDEwMTdmODRl
ZmI0YTkwYzQ4NTliMGY5Y2Y0NDJkNGU0MS4uODVkOTFiNzM3YWNhMjViOWExMWI1YzAxNTJlMjVm
ZjI1OWU3MWIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDEzLTAzLTIyICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFVzZSBET00gb3JkZXJpbmcg
Zm9yIGxpc3QgY291bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTAzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDdXJyZW50bHkgdGhlIGxpc3QgaXRlbXMgb3JkZXJpbmcgaXMgbWFkZSBieSB0cmF2
ZXJzaW5nIHRoZSByZW5kZXIgdHJlZS4gVGhpcyBnaXZlcyBiYWQgcmVzdWx0cyBmb3I6CisgICAg
ICAgIC0gbGlzdCBpdGVtcyBmbG93biBpbnNpZGUgcmVnaW9ucyBiZWNhdXNlIHRoZXkgYXJlIG5v
dCByZW5kZXJlZCBhcyBkZXNjZW5kYW50cyBvZiB0aGVpciBET00gbGlzdCBhbmNlc3RvcnMuCisg
ICAgICAgIC0gbGlzdCBpdGVtcyBtYXRjaGVkIHRvIGluc2VydGlvbiBwb2ludHMgaW5zaWRlIGEg
c2hhZG93IHRyZWUuIFRoZSBpbnNlcnRpb24gcG9pbnQgbWF5IGJlIGEgY2hpbGQgb2YgYQorICAg
ICAgICBsaXN0IHNvIHRoZSBudW1iZXJpbmcgZ2V0cyBicm9rZW4uCisKKyAgICAgICAgVG8gaW1w
bGVtZW50IGNvcnJlY3QgRE9NIG9yZGVyaW5nIEkndmUgdGFrZW4gaW50byBhY2NvdW50IHRoZSBm
YWN0IHRoYXQgcHNldWRvLWVsZW1lbnRzIGNhbiBoYXZlIGRpc3BsYXk6IGxpc3QtaXRlbQorICAg
ICAgICBzbyB0aGV5IHNob3VsZCBiZSBpbmNsdWRlZCB3aGVuIHRyYXZlcnNpbmcgdGhlIERPTSB0
cmVlLiBJJ3ZlIGFkZGVkIGhlbHBlciBtZXRob2RzIG9uIHRoZSBOb2RlVHJhdmVyc2FsCisgICAg
ICAgIG5hbWVzcGFjZSB0aGF0IHNob3VsZCBhbGxvdyBlYXNpbHkgdHJhdmVyc2luZyB0aGUgdHJl
ZSBpbmNsdWRpbmcgdGhlIHBzZXVkby1lbGVtZW50cyAoZS5nLiBmaXJzdENoaWxkV2l0aFBzZXVk
bworICAgICAgICBmb3IgYW4gZWxlbWVudCB3aXRoIHBzZXVkby1iZWZvcmUgd2lsbCByZXR1cm4g
dGhlIGJlZm9yZSBQc2V1ZG9FbGVtZW50KS4gVXNpbmcgdGhlc2UgaGVscGVyIG1ldGhvZHMgSSd2
ZSBpbXBsZW1lbnRlZAorICAgICAgICBwcmUtb3JkZXIgdHJhdmVyc2FsIG1ldGhvZHMgYXdhcmUg
b2YgdGhlIHBzZXVkby1lbGVtZW50cy4KKyAgICAgICAgQW4gZWZmZWN0IG9mIHRoaXMgY2hhbmdl
IGlzIGhvdyB0aGUgbGlzdCBpdGVtcyBpbnNpZGUgc2hhZG93IHRyZWUgdXBkYXRlIHRoZWlyIGNv
dW50aW5nLiBXaXRoIHRoZSBwYXRjaCwgaWYgdGhlcmUncworICAgICAgICBubyA8b2w+IG9yIDx1
bD4gZWxlbWVudCBvbiB0aGUgYW5jZXN0b3IgY2hhaW4gb2YgYSA8bGk+IGVsZW1lbnQgdG8gdGhl
IHNoYWRvdyByb290LCB0aGUgbGlzdCBub2RlIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUKKyAgICAg
ICAgZmlyc3QgcGFyZW50IG9mIHRoZSA8bGk+IG9yIHRoZSBzaGFkb3cgcm9vdCBpZiB0aGVyZSBp
cyBubyBhbmNlc3Rvci4KKyAgICAgICAgVGhlIFJlbmRlckxpc3RJdGVtIGNsYXNzIG5vdyBtYWtl
cyB1c2Ugb2YgdGhpcyBuZXcgbWV0aG9kIG9mIHRyYXZlcnNhbCwgcmVwbGFjaW5nIHRoZSBvbmUg
YmFzZWQgb24gdGhlIHJlbmRlciB0cmVlLgorICAgICAgICBUbyBzaW1wbGlmeSB0aGUgQ1NTIGNv
dW50ZXJzIGltcGxlbWVudGF0aW9uLCBJJ3ZlIGNoYW5nZWQgdGhlIHRyYXZlcnNhbCBmdW5jdGlv
bnMgaW5zaWRlIFJlbmRlckNvdW50ZXIgdG8gYWxzbyBtYWtlIHVzZQorICAgICAgICBvZiB0aGlz
IG1ldGhvZC4gVGhlIENTUyBjb3VudGVycyBhbmQgdGhlIGxpc3QgaXRlbXMgbm93IGhhdmUgdGhl
IHNhbWUgdHJhdmVyc2FsIGFsZ29yaXRobS4KKworICAgICAgICBJbiBsYXRlciBwYXRjaGVzIEkn
bGwgYWRkIHRlc3RzIHRoYXQgc2hvdWxkIGNvdmVyIHRoZSByZWdpb25zIGFuZCBzaGFkb3cgRE9N
IHVzZSBjYXNlcy4KKworICAgICAgICBUZXN0czogbm8gbmV3IHRlc3RzIGlzIHRoaXMgcGF0Y2g7
IGFkZGVkIHRoZSBjb3JyZWN0IGV4cGVjdGF0aW9ucyBmb3IgZmFzdC9saXN0cy9wb3NpdGlvbmVk
LWNvdW50LWNyYXNoLmh0bWwKKyAgICAgICAgYW5kIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYW5k
LWxpc3QtZWxlbWVudHMuaHRtbAorCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpwc2V1ZG9Bd2FyZU5leHRTaWJsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBzZXVkb0F3YXJlRmlyc3RDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjpwc2V1ZG9Bd2FyZUxhc3RDaGlsZCk6CisgICAgICAgICogZG9tL05v
ZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlVHJhdmVyc2FsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6cHJl
dmlvdXNJbmNsdWRpbmdQc2V1ZG8pOgorICAgICAgICAoTm9kZVRyYXZlcnNhbCk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxk
cmVuKToKKyAgICAgICAgKiBkb20vTm9kZVRyYXZlcnNhbC5oOgorICAgICAgICAoRWxlbWVudFRy
YXZlcnNhbCk6CisgICAgICAgIChOb2RlVHJhdmVyc2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8pOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFRyYXZlcnNhbDo6cHNldWRvQXdhcmVQcmV2
aW91c1NpYmxpbmcpOgorICAgICAgICAqIGh0bWwvSFRNTExJRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTElFbGVtZW50OjphdHRhY2gpOgorICAgICAgICAqIGh0bWwvSFRNTE9M
aXN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50Ojp1cGRh
dGVJdGVtVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQ6OnJlY2Fs
Y3VsYXRlSXRlbUNvdW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0luUHJlT3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6cHJldmlvdXNTaWJsaW5nT3JQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyZW50RWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0SW5QcmVPcmRlcik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6ZW5jbG9zaW5nTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRl
bTo6bmV4dExpc3RJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGlzdEl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OmNhbGNWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6ZXhwbGljaXRWYWx1ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6cHJldmlvdXNPck5leHRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RJdGVtOjp1cGRhdGVMaXN0TWFya2VyTnVtYmVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxpc3RJdGVtLmg6CisgICAgICAgIChSZW5kZXJMaXN0SXRlbSk6CisKIDIwMTMtMDMtMjEg
IFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQnlwYXNzIFhTU0F1
ZGl0b3IgZm9yIGFzcC5uZXQgc2VydmVycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAzMGQxM2U2YWM4
ZDI5OTM3NTdiNzA3NTkzY2JjYmNiZTZjODhiOTM0Li5iNzU2ODdlOTEzZjI0ODEwY2I4MTdiYzky
MTk4YzAxNTc4Y2QxZWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xMTMwLDYgKzExMzAsNjIgQEAg
dm9pZCBOb2RlOjpkZXRhY2goKQogI2VuZGlmCiB9CiAKK05vZGUqIE5vZGU6OnBzZXVkb0F3YXJl
UHJldmlvdXNTaWJsaW5nKCkgY29uc3QKK3sKKyAgICBpZiAocGFyZW50RWxlbWVudCgpICYmICFw
cmV2aW91c1NpYmxpbmcoKSkgeworICAgICAgICBFbGVtZW50KiBwYXJlbnQgPSBwYXJlbnRFbGVt
ZW50KCk7CisgICAgICAgIGlmIChpc0FmdGVyUHNldWRvRWxlbWVudCgpICYmIHBhcmVudC0+bGFz
dENoaWxkKCkpCisgICAgICAgICAgICByZXR1cm4gcGFyZW50LT5sYXN0Q2hpbGQoKTsKKyAgICAg
ICAgaWYgKCFpc0JlZm9yZVBzZXVkb0VsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBwYXJl
bnQtPnBzZXVkb0VsZW1lbnQoQkVGT1JFKTsKKyAgICB9CisgICAgcmV0dXJuIHByZXZpb3VzU2li
bGluZygpOworfQorCitOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZU5leHRTaWJsaW5nKCkgY29uc3QK
K3sKKyAgICBpZiAocGFyZW50RWxlbWVudCgpICYmICFuZXh0U2libGluZygpKSB7CisgICAgICAg
IEVsZW1lbnQqIHBhcmVudCA9IHBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGlzQmVmb3Jl
UHNldWRvRWxlbWVudCgpICYmIHBhcmVudC0+Zmlyc3RDaGlsZCgpKQorICAgICAgICAgICAgcmV0
dXJuIHBhcmVudC0+Zmlyc3RDaGlsZCgpOworICAgICAgICBpZiAoIWlzQWZ0ZXJQc2V1ZG9FbGVt
ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gcGFyZW50LT5wc2V1ZG9FbGVtZW50KEFGVEVSKTsK
KyAgICB9CisgICAgcmV0dXJuIG5leHRTaWJsaW5nKCk7Cit9CisKK05vZGUqIE5vZGU6OnBzZXVk
b0F3YXJlRmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRWxlbWVudE5vZGUoKSkgewor
ICAgICAgICBjb25zdCBFbGVtZW50KiBjdXJyZW50RWxlbWVudCA9IHRvRWxlbWVudCh0aGlzKTsK
KyAgICAgICAgTm9kZSogZmlyc3QgPSBjdXJyZW50RWxlbWVudC0+cHNldWRvRWxlbWVudChCRUZP
UkUpOworICAgICAgICBpZiAoZmlyc3QpCisgICAgICAgICAgICByZXR1cm4gZmlyc3Q7CisgICAg
ICAgIGZpcnN0ID0gY3VycmVudEVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKCFm
aXJzdCkKKyAgICAgICAgICAgIGZpcnN0ID0gY3VycmVudEVsZW1lbnQtPnBzZXVkb0VsZW1lbnQo
QUZURVIpOworICAgICAgICByZXR1cm4gZmlyc3Q7CisgICAgfQorCisgICAgcmV0dXJuIGZpcnN0
Q2hpbGQoKTsKK30KKworTm9kZSogTm9kZTo6cHNldWRvQXdhcmVMYXN0Q2hpbGQoKSBjb25zdAor
eworICAgIGlmIChpc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgY29uc3QgRWxlbWVudCogY3Vy
cmVudEVsZW1lbnQgPSB0b0VsZW1lbnQodGhpcyk7CisgICAgICAgIE5vZGUqIGxhc3QgPSBjdXJy
ZW50RWxlbWVudC0+cHNldWRvRWxlbWVudChBRlRFUik7CisgICAgICAgIGlmIChsYXN0KQorICAg
ICAgICAgICAgcmV0dXJuIGxhc3Q7CisgICAgICAgIGxhc3QgPSBjdXJyZW50RWxlbWVudC0+bGFz
dENoaWxkKCk7CisgICAgICAgIGlmICghbGFzdCkKKyAgICAgICAgICAgIGxhc3QgPSBjdXJyZW50
RWxlbWVudC0+cHNldWRvRWxlbWVudChCRUZPUkUpOworICAgICAgICByZXR1cm4gbGFzdDsKKyAg
ICB9CisKKyAgICByZXR1cm4gbGFzdENoaWxkKCk7Cit9CisKIC8vIEZJWE1FOiBUaGlzIGNvZGUg
aXMgdXNlZCBieSBlZGl0aW5nLiAgU2VlbXMgbGlrZSBpdCBjb3VsZCBtb3ZlIG92ZXIgdGhlcmUg
YW5kIG5vdCBwb2xsdXRlIE5vZGUuCiBOb2RlICpOb2RlOjpwcmV2aW91c05vZGVDb25zaWRlcmlu
Z0F0b21pY05vZGVzKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IGI0MDc4NjM1MTZlMTZiYTkz
MTFiNjkyYzc4Mzk0ZGJhMzJiMDIyOTcuLmEyYjQ1MDI0MjRiOWNkODRiZjNlNWI4NzVhNDIxMGVh
ODc0Y2NmNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtMTk0LDYgKzE5NCwxMCBAQCBwdWJsaWM6CiAgICAg
Tm9kZSogbGFzdENoaWxkKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3Q7
CiAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgTm9kZSogcHNldWRv
QXdhcmVOZXh0U2libGluZygpIGNvbnN0OworICAgIE5vZGUqIHBzZXVkb0F3YXJlUHJldmlvdXNT
aWJsaW5nKCkgY29uc3Q7CisgICAgTm9kZSogcHNldWRvQXdhcmVGaXJzdENoaWxkKCkgY29uc3Q7
CisgICAgTm9kZSogcHNldWRvQXdhcmVMYXN0Q2hpbGQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
S1VSTCBiYXNlVVJJKCkgY29uc3Q7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVRyYXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5j
cHAKaW5kZXggNDgyYTNiYWMxMmFjZTI3ZGQxYmU4NDFjNGVjMWI3N2Q2ZmM4YjZlOS4uMjE2YTdh
NzdhZGQ2YjU0ZTUyMTFjODdlNTI3ZWE4ODUyMDJlOGRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
VHJhdmVyc2FsLmNwcApAQCAtMjYsMTAgKzI2LDU5IEBACiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNh
bC5oIgogCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgIlBzZXVkb0VsZW1l
bnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworCiBuYW1lc3BhY2UgTm9kZVRyYXZlcnNhbCB7
CiAKK05vZGUqIHByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNv
bnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgTm9kZSogcHJldmlvdXM7CisgICAgaWYgKGN1
cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKChwcmV2aW91
cyA9IGN1cnJlbnQtPnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKCkpKSB7CisgICAgICAgIHdo
aWxlIChwcmV2aW91cy0+cHNldWRvQXdhcmVMYXN0Q2hpbGQoKSkKKyAgICAgICAgICAgIHByZXZp
b3VzID0gcHJldmlvdXMtPnBzZXVkb0F3YXJlTGFzdENoaWxkKCk7CisgICAgICAgIHJldHVybiBw
cmV2aW91czsKKyAgICB9CisgICAgcmV0dXJuIGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKK30KKwor
Tm9kZSogbmV4dEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2Rl
KiBzdGF5V2l0aGluKQoreworICAgIE5vZGUqIG5leHQ7CisgICAgaWYgKChuZXh0ID0gY3VycmVu
dC0+cHNldWRvQXdhcmVGaXJzdENoaWxkKCkpKQorICAgICAgICByZXR1cm4gbmV4dDsKKyAgICBp
ZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoKG5l
eHQgPSBjdXJyZW50LT5wc2V1ZG9Bd2FyZU5leHRTaWJsaW5nKCkpKQorICAgICAgICByZXR1cm4g
bmV4dDsKKyAgICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCk7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQg
PT0gc3RheVdpdGhpbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoKG5leHQg
PSBjdXJyZW50LT5wc2V1ZG9Bd2FyZU5leHRTaWJsaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJu
IG5leHQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitOb2RlKiBuZXh0SW5jbHVkaW5nUHNl
dWRvU2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5
V2l0aGluKQoreworICAgIE5vZGUqIG5leHQ7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhp
bikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKChuZXh0ID0gY3VycmVudC0+cHNldWRvQXdh
cmVOZXh0U2libGluZygpKSkKKyAgICAgICAgcmV0dXJuIG5leHQ7CisgICAgZm9yIChjdXJyZW50
ID0gY3VycmVudC0+cGFyZW50Tm9kZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKChuZXh0ID0gY3VycmVudC0+cHNldWRvQXdhcmVO
ZXh0U2libGluZygpKSkKKyAgICAgICAgICAgIHJldHVybiBuZXh0OworICAgIH0KKyAgICByZXR1
cm4gMDsKK30KKwogTm9kZSogbmV4dEFuY2VzdG9yU2libGluZyhjb25zdCBOb2RlKiBjdXJyZW50
KQogewogICAgIEFTU0VSVCghY3VycmVudC0+bmV4dFNpYmxpbmcoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGVUcmF2ZXJzYWwuaAppbmRleCA3YTNjYTBlNmYzM2UwZTFmZDUyMzdhMzE0MzFmZDVjZTk3MjA5
YzFkLi4yYWQ0OTIyZTJlMjI5NjAyMzc0YjI0NzhkZmVkYTk5NzQ4ODA4NDljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlVHJhdmVyc2FsLmgKQEAgLTM0LDE3ICszNCwyNyBAQCBuYW1lc3BhY2UgRWxlbWVu
dFRyYXZlcnNhbCB7CiAvLyBGaXJzdCBlbGVtZW50IGNoaWxkIG9mIHRoZSBub2RlLgogRWxlbWVu
dCogZmlyc3RXaXRoaW4oY29uc3QgTm9kZSopOwogRWxlbWVudCogZmlyc3RXaXRoaW4oY29uc3Qg
Q29udGFpbmVyTm9kZSopOworCiAvLyBQcmUtb3JkZXIgdHJhdmVyc2FsIHNraXBwaW5nIG5vbi1l
bGVtZW50IG5vZGVzLgogRWxlbWVudCogbmV4dChjb25zdCBOb2RlKik7CiBFbGVtZW50KiBuZXh0
KGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKIEVsZW1lbnQqIG5leHQoY29u
c3QgQ29udGFpbmVyTm9kZSopOwogRWxlbWVudCogbmV4dChjb25zdCBDb250YWluZXJOb2RlKiwg
Y29uc3QgTm9kZSogc3RheVdpdGhpbik7CisKIC8vIExpa2UgbmV4dCwgYnV0IHNraXBzIGNoaWxk
cmVuLgogRWxlbWVudCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSopOwogRWxlbWVu
dCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRo
aW4pOwogRWxlbWVudCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgQ29udGFpbmVyTm9kZSop
OwogRWxlbWVudCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgQ29udGFpbmVyTm9kZSosIGNv
bnN0IE5vZGUqIHN0YXlXaXRoaW4pOwogCisvLyBQcmUtb3JkZXIgdHJhdmVyc2FsIGluY2x1ZGlu
ZyB0aGUgcHNldWRvLWVsZW1lbnRzLgorRWxlbWVudCogcHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8o
Y29uc3QgTm9kZSosIGNvbnN0IE5vZGUqID0gMCk7CitFbGVtZW50KiBuZXh0SW5jbHVkaW5nUHNl
dWRvKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiA9IDApOworRWxlbWVudCogbmV4dEluY2x1ZGlu
Z1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqID0gMCk7CisK
Ky8vIFV0aWxpdHkgZnVuY3Rpb24gdG8gdHJhdmVyc2Ugb25seSB0aGUgZWxlbWVudCBhbmQgcHNl
dWRvLWVsZW1lbnQgc2libGluZ3Mgb2YgYSBub2RlLgorRWxlbWVudCogcHNldWRvQXdhcmVQcmV2
aW91c1NpYmxpbmcoY29uc3QgTm9kZSopOworCiB9CiAKIG5hbWVzcGFjZSBOb2RlVHJhdmVyc2Fs
IHsKQEAgLTc3LDYgKzg3LDExIEBAIE5vZGUqIG5leHRQb3N0T3JkZXIoY29uc3QgTm9kZSosIGNv
bnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKTsKIE5vZGUqIHByZXZpb3VzUG9zdE9yZGVyKGNvbnN0
IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCk7CiBOb2RlKiBwcmV2aW91c1NraXBw
aW5nQ2hpbGRyZW5Qb3N0T3JkZXIoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4g
PSAwKTsKIAorLy8gUHJlLW9yZGVyIHRyYXZlcnNhbCBpbmNsdWRpbmcgdGhlIHBzZXVkby1lbGVt
ZW50cy4KK05vZGUqIHByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqLCBjb25zdCBO
b2RlKiA9IDApOworTm9kZSogbmV4dEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiwgY29uc3Qg
Tm9kZSogPSAwKTsKK05vZGUqIG5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNv
bnN0IE5vZGUqLCBjb25zdCBOb2RlKiA9IDApOworCiB9CiAKIG5hbWVzcGFjZSBFbGVtZW50VHJh
dmVyc2FsIHsKQEAgLTEzNSw2ICsxNTAsMzkgQEAgaW5saW5lIEVsZW1lbnQqIHRyYXZlcnNlTmV4
dEVsZW1lbnRTa2lwcGluZ0NoaWxkcmVuVGVtcGxhdGUoTm9kZVR5cGUqIGN1cnJlbnQsIGMKIH0K
IGlubGluZSBFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGlsZHJlbihjb25zdCBDb250YWluZXJOb2Rl
KiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKSB7IHJldHVybiB0cmF2ZXJzZU5leHRF
bGVtZW50U2tpcHBpbmdDaGlsZHJlblRlbXBsYXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4pOyB9CiBp
bmxpbmUgRWxlbWVudCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSogY3VycmVudCwg
Y29uc3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJhdmVyc2VOZXh0RWxlbWVudFNraXBw
aW5nQ2hpbGRyZW5UZW1wbGF0ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQorCitpbmxpbmUgRWxl
bWVudCogcHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY29uc3QgTm9kZSogY3VycmVudCwgY29uc3Qg
Tm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJl
dmlvdXNJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgc3RheVdpdGhpbik7CisgICAgd2hpbGUgKG5v
ZGUgJiYgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKG5vZGUsIHN0YXlXaXRoaW4pOworICAgIHJldHVy
biB0b0VsZW1lbnQobm9kZSk7Cit9CisKK2lubGluZSBFbGVtZW50KiBuZXh0SW5jbHVkaW5nUHNl
dWRvKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAg
Tm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwg
c3RheVdpdGhpbik7CisgICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
KyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8obm9kZSwg
c3RheVdpdGhpbik7CisgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKK30KKworaW5saW5lIEVs
ZW1lbnQqIG5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqIGN1
cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgTm9kZSogbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGN1cnJlbnQsIHN0
YXlXaXRoaW4pOworICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisg
ICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdD
aGlsZHJlbihub2RlLCBzdGF5V2l0aGluKTsKKyAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOwor
fQorCitpbmxpbmUgRWxlbWVudCogcHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoY29uc3QgTm9k
ZSogY3VycmVudCkKK3sKKyAgICBOb2RlKiBub2RlID0gY3VycmVudC0+cHNldWRvQXdhcmVQcmV2
aW91c1NpYmxpbmcoKTsKKyAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQorICAgICAgICBub2RlID0gbm9kZS0+cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoKTsKKyAg
ICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworfQorCiB9CiAKIG5hbWVzcGFjZSBOb2RlVHJhdmVy
c2FsIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExJRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMSUVsZW1lbnQuY3BwCmluZGV4IDZkMGE1MjNlNmVm
OThkM2MzZGYwODhkNmYzNDkyNDNkNGFkZGUyZWYuLjJlZjBkZDc2YWVhMTZmOTVlYmRmYzI1ZTU5
NmEwMzEwMjNjZDY2Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExJRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcApAQCAt
OTIsMjMgKzkyLDIzIEBAIHZvaWQgSFRNTExJRWxlbWVudDo6YXR0YWNoKCkKICAgICBIVE1MRWxl
bWVudDo6YXR0YWNoKCk7CiAKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0xp
c3RJdGVtKCkpIHsKLSAgICAgICAgUmVuZGVyTGlzdEl0ZW0qIHJlbmRlciA9IHRvUmVuZGVyTGlz
dEl0ZW0ocmVuZGVyZXIoKSk7CisgICAgICAgIFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbVJlbmRl
cmVyID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcigpKTsKIAogICAgICAgICAvLyBGaW5kIHRo
ZSBlbmNsb3NpbmcgbGlzdCBub2RlLgotICAgICAgICBOb2RlKiBsaXN0Tm9kZSA9IDA7Ci0gICAg
ICAgIEV2ZW50UGF0aFdhbGtlciB3YWxrZXIodGhpcyk7CisgICAgICAgIEVsZW1lbnQqIGxpc3RO
b2RlID0gMDsKKyAgICAgICAgRWxlbWVudCogY3VycmVudCA9IHRoaXM7CiAgICAgICAgIHdoaWxl
ICghbGlzdE5vZGUpIHsKLSAgICAgICAgICAgIHdhbGtlci5tb3ZlVG9QYXJlbnQoKTsKLSAgICAg
ICAgICAgIGlmICghd2Fsa2VyLm5vZGUoKSkKKyAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50
LT5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAod2Fsa2VyLm5vZGUoKS0+aGFzVGFnTmFtZSh1
bFRhZykgfHwgd2Fsa2VyLm5vZGUoKS0+aGFzVGFnTmFtZShvbFRhZykpCi0gICAgICAgICAgICAg
ICAgbGlzdE5vZGUgPSB3YWxrZXIubm9kZSgpOworICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmhh
c1RhZ05hbWUodWxUYWcpIHx8IGN1cnJlbnQtPmhhc1RhZ05hbWUob2xUYWcpKQorICAgICAgICAg
ICAgICAgIGxpc3ROb2RlID0gY3VycmVudDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHdl
IGFyZSBub3QgaW4gYSBsaXN0LCB0ZWxsIHRoZSByZW5kZXJlciBzbyBpdCBjYW4gcG9zaXRpb24g
dXMgaW5zaWRlLgogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNoYW5nZSBvdXIgc3R5bGUg
dG8gc2F5ICJpbnNpZGUiIHNpbmNlIHRoYXQgd291bGQgYWZmZWN0IG5lc3RlZCBub2Rlcy4KICAg
ICAgICAgaWYgKCFsaXN0Tm9kZSkKLSAgICAgICAgICAgIHJlbmRlci0+c2V0Tm90SW5MaXN0KHRy
dWUpOworICAgICAgICAgICAgbGlzdEl0ZW1SZW5kZXJlci0+c2V0Tm90SW5MaXN0KHRydWUpOwog
CiAgICAgICAgIHBhcnNlVmFsdWUoZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcAppbmRleCA0NWZlNDI2ZjQ3
MmZjOTQ5M2JiZTFmNGZjMjA4MDg4ODBlZmVhN2RkLi4zOTZlMzQwNGZlOTMxNjQ2NjIwMThkYTI1
NGQwMDhiNGZlNTRiNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPTGlz
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5j
cHAKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnNldFN0YXJ0KGlu
dCBzdGFydCkKIAogdm9pZCBIVE1MT0xpc3RFbGVtZW50Ojp1cGRhdGVJdGVtVmFsdWVzKCkKIHsK
LSAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSA9IFJlbmRlckxpc3RJdGVtOjpuZXh0
TGlzdEl0ZW0ocmVuZGVyZXIoKSk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IFJlbmRlckxpc3RJdGVt
OjpuZXh0TGlzdEl0ZW0ocmVuZGVyZXIoKSwgbGlzdEl0ZW0pKQorICAgIGZvciAoUmVuZGVyTGlz
dEl0ZW0qIGxpc3RJdGVtID0gUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbSh0aGlzKTsgbGlz
dEl0ZW07IGxpc3RJdGVtID0gUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbSh0aGlzLCBsaXN0
SXRlbSkpCiAgICAgICAgIGxpc3RJdGVtLT51cGRhdGVWYWx1ZSgpOwogfQogCkBAIC0xMTQsNyAr
MTE0LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpyZWNhbGN1bGF0ZUl0ZW1Db3VudCgpCiB7
CiAgICAgbV9pdGVtQ291bnQgPSAwOwogCi0gICAgZm9yIChSZW5kZXJMaXN0SXRlbSogbGlzdEl0
ZW0gPSBSZW5kZXJMaXN0SXRlbTo6bmV4dExpc3RJdGVtKHJlbmRlcmVyKCkpOyBsaXN0SXRlbTsg
bGlzdEl0ZW0gPSBSZW5kZXJMaXN0SXRlbTo6bmV4dExpc3RJdGVtKHJlbmRlcmVyKCksIGxpc3RJ
dGVtKSkKKyAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSA9IFJlbmRlckxpc3RJdGVt
OjpuZXh0TGlzdEl0ZW0odGhpcyk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IFJlbmRlckxpc3RJdGVt
OjpuZXh0TGlzdEl0ZW0odGhpcywgbGlzdEl0ZW0pKQogICAgICAgICBtX2l0ZW1Db3VudCsrOwog
CiAgICAgbV9zaG91bGRSZWNhbGN1bGF0ZUl0ZW1Db3VudCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4IDM0YjJjYjg1MzBlMDM1NGMwYzk2
Zjc2NTBlNmI1N2UwOTNkYTk4ZWYuLmFhNzg3MzVjZmZjZjM1NDMwNjk0ZmE1OTAyOTQ2MzQ5NjFm
ZDIzNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAg
LTU3LDk0ICs1NywzMSBAQCBzdGF0aWMgQ291bnRlck1hcHMmIGNvdW50ZXJNYXBzKCkKIC8vIGlu
Y2x1ZGluZyBwc2V1ZG8gZWxlbWVudHMgYXMgZGVmaW5lZCBpbiBDU1MgMi4xLgogc3RhdGljIFJl
bmRlck9iamVjdCogcHJldmlvdXNJblByZU9yZGVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0
KQogewotICAgIEVsZW1lbnQqIHBhcmVudDsKLSAgICBFbGVtZW50KiBzaWJsaW5nOwotICAgIHN3
aXRjaCAob2JqZWN0LT5zdHlsZSgpLT5zdHlsZVR5cGUoKSkgewotICAgIGNhc2UgTk9QU0VVRE86
Ci0gICAgICAgIEFTU0VSVCghb2JqZWN0LT5pc0Fub255bW91cygpKTsKLSAgICAgICAgcGFyZW50
ID0gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgpKTsKLSAgICAgICAgc2libGluZyA9IHBhcmVudC0+
cHJldmlvdXNFbGVtZW50U2libGluZygpOwotICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dEVsZW1lbnQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCRUZPUkU6Ci0gICAgICAgIHJl
dHVybiBvYmplY3QtPmdlbmVyYXRpbmdOb2RlKCktPnJlbmRlcmVyKCk7IC8vIEl0IGlzIGFsd2F5
cyB0aGUgZ2VuZXJhdGluZyBub2RlJ3MgcmVuZGVyZXIKLSAgICBjYXNlIEFGVEVSOgotICAgICAg
ICBwYXJlbnQgPSB0b0VsZW1lbnQob2JqZWN0LT5nZW5lcmF0aW5nTm9kZSgpKTsKLSAgICAgICAg
c2libGluZyA9IHBhcmVudC0+bGFzdEVsZW1lbnRDaGlsZCgpOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIHdoaWxlIChzaWJsaW5nKSB7Ci0gICAgICAgIGlmIChSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gc2libGluZy0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaWYgKFJl
bmRlck9iamVjdCogYWZ0ZXIgPSBzaWJsaW5nLT5wc2V1ZG9FbGVtZW50UmVuZGVyZXIoQUZURVIp
KQotICAgICAgICAgICAgICAgIHJldHVybiBhZnRlcjsKLSAgICAgICAgICAgIHBhcmVudCA9IHNp
Ymxpbmc7Ci0gICAgICAgICAgICBzaWJsaW5nID0gc2libGluZy0+bGFzdEVsZW1lbnRDaGlsZCgp
OwotICAgICAgICAgICAgaWYgKCFzaWJsaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFJlbmRl
ck9iamVjdCogYmVmb3JlID0gdG9FbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5wc2V1ZG9FbGVt
ZW50UmVuZGVyZXIoQkVGT1JFKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJlZm9yZTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNp
YmxpbmcoKTsKLSAgICB9Ci0gICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybiAwOwotICAg
IGlmIChSZW5kZXJPYmplY3QqIGJlZm9yZSA9IHBhcmVudC0+cHNldWRvRWxlbWVudFJlbmRlcmVy
KEJFRk9SRSkpCi0gICAgICAgIHJldHVybiBiZWZvcmU7Ci0gICAgcmV0dXJuIHBhcmVudC0+cmVu
ZGVyZXIoKTsKKyAgICBFbGVtZW50KiBzZWxmID0gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgpKTsK
KyAgICBFbGVtZW50KiBwcmV2aW91cyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVk
aW5nUHNldWRvKHNlbGYpOworICAgIHdoaWxlIChwcmV2aW91cyAmJiAhcHJldmlvdXMtPnJlbmRl
cmVyKCkpCisgICAgICAgIHByZXZpb3VzID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNJbmNs
dWRpbmdQc2V1ZG8ocHJldmlvdXMpOworICAgIHJldHVybiBwcmV2aW91cyA/IHByZXZpb3VzLT5y
ZW5kZXJlcigpIDogMDsKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJlbmRl
cmVyIHRyZWUgaW4gdGhlIG9yZGVyIG9mIHRoZSBET00gdHJlZQogLy8gaW5jbHVkaW5nIHBzZXVk
byBlbGVtZW50cyBhcyBkZWZpbmVkIGluIENTUyAyLjEuCiBzdGF0aWMgUmVuZGVyT2JqZWN0KiBw
cmV2aW91c1NpYmxpbmdPclBhcmVudChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAg
ICBFbGVtZW50KiBwYXJlbnQ7Ci0gICAgRWxlbWVudCogc2libGluZzsKLSAgICBzd2l0Y2ggKG9i
amVjdC0+c3R5bGUoKS0+c3R5bGVUeXBlKCkpIHsKLSAgICBjYXNlIE5PUFNFVURPOgotICAgICAg
ICBBU1NFUlQoIW9iamVjdC0+aXNBbm9ueW1vdXMoKSk7Ci0gICAgICAgIHBhcmVudCA9IHRvRWxl
bWVudChvYmplY3QtPm5vZGUoKSk7Ci0gICAgICAgIHNpYmxpbmcgPSBwYXJlbnQtPnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKTsKLSAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRFbGVtZW50
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkVGT1JFOgotICAgICAgICByZXR1cm4gb2Jq
ZWN0LT5nZW5lcmF0aW5nTm9kZSgpLT5yZW5kZXJlcigpOyAvLyBJdCBpcyBhbHdheXMgdGhlIGdl
bmVyYXRpbmcgbm9kZSdzIHJlbmRlcmVyCi0gICAgY2FzZSBBRlRFUjoKLSAgICAgICAgcGFyZW50
ID0gdG9FbGVtZW50KG9iamVjdC0+Z2VuZXJhdGluZ05vZGUoKSk7Ci0gICAgICAgIHNpYmxpbmcg
PSBwYXJlbnQtPmxhc3RFbGVtZW50Q2hpbGQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICB3aGlsZSAoc2libGluZykgewotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHNpYmxpbmctPnJlbmRlcmVyKCkpIC8vIFRoaXMgc2tpcHMgaW52aXNpYmxlIG5vZGVz
Ci0gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXI7Ci0gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5n
LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7Ci0gICAgfQotICAgIGlmICghcGFyZW50KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBiZWZvcmUgPSBwYXJlbnQtPnBz
ZXVkb0VsZW1lbnRSZW5kZXJlcihCRUZPUkUpKQotICAgICAgICByZXR1cm4gYmVmb3JlOwotICAg
IHJldHVybiBwYXJlbnQtPnJlbmRlcmVyKCk7CisgICAgRWxlbWVudCogc2VsZiA9IHRvRWxlbWVu
dChvYmplY3QtPm5vZGUoKSk7CisgICAgRWxlbWVudCogcHJldmlvdXMgPSBFbGVtZW50VHJhdmVy
c2FsOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZyhzZWxmKTsKKyAgICB3aGlsZSAocHJldmlv
dXMgJiYgIXByZXZpb3VzLT5yZW5kZXJlcigpKQorICAgICAgICBwcmV2aW91cyA9IEVsZW1lbnRU
cmF2ZXJzYWw6OnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKHByZXZpb3VzKTsKKyAgICBpZiAo
cHJldmlvdXMpCisgICAgICAgIHJldHVybiBwcmV2aW91cy0+cmVuZGVyZXIoKTsKKyAgICBwcmV2
aW91cyA9IHNlbGYtPnBhcmVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gcHJldmlvdXMgPyBwcmV2
aW91cy0+cmVuZGVyZXIoKSA6IDA7CiB9CiAKLXN0YXRpYyBFbGVtZW50KiBwYXJlbnRFbGVtZW50
KFJlbmRlck9iamVjdCogb2JqZWN0KQorc3RhdGljIGlubGluZSBFbGVtZW50KiBwYXJlbnRFbGVt
ZW50KFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIHN3aXRjaCAob2JqZWN0LT5zdHlsZSgp
LT5zdHlsZVR5cGUoKSkgewotICAgIGNhc2UgTk9QU0VVRE86Ci0gICAgICAgIEFTU0VSVCghb2Jq
ZWN0LT5pc0Fub255bW91cygpKTsKLSAgICAgICAgcmV0dXJuIHRvRWxlbWVudChvYmplY3QtPm5v
ZGUoKSktPnBhcmVudEVsZW1lbnQoKTsKLSAgICBjYXNlIEJFRk9SRToKLSAgICBjYXNlIEFGVEVS
OgotICAgICAgICByZXR1cm4gdG9FbGVtZW50KG9iamVjdC0+Z2VuZXJhdGluZ05vZGUoKSk7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KKyAgICBFbGVtZW50KiBzZWxmID0gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgp
KTsKKyAgICByZXR1cm4gc2VsZi0+cGFyZW50RWxlbWVudCgpOwogfQogCiBzdGF0aWMgaW5saW5l
IGJvb2wgYXJlUmVuZGVyZXJzRWxlbWVudHNTaWJsaW5ncyhSZW5kZXJPYmplY3QqIGZpcnN0LCBS
ZW5kZXJPYmplY3QqIHNlY29uZCkKQEAgLTE1Niw0NCArOTMsMTEgQEAgc3RhdGljIGlubGluZSBi
b29sIGFyZVJlbmRlcmVyc0VsZW1lbnRzU2libGluZ3MoUmVuZGVyT2JqZWN0KiBmaXJzdCwgUmVu
ZGVyT2JqZWMKIC8vIGluY2x1ZGluZyBwc2V1ZG8gZWxlbWVudHMgYXMgZGVmaW5lZCBpbiBDU1Mg
Mi4xLgogc3RhdGljIFJlbmRlck9iamVjdCogbmV4dEluUHJlT3JkZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IEVsZW1lbnQqIHN0YXlXaXRoaW4sIGJvb2wgc2tpcERlc2NlbmRh
bnRzID0gZmFsc2UpCiB7Ci0gICAgRWxlbWVudCogc2VsZjsKLSAgICBFbGVtZW50KiBjaGlsZDsK
LSAgICBzZWxmID0gdG9FbGVtZW50KG9iamVjdC0+Z2VuZXJhdGluZ05vZGUoKSk7Ci0gICAgaWYg
KHNraXBEZXNjZW5kYW50cykKLSAgICAgICAgZ290byBuZXh0c2libGluZzsKLSAgICBzd2l0Y2gg
KG9iamVjdC0+c3R5bGUoKS0+c3R5bGVUeXBlKCkpIHsKLSAgICBjYXNlIE5PUFNFVURPOgotICAg
ICAgICBBU1NFUlQoIW9iamVjdC0+aXNBbm9ueW1vdXMoKSk7Ci0gICAgICAgIGlmIChSZW5kZXJP
YmplY3QqIGJlZm9yZSA9IHNlbGYtPnBzZXVkb0VsZW1lbnRSZW5kZXJlcihCRUZPUkUpKQotICAg
ICAgICAgICAgcmV0dXJuIGJlZm9yZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCRUZPUkU6
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQUZURVI6Ci0gICAgICAgIGdvdG8gbmV4dHNpYmxp
bmc7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0
aGluKHNlbGYpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHdoaWxlIChjaGlsZCkgewot
ICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZC0+cmVuZGVyZXIo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXI7Ci0gICAgICAgICAgICBjaGlsZCA9
IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKGNoaWxkLCBzZWxmKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBhZnRlciA9IHNlbGYtPnBzZXVkb0Vs
ZW1lbnRSZW5kZXJlcihBRlRFUikpCi0gICAgICAgICAgICByZXR1cm4gYWZ0ZXI7Ci1uZXh0c2li
bGluZzoKLSAgICAgICAgaWYgKHNlbGYgPT0gc3RheVdpdGhpbikKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKHNlbGYpOwotICAgICAgICBzZWxmID0gc2VsZi0+cGFyZW50RWxlbWVudCgpOwotICAgICAg
ICBpZiAoIXNlbGYpIHsKLSAgICAgICAgICAgIEFTU0VSVCghY2hpbGQpOyAvLyBXZSBjYW4gb25s
eSByZWFjaCB0aGlzIGlmIHdlIGFyZSBzZWFyY2hpbmcgYmV5b25kIHRoZSByb290IGVsZW1lbnQK
LSAgICAgICAgICAgIHJldHVybiAwOyAvLyAgd2hpY2ggY2Fubm90IGhhdmUgc2libGluZ3MKLSAg
ICAgICAgfQotICAgIH0KKyAgICBFbGVtZW50KiBzZWxmID0gdG9FbGVtZW50KG9iamVjdC0+bm9k
ZSgpKTsKKyAgICBFbGVtZW50KiBuZXh0ID0gc2tpcERlc2NlbmRhbnRzID8gRWxlbWVudFRyYXZl
cnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4oc2VsZiwgc3RheVdpdGhp
bikgOiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKHNlbGYsIHN0YXlXaXRo
aW4pOworICAgIHdoaWxlIChuZXh0ICYmICFuZXh0LT5yZW5kZXJlcigpKQorICAgICAgICBuZXh0
ID0gc2tpcERlc2NlbmRhbnRzID8gRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVk
b1NraXBwaW5nQ2hpbGRyZW4obmV4dCwgc3RheVdpdGhpbikgOiBFbGVtZW50VHJhdmVyc2FsOjpu
ZXh0SW5jbHVkaW5nUHNldWRvKG5leHQsIHN0YXlXaXRoaW4pOworICAgIHJldHVybiBuZXh0ID8g
bmV4dC0+cmVuZGVyZXIoKSA6IDA7CiB9CiAKIHN0YXRpYyBib29sIHBsYW5Db3VudGVyKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIsIGJvb2wmIGlz
UmVzZXQsIGludCYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJ
dGVtLmNwcAppbmRleCBmMmMyZmIzMjU2ZDlmMTk2MTk2Y2VkNzVjZjFkNmM4NTI2MmQyMDc4Li4x
MTFlNmJkZDZmMzgzYTJjYTE0MjM1ZTEwZDI2MTZmNThhMWUyNDM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhU
TUxPTGlzdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJT
dHlsZUluaGVyaXRlZERhdGEuaCIKQEAgLTk2LDE4ICs5NywxNyBAQCBzdGF0aWMgYm9vbCBpc0xp
c3QoTm9kZSogbm9kZSkKICAgICByZXR1cm4gKG5vZGUtPmhhc1RhZ05hbWUodWxUYWcpIHx8IG5v
ZGUtPmhhc1RhZ05hbWUob2xUYWcpKTsKIH0KIAorLy8gUmV0dXJucyB0aGUgZW5jbG9zaW5nIGxp
c3Qgd2l0aCByZXNwZWN0IHRvIHRoZSBET00gb3JkZXIuCiBzdGF0aWMgTm9kZSogZW5jbG9zaW5n
TGlzdChjb25zdCBSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0pCiB7CisgICAgTm9kZSogbGlzdEl0
ZW1Ob2RlID0gbGlzdEl0ZW0tPm5vZGUoKTsKICAgICBOb2RlKiBmaXJzdE5vZGUgPSAwOwotCi0g
ICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbGlzdEl0ZW0tPnBhcmVudCgp
OyByZW5kZXJlcjsgcmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCkpIHsKLSAgICAgICAgTm9k
ZSogbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7Ci0gICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAg
ICAgICBpZiAoaXNMaXN0KG5vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAg
ICAgICAgICAgaWYgKCFmaXJzdE5vZGUpCi0gICAgICAgICAgICAgICAgZmlyc3ROb2RlID0gbm9k
ZTsKLSAgICAgICAgfQorICAgIC8vIFdlIHVzZSBwYXJlbnROb2RlIGJlY2F1c2UgdGhlIGVuY2xv
c2luZyBsaXN0IGNvdWxkIGJlIGEgU2hhZG93Um9vdCB0aGF0J3Mgbm90IEVsZW1lbnQuCisgICAg
Zm9yIChOb2RlKiBwYXJlbnQgPSBsaXN0SXRlbU5vZGUtPnBhcmVudE5vZGUoKTsgcGFyZW50OyBw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAoaXNMaXN0KHBhcmVu
dCkpCisgICAgICAgICAgICByZXR1cm4gcGFyZW50OworICAgICAgICBpZiAoIWZpcnN0Tm9kZSkK
KyAgICAgICAgICAgIGZpcnN0Tm9kZSA9IHBhcmVudDsKICAgICB9CiAKICAgICAvLyBJZiB0aGVy
ZSdzIG5vIGFjdHVhbCA8dWw+IG9yIDxvbD4gbGlzdCBlbGVtZW50LCB0aGVuIHRoZSBmaXJzdCBm
b3VuZApAQCAtMTE2LDQyICsxMTYsNTEgQEAgc3RhdGljIE5vZGUqIGVuY2xvc2luZ0xpc3QoY29u
c3QgUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtKQogICAgIHJldHVybiBmaXJzdE5vZGU7CiB9CiAK
LVJlbmRlckxpc3RJdGVtKiBSZW5kZXJMaXN0SXRlbTo6bmV4dExpc3RJdGVtKFJlbmRlck9iamVj
dCogbGlzdCwgY29uc3QgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0pCisvLyBSZXR1cm5zIHRoZSBuZXh0
IGxpc3QgaXRlbSB3aXRoIHJlc3BlY3QgdG8gdGhlIERPTSBvcmRlci4KK1JlbmRlckxpc3RJdGVt
KiBSZW5kZXJMaXN0SXRlbTo6bmV4dExpc3RJdGVtKE5vZGUqIGxpc3ROb2RlLCBjb25zdCBSZW5k
ZXJMaXN0SXRlbSogaXRlbSkKIHsKLSAgICBpZiAoIWxpc3QpCisgICAgaWYgKCFsaXN0Tm9kZSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXRlbSA/
IGl0ZW0tPm5leHRJblByZU9yZGVyKGxpc3QpIDogbGlzdC0+bmV4dEluUHJlT3JkZXIobGlzdCk7
Ci0gICAgd2hpbGUgKHJlbmRlcmVyKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+bm9kZSgpICYm
IGlzTGlzdChyZW5kZXJlci0+bm9kZSgpKSkgeworICAgIE5vZGUqIGN1cnJlbnQgPSBpdGVtID8g
aXRlbS0+bm9kZSgpIDogbGlzdE5vZGU7CisgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6
Om5leHRJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgbGlzdE5vZGUpOworCisgICAgd2hpbGUgKGN1
cnJlbnQpIHsKKyAgICAgICAgaWYgKGlzTGlzdChjdXJyZW50KSkgewogICAgICAgICAgICAgLy8g
V2UndmUgZm91bmQgYSBuZXN0ZWQsIGluZGVwZW5kZW50IGxpc3Q6IG5vdGhpbmcgdG8gZG8gaGVy
ZS4KLSAgICAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPm5leHRJblByZU9yZGVyQWZ0ZXJD
aGlsZHJlbihsaXN0KTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpu
ZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbihjdXJyZW50LCBsaXN0Tm9kZSk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChyZW5kZXJlci0+
aXNMaXN0SXRlbSgpKQorICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3VycmVudC0+
cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVt
KCkpCiAgICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcik7CiAKLSAg
ICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+bmV4dEluUHJlT3JkZXIobGlzdCk7CisgICAgICAg
IC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBvcHRpbWl6ZWQgdG8gc2tpcCB0aGUgY2hpbGRyZW4gb2Yg
dGhlIGVsZW1lbnRzIHdpdGhvdXQgYSByZW5kZXJlcj8KKyAgICAgICAgY3VycmVudCA9IEVsZW1l
bnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgbGlzdE5vZGUpOwogICAg
IH0KKwogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIHByZXZpb3Vz
TGlzdEl0ZW0oUmVuZGVyT2JqZWN0KiBsaXN0LCBjb25zdCBSZW5kZXJMaXN0SXRlbSogaXRlbSkK
Ky8vIFJldHVybnMgdGhlIHByZXZpb3VzIGxpc3QgaXRlbSB3aXRoIHJlc3BlY3QgdG8gdGhlIERP
TSBvcmRlci4KK3N0YXRpYyBSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNMaXN0SXRlbShOb2RlKiBs
aXN0Tm9kZSwgY29uc3QgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0pCiB7Ci0gICAgZm9yIChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gaXRlbS0+cHJldmlvdXNJblByZU9yZGVyKCk7IHJlbmRlcmVyICYm
IHJlbmRlcmVyICE9IGxpc3Q7IHJlbmRlcmVyID0gcmVuZGVyZXItPnByZXZpb3VzSW5QcmVPcmRl
cigpKSB7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkKKyAgICBOb2RlKiBj
dXJyZW50ID0gaXRlbS0+bm9kZSgpOworICAgIGZvciAoY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJz
YWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGN1cnJlbnQsIGxpc3ROb2RlKTsgY3VycmVudDsg
Y3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGN1cnJl
bnQsIGxpc3ROb2RlKSkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3VycmVu
dC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5kZXJlciB8fCAocmVuZGVyZXIgJiYgIXJl
bmRlcmVyLT5pc0xpc3RJdGVtKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIE5v
ZGUqIG90aGVyTGlzdCA9IGVuY2xvc2luZ0xpc3QodG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcikp
OwogICAgICAgICAvLyBUaGlzIGl0ZW0gaXMgcGFydCBvZiBvdXIgY3VycmVudCBsaXN0LCBzbyBp
dCdzIHdoYXQgd2UncmUgbG9va2luZyBmb3IuCi0gICAgICAgIGlmIChsaXN0LT5ub2RlKCkgPT0g
b3RoZXJMaXN0KQorICAgICAgICBpZiAobGlzdE5vZGUgPT0gb3RoZXJMaXN0KQogICAgICAgICAg
ICAgcmV0dXJuIHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIpOwogICAgICAgICAvLyBXZSBmb3Vu
ZCBvdXJzZWxmIGluc2lkZSBhbm90aGVyIGxpc3Q7IGxldHMgc2tpcCB0aGUgcmVzdCBvZiBpdC4K
LSAgICAgICAgLy8gVXNlIG5leHRJblByZU9yZGVyKCkgaGVyZSBiZWNhdXNlIHRoZSBvdGhlciBs
aXN0IGl0c2VsZiBtYXkgYWN0dWFsbHkKKyAgICAgICAgLy8gVXNlIG5leHRJbmNsdWRpbmdQc2V1
ZG8oKSBoZXJlIGJlY2F1c2UgdGhlIG90aGVyIGxpc3QgaXRzZWxmIG1heSBhY3R1YWxseQogICAg
ICAgICAvLyBiZSBhIGxpc3QgaXRlbSBpdHNlbGYuIFdlIG5lZWQgdG8gZXhhbWluZSBpdCwgc28g
d2UgZG8gdGhpcyB0byBjb3VudGVyYWN0Ci0gICAgICAgIC8vIHRoZSBwcmV2aW91c0luUHJlT3Jk
ZXIoKSB0aGF0IHdpbGwgYmUgZG9uZSBieSB0aGUgbG9vcC4KKyAgICAgICAgLy8gdGhlIHByZXZp
b3VzSW5jbHVkaW5nUHNldWRvKCkgdGhhdCB3aWxsIGJlIGRvbmUgYnkgdGhlIGxvb3AuCiAgICAg
ICAgIGlmIChvdGhlckxpc3QpCi0gICAgICAgICAgICByZW5kZXJlciA9IG90aGVyTGlzdC0+cmVu
ZGVyZXIoKS0+bmV4dEluUHJlT3JkZXIoKTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBFbGVtZW50
VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKG90aGVyTGlzdCk7CiAgICAgfQogICAgIHJl
dHVybiAwOwogfQpAQCAtMTYyLDcgKzE3MSw2IEBAIGlubGluZSBpbnQgUmVuZGVyTGlzdEl0ZW06
OmNhbGNWYWx1ZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBtX2V4cGxpY2l0VmFsdWU7CiAKICAg
ICBOb2RlKiBsaXN0ID0gZW5jbG9zaW5nTGlzdCh0aGlzKTsKLSAgICBSZW5kZXJPYmplY3QqIGxp
c3RSZW5kZXJlciA9IGxpc3QgPyBsaXN0LT5yZW5kZXJlcigpIDogMDsKICAgICBIVE1MT0xpc3RF
bGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdCAmJiBsaXN0LT5oYXNUYWdOYW1lKG9sVGFnKSkg
PyBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50Kj4obGlzdCkgOiAwOwogICAgIGludCB2YWx1
ZVN0ZXAgPSAxOwogICAgIGlmIChvTGlzdEVsZW1lbnQgJiYgb0xpc3RFbGVtZW50LT5pc1JldmVy
c2VkKCkpCkBAIC0xNzAsNyArMTc4LDcgQEAgaW5saW5lIGludCBSZW5kZXJMaXN0SXRlbTo6Y2Fs
Y1ZhbHVlKCkgY29uc3QKIAogICAgIC8vIEZJWE1FOiBUaGlzIHJlY3Vyc2VzIHRvIGEgcG9zc2li
bGUgZGVwdGggb2YgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdC4KICAgICAvLyBUaGF0J3Mgbm90IGdv
b2QgLS0gd2UgbmVlZCB0byBjaGFuZ2UgdGhpcyB0byBhbiBpdGVyYXRpdmUgYWxnb3JpdGhtLgot
ICAgIGlmIChSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNJdGVtID0gcHJldmlvdXNMaXN0SXRlbShs
aXN0UmVuZGVyZXIsIHRoaXMpKQorICAgIGlmIChSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNJdGVt
ID0gcHJldmlvdXNMaXN0SXRlbShsaXN0LCB0aGlzKSkKICAgICAgICAgcmV0dXJuIHByZXZpb3Vz
SXRlbS0+dmFsdWUoKSArIHZhbHVlU3RlcDsKIAogICAgIGlmIChvTGlzdEVsZW1lbnQpCkBAIC00
MjcsMTAgKzQzNSw3IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OmV4cGxpY2l0VmFsdWVDaGFuZ2Vk
KCkKICAgICBpZiAobV9tYXJrZXIpCiAgICAgICAgIG1fbWFya2VyLT5zZXROZWVkc0xheW91dEFu
ZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICBOb2RlKiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3Qo
dGhpcyk7Ci0gICAgUmVuZGVyT2JqZWN0KiBsaXN0UmVuZGVyZXIgPSAwOwotICAgIGlmIChsaXN0
Tm9kZSkKLSAgICAgICAgbGlzdFJlbmRlcmVyID0gbGlzdE5vZGUtPnJlbmRlcmVyKCk7Ci0gICAg
Zm9yIChSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHRoaXM7IGl0ZW07IGl0ZW0gPSBuZXh0TGlzdEl0
ZW0obGlzdFJlbmRlcmVyLCBpdGVtKSkKKyAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBpdGVtID0g
dGhpczsgaXRlbTsgaXRlbSA9IG5leHRMaXN0SXRlbShsaXN0Tm9kZSwgaXRlbSkpCiAgICAgICAg
IGl0ZW0tPnVwZGF0ZVZhbHVlKCk7CiB9CiAKQEAgLTQ1Nyw3ICs0NjIsNyBAQCB2b2lkIFJlbmRl
ckxpc3RJdGVtOjpjbGVhckV4cGxpY2l0VmFsdWUoKQogICAgIGV4cGxpY2l0VmFsdWVDaGFuZ2Vk
KCk7CiB9CiAKLXN0YXRpYyBSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNPck5leHRJdGVtKGJvb2wg
aXNMaXN0UmV2ZXJzZWQsIFJlbmRlck9iamVjdCogbGlzdCwgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0p
CitzdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIHByZXZpb3VzT3JOZXh0SXRlbShib29sIGlzTGlzdFJl
dmVyc2VkLCBOb2RlKiBsaXN0LCBSZW5kZXJMaXN0SXRlbSogaXRlbSkKIHsKICAgICByZXR1cm4g
aXNMaXN0UmV2ZXJzZWQgPyBwcmV2aW91c0xpc3RJdGVtKGxpc3QsIGl0ZW0pIDogUmVuZGVyTGlz
dEl0ZW06Om5leHRMaXN0SXRlbShsaXN0LCBpdGVtKTsKIH0KQEAgLTQ2NSwxOCArNDcwLDE4IEBA
IHN0YXRpYyBSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNPck5leHRJdGVtKGJvb2wgaXNMaXN0UmV2
ZXJzZWQsIFJlbmRlck9iamVjdCogbGlzCiB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVMaXN0
TWFya2VyTnVtYmVycygpCiB7CiAgICAgTm9kZSogbGlzdE5vZGUgPSBlbmNsb3NpbmdMaXN0KHRo
aXMpOwotICAgIEFTU0VSVChsaXN0Tm9kZSAmJiBsaXN0Tm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAg
aWYgKCFsaXN0Tm9kZSB8fCAhbGlzdE5vZGUtPnJlbmRlcmVyKCkpCisgICAgLy8gVGhlIGxpc3Qg
bm9kZSBjYW4gYmUgdGhlIHNoYWRvdyByb290IHdoaWNoIGhhcyBubyByZW5kZXJlci4KKyAgICBB
U1NFUlQobGlzdE5vZGUpOworICAgIGlmICghbGlzdE5vZGUpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGJvb2wgaXNMaXN0UmV2ZXJzZWQgPSBmYWxzZTsKLSAgICBSZW5kZXJPYmplY3QqIGxpc3Qg
PSBsaXN0Tm9kZS0+cmVuZGVyZXIoKTsKICAgICBIVE1MT0xpc3RFbGVtZW50KiBvTGlzdEVsZW1l
bnQgPSAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmhhc1RhZ05hbWUob2xUYWcpKSA/IHN0YXRpY19j
YXN0PEhUTUxPTGlzdEVsZW1lbnQqPihsaXN0Tm9kZSkgOiAwOwogICAgIGlmIChvTGlzdEVsZW1l
bnQpIHsKICAgICAgICAgb0xpc3RFbGVtZW50LT5pdGVtQ291bnRDaGFuZ2VkKCk7CiAgICAgICAg
IGlzTGlzdFJldmVyc2VkID0gb0xpc3RFbGVtZW50LT5pc1JldmVyc2VkKCk7CiAgICAgfQotICAg
IGZvciAoUmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSBwcmV2aW91c09yTmV4dEl0ZW0oaXNMaXN0UmV2
ZXJzZWQsIGxpc3QsIHRoaXMpOyBpdGVtOyBpdGVtID0gcHJldmlvdXNPck5leHRJdGVtKGlzTGlz
dFJldmVyc2VkLCBsaXN0LCBpdGVtKSkgeworICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0qIGl0ZW0g
PSBwcmV2aW91c09yTmV4dEl0ZW0oaXNMaXN0UmV2ZXJzZWQsIGxpc3ROb2RlLCB0aGlzKTsgaXRl
bTsgaXRlbSA9IHByZXZpb3VzT3JOZXh0SXRlbShpc0xpc3RSZXZlcnNlZCwgbGlzdE5vZGUsIGl0
ZW0pKSB7CiAgICAgICAgIGlmICghaXRlbS0+bV9pc1ZhbHVlVXBUb0RhdGUpIHsKICAgICAgICAg
ICAgIC8vIElmIGFuIGl0ZW0gaGFzIGJlZW4gbWFya2VkIGZvciB1cGRhdGUgYmVmb3JlLCB3ZSBj
YW4gc2FmZWx5CiAgICAgICAgICAgICAvLyBhc3N1bWUgdGhhdCBhbGwgdGhlIGZvbGxvd2luZyBv
bmVzIGhhdmUgdG9vLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RJdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaApp
bmRleCBkODhmYzQ5ODZkNTZkYzViMzJjZjA1OWVlMWQ1Zjg0MWQxNzBjODllLi43ZGQzZWFmODk0
MmI4MTY0NjYxNjZjMWFkNGM5ODNkZDliZjRhOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHVwZGF0ZUxpc3RNYXJrZXJOdW1iZXJzKCk7CiAKLSAgICBzdGF0aWMgUmVuZGVyTGlzdEl0ZW0q
IG5leHRMaXN0SXRlbShSZW5kZXJPYmplY3QqIGxpc3RSZW5kZXJlciwgY29uc3QgUmVuZGVyTGlz
dEl0ZW0qID0gMCk7CisgICAgc3RhdGljIFJlbmRlckxpc3RJdGVtKiBuZXh0TGlzdEl0ZW0oTm9k
ZSosIGNvbnN0IFJlbmRlckxpc3RJdGVtKiA9IDApOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJMaXN0SXRlbSI7
IH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCA2NDVjY2MyNzhmZjZiNGEwNWQ4MWNlMDU0YzAwYWRmM2UwYjZiYzYwLi5iNzBi
NTI1MzljZGY0YmYyNTFhYTUzNWY4M2IyNmYxNTQ4ZDY1YzM2IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTMtMDMtMjIgIEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CisKKyAgICAg
ICAgVXNlIERPTSBvcmRlcmluZyBmb3IgbGlzdCBjb3VudHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM1MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWFu
ZC1saXN0LWVsZW1lbnRzLWV4cGVjdGVkLmh0bWwgaGFzIGNoYW5nZWQgYmVjYXVzZSB0aGUgbGlz
dCBpdGVtcworICAgICAgICBpbnNpZGUgdGhlIHNoYWRvdyB0cmVlIG5vIGxvbmdlciBzZWUgdGhl
IHJvb3QgPG9sPiBlbGVtZW50LgorICAgICAgICBUaGUgdGVzdCBmYXN0L2xpc3RzL3Bvc2l0aW9u
ZWQtY291bnQtY3Jhc2guaHRtbCBoYXMgdGhlIGNvcnJlY3QgcmVuZGVyaW5nIGFmdGVyIGNoYW5n
aW5nCisgICAgICAgIHRoZSBsaXN0IGNvdW50aW5nIHRvIGJlIGluIERPTSBvcmRlci4KKworICAg
ICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYW5kLWxpc3QtZWxlbWVudHMtZXhwZWN0ZWQu
aHRtbDoKKyAgICAgICAgKiBmYXN0L2xpc3RzL3Bvc2l0aW9uZWQtY291bnQtY3Jhc2gtZXhwZWN0
ZWQudHh0OgorCiAyMDEzLTAzLTIxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFub3RoZXIgTWFjIHJlYmFzZWxpbmUgYXR0ZW1wdCBmb3IgcjE0NjUzMSBzaW5j
ZSByMTQ2NTM4IGRpZG4ndCB3b3JrLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L3NoYWRvdy1hbmQtbGlzdC1lbGVtZW50cy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1hbmQtbGlzdC1lbGVtZW50cy1leHBlY3RlZC5odG1s
CmluZGV4IDkzZWJmOWFlZGQ5M2RjZWIyNWRmYmNiMDY4OTQ5NzNmYjkyYTMyOWUuLmRiYzg4YmM2
ZjJlOGQwNDI5YTU2YzMxZTFiNTU2ZDcwYjM5NDg4NWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYW5kLWxpc3QtZWxlbWVudHMtZXhwZWN0ZWQuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWFuZC1saXN0LWVsZW1lbnRz
LWV4cGVjdGVkLmh0bWwKQEAgLTIyLDE4ICsyMiwyMyBAQAogLy8gICA8bGk+QzwvbGk+CiAvLyA8
L29sPiAgIAogdmFyIGhvc3RFcXVpdmFsZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhv
c3RFcXVpdmFsZW50Iik7Cit2YXIgc2hhZG93TGlzdFJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJvbCIpOworc2hhZG93TGlzdFJvb3Quc3R5bGUucGFkZGluZ0xlZnQgPSAiMHB4IjsKK2hv
c3RFcXVpdmFsZW50LmFwcGVuZENoaWxkKHNoYWRvd0xpc3RSb290KTsKIAogdmFyIGNoaWxkWCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7CiBjaGlsZFguaW5uZXJIVE1MID0gIlgiOwot
aG9zdEVxdWl2YWxlbnQuYXBwZW5kQ2hpbGQoY2hpbGRYKTsKK2NoaWxkWC5zdHlsZS5saXN0U3R5
bGVQb3NpdGlvbiA9ICJpbnNpZGUiOworc2hhZG93TGlzdFJvb3QuYXBwZW5kQ2hpbGQoY2hpbGRY
KTsKIAogdmFyIGNoaWxkVWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ1bCIpOwogY2hpbGRV
bC5pbm5lckhUTUwgPSAiQiI7Ci1ob3N0RXF1aXZhbGVudC5hcHBlbmRDaGlsZChjaGlsZFVsKTsK
K3NoYWRvd0xpc3RSb290LmFwcGVuZENoaWxkKGNoaWxkVWwpOwogCiB2YXIgY2hpbGRZID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKIGNoaWxkWS5pbm5lckhUTUwgPSAiWSI7Ci1ob3N0
RXF1aXZhbGVudC5hcHBlbmRDaGlsZChjaGlsZFkpOworY2hpbGRZLnN0eWxlLmxpc3RTdHlsZVBv
c2l0aW9uID0gImluc2lkZSI7CitzaGFkb3dMaXN0Um9vdC5hcHBlbmRDaGlsZChjaGlsZFkpOwog
PC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2xpc3RzL3Bvc2l0aW9uZWQtY291bnQtY3Jhc2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9saXN0cy9wb3NpdGlvbmVkLWNvdW50LWNyYXNoLWV4cGVjdGVkLnR4dAppbmRleCA5ZmMw
NjZkNWQxMWYxZTA3ODg0NzExMDExNGU3N2UyMDEwYTE2N2QwLi5jZTQwYzA4Y2I4NGY4M2Y0NmQw
N2M0NTk3M2I0MWQ4Njk1Yzk4ZWVmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2xpc3Rz
L3Bvc2l0aW9uZWQtY291bnQtY3Jhc2gtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvbGlzdHMvcG9zaXRpb25lZC1jb3VudC1jcmFzaC1leHBlY3RlZC50eHQKQEAgLTIsNSArMiw1
IEBAIElJCiAKIAogRm9yIG1hbnVhbCB0ZXN0OiBJZiB5b3Ugc2VlIG5vIGNyYXNoIGFuZCAiSUkg
SUkiLCBpdCBtZWFucyB0aGlzIHRlc3QgUEFTUy4KLUZBSUwgbGlzdCBtYXJrZXIgc2hvdWxkIGJl
IElJLiBXYXMgSS4KK1BBU1MgbGlzdCBtYXJrZXIgaXMgSUkuCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195064</attachid>
            <date>2013-03-26 05:27:49 -0700</date>
            <delta_ts>2013-04-09 03:50:35 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-110352-20130326142331.patch</filename>
            <type>text/plain</type>
            <size>32803</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2ODcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGI2Yzg4YmUwZWQyN2Ri
MGI5ZGY1ZDRjZTcwMTBmMDI3ODMyYzlkNS4uZGY4MThmMDM0NjYyYWNjY2IyMjUwOWEzYzJjYWU4
MWRlM2FjZWFiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDEzLTAzLTI1ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFVzZSBET00gb3JkZXJpbmcg
Zm9yIGxpc3QgY291bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTAzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBFbGxpb3R0IFNwcmVobi4KKwor
ICAgICAgICBDdXJyZW50bHkgdGhlIGxpc3QgaXRlbXMgb3JkZXJpbmcgaXMgbWFkZSBieSB0cmF2
ZXJzaW5nIHRoZSByZW5kZXIgdHJlZS4gVGhpcyBnaXZlcyBiYWQgcmVzdWx0cyBmb3I6CisgICAg
ICAgIC0gbGlzdCBpdGVtcyBmbG93biBpbnNpZGUgcmVnaW9ucyBiZWNhdXNlIHRoZXkgYXJlIG5v
dCByZW5kZXJlZCBhcyBkZXNjZW5kYW50cyBvZiB0aGVpciBET00gbGlzdCBhbmNlc3RvcnMuCisg
ICAgICAgIC0gbGlzdCBpdGVtcyBtYXRjaGVkIHRvIGluc2VydGlvbiBwb2ludHMgaW5zaWRlIGEg
c2hhZG93IHRyZWUuIFRoZSBpbnNlcnRpb24gcG9pbnQgbWF5IGJlIGEgY2hpbGQgb2YgYQorICAg
ICAgICBsaXN0IHNvIHRoZSBudW1iZXJpbmcgZ2V0cyBicm9rZW4uCisKKyAgICAgICAgVG8gaW1w
bGVtZW50IGNvcnJlY3QgRE9NIG9yZGVyaW5nIEkndmUgdGFrZW4gaW50byBhY2NvdW50IHRoZSBm
YWN0IHRoYXQgcHNldWRvLWVsZW1lbnRzIGNhbiBoYXZlIGRpc3BsYXk6IGxpc3QtaXRlbQorICAg
ICAgICBzbyB0aGV5IHNob3VsZCBiZSBpbmNsdWRlZCB3aGVuIHRyYXZlcnNpbmcgdGhlIERPTSB0
cmVlLiBJJ3ZlIGFkZGVkIGhlbHBlciBtZXRob2RzIG9uIHRoZSBOb2RlVHJhdmVyc2FsCisgICAg
ICAgIG5hbWVzcGFjZSB0aGF0IHNob3VsZCBhbGxvdyBlYXNpbHkgdHJhdmVyc2luZyB0aGUgdHJl
ZSBpbmNsdWRpbmcgdGhlIHBzZXVkby1lbGVtZW50cyAoZS5nLiBmaXJzdENoaWxkV2l0aFBzZXVk
bworICAgICAgICBmb3IgYW4gZWxlbWVudCB3aXRoIHBzZXVkby1iZWZvcmUgd2lsbCByZXR1cm4g
dGhlIGJlZm9yZSBQc2V1ZG9FbGVtZW50KS4gVXNpbmcgdGhlc2UgaGVscGVyIG1ldGhvZHMgSSd2
ZSBpbXBsZW1lbnRlZAorICAgICAgICBwcmUtb3JkZXIgdHJhdmVyc2FsIG1ldGhvZHMgYXdhcmUg
b2YgdGhlIHBzZXVkby1lbGVtZW50cy4KKyAgICAgICAgQW4gZWZmZWN0IG9mIHRoaXMgY2hhbmdl
IGlzIGhvdyB0aGUgbGlzdCBpdGVtcyBpbnNpZGUgc2hhZG93IHRyZWUgdXBkYXRlIHRoZWlyIGNv
dW50aW5nLiBXaXRoIHRoZSBwYXRjaCwgaWYgdGhlcmUncworICAgICAgICBubyA8b2w+IG9yIDx1
bD4gZWxlbWVudCBvbiB0aGUgYW5jZXN0b3IgY2hhaW4gb2YgYSA8bGk+IGVsZW1lbnQgdG8gdGhl
IHNoYWRvdyByb290LCB0aGUgbGlzdCBub2RlIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUKKyAgICAg
ICAgZmlyc3QgcGFyZW50IG9mIHRoZSA8bGk+IG9yIHRoZSBzaGFkb3cgcm9vdCBpZiB0aGVyZSBp
cyBubyBhbmNlc3Rvci4KKyAgICAgICAgVGhlIFJlbmRlckxpc3RJdGVtIGNsYXNzIG5vdyBtYWtl
cyB1c2Ugb2YgdGhpcyBuZXcgbWV0aG9kIG9mIHRyYXZlcnNhbCwgcmVwbGFjaW5nIHRoZSBvbmUg
YmFzZWQgb24gdGhlIHJlbmRlciB0cmVlLgorICAgICAgICBUbyBzaW1wbGlmeSB0aGUgQ1NTIGNv
dW50ZXJzIGltcGxlbWVudGF0aW9uLCBJJ3ZlIGNoYW5nZWQgdGhlIHRyYXZlcnNhbCBmdW5jdGlv
bnMgaW5zaWRlIFJlbmRlckNvdW50ZXIgdG8gYWxzbyBtYWtlIHVzZQorICAgICAgICBvZiB0aGlz
IG1ldGhvZC4gVGhlIENTUyBjb3VudGVycyBhbmQgdGhlIGxpc3QgaXRlbXMgbm93IGhhdmUgdGhl
IHNhbWUgdHJhdmVyc2FsIGFsZ29yaXRobS4KKworICAgICAgICBJbiBsYXRlciBwYXRjaGVzIEkn
bGwgYWRkIHRlc3RzIHRoYXQgc2hvdWxkIGNvdmVyIHRoZSByZWdpb25zIGFuZCBzaGFkb3cgRE9N
IHVzZSBjYXNlcy4KKyAgICAgICAgVGVzdHMgYnVnIGZvciBzaGFkb3cgRE9NOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzMTkzCisgICAgICAgIFRlc3RzIGJ1ZyBm
b3IgcmVnaW9uczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzk3
NQorCisgICAgICAgIFRlc3RzOiBubyBuZXcgdGVzdHMgaXMgdGhpcyBwYXRjaDsgYWRkZWQgdGhl
IGNvcnJlY3QgZXhwZWN0YXRpb25zIGZvciBmYXN0L2xpc3RzL3Bvc2l0aW9uZWQtY291bnQtY3Jh
c2guaHRtbAorICAgICAgICBhbmQgZmFzdC9kb20vc2hhZG93L3NoYWRvdy1hbmQtbGlzdC1lbGVt
ZW50cy5odG1sCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6cHNldWRvQXdhcmVGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnBzZXVkb0F3YXJlTGFzdENoaWxkKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAg
ICAgICAoTm9kZSk6CisgICAgICAgICogZG9tL05vZGVUcmF2ZXJzYWwuY3BwOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjpwcmV2aW91c0luY2x1
ZGluZ1BzZXVkbyk6CisgICAgICAgIChOb2RlVHJhdmVyc2FsKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZVRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4pOgorICAg
ICAgICAqIGRvbS9Ob2RlVHJhdmVyc2FsLmg6CisgICAgICAgIChFbGVtZW50VHJhdmVyc2FsKToK
KyAgICAgICAgKE5vZGVUcmF2ZXJzYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFRyYXZl
cnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbik6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGlu
Zyk6CisgICAgICAgICogaHRtbC9IVE1MTElFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxMSUVsZW1lbnQ6OmF0dGFjaCk6CisgICAgICAgICogaHRtbC9IVE1MT0xpc3RFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQ6OnVwZGF0ZUl0ZW1WYWx1
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudDo6cmVjYWxjdWxhdGVJdGVt
Q291bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnByZXZpb3VzSW5QcmVPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91
c1NpYmxpbmdPclBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJlbnRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Om5leHRJblByZU9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpl
bmNsb3NpbmdMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpuZXh0TGlz
dEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNMaXN0SXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6Y2FsY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RJdGVtOjpleHBsaWNpdFZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpw
cmV2aW91c09yTmV4dEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVw
ZGF0ZUxpc3RNYXJrZXJOdW1iZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0
ZW0uaDoKKyAgICAgICAgKFJlbmRlckxpc3RJdGVtKToKKwogMjAxMy0wMy0yNiAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjE0Njc2Ny4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA5NjZmZTcyNDRkNjExMmUx
NWVjMDVmN2Y4YjE0YmQzYzQ5ZWJmMGI5Li41ZmVhNzg2Nzk5MTI4OTFmNWJkZGI0ODE1ZDUyZTFj
MzhkNDliODY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xMTM0LDYgKzExMzQsNjIgQEAgdm9pZCBO
b2RlOjpkZXRhY2goKQogI2VuZGlmCiB9CiAKK05vZGUqIE5vZGU6OnBzZXVkb0F3YXJlUHJldmlv
dXNTaWJsaW5nKCkgY29uc3QKK3sKKyAgICBpZiAocGFyZW50RWxlbWVudCgpICYmICFwcmV2aW91
c1NpYmxpbmcoKSkgeworICAgICAgICBFbGVtZW50KiBwYXJlbnQgPSBwYXJlbnRFbGVtZW50KCk7
CisgICAgICAgIGlmIChpc0FmdGVyUHNldWRvRWxlbWVudCgpICYmIHBhcmVudC0+bGFzdENoaWxk
KCkpCisgICAgICAgICAgICByZXR1cm4gcGFyZW50LT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgaWYg
KCFpc0JlZm9yZVBzZXVkb0VsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPnBz
ZXVkb0VsZW1lbnQoQkVGT1JFKTsKKyAgICB9CisgICAgcmV0dXJuIHByZXZpb3VzU2libGluZygp
OworfQorCitOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZU5leHRTaWJsaW5nKCkgY29uc3QKK3sKKyAg
ICBpZiAocGFyZW50RWxlbWVudCgpICYmICFuZXh0U2libGluZygpKSB7CisgICAgICAgIEVsZW1l
bnQqIHBhcmVudCA9IHBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGlzQmVmb3JlUHNldWRv
RWxlbWVudCgpICYmIHBhcmVudC0+Zmlyc3RDaGlsZCgpKQorICAgICAgICAgICAgcmV0dXJuIHBh
cmVudC0+Zmlyc3RDaGlsZCgpOworICAgICAgICBpZiAoIWlzQWZ0ZXJQc2V1ZG9FbGVtZW50KCkp
CisgICAgICAgICAgICByZXR1cm4gcGFyZW50LT5wc2V1ZG9FbGVtZW50KEFGVEVSKTsKKyAgICB9
CisgICAgcmV0dXJuIG5leHRTaWJsaW5nKCk7Cit9CisKK05vZGUqIE5vZGU6OnBzZXVkb0F3YXJl
Rmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRWxlbWVudE5vZGUoKSkgeworICAgICAg
ICBjb25zdCBFbGVtZW50KiBjdXJyZW50RWxlbWVudCA9IHRvRWxlbWVudCh0aGlzKTsKKyAgICAg
ICAgTm9kZSogZmlyc3QgPSBjdXJyZW50RWxlbWVudC0+cHNldWRvRWxlbWVudChCRUZPUkUpOwor
ICAgICAgICBpZiAoZmlyc3QpCisgICAgICAgICAgICByZXR1cm4gZmlyc3Q7CisgICAgICAgIGZp
cnN0ID0gY3VycmVudEVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKCFmaXJzdCkK
KyAgICAgICAgICAgIGZpcnN0ID0gY3VycmVudEVsZW1lbnQtPnBzZXVkb0VsZW1lbnQoQUZURVIp
OworICAgICAgICByZXR1cm4gZmlyc3Q7CisgICAgfQorCisgICAgcmV0dXJuIGZpcnN0Q2hpbGQo
KTsKK30KKworTm9kZSogTm9kZTo6cHNldWRvQXdhcmVMYXN0Q2hpbGQoKSBjb25zdAoreworICAg
IGlmIChpc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgY29uc3QgRWxlbWVudCogY3VycmVudEVs
ZW1lbnQgPSB0b0VsZW1lbnQodGhpcyk7CisgICAgICAgIE5vZGUqIGxhc3QgPSBjdXJyZW50RWxl
bWVudC0+cHNldWRvRWxlbWVudChBRlRFUik7CisgICAgICAgIGlmIChsYXN0KQorICAgICAgICAg
ICAgcmV0dXJuIGxhc3Q7CisgICAgICAgIGxhc3QgPSBjdXJyZW50RWxlbWVudC0+bGFzdENoaWxk
KCk7CisgICAgICAgIGlmICghbGFzdCkKKyAgICAgICAgICAgIGxhc3QgPSBjdXJyZW50RWxlbWVu
dC0+cHNldWRvRWxlbWVudChCRUZPUkUpOworICAgICAgICByZXR1cm4gbGFzdDsKKyAgICB9CisK
KyAgICByZXR1cm4gbGFzdENoaWxkKCk7Cit9CisKIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgdXNl
ZCBieSBlZGl0aW5nLiAgU2VlbXMgbGlrZSBpdCBjb3VsZCBtb3ZlIG92ZXIgdGhlcmUgYW5kIG5v
dCBwb2xsdXRlIE5vZGUuCiBOb2RlICpOb2RlOjpwcmV2aW91c05vZGVDb25zaWRlcmluZ0F0b21p
Y05vZGVzKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDhhNmRkODJjMWZlZDA3ZTRlZjY3YzVj
ZmNlMjk0ZTJkN2E1MGE1MjUuLjRlOGEyZTg4MTgzMWNmNjdiZDM5MDE1NzZlMzMzMGIyMTVlMjcx
NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaApAQCAtMTk1LDYgKzE5NSwxMCBAQCBwdWJsaWM6CiAgICAgTm9kZSog
bGFzdENoaWxkKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAg
TmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgTm9kZSogcHNldWRvQXdhcmVO
ZXh0U2libGluZygpIGNvbnN0OworICAgIE5vZGUqIHBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5n
KCkgY29uc3Q7CisgICAgTm9kZSogcHNldWRvQXdhcmVGaXJzdENoaWxkKCkgY29uc3Q7CisgICAg
Tm9kZSogcHNldWRvQXdhcmVMYXN0Q2hpbGQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgS1VSTCBi
YXNlVVJJKCkgY29uc3Q7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZVRyYXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5jcHAKaW5k
ZXggNDgyYTNiYWMxMmFjZTI3ZGQxYmU4NDFjNGVjMWI3N2Q2ZmM4YjZlOS4uMjE2YTdhNzdhZGQ2
YjU0ZTUyMTFjODdlNTI3ZWE4ODUyMDJlOGRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGVUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVy
c2FsLmNwcApAQCAtMjYsMTAgKzI2LDU5IEBACiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgog
CiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgeworCiBuYW1lc3BhY2UgTm9kZVRyYXZlcnNhbCB7CiAKK05v
ZGUqIHByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5v
ZGUqIHN0YXlXaXRoaW4pCit7CisgICAgTm9kZSogcHJldmlvdXM7CisgICAgaWYgKGN1cnJlbnQg
PT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKChwcmV2aW91cyA9IGN1
cnJlbnQtPnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKCkpKSB7CisgICAgICAgIHdoaWxlIChw
cmV2aW91cy0+cHNldWRvQXdhcmVMYXN0Q2hpbGQoKSkKKyAgICAgICAgICAgIHByZXZpb3VzID0g
cHJldmlvdXMtPnBzZXVkb0F3YXJlTGFzdENoaWxkKCk7CisgICAgICAgIHJldHVybiBwcmV2aW91
czsKKyAgICB9CisgICAgcmV0dXJuIGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKK30KKworTm9kZSog
bmV4dEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5
V2l0aGluKQoreworICAgIE5vZGUqIG5leHQ7CisgICAgaWYgKChuZXh0ID0gY3VycmVudC0+cHNl
dWRvQXdhcmVGaXJzdENoaWxkKCkpKQorICAgICAgICByZXR1cm4gbmV4dDsKKyAgICBpZiAoY3Vy
cmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoKG5leHQgPSBj
dXJyZW50LT5wc2V1ZG9Bd2FyZU5leHRTaWJsaW5nKCkpKQorICAgICAgICByZXR1cm4gbmV4dDsK
KyAgICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCk7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gc3Rh
eVdpdGhpbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoKG5leHQgPSBjdXJy
ZW50LT5wc2V1ZG9Bd2FyZU5leHRTaWJsaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIG5leHQ7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCitOb2RlKiBuZXh0SW5jbHVkaW5nUHNldWRvU2tp
cHBpbmdDaGlsZHJlbihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGlu
KQoreworICAgIE5vZGUqIG5leHQ7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgaWYgKChuZXh0ID0gY3VycmVudC0+cHNldWRvQXdhcmVOZXh0
U2libGluZygpKSkKKyAgICAgICAgcmV0dXJuIG5leHQ7CisgICAgZm9yIChjdXJyZW50ID0gY3Vy
cmVudC0+cGFyZW50Tm9kZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9k
ZSgpKSB7CisgICAgICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgaWYgKChuZXh0ID0gY3VycmVudC0+cHNldWRvQXdhcmVOZXh0U2li
bGluZygpKSkKKyAgICAgICAgICAgIHJldHVybiBuZXh0OworICAgIH0KKyAgICByZXR1cm4gMDsK
K30KKwogTm9kZSogbmV4dEFuY2VzdG9yU2libGluZyhjb25zdCBOb2RlKiBjdXJyZW50KQogewog
ICAgIEFTU0VSVCghY3VycmVudC0+bmV4dFNpYmxpbmcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2
ZXJzYWwuaAppbmRleCA3YTNjYTBlNmYzM2UwZTFmZDUyMzdhMzE0MzFmZDVjZTk3MjA5YzFkLi4y
YWQ0OTIyZTJlMjI5NjAyMzc0YjI0NzhkZmVkYTk5NzQ4ODA4NDljIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlVHJhdmVyc2FsLmgKQEAgLTM0LDE3ICszNCwyNyBAQCBuYW1lc3BhY2UgRWxlbWVudFRyYXZl
cnNhbCB7CiAvLyBGaXJzdCBlbGVtZW50IGNoaWxkIG9mIHRoZSBub2RlLgogRWxlbWVudCogZmly
c3RXaXRoaW4oY29uc3QgTm9kZSopOwogRWxlbWVudCogZmlyc3RXaXRoaW4oY29uc3QgQ29udGFp
bmVyTm9kZSopOworCiAvLyBQcmUtb3JkZXIgdHJhdmVyc2FsIHNraXBwaW5nIG5vbi1lbGVtZW50
IG5vZGVzLgogRWxlbWVudCogbmV4dChjb25zdCBOb2RlKik7CiBFbGVtZW50KiBuZXh0KGNvbnN0
IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKIEVsZW1lbnQqIG5leHQoY29uc3QgQ29u
dGFpbmVyTm9kZSopOwogRWxlbWVudCogbmV4dChjb25zdCBDb250YWluZXJOb2RlKiwgY29uc3Qg
Tm9kZSogc3RheVdpdGhpbik7CisKIC8vIExpa2UgbmV4dCwgYnV0IHNraXBzIGNoaWxkcmVuLgog
RWxlbWVudCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSopOwogRWxlbWVudCogbmV4
dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pOwog
RWxlbWVudCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgQ29udGFpbmVyTm9kZSopOwogRWxl
bWVudCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IE5v
ZGUqIHN0YXlXaXRoaW4pOwogCisvLyBQcmUtb3JkZXIgdHJhdmVyc2FsIGluY2x1ZGluZyB0aGUg
cHNldWRvLWVsZW1lbnRzLgorRWxlbWVudCogcHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY29uc3Qg
Tm9kZSosIGNvbnN0IE5vZGUqID0gMCk7CitFbGVtZW50KiBuZXh0SW5jbHVkaW5nUHNldWRvKGNv
bnN0IE5vZGUqLCBjb25zdCBOb2RlKiA9IDApOworRWxlbWVudCogbmV4dEluY2x1ZGluZ1BzZXVk
b1NraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqID0gMCk7CisKKy8vIFV0
aWxpdHkgZnVuY3Rpb24gdG8gdHJhdmVyc2Ugb25seSB0aGUgZWxlbWVudCBhbmQgcHNldWRvLWVs
ZW1lbnQgc2libGluZ3Mgb2YgYSBub2RlLgorRWxlbWVudCogcHNldWRvQXdhcmVQcmV2aW91c1Np
YmxpbmcoY29uc3QgTm9kZSopOworCiB9CiAKIG5hbWVzcGFjZSBOb2RlVHJhdmVyc2FsIHsKQEAg
LTc3LDYgKzg3LDExIEBAIE5vZGUqIG5leHRQb3N0T3JkZXIoY29uc3QgTm9kZSosIGNvbnN0IE5v
ZGUqIHN0YXlXaXRoaW4gPSAwKTsKIE5vZGUqIHByZXZpb3VzUG9zdE9yZGVyKGNvbnN0IE5vZGUq
LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCk7CiBOb2RlKiBwcmV2aW91c1NraXBwaW5nQ2hp
bGRyZW5Qb3N0T3JkZXIoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKTsK
IAorLy8gUHJlLW9yZGVyIHRyYXZlcnNhbCBpbmNsdWRpbmcgdGhlIHBzZXVkby1lbGVtZW50cy4K
K05vZGUqIHByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiA9
IDApOworTm9kZSogbmV4dEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiwgY29uc3QgTm9kZSog
PSAwKTsKK05vZGUqIG5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5v
ZGUqLCBjb25zdCBOb2RlKiA9IDApOworCiB9CiAKIG5hbWVzcGFjZSBFbGVtZW50VHJhdmVyc2Fs
IHsKQEAgLTEzNSw2ICsxNTAsMzkgQEAgaW5saW5lIEVsZW1lbnQqIHRyYXZlcnNlTmV4dEVsZW1l
bnRTa2lwcGluZ0NoaWxkcmVuVGVtcGxhdGUoTm9kZVR5cGUqIGN1cnJlbnQsIGMKIH0KIGlubGlu
ZSBFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGlsZHJlbihjb25zdCBDb250YWluZXJOb2RlKiBjdXJy
ZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKSB7IHJldHVybiB0cmF2ZXJzZU5leHRFbGVtZW50
U2tpcHBpbmdDaGlsZHJlblRlbXBsYXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4pOyB9CiBpbmxpbmUg
RWxlbWVudCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSogY3VycmVudCwgY29uc3Qg
Tm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJhdmVyc2VOZXh0RWxlbWVudFNraXBwaW5nQ2hp
bGRyZW5UZW1wbGF0ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQorCitpbmxpbmUgRWxlbWVudCog
cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSog
c3RheVdpdGhpbikKK3sKKyAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNJ
bmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgc3RheVdpdGhpbik7CisgICAgd2hpbGUgKG5vZGUgJiYg
IW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnBy
ZXZpb3VzSW5jbHVkaW5nUHNldWRvKG5vZGUsIHN0YXlXaXRoaW4pOworICAgIHJldHVybiB0b0Vs
ZW1lbnQobm9kZSk7Cit9CisKK2lubGluZSBFbGVtZW50KiBuZXh0SW5jbHVkaW5nUHNldWRvKGNv
bnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgTm9kZSog
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgc3RheVdp
dGhpbik7CisgICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAg
ICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8obm9kZSwgc3RheVdp
dGhpbik7CisgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKK30KKworaW5saW5lIEVsZW1lbnQq
IG5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqIGN1cnJlbnQs
IGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGN1cnJlbnQsIHN0YXlXaXRo
aW4pOworICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAg
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJl
bihub2RlLCBzdGF5V2l0aGluKTsKKyAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworfQorCitp
bmxpbmUgRWxlbWVudCogcHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoY29uc3QgTm9kZSogY3Vy
cmVudCkKK3sKKyAgICBOb2RlKiBub2RlID0gY3VycmVudC0+cHNldWRvQXdhcmVQcmV2aW91c1Np
YmxpbmcoKTsKKyAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAg
ICAgICBub2RlID0gbm9kZS0+cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoKTsKKyAgICByZXR1
cm4gdG9FbGVtZW50KG5vZGUpOworfQorCiB9CiAKIG5hbWVzcGFjZSBOb2RlVHJhdmVyc2FsIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExJRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxMSUVsZW1lbnQuY3BwCmluZGV4IDZkMGE1MjNlNmVmOThkM2Mz
ZGYwODhkNmYzNDkyNDNkNGFkZGUyZWYuLjJlZjBkZDc2YWVhMTZmOTVlYmRmYzI1ZTU5NmEwMzEw
MjNjZDY2Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExJRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcApAQCAtOTIsMjMg
KzkyLDIzIEBAIHZvaWQgSFRNTExJRWxlbWVudDo6YXR0YWNoKCkKICAgICBIVE1MRWxlbWVudDo6
YXR0YWNoKCk7CiAKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0xpc3RJdGVt
KCkpIHsKLSAgICAgICAgUmVuZGVyTGlzdEl0ZW0qIHJlbmRlciA9IHRvUmVuZGVyTGlzdEl0ZW0o
cmVuZGVyZXIoKSk7CisgICAgICAgIFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbVJlbmRlcmVyID0g
dG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcigpKTsKIAogICAgICAgICAvLyBGaW5kIHRoZSBlbmNs
b3NpbmcgbGlzdCBub2RlLgotICAgICAgICBOb2RlKiBsaXN0Tm9kZSA9IDA7Ci0gICAgICAgIEV2
ZW50UGF0aFdhbGtlciB3YWxrZXIodGhpcyk7CisgICAgICAgIEVsZW1lbnQqIGxpc3ROb2RlID0g
MDsKKyAgICAgICAgRWxlbWVudCogY3VycmVudCA9IHRoaXM7CiAgICAgICAgIHdoaWxlICghbGlz
dE5vZGUpIHsKLSAgICAgICAgICAgIHdhbGtlci5tb3ZlVG9QYXJlbnQoKTsKLSAgICAgICAgICAg
IGlmICghd2Fsa2VyLm5vZGUoKSkKKyAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5wYXJl
bnRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBpZiAod2Fsa2VyLm5vZGUoKS0+aGFzVGFnTmFtZSh1bFRhZykg
fHwgd2Fsa2VyLm5vZGUoKS0+aGFzVGFnTmFtZShvbFRhZykpCi0gICAgICAgICAgICAgICAgbGlz
dE5vZGUgPSB3YWxrZXIubm9kZSgpOworICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05h
bWUodWxUYWcpIHx8IGN1cnJlbnQtPmhhc1RhZ05hbWUob2xUYWcpKQorICAgICAgICAgICAgICAg
IGxpc3ROb2RlID0gY3VycmVudDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHdlIGFyZSBu
b3QgaW4gYSBsaXN0LCB0ZWxsIHRoZSByZW5kZXJlciBzbyBpdCBjYW4gcG9zaXRpb24gdXMgaW5z
aWRlLgogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNoYW5nZSBvdXIgc3R5bGUgdG8gc2F5
ICJpbnNpZGUiIHNpbmNlIHRoYXQgd291bGQgYWZmZWN0IG5lc3RlZCBub2Rlcy4KICAgICAgICAg
aWYgKCFsaXN0Tm9kZSkKLSAgICAgICAgICAgIHJlbmRlci0+c2V0Tm90SW5MaXN0KHRydWUpOwor
ICAgICAgICAgICAgbGlzdEl0ZW1SZW5kZXJlci0+c2V0Tm90SW5MaXN0KHRydWUpOwogCiAgICAg
ICAgIHBhcnNlVmFsdWUoZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpKTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcAppbmRleCA0NWZlNDI2ZjQ3MmZjOTQ5
M2JiZTFmNGZjMjA4MDg4ODBlZmVhN2RkLi4zOTZlMzQwNGZlOTMxNjQ2NjIwMThkYTI1NGQwMDhi
NGZlNTRiNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAKQEAg
LTEwNiw3ICsxMDYsNyBAQCB2b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnNldFN0YXJ0KGludCBzdGFy
dCkKIAogdm9pZCBIVE1MT0xpc3RFbGVtZW50Ojp1cGRhdGVJdGVtVmFsdWVzKCkKIHsKLSAgICBm
b3IgKFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSA9IFJlbmRlckxpc3RJdGVtOjpuZXh0TGlzdEl0
ZW0ocmVuZGVyZXIoKSk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IFJlbmRlckxpc3RJdGVtOjpuZXh0
TGlzdEl0ZW0ocmVuZGVyZXIoKSwgbGlzdEl0ZW0pKQorICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0q
IGxpc3RJdGVtID0gUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbSh0aGlzKTsgbGlzdEl0ZW07
IGxpc3RJdGVtID0gUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbSh0aGlzLCBsaXN0SXRlbSkp
CiAgICAgICAgIGxpc3RJdGVtLT51cGRhdGVWYWx1ZSgpOwogfQogCkBAIC0xMTQsNyArMTE0LDcg
QEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpyZWNhbGN1bGF0ZUl0ZW1Db3VudCgpCiB7CiAgICAg
bV9pdGVtQ291bnQgPSAwOwogCi0gICAgZm9yIChSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0gPSBS
ZW5kZXJMaXN0SXRlbTo6bmV4dExpc3RJdGVtKHJlbmRlcmVyKCkpOyBsaXN0SXRlbTsgbGlzdEl0
ZW0gPSBSZW5kZXJMaXN0SXRlbTo6bmV4dExpc3RJdGVtKHJlbmRlcmVyKCksIGxpc3RJdGVtKSkK
KyAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSA9IFJlbmRlckxpc3RJdGVtOjpuZXh0
TGlzdEl0ZW0odGhpcyk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IFJlbmRlckxpc3RJdGVtOjpuZXh0
TGlzdEl0ZW0odGhpcywgbGlzdEl0ZW0pKQogICAgICAgICBtX2l0ZW1Db3VudCsrOwogCiAgICAg
bV9zaG91bGRSZWNhbGN1bGF0ZUl0ZW1Db3VudCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4IDM0YjJjYjg1MzBlMDM1NGMwYzk2Zjc2NTBl
NmI1N2UwOTNkYTk4ZWYuLjU3MmM5YTI5YWVjYThlYjFlNmVlMTU2MWM4Y2E2NWQ3NjNiZTdiZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAgLTU3LDk0
ICs1NywzMCBAQCBzdGF0aWMgQ291bnRlck1hcHMmIGNvdW50ZXJNYXBzKCkKIC8vIGluY2x1ZGlu
ZyBwc2V1ZG8gZWxlbWVudHMgYXMgZGVmaW5lZCBpbiBDU1MgMi4xLgogc3RhdGljIFJlbmRlck9i
amVjdCogcHJldmlvdXNJblByZU9yZGVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogewot
ICAgIEVsZW1lbnQqIHBhcmVudDsKLSAgICBFbGVtZW50KiBzaWJsaW5nOwotICAgIHN3aXRjaCAo
b2JqZWN0LT5zdHlsZSgpLT5zdHlsZVR5cGUoKSkgewotICAgIGNhc2UgTk9QU0VVRE86Ci0gICAg
ICAgIEFTU0VSVCghb2JqZWN0LT5pc0Fub255bW91cygpKTsKLSAgICAgICAgcGFyZW50ID0gdG9F
bGVtZW50KG9iamVjdC0+bm9kZSgpKTsKLSAgICAgICAgc2libGluZyA9IHBhcmVudC0+cHJldmlv
dXNFbGVtZW50U2libGluZygpOwotICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudEVsZW1l
bnQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCRUZPUkU6Ci0gICAgICAgIHJldHVybiBv
YmplY3QtPmdlbmVyYXRpbmdOb2RlKCktPnJlbmRlcmVyKCk7IC8vIEl0IGlzIGFsd2F5cyB0aGUg
Z2VuZXJhdGluZyBub2RlJ3MgcmVuZGVyZXIKLSAgICBjYXNlIEFGVEVSOgotICAgICAgICBwYXJl
bnQgPSB0b0VsZW1lbnQob2JqZWN0LT5nZW5lcmF0aW5nTm9kZSgpKTsKLSAgICAgICAgc2libGlu
ZyA9IHBhcmVudC0+bGFzdEVsZW1lbnRDaGlsZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIHdoaWxlIChzaWJsaW5nKSB7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gc2libGluZy0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaWYgKFJlbmRlck9i
amVjdCogYWZ0ZXIgPSBzaWJsaW5nLT5wc2V1ZG9FbGVtZW50UmVuZGVyZXIoQUZURVIpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBhZnRlcjsKLSAgICAgICAgICAgIHBhcmVudCA9IHNpYmxpbmc7
Ci0gICAgICAgICAgICBzaWJsaW5nID0gc2libGluZy0+bGFzdEVsZW1lbnRDaGlsZCgpOwotICAg
ICAgICAgICAgaWYgKCFzaWJsaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFJlbmRlck9iamVj
dCogYmVmb3JlID0gdG9FbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5wc2V1ZG9FbGVtZW50UmVu
ZGVyZXIoQkVGT1JFKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJlZm9yZTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcmVuZGVyZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmco
KTsKLSAgICB9Ci0gICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChS
ZW5kZXJPYmplY3QqIGJlZm9yZSA9IHBhcmVudC0+cHNldWRvRWxlbWVudFJlbmRlcmVyKEJFRk9S
RSkpCi0gICAgICAgIHJldHVybiBiZWZvcmU7Ci0gICAgcmV0dXJuIHBhcmVudC0+cmVuZGVyZXIo
KTsKKyAgICBFbGVtZW50KiBzZWxmID0gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgpKTsKKyAgICBF
bGVtZW50KiBwcmV2aW91cyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNl
dWRvKHNlbGYpOworICAgIHdoaWxlIChwcmV2aW91cyAmJiAhcHJldmlvdXMtPnJlbmRlcmVyKCkp
CisgICAgICAgIHByZXZpb3VzID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQ
c2V1ZG8ocHJldmlvdXMpOworICAgIHJldHVybiBwcmV2aW91cyA/IHByZXZpb3VzLT5yZW5kZXJl
cigpIDogMDsKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJlbmRlcmVyIHRy
ZWUgaW4gdGhlIG9yZGVyIG9mIHRoZSBET00gdHJlZQogLy8gaW5jbHVkaW5nIHBzZXVkbyBlbGVt
ZW50cyBhcyBkZWZpbmVkIGluIENTUyAyLjEuCiBzdGF0aWMgUmVuZGVyT2JqZWN0KiBwcmV2aW91
c1NpYmxpbmdPclBhcmVudChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBFbGVt
ZW50KiBwYXJlbnQ7Ci0gICAgRWxlbWVudCogc2libGluZzsKLSAgICBzd2l0Y2ggKG9iamVjdC0+
c3R5bGUoKS0+c3R5bGVUeXBlKCkpIHsKLSAgICBjYXNlIE5PUFNFVURPOgotICAgICAgICBBU1NF
UlQoIW9iamVjdC0+aXNBbm9ueW1vdXMoKSk7Ci0gICAgICAgIHBhcmVudCA9IHRvRWxlbWVudChv
YmplY3QtPm5vZGUoKSk7Ci0gICAgICAgIHNpYmxpbmcgPSBwYXJlbnQtPnByZXZpb3VzRWxlbWVu
dFNpYmxpbmcoKTsKLSAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkVGT1JFOgotICAgICAgICByZXR1cm4gb2JqZWN0LT5n
ZW5lcmF0aW5nTm9kZSgpLT5yZW5kZXJlcigpOyAvLyBJdCBpcyBhbHdheXMgdGhlIGdlbmVyYXRp
bmcgbm9kZSdzIHJlbmRlcmVyCi0gICAgY2FzZSBBRlRFUjoKLSAgICAgICAgcGFyZW50ID0gdG9F
bGVtZW50KG9iamVjdC0+Z2VuZXJhdGluZ05vZGUoKSk7Ci0gICAgICAgIHNpYmxpbmcgPSBwYXJl
bnQtPmxhc3RFbGVtZW50Q2hpbGQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAg
ICB3aGlsZSAoc2libGluZykgewotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IHNpYmxpbmctPnJlbmRlcmVyKCkpIC8vIFRoaXMgc2tpcHMgaW52aXNpYmxlIG5vZGVzCi0gICAg
ICAgICAgICByZXR1cm4gcmVuZGVyZXI7Ci0gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2
aW91c0VsZW1lbnRTaWJsaW5nKCk7Ci0gICAgfQotICAgIGlmICghcGFyZW50KQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBiZWZvcmUgPSBwYXJlbnQtPnBzZXVkb0Vs
ZW1lbnRSZW5kZXJlcihCRUZPUkUpKQotICAgICAgICByZXR1cm4gYmVmb3JlOwotICAgIHJldHVy
biBwYXJlbnQtPnJlbmRlcmVyKCk7CisgICAgRWxlbWVudCogc2VsZiA9IHRvRWxlbWVudChvYmpl
Y3QtPm5vZGUoKSk7CisgICAgRWxlbWVudCogcHJldmlvdXMgPSBFbGVtZW50VHJhdmVyc2FsOjpw
c2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZyhzZWxmKTsKKyAgICB3aGlsZSAocHJldmlvdXMgJiYg
IXByZXZpb3VzLT5yZW5kZXJlcigpKQorICAgICAgICBwcmV2aW91cyA9IEVsZW1lbnRUcmF2ZXJz
YWw6OnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKHByZXZpb3VzKTsKKyAgICBpZiAocHJldmlv
dXMpCisgICAgICAgIHJldHVybiBwcmV2aW91cy0+cmVuZGVyZXIoKTsKKyAgICBwcmV2aW91cyA9
IHNlbGYtPnBhcmVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gcHJldmlvdXMgPyBwcmV2aW91cy0+
cmVuZGVyZXIoKSA6IDA7CiB9CiAKLXN0YXRpYyBFbGVtZW50KiBwYXJlbnRFbGVtZW50KFJlbmRl
ck9iamVjdCogb2JqZWN0KQorc3RhdGljIGlubGluZSBFbGVtZW50KiBwYXJlbnRFbGVtZW50KFJl
bmRlck9iamVjdCogb2JqZWN0KQogewotICAgIHN3aXRjaCAob2JqZWN0LT5zdHlsZSgpLT5zdHls
ZVR5cGUoKSkgewotICAgIGNhc2UgTk9QU0VVRE86Ci0gICAgICAgIEFTU0VSVCghb2JqZWN0LT5p
c0Fub255bW91cygpKTsKLSAgICAgICAgcmV0dXJuIHRvRWxlbWVudChvYmplY3QtPm5vZGUoKSkt
PnBhcmVudEVsZW1lbnQoKTsKLSAgICBjYXNlIEJFRk9SRToKLSAgICBjYXNlIEFGVEVSOgotICAg
ICAgICByZXR1cm4gdG9FbGVtZW50KG9iamVjdC0+Z2VuZXJhdGluZ05vZGUoKSk7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KKyAgICByZXR1cm4gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgpKS0+cGFyZW50RWxlbWVu
dCgpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgYXJlUmVuZGVyZXJzRWxlbWVudHNTaWJsaW5n
cyhSZW5kZXJPYmplY3QqIGZpcnN0LCBSZW5kZXJPYmplY3QqIHNlY29uZCkKQEAgLTE1Niw0NCAr
OTIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGFyZVJlbmRlcmVyc0VsZW1lbnRzU2libGluZ3Mo
UmVuZGVyT2JqZWN0KiBmaXJzdCwgUmVuZGVyT2JqZWMKIC8vIGluY2x1ZGluZyBwc2V1ZG8gZWxl
bWVudHMgYXMgZGVmaW5lZCBpbiBDU1MgMi4xLgogc3RhdGljIFJlbmRlck9iamVjdCogbmV4dElu
UHJlT3JkZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEVsZW1lbnQqIHN0YXlX
aXRoaW4sIGJvb2wgc2tpcERlc2NlbmRhbnRzID0gZmFsc2UpCiB7Ci0gICAgRWxlbWVudCogc2Vs
ZjsKLSAgICBFbGVtZW50KiBjaGlsZDsKLSAgICBzZWxmID0gdG9FbGVtZW50KG9iamVjdC0+Z2Vu
ZXJhdGluZ05vZGUoKSk7Ci0gICAgaWYgKHNraXBEZXNjZW5kYW50cykKLSAgICAgICAgZ290byBu
ZXh0c2libGluZzsKLSAgICBzd2l0Y2ggKG9iamVjdC0+c3R5bGUoKS0+c3R5bGVUeXBlKCkpIHsK
LSAgICBjYXNlIE5PUFNFVURPOgotICAgICAgICBBU1NFUlQoIW9iamVjdC0+aXNBbm9ueW1vdXMo
KSk7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGJlZm9yZSA9IHNlbGYtPnBzZXVkb0VsZW1l
bnRSZW5kZXJlcihCRUZPUkUpKQotICAgICAgICAgICAgcmV0dXJuIGJlZm9yZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBCRUZPUkU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQUZURVI6
Ci0gICAgICAgIGdvdG8gbmV4dHNpYmxpbmc7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBjaGlsZCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHNlbGYpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0g
ICAgICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBjaGlsZC0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVy
ZXI7Ci0gICAgICAgICAgICBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0No
aWxkcmVuKGNoaWxkLCBzZWxmKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0
KiBhZnRlciA9IHNlbGYtPnBzZXVkb0VsZW1lbnRSZW5kZXJlcihBRlRFUikpCi0gICAgICAgICAg
ICByZXR1cm4gYWZ0ZXI7Ci1uZXh0c2libGluZzoKLSAgICAgICAgaWYgKHNlbGYgPT0gc3RheVdp
dGhpbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjaGlsZCA9IEVsZW1lbnRUcmF2
ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHNlbGYpOwotICAgICAgICBzZWxmID0gc2VsZi0+
cGFyZW50RWxlbWVudCgpOwotICAgICAgICBpZiAoIXNlbGYpIHsKLSAgICAgICAgICAgIEFTU0VS
VCghY2hpbGQpOyAvLyBXZSBjYW4gb25seSByZWFjaCB0aGlzIGlmIHdlIGFyZSBzZWFyY2hpbmcg
YmV5b25kIHRoZSByb290IGVsZW1lbnQKLSAgICAgICAgICAgIHJldHVybiAwOyAvLyAgd2hpY2gg
Y2Fubm90IGhhdmUgc2libGluZ3MKLSAgICAgICAgfQotICAgIH0KKyAgICBFbGVtZW50KiBzZWxm
ID0gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgpKTsKKyAgICBFbGVtZW50KiBuZXh0ID0gc2tpcERl
c2NlbmRhbnRzID8gRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5n
Q2hpbGRyZW4oc2VsZiwgc3RheVdpdGhpbikgOiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVk
aW5nUHNldWRvKHNlbGYsIHN0YXlXaXRoaW4pOworICAgIHdoaWxlIChuZXh0ICYmICFuZXh0LT5y
ZW5kZXJlcigpKQorICAgICAgICBuZXh0ID0gc2tpcERlc2NlbmRhbnRzID8gRWxlbWVudFRyYXZl
cnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4obmV4dCwgc3RheVdpdGhp
bikgOiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKG5leHQsIHN0YXlXaXRo
aW4pOworICAgIHJldHVybiBuZXh0ID8gbmV4dC0+cmVuZGVyZXIoKSA6IDA7CiB9CiAKIHN0YXRp
YyBib29sIHBsYW5Db3VudGVyKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBBdG9taWNTdHJp
bmcmIGlkZW50aWZpZXIsIGJvb2wmIGlzUmVzZXQsIGludCYgdmFsdWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAppbmRleCBmMmMyZmIzMjU2ZDlmMTk2MTk2
Y2VkNzVjZjFkNmM4NTI2MmQyMDc4Li4xMTFlNmJkZDZmMzgzYTJjYTE0MjM1ZTEwZDI2MTZmNThh
MWUyNDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0
ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPTGlzdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2Rl
VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKQEAgLTk2LDE4ICs5
NywxNyBAQCBzdGF0aWMgYm9vbCBpc0xpc3QoTm9kZSogbm9kZSkKICAgICByZXR1cm4gKG5vZGUt
Pmhhc1RhZ05hbWUodWxUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUob2xUYWcpKTsKIH0KIAorLy8g
UmV0dXJucyB0aGUgZW5jbG9zaW5nIGxpc3Qgd2l0aCByZXNwZWN0IHRvIHRoZSBET00gb3JkZXIu
CiBzdGF0aWMgTm9kZSogZW5jbG9zaW5nTGlzdChjb25zdCBSZW5kZXJMaXN0SXRlbSogbGlzdEl0
ZW0pCiB7CisgICAgTm9kZSogbGlzdEl0ZW1Ob2RlID0gbGlzdEl0ZW0tPm5vZGUoKTsKICAgICBO
b2RlKiBmaXJzdE5vZGUgPSAwOwotCi0gICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gbGlzdEl0ZW0tPnBhcmVudCgpOyByZW5kZXJlcjsgcmVuZGVyZXIgPSByZW5kZXJlci0+
cGFyZW50KCkpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7Ci0gICAg
ICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICBpZiAoaXNMaXN0KG5vZGUpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgaWYgKCFmaXJzdE5vZGUpCi0gICAgICAg
ICAgICAgICAgZmlyc3ROb2RlID0gbm9kZTsKLSAgICAgICAgfQorICAgIC8vIFdlIHVzZSBwYXJl
bnROb2RlIGJlY2F1c2UgdGhlIGVuY2xvc2luZyBsaXN0IGNvdWxkIGJlIGEgU2hhZG93Um9vdCB0
aGF0J3Mgbm90IEVsZW1lbnQuCisgICAgZm9yIChOb2RlKiBwYXJlbnQgPSBsaXN0SXRlbU5vZGUt
PnBhcmVudE5vZGUoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgewor
ICAgICAgICBpZiAoaXNMaXN0KHBhcmVudCkpCisgICAgICAgICAgICByZXR1cm4gcGFyZW50Owor
ICAgICAgICBpZiAoIWZpcnN0Tm9kZSkKKyAgICAgICAgICAgIGZpcnN0Tm9kZSA9IHBhcmVudDsK
ICAgICB9CiAKICAgICAvLyBJZiB0aGVyZSdzIG5vIGFjdHVhbCA8dWw+IG9yIDxvbD4gbGlzdCBl
bGVtZW50LCB0aGVuIHRoZSBmaXJzdCBmb3VuZApAQCAtMTE2LDQyICsxMTYsNTEgQEAgc3RhdGlj
IE5vZGUqIGVuY2xvc2luZ0xpc3QoY29uc3QgUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtKQogICAg
IHJldHVybiBmaXJzdE5vZGU7CiB9CiAKLVJlbmRlckxpc3RJdGVtKiBSZW5kZXJMaXN0SXRlbTo6
bmV4dExpc3RJdGVtKFJlbmRlck9iamVjdCogbGlzdCwgY29uc3QgUmVuZGVyTGlzdEl0ZW0qIGl0
ZW0pCisvLyBSZXR1cm5zIHRoZSBuZXh0IGxpc3QgaXRlbSB3aXRoIHJlc3BlY3QgdG8gdGhlIERP
TSBvcmRlci4KK1JlbmRlckxpc3RJdGVtKiBSZW5kZXJMaXN0SXRlbTo6bmV4dExpc3RJdGVtKE5v
ZGUqIGxpc3ROb2RlLCBjb25zdCBSZW5kZXJMaXN0SXRlbSogaXRlbSkKIHsKLSAgICBpZiAoIWxp
c3QpCisgICAgaWYgKCFsaXN0Tm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gaXRlbSA/IGl0ZW0tPm5leHRJblByZU9yZGVyKGxpc3QpIDogbGlz
dC0+bmV4dEluUHJlT3JkZXIobGlzdCk7Ci0gICAgd2hpbGUgKHJlbmRlcmVyKSB7Ci0gICAgICAg
IGlmIChyZW5kZXJlci0+bm9kZSgpICYmIGlzTGlzdChyZW5kZXJlci0+bm9kZSgpKSkgeworICAg
IE5vZGUqIGN1cnJlbnQgPSBpdGVtID8gaXRlbS0+bm9kZSgpIDogbGlzdE5vZGU7CisgICAgY3Vy
cmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgbGlz
dE5vZGUpOworCisgICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAgaWYgKGlzTGlzdChjdXJy
ZW50KSkgewogICAgICAgICAgICAgLy8gV2UndmUgZm91bmQgYSBuZXN0ZWQsIGluZGVwZW5kZW50
IGxpc3Q6IG5vdGhpbmcgdG8gZG8gaGVyZS4KLSAgICAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVy
ZXItPm5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbihsaXN0KTsKKyAgICAgICAgICAgIGN1cnJl
bnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJl
bihjdXJyZW50LCBsaXN0Tm9kZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aXNMaXN0SXRlbSgpKQorICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gY3VycmVudC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpCiAgICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJM
aXN0SXRlbShyZW5kZXJlcik7CiAKLSAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+bmV4dElu
UHJlT3JkZXIobGlzdCk7CisgICAgICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBvcHRpbWl6ZWQg
dG8gc2tpcCB0aGUgY2hpbGRyZW4gb2YgdGhlIGVsZW1lbnRzIHdpdGhvdXQgYSByZW5kZXJlcj8K
KyAgICAgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8o
Y3VycmVudCwgbGlzdE5vZGUpOwogICAgIH0KKwogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMg
UmVuZGVyTGlzdEl0ZW0qIHByZXZpb3VzTGlzdEl0ZW0oUmVuZGVyT2JqZWN0KiBsaXN0LCBjb25z
dCBSZW5kZXJMaXN0SXRlbSogaXRlbSkKKy8vIFJldHVybnMgdGhlIHByZXZpb3VzIGxpc3QgaXRl
bSB3aXRoIHJlc3BlY3QgdG8gdGhlIERPTSBvcmRlci4KK3N0YXRpYyBSZW5kZXJMaXN0SXRlbSog
cHJldmlvdXNMaXN0SXRlbShOb2RlKiBsaXN0Tm9kZSwgY29uc3QgUmVuZGVyTGlzdEl0ZW0qIGl0
ZW0pCiB7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXRlbS0+cHJldmlvdXNJ
blByZU9yZGVyKCk7IHJlbmRlcmVyICYmIHJlbmRlcmVyICE9IGxpc3Q7IHJlbmRlcmVyID0gcmVu
ZGVyZXItPnByZXZpb3VzSW5QcmVPcmRlcigpKSB7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlz
TGlzdEl0ZW0oKSkKKyAgICBOb2RlKiBjdXJyZW50ID0gaXRlbS0+bm9kZSgpOworICAgIGZvciAo
Y3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGN1cnJl
bnQsIGxpc3ROb2RlKTsgY3VycmVudDsgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZp
b3VzSW5jbHVkaW5nUHNldWRvKGN1cnJlbnQsIGxpc3ROb2RlKSkgeworICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY3VycmVudC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5k
ZXJlciB8fCAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIE5vZGUqIG90aGVyTGlzdCA9IGVuY2xvc2luZ0xpc3QodG9S
ZW5kZXJMaXN0SXRlbShyZW5kZXJlcikpOwogICAgICAgICAvLyBUaGlzIGl0ZW0gaXMgcGFydCBv
ZiBvdXIgY3VycmVudCBsaXN0LCBzbyBpdCdzIHdoYXQgd2UncmUgbG9va2luZyBmb3IuCi0gICAg
ICAgIGlmIChsaXN0LT5ub2RlKCkgPT0gb3RoZXJMaXN0KQorICAgICAgICBpZiAobGlzdE5vZGUg
PT0gb3RoZXJMaXN0KQogICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVy
ZXIpOwogICAgICAgICAvLyBXZSBmb3VuZCBvdXJzZWxmIGluc2lkZSBhbm90aGVyIGxpc3Q7IGxl
dHMgc2tpcCB0aGUgcmVzdCBvZiBpdC4KLSAgICAgICAgLy8gVXNlIG5leHRJblByZU9yZGVyKCkg
aGVyZSBiZWNhdXNlIHRoZSBvdGhlciBsaXN0IGl0c2VsZiBtYXkgYWN0dWFsbHkKKyAgICAgICAg
Ly8gVXNlIG5leHRJbmNsdWRpbmdQc2V1ZG8oKSBoZXJlIGJlY2F1c2UgdGhlIG90aGVyIGxpc3Qg
aXRzZWxmIG1heSBhY3R1YWxseQogICAgICAgICAvLyBiZSBhIGxpc3QgaXRlbSBpdHNlbGYuIFdl
IG5lZWQgdG8gZXhhbWluZSBpdCwgc28gd2UgZG8gdGhpcyB0byBjb3VudGVyYWN0Ci0gICAgICAg
IC8vIHRoZSBwcmV2aW91c0luUHJlT3JkZXIoKSB0aGF0IHdpbGwgYmUgZG9uZSBieSB0aGUgbG9v
cC4KKyAgICAgICAgLy8gdGhlIHByZXZpb3VzSW5jbHVkaW5nUHNldWRvKCkgdGhhdCB3aWxsIGJl
IGRvbmUgYnkgdGhlIGxvb3AuCiAgICAgICAgIGlmIChvdGhlckxpc3QpCi0gICAgICAgICAgICBy
ZW5kZXJlciA9IG90aGVyTGlzdC0+cmVuZGVyZXIoKS0+bmV4dEluUHJlT3JkZXIoKTsKKyAgICAg
ICAgICAgIGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKG90
aGVyTGlzdCk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMTYyLDcgKzE3MSw2IEBAIGlu
bGluZSBpbnQgUmVuZGVyTGlzdEl0ZW06OmNhbGNWYWx1ZSgpIGNvbnN0CiAgICAgICAgIHJldHVy
biBtX2V4cGxpY2l0VmFsdWU7CiAKICAgICBOb2RlKiBsaXN0ID0gZW5jbG9zaW5nTGlzdCh0aGlz
KTsKLSAgICBSZW5kZXJPYmplY3QqIGxpc3RSZW5kZXJlciA9IGxpc3QgPyBsaXN0LT5yZW5kZXJl
cigpIDogMDsKICAgICBIVE1MT0xpc3RFbGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdCAmJiBs
aXN0LT5oYXNUYWdOYW1lKG9sVGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50Kj4o
bGlzdCkgOiAwOwogICAgIGludCB2YWx1ZVN0ZXAgPSAxOwogICAgIGlmIChvTGlzdEVsZW1lbnQg
JiYgb0xpc3RFbGVtZW50LT5pc1JldmVyc2VkKCkpCkBAIC0xNzAsNyArMTc4LDcgQEAgaW5saW5l
IGludCBSZW5kZXJMaXN0SXRlbTo6Y2FsY1ZhbHVlKCkgY29uc3QKIAogICAgIC8vIEZJWE1FOiBU
aGlzIHJlY3Vyc2VzIHRvIGEgcG9zc2libGUgZGVwdGggb2YgdGhlIGxlbmd0aCBvZiB0aGUgbGlz
dC4KICAgICAvLyBUaGF0J3Mgbm90IGdvb2QgLS0gd2UgbmVlZCB0byBjaGFuZ2UgdGhpcyB0byBh
biBpdGVyYXRpdmUgYWxnb3JpdGhtLgotICAgIGlmIChSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNJ
dGVtID0gcHJldmlvdXNMaXN0SXRlbShsaXN0UmVuZGVyZXIsIHRoaXMpKQorICAgIGlmIChSZW5k
ZXJMaXN0SXRlbSogcHJldmlvdXNJdGVtID0gcHJldmlvdXNMaXN0SXRlbShsaXN0LCB0aGlzKSkK
ICAgICAgICAgcmV0dXJuIHByZXZpb3VzSXRlbS0+dmFsdWUoKSArIHZhbHVlU3RlcDsKIAogICAg
IGlmIChvTGlzdEVsZW1lbnQpCkBAIC00MjcsMTAgKzQzNSw3IEBAIHZvaWQgUmVuZGVyTGlzdEl0
ZW06OmV4cGxpY2l0VmFsdWVDaGFuZ2VkKCkKICAgICBpZiAobV9tYXJrZXIpCiAgICAgICAgIG1f
bWFya2VyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICBOb2RlKiBs
aXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3QodGhpcyk7Ci0gICAgUmVuZGVyT2JqZWN0KiBsaXN0UmVu
ZGVyZXIgPSAwOwotICAgIGlmIChsaXN0Tm9kZSkKLSAgICAgICAgbGlzdFJlbmRlcmVyID0gbGlz
dE5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgZm9yIChSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHRoaXM7
IGl0ZW07IGl0ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdFJlbmRlcmVyLCBpdGVtKSkKKyAgICBmb3Ig
KFJlbmRlckxpc3RJdGVtKiBpdGVtID0gdGhpczsgaXRlbTsgaXRlbSA9IG5leHRMaXN0SXRlbShs
aXN0Tm9kZSwgaXRlbSkpCiAgICAgICAgIGl0ZW0tPnVwZGF0ZVZhbHVlKCk7CiB9CiAKQEAgLTQ1
Nyw3ICs0NjIsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpjbGVhckV4cGxpY2l0VmFsdWUoKQog
ICAgIGV4cGxpY2l0VmFsdWVDaGFuZ2VkKCk7CiB9CiAKLXN0YXRpYyBSZW5kZXJMaXN0SXRlbSog
cHJldmlvdXNPck5leHRJdGVtKGJvb2wgaXNMaXN0UmV2ZXJzZWQsIFJlbmRlck9iamVjdCogbGlz
dCwgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0pCitzdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIHByZXZpb3Vz
T3JOZXh0SXRlbShib29sIGlzTGlzdFJldmVyc2VkLCBOb2RlKiBsaXN0LCBSZW5kZXJMaXN0SXRl
bSogaXRlbSkKIHsKICAgICByZXR1cm4gaXNMaXN0UmV2ZXJzZWQgPyBwcmV2aW91c0xpc3RJdGVt
KGxpc3QsIGl0ZW0pIDogUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbShsaXN0LCBpdGVtKTsK
IH0KQEAgLTQ2NSwxOCArNDcwLDE4IEBAIHN0YXRpYyBSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNP
ck5leHRJdGVtKGJvb2wgaXNMaXN0UmV2ZXJzZWQsIFJlbmRlck9iamVjdCogbGlzCiB2b2lkIFJl
bmRlckxpc3RJdGVtOjp1cGRhdGVMaXN0TWFya2VyTnVtYmVycygpCiB7CiAgICAgTm9kZSogbGlz
dE5vZGUgPSBlbmNsb3NpbmdMaXN0KHRoaXMpOwotICAgIEFTU0VSVChsaXN0Tm9kZSAmJiBsaXN0
Tm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKCFsaXN0Tm9kZSB8fCAhbGlzdE5vZGUtPnJlbmRl
cmVyKCkpCisgICAgLy8gVGhlIGxpc3Qgbm9kZSBjYW4gYmUgdGhlIHNoYWRvdyByb290IHdoaWNo
IGhhcyBubyByZW5kZXJlci4KKyAgICBBU1NFUlQobGlzdE5vZGUpOworICAgIGlmICghbGlzdE5v
ZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgaXNMaXN0UmV2ZXJzZWQgPSBmYWxzZTsK
LSAgICBSZW5kZXJPYmplY3QqIGxpc3QgPSBsaXN0Tm9kZS0+cmVuZGVyZXIoKTsKICAgICBIVE1M
T0xpc3RFbGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmhhc1Rh
Z05hbWUob2xUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnQqPihsaXN0Tm9kZSkg
OiAwOwogICAgIGlmIChvTGlzdEVsZW1lbnQpIHsKICAgICAgICAgb0xpc3RFbGVtZW50LT5pdGVt
Q291bnRDaGFuZ2VkKCk7CiAgICAgICAgIGlzTGlzdFJldmVyc2VkID0gb0xpc3RFbGVtZW50LT5p
c1JldmVyc2VkKCk7CiAgICAgfQotICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSBwcmV2
aW91c09yTmV4dEl0ZW0oaXNMaXN0UmV2ZXJzZWQsIGxpc3QsIHRoaXMpOyBpdGVtOyBpdGVtID0g
cHJldmlvdXNPck5leHRJdGVtKGlzTGlzdFJldmVyc2VkLCBsaXN0LCBpdGVtKSkgeworICAgIGZv
ciAoUmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSBwcmV2aW91c09yTmV4dEl0ZW0oaXNMaXN0UmV2ZXJz
ZWQsIGxpc3ROb2RlLCB0aGlzKTsgaXRlbTsgaXRlbSA9IHByZXZpb3VzT3JOZXh0SXRlbShpc0xp
c3RSZXZlcnNlZCwgbGlzdE5vZGUsIGl0ZW0pKSB7CiAgICAgICAgIGlmICghaXRlbS0+bV9pc1Zh
bHVlVXBUb0RhdGUpIHsKICAgICAgICAgICAgIC8vIElmIGFuIGl0ZW0gaGFzIGJlZW4gbWFya2Vk
IGZvciB1cGRhdGUgYmVmb3JlLCB3ZSBjYW4gc2FmZWx5CiAgICAgICAgICAgICAvLyBhc3N1bWUg
dGhhdCBhbGwgdGhlIGZvbGxvd2luZyBvbmVzIGhhdmUgdG9vLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaAppbmRleCBkODhmYzQ5ODZkNTZkYzViMzJjZjA1OWVlMWQ1
Zjg0MWQxNzBjODllLi43ZGQzZWFmODk0MmI4MTY0NjYxNjZjMWFkNGM5ODNkZDliZjRhOTBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaApAQCAtNDksNyArNDks
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZUxpc3RNYXJrZXJOdW1iZXJzKCk7CiAKLSAg
ICBzdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIG5leHRMaXN0SXRlbShSZW5kZXJPYmplY3QqIGxpc3RS
ZW5kZXJlciwgY29uc3QgUmVuZGVyTGlzdEl0ZW0qID0gMCk7CisgICAgc3RhdGljIFJlbmRlckxp
c3RJdGVtKiBuZXh0TGlzdEl0ZW0oTm9kZSosIGNvbnN0IFJlbmRlckxpc3RJdGVtKiA9IDApOwog
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsg
cmV0dXJuICJSZW5kZXJMaXN0SXRlbSI7IH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiOGI5MjgyMzkzYzg2YmViMDc5Y2I0
ZjEyNDJjOGEyNzk0OWNiNTBmLi4zYTU0ZTFjZjZjOWMwYTI5ZGQ3YjFiYmE0MDUyYzZkNmM2YjZh
NzM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTMtMDMtMjUgIEFuZHJlaSBCdWN1ciAgPGFi
dWN1ckBhZG9iZS5jb20+CisKKyAgICAgICAgVXNlIERPTSBvcmRlcmluZyBmb3IgbGlzdCBjb3Vu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM1
MgorCisgICAgICAgIFJldmlld2VkIGJ5IEVsbGlvdHQgU3ByZWhuLgorCisgICAgICAgIFRoZSBm
YXN0L2RvbS9zaGFkb3cvc2hhZG93LWFuZC1saXN0LWVsZW1lbnRzLWV4cGVjdGVkLmh0bWwgaGFz
IGNoYW5nZWQgYmVjYXVzZSB0aGUgbGlzdCBpdGVtcworICAgICAgICBpbnNpZGUgdGhlIHNoYWRv
dyB0cmVlIG5vIGxvbmdlciBzZWUgdGhlIHJvb3QgPG9sPiBlbGVtZW50LgorICAgICAgICBUaGUg
dGVzdCBmYXN0L2xpc3RzL3Bvc2l0aW9uZWQtY291bnQtY3Jhc2guaHRtbCBoYXMgdGhlIGNvcnJl
Y3QgcmVuZGVyaW5nIGFmdGVyIGNoYW5naW5nCisgICAgICAgIHRoZSBsaXN0IGNvdW50aW5nIHRv
IGJlIGluIERPTSBvcmRlci4KKworICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYW5k
LWxpc3QtZWxlbWVudHMtZXhwZWN0ZWQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2xpc3RzL3Bvc2l0
aW9uZWQtY291bnQtY3Jhc2gtZXhwZWN0ZWQudHh0OgorCiAyMDEzLTAzLTI2ICBab2x0YW4gQXJ2
YWkgIDx6YXJ2YWlAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFtRdF0gVW5yZXZpZXdlZCBn
YXJkZW5pbmcuIFJlYmFzZWxpbmluZy4gTWFraW5nIHBpeGVsIHRlc3QgYm90IGhhcHBpZXIgYWZ0
ZXIgcjE0NjIwNi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFk
b3ctYW5kLWxpc3QtZWxlbWVudHMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9zaGFkb3ctYW5kLWxpc3QtZWxlbWVudHMtZXhwZWN0ZWQuaHRtbAppbmRleCA5M2Vi
ZjlhZWRkOTNkY2ViMjVkZmJjYjA2ODk0OTczZmI5MmEzMjllLi5kYmM4OGJjNmYyZThkMDQyOWE1
NmMzMWUxYjU1NmQ3MGIzOTQ4ODVjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9z
aGFkb3cvc2hhZG93LWFuZC1saXN0LWVsZW1lbnRzLWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1hbmQtbGlzdC1lbGVtZW50cy1leHBlY3RlZC5o
dG1sCkBAIC0yMiwxOCArMjIsMjMgQEAKIC8vICAgPGxpPkM8L2xpPgogLy8gPC9vbD4gICAKIHZh
ciBob3N0RXF1aXZhbGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0RXF1aXZhbGVu
dCIpOwordmFyIHNoYWRvd0xpc3RSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsK
K3NoYWRvd0xpc3RSb290LnN0eWxlLnBhZGRpbmdMZWZ0ID0gIjBweCI7Citob3N0RXF1aXZhbGVu
dC5hcHBlbmRDaGlsZChzaGFkb3dMaXN0Um9vdCk7CiAKIHZhciBjaGlsZFggPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJsaSIpOwogY2hpbGRYLmlubmVySFRNTCA9ICJYIjsKLWhvc3RFcXVpdmFs
ZW50LmFwcGVuZENoaWxkKGNoaWxkWCk7CitjaGlsZFguc3R5bGUubGlzdFN0eWxlUG9zaXRpb24g
PSAiaW5zaWRlIjsKK3NoYWRvd0xpc3RSb290LmFwcGVuZENoaWxkKGNoaWxkWCk7CiAKIHZhciBj
aGlsZFVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidWwiKTsKIGNoaWxkVWwuaW5uZXJIVE1M
ID0gIkIiOwotaG9zdEVxdWl2YWxlbnQuYXBwZW5kQ2hpbGQoY2hpbGRVbCk7CitzaGFkb3dMaXN0
Um9vdC5hcHBlbmRDaGlsZChjaGlsZFVsKTsKIAogdmFyIGNoaWxkWSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImxpIik7CiBjaGlsZFkuaW5uZXJIVE1MID0gIlkiOwotaG9zdEVxdWl2YWxlbnQu
YXBwZW5kQ2hpbGQoY2hpbGRZKTsKK2NoaWxkWS5zdHlsZS5saXN0U3R5bGVQb3NpdGlvbiA9ICJp
bnNpZGUiOworc2hhZG93TGlzdFJvb3QuYXBwZW5kQ2hpbGQoY2hpbGRZKTsKIDwvc2NyaXB0Pgog
PC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9saXN0cy9wb3Np
dGlvbmVkLWNvdW50LWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbGlzdHMv
cG9zaXRpb25lZC1jb3VudC1jcmFzaC1leHBlY3RlZC50eHQKaW5kZXggOWZjMDY2ZDVkMTFmMWUw
Nzg4NDcxMTAxMTRlNzdlMjAxMGExNjdkMC4uY2U0MGMwOGNiODRmODNmNDZkMDdjNDU5NzNiNDFk
ODY5NWM5OGVlZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9saXN0cy9wb3NpdGlvbmVk
LWNvdW50LWNyYXNoLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xpc3RzL3Bv
c2l0aW9uZWQtY291bnQtY3Jhc2gtZXhwZWN0ZWQudHh0CkBAIC0yLDUgKzIsNSBAQCBJSQogCiAK
IEZvciBtYW51YWwgdGVzdDogSWYgeW91IHNlZSBubyBjcmFzaCBhbmQgIklJIElJIiwgaXQgbWVh
bnMgdGhpcyB0ZXN0IFBBU1MuCi1GQUlMIGxpc3QgbWFya2VyIHNob3VsZCBiZSBJSS4gV2FzIEku
CitQQVNTIGxpc3QgbWFya2VyIGlzIElJLgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197021</attachid>
            <date>2013-04-09 03:50:47 -0700</date>
            <delta_ts>2013-04-22 01:32:40 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-110352-20130409135028.patch</filename>
            <type>text/plain</type>
            <size>32722</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3OTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDhlZGQyNzU4NWIyMjAy
MDU4ODY1NmYyZDYwZGQ0Nzk3Y2M4NGExZS4uNjdhYmVhZGEzMjc2OTVmYTRlMzJkMjU0ZWE0NmI0
ZWU4ZjFjMDMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDEzLTA0LTA5ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFVzZSBET00gb3JkZXJpbmcg
Zm9yIGxpc3QgY291bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTAzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBFbGxpb3R0IFNwcmVobi4KKwor
ICAgICAgICBDdXJyZW50bHkgdGhlIGxpc3QgaXRlbXMgb3JkZXJpbmcgaXMgbWFkZSBieSB0cmF2
ZXJzaW5nIHRoZSByZW5kZXIgdHJlZS4gVGhpcyBnaXZlcyBiYWQgcmVzdWx0cyBmb3I6CisgICAg
ICAgIC0gbGlzdCBpdGVtcyBmbG93biBpbnNpZGUgcmVnaW9ucyBiZWNhdXNlIHRoZXkgYXJlIG5v
dCByZW5kZXJlZCBhcyBkZXNjZW5kYW50cyBvZiB0aGVpciBET00gbGlzdCBhbmNlc3RvcnMuCisg
ICAgICAgIC0gbGlzdCBpdGVtcyBtYXRjaGVkIHRvIGluc2VydGlvbiBwb2ludHMgaW5zaWRlIGEg
c2hhZG93IHRyZWUuIFRoZSBpbnNlcnRpb24gcG9pbnQgbWF5IGJlIGEgY2hpbGQgb2YgYQorICAg
ICAgICBsaXN0IHNvIHRoZSBudW1iZXJpbmcgZ2V0cyBicm9rZW4uCisKKyAgICAgICAgVG8gaW1w
bGVtZW50IGNvcnJlY3QgRE9NIG9yZGVyaW5nIEkndmUgdGFrZW4gaW50byBhY2NvdW50IHRoZSBm
YWN0IHRoYXQgcHNldWRvLWVsZW1lbnRzIGNhbiBoYXZlIGRpc3BsYXk6IGxpc3QtaXRlbQorICAg
ICAgICBzbyB0aGV5IHNob3VsZCBiZSBpbmNsdWRlZCB3aGVuIHRyYXZlcnNpbmcgdGhlIERPTSB0
cmVlLiBJJ3ZlIGFkZGVkIGhlbHBlciBtZXRob2RzIG9uIHRoZSBOb2RlVHJhdmVyc2FsCisgICAg
ICAgIG5hbWVzcGFjZSB0aGF0IHNob3VsZCBhbGxvdyBlYXNpbHkgdHJhdmVyc2luZyB0aGUgdHJl
ZSBpbmNsdWRpbmcgdGhlIHBzZXVkby1lbGVtZW50cyAoZS5nLiBmaXJzdENoaWxkV2l0aFBzZXVk
bworICAgICAgICBmb3IgYW4gZWxlbWVudCB3aXRoIHBzZXVkby1iZWZvcmUgd2lsbCByZXR1cm4g
dGhlIGJlZm9yZSBQc2V1ZG9FbGVtZW50KS4gVXNpbmcgdGhlc2UgaGVscGVyIG1ldGhvZHMgSSd2
ZSBpbXBsZW1lbnRlZAorICAgICAgICBwcmUtb3JkZXIgdHJhdmVyc2FsIG1ldGhvZHMgYXdhcmUg
b2YgdGhlIHBzZXVkby1lbGVtZW50cy4KKyAgICAgICAgQW4gZWZmZWN0IG9mIHRoaXMgY2hhbmdl
IGlzIGhvdyB0aGUgbGlzdCBpdGVtcyBpbnNpZGUgc2hhZG93IHRyZWUgdXBkYXRlIHRoZWlyIGNv
dW50aW5nLiBXaXRoIHRoZSBwYXRjaCwgaWYgdGhlcmUncworICAgICAgICBubyA8b2w+IG9yIDx1
bD4gZWxlbWVudCBvbiB0aGUgYW5jZXN0b3IgY2hhaW4gb2YgYSA8bGk+IGVsZW1lbnQgdG8gdGhl
IHNoYWRvdyByb290LCB0aGUgbGlzdCBub2RlIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUKKyAgICAg
ICAgZmlyc3QgcGFyZW50IG9mIHRoZSA8bGk+IG9yIHRoZSBzaGFkb3cgcm9vdCBpZiB0aGVyZSBp
cyBubyBhbmNlc3Rvci4KKyAgICAgICAgVGhlIFJlbmRlckxpc3RJdGVtIGNsYXNzIG5vdyBtYWtl
cyB1c2Ugb2YgdGhpcyBuZXcgbWV0aG9kIG9mIHRyYXZlcnNhbCwgcmVwbGFjaW5nIHRoZSBvbmUg
YmFzZWQgb24gdGhlIHJlbmRlciB0cmVlLgorICAgICAgICBUbyBzaW1wbGlmeSB0aGUgQ1NTIGNv
dW50ZXJzIGltcGxlbWVudGF0aW9uLCBJJ3ZlIGNoYW5nZWQgdGhlIHRyYXZlcnNhbCBmdW5jdGlv
bnMgaW5zaWRlIFJlbmRlckNvdW50ZXIgdG8gYWxzbyBtYWtlIHVzZQorICAgICAgICBvZiB0aGlz
IG1ldGhvZC4gVGhlIENTUyBjb3VudGVycyBhbmQgdGhlIGxpc3QgaXRlbXMgbm93IGhhdmUgdGhl
IHNhbWUgdHJhdmVyc2FsIGFsZ29yaXRobS4KKworICAgICAgICBJbiBsYXRlciBwYXRjaGVzIEkn
bGwgYWRkIHRlc3RzIHRoYXQgc2hvdWxkIGNvdmVyIHRoZSByZWdpb25zIGFuZCBzaGFkb3cgRE9N
IHVzZSBjYXNlcy4KKyAgICAgICAgVGVzdHMgYnVnIGZvciBzaGFkb3cgRE9NOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzMTkzCisgICAgICAgIFRlc3RzIGJ1ZyBm
b3IgcmVnaW9uczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzk3
NQorCisgICAgICAgIFRlc3RzOiBubyBuZXcgdGVzdHMgaXMgdGhpcyBwYXRjaDsgYWRkZWQgdGhl
IGNvcnJlY3QgZXhwZWN0YXRpb25zIGZvciBmYXN0L2xpc3RzL3Bvc2l0aW9uZWQtY291bnQtY3Jh
c2guaHRtbAorICAgICAgICBhbmQgZmFzdC9kb20vc2hhZG93L3NoYWRvdy1hbmQtbGlzdC1lbGVt
ZW50cy5odG1sCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6cHNldWRvQXdhcmVGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnBzZXVkb0F3YXJlTGFzdENoaWxkKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAg
ICAgICAoTm9kZSk6CisgICAgICAgICogZG9tL05vZGVUcmF2ZXJzYWwuY3BwOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjpwcmV2aW91c0luY2x1
ZGluZ1BzZXVkbyk6CisgICAgICAgIChOb2RlVHJhdmVyc2FsKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZVRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4pOgorICAg
ICAgICAqIGRvbS9Ob2RlVHJhdmVyc2FsLmg6CisgICAgICAgIChFbGVtZW50VHJhdmVyc2FsKToK
KyAgICAgICAgKE5vZGVUcmF2ZXJzYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFRyYXZl
cnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbik6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGlu
Zyk6CisgICAgICAgICogaHRtbC9IVE1MTElFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxMSUVsZW1lbnQ6OmF0dGFjaCk6CisgICAgICAgICogaHRtbC9IVE1MT0xpc3RFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQ6OnVwZGF0ZUl0ZW1WYWx1
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudDo6cmVjYWxjdWxhdGVJdGVt
Q291bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnByZXZpb3VzSW5QcmVPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91
c1NpYmxpbmdPclBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJlbnRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Om5leHRJblByZU9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpl
bmNsb3NpbmdMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpuZXh0TGlz
dEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNMaXN0SXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6Y2FsY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RJdGVtOjpleHBsaWNpdFZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpw
cmV2aW91c09yTmV4dEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVw
ZGF0ZUxpc3RNYXJrZXJOdW1iZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0
ZW0uaDoKKyAgICAgICAgKFJlbmRlckxpc3RJdGVtKToKKwogMjAxMy0wNC0wOCAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgV2ViQ29yZS5neXAvZ3lw
aQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCmluZGV4IGI0NGIxMDQ2OTJhNDU5M2QwZWUzMWM0MTc3MjM1ZGVmZDYz
N2JkYjAuLjcwMzU2ODhlYWMwNmIyMzMwOWQ5Y2JjZTBiNjMxOGE4YjU2ZDkzZTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKQEAgLTExMzIsNiArMTEzMiw2MiBAQCB2b2lkIE5vZGU6OmRldGFjaCgpCiAjZW5k
aWYKIH0KIAorTm9kZSogTm9kZTo6cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoKSBjb25zdAor
eworICAgIGlmIChwYXJlbnRFbGVtZW50KCkgJiYgIXByZXZpb3VzU2libGluZygpKSB7CisgICAg
ICAgIEVsZW1lbnQqIHBhcmVudCA9IHBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGlzQWZ0
ZXJQc2V1ZG9FbGVtZW50KCkgJiYgcGFyZW50LT5sYXN0Q2hpbGQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBwYXJlbnQtPmxhc3RDaGlsZCgpOworICAgICAgICBpZiAoIWlzQmVmb3JlUHNldWRvRWxl
bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+cHNldWRvRWxlbWVudChCRUZPUkUp
OworICAgIH0KKyAgICByZXR1cm4gcHJldmlvdXNTaWJsaW5nKCk7Cit9CisKK05vZGUqIE5vZGU6
OnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcoKSBjb25zdAoreworICAgIGlmIChwYXJlbnRFbGVtZW50
KCkgJiYgIW5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgRWxlbWVudCogcGFyZW50ID0gcGFyZW50
RWxlbWVudCgpOworICAgICAgICBpZiAoaXNCZWZvcmVQc2V1ZG9FbGVtZW50KCkgJiYgcGFyZW50
LT5maXJzdENoaWxkKCkpCisgICAgICAgICAgICByZXR1cm4gcGFyZW50LT5maXJzdENoaWxkKCk7
CisgICAgICAgIGlmICghaXNBZnRlclBzZXVkb0VsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBwYXJlbnQtPnBzZXVkb0VsZW1lbnQoQUZURVIpOworICAgIH0KKyAgICByZXR1cm4gbmV4dFNp
YmxpbmcoKTsKK30KKworTm9kZSogTm9kZTo6cHNldWRvQXdhcmVGaXJzdENoaWxkKCkgY29uc3QK
K3sKKyAgICBpZiAoaXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIGNvbnN0IEVsZW1lbnQqIGN1
cnJlbnRFbGVtZW50ID0gdG9FbGVtZW50KHRoaXMpOworICAgICAgICBOb2RlKiBmaXJzdCA9IGN1
cnJlbnRFbGVtZW50LT5wc2V1ZG9FbGVtZW50KEJFRk9SRSk7CisgICAgICAgIGlmIChmaXJzdCkK
KyAgICAgICAgICAgIHJldHVybiBmaXJzdDsKKyAgICAgICAgZmlyc3QgPSBjdXJyZW50RWxlbWVu
dC0+Zmlyc3RDaGlsZCgpOworICAgICAgICBpZiAoIWZpcnN0KQorICAgICAgICAgICAgZmlyc3Qg
PSBjdXJyZW50RWxlbWVudC0+cHNldWRvRWxlbWVudChBRlRFUik7CisgICAgICAgIHJldHVybiBm
aXJzdDsKKyAgICB9CisKKyAgICByZXR1cm4gZmlyc3RDaGlsZCgpOworfQorCitOb2RlKiBOb2Rl
Ojpwc2V1ZG9Bd2FyZUxhc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRWxlbWVudE5vZGUo
KSkgeworICAgICAgICBjb25zdCBFbGVtZW50KiBjdXJyZW50RWxlbWVudCA9IHRvRWxlbWVudCh0
aGlzKTsKKyAgICAgICAgTm9kZSogbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5wc2V1ZG9FbGVtZW50
KEFGVEVSKTsKKyAgICAgICAgaWYgKGxhc3QpCisgICAgICAgICAgICByZXR1cm4gbGFzdDsKKyAg
ICAgICAgbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKCFs
YXN0KQorICAgICAgICAgICAgbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5wc2V1ZG9FbGVtZW50KEJF
Rk9SRSk7CisgICAgICAgIHJldHVybiBsYXN0OworICAgIH0KKworICAgIHJldHVybiBsYXN0Q2hp
bGQoKTsKK30KKwogLy8gRklYTUU6IFRoaXMgY29kZSBpcyB1c2VkIGJ5IGVkaXRpbmcuICBTZWVt
cyBsaWtlIGl0IGNvdWxkIG1vdmUgb3ZlciB0aGVyZSBhbmQgbm90IHBvbGx1dGUgTm9kZS4KIE5v
ZGUgKk5vZGU6OnByZXZpb3VzTm9kZUNvbnNpZGVyaW5nQXRvbWljTm9kZXMoKSBjb25zdAogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKaW5kZXggNTM4YTdmYjA0ZGI3ZmZkODQxODU0Y2YwZDcwNGRiYjczYjE4Y2I0My4u
NTkyODE5Njg5YTExODdmYjIzYzM5MjgwYjExNzY3MDljYzhlMzE2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBA
IC0xOTMsNiArMTkzLDEwIEBAIHB1YmxpYzoKICAgICBOb2RlKiBsYXN0Q2hpbGQoKSBjb25zdDsK
ICAgICBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdDsKICAgICBOYW1lZE5vZGVNYXAqIGF0dHJp
YnV0ZXMoKSBjb25zdDsKKyAgICBOb2RlKiBwc2V1ZG9Bd2FyZU5leHRTaWJsaW5nKCkgY29uc3Q7
CisgICAgTm9kZSogcHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoKSBjb25zdDsKKyAgICBOb2Rl
KiBwc2V1ZG9Bd2FyZUZpcnN0Q2hpbGQoKSBjb25zdDsKKyAgICBOb2RlKiBwc2V1ZG9Bd2FyZUxh
c3RDaGlsZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBLVVJMIGJhc2VVUkkoKSBjb25zdDsKICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmNwcAppbmRleCA0ODJhM2JhYzEyYWNlMjdk
ZDFiZTg0MWM0ZWMxYjc3ZDZmYzhiNmU5Li4yMTZhN2E3N2FkZDZiNTRlNTIxMWM4N2U1MjdlYTg4
NTIwMmU4ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuY3BwCkBAIC0yNiwxMCAr
MjYsNTkgQEAKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAKICNpbmNsdWRlICJDb250YWlu
ZXJOb2RlLmgiCisjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CisKIG5hbWVzcGFjZSBOb2RlVHJhdmVyc2FsIHsKIAorTm9kZSogcHJldmlvdXNJbmNsdWRp
bmdQc2V1ZG8oY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sK
KyAgICBOb2RlKiBwcmV2aW91czsKKyAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAoKHByZXZpb3VzID0gY3VycmVudC0+cHNldWRvQXdhcmVQ
cmV2aW91c1NpYmxpbmcoKSkpIHsKKyAgICAgICAgd2hpbGUgKHByZXZpb3VzLT5wc2V1ZG9Bd2Fy
ZUxhc3RDaGlsZCgpKQorICAgICAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy0+cHNldWRvQXdh
cmVMYXN0Q2hpbGQoKTsKKyAgICAgICAgcmV0dXJuIHByZXZpb3VzOworICAgIH0KKyAgICByZXR1
cm4gY3VycmVudC0+cGFyZW50Tm9kZSgpOworfQorCitOb2RlKiBuZXh0SW5jbHVkaW5nUHNldWRv
KGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgTm9k
ZSogbmV4dDsKKyAgICBpZiAoKG5leHQgPSBjdXJyZW50LT5wc2V1ZG9Bd2FyZUZpcnN0Q2hpbGQo
KSkpCisgICAgICAgIHJldHVybiBuZXh0OworICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4p
CisgICAgICAgIHJldHVybiAwOworICAgIGlmICgobmV4dCA9IGN1cnJlbnQtPnBzZXVkb0F3YXJl
TmV4dFNpYmxpbmcoKSkpCisgICAgICAgIHJldHVybiBuZXh0OworICAgIGZvciAoY3VycmVudCA9
IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVu
dE5vZGUoKSkgeworICAgICAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGlmICgobmV4dCA9IGN1cnJlbnQtPnBzZXVkb0F3YXJlTmV4
dFNpYmxpbmcoKSkpCisgICAgICAgICAgICByZXR1cm4gbmV4dDsKKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CisKK05vZGUqIG5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0
IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgTm9kZSogbmV4
dDsKKyAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBpZiAoKG5leHQgPSBjdXJyZW50LT5wc2V1ZG9Bd2FyZU5leHRTaWJsaW5nKCkpKQorICAgICAg
ICByZXR1cm4gbmV4dDsKKyAgICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCk7
IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYg
KGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBp
ZiAoKG5leHQgPSBjdXJyZW50LT5wc2V1ZG9Bd2FyZU5leHRTaWJsaW5nKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIG5leHQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiBOb2RlKiBuZXh0QW5j
ZXN0b3JTaWJsaW5nKGNvbnN0IE5vZGUqIGN1cnJlbnQpCiB7CiAgICAgQVNTRVJUKCFjdXJyZW50
LT5uZXh0U2libGluZygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJh
dmVyc2FsLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oCmluZGV4IDdhM2Nh
MGU2ZjMzZTBlMWZkNTIzN2EzMTQzMWZkNWNlOTcyMDljMWQuLjJhZDQ5MjJlMmUyMjk2MDIzNzRi
MjQ3OGRmZWRhOTk3NDg4MDg0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
VHJhdmVyc2FsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuaApAQCAt
MzQsMTcgKzM0LDI3IEBAIG5hbWVzcGFjZSBFbGVtZW50VHJhdmVyc2FsIHsKIC8vIEZpcnN0IGVs
ZW1lbnQgY2hpbGQgb2YgdGhlIG5vZGUuCiBFbGVtZW50KiBmaXJzdFdpdGhpbihjb25zdCBOb2Rl
Kik7CiBFbGVtZW50KiBmaXJzdFdpdGhpbihjb25zdCBDb250YWluZXJOb2RlKik7CisKIC8vIFBy
ZS1vcmRlciB0cmF2ZXJzYWwgc2tpcHBpbmcgbm9uLWVsZW1lbnQgbm9kZXMuCiBFbGVtZW50KiBu
ZXh0KGNvbnN0IE5vZGUqKTsKIEVsZW1lbnQqIG5leHQoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUq
IHN0YXlXaXRoaW4pOwogRWxlbWVudCogbmV4dChjb25zdCBDb250YWluZXJOb2RlKik7CiBFbGVt
ZW50KiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsK
KwogLy8gTGlrZSBuZXh0LCBidXQgc2tpcHMgY2hpbGRyZW4uCiBFbGVtZW50KiBuZXh0U2tpcHBp
bmdDaGlsZHJlbihjb25zdCBOb2RlKik7CiBFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGlsZHJlbihj
b25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CiBFbGVtZW50KiBuZXh0U2tpcHBp
bmdDaGlsZHJlbihjb25zdCBDb250YWluZXJOb2RlKik7CiBFbGVtZW50KiBuZXh0U2tpcHBpbmdD
aGlsZHJlbihjb25zdCBDb250YWluZXJOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CiAK
Ky8vIFByZS1vcmRlciB0cmF2ZXJzYWwgaW5jbHVkaW5nIHRoZSBwc2V1ZG8tZWxlbWVudHMuCitF
bGVtZW50KiBwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiwgY29uc3QgTm9kZSog
PSAwKTsKK0VsZW1lbnQqIG5leHRJbmNsdWRpbmdQc2V1ZG8oY29uc3QgTm9kZSosIGNvbnN0IE5v
ZGUqID0gMCk7CitFbGVtZW50KiBuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbihj
b25zdCBOb2RlKiwgY29uc3QgTm9kZSogPSAwKTsKKworLy8gVXRpbGl0eSBmdW5jdGlvbiB0byB0
cmF2ZXJzZSBvbmx5IHRoZSBlbGVtZW50IGFuZCBwc2V1ZG8tZWxlbWVudCBzaWJsaW5ncyBvZiBh
IG5vZGUuCitFbGVtZW50KiBwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZyhjb25zdCBOb2RlKik7
CisKIH0KIAogbmFtZXNwYWNlIE5vZGVUcmF2ZXJzYWwgewpAQCAtNzcsNiArODcsMTEgQEAgTm9k
ZSogbmV4dFBvc3RPcmRlcihjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDAp
OwogTm9kZSogcHJldmlvdXNQb3N0T3JkZXIoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlX
aXRoaW4gPSAwKTsKIE5vZGUqIHByZXZpb3VzU2tpcHBpbmdDaGlsZHJlblBvc3RPcmRlcihjb25z
dCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApOwogCisvLyBQcmUtb3JkZXIgdHJh
dmVyc2FsIGluY2x1ZGluZyB0aGUgcHNldWRvLWVsZW1lbnRzLgorTm9kZSogcHJldmlvdXNJbmNs
dWRpbmdQc2V1ZG8oY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqID0gMCk7CitOb2RlKiBuZXh0SW5j
bHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiA9IDApOworTm9kZSogbmV4dElu
Y2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqID0g
MCk7CisKIH0KIAogbmFtZXNwYWNlIEVsZW1lbnRUcmF2ZXJzYWwgewpAQCAtMTM1LDYgKzE1MCwz
OSBAQCBpbmxpbmUgRWxlbWVudCogdHJhdmVyc2VOZXh0RWxlbWVudFNraXBwaW5nQ2hpbGRyZW5U
ZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCwgYwogfQogaW5saW5lIEVsZW1lbnQqIG5leHRTa2lw
cGluZ0NoaWxkcmVuKGNvbnN0IENvbnRhaW5lck5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlTmV4dEVsZW1lbnRTa2lwcGluZ0NoaWxkcmVuVGVt
cGxhdGUoY3VycmVudCwgc3RheVdpdGhpbik7IH0KIGlubGluZSBFbGVtZW50KiBuZXh0U2tpcHBp
bmdDaGlsZHJlbihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKSB7
IHJldHVybiB0cmF2ZXJzZU5leHRFbGVtZW50U2tpcHBpbmdDaGlsZHJlblRlbXBsYXRlKGN1cnJl
bnQsIHN0YXlXaXRoaW4pOyB9CisKK2lubGluZSBFbGVtZW50KiBwcmV2aW91c0luY2x1ZGluZ1Bz
ZXVkbyhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQoreworICAg
IE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjdXJy
ZW50LCBzdGF5V2l0aGluKTsKKyAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQorICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1
ZG8obm9kZSwgc3RheVdpdGhpbik7CisgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKK30KKwor
aW5saW5lIEVsZW1lbnQqIG5leHRJbmNsdWRpbmdQc2V1ZG8oY29uc3QgTm9kZSogY3VycmVudCwg
Y29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhjdXJyZW50LCBzdGF5V2l0aGluKTsKKyAgICB3aGlsZSAo
bm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBub2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhub2RlLCBzdGF5V2l0aGluKTsKKyAgICByZXR1cm4g
dG9FbGVtZW50KG5vZGUpOworfQorCitpbmxpbmUgRWxlbWVudCogbmV4dEluY2x1ZGluZ1BzZXVk
b1NraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdp
dGhpbikKK3sKKyAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1Bz
ZXVkb1NraXBwaW5nQ2hpbGRyZW4oY3VycmVudCwgc3RheVdpdGhpbik7CisgICAgd2hpbGUgKG5v
ZGUgJiYgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKG5vZGUsIHN0YXlXaXRoaW4p
OworICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7Cit9CisKK2lubGluZSBFbGVtZW50KiBwc2V1
ZG9Bd2FyZVByZXZpb3VzU2libGluZyhjb25zdCBOb2RlKiBjdXJyZW50KQoreworICAgIE5vZGUq
IG5vZGUgPSBjdXJyZW50LT5wc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZygpOworICAgIHdoaWxl
IChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIG5vZGUgPSBub2RlLT5w
c2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZygpOworICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7
Cit9CisKIH0KIAogbmFtZXNwYWNlIE5vZGVUcmF2ZXJzYWwgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TExJRWxlbWVudC5jcHAKaW5kZXggNmQwYTUyM2U2ZWY5OGQzYzNkZjA4OGQ2ZjM0OTI0M2Q0YWRk
ZTJlZi4uMmVmMGRkNzZhZWExNmY5NWViZGZjMjVlNTk2YTAzMTAyM2NkNjZjZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxMSUVsZW1lbnQuY3BwCkBAIC05MiwyMyArOTIsMjMgQEAgdm9pZCBIVE1M
TElFbGVtZW50OjphdHRhY2goKQogICAgIEhUTUxFbGVtZW50OjphdHRhY2goKTsKIAogICAgIGlm
IChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzTGlzdEl0ZW0oKSkgewotICAgICAgICBSZW5k
ZXJMaXN0SXRlbSogcmVuZGVyID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcigpKTsKKyAgICAg
ICAgUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtUmVuZGVyZXIgPSB0b1JlbmRlckxpc3RJdGVtKHJl
bmRlcmVyKCkpOwogCiAgICAgICAgIC8vIEZpbmQgdGhlIGVuY2xvc2luZyBsaXN0IG5vZGUuCi0g
ICAgICAgIE5vZGUqIGxpc3ROb2RlID0gMDsKLSAgICAgICAgRXZlbnRQYXRoV2Fsa2VyIHdhbGtl
cih0aGlzKTsKKyAgICAgICAgRWxlbWVudCogbGlzdE5vZGUgPSAwOworICAgICAgICBFbGVtZW50
KiBjdXJyZW50ID0gdGhpczsKICAgICAgICAgd2hpbGUgKCFsaXN0Tm9kZSkgewotICAgICAgICAg
ICAgd2Fsa2VyLm1vdmVUb1BhcmVudCgpOwotICAgICAgICAgICAgaWYgKCF3YWxrZXIubm9kZSgp
KQorICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAg
ICAgICAgIGlmICghY3VycmVudCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGlmICh3YWxrZXIubm9kZSgpLT5oYXNUYWdOYW1lKHVsVGFnKSB8fCB3YWxrZXIubm9kZSgpLT5o
YXNUYWdOYW1lKG9sVGFnKSkKLSAgICAgICAgICAgICAgICBsaXN0Tm9kZSA9IHdhbGtlci5ub2Rl
KCk7CisgICAgICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZSh1bFRhZykgfHwgY3VycmVu
dC0+aGFzVGFnTmFtZShvbFRhZykpCisgICAgICAgICAgICAgICAgbGlzdE5vZGUgPSBjdXJyZW50
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBhIGxpc3QsIHRlbGwg
dGhlIHJlbmRlcmVyIHNvIGl0IGNhbiBwb3NpdGlvbiB1cyBpbnNpZGUuCiAgICAgICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gY2hhbmdlIG91ciBzdHlsZSB0byBzYXkgImluc2lkZSIgc2luY2UgdGhh
dCB3b3VsZCBhZmZlY3QgbmVzdGVkIG5vZGVzLgogICAgICAgICBpZiAoIWxpc3ROb2RlKQotICAg
ICAgICAgICAgcmVuZGVyLT5zZXROb3RJbkxpc3QodHJ1ZSk7CisgICAgICAgICAgICBsaXN0SXRl
bVJlbmRlcmVyLT5zZXROb3RJbkxpc3QodHJ1ZSk7CiAKICAgICAgICAgcGFyc2VWYWx1ZShmYXN0
R2V0QXR0cmlidXRlKHZhbHVlQXR0cikpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxP
TGlzdEVsZW1lbnQuY3BwCmluZGV4IDQ1ZmU0MjZmNDcyZmM5NDkzYmJlMWY0ZmMyMDgwODg4MGVm
ZWE3ZGQuLjM5NmUzNDA0ZmU5MzE2NDY2MjAxOGRhMjU0ZDAwOGI0ZmU1NGI1OGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHZv
aWQgSFRNTE9MaXN0RWxlbWVudDo6c2V0U3RhcnQoaW50IHN0YXJ0KQogCiB2b2lkIEhUTUxPTGlz
dEVsZW1lbnQ6OnVwZGF0ZUl0ZW1WYWx1ZXMoKQogewotICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0q
IGxpc3RJdGVtID0gUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbShyZW5kZXJlcigpKTsgbGlz
dEl0ZW07IGxpc3RJdGVtID0gUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbShyZW5kZXJlcigp
LCBsaXN0SXRlbSkpCisgICAgZm9yIChSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0gPSBSZW5kZXJM
aXN0SXRlbTo6bmV4dExpc3RJdGVtKHRoaXMpOyBsaXN0SXRlbTsgbGlzdEl0ZW0gPSBSZW5kZXJM
aXN0SXRlbTo6bmV4dExpc3RJdGVtKHRoaXMsIGxpc3RJdGVtKSkKICAgICAgICAgbGlzdEl0ZW0t
PnVwZGF0ZVZhbHVlKCk7CiB9CiAKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIEhUTUxPTGlzdEVs
ZW1lbnQ6OnJlY2FsY3VsYXRlSXRlbUNvdW50KCkKIHsKICAgICBtX2l0ZW1Db3VudCA9IDA7CiAK
LSAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSA9IFJlbmRlckxpc3RJdGVtOjpuZXh0
TGlzdEl0ZW0ocmVuZGVyZXIoKSk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IFJlbmRlckxpc3RJdGVt
OjpuZXh0TGlzdEl0ZW0ocmVuZGVyZXIoKSwgbGlzdEl0ZW0pKQorICAgIGZvciAoUmVuZGVyTGlz
dEl0ZW0qIGxpc3RJdGVtID0gUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbSh0aGlzKTsgbGlz
dEl0ZW07IGxpc3RJdGVtID0gUmVuZGVyTGlzdEl0ZW06Om5leHRMaXN0SXRlbSh0aGlzLCBsaXN0
SXRlbSkpCiAgICAgICAgIG1faXRlbUNvdW50Kys7CiAKICAgICBtX3Nob3VsZFJlY2FsY3VsYXRl
SXRlbUNvdW50ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRl
ci5jcHAKaW5kZXggMzRiMmNiODUzMGUwMzU0YzBjOTZmNzY1MGU2YjU3ZTA5M2RhOThlZi4uNTcy
YzlhMjlhZWNhOGViMWU2ZWUxNTYxYzhjYTY1ZDc2M2JlN2JlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcApAQCAtNTcsOTQgKzU3LDMwIEBAIHN0YXRpYyBD
b3VudGVyTWFwcyYgY291bnRlck1hcHMoKQogLy8gaW5jbHVkaW5nIHBzZXVkbyBlbGVtZW50cyBh
cyBkZWZpbmVkIGluIENTUyAyLjEuCiBzdGF0aWMgUmVuZGVyT2JqZWN0KiBwcmV2aW91c0luUHJl
T3JkZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgRWxlbWVudCogcGFyZW50
OwotICAgIEVsZW1lbnQqIHNpYmxpbmc7Ci0gICAgc3dpdGNoIChvYmplY3QtPnN0eWxlKCktPnN0
eWxlVHlwZSgpKSB7Ci0gICAgY2FzZSBOT1BTRVVETzoKLSAgICAgICAgQVNTRVJUKCFvYmplY3Qt
PmlzQW5vbnltb3VzKCkpOwotICAgICAgICBwYXJlbnQgPSB0b0VsZW1lbnQob2JqZWN0LT5ub2Rl
KCkpOwotICAgICAgICBzaWJsaW5nID0gcGFyZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7
Ci0gICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50RWxlbWVudCgpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEJFRk9SRToKLSAgICAgICAgcmV0dXJuIG9iamVjdC0+Z2VuZXJhdGluZ05v
ZGUoKS0+cmVuZGVyZXIoKTsgLy8gSXQgaXMgYWx3YXlzIHRoZSBnZW5lcmF0aW5nIG5vZGUncyBy
ZW5kZXJlcgotICAgIGNhc2UgQUZURVI6Ci0gICAgICAgIHBhcmVudCA9IHRvRWxlbWVudChvYmpl
Y3QtPmdlbmVyYXRpbmdOb2RlKCkpOwotICAgICAgICBzaWJsaW5nID0gcGFyZW50LT5sYXN0RWxl
bWVudENoaWxkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgd2hpbGUgKHNp
YmxpbmcpIHsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBzaWJsaW5nLT5y
ZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBhZnRlciA9IHNpYmxp
bmctPnBzZXVkb0VsZW1lbnRSZW5kZXJlcihBRlRFUikpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGFmdGVyOwotICAgICAgICAgICAgcGFyZW50ID0gc2libGluZzsKLSAgICAgICAgICAgIHNpYmxp
bmcgPSBzaWJsaW5nLT5sYXN0RWxlbWVudENoaWxkKCk7Ci0gICAgICAgICAgICBpZiAoIXNpYmxp
bmcpIHsKLSAgICAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBiZWZvcmUgPSB0b0VsZW1l
bnQocmVuZGVyZXItPm5vZGUoKSktPnBzZXVkb0VsZW1lbnRSZW5kZXJlcihCRUZPUkUpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYmVmb3JlOwotICAgICAgICAgICAgICAgIHJldHVybiBy
ZW5kZXJlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzaWJs
aW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwotICAgIH0KLSAgICBpZiAo
IXBhcmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogYmVmb3Jl
ID0gcGFyZW50LT5wc2V1ZG9FbGVtZW50UmVuZGVyZXIoQkVGT1JFKSkKLSAgICAgICAgcmV0dXJu
IGJlZm9yZTsKLSAgICByZXR1cm4gcGFyZW50LT5yZW5kZXJlcigpOworICAgIEVsZW1lbnQqIHNl
bGYgPSB0b0VsZW1lbnQob2JqZWN0LT5ub2RlKCkpOworICAgIEVsZW1lbnQqIHByZXZpb3VzID0g
RWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oc2VsZik7CisgICAgd2hp
bGUgKHByZXZpb3VzICYmICFwcmV2aW91cy0+cmVuZGVyZXIoKSkKKyAgICAgICAgcHJldmlvdXMg
PSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhwcmV2aW91cyk7Cisg
ICAgcmV0dXJuIHByZXZpb3VzID8gcHJldmlvdXMtPnJlbmRlcmVyKCkgOiAwOwogfQogCiAvLyBU
aGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgcmVuZGVyZXIgdHJlZSBpbiB0aGUgb3JkZXIgb2Yg
dGhlIERPTSB0cmVlCiAvLyBpbmNsdWRpbmcgcHNldWRvIGVsZW1lbnRzIGFzIGRlZmluZWQgaW4g
Q1NTIDIuMS4KIHN0YXRpYyBSZW5kZXJPYmplY3QqIHByZXZpb3VzU2libGluZ09yUGFyZW50KGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIEVsZW1lbnQqIHBhcmVudDsKLSAgICBF
bGVtZW50KiBzaWJsaW5nOwotICAgIHN3aXRjaCAob2JqZWN0LT5zdHlsZSgpLT5zdHlsZVR5cGUo
KSkgewotICAgIGNhc2UgTk9QU0VVRE86Ci0gICAgICAgIEFTU0VSVCghb2JqZWN0LT5pc0Fub255
bW91cygpKTsKLSAgICAgICAgcGFyZW50ID0gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgpKTsKLSAg
ICAgICAgc2libGluZyA9IHBhcmVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwotICAgICAg
ICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBCRUZPUkU6Ci0gICAgICAgIHJldHVybiBvYmplY3QtPmdlbmVyYXRpbmdOb2RlKCktPnJl
bmRlcmVyKCk7IC8vIEl0IGlzIGFsd2F5cyB0aGUgZ2VuZXJhdGluZyBub2RlJ3MgcmVuZGVyZXIK
LSAgICBjYXNlIEFGVEVSOgotICAgICAgICBwYXJlbnQgPSB0b0VsZW1lbnQob2JqZWN0LT5nZW5l
cmF0aW5nTm9kZSgpKTsKLSAgICAgICAgc2libGluZyA9IHBhcmVudC0+bGFzdEVsZW1lbnRDaGls
ZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHdoaWxlIChzaWJsaW5nKSB7
Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc2libGluZy0+cmVuZGVyZXIo
KSkgLy8gVGhpcyBza2lwcyBpbnZpc2libGUgbm9kZXMKLSAgICAgICAgICAgIHJldHVybiByZW5k
ZXJlcjsKLSAgICAgICAgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmco
KTsKLSAgICB9Ci0gICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChS
ZW5kZXJPYmplY3QqIGJlZm9yZSA9IHBhcmVudC0+cHNldWRvRWxlbWVudFJlbmRlcmVyKEJFRk9S
RSkpCi0gICAgICAgIHJldHVybiBiZWZvcmU7Ci0gICAgcmV0dXJuIHBhcmVudC0+cmVuZGVyZXIo
KTsKKyAgICBFbGVtZW50KiBzZWxmID0gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgpKTsKKyAgICBF
bGVtZW50KiBwcmV2aW91cyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnBzZXVkb0F3YXJlUHJldmlvdXNT
aWJsaW5nKHNlbGYpOworICAgIHdoaWxlIChwcmV2aW91cyAmJiAhcHJldmlvdXMtPnJlbmRlcmVy
KCkpCisgICAgICAgIHByZXZpb3VzID0gRWxlbWVudFRyYXZlcnNhbDo6cHNldWRvQXdhcmVQcmV2
aW91c1NpYmxpbmcocHJldmlvdXMpOworICAgIGlmIChwcmV2aW91cykKKyAgICAgICAgcmV0dXJu
IHByZXZpb3VzLT5yZW5kZXJlcigpOworICAgIHByZXZpb3VzID0gc2VsZi0+cGFyZW50RWxlbWVu
dCgpOworICAgIHJldHVybiBwcmV2aW91cyA/IHByZXZpb3VzLT5yZW5kZXJlcigpIDogMDsKIH0K
IAotc3RhdGljIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCitz
dGF0aWMgaW5saW5lIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoUmVuZGVyT2JqZWN0KiBvYmplY3Qp
CiB7Ci0gICAgc3dpdGNoIChvYmplY3QtPnN0eWxlKCktPnN0eWxlVHlwZSgpKSB7Ci0gICAgY2Fz
ZSBOT1BTRVVETzoKLSAgICAgICAgQVNTRVJUKCFvYmplY3QtPmlzQW5vbnltb3VzKCkpOwotICAg
ICAgICByZXR1cm4gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgpKS0+cGFyZW50RWxlbWVudCgpOwot
ICAgIGNhc2UgQkVGT1JFOgotICAgIGNhc2UgQUZURVI6Ci0gICAgICAgIHJldHVybiB0b0VsZW1l
bnQob2JqZWN0LT5nZW5lcmF0aW5nTm9kZSgpKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIHJldHVybiB0
b0VsZW1lbnQob2JqZWN0LT5ub2RlKCkpLT5wYXJlbnRFbGVtZW50KCk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBhcmVSZW5kZXJlcnNFbGVtZW50c1NpYmxpbmdzKFJlbmRlck9iamVjdCogZmly
c3QsIFJlbmRlck9iamVjdCogc2Vjb25kKQpAQCAtMTU2LDQ0ICs5MiwxMSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgYXJlUmVuZGVyZXJzRWxlbWVudHNTaWJsaW5ncyhSZW5kZXJPYmplY3QqIGZpcnN0
LCBSZW5kZXJPYmplYwogLy8gaW5jbHVkaW5nIHBzZXVkbyBlbGVtZW50cyBhcyBkZWZpbmVkIGlu
IENTUyAyLjEuCiBzdGF0aWMgUmVuZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRlcihjb25zdCBSZW5k
ZXJPYmplY3QqIG9iamVjdCwgY29uc3QgRWxlbWVudCogc3RheVdpdGhpbiwgYm9vbCBza2lwRGVz
Y2VuZGFudHMgPSBmYWxzZSkKIHsKLSAgICBFbGVtZW50KiBzZWxmOwotICAgIEVsZW1lbnQqIGNo
aWxkOwotICAgIHNlbGYgPSB0b0VsZW1lbnQob2JqZWN0LT5nZW5lcmF0aW5nTm9kZSgpKTsKLSAg
ICBpZiAoc2tpcERlc2NlbmRhbnRzKQotICAgICAgICBnb3RvIG5leHRzaWJsaW5nOwotICAgIHN3
aXRjaCAob2JqZWN0LT5zdHlsZSgpLT5zdHlsZVR5cGUoKSkgewotICAgIGNhc2UgTk9QU0VVRE86
Ci0gICAgICAgIEFTU0VSVCghb2JqZWN0LT5pc0Fub255bW91cygpKTsKLSAgICAgICAgaWYgKFJl
bmRlck9iamVjdCogYmVmb3JlID0gc2VsZi0+cHNldWRvRWxlbWVudFJlbmRlcmVyKEJFRk9SRSkp
Ci0gICAgICAgICAgICByZXR1cm4gYmVmb3JlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJF
Rk9SRToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBRlRFUjoKLSAgICAgICAgZ290byBuZXh0
c2libGluZzsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6Zmly
c3RXaXRoaW4oc2VsZik7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgd2hpbGUgKGNoaWxk
KSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkLT5yZW5k
ZXJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJlcjsKLSAgICAgICAgICAgIGNo
aWxkID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oY2hpbGQsIHNlbGYp
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGFmdGVyID0gc2VsZi0+cHNl
dWRvRWxlbWVudFJlbmRlcmVyKEFGVEVSKSkKLSAgICAgICAgICAgIHJldHVybiBhZnRlcjsKLW5l
eHRzaWJsaW5nOgotICAgICAgICBpZiAoc2VsZiA9PSBzdGF5V2l0aGluKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNraXBwaW5n
Q2hpbGRyZW4oc2VsZik7Ci0gICAgICAgIHNlbGYgPSBzZWxmLT5wYXJlbnRFbGVtZW50KCk7Ci0g
ICAgICAgIGlmICghc2VsZikgewotICAgICAgICAgICAgQVNTRVJUKCFjaGlsZCk7IC8vIFdlIGNh
biBvbmx5IHJlYWNoIHRoaXMgaWYgd2UgYXJlIHNlYXJjaGluZyBiZXlvbmQgdGhlIHJvb3QgZWxl
bWVudAotICAgICAgICAgICAgcmV0dXJuIDA7IC8vICB3aGljaCBjYW5ub3QgaGF2ZSBzaWJsaW5n
cwotICAgICAgICB9Ci0gICAgfQorICAgIEVsZW1lbnQqIHNlbGYgPSB0b0VsZW1lbnQob2JqZWN0
LT5ub2RlKCkpOworICAgIEVsZW1lbnQqIG5leHQgPSBza2lwRGVzY2VuZGFudHMgPyBFbGVtZW50
VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbihzZWxmLCBzdGF5
V2l0aGluKSA6IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oc2VsZiwgc3Rh
eVdpdGhpbik7CisgICAgd2hpbGUgKG5leHQgJiYgIW5leHQtPnJlbmRlcmVyKCkpCisgICAgICAg
IG5leHQgPSBza2lwRGVzY2VuZGFudHMgPyBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5n
UHNldWRvU2tpcHBpbmdDaGlsZHJlbihuZXh0LCBzdGF5V2l0aGluKSA6IEVsZW1lbnRUcmF2ZXJz
YWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8obmV4dCwgc3RheVdpdGhpbik7CisgICAgcmV0dXJuIG5l
eHQgPyBuZXh0LT5yZW5kZXJlcigpIDogMDsKIH0KIAogc3RhdGljIGJvb2wgcGxhbkNvdW50ZXIo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwgYm9v
bCYgaXNSZXNldCwgaW50JiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEl0ZW0uY3BwCmluZGV4IGYyYzJmYjMyNTZkOWYxOTYxOTZjZWQ3NWNmMWQ2Yzg1MjYyZDIw
NzguLjExMWU2YmRkNmYzODNhMmNhMTQyMzVlMTBkMjYxNmY1OGExZTI0MzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcApAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSFRNTE9MaXN0RWxlbWVudC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNs
dWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1
ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgpAQCAtOTYsMTggKzk3LDE3IEBAIHN0YXRpYyBib29s
IGlzTGlzdChOb2RlKiBub2RlKQogICAgIHJldHVybiAobm9kZS0+aGFzVGFnTmFtZSh1bFRhZykg
fHwgbm9kZS0+aGFzVGFnTmFtZShvbFRhZykpOwogfQogCisvLyBSZXR1cm5zIHRoZSBlbmNsb3Np
bmcgbGlzdCB3aXRoIHJlc3BlY3QgdG8gdGhlIERPTSBvcmRlci4KIHN0YXRpYyBOb2RlKiBlbmNs
b3NpbmdMaXN0KGNvbnN0IFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSkKIHsKKyAgICBOb2RlKiBs
aXN0SXRlbU5vZGUgPSBsaXN0SXRlbS0+bm9kZSgpOwogICAgIE5vZGUqIGZpcnN0Tm9kZSA9IDA7
Ci0KLSAgICBmb3IgKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBsaXN0SXRlbS0+cGFy
ZW50KCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKSkgewotICAgICAg
ICBOb2RlKiBub2RlID0gcmVuZGVyZXItPm5vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUpIHsKLSAg
ICAgICAgICAgIGlmIChpc0xpc3Qobm9kZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7
Ci0gICAgICAgICAgICBpZiAoIWZpcnN0Tm9kZSkKLSAgICAgICAgICAgICAgICBmaXJzdE5vZGUg
PSBub2RlOwotICAgICAgICB9CisgICAgLy8gV2UgdXNlIHBhcmVudE5vZGUgYmVjYXVzZSB0aGUg
ZW5jbG9zaW5nIGxpc3QgY291bGQgYmUgYSBTaGFkb3dSb290IHRoYXQncyBub3QgRWxlbWVudC4K
KyAgICBmb3IgKE5vZGUqIHBhcmVudCA9IGxpc3RJdGVtTm9kZS0+cGFyZW50Tm9kZSgpOyBwYXJl
bnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChpc0xpc3Qo
cGFyZW50KSkKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7CisgICAgICAgIGlmICghZmlyc3RO
b2RlKQorICAgICAgICAgICAgZmlyc3ROb2RlID0gcGFyZW50OwogICAgIH0KIAogICAgIC8vIElm
IHRoZXJlJ3Mgbm8gYWN0dWFsIDx1bD4gb3IgPG9sPiBsaXN0IGVsZW1lbnQsIHRoZW4gdGhlIGZp
cnN0IGZvdW5kCkBAIC0xMTYsNDIgKzExNiw1MSBAQCBzdGF0aWMgTm9kZSogZW5jbG9zaW5nTGlz
dChjb25zdCBSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0pCiAgICAgcmV0dXJuIGZpcnN0Tm9kZTsK
IH0KIAotUmVuZGVyTGlzdEl0ZW0qIFJlbmRlckxpc3RJdGVtOjpuZXh0TGlzdEl0ZW0oUmVuZGVy
T2JqZWN0KiBsaXN0LCBjb25zdCBSZW5kZXJMaXN0SXRlbSogaXRlbSkKKy8vIFJldHVybnMgdGhl
IG5leHQgbGlzdCBpdGVtIHdpdGggcmVzcGVjdCB0byB0aGUgRE9NIG9yZGVyLgorUmVuZGVyTGlz
dEl0ZW0qIFJlbmRlckxpc3RJdGVtOjpuZXh0TGlzdEl0ZW0oTm9kZSogbGlzdE5vZGUsIGNvbnN0
IFJlbmRlckxpc3RJdGVtKiBpdGVtKQogewotICAgIGlmICghbGlzdCkKKyAgICBpZiAoIWxpc3RO
b2RlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBp
dGVtID8gaXRlbS0+bmV4dEluUHJlT3JkZXIobGlzdCkgOiBsaXN0LT5uZXh0SW5QcmVPcmRlcihs
aXN0KTsKLSAgICB3aGlsZSAocmVuZGVyZXIpIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2Rl
KCkgJiYgaXNMaXN0KHJlbmRlcmVyLT5ub2RlKCkpKSB7CisgICAgTm9kZSogY3VycmVudCA9IGl0
ZW0gPyBpdGVtLT5ub2RlKCkgOiBsaXN0Tm9kZTsKKyAgICBjdXJyZW50ID0gRWxlbWVudFRyYXZl
cnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhjdXJyZW50LCBsaXN0Tm9kZSk7CisKKyAgICB3aGls
ZSAoY3VycmVudCkgeworICAgICAgICBpZiAoaXNMaXN0KGN1cnJlbnQpKSB7CiAgICAgICAgICAg
ICAvLyBXZSd2ZSBmb3VuZCBhIG5lc3RlZCwgaW5kZXBlbmRlbnQgbGlzdDogbm90aGluZyB0byBk
byBoZXJlLgotICAgICAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+bmV4dEluUHJlT3JkZXJB
ZnRlckNoaWxkcmVuKGxpc3QpOworICAgICAgICAgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJz
YWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGN1cnJlbnQsIGxpc3ROb2Rl
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHJlbmRl
cmVyLT5pc0xpc3RJdGVtKCkpCisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJy
ZW50LT5yZW5kZXJlcigpOworICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlz
dEl0ZW0oKSkKICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKTsK
IAotICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0SW5QcmVPcmRlcihsaXN0KTsKKyAg
ICAgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIG9wdGltaXplZCB0byBza2lwIHRoZSBjaGlsZHJl
biBvZiB0aGUgZWxlbWVudHMgd2l0aG91dCBhIHJlbmRlcmVyPworICAgICAgICBjdXJyZW50ID0g
RWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhjdXJyZW50LCBsaXN0Tm9kZSk7
CiAgICAgfQorCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBSZW5kZXJMaXN0SXRlbSogcHJl
dmlvdXNMaXN0SXRlbShSZW5kZXJPYmplY3QqIGxpc3QsIGNvbnN0IFJlbmRlckxpc3RJdGVtKiBp
dGVtKQorLy8gUmV0dXJucyB0aGUgcHJldmlvdXMgbGlzdCBpdGVtIHdpdGggcmVzcGVjdCB0byB0
aGUgRE9NIG9yZGVyLgorc3RhdGljIFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c0xpc3RJdGVtKE5v
ZGUqIGxpc3ROb2RlLCBjb25zdCBSZW5kZXJMaXN0SXRlbSogaXRlbSkKIHsKLSAgICBmb3IgKFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBpdGVtLT5wcmV2aW91c0luUHJlT3JkZXIoKTsgcmVuZGVy
ZXIgJiYgcmVuZGVyZXIgIT0gbGlzdDsgcmVuZGVyZXIgPSByZW5kZXJlci0+cHJldmlvdXNJblBy
ZU9yZGVyKCkpIHsKLSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNMaXN0SXRlbSgpKQorICAgIE5v
ZGUqIGN1cnJlbnQgPSBpdGVtLT5ub2RlKCk7CisgICAgZm9yIChjdXJyZW50ID0gRWxlbWVudFRy
YXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgbGlzdE5vZGUpOyBjdXJy
ZW50OyBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8o
Y3VycmVudCwgbGlzdE5vZGUpKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBj
dXJyZW50LT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVyIHx8IChyZW5kZXJlciAm
JiAhcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgTm9kZSogb3RoZXJMaXN0ID0gZW5jbG9zaW5nTGlzdCh0b1JlbmRlckxpc3RJdGVtKHJlbmRl
cmVyKSk7CiAgICAgICAgIC8vIFRoaXMgaXRlbSBpcyBwYXJ0IG9mIG91ciBjdXJyZW50IGxpc3Qs
IHNvIGl0J3Mgd2hhdCB3ZSdyZSBsb29raW5nIGZvci4KLSAgICAgICAgaWYgKGxpc3QtPm5vZGUo
KSA9PSBvdGhlckxpc3QpCisgICAgICAgIGlmIChsaXN0Tm9kZSA9PSBvdGhlckxpc3QpCiAgICAg
ICAgICAgICByZXR1cm4gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcik7CiAgICAgICAgIC8vIFdl
IGZvdW5kIG91cnNlbGYgaW5zaWRlIGFub3RoZXIgbGlzdDsgbGV0cyBza2lwIHRoZSByZXN0IG9m
IGl0LgotICAgICAgICAvLyBVc2UgbmV4dEluUHJlT3JkZXIoKSBoZXJlIGJlY2F1c2UgdGhlIG90
aGVyIGxpc3QgaXRzZWxmIG1heSBhY3R1YWxseQorICAgICAgICAvLyBVc2UgbmV4dEluY2x1ZGlu
Z1BzZXVkbygpIGhlcmUgYmVjYXVzZSB0aGUgb3RoZXIgbGlzdCBpdHNlbGYgbWF5IGFjdHVhbGx5
CiAgICAgICAgIC8vIGJlIGEgbGlzdCBpdGVtIGl0c2VsZi4gV2UgbmVlZCB0byBleGFtaW5lIGl0
LCBzbyB3ZSBkbyB0aGlzIHRvIGNvdW50ZXJhY3QKLSAgICAgICAgLy8gdGhlIHByZXZpb3VzSW5Q
cmVPcmRlcigpIHRoYXQgd2lsbCBiZSBkb25lIGJ5IHRoZSBsb29wLgorICAgICAgICAvLyB0aGUg
cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oKSB0aGF0IHdpbGwgYmUgZG9uZSBieSB0aGUgbG9vcC4K
ICAgICAgICAgaWYgKG90aGVyTGlzdCkKLSAgICAgICAgICAgIHJlbmRlcmVyID0gb3RoZXJMaXN0
LT5yZW5kZXJlcigpLT5uZXh0SW5QcmVPcmRlcigpOworICAgICAgICAgICAgY3VycmVudCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8ob3RoZXJMaXN0KTsKICAgICB9CiAg
ICAgcmV0dXJuIDA7CiB9CkBAIC0xNjIsNyArMTcxLDYgQEAgaW5saW5lIGludCBSZW5kZXJMaXN0
SXRlbTo6Y2FsY1ZhbHVlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG1fZXhwbGljaXRWYWx1ZTsK
IAogICAgIE5vZGUqIGxpc3QgPSBlbmNsb3NpbmdMaXN0KHRoaXMpOwotICAgIFJlbmRlck9iamVj
dCogbGlzdFJlbmRlcmVyID0gbGlzdCA/IGxpc3QtPnJlbmRlcmVyKCkgOiAwOwogICAgIEhUTUxP
TGlzdEVsZW1lbnQqIG9MaXN0RWxlbWVudCA9IChsaXN0ICYmIGxpc3QtPmhhc1RhZ05hbWUob2xU
YWcpKSA/IHN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnQqPihsaXN0KSA6IDA7CiAgICAgaW50
IHZhbHVlU3RlcCA9IDE7CiAgICAgaWYgKG9MaXN0RWxlbWVudCAmJiBvTGlzdEVsZW1lbnQtPmlz
UmV2ZXJzZWQoKSkKQEAgLTE3MCw3ICsxNzgsNyBAQCBpbmxpbmUgaW50IFJlbmRlckxpc3RJdGVt
OjpjYWxjVmFsdWUoKSBjb25zdAogCiAgICAgLy8gRklYTUU6IFRoaXMgcmVjdXJzZXMgdG8gYSBw
b3NzaWJsZSBkZXB0aCBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0LgogICAgIC8vIFRoYXQncyBu
b3QgZ29vZCAtLSB3ZSBuZWVkIHRvIGNoYW5nZSB0aGlzIHRvIGFuIGl0ZXJhdGl2ZSBhbGdvcml0
aG0uCi0gICAgaWYgKFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c0l0ZW0gPSBwcmV2aW91c0xpc3RJ
dGVtKGxpc3RSZW5kZXJlciwgdGhpcykpCisgICAgaWYgKFJlbmRlckxpc3RJdGVtKiBwcmV2aW91
c0l0ZW0gPSBwcmV2aW91c0xpc3RJdGVtKGxpc3QsIHRoaXMpKQogICAgICAgICByZXR1cm4gcHJl
dmlvdXNJdGVtLT52YWx1ZSgpICsgdmFsdWVTdGVwOwogCiAgICAgaWYgKG9MaXN0RWxlbWVudCkK
QEAgLTQyNywxMCArNDM1LDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6ZXhwbGljaXRWYWx1ZUNo
YW5nZWQoKQogICAgIGlmIChtX21hcmtlcikKICAgICAgICAgbV9tYXJrZXItPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIE5vZGUqIGxpc3ROb2RlID0gZW5jbG9zaW5n
TGlzdCh0aGlzKTsKLSAgICBSZW5kZXJPYmplY3QqIGxpc3RSZW5kZXJlciA9IDA7Ci0gICAgaWYg
KGxpc3ROb2RlKQotICAgICAgICBsaXN0UmVuZGVyZXIgPSBsaXN0Tm9kZS0+cmVuZGVyZXIoKTsK
LSAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBpdGVtID0gdGhpczsgaXRlbTsgaXRlbSA9IG5leHRM
aXN0SXRlbShsaXN0UmVuZGVyZXIsIGl0ZW0pKQorICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0qIGl0
ZW0gPSB0aGlzOyBpdGVtOyBpdGVtID0gbmV4dExpc3RJdGVtKGxpc3ROb2RlLCBpdGVtKSkKICAg
ICAgICAgaXRlbS0+dXBkYXRlVmFsdWUoKTsKIH0KIApAQCAtNDU3LDcgKzQ2Miw3IEBAIHZvaWQg
UmVuZGVyTGlzdEl0ZW06OmNsZWFyRXhwbGljaXRWYWx1ZSgpCiAgICAgZXhwbGljaXRWYWx1ZUNo
YW5nZWQoKTsKIH0KIAotc3RhdGljIFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c09yTmV4dEl0ZW0o
Ym9vbCBpc0xpc3RSZXZlcnNlZCwgUmVuZGVyT2JqZWN0KiBsaXN0LCBSZW5kZXJMaXN0SXRlbSog
aXRlbSkKK3N0YXRpYyBSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNPck5leHRJdGVtKGJvb2wgaXNM
aXN0UmV2ZXJzZWQsIE5vZGUqIGxpc3QsIFJlbmRlckxpc3RJdGVtKiBpdGVtKQogewogICAgIHJl
dHVybiBpc0xpc3RSZXZlcnNlZCA/IHByZXZpb3VzTGlzdEl0ZW0obGlzdCwgaXRlbSkgOiBSZW5k
ZXJMaXN0SXRlbTo6bmV4dExpc3RJdGVtKGxpc3QsIGl0ZW0pOwogfQpAQCAtNDY1LDE4ICs0NzAs
MTggQEAgc3RhdGljIFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c09yTmV4dEl0ZW0oYm9vbCBpc0xp
c3RSZXZlcnNlZCwgUmVuZGVyT2JqZWN0KiBsaXMKIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnVwZGF0
ZUxpc3RNYXJrZXJOdW1iZXJzKCkKIHsKICAgICBOb2RlKiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xp
c3QodGhpcyk7Ci0gICAgQVNTRVJUKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5yZW5kZXJlcigpKTsK
LSAgICBpZiAoIWxpc3ROb2RlIHx8ICFsaXN0Tm9kZS0+cmVuZGVyZXIoKSkKKyAgICAvLyBUaGUg
bGlzdCBub2RlIGNhbiBiZSB0aGUgc2hhZG93IHJvb3Qgd2hpY2ggaGFzIG5vIHJlbmRlcmVyLgor
ICAgIEFTU0VSVChsaXN0Tm9kZSk7CisgICAgaWYgKCFsaXN0Tm9kZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgYm9vbCBpc0xpc3RSZXZlcnNlZCA9IGZhbHNlOwotICAgIFJlbmRlck9iamVjdCog
bGlzdCA9IGxpc3ROb2RlLT5yZW5kZXJlcigpOwogICAgIEhUTUxPTGlzdEVsZW1lbnQqIG9MaXN0
RWxlbWVudCA9IChsaXN0Tm9kZSAmJiBsaXN0Tm9kZS0+aGFzVGFnTmFtZShvbFRhZykpID8gc3Rh
dGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudCo+KGxpc3ROb2RlKSA6IDA7CiAgICAgaWYgKG9MaXN0
RWxlbWVudCkgewogICAgICAgICBvTGlzdEVsZW1lbnQtPml0ZW1Db3VudENoYW5nZWQoKTsKICAg
ICAgICAgaXNMaXN0UmV2ZXJzZWQgPSBvTGlzdEVsZW1lbnQtPmlzUmV2ZXJzZWQoKTsKICAgICB9
Ci0gICAgZm9yIChSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHByZXZpb3VzT3JOZXh0SXRlbShpc0xp
c3RSZXZlcnNlZCwgbGlzdCwgdGhpcyk7IGl0ZW07IGl0ZW0gPSBwcmV2aW91c09yTmV4dEl0ZW0o
aXNMaXN0UmV2ZXJzZWQsIGxpc3QsIGl0ZW0pKSB7CisgICAgZm9yIChSZW5kZXJMaXN0SXRlbSog
aXRlbSA9IHByZXZpb3VzT3JOZXh0SXRlbShpc0xpc3RSZXZlcnNlZCwgbGlzdE5vZGUsIHRoaXMp
OyBpdGVtOyBpdGVtID0gcHJldmlvdXNPck5leHRJdGVtKGlzTGlzdFJldmVyc2VkLCBsaXN0Tm9k
ZSwgaXRlbSkpIHsKICAgICAgICAgaWYgKCFpdGVtLT5tX2lzVmFsdWVVcFRvRGF0ZSkgewogICAg
ICAgICAgICAgLy8gSWYgYW4gaXRlbSBoYXMgYmVlbiBtYXJrZWQgZm9yIHVwZGF0ZSBiZWZvcmUs
IHdlIGNhbiBzYWZlbHkKICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGFsbCB0aGUgZm9sbG93
aW5nIG9uZXMgaGF2ZSB0b28uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRl
bS5oCmluZGV4IGQ4OGZjNDk4NmQ1NmRjNWIzMmNmMDU5ZWUxZDVmODQxZDE3MGM4OWUuLjdkZDNl
YWY4OTQyYjgxNjQ2NjE2NmMxYWQ0Yzk4M2RkOWJmNGE5MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgdXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKTsKIAotICAgIHN0YXRpYyBSZW5kZXJMaXN0
SXRlbSogbmV4dExpc3RJdGVtKFJlbmRlck9iamVjdCogbGlzdFJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJMaXN0SXRlbSogPSAwKTsKKyAgICBzdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIG5leHRMaXN0SXRl
bShOb2RlKiwgY29uc3QgUmVuZGVyTGlzdEl0ZW0qID0gMCk7CiAKIHByaXZhdGU6CiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckxpc3RJ
dGVtIjsgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IGIxMzFhMjllN2FlY2U0MWY0OTE5ZGZkNGNiMzUzZjEwN2IzOTg0MTIu
LjNmNjI0M2IzNmYyN2ViNWY5MzRjMDZmMWQ3ZWU1NGEzYTkyOGFiZWIgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAxMy0wNC0wOSAgQW5kcmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KKwor
ICAgICAgICBVc2UgRE9NIG9yZGVyaW5nIGZvciBsaXN0IGNvdW50cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzUyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRWxsaW90dCBTcHJlaG4uCisKKyAgICAgICAgVGhlIGZhc3QvZG9tL3NoYWRvdy9zaGFk
b3ctYW5kLWxpc3QtZWxlbWVudHMtZXhwZWN0ZWQuaHRtbCBoYXMgY2hhbmdlZCBiZWNhdXNlIHRo
ZSBsaXN0IGl0ZW1zCisgICAgICAgIGluc2lkZSB0aGUgc2hhZG93IHRyZWUgbm8gbG9uZ2VyIHNl
ZSB0aGUgcm9vdCA8b2w+IGVsZW1lbnQuCisgICAgICAgIFRoZSB0ZXN0IGZhc3QvbGlzdHMvcG9z
aXRpb25lZC1jb3VudC1jcmFzaC5odG1sIGhhcyB0aGUgY29ycmVjdCByZW5kZXJpbmcgYWZ0ZXIg
Y2hhbmdpbmcKKyAgICAgICAgdGhlIGxpc3QgY291bnRpbmcgdG8gYmUgaW4gRE9NIG9yZGVyLgor
CisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1hbmQtbGlzdC1lbGVtZW50cy1leHBl
Y3RlZC5odG1sOgorICAgICAgICAqIGZhc3QvbGlzdHMvcG9zaXRpb25lZC1jb3VudC1jcmFzaC1l
eHBlY3RlZC50eHQ6CisKIDIwMTMtMDQtMDkgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLIGdhcmRlbmluZy4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYW5kLWxpc3QtZWxlbWVudHMtZXhw
ZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctYW5kLWxpc3Qt
ZWxlbWVudHMtZXhwZWN0ZWQuaHRtbAppbmRleCA5M2ViZjlhZWRkOTNkY2ViMjVkZmJjYjA2ODk0
OTczZmI5MmEzMjllLi5kYmM4OGJjNmYyZThkMDQyOWE1NmMzMWUxYjU1NmQ3MGIzOTQ4ODVjIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWFuZC1saXN0LWVs
ZW1lbnRzLWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3No
YWRvdy1hbmQtbGlzdC1lbGVtZW50cy1leHBlY3RlZC5odG1sCkBAIC0yMiwxOCArMjIsMjMgQEAK
IC8vICAgPGxpPkM8L2xpPgogLy8gPC9vbD4gICAKIHZhciBob3N0RXF1aXZhbGVudCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJob3N0RXF1aXZhbGVudCIpOwordmFyIHNoYWRvd0xpc3RSb290
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsKK3NoYWRvd0xpc3RSb290LnN0eWxlLnBh
ZGRpbmdMZWZ0ID0gIjBweCI7Citob3N0RXF1aXZhbGVudC5hcHBlbmRDaGlsZChzaGFkb3dMaXN0
Um9vdCk7CiAKIHZhciBjaGlsZFggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOwogY2hp
bGRYLmlubmVySFRNTCA9ICJYIjsKLWhvc3RFcXVpdmFsZW50LmFwcGVuZENoaWxkKGNoaWxkWCk7
CitjaGlsZFguc3R5bGUubGlzdFN0eWxlUG9zaXRpb24gPSAiaW5zaWRlIjsKK3NoYWRvd0xpc3RS
b290LmFwcGVuZENoaWxkKGNoaWxkWCk7CiAKIHZhciBjaGlsZFVsID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgidWwiKTsKIGNoaWxkVWwuaW5uZXJIVE1MID0gIkIiOwotaG9zdEVxdWl2YWxlbnQu
YXBwZW5kQ2hpbGQoY2hpbGRVbCk7CitzaGFkb3dMaXN0Um9vdC5hcHBlbmRDaGlsZChjaGlsZFVs
KTsKIAogdmFyIGNoaWxkWSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7CiBjaGlsZFku
aW5uZXJIVE1MID0gIlkiOwotaG9zdEVxdWl2YWxlbnQuYXBwZW5kQ2hpbGQoY2hpbGRZKTsKK2No
aWxkWS5zdHlsZS5saXN0U3R5bGVQb3NpdGlvbiA9ICJpbnNpZGUiOworc2hhZG93TGlzdFJvb3Qu
YXBwZW5kQ2hpbGQoY2hpbGRZKTsKIDwvc2NyaXB0PgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9saXN0cy9wb3NpdGlvbmVkLWNvdW50LWNyYXNoLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbGlzdHMvcG9zaXRpb25lZC1jb3VudC1jcmFzaC1l
eHBlY3RlZC50eHQKaW5kZXggOWZjMDY2ZDVkMTFmMWUwNzg4NDcxMTAxMTRlNzdlMjAxMGExNjdk
MC4uY2U0MGMwOGNiODRmODNmNDZkMDdjNDU5NzNiNDFkODY5NWM5OGVlZiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9saXN0cy9wb3NpdGlvbmVkLWNvdW50LWNyYXNoLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xpc3RzL3Bvc2l0aW9uZWQtY291bnQtY3Jhc2gtZXhw
ZWN0ZWQudHh0CkBAIC0yLDUgKzIsNSBAQCBJSQogCiAKIEZvciBtYW51YWwgdGVzdDogSWYgeW91
IHNlZSBubyBjcmFzaCBhbmQgIklJIElJIiwgaXQgbWVhbnMgdGhpcyB0ZXN0IFBBU1MuCi1GQUlM
IGxpc3QgbWFya2VyIHNob3VsZCBiZSBJSS4gV2FzIEkuCitQQVNTIGxpc3QgbWFya2VyIGlzIElJ
LgogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>